1、使用验证码的目的:进行强制的人机交互以此来抵御机器的自动化攻击。、
作用:防御暴力破解、撞库、用户遍历、找回密码爆库、点击劫持、垃圾短信攻击等(安全领域)
2、在对网站进行攻击时,撞库、爆破并不是必要的,因为当你真正实践的时候你就会发现网站还是能找出来一些漏洞的。在攻击网站之前要先了解它的waf(网站应用级入侵防御系统,可以理解为网站的保镖)
3、古代验证码的遗留问题:
一些不安全的验证码:纯数字、纯文本、计算题、今天星期几、本站域名等等,
只有自动生成的问题才可以做验证码,如果是从题库中挑选出来的话,只需要多访问几次采集出题库和答案做出验证库就可以秒杀验证码了。
4、常规验证码破解思路:
a、打码平台 :由网络兼职者根据打码软件产生的验证码,进行人工输入。
优点:准确性高 缺点:效率低(3~10s都算是比较正常的)
b、识别库:根据目标验证码的情况进行手工制模,告诉工具有哪些字模,当下次在遇见的时候就会按照相似度识别出来。
优点:制作针对目标的验证码识别库。 缺点:遇到复杂的验证码效果不是太好。
c、两款的免费的识别工具:次时代验证码识别系统 亦思验证码识别系统
识别系统在工作之前都是先做出来一个识别库的。
需要了解的比较有用的东西:
图形缩放:使用此滤镜来提高软件的识别速度。
裁剪图像:祛除没有图像的部分,提高识别速率可准确率。
图像滤波:祛除噪点和干扰线
图像二值化:说简单点就是将验证码黑白化,有的验证码是彩色的,机器会因为色彩的不同,而无法识别,这个时候就需要对验证码进行二值化处理。
黑白图处理: 腐蚀:将验证码之间的连接线条分开
膨胀:将验证码中比较细腻的线条给加粗,使其更好识别。
将验证码分开的方法:
1、 自动分割
等距分割:按平均距离进行分割,(适用于古代验证码)
整体分割:根据像素点的分布情况进行分割。
2、手动分割:手动选择要分割的部分。
5、常规验证码的安全问题
a、用js包就能够获取验证码
b、账户密码无限变,但验证码不变。具体来说就是验证的顺序是从账户和密码到验证码,如果账户和密码不正确,那么根本就走不到验证码这一步,这是错误的玩法,正确的顺序应该是先验证验证码—》刷新验证码—》验证用户名—》验证密码
c、30x跳转、弹窗也影响了安全的问题。打开一个网页,在没有打开之前就关掉,那么它的验证码就不会被刷新掉,并且会返回出来。
d、语音播报验证码,电话通知验证码,使用语音的API就可以搞定。
e、滑动图形验证码,对付打码平台,通过分析时间、长度等行为,使用机器学习的方法,比如用按键精灵录制五六十次滑块滑动的行为,并且打乱让机器来学习,这样就能搞定滑块的验证码了。
安全的验证机制:
无论是用户名还是密码错误都会执行验证码的脚本,即刷新验证码。
在本页面加载验证码,(不经过30x跳转)
宁可不要太灵活,也不要舍弃安全。
在后端开启一些有效的waf,有效的防御爆破的情况。
把有效的东西放在后端。css,js等
1236:反向破解,调用搜索图片引擎来识别