前言(每日一遍):
“初闻不明劝离意,回头已是提桶人”
(本贴为自学记录贴)
在食用前确保有以下基础(博主精选贴)
- ssh登录方式介绍[重点私钥登录部分](点击食用)
一、Hash(散列)介绍
(一)明确概念
在开始前我们需要明确以下几个概念
- 明文:加密或散列之前的数据,通常是文本,但不总是因为它可能是照片或其他文件。
- 编码:这不是一种加密形式,只是一种数据表示形式,如base64或十六进制。立即可逆。
- 哈希:哈希是哈希函数的输出。散列也可以用作动词“to hash”,意思是产生一些数据的哈希值。
- 暴力破解:通过尝试每个不同的密码或每个不同的密钥来攻击密码学。
- 密码分析:通过发现底层数学中的弱点来攻击密码学。
- 哈希函数:哈希函数是将不同的输入转化为同长度的输出的一种函数,类似将文章进行“摘要总结”,但是总结的内容长度是固定的。
- 哈希冲撞:因为哈希函数输出的长度固定,也就也意味着有可能不同的输入会导致同一个输出,这也是著名的鸽子洞效应,当有7个鸽子而只有3个鸽子洞时,必然会出现一个洞存在2个及以上的鸽子。
- 彩虹表:一种具有哈希和明文相对应的表格,通过hash值可以直接搜索出明文。
- 加盐:由于数据库可能出现不同用户具有同一哈希值的情况,为防止数据泄露时导致同一密码可登录多个用户的情况,在密码的哈希值中添加随机生成的盐,使得每个哈希密码都与众不同,即使他们有相同的哈希值。
(二)认识哈希
unix风格的哈希格式为$format$rounds$salt$hash
Linux,密码哈希存储在 /etc/shadow.此文件通常只能由root读取。它们过去存储在 /etc/passwd中,每个人都可以读取。
windows哈希密码使用的是NTLM,这是md4的一种变体,在Windows中,哈希密码存储在SAM中,而且那里的哈希又被分为NT哈希和LM哈希
下面是一些unix系统常见的哈希先序码
先序 | 算法 |
$1$ | md5crypt |
$2$, $2a$, $2b$, $2x$, $2y$ | Bcrypt |
$6$ | sha512crypt |
更多的哈希格式可以看这里【指路】,在线识别哈希在这里【指路】,通过hash-identify识别可以通过这里下载【指路】,可以通过:
wget https://gitlab.com/kalilinux/packages/hash-identifier/-/raw/kali/master/hash-id.py
下载后,运行py程序执行识别哈希格式
(三)破解哈希
识别哈希后若想通过本地解码,可以下载John The Ripper解码基本哈希,执行命令如下
john --format=[format] --wordlist=[path to wordlist] [path to file]
此外,john还可以解密linux系统中/etc/shadow的哈希加密,为了破解shadow文件必须要有/etc/passwd文件,结合这两个文件可以使用如下命令
unshadow [path to passwd] [path to shadow]
案例:unshadow local_passwd local_shadow > unshadowed.txt #输出为unshadowed.txt文件
然后再执行john程序对unshadowed.txt解密,命令如下
john --wordlist=/usr/share/wordlists/rockyou.txt --format=sha512crypt unshadowed.txt
此外,john工具还可以破解zip文件,具体命令如下
zip2john [options] [zip file] > [output file]
# example:zip2john zipfile.zip > zip_hash.txt
在得到zip_hash后可以通过如下命令破解
john --wordlist=/usr/share/wordlists/rockyou.txt zip_hash.txt
同时john还能破解rar文件,命令和上面zip破解的相似,不过改为rar2john [rar file] > [output file]
john在ctf比赛中还有个常用方法,破解私钥的密码,虽然可以通过私钥无密码登录服务器,但是在ctf比赛中仍存在创建私钥时对私钥进行加密认证的行为,这时在使用私钥时需要密码才能登录服务器(可看文章开头精选贴),因此需要使用john解密私钥的认证密码。同样的,需要使用john其中的一个内置命令:ssh2john,具体命令如下
ssh2john [id_rsa private key file] > [output file]
#example:ssh2john id_rsa > id_rsa_hash.txt
得到输出文件后可以通过以下命令破解
john --wordlist=/usr/share/wordlists/rockyou.txt id_rsa_hash.txt
john能实现的解密不止如此,例如单一模式、自定义模式等,都能很好地帮助破解哈希密码,这里不深入讨论,有兴趣的可以自行深入学习。