5.2 攻击ACL

现在我们知道了什么是授权数据以及它所在的位置,我们可以问“一般怎么攻击它?”

首先讨论ACL是因为它们是Web应用授权的“最低标准”:所有Web应用某些程度上都依赖于资源ACL的保护,但不是所有Web应用都实现访问/会话令牌(许多应用实际上通过本地账户模拟来达到相同的效果)。换句话说,ACL攻击是最简单的攻击,而成功地侵害授权和会话令牌常常需要更多的工作和好运气。一般地说,最容易识别的授权漏洞是与脆弱的ACL相关的。

第1章中已经说过,相对简单的URI语法使得假造随意的资源请求相当容易,其中一些请求将暴露出隐藏的授权边界或者完全绕过它们。我们接下来将讨论最常用的URI操纵技术。

目录遍历

目录遍历攻击是常见的绕过应用ACL获得对受限目录未授权访问的方法。目录遍历攻击的特色是使用文件系统浏览操作中所用的字符“../”(dot-dot-slash),从一个子目录“向上”遍历,返回到上级目录。这种漏洞在现实世界中的一个臭名昭著的实例是2001年广为宣传的“Unicode and Double Decode”攻击,这种攻击利用IIS Web应用服务器解析和授权引擎的一个漏洞。这个漏洞的Unicode变种是这样被利用的:按照常规,IIS会阻止使用类似“/scripts/../../../../winnt”的URL脱离Web文档根目录的企图。但是,由于一个公认的缺陷,这种授权检查不能正确地处理“/”字符的Unicode表示例如“%c0%af”(URL编码),从而可能被绕过。这种情况导致恶意的用户能够用特别构造的URL如“/scripts/..%c0%af..%c0%af..%c0%afwinnt”访问文档根之外的对象。

“隐藏”资源

精心剖析应用(见第2章)也能揭示应用文件夹和文件的命名方式。例如,如果存在/user/menu目录,那么可以猜测/admin/menu目录可能也存在。开发人员往往依靠混淆和“隐藏”资源位置来保护敏感资源的访问,而不是正确地定义和实施ACL。这使得目录和文件名猜测成为了挖掘网站“隐藏”部分的有用方法,我们前面已经提到过,这能够用于进一步的ACL指纹识别。

这种“不公开的安全性”通常甚至无法对付最简单的篡改。例如,简单地修改URL中的对象名称,黑客有时候能够读取通常无法访问的文件。Quip就是一个实例。使用Quip,用户能够向iPhone用户发送包含媒体的消息,这些媒体主要是照片。这个服务发送的图片和媒体被指派了由5个小写字母和数字组成的随机生成文件名(例如,http://pic.quiptxt.com/fapy6)。由于媒体服务器上不安全的授权控制,任何人都可以在任何Web浏览器中访问对应的URL,从而直接访问上传的媒体内容。而且,因为文件名仅仅使用少数随机字符和数字(这种命名方案仅有36×36×36×36×36=60466176种可能性)生成,攻击者可以发送成千上万个请求对其他合法的媒体文件名进行暴力攻击。许多自动化这一攻击的脚本已经创建,数以千计的私有照片和消息遭到侵害。今天,存储已泄露媒体的储存库仍然在网上。

通过URL篡改绕过授权的另一个实例是Cisco IOS HTTP授权漏洞。基于Web的管理界面URL包含16-99之间的两位数字:

http://www.victim.com/level/NN/exec/...

猜测NN的取值(两位数字),就可能绕过授权并且以最高特权级访问设备管理界面。

定制应用的参数命名管理也可能给出隐藏目录名的线索。例如,应用剖析(见第2章)可能没有揭示任何“秘密”或者管理目录——但是你注意到应用常常在变量名(secPass)和一些页面(secMenu.html)上添加“sec”。在这样一个应用中,根据相同的惯例(例如,用“/secadmin”代替“admin”)寻找隐藏的文件夹和文件可能是值得的。

提示  常常被路径猜测攻击作为目标的常用“隐藏”Web应用资源在第8章中列出。