3、Type 5密码原理:MD5哈希算法、Salt值生成机制、哈希计算过程、与Linux Shadow密码对比
好,咱们今天聊聊思科设备里一个经典的老家伙——Type 5密码。说实话,我在早期做网络设备安全评估时,跟它打过不少交道。你可能会问,现在都Type 9了,学这个还有用吗?嗯,我告诉你,很多老旧设备、甚至一些新部署的低端设备里,Type 5依然在服役。不懂它,你连破解的入门砖都摸不着。
3.1 什么是Type 5?说白了就是MD5加盐
Type 5密码,思科官方叫它“MD5加密密码”。但这里有个坑,它并不是直接对密码做MD5哈希。直接哈希太脆弱了,彩虹表一查就出来。所以思科加了个“盐”(Salt)。
我个人习惯把Type 5的格式拆成三部分看:
- 标识符:固定是
$1$,告诉你这是Type 5。 - Salt值:一段4到8个字符的随机字符串,由字母和数字组成。
- 哈希值:经过1000轮MD5迭代计算后的22个字符的Base64编码结果。
举个例子,你在配置里看到的可能是这样:
enable secret 5 $1$mFc0$eJ0o1hFq8Gd9X7Yz2Rw3L.
这里 $1$ 是标识,mFc0 是盐,后面那一长串就是哈希。我在一次渗透测试项目中,就靠识别这个格式,找到了一个被遗忘的旧交换机,最终拿到了内网权限。
3.2 Salt值生成机制:为什么不能省掉它?
Salt的作用,说白了就是让相同的密码产生不同的哈希结果。你想想看,如果两个用户都设了“cisco123”,没有盐的话,哈希值一模一样,破解了一个就等于破解了俩。有了盐,哪怕密码相同,哈希结果也完全不同。
思科是怎么生成这个盐的呢?我记得看过一些老代码,它用的是系统启动时的随机数种子,结合当前时间戳,生成一个4到8位的字符串。具体算法思科没公开,但逆向分析发现,它基本是取 ./0-9A-Za-z 这个字符集里的字符。
关键点:Salt是明文存储在哈希值前面的。所以它不是为了保密,而是为了增加破解的计算成本。你没法预计算彩虹表,因为每个密码都绑了一个不同的盐。
3.3 哈希计算过程:1000轮迭代的真相
Type 5的哈希计算,不是简单的一次MD5。它用了1000轮迭代。为什么要这么做?早期计算机性能差,1000轮已经能让暴力破解慢得让人抓狂。当然,现在GPU算力强了,1000轮也不算啥了。
具体流程我简化一下:
- 将密码和Salt拼接在一起,做第一次MD5。
- 然后拿这个结果,再和密码、Salt反复混合,继续做MD5。
- 重复整整1000次。
- 最后输出一个128位的哈希值,再Base64编码成22个字符。
这里有个细节,我当年逆向思科IOS的某个版本时发现,它的混合方式跟标准的MD5-Crypt(Linux用的)略有不同。思科自己魔改了一点,比如在中间步骤里,它会根据当前轮数的奇偶性,决定是先加密码还是先加Salt。这个小差异,导致你不能直接用Linux的MD5-Crypt库去解思科的Type 5。
避坑指南:我曾经写过一个自动化脚本,直接用Python的 crypt 模块去验证Type 5,结果死活对不上。后来一查,才发现思科在迭代过程中,对字节序做了调整。所以,破解Type 5最好用专用工具,比如 hashcat 的 -m 500 模式,或者 john 的 cisco5 格式。
3.4 与Linux Shadow密码对比:同源不同路
说到这,你可能会想到Linux的Shadow密码文件里的 $1$ 格式。没错,它们都是MD5加盐,都用了1000轮迭代。但区别在哪?我列个表给你看:
| 对比项 | 思科Type 5 | Linux MD5-Crypt ($1$) |
|---|---|---|
| 标识符 | $1$ |
$1$ |
| Salt长度 | 4-8字符 | 8字符(固定) |
| 迭代轮数 | 1000 | 1000 |
| 哈希编码 | 22字符Base64(自定义字符集) | 22字符Base64(标准字符集) |
| 中间混合逻辑 | 思科魔改版(字节序、混合顺序不同) | 标准MD5-Crypt算法 |
| 破解工具 | hashcat -m 500, john --format=cisco5 | hashcat -m 500, john --format=md5crypt |
你看,虽然都叫 $1$,但思科在细节上做了手脚。我当年第一次破解时,直接用Linux的Shadow字典去跑,结果一个都没跑出来。后来才发现,思科的Base64字符集顺序跟标准的不一样。标准的是 ./0-9A-Za-z,思科也是这个,但编码时的映射表顺序有细微差别。嗯,这里要注意,工具选错了,白费功夫。
3.5 实战中的破解思路
知道了原理,破解就简单了。我个人习惯用hashcat,因为它支持GPU加速。命令大概是这样的:
hashcat -m 500 -a 0 hash.txt wordlist.txt --force
这里的 hash.txt 里放的就是思科配置里 enable secret 5 后面那一整串,包括 $1$ 前缀。hashcat会自动识别Salt和哈希。
如果字典跑不出来,就上规则。我常用的规则是 best64.rule,或者自己写一个针对思科默认密码的规则,比如 cisco、router、admin 这些常见词的变种。
警告:Type 5的1000轮迭代,在CPU上跑大概每秒只能试几万个密码。但用GPU,比如一块RTX 4090,每秒能试上亿次。所以,如果你的设备还在用Type 5,赶紧换Type 8或Type 9吧。我曾经在客户现场,用一台笔记本加外置GPU,半小时就破了他们核心交换机的enable密码。
3.6 本章知识体系图
为了让你更直观地理解Type 5的整个流程,我画了一张图:
这张图把整个流程串起来了。你从左边输入密码,右边输入随机盐,中间经过1000轮魔改MD5,最后输出一个22字符的哈希。整个过程,说白了就是让暴力破解的成本变高。
好了,Type 5的原理就这些。下次你在设备上看到 $1$ 开头的密码,就知道它背后经历了什么。记住,它不安全,但理解它,是你走向思科安全逆向的第一步。