安全技术 | 验证码破解与密码找回漏洞 - 总结大全笔记
掌控安全学院
编辑于 2019年12月24日 12:55
收录于文集
共20篇

搜索公众号:暗网黑客教程   

可领全套安全课程、配套攻防靶场

一.验证码

验证码(CAPTCHA)是“Completely Automated Public Turing test to tell Computers and Humans Apart”(全自动区分计算机和人类的图灵测试)的缩写,是一种区分用户是计算机还是人的公共全自动程序。

这个问题可以由计算机生成并评判,但是必须只有人类才能解答。

由于计算机无法解答CAPTCHA的问题,所以回答出问题的用户就可以被认为是人类。

验证码五花八门,有中文字,纯数字,点击字符、数学运算…… 

验证码分两种:

1.验证码是一种区分用户是计算机还是人的公共全自动程序(比如登陆的时候要填写的)

2.识别身份,比如短信验证码、电话验证码、邮箱验证码

验证码的作用

可以防止恶意破解密码、刷票、论坛灌水,有效防止黑客对某一个特定注册用户用特定程序暴力破解方式进行不断的登陆尝试,实际上用验证码是现在很多网站通行的方式,我们利用比较简易的方式实现了这个功能。

图像验证码绕过图像验证码机制原理

客户端发起请求->服务端响应并创建一个新的SessionID同时生成随机验证码,将验证码和SessionID一并返回给客户端->客户端提交验证码连同SessionID给服务端->服务端验证验证码同时销毁当前会话,返回给客户端结果。

 

客户端可能存在的安全问题

1、有的网站验证码由本地js生成仅仅在本地用js验证。可以在本地禁用js,用burp把验证字段删除。

2、有的网站把验证码输出到客户端html中,送到客户端Cookie或response headers。

3、有些网站默认不显示验证码,而是在输入错误一定数量之后才需要验证验证码,开发人员可能在Cookie中写入一个标记loginErr,用来记录错误数量,则可以不更新Cookie中的loginErr值反复提交,验证码就不会出现。

填写存在的用户名,填写错误密码,尝试3次,出现验证码;填写正确的验证码,则可以无限制尝试密码,验证码不会再变换。

 

服务端可能存在的安全问题

1、验证码不过期,没有及时销毁会话导致同一验证码反复可用。攻击者可以在Cookie中带固定的sessionID和固定的验证码字符串。

2、没有对验证码进行非空判断,导致可以直接删除验证码参数。

3、产生的验证码问题有限。

 

图像验证码绕过姿势

1. 仅在客户端生成验证码,并没有后端验证。

有的网站验证码由本地js生成仅仅在本地用js验证。

虽然该系统存在验证码,但是其验证码并没有向服务器传输,而是在本地客户端直接进行验证。

我们可以在输入一次正确的验证码(绕过客户端验证)后,使用BurpSuite对用户名和密码同时进行暴力猜测。

返回的数据是"账号不存在&#​34;,而不是"验证码错误&#​34;,说明此处已不需要输入正确的验证码就能发送登录请求,只要密码字典够大,我们就能进行暴力破解。

 

2. 验证码无效验

验证码设置了但是并没有效验,乱输验证码也能够成功的登录(估计老板没给开发工资吧)。

 

3. 验证码可以重复使用

导致验证码不刷新(固定)的原因是:登录密码错误之后,session中的值没有更新,验证码不变。验证码不刷新通常有以下两种情况:无条件不刷新、有条件不刷新。

(1). 无条件不刷新

无条件不刷新是指在某一时间段内,无论登录失败多少次,只要不刷新页面,就可以无限次的使用同一个验证码来对一个或多个用户帐号进行暴力猜解。

换句话说,攻击者可以在同一个会话下,在获得第一个验证码后,后面不再主动触发验证码生成页面,并且一直使用第一个验证码就可循环进行后面的表单操作,从而绕过了验证码的屏障作用,对登录进行暴力猜解。

 

案例:酷6网某登录位置可绕过验证码进行大规模撞库

http://www.anquan.us/static/bugs/wooyun-2016-0169672.html

 

安全建议:建议针对一次请求生成的验证码只能用一次,用完立即过期。每次生成的验证码不允许跨会话和请求使用。

(2). 有条件不刷新

有条件不刷新多见于如下情况:登录失败之后,系统会打开一个新页面或者弹出一个新的警告窗口,提示用户登录失败,点击确定后返回登录界面且验证码刷新。

这种情况下,只要我们不关闭新窗口或弹窗,配合使用Burpsuite的intruder模块就可以进行暴力破解了。

验证码此时并不会重置,一切重置验证码的操作都在浏览器,所以在Session不失效的时效内,可以无限重用验证码,这时就可以使用BurpSuite进行暴力破解了,验证码形同虚设。

 

