验证码的作用
验证码是什么?
验证码(CAPTCHA)是“Completely Automated Public Turing test to tell Computers and Humans Apart”(全自动区分计算机和人类的图灵测试)的缩写,是一种区分用户是计算机还是人的公共全自动程序。
验证码的作用?
可以防止恶意破解密码、刷票、论坛灌水,有效防止某个黑客对某一个特定注册用户用特定程序暴力破解方式进行不断的登陆尝试,实际上用验证码是现在很多网站通行的方式,我们利用比较简易的方式实现了这个功能。
这个问题可以由计算机生成并评判,但是必须只有人类才能解答。由于计算机无法解答CAPTCHA的问题,所以回答出问题的用户就可以被认为是人类。
验证码五花八门,有中文字,纯数字,点击字符、数学运算、滑动方块……
验证码机制原理
->客户端发起请求,
->服务端响应并创建一个新的SessionID同时生成随机验证码,
->服务端将验证码和SessionID一并返回给客户端,
->客户端提交验证码连同SessionID给服务端,
->服务端验证验证码同时销毁当前会话,返回给客户端结果。
验证码绕过的常见姿势
设置了验证码并不是完全可靠,在很多情况存在验证码绕过的情况(举例是在登录处)
一、前端验证验证码,并没有后端验证。直接抓包然后进行跑数据包,反正有没有验证码的阻碍;
二、验证码设置了但是并没有效验,乱输验证码也能够成功的登录;
三、验证码可重复使用,如果验证码认证成功后没有将session及时清空,将会导致验证码首次认证成功之后可重复使用; http://wy.zone.ci/bug_detail.php?wybug_id=wooyun-2014-083092
四、空验证码绕过,验证码空值绕过,可以通过直接删除验证码参数或者Cookie中的值来绕过判断,进行暴力破解;http://wy.zone.ci/bug_detail.php?wybug_id=wooyun-2014-083050五、验证码干扰过低,轻松使用脚本识别;http://wy.zone.ci/bug_detail.php?wybug_id=wooyun-2015-092497
六:验证码会在HTML页面输出;https://wy.zone.ci/bug_detail.php?wybug_id=wooyun-2012-06634
七、验证码可控制,比如他的验证码包含在URL里面,是一个URL传参,我们可以把URL设置定,那么验证码则可控制;https://wy.zone.ci/bug_detail.php?wybug_id=wooyun-2012-014563
八、验证码有规则,比如是时间戳的后6位(rand函数进行随机数);
九、有万能验证码,验证码无论是什么,只要输入000000就能直接绕过;http://wy.zone.ci/bug_detail.php?wybug_id=wooyun-2012-05095
十、验证码有的时候会藏在cookie里面,分析一下是不是存在验证码的参数;https://wy.zone.ci/bug_detail.php?wybug_id=wooyun-2012-05151
十一、图片验证码,自动识别;https://wy.zone.ci/bug_detail.php?wybug_id=wooyun-2013-025245
多次登录后才出现验证码绕过:
基于session:http://wooyun.2xss.cc/bug_detail.php?wybug_id=wooyun-2015-0114450
基于ip: http://wy.zone.ci/bug_detail.php?wybug_id=wooyun-2014-080327
基于 用户: 爆破用户名,而非爆破密码
密码找回漏洞
有一类验证码,他并不是区分用户是计算机还是人的公共全自动程序,他是用来证明你的身份的,比如你登录微信,支付宝,支持短信验证码登录,像这类验证码他实际上是用来区分你的身份的。
第一种就是找回密码,往邮箱发送明文或密文的密码或者验证码(手机短信验证就是往你手机号码发验证码)通过这样的方法来判断是否是本人;
第二种发送一个重置密码的链接到邮箱。
密码找回逻辑测试一般流程
首先尝试正常密码找回流程,选择不同找回方式,记录所有数据包分析数据包;
找到敏感部分;
分析后台找回机制所采用的验证手段;
修改数据包验证推测。
上述的密码找回方法会有什么样的漏洞呢?
1.验证码发送后前端返回;https://wy.zone.ci/bug_detail.php?wybug_id=wooyun-2012-05630
2.验证码无次数限制可爆破;http://wy.zone.ci/bug_detail.php?wybug_id=wooyun-2012-011833
3.验证码可控;http://wooyun.2xss.cc/bug_detail.php?wybug_id=wooyun-2014-086716
4.直接修改密码页面;http://wy.zone.ci/bug_detail.php?wybug_id=wooyun-2013-042404
5.越权漏洞-->自己验证码通过改包然后修改他们密码;
http://wy.zone.ci/bug_detail.php?wybug_id=wooyun-2014-081467
http://wy.zone.ci/bug_detail.php?wybug_id=wooyun-2013-016896
http://wy.zone.ci/bug_detail.php?wybug_id=wooyun-2013-020532
在注册之前,通过预先设定一个密保问题,忘记密码时,通过此密保进行认证,认证成功进入密码修改页面。
密保问题可能容易直接被猜测 (比如很多学校的知道 学号和身份号码 就可以重置校园通的密码)
密保问题答案页面中显示(数据包里面可能自带了密保答案,可能在 JS 里面)
靶场大闯关
1. 打开站点发现该站点的CMS是 UsualToolCMS,下载该站点的CMS源码后发现了 cmsadmin文件夹,访问该站点的/cmsadmin为网站后台。
2. 使用Burp的Repeater模块发包,并多次修改密码, 不放包,发现验证码一直显示 账户或密码不匹配!,说明该验证码可重复使用,然后用 Intruder模块爆破密码,得到密码为 root。
3. 登录后台,进入后台之后我们其实也还是只能操作网站,如果想要操纵目标计算机就需要后台Getshell,想办法让自己的一句话木马到目标网站上。
4. 源码分析发现 cmsadmin/a_templetex.php里面存在危险函数 file_put_contents()这个函数可以将字符串写入文件中,在分析代码发现我们如果能控制 $filename 和$contents 的值,就可以决定写的文件的 名字和内容 了,所以只要确定传参不会被过滤、代码能执行到这,那就达成写马的一切条件了。
5. 用Burp抓取该目标站点的 a_templetex.php,先把数据包改为 POST请求,在满足参数x=m,然后在写入木马
6. 测试木马文件,在连接蚁剑,获取Flag
常见问题汇总
验证码是什么?
验证码分两种
验证码是一种 区分用户 是计算机还是人的公共全自动程序(比如登陆的时候要填写的);
识别身份,比如短信验证码、电话验证码、邮箱验证码。
验证码可控有什么危害?
可以发送垃圾邮件,钓鱼网站链接,不良网站链接......
越权是什么?
通过自己的验证码,改包,去修改别人的密码。
校验验证码一般有哪些生成规则?
可能对用户的用户名,密码,登陆时间之类的进行生成(这个可能性太多了,不过时间戳是比较常见的,以前遇到过,邮箱找回链接,只需要时间戳和用户名就可以修改密码,那样就能尝试爆破,自己先接一个看看规律)。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)