Web服务器主要提供两个级别的安全机制:
访问控制列表——就是我们常说的ACL
根目录访问
访问控制列表是用于授权过程的,它是一个Web服务器的管理员用来说明什么用户或用户组能够在服务器上访问、修改和执行某些文件的列表,同时也包含了其他的一些访问权限内容。
根目录是服务器文件系统中一个特定目录,它往往是一个限制,用户无法访问位于这个目录之上的任何内容。
例如:在Windows的IIS其默认的根目录是C:\Inetpub\wwwroot,那么用户一旦通过了ACL的检查,就可以访问C:\Inetpub\wwwroot\news目录以及其他位于这个根目录以下的所有目录和文件,但无法访问C:\Windows目录。
根目录的存在能够防止用户访问服务器上的一些关键性文件,譬如在Windows平台上的cmd.exe或是Linux/Unix平台上的口令文件。
这个漏洞可能存在于Web服务器软件本身,也可能存在于Web应用程序的代码之中。
要执行一个目录遍历攻击,攻击者所需要的只是一个web浏览器,并且有一些关于系统的一些缺省文件和目录所存在的位置的知识即可。
如果你的站点存在这个漏洞,攻击者可以用它来做些什么?
利用这个漏洞,攻击者能够走出服务器的根目录,从而访问到文件系统的其他部分,譬如攻击者就能够看到一些受限制的文件,或者更危险的,攻击者能够执行一些造成整个系统崩溃的指令。
依赖于web站点的访问是如何设置的,攻击者能够仿冒成站点的其他用户来执行操作,而这就依赖系统对Web站点的用户是如何授权的。
利用Web应用代码进行目录遍历攻击的实例
在包含动态页面的Web应用中,输入往往是通过GET或是POST的请求方法从浏览器获得,以下是一个GET的Http URL请求示例:
http://test.webarticles.com/show.asp?view=oldarchive.html
利用这个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目录,但可想而知,这其实并不困难,经过若干次的尝试后总会找到的。