前言
以[NSSRound#12 Basic]Secrets in Shadow为例
工具:WindTerm(ssh连接用),john(对哈希密码进行爆破)
正篇
ssh连接,以ctf身份登录后尝试直接cat flag
失败,明显需要提权
结合题目名称可知和shadow
文件有关
shadow文件
Linux系统中存储用户账户密码的文件,它通常存储在
/etc/shadow
路径下。Shadow文件的目的是将用户密码和其他安全相关信息从/etc/passwd文件中分离出来,以增强系统的安全性。
文件内容格式:
username:password:lastpasswordchange:minpasswordage:maxpasswordage:passwordwarning:passwordinactive:accountexpirationdate:reservedfield
- username: 用户名
- password: 用户密码的哈希值(已加密)
- lastpasswordchange: 上次更改密码的时间(自1970年1月1日以来的天数)
- minpasswordage: 密码最短使用时间(以天为单位)
- maxpasswordage: 密码最长使用时间(以天为单位)
- passwordwarning: 密码过期前的警告天数
- passwordinactive: 密码过期后账户被禁用的天数
- accountexpirationdate: 账户过期日期(自1970年1月1日以来的天数)
- reservedfield: 保留字段,目前未使用
Shadow文件中的密码字段在Shadow文件中,密码字段是经过加密的哈希值,不能直接读取用户密码。密码哈希值的加密方式可以通过第二个字段中的前缀来识别。下面是一些常见的密码哈希值前缀:
1
: MD5加密2a
: Blowfish加密2y
: 更安全的Blowfish加密5
: SHA-256加密6
: SHA-512加密
cat /etc/shadow
得到root用户密码的哈希值
$6$Vh57Xwpz34U8wthL$Xd0QAbWlZgB4nOhgDPCR/Q50rhAUsVVkIs3MUiglBlMychQjULqAADyTSzTXNuuF0TO.2TzUi574DHY6e8Fma1
然后使用john进行爆破
John
一款密码破解工具,支持哈希算法
貌似直接john+文件名就能自动爆破了
常用的John命令:
john --wordlist=<path_to_wordlist> <path_to_hash_file>
使用字典攻击模式破解哈希文件,字典文件路径为<path_to_wordlist>
,哈希文件路径为<path_to_hash_file>
。
john --incremental <path_to_hash_file>`
使用暴力破解模式破解哈希文件,使用增量模式进行破解。
john --rules=<path_to_rules_file> <path_to_hash_file>`
使用规则攻击模式破解哈希文件,规则文件路径为<path_to_rules_file>
,哈希文件路径为<path_to_hash_file>
。
john --show <path_to_hash_file>
显示已经破解的密码。
john --test <path_to_hash_file>
测试John是否支持指定哈希算法。
john --list=formats
列出John支持的哈希算法。
使用john爆破得到root用户的密码
密码为
bullshit
接下来要么直接su root
切换到root用户,要么用root连接ssh,继而就可以读取到flag