Web安全中的验证码缺陷

简单性缺陷

一般由 4 个数字组成:
01.jpg
这类验证码由于过于简单,导致可识别,具体操作如下:
02.png
可以看出来,图片中的验证码已经被识别出来了。

不注销性缺陷

在 IDCSystem 综合业务管理系统全版本均存在此漏洞,该漏洞导致的原因就是因为验证码不自动注销:
03.jpg
在提示密码错误后并没有注销验证码,验证码还是原来的验证码

参数判断缺陷

具体代码如下:

<?php

if(!empty($_POST['yzm'])){
    .....  //验证用户名账号密码
}else{
    ..... //验证用户名账号密码
}

?>

这种类型的验证码缺陷很少,少到我只遇到过一次,在电信的某系统中。但是程序是 jsp 程序,这里我用 php 代码还原出来

双文件缺陷

正常验证码验证流程:

用户打开首页(/por/login_psw.csp)获取验证码 (/por/rand_code.csp) -> 用户提交账号密码验证码(/por/login_psw.csp)-> 后台验证验证码 -(/por/login_psw.csp)> 后台验证账号密码(/por/login_psw.csp)-> 注销验证码(/por/login_psw.csp)

以上所有操作除了获取验证码都应该在 /por/login_psw.csp 此文件中进行,并且每次程序结束都应该注销验证码,在看下面这个一个流程:

用户打开首页(/por/login_psw.csp)获取验证码 (/por/rand_code.csp) -> 用户提交账号密码验证码(/por/login_psw.csp)-> 后台验证验证码 -(/por/login_psw.csp)> 后台验证账号密码(/por/login_psw.csp)-> 注销验证码(/por/rand_code.csp)

这个流程比较奇葩的地方就是必须要访问 /por/rand_code.csp 才可以注销验证码,他会把 ajax 写在 /por/login_psw.csp 页面中,当你密码错误,就会跳转到 /por/login_psw.csp 此页面,而 js 进行后台访问 /por/rand_code.csp 文件,从而达到注销验证码的目的。

04.png
那么攻击点:

  1. 在首次访问时会生成一个验证码,需要在第二次访问时才会注销掉此验证码。
  2. 只有密码错误,或者是刷新页面才会有第二次访问的操作。

那么,这里我们可以使用 burp 对登陆包进行抓取(此时为第一次访问),不对此放包,一直拦截住,在发送到暴力破解模块中进行爆破,这样永远没有第二次访问 /por/rand_code.csp 此文件的机会,也就达到了绕过验证码的目的。

至于为什么 用 csp 后缀,因为这是我今天做项目的时候遇到的一个奇葩洞,还是个通用。。。。。具体什么程序就不多说了

前后验证

什么是前验证?前验证就是说在程序逻辑之前验证漏洞:
用户输入 -> 验证验证码 -> 带入数据库进行查询 -> 输出结果
以上为前验证流程,此处属于一个逻辑错误。攻击者可先对验证码进行验证,然后截取带入数据库查询包进行重放攻击。

cookie验证:

如图所示:
18070216549bf73c8639d448ad (1).png
cookie02.png

本文链接:

http://www.f4ckweb.top/index.php/archives/24/
1 + 4 =
快来做第一个评论的人吧~