尝试访问

http://mdsec.net/auth/365/

img001  注解  一些应用程序经常加密请求参数中的有意义数据(如商品的价格),以防止攻击者篡改这些数据。如果加密数据明显在应用程序的功能中发挥着重要作用,这时应尝试实施“位翻转”攻击,看是否能够以有意义的方式操纵加密信息,从而达到破坏应用程序逻辑的目的。

当然,利用本节所述的漏洞的主要目的是伪装成其他应用程序用户——最好是拥有较高权限的管理用户。如果只能盲目修改加密令牌的某些部分,则攻击能否取得成功,只能靠运气。但是,某些情况下,应用程序可能会为你提供一些“提示”。如果应用程序采用对称加密防止用户篡改数据,则通常整个应用程序都会使用相同的加密算法和密钥。在这种情况下,如果应用程序的任何功能向用户披露了任意加密字符串的解密值,则可以利用这一 “提示”完全解密任何受保护的信息。

以笔者发现的一个提供文件上传/下载功能的应用程序为例。上传文件后,用户将获得一个包含文件名参数的下载链接。为防止修改文件路径的各种攻击,应用程序对这个参数中的文件名进行加密。但是,如果用户请求一个已删除的文件,应用程序将显示一条错误消息,在其中显示所请求文件的解密名称。攻击者对这种行为加以利用就可以确定应用程序使用的任何加密字符中的明文值,包括会话令牌的值。笔者发现,该应用程序的会话令牌包含各种有意义的值(具有结 构化的格式),因此,易于受到本节所述的各种攻击。由于这些值属于文本格式的用户名和应用程序角色,而不是数字标识符,因此,仅仅使用盲目的位翻转很难对其实施成功的攻击。但是,通过使用文件名解密函数就可以在查看结果的同时,对令牌的数据位进行系统地修改。这样就可以构造一个令牌,该令牌一旦解密将指定有效的用户和管理角色,从而完全控制整个应用程序。

img001  注解  还可以使用其他技巧来解密应用程序使用的加密数据。例如,利用一个“揭示性”加密提示(“reveal” encryption oracle)可获得加密令牌的明文值。虽然在解密密码时,这可能是一个重要的漏洞,但是,解密会话令牌并不会使攻击者能够立即攻破其他用户的会话。不过,解密令牌有助于攻击者了解明文的结构,帮助他们实施针对性的“位翻转”攻击。有关“揭示”加密提示攻击的详细信息,请参阅第11章。

针对填充提示(padding oracle)的旁路攻击可用于破解加密令牌。请参阅第18章了解详细信息。