虽然说我们在实战中目录遍历漏洞遇到的不是很多,但并不代表就没有。
目录遍历漏洞产生环境
网站应用提供文件下载,其中文件储存在服务器中,网站脚本利用代码获取此目录文件将其显示至网站上,其中如果对代码没有进行相关的验证过滤,将会导致目录遍历漏洞。
1、以下是一个简单的PHP目录遍历漏洞示例:
<?php
$dir_path=$_REQUEST['path'];
$filename=scandir($dir_path);
var_dump($filename);
?>
2、再去访问:http://192.168.1.104/www/1.php?path=/
一、目录遍历漏洞第一种情况
1、加密参数传递的数据
在WEB应用程序对文件名进行加密之后再提交,比如:“downfile.jsp?filename=ZmfugsbS”,在参数filename用的是Base64加密,而攻击者要想绕过,只需简单的将名加密后再附加提交即可!所以说,采用一些有规律或者轻量能识别的加密方式,也是存在风险的。
2、编码绕过
尝试使用不同的编码转换进行过滤性的绕过,比如url编码,通过参参数进行url编码提交,"downfile.jsp?filename=%66%61%6E%2E%70%64%66"来绕过。
3、目录限定绕过
在有些Web应用程序是通过限定目录权限来分离的。当然这样的方法不值得可取的,攻击者可以通过某些特殊的符号“~”来绕过。例如这样提交“downfile.jps?filename=~/../boot”。能过这样一个符号,就可以直接跳转到硬盘目录下了。
4、绕过文件后缀过滤
一些web应用程序在读取前,会对提交的文件后缀进行检测,攻击者可以在文件名后放一个空字节编码来绕过这样的文件类型的检查。
例如:../../.../../boot.ini%00.jpg,web应用程序使用的Api会允许字符串中包含空字符,当实际获取文件名时,刚由系统的Api会直接截断,而解析为"../../../../boot.ini".
在类似Uninx的系统中也可以使用url编码的换行符,例如:../../../etc/passwd%0a.jpg,如果文件系统在获取含有换行符的文件名,会截短为文件名。也可以尝试%20,例如:../../../index.jsp%20
5、绕过来路验证
HTTP Referer:HTTP Referer是header的一部份,当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器我是从哪个页面链接来的。
二、目录遍历漏洞第二种情况
还有一种目录遍历,那就是因为这个web服务器的配置不当造成的。
Index of/
我们可以直接利谷歌黑客语法来寻找此形式的目录遍历漏洞:
intitle:Index of
例如:
1、IIS“目录浏览”前打勾,就是允许目录列表显示。
2、Apache配置文件httpd.con中Options 为Indexes就是允许目录列表显示。
注意:虽然说此 Options 值为 Indexes,但是你去访问的时候依然不会目录列表展示,会提示403禁止访问,这也是phpstudy为了安全吧!所以说有时候,并不代表你这样设置就可以以目录列表的方式去显示了。
Apache设置Opions选项具体中以参考:
http://httpd.apache.org/docs/2.2/mod/core.html#options