使用 hashcat 攻击 WPA 密码 - “德语”密码的设置和资源?

信息安全 密码破解 wpa2-psk 哈希猫
2021-09-08 09:15:08

我想向我的一个朋友证明他的 wifi 不安全,并在途中了解有关密码破解的知识。我所说的那个人不相信强密码,而是相信 SSID 隐藏和 mac 地址过滤。如你所知,这很糟糕。

我已经可以做的是在发现 SSID 并欺骗有效的 MAC 地址后使用已知密码登录。但是要真正向他展示一个好的密码,我想破解一个未知的密码。

所以这是我的实际问题:我想(第一次)使用 hashcat 来完成繁重的工作。是否有任何设置或规则集可以优化破解由德国人创建的密码?我当然知道我应该使用德语(密码)词表和字典。但除此之外呢?

我用谷歌搜索并检查了 hashcat 论坛。我发现的结果是关于德国元音变音的。我认为这不会成为问题,因为路由器会保存 PSK,这很可能是 UTF-8。那是对的吗?还有其他我需要考虑的事情吗,比如特殊的规则集或其他什么?

谢谢你的帮助!任何提示表示赞赏。短剑

1个回答

(这个帖子在这里的hashcat论坛上交叉发布。我的回答太简单了,所以我会在这里做得更好。)

基础

对于单词表和规则,听起来您已经掌握了基础知识。只要单词表是 UTF-8 的,并且用于设置密码的输入法也是 UTF-8,那么它们应该可以正常工作。我肯定会首先追求词表和规则,因为原始蛮力比基本攻击需要更多时间,而 WPA/WPA2 是一个如此“缓慢”(难以破解)的哈希。

密码破解的基础知识已经在其他地方得到了很好的介绍。以下是一些有用的操作方法(但请注意,如果您的目标密码至少包含一个德语字符,则只有单词列表和基于规则的技术适用于您的情况):

这些概述应该有助于填补您的基本技术中的任何空白。

UTF-8 的蛮力(混合单字节和多字节),第 1 部分 - 简单的概念证明

如果你确实想追求暴力破解,你需要做更多的工作,因为 hashcat 是如何在幕后工作的。出于破解目的,hashcat 将所有内容视为一系列字节。德语特有的 UTF-8 字符是多字节的 - 在 UTF-8 中表示为多于一个字节。

--hex-charset要暴力破解多字节,您可以使用参数指定字符集,并使用hashcat 论坛的这篇相关帖子中描述的技术,该技术使用掩码来模拟多字节字符的暴力破解。

但是,该帖子中的技术假定字符集完全是多字节的。德语是不同的,因为只有一些字符是多字节的。任何使用德语特定字符的德语单词实际上都是一字节宽和两字节宽字符的混合,hashcat 不区分这两者。

因此,必须对这种技术进行一些调整。我将在这里简要介绍一下。为简单起见,我使用 MD5;WPA/WPA2 应该完全相同(只是慢得多)。

首先,我们必须确定将在密码掩码中使用的十六进制值。一个简单的方法是创建一个文件,列出所有可能出现在密码中的非 ASCII 字符的 UTF-8 格式,然后显示它们的十六进制等效项:

$ for item in `cat german.list`; do echo -e "$item: "; echo -n "$item" | xxd -p; done
Ä: c384
ä: c3a4
É: c389
é: c3a9
Ö: c396
ö: c3b6
Ü: c39c
ü: c3bc
ß: c39f

我对德语不熟悉,但这些字符显然将“c3”作为它们的第一个字节。(这是因为它们都在同一个 Unicode 块中 - 特别是 Latin-1 Supplement 块)。因此,由于所有预期的多字节字符都将这个字节作为“前缀”,我们将从它开始,然后使用 hashcat 的自定义掩码参数附加所有“第二个字节”。

这是一个简单的演练。

首先,我们捕获明文(使用“-n”确保字符串末尾没有换行符):

$ echo -n 'schön5' >german.plain

接下来,我们展示了字符串实际上包含我们期望的两字节序列'c3b6':

$ cat german.plain | xxd -p
736368c3b66e35

接下来,我们得到该平原的 MD5 哈希:

$ cat german.plain | md5sum | awk '{print $1}' | tee german.hash
bbf9ee923fe21c044838865c7acf530d

