(1)使用控制的一个账户执行一次完整、有效的登录。使用拦截代理服务器记录向应用程序提交的每一份数据。
(2)确定各个不同登录阶段以及在每个阶段收集到的数据。确定是否不止一次收到某条信 息,或者是否有信息被返回给客户端,并通过隐藏表单字段、cookie或者预先设置的URL参数重新提交(请参阅第5章了解相关内容)。
(3)使用各种畸形请求多次重复登录过程:
(a)尝试按不同的顺序完成登录步骤;
(b)尝试直接进入任何特定的阶段,从那里继续登录;
(c)尝试省略每个阶段并从下一阶段继续登录;
(d)运用想象力,想出其他开发者无法预料的方式访问不同的登录阶段。
(4)如果有数据不止提交一次,尝试在另一个阶段提交一个不同的值,看看是否仍然能够成功登录。有些提交数据可能是多余的,实际上并不由应用程序处理。有些数据在某个阶段得到确认,随后就被应用程序所信任。在这种情况下,尝试在一个阶段提供一名用户的证书,然后在下一阶段转换成由另一名用户进行验证。应用程序可能在几个阶段都对同一个数据进行确认,但执行不同的检查。在这种情况下,尝试在第一个阶段提供(例如)一名用户的用户名和密码,然后在第二个阶段提供另一名用户的用户名和PIN号码。
(5)特别注意任何通过客户端传送、并不由用户直接输入的数据。应用程序可能使用它们保存登录进展状态信息,并且信任这些数据。例如,如果第三个阶段的请求中包含参数stage2complete=true,那么攻击者就可以通过设置这个值直接进入第三个阶段。尝试修改应用程序提交的值,确定是否可以使用这种方法进入或省略登录阶段。