在 Fuzztag 被大家接受并广泛使用之后,一个老需求变得急迫了起来。
从 Web Fuzzer 刚投入使用 Fuzztag 还在内测时候,这类需求一直在 Todo List 中,随着 Fuzztag 重构以及正式的文档推出,数据提取与下载的需求变的愈发急迫。
“即使 fuzztag 能批量发包,处理数据仍然需要用户手动下载所有数据,并编写脚本”,当然这肯定是我们不希望看到的。
提取数据的功能其实非常实际,我们通过 {{int(1-1000|4)}}
可以遍历得到一定量的数据,可能是遍历用户,也可能是遍历订单号以获取特定数据。
通常情况下,我们要提取的数据存在于响应信息中的某些位置,这些位置在每个网站中都不一样,但是这些数据往往是我们的 “工作成果”
当我们要确认漏洞影响时,一般需要编写脚本,提取数据。但是如果能实现一种非常方便的提取数据的规则生成,就会很快解决这个问题。
30秒学会提取爆破数据
00:33
提取数据详细步骤分解
生成前缀、后缀正则表达式以提取数据
如果要精确提取一个位置,我们可能并不能确定生成的内容是否在 html 里,所以 xpath 这类的技术其实并不能适应这种情况。
但是在大多数时候,我们选中数据的前缀后缀往往是“唯一”的。
所以要提取所有爆破数据中的 “选中数据”,简单地使用鼠标在编辑器中选中这部分数据即可。
Yakit 根据选中数据前后位置,提取出前后缀正则,根据前后缀正则在每一个类似请求中把数据提取出来。
也可以根据选中内容提取正则表达式
类似的方式,我们直接选中想要的数据之后,再点击【单正则提取】,就可以仅生成选中数据转化的正则:
提取数据:一键提取到右边文本框中
在点击右上角的提取数据后,可以在右边文本框中看到详细的提取内容,此时可以 【下载文件】 直接把提取到的数据作为 txt
文本信息保存在本机,实现快速提取数据。
Q&A:如何生成正则?
通过选中位置计算出前后的数据,如果数据中包含与正则冲突的特殊字符,进行编码,使用 regexp.Quote
函数 + 泛化规则进行特殊字符编码。
- 我们把
(
编码为\(
避免和正则中的分组冲突 - 我们把
.
编码为\.
避免全匹配符冲突 - 我们把
{
编码为\{
避免正则中的重复标记冲突 - ...
- 除此之外,我们也会对捕获的多个数字组成的正则进行特殊化处理:例如日期 2022-10-31 被捕获后会变成
\d{4}-\d{2}-\d{2}
- 换行一般会分为两种
\r\n
(CRLF)和\n
(LF)我们通过,修改并放宽正则规则为\r?\n?
以达到最大兼容性规则,可以实现换行友好多行内容提取与适配。
当我们实现上述编码后,可以快速提取合适的正则进行数据提取与下载。
Yak官方资源
Yak 语言官方教程:
https://yaklang.com/docs/intro/
Yakit 视频教程:
https://space.bilibili.com/437503777
Github下载地址:
https://github.com/yaklang/yakit
Yakit官网下载地址:
https://yaklang.com/
Yakit安装文档:
https://yaklang.com/products/download_and_install
Yakit使用文档:
https://yaklang.com/products/intro/
常见问题速查:
https://yaklang.com/products/FAQ