弱口令和暴力破解
弱口令
弱口令( weak password ) 没有严格和准确的定义,通常认为容易被别人(他们有可 能对你很了解)猜测到或被破解工具破解的口令均为弱口令。弱口令指的是仅包含 简单数字和字母的口令。
公共弱口令
公共弱口令就是常见的密码,也就是根据大量的密码数据统计得出的出现频率较高的弱口令。
条件弱口令
往往与这个人的个人信息(姓名,生日,手机号,特殊昵称,爱好,社交软件账号,常用username ,邮箱 ),关系成员(家庭成员,男女朋友 ),所处环境(车牌号,公司信息比如公司名称,公司成立时间或地点,公司 domain 等 ),还有特殊的指定字符(数字,单词 )等相关
弱口令示例
简单数字组合: 000000 111111 11111111 112233 123123
顺序字符组合:abcdef abcabc abc123 a1b2c3 aaa111
临近字符组合:123qwe Qwerty qweasd
特殊含义组合:admin password p@ssword Iloveyou 5201314
弱口令原因
与个人习惯、意识相关,为了避免忘记密码,使用一个非常容易记住的密码,或者是直接采用系统的默认密码等。相关的安全意识不够,总认为不会有人会猜到我这个弱口令的。
暴力破解
顾名思义,暴力破解的原理就是使用攻击者自己的用户名和密码字典,一个一个去枚举,尝试是否能够登录。因为理论上来说,只要字典足够庞大,枚举总是能够成功的!
但实际发送的数据并不像想象中的那样简单——“ 每次只向服务器发送用户名和密码字段即可!”,实际情况是每次发送的数据都必须要封装成完整的 HTTP 数据包才能被服务器接收。但是你不可能一个一个去手动构造数据包,所以在实施暴力破解之前,我们只需要先去获取构造HTTP包所需要的参数,然后扔给暴力破解软件构造工具数据包,然后实施攻击就可以了。Web暴力破解通常用在,已知部分信息,尝试爆破网站后台,为下一步的渗透测试做准备。
密码破解
密码破解介绍
指用枚举的方式来爆破用户信息。具体的流程是用事先收集好的数据集成一个字典,然后用字典不断进行枚举,直到枚举成功
暴力破解工具
Burpsuite
Hydra
Metasploit
SNETCracker
https://github.com/shack2/SNETCracker
暴力破解字典
-
Default Password
历年弱口令 top100 , github 上搜索弱口令字典
https://github.com/k8gege/PasswordDic
https://github.com/danielmiessler/SecLists
https://192-168-1-1ip.mobi/default-router-passwords-list/
https://github.com/danielmiessler/SecLists/blob/master/Passwords/Default-Credentials/default-passwords.csv
https://github.com/Dormidera/WordList-Compendium
-
创建自定义字典
-
Crunch
crunch 4 6 0123456789ABCDEF -o crunch1.txt #长度从4到6用哪个字母 crunch 4 4 -f /usr/share/crunch/charset.lst mixalpha #只有长度4使用字符集mixalpha @ :小写字母字符 , :大写字母字符 % :数字字符 ^ :特殊字符,包括空格 crunch 7 7 -t ,@@^^%%
-
Cewl
ruby编写的应用程序,可以将给定的URL爬行到指定的深度,能有选择的跟随外部链接,并返回一个单词列表,这些单词可用于密码破解。
cewl [options] <url> Options: -h,--help:显示帮助。 -k,-keep:保留下载的文件。 -d <x>,-depth <x>:到达蜘蛛的深度,默认为2。- -m,--min_word_length:最小字长,默认为3。- -o,--offsite:让蜘蛛访问其他站点。 -w,--write:将输出写入文件。 -u,--ua <agent>:要发送的用户代理。 -n,--no-words:不输出单词表。 --with-numbers:接受带有数字以及字母 -a,--meta的单词:包括元数据。 --meta_file文件:元数据的输出文件。 -e, email:包括电子邮件地址。 --email_file <文件>:电子邮件地址的输出文件。 --meta-temp-dir <dir>:exiftool解析文件时使用的临时目录,默认为/ tmp。 -c, count:显示找到的每个单词的计数。 -v,verbose:详细。 --debug:额外的调试信息。 Authentication --auth_type:摘要或基本。 --auth_user:身份验证用户名。 --auth_pass:验证密码。 proxy --proxy_host:代理主机。 --proxy_port:代理端口,默认为8080 --proxy_username:代理的用户名(如果需要)。 --proxy_password:代理的密码(如果需要)。 header --header,-H:格式为name:value-可以传递多个。 <url>:蜘蛛站点。
cewl -d 2 -m 5 -w words.txt https://***
-
pydictor
https://github.com/LandGrey/pydictor
-h,--help 显示帮助信息 -base Type Choose from (d, L, c, dL, dc, Lc, dLc) d digital [0 - 9] L lowercase letters [a - z] c capital letters [A - Z] dL Mix d and L [0-9 a-z] dc Mix d and c [0-9 A-Z] Lc Mix L and c [a-z A-Z] dLc Mix d, L and dL [0-9 a-z A-Z] -char character 使用自定义字符构建字典 -chunk arg [arg ...] 使用multi-chunk构建字典 -extend arg [arg ...] 扩展字符串列表或文件 -plug arg [arg ...] birthday [开始日期] [结束日期], 时间格式: [yyyyMMddor ddMMyyyy( dmy option)] ftp[keyword1] [keyword2] ... pid4 中国身份证最后4位 pid6 中国身份证最后6位 pid8 中国身份证最后8位 scratch [url_or_file] --conf [file_path] 使用配置字符串或文件构建字典 --sedb 进入社会工程词典生成器 -o path, output path 设置输出目录路径 -tool arg [arg ...] combiner [dir] comparer [minuend_file] [subtrahend_file] counter ['v','s','vs'] [file] [view_num] handler [file] hybrider [file1] [file2] ... shredder [file_or_dir] uniqbiner [dir] uniqifer [file] --len minlen maxlen 默认: min=0 max=4 --head prefix 为项目添加字符串头 --tail suffix 为项目添加字符串尾 --encode encode b16 base16 编码 b32 base32 编码 b64 base64 编码 des Des算法和需要修改的代码 execjs 执行js函数和需要修改代码 hmac Hmac 消息摘要算法 md5 Md5消息摘要算法输出32个字符 md516 Md5消息摘要算法输出16个字符 none 默认,不编码 rsa Rsa算法,需要修改代码 sha1 Sha-1消息摘要算法 sha256 Sha-256消息摘要算法 sha512 Sha-512消息摘要算法 test 通过修改函数自定义编码方法 url url 编码 --occur letter digital special 默认: letter " 99" digital " 99" special " 99" --types letter digital special 默认: letter " 0" digital " 0" special " 0" --repeat letter digital special 默认: letter " 0" digital " 0" special " 0" --regex regex 正则表达式过滤器, 默认: (.*?) --level code 使用代码[1-5]过滤结果, 默认: 3 --leet code [code ] 选择let模式代码 (0, 1, 2, 11-19, 21-29) --dmy使用 ddMMyyyy 时间格式, 默认时间格式: yyyyMMdd
-
暴力破解场景
- 不含验证码后台
- 不失效的验证码
- 各种常见应用程序,比如: phpmyadmin 、 tomcat 、 mysql
- 各种协议:ftp、ssh、rdp等
- 爆破大马
实际利用
Tomcat弱口令
由于管理员安全意识不足,设置了弱口令导致了可以被爆破从而部署 war 包 getshell 。(需要注意的是tomcat 6版本之后针对爆破设置了锁定机制,爆破超过一定频率后账户会被锁定,即使账密正确也无法登录)
漏洞环境
docker pull betsy0/tomcat
docker run -itd --privileged -p 8080:8080 --name tomcat-pass-shell betsy0/tomcat /usr/sbin/init
docker exec -it ************ /bin/bash
//************是指docker中tomcat的id
find / -name server.xml
/opt/apache-tomcat-8.5.30/conf/server.xml//自己查询出来的server.xml文件地址
vi /opt/apache-tomcat-8.5.30/conf/server.xml
//将<Realm className="org.apache.catalina.realm.LockOutRealm" failureCount="500" lockOutTime="0">中"500"修改为"50000000000000000000000000"保存并退出
Tomcat发现
- Tomcat默认页面
-
抓取登录包
如果tomcat默认页面更改或显示登录页面通过抓包分析:
- 发现其账户密码是经过 base64 加密的,组合为 user:pass
Burpsuite爆破
使用 burpsuit 爆破的思路就是,先从用户名爆破文件里面导入用户名,再在每一个用户名后面加一个冒号,最后再在每一个冒号后面添加所有可能的密码,再把这三个的结合体使用 base64 加密后发送给服务器,逐个尝试得到正确账号密码。也就是说我们需要给 burpsuit 导入三样东西,即:用户名表、冒号、密码表。
- 将抓到的包发送到爆破模块。快捷键 ctrl+i
该模块会自动将等于号后面的值标记,右侧功能分别为:
add 添加标记
Clear 清除标记
auto 自动在等于号后面添加标记
refresh 刷新
-
attack type:攻击类型
- sniper:一个字典对应一个参数值
- battering ram:一个字典对应多个参数值(也就是不管选择爆破多少个参数值都是使用同一个字典)
- pitchfork:平行爆破(也就是字典一对应参数值一,字典二对应参数值二,爆破的次数取决于小的字典)
- cluster bomb:交叉爆破(顾名思义,交叉爆破产生的字典非常庞大)
-
选定爆破参数值,进入到 payloads 值设置
-
payloads type Simple list:简单字典 Runtim file:运行文件 Custom iterator:自定义迭代器 Character sub:字符串替换
-
这里选用自定义迭代器,在 1 输入我们的用户名
- 在 2 输入冒号
- 在 3 输入密码
-
对 Payload 进行 Base64 编码
注意:Burpsuite会自动将符号进行 url 编码,这里需要将 Payload Encoding 的勾给去掉
-
开始爆破
选择 Start attack 进行爆破得到用户密码
后台GetShell
登录到后台后可以通过部署 war 包进行 getshell
-
什么是 war 包
war 包是用来进行 Web 开发时一个网站项目下的所有代码,包括前台 HTML/CSS/JS 代码,以及后台 JavaWeb 的代码。当开发人员开发完毕时,就会将源码打包给测试人员测试,测试完后若要发布也会打包成 War 包进行发布。 War 包可以放在 Tomcat 下的 webapps 或 word 目录,当Tomcat 服务器启动时, War 包即会随之被解压得到源代码并自动部署。
-
war包制作方法
jar –cvf *.war *.jsp
超级弱口令检查工具爆破
优点:图形化界面操作便捷
缺点:功能方面不全面,不如九头蛇
这里使用超级弱口令检查工具,该工具包含许多爆破模块,支持 ssh,rdp,mysql 等爆破。使用简单,直接导入IP及用户名密码字典就可以使用。
并且内置了许多字典
直接输入ip,也可以导入ip列表批量爆破,导入用户名及密码字典,选中服务,就可以得到用户名密码。
Hydra(九头蛇)爆破
Hydra是一款开源的暴力破解工具,支持FTP、MSSQL、MySQL、PoP3、SSH等暴力破解
优点:更快,更好,功能全面
缺点:命令行模式操作不方便
hydra -L */username.txt -P */password.txt ***.***.***.*** *类型* -f
hydra -L username.txt -P password.txt 192.168.164.1 mysql -f
参数介绍
-l login 小写,指定用户名进行破解
-L file 大写,指定用户的用户名字典
-p pass 小写,用于指定密码破解,很少使用,一般采用密码字典。
-P file 大写,用于指定密码字典。
-e ns 额外的选项,n:空密码试探,s:使用指定账户和密码试探
-M file 指定目标ip列表文件,批量破解。
-o file 指定结果输出文件
-f 找到第一对登录名或者密码的时候中止破解。
-t tasks 同时运行的线程数,默认是16
-w time 设置最大超时时间,单位
-v / -V 显示详细过程
-R 恢复爆破(如果破解中断了,下次执行 hydra -R /path/to/hydra.restore 就可以继续任务。)
-x 自定义密码。
MSF模块爆破
总体不如九头蛇
use auxiliary/scanner/ssh/ssh_login
set RHOSTS 172.26.2.36
set USER_FILE /root/Desktop/tools/dic_username_ssh.txt
set PASS_FILE /root/Desktop/tools/pwd100.txt
这里 metasploit 在探测 ssh 弱口令时,如果发现存在,则会返回一个 linux shell ,注意此时不是 meterpreter shell 。接下来可以使用 sessions –u id 进行升级
验证码爆破
登录页面存在验证码,尝试爆破,验证码错误
xp_CAPTCHA
使用 xp_CAPTCHA 识别验证码,进行密码爆破
安装
-
环境
系统:Centos8
python版本:3.6.8(要小于3.7) -
安装 muggle_ocr 模块
python3 -m pip install -U pip python3 -m pip install -i http: mirrors.aliyun.com/pypi/simple/ trusted-host mirrors.aliyun.com muggle-ocr 第一种: 1. 解压 muggle-ocr-1.0.3.tar.gz 2. 安装muggle-ocr (安装过程大概要10多分钟) python3 setup.py install 3. 安装requests pip3 install requests -i https: mirrors.ustc.edu.cn/pypi/web/simple 4. 安装ddddocr pip3 install ddddocr -i https: mirrors.ustc.edu.cn/pypi/web/simple 5. 启动NEW_xp_CAPTCHA_4.2服务端 python server_4.2.py # 安装 muggle-ocr 模块步骤 工具文件夹中下载muggle-ocr-1.0.3.tar.gz pip3 install muggle-ocr-1.0.3.tar.gz -i https://pypi.douban.com/simple
配置
-
运行server
-
如下图运行成功,会在本地监听8899端口作为web服务
-
运行报错解决方法:
yum:yum install libglvnd-glx-1.0.1-0.8.git5baa1e5.el7.x86_64 apt:apt install libgl1-mesa-glx
-
访问 http://192.168.164.133:8899
使用
- Burp导入插件
- 抓取登录请求包,发送到Intruder模块,添加爆破项:密码,验证码项改为@xiapao@1@
- 修改插件配置