目录遍历是指访问到了不是原先设想或允许的目录(或文件夹)。例如,微软IIS Web站点的默认文件夹为C:\inetpub,攻击者可使用的目录遍历漏洞,在该文件夹之外去读取他们本不该访问的文件。详细来说,假如有一个网址为“www.bad.com”的网站,其服务器代码中包含目录遍历漏洞。攻击者通过输入以下URL就可以利用该漏洞:
http://www.bad.com/../autoexec.bat
URL中的“.../”告诉服务器上溯一个目录,也就是“C:\”目录(Web 服务器可以将斜杠转换为反斜杠)。所以如果IIS服务器默认目录为“c:\inetpub”,那么该URL会转到“C:\”目录,攻击者将能够看到“c:\autoexec.bat”文件。除非将服务器配置好了避免目录遍历,不然所有目录可能都是可访问的。这种情况下,Web服务器将显示“autoexec.bat”文件的内容,或者攻击者选择的任何其他文件。
值得注意的是:我们已经使用 IIS 作为示例;但是,此漏洞的利用不是针对IIS服务器的,在其他的Web 服务器上也有目录遍历漏洞。
3.脚本权限
为了运行通用网关接口(CGI)、Perl或者其他服务端应用程序,管理员必须授予对服务器端应用程序所在的目录以可执行权限。一些管理员给错误位置授予此权限(通常是因为他们不明白这么做会带来的问题)。让我们看看下面的示例,探讨如果管理员将此权限授予C盘下的所有目录将发生什么。
http://www.bad.com/../winnt/system32/cmd.exe%20%2fc%20dir
首先我们来破译这神秘的URL。某些字符如空格和斜杠,不能出现在URL中,因为URL是限于7 -bit编码的ASCII码。然而,某些情况下还是会使用到这些字符。可行的办法是使用其十六进制的字符来表示,或者使用类似ASCII的base 16编码。Base 16 使用字母a、b、c、d、e 和f来表示大于9的数字。举例来说,字母a表示十六进制中的数字10,f表示15,并使用10表示数字16。所以,在前面的示例:
· 空格使用ASCII编码表示为十进制的32,使用十六进制则为20,因此变成%20。
· 斜杠(/)使用ASCII编码表示为十进制的47,使用十六进制则为2f,因此变成%2f。
经Web服务器解析后,就成为下面的URL:
../winnt/system32/cmd.exe /c dir
这是要执行“cmd.exe”并告诉它执行“dir”命令。“cmd.exe”是位于“C:\winnt\system32”