路径遍历漏洞

尝试成功自古无。”——陆游

路径遍历, 也叫目录遍历(Directory Traversal)是由于web服务器或者web应用程序对用户输入的文件名称的安全性验证不足而导致的一种安全漏洞,使得攻击者通过利用一些特殊字符就可以绕过服务器的安全限制,访问任意的文件(可以使web根目录以外的文件),甚至执行系统命令。路径遍历是一种高危漏洞。

01

原理

对于一个安全的Web服务器来说,对Web内容进行恰当的访问控制是极为关键的。目录遍历是Http所存在的一个安全漏洞,它使得攻击者能够访问受限制的目录,并在Web服务器的根目录以外执行命令。

Web服务器主要提供两个级别的安全机制:

访问控制列表——就是我们常说的ACL

根目录访问

访问控制列表是用于授权过程的,它是一个Web服务器的管理员用来说明什么用户或用户组能够在服务器上访问、修改和执行某些文件的列表,同时也包含了其他的一些访问权限内容。

根目录是服务器文件系统中一个特定目录,它往往是一个限制,用户无法访问位于这个目录之上的任何内容。

例如:IIS默认的根目录是C:\Inetpub\wwwroot,那么用户一旦通过了ACL的检查,就可以访问C:\Inetpub\wwwroot\news目录以及其他位于这个根目录以下的所有目录和文件,但无法访问C:\Windows目录。根目录的存在能够防止用户访问服务器上的一些关键性文件,譬如在Windows的cmd.exe或是Linux上的passwd文件。

这个漏洞可能存在于Web服务器软件本身,也可能存在于Web应用程序的代码之中。

要执行一个目录遍历攻击,攻击者所需要的只是一个浏览器,并且有一些关于系统的一些缺省文件和目录所存在的位置的知识即可。

利用这个漏洞,攻击者能够走出服务器的根目录,从而访问到文件系统的其他部分,譬如攻击者就能够看到一些受限制的文件,或者更危险的,攻击者能够执行一些造成整个系统崩溃的指令。

(1)利用Web应用代码进行目录遍历攻击的实例

在包含动态页面的Web应用中,输入往往是通过GET或是POST的请求方法从浏览器获得,以下是一个GET的Http URL请求示例:

利用这个URL,浏览器向服务器发送了对动态页面show.asp的请求,并且伴有值为oldarchive.html的view参数,当请求 在Web服务器端执行时,show.asp会从服务器的文件系统中取得oldarchive.html文件,并将其返回给客户端的浏览器,那么攻击者就可 以假定show.asp能够从文件系统中获取文件并编制如下的URL:

http://test.webarticles.com/show.asp?view=../../../../../Windows/system.ini

那么,这就能够从文件系统中获取system.ini文件并返回给用户,../的含义这里就不用多说了,相信大家都会明白。攻击者不得不去猜测需要往上多少层才能找到Windows目录,但可想而知,这其实并不困难,经过若干次的尝试后总会找到的。

(2)利用Web服务器进行目录遍历攻击的实例:

除了Web应用的代码以外,Web服务器本身也有可能无法抵御目录遍历攻击。这有可能存在于Web服务器软件或是一些存放在服务器上的示例脚本中。

在最近的Web服务器软件中,这个问题已经得到了解决,但是在网上的很多Web服务器仍然使用着老版本的IIS和Apache,而它们则可能仍然无法抵御这类攻击。即使你使用了已经解决了这个漏洞的版本的Web服务器软件,你仍然可能会有一些对黑客来说是很明显的存有敏感缺省脚本的目录。

例如,如下的一个URL请求,它使用了IIS的脚本目录来移动目录并执行指令:http://server.com/scripts/..%5c../Windows/System32/cmd.exe?/c+dir+c:\

这个请求会返回C:\目录下所有文件的列表,它使通过调用cmd.exe然后再用dir c:\来实现的,%5c是web服务器的转换符,用来代表一些常见字符,这里表示的是“\”

新版本的Web服务器软件会检查这些转换符并限制它们通过,但对于一些老版本的服务器软件仍然存在这个问题。

如何判断是否存在目录遍历漏洞?

最好的方式就是使用Web漏洞扫描器,Web漏洞扫描器能够遍历你Web站点的所有目录以判断是否存在目录遍历漏洞,如果有它会报告该漏洞并给出解决的方法,除了目录遍历漏洞以外,Web应用扫描还能检查SQL注入、跨站点脚本攻击以及其他的漏洞。

02

防御

输入检查

对于应用程序来说,最佳的防御自然是对所有的客户输入做检查。比如检查../或者其转义后的形式。

APACHE 的httpd.conf文件

路径: vi ./conf/httpd.conf

Options Indexes MultiViews  ← 找到这一行,将“Indexes”删除

Options MultiViews   ← 变为此状态(不显示树状目录结构)

AllowOverride None

Order allow,deny

Allow from all

TOMCAT修改conf/web.xml文件

default

debug

0

listings

false // 这里改为false 重启就好了

1

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180613G1KDAY00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券