4. 验证码空值绕过

验证码空值绕过,是在日常的渗透测试中很容易被我们忽略的一点,实际应用中我们可以通过直接删除验证码参数或者Cookie中的一些值来绕过判断,进行暴力破解。

比如,我们现在抓一个包,发现登录参数是user=admin&password=admin&yzm=4123。

yzm验证码参数,但是我们如果去掉yzm的传参我们就可以绕过验证码机制,直接传参user=admin&password=admin,验证码就失效了。

5. 验证码可控制

比如他的验证码包含在URL里面,是一个URL传参,我们可以把URL设置定,那么验证码可控制。可以发送垃圾邮件,钓鱼网站链接,不良网站链接。

案例:

江西智能交通某短信验证码接口任意短信伪造

http://www.anquan.us/static/bugs/wooyun-2014-086716.html

 

6. 验证码有规则

比如是时间戳的后6位。

7. 万能验证码

渗透测试的过程中,有时候会出现这种情况,系统存在一个万能验证码,如000000或888888,只要输入万能验证码,就可以无视验证码进行暴力破解。

 

8. 验证码前端可获取

这种情况在早期的一些网站中比较常见,主要是因为程序员在写代码的时候安全意识不足导致的。

验证码通常会被他们隐藏在网站的源码中或者高级一点的隐藏在请求的Cookie中,但这两种情况都可以被攻击者轻松绕过。

(1). 验证码隐藏在源码之中

验证这种情况很简单,我们只需要记住验证码,然后右键打开网站源代码,Ctrl+F搜索,输入刚才的验证码,如果可以成功匹配到,那恭喜你,接下来就可以写工具,提取源码中的验证码并将其放入每次请求的报文中,来进行帐号破解,这里推荐使用python。

(2). 验证码隐藏在Cookie中

一般来说,我们会把验证码的值用Session存储起来,通过对比用户提交的验证码和Session中的验证码,就可以知道输入是否正确。

由于Session会占用服务器资源,有的开发人员会把验证码的值加密后存储在Cookie中。

这种情况,我们可以在提交登录的时候抓包,然后分析一下包中的Cookie字段,看看其中有没有相匹配的验证码,或者是经过了一些简单加密后的验证码。

9. 验证码易识别

在平常的漏洞挖掘过程中,如果我们发现登录的验证码非常简单且易于识别,那我们就可以尝试使用自动化工具来进行登录破解了,如PKAV的HTTP Fuzzer。

案例:http://www.anquan.us/static/bugs/wooyun-2015-0120388.html

 

10. 存在无验证码页面

经过测试,如果我们发现网站验证码自身并不存在缺陷,那我们接下来就可以尝试寻找一些其他的登录页面或接口来尝试暴力破解。

(1). 隐藏的页面

这种页面通常是留给测试人员使用的,或者是一些忘记删除的老界面,利用的前提是该界面依旧可用,一般情况下,我们可以通过扫描器来发现这种页面。

 

(2). 微信公众号、APP登录页面

很多网站的web登录页面已经做的相当完善了,但是却在微信公众号的绑定接口或者是APP的登录界面上面栽了跟头,在渗透测试的过程中,一定不要忘了对公众号和APP的测试。

11. 验证码数量有限

多见于计算类型的验证码,如1+8=?,这种类型的验证码严格意义上来说不能叫做验证码,多刷新几次验证码,我们可能会发现系统中的算数题目只有那么几道

这种情况下只要将验证码全部下载下来,生成一个md5库,然后将前端生成的验证码与本地文件进行对比即可。

二.密码找回漏洞

有一类验证码,他并不是区分用户是计算机还是人的公共全自动程序,他是用来证明你的身份的,比如你登录微信,支付宝,支持短信验证码登录,像这类验证码他实际上是用来区分你的身份的。

第一种就是找回密码,往邮箱发送明文或密文的密码或者验证码(手机短信验证就是往你手机号码发验证码)通过这样的方法来判断是否是本人

第二种发送一个重置密码的链接到邮箱

短信验证码

短信验证码常见于注册,忘记密码,确认下单等阶段,特别是一些涉及到用户个人敏感行为时候,为了确认操作是用户本人执行的通常会使用短信验证码进行二次认证。

同时,短信验证码也是最为常见的验证码类型之一

密码保护问题有哪些缺陷

在注册之前,通过预先设定一个密保问题,忘记密码时,通过此密保进行认证,认证成功进入密码修改页面。

1.密保问题可能容易直接被猜测  (比如很多学校的知道学号和身份证号码就可以重置校园通的密码)

2.密保问题答案页面中显示(数据包里面可能自带了密保答案,可能在JS里面)

 

短信验证码绕过验证码可控

