渗透测试步骤

(1)在关键功能中探查逻辑缺陷时,尝试轮流删除在请求中提交的每一个参数,包括cookie、查询字符串字段与POST数据项。

(2)既要删除参数名称,也要删除参数值。不要只提交一个空字符串,因为服务器会对这种字符串另做处理。

(3)一次仅攻击一个参数,确保到达应用程序中所有与参数有关的代码路径。

(4)如果控制的请求属于多阶段过程,一定要完成整个过程,因为后面的一些逻辑可能会处理在前面的步骤中提交并在会话中保存的数据。

11.2.3 例3:直接结算

我们曾在一家网上零售商使用的Web应用程序中发现过这种逻辑缺陷。

1.功能

下订单的过程包括以下步骤。

(1)浏览产品目录并往购物车中添加商品。

(2)返回购物车并最终确认订单。

(3)输入支付信息。

(4)输入交货信息。

2.假设

开发者认为用户总会按预定的顺序执行每一个步骤,因为这是应用程序通过显示在浏览器中的导航链接和表单向用户提供的处理顺序。因此,开发者认为任何完成订购过程的用户一定已经提交了令人满意的支付信息。

3.攻击方法

很明显,开发者的假设存在缺陷。用户控制着他们向应用程序提出的每一个请求,因此能够按任何顺序访问订购过程的每一个阶段。如果直接从第(2)步进入第(4)步,攻击者就可生成一个最终确定交货、但实际上并未支付的订单。