DVWA——文件包含

【原理】

定义:在通过PHP的函数引入文件时,由于传入的文件名没有经过合理的校验,从而操作了预想之外的文件,导致意外的文件泄露甚至恶意的代码注入。

程序开发人员通常会把可重复使用的函数写到单个文件中,在使用某些函数时,直接调用此文件,而无须再次编写,这种调用文件的过程一般被称为包含。

程序开发人员都希望代码更加灵活,所以通常会将被包含的文件设置为变量,用来进行动态调用,但正是由于这种灵活性,从而导致客户端可以调用一个恶意文件,造成文件包含漏洞。

文件包含漏洞在PHP Web Application中居多,而在JSP,ASP,ASP.NET程序中却非常少,甚至没有包含漏洞的存在。 PHP常见的导致文件包含的函数如下:

include()、include_once()、require()、require_once()、fopen()、readfile()。

当使用前4个函数包含一个新的文件时,只要文件内容符合PHP语法规范,那么任何扩展名都可以被PHP解析。包含非PHP语法规范源文件时,将会暴露其源代码,后2个函数会造成敏感文件被读取。

要想成功利用文件包含漏洞,需要满足下面两个条件: 1.include()等函数通过动态变量的方式引入需要包含的文件; 2.用户能够控制该动态变量。

本地文件包含:

<?php  
$file = $_GET['file'];  
if (file_exists('/home/wwwrun'.$file.'.php'))  
{  
    include '/home/wwwrun'.$file.'.php';  
}  
?>  

假如用户控制$file的值为“../../etc/passwd”,那么这段代码相当于include '/home/wwwrun/../../etc/passwd.php',而这个文件显然是不存在的。 需要用到字符串截断技巧:PHP内核是由C语言实现的,因此使用了C语言中的一些字符串处理函数。在连接字符串时,0字节(\x00)将作为字符串结束符。所以在这个地方,攻击者只要在最后加入一个0字节,就能截断file变量之后的字符串,即:../../etc/passwd\0,通过Web输入时,只需要UrlEncode,变成../../etc/passwd%00。 “../../../”的方式又被称为“目录遍历”。可以通过配置PHP的open_basedir来限制,其作用是限制在某个特定目录下PHP能打开的文件。例如open_basedir = D:\soft\develop\env\\sites\www.a.com\,在windows下多个目录应当用分号隔开,在Linux下则用冒号隔开。

初级文件包含漏洞:当服务器开启allow_url_include选项时,就可以通过php的某些特性函数(include(),require()和include_once(),require_once())利用url去动态包含文件,此时如果没有对文件来源进行严格审查,就会导致任意文件读取或者任意命令执行。文件包含漏洞分为本地文件包含漏洞与远程文件包含漏洞,远程文件包含漏洞是因为开启了php配置中的allow_url_fopen选项(选项开启之后,服务器允许包含一个远程的文件)。

初级文件包含漏洞

打开DVWA,难度设置为low级别

选择File Inclusion,再点击file1.php观察页面和链接变化。

输出了一些东西和链接的变化说明可能包含了php文件并执行,分别点击file1.php、file2.php、file3.php:

构造攻击url:http://172.18.0.13/vulnerabilities/fi/?page=../../../../../etc/passwd

看到了服务器的敏感信息,自行查看其他文件内容。

中级文件包含漏洞

难度设置为Medium

选择File Inclusion,再点击file1.php观察页面和链接变化。

构造攻击url:http://172.18.0.13/vulnerabilities/fi/?page=../../../../../etc/passwd

发现并没有得到内容,猜测被过滤了,构造攻击url:http://ip/vulnerabilities/fi/?page=..././..././..././..././..././etc/passwd

高级文件包含漏洞

难度选择high

选择File Inclusion再点击file1.php观察页面和链接变化。

构造攻击url:http://172.18.0.13/vulnerabilities/fi/?page=../../../../../etc/passwd

发现报错,猜测是过滤或者限制了协议,当我们访问file1.php的时候,是可以包含的所以我们可以猜测文件名要包含file,那么就可以用协议进行文件的访问file://:

构造url:http://172.18.0.13/vulnerabilities/fi/?page=file:///etc/passwd:

  • 10
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值