尝试访问

http://mdsec.net/auth/219/

http://mdsec.net/auth/224/

http://mdsec.net/auth/227/

http://mdsec.net/auth/229/

http://mdsec.net/auth/232/

http://mdsec.net/auth/236/

http://mdsec.net/auth/239/

http://mdsec.net/auth/245/

6.2.8 用户伪装功能

一些应用程序允许特权用户伪装成其他用户,以在该用户的权限下访问数据和执行操作。例如,一些银行应用程序允许服务台操作员口头验证一名电话用户,然后将银行的应用程序会话转换到该用户的权限下,以为其提供帮助。

伪装功能一般存在各种设计缺陷。

img002 伪装功能可以通过“隐藏”功能的形式执行,不受常规访问控制管理。例如,任何知道或猜测出URL/admin/ImpersonateUser.jsp的人都能够利用该功能伪装成任何其他用户(请参阅第8章了解相关内容)。

img002 当判定用户是否进行伪装时,应用程序可能会信任由用户控制的数据。例如,除有效会话令牌外,用户可能还会提交一个指定其会话当前所使用的账户的cookie。攻击者可以修改这个值,不需验证即可通过其他用户的账户访问应用程序,如图6-7所示。

img152

图6-7 一种易受攻击的用户伪装功能

img002 如果应用程序允许管理用户被伪装,那么伪装逻辑中存在的任何缺陷都可能导致垂直权限提升漏洞。攻击者不仅可以访问其他普通用户的数据,甚至可以完全控制应用程序。

img002 某种伪装功能能够以简单“后门”密码的形式执行,该密码可和任何用户名一起向标准登录页面提交,以作为该用户进行验证。由于许多原因,这种设计非常危险,但攻击者所获得的最大好处是:他们可在实施标准攻击(如对登录机制进行蛮力攻击)的过程中发现这个密码。如果后门密码在用户的真实密码前得到匹配,那么攻击者就可能发现后门密码功能,从而访问每一名用户的账户。同样,一次蛮力攻击可能导致两个不同的“触点”,因而揭示后门密码,如图6-8所示。

img153

图6-8 一次密码猜测攻击出现两个“触点”,说明应用程序使用后门密码