测试 Session Puzzling
ID |
---|
WSTG-SESS-08 |
总结
会话变量重载(也称为会话拼图)是一种应用程序级漏洞,可让攻击者执行各种恶意操作,包括但不限于:
- 绕过有效的身份验证实施机制,并模拟合法用户。
- 提升恶意用户帐户的权限,否则该环境会被视为万无一失。
- 跳过多阶段流程中的限定阶段,即使该流程包含所有通常建议的代码级别限制。
- 在无法预测或检测的间接方法中操纵服务器端值。
- 在以前无法访问甚至被认为安全的位置执行传统攻击。
当应用程序将同一会话变量用于多个目的时,就会出现此漏洞。攻击者可能会以开发人员无法预料的顺序访问页面,以便在一个上下文中设置 session 变量,然后在另一个上下文中使用。
例如,攻击者可以使用会话变量过载来绕过应用程序的身份验证实施机制,这些机制通过验证是否存在包含与身份相关的值的会话变量来强制进行身份验证,这些值通常在身份验证过程成功后存储在会话中。这意味着攻击者首先访问应用程序中设置会话上下文的位置,然后访问检查此上下文的特权位置。
例如,可以通过访问可公开访问的入口点(例如密码恢复页面)来执行身份验证绕过攻击媒介,该入口点根据固定值或用户发起的输入使用相同的会话变量填充会话。
测试目标
- 确定所有会话变量。
- 中断会话生成的逻辑流程。
如何测试
黑盒测试
可以通过列举应用程序使用的所有会话变量以及它们在哪个上下文中有效来检测和利用此漏洞。特别是,这可以通过访问一系列入口点,然后检查出口点来实现。在黑盒测试的情况下,此过程很困难,并且需要一些运气,因为每个不同的序列都可能导致不同的结果。
例子
一个非常简单的示例是密码重置功能,在入口点中,它可以要求用户提供一些标识信息,例如用户名或电子邮件地址。然后,此页面可能会使用这些标识值填充会话,这些值直接从客户端接收,或者根据收到的输入从查询或计算中获取。此时,应用程序中可能有一些页面显示基于此会话对象的私有数据。通过这种方式,攻击者可以绕过身份验证过程。
灰盒测试
检测这些漏洞的最有效方法是通过源代码审查。
修复
会话变量只应用于单个一致的目的。