一、漏洞类型
● 实体漏洞
:
XSS ( 将传入的参数作为 JS 程序来执行 )SQL 注入 ( 将传入的参数作为数据库的 sql 语句来执行 )CSRF( 伪造一个链接页面,客户端请求伪造 )变量覆盖,代码执行漏洞用户传入的参数都会作为程序的某一部分来执行
● 逻辑漏洞
因为代码逻辑出现问题,产生了漏洞
二、逻辑漏洞产生的原因
● 程序设计思路出现了问题 ( 开发人员的问题 )● 项目衔接出现了问题( 新人和老员工之间交接的问题 )● 项目经理经验不足,造成程序设计出现问题
三、验证码绕过漏洞的危害
验证码复用、验证码存在爆破、验证码能否被识别用户验证码存在于前端情况和后端情况 , 如果存在于前端说明程序是不安全的用户找回密码使用验证码,修改 res 数据包,绕过程序用户重定向 : 在输入验证码修改用户 A 的密码过程中,我将即将修改的 A 的数据包改为修改 B 的密码,那么直接修改了 B 的密码 <--- 修改用户标识信息实现绕过验证验证码回显 : 例如邮箱验证码 , 手机验证码等等。验证码出现在响应数据包中,可以直接查看验证码
验证码绕过漏洞
什么是验证码人机交互公共全自动图灵测试,主要作用实现区分是计算机还是人
验证码的分类
● 区分是人还是计算机 <--- 图片验证码● 识别身份 短信验证码,邮箱验证码,电话验证码
验证码的显示方式
● 数字验证码● 中文字符验证码● 点击字符● 滑动拼图● 数学计算
四、验证码作用
防止恶意程序做爆破密码,反爬、论坛灌水、刷票
五、验证码绕过的方式
● 识别并执行
python识别图片验证码,通过程序识别图片显示的验证码,然后将验证码自动输入到文本框然后执行程序● 前端验证 验证码
禁用JS代码,或者抓包将JS代码更改
● 验证码未启用程序交付后,验证码功能没有开启● 验证码复用第一次登陆页面产生一个验证码,但是验证码不过期,所以换一个账号还是使用相同的验证码,还能够登陆
● 验证码空值绕过
拖库 撞库 删库https://wy.zone.ci/bug_detail.php?wybug_id=wooyun-2015-0155066● 验证码干扰度低( 复杂度太低 )爆破难度低,造成数据泄露https://wy.zone.ci/bug_detail.php?wybug_id=wooyun-2016-0194576● 验证码通过html 输出http://wy.zone.ci/bug_detail.php?wybug_id=wooyun-2015-0146767● 验证码可控(基于某个参数来判断验证码正确和错误 )http://wy.zone.ci/bug_detail.php?wybug_id=wooyun-2014-071289● 万能验证码, 验证码无论显示什么,只需要是用固定的数字就能绕过admin login , 111111 00000● 验证码类型少,验证码过期时间放在 cookie 里http 协议是无状态无连接的验证码获取 3 次之后,必须间隔 24 小时才能再次获取。绕过方式换 IP 地址内网环境换IP ,家宽 ( 光猫断电,重置 ) 可以获取 IP 地址。公网环境 ( 自己搭建 IP 地址池,买一个地址池)换账号 ----> 制作一个账号本与密码本
六、找回机制web工作原理图
通过回显绕过
注意:网站需要配置短信模块
获取短信验证码,然后输入验证码后提交表单,BP抓包找到真实验证码
七、通过修改res状态值绕过
根据短信验证码提交后服务端验证结果返回给客户端,修改服务端的响应值,返回给前端正确的状态抓一次正确验证码的 res 返回值 -- 记录状态值 3抓一次错误验证码的 res 返回值 -- 记录状态值 1输入错误验证码,将 res 数据包状态值改为 1
八、通过爆破验证码
一般短信验证码都是4-6位,进行数字爆破
九、通过用户重定向
正常修改 A 用户的密码,在最后提交数据包的时候,将数据包的用户名改为用户 B需要配合白盒的代码审计来进行
通过url分析到当前提交页面,然后查看对应的php文件
进行代码审计
查看数据库中的数据,通过查看数据发现找回密码的账户的repswcode值随机生成,而不进行密码找回的用户默认值是y
抓包改数据包
十、测试某APP的验证码绕过
安装一个安卓模拟器● 生成一个移动端证书● 设置BP,然后下载 BP 的证书 (https http 的安全认证 ),开启 BP ,配置 IP和端口
下载一个CA证书,是der类型的证书,移动端需要使用的证书是cer证书
打开浏览器的证书管理页面
需要将
cer
的证书安装到移动端里面
模拟器与计算机之间有一个空间是共享的 ( 文件夹 ) ,需要将 cer 证书放置在共享文件夹中。然后将其复制到移动 端设备当中,然后在安卓系统中进行安装证书
● 使用BP抓包
● 安装软件
● 抓包绕过验证码
绕过原理,通过修改 res 数据包,然后绕过
获取返回包的数据值{"code":"201","data":"","msg":" 验证码错误 "}{"code":"200","data":"","msg":" 发送成功 "}{"code":200,"data":"15210766266","msg":""} 我们可用的{"code":206,"data":"","msg":" 短信验证码不正确 !"}
总结: