目录遍历学习

原理

代码写的有问题或者服务器配置错误导致服务器上的目录信息暴露。有两种情况,一种是程序的代码中把服务器的目录情况回显出来了;另一种情况是nginx或者apache等中间件的配置有问题导致目录暴露。

利用方式

代码层面

举个例子,path 可控 传入 scandir 函数再进行输出,会造成目录遍历漏洞

1
2
3
4
5
<?php
$dir_path=$_REQUEST['path'];
$filename=scandir($dir_path);
var_dump($filename);
?>

../是返回上一级目录的意思

传入path=./ 可回显当前目录

传入path=../ 可回显当前目录

传入path=/ 可回显根目录

传入path=~/ 可回显用户目录

中间件配置问题

中间件如果设置不当的时,也会造成目录遍历,如 apache ngnix iis 目录浏览,均可造成目录遍历

但是 这种目录遍历,只能遍历网站根目录,除非有特殊设置。 通过遍历目录或文件,寻找敏感文件,如 session 登录验证文件,数据库备份等。

防御措施

  1. 对用户的输入进行验证,特别是路径替代字符如“../”和“~/”。

  2. 尽可能采用白名单的形式,验证所有的输入。

  3. 合理配置 Web 服务器的目录权限。

  4. 当程序出错时,不要显示内部相关配置细节。

  5. 对用户传过来的文件名参数进行统一编码,对包含恶意字符或者空字符的参数进行拒绝。

漏洞挖掘

记录一些常见的会导致目录遍历的trick

注意请求中的参数,有以下参数很可能存在漏洞

1
2
3
4
5
6
js
img
file
CurrentFolder
Folder

案例1

在一个案例中,js参数本应该传入一个指定的js文件,但是可以传入一个目录,最后可以用%00截断js的后缀名

案例2

某网站用了fck富文本编辑器。其中有一个参数CurrentFolder可以传入目录导致目录遍历

trick1

注意静态资源的文件夹,看看能不能访问这个目录

参考

Nginx配置不当可能导致的安全问题


目录遍历学习
https://wanf3ng.github.io/2022/05/31/目录遍历学习/
作者
wanf3ng
发布于
2022年5月31日
许可协议