渗透测试之文件包含漏洞
一、文件包含漏洞原理
开发人员将需要重复调用的函数写入一个文件,对该文件进行包含时产生的操作。文件包含函数加载的参数没有经过过滤或严格定义,可以被用户控制,包含其他恶意文件,导致了执行非预期代码。
eg:
<?php
$filename=$_GET['filename'];
include($filename);
?>
访问的url:http://xxx/xxx.php?filename=show.php
改变filename的值即可改变代码中包含的文件
二、文件包含漏洞类型
1、本地文件包含(LFI)
被包含的文件在服务器本地,利用方式:包含本地敏感文件、上传文件
2、远程文件包含(RFI)
被包含的文件在远程服务端,利用方式:包含攻击者指定远程url文件。远程包含 需要allow_url_include=on、magic_quotes_gpc=off
三、PHP中的文件包含函数
1、require组
require:函数出现错误时,会直接报错并退出程序执行
require_once:出错时直接退出;且仅包含一次。在脚本执行期间同一个文件可能被多次引用,确保只包含一次一避免函数重定义、变量重新赋值等情况。
2、include组
include:函数出现错误时,会抛出一个警告,程序继续运行。
include_once:函数出现错误时,会抛出警告,且仅包含一次。
四、漏洞利用
1、PHP本地包含
下图演示了本地包含的原理,注意还可以使用../访问其他路径文件

本地包含漏洞利用:可以上传一个带一句话木马的图片到Web站点上面,其次通过存在包含漏洞的页面来包含刚上传带一句话木马的图片,最后一定要注意相对路径。
2、PHP远程包含
定义:如果php.ini(C:\phpStudy\php\php-5.2.17\php.ini)的配置选项allow_url_include为On的话,文件包含函数是可以加载远程文件的,这种漏洞被称为远程文件包含漏洞。利用远程文件包含漏洞,可以直接执行任意命令。
原理:同本地文件包含原理,只是参数可以换成一个远程的url地址,此时包含的文件不能为php文件,可写成txt或者图片马等等。文件包含的时候,无视文件格式,只要文件中有php代码,就会被执行。

3、漏洞利用之上传文件
4、漏洞利用之读取文件
5、漏洞利用之写入文件
构造URL: http://192.168.1.55:8080/dvwa/vulnerabilities/fi/?page=php://input,并且提交post数据为:
<?php system('net user');?>
注意:只有在allow _url_include为on的时候才可以使用,如果想查看回显结果那必须在C:\php\php-5.2.14-Win32下找到php-apache2handler.ini打开,查找display_funtions=proc-open,oppen,exec,system…….删掉system重启apache。

浙公网安备 33010602011771号