0x00 redis
Redis 是一个高性能的 key-value 数据库。它支持存储的 value 类型相对更多,包括 string(字符串)、list(链表)、set(集合)、zset(sorted set –有序集合)和 hash(哈希类型)。这些数据类型都支持 push/pop、add/remove 及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。
在此基础上,redis 支持各种不同方式的排序。为了保证效率,数据都是缓存在内存中。redis 会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了 master-slave 同步。
0x01 redis 未授权访问
Redis 因配置不当可以导致未授权访问,被攻击者恶意利用。当前流行的针对 Redis 未授权访问的一种新型攻击方式,在特定条件下,如果 Redis 以 root 身份运行,黑客可以给 root 账户写入 SSH 公钥文件,直接通过 SSH 登录受害服务器,可导致服务器权限被获取和数据删除、泄露或加密勒索事件发生,严重危害业务正常服务。
0x02 redis 未授权访问漏洞产生的原因
Redis 默认情况下,会绑定在 0.0.0.0:6379,这样将会将 Redis 服务暴露到公网上,如果在没有开启认证的情况下,可以导致任意用户在可以访问目标服务器的情况下未授权访问 Redis 以及读取 Redis 的数据。攻击者在未授权访问 Redis 的情况下可以利用 Redis 的相关方法,可以成功在 Redis 服务器上写入公钥,进而可以使用对应私钥直接登录目标服务器。
0x03 漏洞重现和利用
首先在靶机安装 redis 并且不设置密码
sudo yum install redis* -y
在靶机安装 ssh 服务
sudo yum install openssh
在靶机配置 redis 配置文件,注释掉 ip 限制,并且设置安全设置为 no,使其可以在公网被访问
vi /etc/redis.conf
在靶机配置 redis 配置文件,注释掉 ip 限制,并且设置安全设置为 no,使其可以在公网被访问
vi /etc/redis.conf
重启 redis 服务
测试是否在公网开启
在靶机打开 ssh 服务
在主机本地生成 ssh 公钥
连接靶机 redis 服务,并利用 redis 未授权访问漏洞在目标服务器/root/.ssh 文件夹的 authotrized_keys 写入刚才创建的 ssh 公钥
利用本机的 ssh 私钥登陆靶机服务器
0x04 使用 openvas 对该存在漏洞的系统进行扫描
通过 openvas 扫描靶机系统,可以得到以下结果:
0x05 危害
- 数据库数据泄露
Redis 作为数据库,保存着各种各样的数据,如果存在未授权访问的情况,将会导致数据的泄露,其中包含保存的用户信息等。
- 代码执行
Redis 可以嵌套 Lua 脚本的特性将会导致代码执行, 危害同其他服务器端的代码执行
一旦攻击者能够在服务器端执行任意代码, 攻击方式将会变得多且复杂, 这是非常危险的。
通过 Lua 代码攻击者可以调用 redis.sha1hex() 函数,恶意利用 Redis 服务器进行 SHA-1 的破解。
- 敏感信息泄露
通过 Redis 的 INFO 命令, 可以查看服务器相关的参数和敏感信息, 为攻击者的后续渗透做铺垫。
0x06 应对方案
Redis 未授权访问漏洞是一个出现广泛并且危害巨大的漏洞,会直接导致整个服务器沦陷,要预防则需要做到:
- (1)禁止使用 root 权限启动 redis 服务;
- (2)对 redis 访问启用密码认证,尤其不能使用空密码;
- (3)添加 IP 访问限制;
- (4)尽可能不对公网直接开放 SSH 服务。
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于