浅谈暴力破解及验证码安全

一、暴力破解及验证码安全

注意事项

破解前一定要有一个强大有效的字典(top100、top2000 、优快云、QQ、163等常用密码):判断用户是否设置了复杂的密码、网站是否存在验证码、尝试登陆的行为是否有限制、网站是否双因素认证、token值等等

首先对目标网站进行注册,搞清楚账号面膜的一些限制,比如目标站点要求密码必须是8位以上,字母数字组合。则可以按照此有话字典,比如去掉不合符要求的免密

如果破解的是管理后台密码,可使用admin/administrator/root账号几率较高,可使用这三个账号+任意密码字典进行暴力破解,破解过程中一定要注意观察提示,如“用户名或免密错误”,“密码错误”,“用户名不存在”等相关提示。

二、C/S架构暴力猜解

C/S即客户端/服务器,基于C/S架构的应用程序,如ssh、ftp、sql-server、mysql等,这些服务往往提供一个高权限的用户,而这个高权限的用户往往可以进行执行命令的操作,如sql-server的sa,mysql的root,Oracle的sys和system账号,使用这些高权限的用户能在很大程度上给开发人员带来方便,但如果口令被破解带来的危害也是相当大的。C/S架构主要使用的破解工具Hydra、Bruter、X-scan

三、B/S架构暴力猜解

一般是对web应用程序中的高权限用户进行蔡姐,如网站的内容管理系统账户,一般针对B/S的宝丽蔡姐,使用BurpSuite镜像表单爆破

API接口暴力猜解参考 https://xz.aliyun.com/t/6330

四、Hydra安装及使用

安装

  • Hydra 安装

    # wget --no-check-certificate https://www.thc.org/releases/hydra-8.1.tar.gz
    # tar zxvf hydra-8.1.tar.gz 
    # cd hydra-8.1 
    # ./configure 
    # make && make install 
    

参数说明

hydra [[[-l LOGIN|-L FILE] [-p PASS|-P FILE]] | [-C FILE]] [-e ns] 
 
[-o FILE] [-t TASKS] [-M FILE [-T TASKS]] [-w TIME] [-f] [-s PORT] [-S] [-vV] server service [OPT] 
 
-R 继续从上一次进度接着破解。 
 
-S 采用SSL链接。 
 
-s PORT 可通过这个参数指定非默认端口。 
 
-l LOGIN 指定破解的用户,对特定用户破解。 
 
-L FILE 指定用户名字典。 
 
-p PASS 小写,指定密码破解,少用,一般是采用密码字典。 
 
-P FILE 大写,指定密码字典。 
 
-e ns 可选选项,n:空密码试探,s:使用指定用户和密码试探。 
 
-C FILE 使用冒号分割格式,例如“登录名:密码”来代替-L/-P参数。 
 
-M FILE 指定目标列表文件一行一条。 
 
-o FILE 指定结果输出文件。 
 
-f 在使用-M参数以后,找到第一对登录名或者密码的时候中止破解。 
 
-t TASKS 同时运行的线程数,默认为16。 
 
-w TIME 设置最大超时的时间,单位秒,默认是30s。 
 
-v / -V 显示详细过程。 
 
server 目标ip 
 
service 指定服务名,支持的服务和协议:telnet ftp pop3[-ntlm] imap[-ntlm] smb smbnt 
http-{head|get} http-{get|post}-form http-proxy cisco cisco-enable vnc 
ldap2 ldap3 mssql mysql oracle-listener postgres nntp socks5 rexec 
rlogin pcnfs snmp rsh cvs svn icq sapr3 ssh smtp-auth[-ntlm] pcanywhere 
teamspeak sip vmauthd firebird ncp afp等等。 
 
OPT 可选项

各种用法实例

1、破解ssh: 
hydra -l 用户名 -p 密码字典 -t 线程 -vV -e ns ip ssh 
hydra -l 用户名 -p 密码字典 -t 线程 -o save.log -vV ip ssh 
 
 
2、破解ftp: 
hydra ip ftp -l 用户名 -P 密码字典 -t 线程(默认16) -vV 
hydra ip ftp -l 用户名 -P 密码字典 -e ns -vV 
 
 
3、get方式提交,破解web登录: 
hydra -l 用户名 -p 密码字典 -t 线程 -vV -e ns ip http-get /admin/ 
hydra -l 用户名 -p 密码字典 -t 线程 -vV -e ns -f ip http-get /admin/index.php
 
 
4、post方式提交,破解web登录: 
hydra -l 用户名 -P 密码字典 -s 80 ip http-post-form "/admin/login.php:username=^USER^&password=^PASS^&submit=login:sorry password" 
hydra -t 3 -l admin -P pass.txt -o out.txt -f 10.36.16.18 http-post-form "login.php:id=^USER^&passwd=^PASS^:<title>wrong username or password</title>" 
(参数说明:-t同时线程数3,-l用户名是admin,字典pass.txt,保存为out.txt,-f 当破解了一个密码就停止, 10.36.16.18目标ip,http-post-form表示破解是采用http的post方式提交的表单密码破解,<title>中 的内容是表示错误猜解的返回信息提示。) 
 
 
5、破解https: 
hydra -m /index.php -l muts -P pass.txt 10.36.16.18 https 
 
 
 
