DVWA笔记(3)--File Inclusion(文件包含)

file inclusion

文件包含,就是通过php的引入文件的函数,如include,require_once等。访问用户不应该访问到的文件。防御其实也很简单,allow_url_fopen和allow_url_include禁用即可。或者apache的配置中严格限制访问目录即可。

low

乍一看这页面,是通过get方式传值的。我在C盘根目录中建立了一个文件flag.txt。

方式一:

我们可以通过url直接访问到该文件。

发现已经在页面左上角显示出了文件内容。

方式二:

通过php://filter来读取文件。php://filter是一种元封装器,和file(),file_get_contents()类似。一句话,就是用来读取文件用的。resource指定文件位置。

方式三:

通过data://text/plain读取文件。

data://text/plain是php的一种数据封装流。可以在后面执行php代码

data:text/plain,<?php echo file_get_contents('C:/flag.txt');

注意data:text/plain后面与php代码之间有一个逗号分割。

方式四:

通过php://input配合burp读取文件。

php://input是php的数据输入流,可以配合burp来执行php代码

浏览器中先这样子访问

burp中的Raw里面写上读取文件的php代码

成功读取

 

虽然后三个通过文件包含有各种姿势,但是这些如果在php.ini中配置allow_url_open和allow_url_include都设置为Off,那么这些花里胡哨的就没有用了===不过也可以当作扩展来看看。

我们看看源码,发现并没有做安全过滤

 

index文件中直接require_once使用low/medium/high/impossible文件

Medium

先看看源码吧。

我们发现,它是过滤了网页的include。所以我们就不实验文件了(其实也就是限制了一个../和..\),就算实验也和上面的实验结果一致。这个是为了过滤文件包含网页。我们先用“不假思索”(没有任何绕过)的文件包含网页试试。

可以看到,它确实去掉了https://。所以这个看起来似乎有了效果,其实脑袋转一下就可以绕过了。这个替换的是一个字符串,不是字符,所以字符串可以采用字符串嵌套字符串的方式绕过。如下

hthttps://tps://www.baidu.com

这样子它字符串替换的时候,中间的https://没了,两边的字符一合起来就是一个新的https://。

我们实验一下:

成功绕过。

那我们要是想绕过../的限制,我们也可以这样子

..././

 

high

我们先看看源码吧。。(确定一下是网页还是本地文件。。)

可以看到,它禁止了除了字符串file开头的文件和include.php的访问。这样一来,似乎不仅是网页,本地文件也有点难弄。

百度了一下,发现php中有个file://的协议。这个就可以利用file*的漏洞进行突破

尝试一下(这里我移动了一下flag的位置到了c盘。。因为虚拟机关了用的本机。。。)

成功绕过。

 

impossible

直接上源码

它已经限制了引入的文件,相当于写死了文件。所以也不可能突破了,

 

附录:截断方式:(留个坑,过几天填)

%00

./

?

 

猜你喜欢

转载自blog.csdn.net/xiaopan233/article/details/86766934