-
-
[翻译]使用Burp Suite执行更复杂的Intruder攻击
-
发表于: 2017-12-30 15:27 5572
-
最近我做了一个渗透测试,其中并没有太多的攻击面,但有一个防火墙设备和一种基于浏览器的SSL VPN服务。除了从LinkedIn收集的一些用户名之外,没有太多事情能做,这似乎是一个值得尝试的入口。我希望能通过password spray(解释见文后译者注)破解这些账户,而且我也想要一些可能已经在设备上定义的本地用户,比如root、fwAdmin、admin等。我不太担心这些账号会被锁定,所以最后我就试着对这些账号直接暴力破解。
但是问题出现了,现实总是如此。即便使用了TLS加密,该设备在HTTP请求中也没有提交密码。此处使用了某种摘要算法,看起来像是MD5:
此外,目标URL与其来源表单不同。查看登录过程,我得出结论,我首先需要请求该表单,收集多个值,最后使用我提供的密码进行某种摘要计算。下面的内容来自于登录页面:
我看了一下“processButn()”,确定我至少需要param1,id和sessId来构建响应。我的第一反应是用Burp的宏和参数提取功能来解决这个问题。这使我更进一步,但我遇到了一些困难。具体来说,我无法实现JavaScript是如何处理有效载荷或递归grep操作的。
那么,JavaScript在干什么呢?
它设置了几个cookie,并计算出一个CHAP响应。查看chapDigest()函数,我发现表单中的param1和id值从ASCII十六进制转换为字节,并与密码拼接,最后生成一个md5和并转换回ASCII十六进制。这不是非常复杂,但是跨越了两个请求,sessId也从表单字段移动到了cookie中,而且我不太想深入理解Burp内部机理。
幸运的是,我之前写了一个扩展,我经常用这个扩展来帮助解决这些问题。你可以在这里下载:https://github.com/GeoffWalton/Burp-Command/blob/master/externalCommand.rb。
基本上,它允许我使用外部命令处理或生成Intruder的有效载荷。所以首先我需要确保能够正确地计算摘要。我没有设备来实际测试一个有效的登录,所以我只是使用浏览器进行请求,在本地脚本中测试参数,并验证与我的浏览器生成的摘要相匹配的摘要。
我本来可以复制脚本行为,但是从设备上获取JavaScript更容易。我找到了我需要的东西,然后复制并粘贴到本地的js[c]文件中:
除了最后一行之外的所有内容都直接从设备中取出!我只需要拿出参数,并打印出摘要结果。
现在我需要一种获取值的方法!我在Burp中使用了“copy-as curl”,并将结果合并到一个很小的shell脚本中。这个脚本将是我从扩展中调用的实际命令,它将随后调用jsc运行里面的JavaScript代码。最后,它将会合并输出,并且最后的结果便于用作Intruder有效载荷:
如果页面结构很复杂,那么包含一些XPATH查询的Ruby或Python脚本可能是一个更清晰明了的方法,但是在这种情况下,把它们放到bash中会更快。
这个脚本返回了一个没有换行符的单个字符串,其中包括大部分我在做认证时(在标准输入上提供密码)需要的参数。值得指出的是,curl是用Burp作为代理。这意味着Burp会记录这些请求,所以如果客户需要,我会保留完整的请求历史记录。现在我只需要设置Intruder攻击。
第一步:发送一个实际的认证请求给Intruder:
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课
赞赏
- [翻译]老木马新玩法:Qbot最新攻击手法探究 19010
- [翻译]Crimson远控木马分析 24657
- [翻译]DLL劫持自动化检测 24392
- [翻译]使用Frida框架hook安卓native方法(适合新手) 26743
- [翻译]蓝军测试中PROXY protocol的应用 8319