[渗透测试]:口令破解
[渗透测试]:口令破解
口令破解
口令安全威胁
*口令安全概述
现在很多地方以用户名(账户)和口令(密码)作为鉴权的方式,口令(密码)就意味着访问权限。例如网站后台、数据库、服务器、个人电脑、QQ、邮箱等等。
*口令安全现状
-
弱口令
类似123456、654321、admin123 等这些常见的弱密码
-
默认口令
很多应用或者系统存在默认口令。比如phpstudy 的mysql 数据库默认账密[root/root], Tomcat 管理控制台默认账密[tomcat/tomcat]等。
-
明文传输
比如HTTP|FTP|TELNET等服务,在网络中传输的数据流都是明文的,包括口令认证信息等。这样的服务,有嗅探的风险。
*破解方式
-
在线破解方式
账密,需要认证
hydra
---------------
-l
|
指定一个用户名
|
-p
|
指定一个密码
|
-P
|
指定密码字典
|
-L
|
指定用户名字典
|
-vV
|
显示爆破细节
|
-o
|
保存爆破结果
|
-f
|
找到正确的密码就停止爆破
|
-t
|
线程
|
|
-e
|
n
|
null
|
s
|
same
|
|
r
|
反向
|
---------------
用户名未知,密码未知
用户名已知,密码未知
用户名未知,密码已知
-
离线破解方式
密文,还原成明文的过程
*暴力破解
暴力破解就是利用所有可能的字符组密码,去尝试破解。这是最原始,粗暴的破解方法,根据运算能力,如果能够承受的起时间成本的话,最终会爆破出密码。下表根据不同的位数生成密码的空间大小
字符集
|
密码位数
|
密码空间
|
[0-9]
|
8 位
|
10^8=100000000
|
[0-9][a-z]
|
8位
|
36^8=2821109907456
|
[0-9][a-z]
|
8位
|
??
|
工具:crunch(kali自带)
[crunch 1 8 1234567890abcdefghijklmnopqrstuvwxyz]
---------------
Crunch will now generate the following amount of data: 26032511341944 bytes
24826537 MB
24244 GB
23 TB
0 PB
------
|
*字典破解
如果能通过比较合理的条件,删选或者滤掉一些全字符组合内容,就会打幅度降低爆破的成本。我们把筛选出来的密码组成特定的字典。用字典爆破密码也是可以的,但是这样可能会漏掉真正的密码。密码字典大致分为以下几大类
-
弱口令字典
比如123456,admin 等这样的默认口令或弱口令
-
社工字典
人在设置密码的时候,往往为了便于记忆,密码的内容和组合会与个人信息有关,比如常见的密码组合“名字+生日”
[zhangsan1992]
社工字典更具针对性,准确率也比较高。
我们可以根据个人信息生成密码字典。可以使用cupp工具
但是cupp工具 是国外人开发的
-------------
apt-get update 更新软件列表
apt-get install cupp
cupp -i
-------------
[zhangsan|ajest|19920701|dnsec|123]
-
字符集字典
如果能确定密码的字符集合,也将大大降低爆破的成本
-
crunch
是一种创建密码字典的工具,按照指定的规则生成密码字典,可以灵活的定制自己的字典文件。
使用crunch 工具生成的密码可以输出到屏幕,保存文件或另一个程序。尤其是渗透测试需要爆破的时候,字典的编排等直接影响到我们的爆破速度,对整个渗透测试流程起着十分重要的作用。
安装
kali
crunch 为kali自带工具
[crunch]
查看帮助
[man crunch > crunch.help]
命令格式
crunch <min-len> <max-len> [<charset string>] [options]
参数说明
min-len
|
设定密码的最小长度
|
max-len
|
设定密码的最大长度
|
charset string
|
字符集
|
oprions
|
|
-b
|
指定文件输出的大小,避免字典文件过大
|
-c
|
指定文件输出的行数,记包含密码的个数
|
-d
|
限制相同元素出现的次数
|
-e
|
定义停止字符,即到该字符串就停止生成
|
-f
|
调用库文件(/usr/share/crunch/charset.lst)
|
-i
|
改变输出格式,即aaa,aab -> aaa,baa
|
-o
|
将密码保存到指定文件
|
-q
|
读取密码文件,即读取pass.txt
|
-r
|
定义重复一个字符串就重新开始
|
-s
|
指定一个开始的字符
|
-t
|
指定密码输出的格式
|
-u
|
禁止打印百分比
|
-z
|
压缩生成的字典文件,支持gzip,bzip2,lzma,7z
|
-l
|
生成特殊字符
|
-p
|
指定生成元素
|
查看库文件
[cat /usr/share/crunch/charset.lst]
特殊字符
%
|
代表数字
|
^
|
代表特殊符号
|
@
|
代表小写字母
|
,
|
代表大写字母
|
密码字典
生成密码字典
生成1-8位密码字典,字符集合位小写字母,从a 开始到zzzzzzzz结束
[crunch 1 8]
生成1-6位的密码字典,字符集合位[abcdefg],从a 开始到gggggg结束
[crunch 1 6 abcdefg]
生成3 位密码字典,字符集合[ab ],从a 开始到 [ ]
生成指定字符串,比如生日的日期
[crunch 8 8 -t 199307%% -e 19930731]
生成元素的组合,比如123.com
[crunch 7 7 -t %%%.com -s 111.com -e 123.com]
在字典中输出特殊字符
[crunch 3 3 abc -t @@@ -l @aa]
以元素组合生成字典
[zhangsan|1993|0701]
[CRUNCH 4 4 -P AJEST 1992 0701]
保存字典文件
[crunch 11 11 -t 1700010%%%% -b 20mb -o START]
自定义字符集合
将自带字典进行备份
创建自定义字符集合[*.com] 字典文件
[crunch 5 5 -f charset.lst test -t @.com]
简单介绍字典
子域名字典
默认账号密码字典
文件路径字典
日志文件
Web 目录
常用变量名字典
常用文件名字典
弱口令字典
*Windows口令破解
-
windows口令远程爆破
[hydra -l administrator -P ../dic/pwd.dic 192.168.1.200 smb]
-
windows账户hash值破解
除了可以远程爆破windows密码,我们还可以从本地破解windows密码。
本地Windows 账户破解主要有两种方式
@ 从内存中读取windows 密码
我们可以用getpass 直接从Windows 系统内存中读取用户数据
@ Windows hash 值破解
Windows hash 值破解一共有两步操作。
首先我们使用QuarkPwDump 工具读取(导出)Windows 账户密码hash 值,
[C:\Users\Administrator\Desktop\QuarksPwDump.exe -dhl -t JOHN -o win2008.hash]
然后在使用 john 工具破解
[john win2k8.hash --format=NT --wordlist=/root/dic/winPass.dic]
[john --show win2k8.hash --format=NT]
*linux 口令破解
linux 口令破解,也分远程破解和和本地破解。
远程破解主要是爆破ssh 服务,属于在线密码攻击。
本地破解需要拿到linux 的shadow 文件,进行hash 值破解,属于离线密码攻击
-
破解ssh 服务
我们使用hydra 攻击破解ssh 服务,hydra 攻击已经自动集成在kali 虚拟机中。
命令如下:
[hydra -l root -P ../dic/pwd.dic 192.168.1.150 ssh]
[hydra -L /root/dic/user.dic -P /root/dic/winPass.dic 127.0.0.1 ssh -e nsr -vV -o 127.ssh]
-
本地shadow 文件破解
我们可以使用john 工具,破解shadow 密码文件。
john 也是自动集成在kali 中。
john 破解的时候也需要准备一个字典。
[john shadow]
*网络服务口令破解
在渗透测试中,我们同样会对服务的口令进行审计
-
破解MSSQL 口令
[hydra -l sa -P /root/dic/test_pwd.dic 192.168.1.150 mssql -vV]
-
破解RDP 口令
[hydra -l administrator -P /root/dic/test_pwd.dic 192.168.1.150 rdp -vV]
-
破解FTP 口令
[hydra -L /root/dic/test_user.dic -P /root/dic/test_pwd.dic 192.168.1.150 ftp -vV]