介绍

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

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

姿势

0x00 基础目录遍历

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

0x01 绝对路径

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

0x02 双写../绕过

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

0x03 URL编码绕过

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

. => %2c

/ => %2f

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

0x04 绝对路径配合 ../

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

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

0x05 截断文件后缀

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

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

0x0x

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

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

防御

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

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

攻击路径整理

文件整理

路径整理

CVE-2014-3625

CVE-2018-1271

路径遍历检测

防御