《Web安全测试学习手册》- 服务器端目录遍历
0x00 服务器端目录遍历
1)什么是服务器端目录遍历
当客户端访问到一个目录时,Web服务中间件将会默认寻找一个index list
中的文件,若文件不存在,则会列出当前目录下所有文件或返回403状态码,而列出目录下所有文件的行为称为目录遍历。
2)服务器端目录遍历的特点
中间件配置不得当
0x01 服务器端目录遍历 - 风险等级
高
0x02 服务器端目录遍历 - 原理
当客户端访问到一个目录时,Web服务中间件将会默认寻找一个index list
中的文件,若文件不存在,则会列出当前目录下所有文件或返回403状态码。
0x03 服务器端目录遍历 - 常见场景
- Tomcat
- Nginx
- Apache
- IIS
- … 均有此类现象
0x04 测试方案
先使用dirb扫描一些存在的目录,再使用浏览器访问已存在的目录,查看是否能够列出目录下的文件
命令:dirb http://target
0x05 修复方案
Apache
修改站点目录对应的配置文件
<Directory />
Options +Indexes +FollowSymLinks # 将 "+" 与 Indexes 去掉即可限制列出目录索引
AllowOverride All
Order allow,deny
Allow from all
Require all granted
</Directory>
修改后:
<Directory />
Options FollowSymLinks
AllowOverride All
Order allow,deny
Allow from all
Require all granted
</Directory>
创建DirectoryIndex默认文件
大家都见过很多框架的每个目录都有一个index.html
文件,这个文件的存在是非常有意义的,很多线上的Web服务器都没有合格配置列出目录索引
。导致网站内部许多文件都被攻击者查看到,泄漏大量信息。
为了防止列出目录索引,我们可以在站点的每个文件夹中创建一个index.html
,这个文件内容是什么都无所谓了。当攻击者想通过列目录的手法访问你站点文件夹的时候,Web服务器将会判断当前目录下有没有DirectoryIndex
默认首页,如果存在就显示DirectoryIndex
对应的文件名的内容,这样攻击者就无法查看该目录下有什么文件了。
Tomcat
修改conf/web.xml配置文件
<init-param>
<param-name>listings</param-name>
<param-value>true</param-value> <!-- 将true改为false -->
</init-param>
修改后:
<init-param>
<param-name>listings</param-name>
<param-value>false</param-value>
</init-param>
Nginx
修改conf/nginx.conf配置文件
location / {
index index.html index.htm index.php l.php;
autoindex on;
}
修改后:
location / {
index index.html index.htm index.php l.php;
autoindex off;
}