题目
分析
对 php 代码进行分析:
<?php // php开头
show_source(__FILE__); // 对当前源文件进行高亮显示
echo $_GET['hello']; // 收集get表单中hello的数据输出
$page=$_GET['page']; // 将get表单中page的数据赋给变量page
while (strstr($page, "php://")) { // 当page变量中含有字符串“php://”则进入循环。strstr查找“php://”在page变量中是否存在
$page=str_replace("php://", "", $page); // 将page变量中的“php://”删去
}
include($page); // 在服务器执行PHP文件之前插入page变量内容
?> // php结尾
代码中有 include()
函数,猜测是文件包含漏洞。
代码里有对 PHP 流 php://
的过滤,虽然不清楚这里的 PHP 版本,但先试试 data://
封装器:
URL 编码一次:
提交执行:
确定当前 PHP 版本为 5.3.10。
通过 data://
数据流 + php 命令执行函数查询当前工作目录下的内容(二选一):
URL 编码后执行:
根据文件名猜测 flag 在 fl4gisisish3r3.php 文件中,更改 php 命令打开文件:
编码执行结果:
拿到 flag。
使用 system()
命令同理。
看大佬的 WP 提到可以根据 strstr()
和 str_replace()
对大小写的敏感差异采用 PHP://
绕过过滤,试了一下发现不行,原因不明:
Flag
ctf{876a5fca-96c6-4cbd-9075-46f0c89475d2}
参考
PHP 教程-菜鸟教程
PHP 代码审计-CTF Wiki
PHP伪协议总结-我汤姆要报警了-SegmentFault思否
当我们看到phpinfo时在谈论什么-春告鳥-博客园
PHP中常见的命令执行函数与代码执行函数_-passthru-CSDN
CTF-WEB:PHP 伪协议-乌漆WhiteMoon-博客园
攻防世界-Web_php_include (四种解法)-笑花大王-博客园