JavaScript中的秘密
谈到攻击面那就少不了JavaScript
,现如今总能遇到前后端分离网站,接口与各种凭证Key也可能会被放在前端文件中;利用jsfinder
这类工具找出隐藏的接口或地址已是人人能掌握,我也不重复谈论这些了。
直接就上工具吧:
-
https://github.com/BishopFox/jsluice -
https://github.com/ttstormxx/jjjjjjjjjjjjjs -
https://github.com/InitRoot/BurpJSLinkFinder -
https://github.com/gh0stkey/HaE -
https://github.com/RetireJS/retire.js
jjjjjjs
和jsluice
这类工具都是通过正则提取JavaScript
中url
信息;
jjjjjjjjjjjjjs
可以分析接口列表,自动结合指纹识别和fuzz
获取正确api根。
jsluice
是我更喜欢的工具,使用的是语法树节点方式提取,这样可能会遗漏但是结果会更准确些。至于某些站点将url动态的方式传入,语法树也没办法解决-.- 我也一直在寻找解决办法,希望有大佬能解惑。
Retire.js
是一款BurpSuite
被动插件,被动扫描已知JavaScript
库的漏洞情况。对某些存在漏洞版本的组件还是挺有用的,可以根据获取到的版本信息再去找组件漏洞。Retire.js (retirejs.github.io)
:
这些插件有点用似乎又没啥用,因为它给你的结果不是完全有效的。大多数时候还是需要手工去测试与查漏。
正文中隐藏的参数
假设,你通过上述这些工具找到了一些接口那么会出现两种情况:
-
可以未授权 -
需要权限校验。
GET
的情况下是不需要提交参数与数据的,但是POST
中的参数从哪里来?
这一小节就是解决这个问题的。
Param Miner
此扩展用于发现隐藏的、开发遗留的参数。它对于查找 Web 缓存中毒漏洞特别有用Practical Web Cache Poisoning | PortSwigger Research。
插件在BAppstore
就可以安装
使用方法:对着某个请求包,或者sitemap中某个站点直接右键
我这里选择Guess everything!
会弹出来三个配置项,分别是GET/Cookie/Headers
这些位置的参数枚举配置,一般情况下默认就可以;内置了一些单词,并且也会从上下文中取得单词并生成。
截图里可以看到最多在一个GET
请求中添加了1036
个参数
这是总的配置样子
官方并没有详细的说明文档,参数只能通过阅读源码理解,有些参数至今仍然觉得是个谜,下面展示一些:
参数名称 | 描述 |
---|---|
Add 'fcbz' cachebuster 添加缓存终结者 | 为每个请求添加 fcbz=1 URL 参数,以避免缓存命中。 |
learn observed words 学习观察到的单词 | 从响应中提取单词并将它们保存到当前会话的参数单词列表中。 |
only report unique params仅报告唯一参数 | https://github.com/PortSwigger/param-miner/blob/26db2f47b2e7852b977e776ebe13c1b887474b32/src/burp/ParamAttack.java#L256 |
use basic wordlist 使用基本单词表 | 使用 Param Miner 存储库中的https://github.com/PortSwigger/param-miner/blob/master/resources/headers 和https://github.com/PortSwigger/param-miner/blob/master/resources/params单词列表。 |
use custom wordlist 使用自定义单词列表 | 不言自明。 |
bruteforce 暴力破解 | 当单词列表用完时,切换到永无止境的原始暴力破解 |
dynamic keyload 动态键加载 | 理解它,首先需要了解 Param Miner 在内部是如何工作的。主要与 ParamGuesser.addNewKeys 功能有关。 |
max one per host+status每个主机最多一个 + 状态 | ??? |
enable auto-mine 启用自动挖掘 | 将对在 Proxy 选项卡中处理的每个响应执行 launchScan。可以把它想象成让 Param Miner 在完成每个范围内请求时按下 Guess * 按钮。此外,如果没有它,所有其他 auto-* 复选框都不会生效。 |
auto-mine cookies 自动挖掘 Cookie | 根据代理流量自动发起 cookie 猜测攻击 |
auto-nest params 自动嵌套参数 | ??? https://github.com/PortSwigger/param-miner/blob/26db2f47b2e7852b977e776ebe13c1b887474b32/src/burp/BurpExtender.java#L316 |
try cache poison 尝试缓存中毒 | 检测到标头时,测试它是否可用于 Web 缓存中毒攻击 |
try -_ bypass 尝试 -_ 绕过 | 对于每个至少带有一个破折号的 HTTP 标头,Param Miner将 - 用下划线 _ 替换破折号,并将生成的标头添加到单词列表中。 |
rotation interval 旋转间隔 | ??? |
force bucketsize 强制存储桶大小 | 强制在单个数据包中针对单个 URL 测试多个参数 |
max param length 最大参数长度 | 从响应中解析的参数的最大长度。长度较大的参数被截断到此限制,但不会被忽略!注意:它不会影响任何单词列表提供的参数。.此外,在确定存储桶大小时,最大参数长度用作试验有效负载中虚拟参数的长度。 |
Add dynamic cachebuster 添加动态 cachebuster | 在通过 Burp 的手动测试工具发送的任何请求中,自动将缓存破坏器添加到常用标头中。参考:检测未加密的查询字符串 |
skip boring words 跳过无聊的单词 | 跳过无聊的单词列表https://github.com/PortSwigger/param-miner/blob/master/resources/boring_headers. |
response 响应 | 从 HTTP 响应中获取单词,对它们进行规范化并添加到当前会话的参数单词列表中。 |
use bonus wordlist 使用奖励词表 | 使用 Param Miner 的 repo 中的单词列表。通常用于包含 functions 和 words 单词列表,但如果 use basic wordlist 未选中,它也会根据参数类型添加或 params 添加 headers 。 |
custom wordlist path 自定义单词列表路径 | 用户提供的参数列表的路径。注意:只有在 use custom wordlist 选中后才会生效。 |
skip uncacheable 跳过不可缓存 | 如果在响应中找不到缓存字符串,则跳过 cookie 和标头参数。如果正在寻找缓存中毒攻击,并且想要跳过无论如何都不会缓存的响应,也许这很有用。 |
max one per host每个主机最多一个 | 与速率限制相关。也许不允许一次对给定主机运行超过 1 次攻击。 |
scan identified params 扫描识别的参数 | .在已识别的参数上运行burpscanner。 |
auto-mine headers 自动挖矿标题 | 根据代理流量自动发起标头猜测攻击 |
auto-mine params 自动挖掘参数 | 根据代理流量自动发起参数猜测攻击 |
fuzz detect 模糊检测 | 追加<a`'“${{输入值以尝试检测更好的隐藏参数。默认情况下,它被禁用,因为这样的头扰乱了包括某个众所周知的社交网络在内的各种系统。某些参数将在SQL语句等中使用,但不会明显影响响应。基于模糊的检测试图导致后端语法错误,以增加出现可见响应差异的可能性。 |
try method flip 尝试方法翻转 | 对于每个非GET请求,都将使用Burp的toggleRequestMethod,该方法可用于在GET和POST之间切换请求的方法。根据需要在URL查询字符串和消息正文之间重新定位参数,并根据需要创建或删除Content-Length标头。最后导致这个分支被执行,它试图通过将非GET请求作为GET请求来识别新的参数。 |
thread pool size 线程池大小 | 设置并发攻击的最大数量。 |
rotation increment 旋转增量 | https://github.com/PortSwigger/param-miner/blob/322d9388192e94035eb3ccde9b4b98c7f3e81335/src/burp/ParamGuesser.javahttps://github.com/PortSwigger/param-miner/blob/322d9388192e94035eb3ccde9b4b98c7f3e81335/src/burp/ParamGuesser.java |
max bucketsize 最大存储桶大小 | https://github.com/PortSwigger/param-miner/blob/26db2f47b2e7852b977e776ebe13c1b887474b32/src/burp/ParamAttack.java#L226. 一个请求中探测的最大参数数。请注意,对于 JSON 参数,最大存储桶大小为 256。 |
如果没有特别需要配置默认即可,使用插件后可能什么问题也找不到,别担心,这很正常😀即便找到了也不一定有用,记住这一篇文章,一切且在增加攻击面,不放过任何可能。
如果扫描到漏洞,该插件只会告诉你参数对响应包的影响,导致的问题的原因还需要自己花时间分析。
GAP
是 getAllParams
扩展的演变。它不仅会找到更多潜在的参数供您调查,还会找到潜在的链接来尝试这些参数,并生成用于模糊测试的目标特定单词列表。
xnl-h4ck3r/GAP-Burp-Extension: Burp Extension to find potential endpoints. parameters, and generate a custom target wordlist (github.com)
Install
-
下载Jython Standalone版 -
在 Burp
中> 扩展设置 ->Python
环境,设置Jython
位置 -
到 Jython
位置打开命令行,输入java -jar jython-standalone-2.7.3.jar -m ensurepip
-
运行 java -jar jython-standalone-2.7.3.jar -m pip install -r requirements.txt
安装GAP
所需依赖 -
将 GAP
加入到Burp
扩展中
GAP
功能点虽然多但并不复杂,大概就是告诉插件从哪里取参数,花点时间就能玩转这个插件。
这类参数收集的插件还有诸多,我只介绍GAP
与Param Miner
的组合,其余的有:
-
https://github.com/portswigger/paramalyzer -
https://github.com/hisxo/ReconAIzer (GPT协助) -
Burp→ Site map → xxx.com → Engagement tools → Analyz target -
https://github.com/s0md3v/Arjun -
https://github.com/Sh1Yo/x8
其他信息收集
-
在挖掘SRC时如果希望针对某家开发特性,收集特定的API接口参数与目录,可以使用: -
https://github.com/gh0stkey/CaA -
https://github.com/QdghJ/burp_data_collector
-
-
通过 Wayback Machine 、Common Crawl 、Alien Vault OTX、URLScan 等互联网时光机来发现网站历史快照 -
https://github.com/xnl-h4ck3r/waymore -
什么也没发现也别灰心,因为不是所有小网站都会收录的,更多是看运气😀
-
-
3. 隐藏的表单字段
有些站点会将隐藏的表单字段当作参数处理,从而会导致xss这类漏洞
原文始发于微信公众号(一位不愿透露姓名的热心网友):技巧 | Burp攻击面拓展与实用工具
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论