6、破解teamspeak: 
hydra -l 用户名 -P 密码字典 -s 端口号 -vV ip teamspeak 
 
 
 
7、破解cisco: 
hydra -P pass.txt 10.36.16.18 cisco 
hydra -m cloud -P pass.txt 10.36.16.18 cisco-enable 
 
 
 
8、破解smb: 
hydra -l administrator -P pass.txt 10.36.16.18 smb 
 
 
 
9、破解pop3: 
hydra -l muts -P pass.txt my.pop3.mail pop3 
 
 
 
10、破解rdp: 
hydra ip rdp -l administrator -P pass.txt -V 
 
 
 
11、破解http-proxy: 
hydra -l admin -P pass.txt http-proxy://10.36.16.18 
 
 
 
12、破解imap: 
hydra -L user.txt -p secret 10.36.16.18 imap PLAIN 
hydra -C defaults.txt -6 imap://[fe80::2c:31ff:fe12:ac11]:143/PLAIN

五、防范暴力猜解

防止暴力猜解是非常简单的,无论是B/S架构或者是C/S架构,下面总结出一下几点。

1.密码的复杂性

毫无疑问,密码设置一定要复杂,这是最基本的,最底层的防线,密码设定一定要有策略:

  • 对于重要的应用,密码长度最低位8位数以上,尽量在8~16位数
  • 绝不允许以自己的手机号码,邮箱等关键“特征”为密码
  • 用户名与密码不能有任何联系,如用户名为“admin”,密码为“admin888”。
  • 仅仅以上三点是不够的,比如说“123456”,“222222”,“111111”这样的弱口令密码,长度够了,但是也是极为危险,因为这些密码一般都已收录到了攻击者的密码字典中,所以就必须要增加密码的复杂性,比如以下方案:
    • 至少一个小写字母(a-z)
    • 至少一个大写字母(A-Z)
    • 至少一个数字(0-9)
    • 至少一个特殊字符

2.验证码措施

验证码是一种区分用户是计算机和人的公共全自动程序

使用验证码可以有效地防止:

  • 恶意破解密码

  • 刷票

  • 论坛灌水等

    可以说验证码最主要的是防范“机器人“

验证码防范手段

  • 滑动验证码
  • 点击对应图片
  • 输入图片中的文字或者数字

3.限制访问的频率

  • 当短暂时间内大量发送请求时可以封IP,禁止发送请求
  • 或短暂封禁一段时间
  • 当短期内访问次数达到一定数目可以要求发送手机验证码或回答密保问题

六、验证码安全

验证码是一种区分用户是计算机还是人的公共全自动程序,可以防止:恶意破解密码、刷票、论坛灌水,有效防止某个黑客对某一个特定注册用户用特定程序暴力破解方式进行不断的登陆尝试,实际上用验证码是现在很多网站通行的方式,我们利用比较建议的方式实现了这个功能。这个问题可以由计算机生成并评判,但是必须只有人类才能解答。由于计算机无法解答CAPTCHA的问题,所以会打出问题的用户可以被认为是人类。

工作原理

常见的图形验证码是与web中的会话相关联的,在一个会话开始时,在需要使用验证码的地方会生成一个与当前会话相关的验证码,用户识别出验证码后通过填写表单将数据提交给服务器,服务器端会验证此次会话中的验证码是否正确。具体来说,其工作流程如图1所示:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2P0Ex0VX-1600787880307)(C:\Users\79021\Desktop\笔记\渗透测试\其他漏洞\暴力破解.assets\图1-验证码技术工作原理-298x300.jpg)]

图1 验证码技术工作原理

对用户方来说,用户访问起始页面,识别返回页面中的验证码,在输入验证码和其他信息后提交表单,在服务器处理后可查看到当前操作是否成功。

服务器在接收到用户对初始页面的请求后,会自动创建一个新的会话,同时生成验证码来关联这个会话,并且生成用户可见到的验证码图片,最后这些页面返回到用户的浏览器上,用户此时可看到完整的页面;在接到用户提交的表单请求时,服务器会比较用户提交的验证码值并与之前存储在此会话下的验证码值做比较,如果一致判断验证码是正确,否则认为提交的验证码是错误的,可能是客户端是计算机或者用户识别错误。服务器端进行这些处理后将处理结果反馈给用户。如果提交的验证码是正确的,则按照预定流程进行下一步骤,否则回到需要用户输入的那个界面上。

存在的问题

验证码作为区分人与机器的一道重要屏障,与之相关的对抗技术一直在WEB安全研究上有着重要意义。图片验证码生成算法以及程序实现流程上都有可能带来问题,容易被攻击者突破。

图片验证码的生成可能存在如下问题

1) 图片验证码的字符空间小

如果选取的字符空间较小,则让验证码识别变得相对简单。字母数字组合的字符集比单纯为数字的字符集效果要好。

2) 图片中的字符规则

