14.3 获取有用的数据

当攻击应用程序时,定制自动化技巧的第二个主要用途是,通过专门设计的特殊请求,以一次一个数据的速度获取信息,从而提取出有用的或敏感的数据。如果已经确定一个可供利用的漏洞(如访问控制缺陷),并能够通过为一个未授权的资源指定标识符的方式来访问这个资源,那此时往往就会出现这种情况。但是,即使应用程序完全按设计者预计的方式运行,也可能会出现这种情况。在下面这些情况下,渗透测试员可以使用自动化技巧获取数据。

img002 一个网上零售应用程序允许注册用户查看他们的待办订单。但是,如果能够确定其他用户的订单号,就可以查看他们的订单信息,就像查看自己的订单一样。

img002 忘记密码功能的实施取决于用户配置的质询。可以提交任意用户名并查看相关质询。通过遍历一组枚举或猜测出来的用户名,就能够获得大量用户密码质询,从而确定那些最容易猜测的质询。

img002 一个工作流程应用程序包含一项功能,可显示某一用户的基本账户信息,包括他在应用程序中的权限。通过遍历应用程序使用的用户ID,渗透测试员就能够列出所有的管理用户,并以此为基础进行密码猜测和其他攻击。

使用自动化技巧获取数据的基本步骤与枚举有效标识符的步骤基本类似,其不同之处在于,现在不仅对一个二进制结果(“触点”或“错失”)感兴趣,还要设法从每个响应中提取有用的内容。以下面的请求为例,它由登录用户提出,以显示其账户信息。

img452a

虽然只有通过验证的用户能够访问此应用程序功能,但由于存在访问控制漏洞,任何用户只需简单修改uid参数,即可查看其他所有用户的详细资料。在另一个漏洞中,披露的详细资料还包括用户的完整证书。由于用户的uid参数值相对较小,因此,攻击者能够轻易推测出其他用户的标识符。

当应用程序显示一个用户的资料时,页面源代码会将个人信息包含在下面的HTML表中:

img452b

根据应用程序的行为,攻击者可直接实施定制自动攻击,获取所有应用程序用户的个人信息,包括证书等。

为实施攻击测试,我们快速对JAttack工具进行一些改进,使它能够提取并记录服务器响应中的特殊数据。首先,将攻击配置数据添加到源代码的字符串列表内,通过它们确定想要提取的有用内容:

img452c

然后把下面的代码添加到parseResponse方法中,以在每个响应中搜索上述列表中的每一个字符串,并提取字符串后到圆括号位置的内容:

img453a

这就是对这个工具的代码进行的全部修改。为配置JAttack针对我们感兴趣的实际请求,需要对它的攻击配置进行如下更新:

img453b

这个配置指示JAttack向相关URL提出包含2个必要参数的请求:包含当前会话令牌的cookie和易受攻击的用户标识符。其中只有一个参数会通过我们指定的uid号范围进行修改。

现在再运行JAttack,得到以下结果:

img453c

可见,这次攻击成功截取了一些顾客的个人资料。通过扩大攻击的数值范围,我们可以提取应用程序所有用户的登录信息,很有可能还包含管理员。