顺序执行

1、概述


所谓的顺序执行 指的就是某一个逻辑流程中,按照第一步、第二步、第三步这种模式进行一步一步的验证,有顺序的执行逻辑的过程。 那么如果整个执行过程中的权限控制不够严格的话,就容易产生漏洞。下面说说常见的顺序执行漏洞。

2、常见的顺序执行漏洞


2.1 密码找回的顺序执行

这种漏洞还是比较常见的,具体流程是这样子。

1 填写用户名进入下一步
2 给指定的邮箱或者手机号发url或者短信进行校验
3 根据邮箱的url或者手机短信进行验证后进入重置密码界面
4 成功修改重置密码

整个环节中,如果对4的前提过程中验证不够严格,就会导致执行1后直接跳过2和3来执行4这一步,从而导致任意用户密码重置漏洞!

实例:http://wooyun.org/bugs/wooyun-2010-070708

2.2 支付环节的顺序执行

一般支付环节的数序是这样子

1 下单
2 确定订单信息
3 支付订单
4 支付成功

如果在1或者2过程中,对于正负数没有严格验证的话,那么就可以通过数量输入负数,或者修改价格实现低价购买或者刷钱,不过这种不在本次讨论范围,故这里跳过。 这里说的顺序执行,如果在4的这一步,没有对前面1、2和3验证严格的话,那么就可以直接跳过前面3步,直接进入4,然后成功支付。

实例:http://wooyun.org/bugs/wooyun-2010-042370

3 登录验证的顺序执行

有的厂商的登录设计是这样,在登录的时候将页面验证码和用户名、密码分开进行了验证。如果验证码正确,进行第二个请求验证帐号和密码,如果验证码错误,直接对用户名和密码就不再进行验证。这种顺序逻辑,如果直接对用户名和密码验证的请求进行爆破,就可以实现扫号、暴力破解的目的。

实例:http://wooyun.org/bugs/wooyun-2010-0115492

3、漏洞检测方法


这种漏洞的检测方法很简单,就是直接对每一步都进行抓包,然后尝试是否可以跳过前面的验证,直接对结果请求进行成功请求即可。

4、修补措施


对每一步的请求的验证,都要严格,而且要以上一步的结果为依据。可以给请求参数中加入一个随机的key,贯穿验证的始终。