目录遍历漏洞

文章的内容包括目录遍历的漏洞原理与应用
入门小白进阶漏洞的文章

目录遍历(也称为文件路径遍历)是一种 Web 安全漏洞,允许攻击者读取运行应用程序的服务器上的任意文件。

1.目录遍历介绍

1.1 目录遍历漏洞

目录遍历漏洞可以说是信息泄露漏洞,是由于Web服务器或Web应用程序对用户输入的文件名缺乏安全验证而形成的一种漏洞。

目录遍历是针对Windows IIS 和 Apache 的一种常见攻击。攻击者可以通过使用特殊字符来绕过服务器的安全机制,从而访问到受限目录,甚至可以执行命令 cmd.exe /c 提取目录信息,或在Web服务器的根目录外执行命令。

1.2 目录遍历原理

 程序在实现上没有充分过滤用户输入的目录跳转符(如../),导致用户可以恶意提交目录跳转,实现服务器上的任意文件遍历。


2.目录遍历利用

2.1 WEB应用代码攻击

 在动态的Web界面中,浏览器往往是通过GET或POST的请求方式获取服务器上的内容。假若存在一个URL:http://test.com/show.php?view=admin.html,我们可以使用../来探查,并修改view的参数,

1
如:view=../../../Windows/system.ini。若在view=admin.html中服务器解析的路径为:C://WWW/test/admin.html,则通过返回上级目录(../),可以跨越目录访问到服务器的配置文件 system.in

现在,网站搭建时都会设立安全防护(waf),我们需要去绕过它们来实现非法读取文件。以非法访问flag.txt为例:

1
2
3
 修改请求头访问敏感文件:

“GET /admin/test.php?js=../../../../../WINDOWS/flag.Txt HTTP/1.1”
1
2
%00截断绕过白名单:对文件名或者文件后缀名加空字节编码绕过,如:
“../../boot%00.ini”,“GET /admin/test.php?js=../../../../../WINDOWS/flag.Txt%00.js HTTP/1.1”
1
2
3
编码绕过:

如 “test.jsp?filename=ZmfugsbS” 中filename的参数进行Base64加密时,我们的flag.txt也需要进行Base64加密。或者,使用其他编码方式绕过白名单,如Unix系统中使用url编码绕过:“../etc/passwd%0a.jpg”;使用换行符编码绕过:“../index.php%20”。
1
2
3
来路验证绕过:

修改HTTP Referer,使服务器误判为正确页面发起的请求,从而跨越权限获取其他权限可以访问的数据。
1
“../”的其他形式“/.%252e/.%252e/.%252e/”,其中%25对应%,%2e对应。
2.2 Web服务器Nday攻击

老版本的 Widows IIS 和 Apache 仍旧拥有一批可观的用户,他们虽然下载补丁修复了其中的漏洞,但对于攻击者而言仍然存在敏感缺省脚本的目录。举个栗子,存在一个URL请求,使用了IIS的脚本目录来移动目录并执行命令:

1
2
http://test.com/scripts/..%5c../Windows/System32/cmd.exe?/c+dir+c:\
直接给你列出C盘下的所有文件。
2.3 URL编码形式攻击

一些网络应用会通过查询危险的字符串,例如:- ..- ..- ../

来防止目录遍历攻击。然而,服务器检查的字符串往往会被URI编码。因此这类系统将无法避免如下形式的目录遍历攻击:

1
2
3
4
5
6
7
- %2e%2e%2f:解码为../

\- %2e%2e/:解码为../

\- ..%2f:解码为../

\- %2e%2e%5c:解码为..\
2.4 Unix目录遍历攻击

通用的类Unix系统的目录遍历攻击字符串形如“../”。

2.5 Windows操作系统目录遍历攻击

对于微软的Windows操作系统以及DOS系统的目录结构,攻击者可以使用“../”或者“..\”字符串。

在这种操作系统中,每个磁盘分区有一个独立的根目录(比如我们会把个人电脑分区成“C盘”、“D盘”等等),并且在所有磁盘分区之上没有更高级的根目录。这意味着Windows系统上的目录遍历攻击会被隔离在单个磁盘分区之内(C盘被攻击,D盘不受影响)。


3.目录遍历漏洞挖掘

3.1 谷歌语法

搜索含“index of”关键字的网站

语法:intitle:Index of

3.2 扫描器

Web漏洞扫描器对Web应用展开扫描

举例:Goby、AWVS、Xray等


4.目录遍历防御

  1. 开发时注意对目录跳转符、字符截断符、dir命令等用户提交的内容经过滤。
  2. 开发时,对参数使用多重加密,对请求发起方进行多重验证,如cookie。
  3. IIS中关闭目录浏览功能:在IIS的网站属性中,勾去“目录浏览”选项,重启IIS。
  4. Apache中关闭目录浏览功能:打开Apache配置文件httpd.conf,查找“Options Indexes FollowSymLinks”,修改为“ Options -Indexes”(减号表示取消),保存退出,并重启Apache。
  5. Nginx 中默认不会开启目录浏览功能,若当前已开启该功能,可编辑nginx.conf文件,删除如下两行:autoindex on; autoindex_exact_size on,然后重启Nginx。
谢谢大家欣赏文章!
------ 本文结束感谢您的阅读 ------