# 验证码安全问题汇总

Author: 乌云历史资料库 (@wooyun_archive)
Published: 2015-04-02T01:52:00Z
Canonical: https://wepostx.com/topics/773

> 乌云历史资料归档
>
> **原始作者：** 易水寒
> **原始编号：** superkieran-wooyundrops:525
> **原始发布时间：** 2015-04-02 09:52
> **声明：内容仅用于技术研究和个人使用，版权归 wooyun.org。**

---

# 0x00 前言

[email protected] [email protected] 相应的文章，只是觉得应该有个入门级的“测试用例”。本文不涉及OCR，不涉及暴力四六位纯数字验证码，不涉及没有验证码的情况（神马？没有验证码？没有验证码还讨论什么，要不人家不 care，要不人家已经胸有成竹有更牛逼的方法）。本文可能会与之前的某些文章有重合，可能与drops的“最严肃的安全原创平台”气质不符，请在家长指导下阅读。
首先，我们来看下整个验证码实现的原理
图一

![原文图片](/media/2016/06/4b8dc7e43da72496be692a5c905d457b)

- 1.客户端发起一个请求

- 2.服务端响应并创建一个新的SessionID同时生成一个随机验证码。

- 3.服务端将验证码和SessionID一并返回给客户端

- 4.客户端提交验证码连同SessionID给服务端

- 5.服务端验证验证码同时销毁当前会话，返回给客户端结果

# 0x01 安全问题及案例

根据上面的实现流程，我们大概可以从四个方面入手，客户端问题、服务端问题、验证码本身问题，还有一个验证码流程设计问题。

## 1. 客户端问题

### 客户端生成验证码
验证码由客户端js生成并且仅仅在客户端用js验证
[WooYun: 南开大学信息门户网站设计不当可以爆破用户密码（利用密码猜用户）](http://www.wooyun.org/bugs/wooyun-2014-082411)

### 验证码输出客户端
输出在html中（神一样的程序员）
[WooYun: 索尼验证码实现缺陷](http://www.wooyun.org/bugs/wooyun-2012-06634)
[WooYun: 某会考报名系统验证码绕过可暴力破解（可导致用户信息泄露）](http://www.wooyun.org/bugs/wooyun-2014-063644)

### 验证码输出在cookie中，这个在乌云中案例也是比较多的。
[WooYun: 吉祥航空任意客票遍历](http://www.wooyun.org/bugs/wooyun-2014-086797)
[WooYun: 5173验证码可被绕过](http://www.wooyun.org/bugs/wooyun-2012-05151)

## 2. 服务端

### 验证码不过期，没有及时销毁会话导致验证码复用
这个是最常见的，乌云上面有大量的案例。
[WooYun: 苏宁易购某系统后台多个超级管理员弱口令（验证码可重复利用）](http://www.wooyun.org/bugs/wooyun-2015-093065)

### 没有进行非空判断
很多时候，我们会遗留掉了验证过程中验证码为空的情况
比如去掉cookie中的某些值或者请求中验证码参数
[WooYun: cmseasy后台暴力破解验证码绕过](http://www.wooyun.org/bugs/wooyun-2014-083050)
[WooYun: ecshop后台暴力破解验证码绕过](http://www.wooyun.org/bugs/wooyun-2014-082981)
[WooYun: ecshop绕过验证码暴利破解2](http://www.wooyun.org/bugs/wooyun-2013-025065)

### 产生的验证码问题集内的答案非常有限
[WooYun: 139邮箱图验证码绕过漏洞（目前图形验证码的可预测案例）](http://www.wooyun.org/bugs/wooyun-2013-025245)

## 3. 其他类型验证码绕过

### “调试功能”还是设计缺陷？
[WooYun: 阿里巴巴某员工登录接口验证码绕过可撞弱密码](http://www.wooyun.org/bugs/wooyun-2014-071289)
[WooYun: 凡客某处验证码绕过漏洞](http://www.wooyun.org/bugs/wooyun-2012-014563)
[WooYun: 财付通商户版登录验证码绕过](http://www.wooyun.org/bugs/wooyun-2013-026219)
[WooYun: 正方教务管理系统设计错误，可绕过验证码进行暴破或扫弱口令](http://www.wooyun.org/bugs/wooyun-2013-021692)

### “逗你玩”类型
有验证码，你输入什么 ，它都给你过，不验证
[WooYun: 网宿某站SQL注入漏洞及验证码绕过](http://www.wooyun.org/bugs/wooyun-2013-020517)
万能验证码（后门？）
[WooYun: 百度空间用户登录绕过验证码验证](http://www.wooyun.org/bugs/wooyun-2012-05095)

## 4. 验证码太简单，容易被机器识别

直接引用猪猪侠的两个金融案例
[WooYun: 银行业(招商银行)设计缺陷可被穷举攻击](http://www.wooyun.org/bugs/wooyun-2015-092497)
[WooYun: 光大证券交易系统资金账号可被穷举攻击](http://www.wooyun.org/bugs/wooyun-2015-092415)

# 0x03修改建议

梳理清楚验证码实现逻辑。（包括不限于验证码会话及时销毁等） 验证码不要太简单。扭曲、粘连等。
推荐Google的ReCaptcha

# 0x04 参考

https://www.owasp.org/index.php/Testing_for_Captcha_(OWASP-AT-008) http://www.mcafee.com/uk/resources/white-papers/foundstone/wp-attacking-captchas-for-fun-profit.pdf http://www.lijiejie.com/safe-issues-of-captcha/ http://*.wooyun.org
最后，祝大家愚人节快乐！

## Replies