字符进行变形,扭曲不利于程序的识别,而对人眼识别是无障碍的,但此方法对生成程序来说有一定的难度。

3) 图片中缺少干扰图案

干扰图案能有效增加验证码的识别难度,并且对生成程序来说代价小。

在验证码的程序实现流程方面可能存在如下问题

1) 验证码固定

一般地,用户在开始访问初始页面时,浏览器会向服务器发起页面请求,服务器此时创建会话,同时返回的页面里会嵌入验证码图片地址,浏览器在加载响应页面后,会自动加载验证码图片地址。服务器在接收到验证码图片地址的请求时,会对当前会话生成一个对应的验证码并且返回验证码图片。用户此时根据就可根据验证码图片信息填写表单数据来进行后面的操作,这时,服务器如果检验出提交的验证码是错误的,服务器会返回页面提示错误然后跳转到初始页面,因初始页面内嵌了验证码图片地址,浏览器再次自动刷新验证码页面。

如果验证码输入错误,会在上面的流程里自动刷新验证码,正常情况下,这个过程看起来是没有问题的。但是,由于HTTP请求响应式的工作原理,使得攻击者有可能控制验证码生成页面请求不被触发,使得在服务器上同一会话内,服务器端保存的此会话下的验证码一直有效。
基于此,服务器端的正确处理应该是在验证码检验失败时,就需要设置此验证码失效,同时对生成的每一个验证码也需要设置有效期。

2) 验证码的字符串值出现在返回的响应中

这是属于程序编码考虑不当导致,比如忘记注释掉调试信息导致。验证码可能出现在响应包中的Cookie, URL, 页面注释,甚至验证码在展示的时候直接就是文本方式,这样就完全失去了使用验证码的价值了。

3) 验证码长度可指定

在页面上存在参数可指定验证码的位数,这可简化识别工作。此问题的出现也可能是调试的需要,并发布时忘记注释掉相关代码而导致。

对抗现状

自验证码技术问世以来,其成为自动化程序运行的第一大敌人。在利益的驱动下,突破封锁技术自然也会产生。一般来说,验证码的对抗技术有如下几个方面:

1)避免触发验证码

验证码的引入会带来用户友好度的下降,增加验证码输入以及人眼对验证码识别的可能错误等都会带来不好的使用体验。这对追求用户体验的网站来说,在没遇到可疑行为时,其采取的策略是默认不开启验证码功能,当触发可疑行为识别规则时,才会出现验证码。基于此原理,对攻击方来说,就是尽量避免触发可能出现验证码的规则。一般可疑行为识别是通过检查频繁尝试并且出错这个行为来进行,基于此的对抗措施则是使用不同的IP来进行尝试,或者等待足够的时间再次尝试,这样让目标网站程序认为这些尝试都是正常的访问请求,从而在自动化程序端连续作业时不会出现验证码而达到绕过的目的。

2)验证码固定

从前面的验证码固定问题描述可看出,攻击者可以在同一个会话下,在获得第一个验证码后,后面不再主动触发验证码生成页面,并且一直使用第一个验证码就可循环进行后面的表单操作,从而绕过了验证码的屏障作用。

3)验证码机器自动识别

计算机自动识别验证码,主要原理是通过一定的算法预先建立验证码范围内的字体特征库,再将要识别的验证码通过同样的算法生成特征,与之前保存的特征库进行比较,进而得到图片验证码的值。

一般地,其识别过程有如下图所示的处理流程:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TuHzwqwo-1600787880311)(C:\Users\79021\Desktop\笔记\渗透测试\其他漏洞\暴力破解.assets\图2-验证码计算机识别过程-300x150.jpg)]

图2 验证码计算机识别过程

A. 去噪处理

主要是去掉图像里的所有干扰信息,比如背景的点,线等。

B. 图像二值化

图像二值化就是将图像上的像素点的灰度值设置为0或255,也就是将整个图像呈现出黑白效果。图像二值化主要是为了将图像与空白区分开来,方便后续步骤的进行。

C. 切片处理

图片的切片处理是将每个字符所在区域分离成一个个的图片,确保一个图片内只有一个文字。

D. 文字图片标准化

对切片后的每个字符图片,还需要进行变形修复处理,比如旋转,缩放等操作尽量将每一个字符图片都调整到标准格式,减小随机度。

E. 字符模板识别

在最后的字符识别阶段,常用是通过模板对比的方法。模板的生成就是通过上述处理过程后,对给定图片处理后把生成的特征保存下来,并且人工识别输入其对应的字符。在用作识别阶段时,就与保存的每个字符特征模板进行比较,从中找出最相近的一个字符来。

4)人工分布式识别

机器自动识别图片验证码,对简单的情况能有较高的准确率,但对干扰多,变形复杂的图片验证码,其准确率会很差。由于图片验证码重要度增加,复杂的图片验证码被大量使用,导致近年来出现了利用众包力量实现的人工验证码识别平台。
其工作原理图下所示:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MI6c2gXz-1600787880313)(C:\Users\79021\Desktop\笔记\渗透测试\其他漏洞\暴力破解.assets\图3-人工分布式识

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值