入门小白进阶漏洞的文章
目录遍历(也称为文件路径遍历)是一种 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 | 修改请求头访问敏感文件: |
1 | %00截断绕过白名单:对文件名或者文件后缀名加空字节编码绕过,如: |
1 | 编码绕过: |
1 | 来路验证绕过: |
1 | “../”的其他形式“/.%252e/.%252e/.%252e/”,其中%25对应%,%2e对应。 |
2.2 Web服务器Nday攻击
老版本的 Widows IIS 和 Apache 仍旧拥有一批可观的用户,他们虽然下载补丁修复了其中的漏洞,但对于攻击者而言仍然存在敏感缺省脚本的目录。举个栗子,存在一个URL请求,使用了IIS的脚本目录来移动目录并执行命令:
1 | http://test.com/scripts/..%5c../Windows/System32/cmd.exe?/c+dir+c:\ |
2.3 URL编码形式攻击
一些网络应用会通过查询危险的字符串,例如:- ..- ..- ../
来防止目录遍历攻击。然而,服务器检查的字符串往往会被URI编码。因此这类系统将无法避免如下形式的目录遍历攻击:
1 | - %2e%2e%2f:解码为../ |
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.目录遍历防御
- 开发时注意对目录跳转符、字符截断符、dir命令等用户提交的内容经过滤。
- 开发时,对参数使用多重加密,对请求发起方进行多重验证,如cookie。
- IIS中关闭目录浏览功能:在IIS的网站属性中,勾去“目录浏览”选项,重启IIS。
- Apache中关闭目录浏览功能:打开Apache配置文件httpd.conf,查找“Options Indexes FollowSymLinks”,修改为“ Options -Indexes”(减号表示取消),保存退出,并重启Apache。
- Nginx 中默认不会开启目录浏览功能,若当前已开启该功能,可编辑nginx.conf文件,删除如下两行:autoindex on; autoindex_exact_size on,然后重启Nginx。