(1)验证码绕过(on client)+ 验证码绕过(on server)

(2)验证码绕过(on server)实验中,为什么burp拦截开启的状态下,通过Repeater进行重放不会刷新验证码,关闭拦截后才会刷新验证码?

1 实验环境

软件名称版本部署方式IP
Pikachulatestdocker run -d -p 8080:80 –name pikachu area39/pikachu172.31.5.7

2 验证码介绍及分类

在安全领域,验证码主要分为两大类:操作验证码和身份验证码。

验证码的主要作用:防止恶意暴力破解、恶意注册、刷票、论坛灌水等一切脚本行为。

验证码的分类:手机短信、手机语音、通用文字、加减法、非通用文字、非通用文字加背景随机加拉 伸、无感知、滑动拼图、文字点选、图标点选、推理拼图、短信上行、语序点选、空间推理、语音验证 等等。

3 验证码绕过(on client)

打开pikachu的暴力破解模块

当未输入验证码的时候,提示“请输入验证码”:

image-20230318150348431

当输入错误验证码的时候提示“验证码输入错误”:

image-20230318150410923

当输入正确验证码(账号随意输入)的时候提示“用户名或者密码不存在”:

image-20230318150642297

开启burp抓包,多次修改密码,使用repeater模块发送后,均返回状态码200,说明同一验证码可使用多次

image-20230318151203625

使用intruder模块对password进行爆破,成功拿到密码

image-20230318152957653

通过浏览器查看,可知该验证码由前端生成,因此还可通过禁用前端js功能进行绕过

image-20230318154144039

禁用js也可绕过验证码登录

image-20230318154319143

4 验证码绕过(on server)

截获数据包

image-20230318154904834

使用repeater模块,输入任意验证码提示:验证码错误

image-20230318155101568

在输入正确的二维码的情况下,并多次修改密码,提示:username or password is not exists~

说明二维码是可以重复多次使用的(可以暴力破解)

image-20230318155557319

使用暴力破解,成功破解密码

image-20230318160109644

查看源码

docker exec pikachu bash -c 'cat /app/vul/burteforce/bf_server.php'

可以发现,后端在使用验证码后,未进行销毁

image-20230318160510330