最后,我们运行 hashcat:

$ ./hashcat -m 0 -a 3 --hex-charset -1 c3 -2 8489969c9fa4a9b6bc german.hash ?a?a?a?1?2?a?a

...带有标志解释如下:

  • -m 0(哈希模式 0 - MD5)

  • -a 3(攻击模式 3 - 蛮力)

  • --hex-charset,允许指定十六进制字符集

  • -1,第一个自定义字符集('c3'前缀)

  • -2,第二个自定义字符集(我们德语字符的所有第二个字节,“8489969c9fa4a9b6bc”)

  • German.hash(我们的目标哈希)

  • a?a?a?1?2?a?a(一个简单的掩码,在大多数位置包含所有可打印的 7 位 ASCII (?a),在“第四”位置包含“?1?2”)

该命令产生这个输出,表明我们已经成功破解了我们的目标哈希:

hashcat (v3.40-73-g99fbaa8) starting...

[informational hashcat output snipped]

INFO: approaching final keyspace, workload adjusted

bbf9ee923fe21c044838865c7acf530d:schön5

Session..........: hashtest
Status...........: Cracked
Hash.Type........: MD5
Hash.Target......: bbf9ee923fe21c044838865c7acf530d
Time.Started.....: Sun Mar 26 08:46:08 2017 (0 secs)
Time.Estimated...: Sun Mar 26 08:46:08 2017 (0 secs)
Guess.Mask.......: ?a?a?a?1?2?a?a [7]
Guess.Charset....: -1 c3, -2 8489969c9fa4a9b6bc, -3 Undefined, -4 Undefined
Guess.Queue......: 1/1 (100.00%)
Speed.Dev.#1.....:  9411.3 MH/s (0.18ms)
Speed.Dev.#2.....:  9896.7 MH/s (0.18ms)
Speed.Dev.#3.....:  4829.7 MH/s (0.27ms)
Speed.Dev.#4.....:  5154.5 MH/s (0.27ms)
Speed.Dev.#5.....:  4555.7 MH/s (0.27ms)
Speed.Dev.#6.....:  4747.7 MH/s (0.27ms)
Speed.Dev.#*.....: 38595.5 MH/s
Recovered........: 1/1 (100.00%) Digests, 1/1 (100.00%) Salts
Progress.........: 902162052/69640284375 (1.30%)
Rejected.........: 0/902162052 (0.00%)
Restore.Point....: 0/81225 (0.00%)
Candidates.#1....: "yaÄ 1 -> }baü]a
Candidates.#2....: w!cÜ'p -> JWAÖe&
Candidates.#3....: {kaÄ^) -> psaÖ'p
Candidates.#4....: FUSÜe& -> Q!cä.+
Candidates.#5....: @loé.+ -> &11üV<
Candidates.#6....: /11ÄW~ -> :enü~}
HWMon.Dev.#1.....: Temp: 51c Fan: 34% Util: 63% Core:1898MHz Mem:4513MHz Bus:8
HWMon.Dev.#2.....: Temp: 49c Fan: 32% Util: 50% Core:1860MHz Mem:4513MHz Bus:4
HWMon.Dev.#3.....: Temp: 63c Fan:  3% Util: 96% Core:1354MHz Mem:3004MHz Bus:16
HWMon.Dev.#4.....: Temp: 62c Fan:  1% Util:100% Core:1366MHz Mem:3004MHz Bus:4
HWMon.Dev.#5.....: Temp: 65c Fan:  2% Util:100% Core:1379MHz Mem:3004MHz Bus:1
HWMon.Dev.#6.....: Temp: 66c Fan:  3% Util: 97% Core:1366MHz Mem:3004MHz Bus:1

Started: Sun Mar 26 08:45:52 2017
Stopped: Sun Mar 26 08:46:10 2017

UTF-8 的蛮力,第 2 部分 - 带有掩码覆盖

上面的简单演示表明 '?1?2' 技术有效……但它也假定您确切知道哪些字符是德语。在现实世界中,我们通常不知道这一点。

