目录遍历比较简单,这里参照其它blog补充一下
目录遍历漏洞
目录遍历漏洞是由于网站存在配置缺陷,导致网站目录可以被任意浏览,这会导致网站很多隐私文件与目录泄露,比如数据库备份文件、配置文件等,攻击者利用该信息可以为进一步入侵网站做准备。目录遍历漏洞可能存在于Web服务器软件本身,也可能存在于Web应用程序之中。好比如IIS或者Apache这些中间件若是配置不当,就会造成目录遍历漏洞。
这里要注意!!!目录遍历漏洞和任意文件读取漏洞不一样。目录遍历漏洞是泄露网站的目录结构,而任意文件读取不仅泄露网站的目录结构,而且可以直接获得网站文件的内容,甚至可以下载。但是目录遍历漏洞和文件包含漏洞本质以及利用方法一样,一定要区分的话,我理解如下:
目录遍历:是对本操作系统的文件进行读取;
文件包含:分别是本地包含和远程包含,本地包含和目录遍历一致;
漏洞产生的原因
Web服务器或者Web应用程序对用户输入的文件名称缺少验证而导致。
漏洞绕过
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,告诉服务器我是从哪个页面链接来的。
如何防范此漏洞
(1) 过滤../和~/目录跳转符、%00字符截断符、dir命令等;
(2) 合理配置Web服务器的目录权限;(最有效的方式)
(3) 隐藏内部相关配置细节,以免程序出错时显示出来;
(4) 对用户提交过来的文件名进行硬编码或者统一编码;
(5) 对文件后缀进行白名单控制,对包含了恶意的符号或者空字节进行拒绝