Web_XCTF_WriteUp | Web_php_include
题目

分析
对 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 (四种解法)-笑花大王-博客园

浙公网安备 33010602011771号