比如他的验证码包含在URL里面,是一个URL传参,我们可以把URL设置定,那么验证码可控制。

案例:

江西智能交通某短信验证码接口任意短信伪造

http://www.anquan.us/static/bugs/wooyun-2014-086716.html

直接修改密码页面

案例:易名中国逻辑错误可重置他人密码(绕过验证码有效次数)

http://www.anquan.us/static/bugs/wooyun-2013-040908.html

客户端验证信息泄露:验证码内容包含在返回包中

程序员在编写验证程序时有可能会验证结果返回到客户端,由客户端根据服务端提供的验证结果进行下一步操作,攻击者可以通过篡改验证结果或直接执行下一步操作实现绕过。

起因:因为开发不严谨导致通过抓包可以看到验证码在回显中显示。

危害:由于验证码直接返回,通过该漏洞可以注册任意用户,重置已注册用户密码,修改绑定信息等高危操作,对用户造成一定影响。

案例:

保险行业之现代财产保险(中国)有限公司奇葩验证码,导致任意用户密码修改

http://www.anquan.us/static/bugs/wooyun-2016-0172266.html

 

复星保德信保险公司多种方式绕过密码找回验证码功能修改任意账号密码

http://www.anquan.us/static/bugs/wooyun-2015-0139468.html

方法:Burp里右键 Do intercept =>Response to this request,拦截返回包。

修复建议:不要将短信验证码在回显中显示,验证码只存于服务端中并不能通过任何api直接获取。

客户端v流程控制绕过:修改返回包内容绕过验证(拦截替换返回包)

程序员在编写验证程序时有可能会验证结果返回到客户端,由客户端根据服务端提供的验证结果进行下一步操作,攻击者可以通过篡改验证结果或直接执行下一步操作实现绕过。

起因:前端校验导致下列问题。

危害:可跳过正常校验逻辑。

方法:修改返回包的内容,欺骗前端校验。

案例:吉祥航空可以绕过手机验证码修改任意账号密码

http://www.anquan.us/static/bugs/wooyun-2015-0104509.html

修复建议:服务端严格做检验,和开发谈谈心。

三.无法验证

有验证码模块,但验证模块与业务功能没有关联性,此为无效验证,一般在新上线的系统中比较常见。

1.验证码无效验

获取短信验证码后,随意输入验证码,直接输入两次密码,可成功更改用户密码,没有对短信验证码进行验证,可能导致CSRF等问题。

2. 越权漏洞-->自己验证码通过改包然后修改他们密码(操作目标篡改绕过)

如果某操作采用了连续身份校验机制或身份校验过程与操作过程分离,可以尝试在身份验证过程中替换身份校验对象或操作对象实现绕过验证。

一般来说短信验证码仅能使用一次,验证码和手机号未绑定,验证码一段时期内有效,那么就可能出现如下情况:

1. A手机的验证码,B可以拿来用;

2. A手机在一定时间间隔内接到两个验证码,都可以用。(案例:网易邮箱-手机验证存在业务缺陷http://www.anquan.us/static/bugs/wooyun-2012-08679.html)

 

举个栗子:任意用户密码重置

第一步,利用自己的手机号接收验证码进行验证,下一步跳转到一个重置密码的页面。

第二步,抓包,篡改手机号,改成要目标账号的手机号,就可以任意用户密码重置了。

案例:中国移动手机冲浪任意用户注册

http://www.anquan.us/static/bugs/wooyun-2013-026652.html

顺丰速运某系统任意手机号注册及密码重置

http://www.anquan.us/static/bugs/wooyun-2016-0189300.html

问题剖析:业务一致性存在安全隐患,身份验证与密码修改过程分开,验证无效。

 

解决方案:

1.在服务器进行有效验证,手机号和验证码在服务器进行唯一性绑定验证。

2.在服务端限制验证码发送周期,设置时效,限制次数。

 

缺失的身份认证-->绑定别人的账号到自己的手机(验证码与手机号未绑定)

案例:中国万网任意账号劫持+验证码漏洞

http://www.anquan.us/static/bugs/wooyun-2013-016896.html

 

平行越权需要登录后使用,而缺失身份认证不用。

 

四.验证码爆破

短信验证码一般由4位或6位数字组成,若服务端未对验证时间、次数进行限制,则存在被爆破的可能。

案例:

Ticwear助手APP接口、商城、开发者平台若干安全漏洞打包(任意用户密码重置/短信验证码爆破) | WooYun-2015-155994 | WooYun.org

http://www.anquan.us/static/bugs/wooyun-2015-0155994.html

今天你知道了吗    加入qq群:814485313      

黑客技术大咖在线解答     你敢问,我就敢答 ! 

点击复制下方链接     可免费观看更多精彩黑客教学视频  

https://ke.qq.com/course/275794?flowToken=1004603