作者:拿破仑   (暗影技术团队) 
转载必须注明作者和团队网址。原文:

本来是有个这个洞的站的,可是没能撸下,现实往往比理想状态要残酷。

所以这篇文章就是用我自己搭的一个环境来说下本人对php本地包含利用的小小见解,欢迎指正。

---------------------------这是社长的小jj----------------------------------

    现在假设洞是存在的,可以读任意知道路径的文件(没有open_basedir的限制)。
利用方法:1,读配置之类的文件文件

    读boot.ini

php本地包含的利用

,这里用的绝对路径。

    读config  

php本地包含的利用

,这里的config文件在上一层目录,所以这里用了../来跳到上一层。

    很多时候,变量的名字并不会直接就它包含它的完整文件名,而是在代码中再给它添加上后缀。这样的话,要是想将想读的文件包含进来,就要进行截断,将它再加进来的后缀去掉。

截断的方式可以是在后面加%00,如/dvwa/vulnerabilities/fi/?page=C:\boot.ini%00。5.4之后这个截断的特性去掉了,不过依然有办法的。就是利用操作系统对目录最大长度的的限制,当超过最长长度就会对后面的字符丢弃,所以可以构造一个长目录。

由于本人没测试过这种方法,就不扯了,《白帽子》里有具体的。

其实这些方法在上传的时候也有用。。。
    有时候rp爆发了,一下子就把shadow文件读出来了也是有的。。上个图

php本地包含的利用


2,执行php代码

    这个是比较好玩的,要是包含的文件中有php代码,它会按php来解析


php本地包含的利用

像这样,可以执行phpinfo(),在这里也可以看到很多信息。

既然能解析php代码,要是再能上传一个文件(包含写马的php代码),这样就很容易得到一个webshell了。当然还是要有写的权限的。

    但现实经常是找到了一个lfi漏洞,但没能上传。但还是可以利用服务器上的文件的,找一些可以控制内容的文件(如log,environ)。

在说如何控制这些文件的内容的时候,还有一个大前提,就是如何找到这些文件。要是在默认的目录当然好办了,但现实还是这么残酷,往往都不是。

一个一个的猜的话也没问题只要你喜欢,可以用工具进行爆破试试,用burp抓包,send to intruder

php本地包含的利用

在想爆破的地方加上那个符号后,再加载payload(强大的字典)就可以进行了。

一般来说根据返回的状态码就可以知道文件是否存在,但很多站不管存在不存在都只会给你返回200。

要是这种情况的话,可以看一下它的返回长度,用这个来辨别。

要是还一样。。。你懂的。还有机油说panoptic很吊(也是同样的功能)

    经过爆破之后,可能就找到了日志文件的路径,包含看看

php本地包含的利用


这里可以看到,access日志文件里的内容是客户端发出的请求,这可以控制,如:/vulnerabilities/fi/?page=<?php phpinfo();?>,进行这样的请求就会记录下php代码。

这里有点蛋疼的是这日志里没有use-agent其它之类的信息,因为在火狐,ie8直接这样输入的话,会对<>?这些符号进行编码,不过这个用ie6貌似没事。

最后就是日志里有ua的记录,这样改一下包里的ua就可以将代码弄进去。另一步说,包含日志文件也不是什么上策,毕竟日志文件可能很大,会造成请求超时,但是没办法了就这么干吧。

/proc/self/environ 这个文件是在linux中的,要是可读,也是改一下ua就可以控制内容。

总的来说就是找到文件,设法控制它的内容,包含,解析php代码。

==============================社长jj变身====================================

。。,终于写完了,果然不是写文章的料。有错希望大牛提醒

xxser  送朵鲜花  并说:包含日志文件的时候不能%20啊.