相反,您需要提供一个文件,其中包含涵盖您要尝试的密码长度的所有掩码列表,而不是使用单个掩码。下面是一个掩码文件示例,它涵盖了所有六字符单词,这些单词在所有位置都包含至少一个 7 位 ASCII 等效字符 (?a) 和来自德语的其他字符,使用我们的多字节掩码对 (?1?2):

$ cat utf8.hcmask.6char
?a?a?a?a?a?1?2
?a?a?a?a?1?2?a
?a?a?a?a?1?2?1?2
?a?a?a?1?2?a?a
?a?a?a?1?2?a?1?2
?a?a?a?1?2?1?2?a
?a?a?a?1?2?1?2?1?2
?a?a?1?2?a?a?a
?a?a?1?2?a?a?1?2
?a?a?1?2?a?1?2?a
?a?a?1?2?a?1?2?1?2
?a?a?1?2?1?2?a?a
?a?a?1?2?1?2?a?1?2
?a?a?1?2?1?2?1?2?a
?a?a?1?2?1?2?1?2?1?2
?a?1?2?a?a?a?a
?a?1?2?a?a?a?1?2
?a?1?2?a?a?1?2?a
?a?1?2?a?a?1?2?1?2
?a?1?2?a?1?2?a?a
?a?1?2?a?1?2?a?1?2
?a?1?2?a?1?2?1?2?a
?a?1?2?a?1?2?1?2?1?2
?a?1?2?1?2?a?a?a
?a?1?2?1?2?a?a?1?2
?a?1?2?1?2?a?1?2?a
?a?1?2?1?2?a?1?2?1?2
?a?1?2?1?2?1?2?a?a
?a?1?2?1?2?1?2?a?1?2
?a?1?2?1?2?1?2?1?2?a
?a?1?2?1?2?1?2?1?2?1?2
?1?2?a?a?a?a?a
?1?2?a?a?a?a?1?2
?1?2?a?a?a?1?2?a
?1?2?a?a?a?1?2?1?2
?1?2?a?a?1?2?a?a
?1?2?a?a?1?2?a?1?2
?1?2?a?a?1?2?1?2?a
?1?2?a?a?1?2?1?2?1?2
?1?2?a?1?2?a?a?a
?1?2?a?1?2?a?a?1?2
?1?2?a?1?2?a?1?2?a
?1?2?a?1?2?a?1?2?1?2
?1?2?a?1?2?1?2?a?a
?1?2?a?1?2?1?2?a?1?2
?1?2?a?1?2?1?2?1?2?a
?1?2?a?1?2?1?2?1?2?1?2
?1?2?1?2?a?a?a?a
?1?2?1?2?a?a?a?1?2
?1?2?1?2?a?a?1?2?a
?1?2?1?2?a?a?1?2?1?2
?1?2?1?2?a?1?2?a?a
?1?2?1?2?a?1?2?a?1?2
?1?2?1?2?a?1?2?1?2?a
?1?2?1?2?a?1?2?1?2?1?2
?1?2?1?2?1?2?a?a?a
?1?2?1?2?1?2?a?a?1?2
?1?2?1?2?1?2?a?1?2?a
?1?2?1?2?1?2?a?1?2?1?2
?1?2?1?2?1?2?1?2?a?a
?1?2?1?2?1?2?1?2?a?1?2
?1?2?1?2?1?2?1?2?1?2?a
?1?2?1?2?1?2?1?2?1?2?1?2

要生成您需要的其余掩码, PACK 工具包(Python) 中的 policygen可以提供帮助。它无法识别如何对“?1?2”进行所有排列,但您可以创建使用不同字符集(如?u)的掩码,然后将所有“?u”替换为“?1?2” .

然后简单地运行相同的 hashcat 命令,但不是掩码,而是提供一个包含掩码列表的文件名:

./hashcat -m 0 -a 3 --hex-charset -1 c3 -2 8489969c9fa4a9b6bc german.hash testfile.masks

正如我上面所说,它不适合胆小的人!但是一旦你掌握了它,它并不难。

非 UTF-8 字符集(WPA/WPA2 很少见?)

如果字符不是UTF-8,可以直接使用hashcat 自带的字符集。它们位于 hashcat 发行版的 ./charsets/ 目录中,对于非拉丁字符集,它们的使用简单且常见

话虽如此,我希望 WPA/WPA2 密码短语很少使用非 UTF-8 字符集。