一次奇怪的验证码绕过

最近遇到个奇怪的验证码验证机制,特此记录下。
(图片是后来补的。。。)


这里大致推测该验证码校验流程如下:

  1. 客户端发起刷新验证码请求。
  2. 服务端生成验证码,同时将生成的验证码进行加密,并set-cookie给客户端。
  3. 客户端输入验证码,发送请求。
  4. 服务端验证请求数据中的验证码的值是否与CheckCode的值是否相匹配。

通过分析这个流程,可以很明显发现该银行开发人员写的验证码功能逻辑中存在问题。 他在后端效验的客户端发送的CheckCode值与验证码,这里,即使不知道其后端加密方式,只需正常请求一次数据包,得到验证码与其对应的CheckCode值,在接下来的请求中复用该值,就可以重放数据,达到验证码绕过的目的。