(
背景
)
在一次为期三天的企业内部攻防演练中,我们红队被授权模拟真实攻击者,目标是获取核心数据库中的敏感财务数据。防守方由企业内部的蓝队和某安全厂商组成,配备了成熟的边界防火墙、Web应用防火墙、终端检测与响应系统以及24小时值守的安全运营中心。
开局只有一个目标域名:target.com。没有VPN,没有内部资料,一切从零开始。
(
受阻:固若金汤的边界
)
开局第一天,我们对目标域名进行了常规的信息收集和漏洞扫描。
·Web应用:主站是一个面向公众的信息门户,使用了流行的Java框架。我们尝试了SQL注入、文件上传、反序列化等常见漏洞,全部被Web应用防火墙拦截或返回404。手动测试发现,所有输入点都经过了严格的参数校验,且存在请求过滤。
·外围服务:端口扫描只开放了80、443和22(SSH)。SSH使用密钥登录,无法爆破。邮箱系统、VPN入口均未发现可利用漏洞。
·社工尝试:尝试在招聘网站、领英收集员工邮箱进行钓鱼,但演练期间防守方高度警惕,员工安全意识培训到位,无人点击链接。
第一天的结果让人沮丧:边界防御固若金汤,没有直接突破口。
(
转机:被遗忘的“第三方”
)
当天晚上,我们重新梳理了攻击路径。既然正面进不去,那就从侧面入手。我们开始分析目标关联的第三方服务和供应链。
1. 子公司信息泄露
通过Whois历史查询和备案信息关联,我们发现目标企业曾有一个被收购的子公司,其官网仍挂在同一公网IP段下,但域名已过期。通过子域名爆破工具,我们扫描到一个子域名:dev.subsidiary.target.com。
2. 脆弱点:开发环境暴露
访问该子域名,发现是一个未关闭的Swagger UI页面(API文档)。通过Swagger,我们看到了大量内部API接口定义,包括用户管理、订单查询等。虽然大部分接口需要Token,但我们注意到一个“健康检查”接口:/actuator/health。
访问该接口,返回了JSON格式的系统状态信息,其中赫然包含:
json
"redis": {
"status": "UP",
"details": {
"host": "10.10.10.100",
"port": 6379,
"password": "Redis_Dev_2023" // 密码明文暴露!
}
}
这是一个致命的配置失误。开发环境的Actuator端点暴露了Redis的内网IP和明文密码。
(
深入:从Redis到跳板机
)
虽然拿到了Redis信息,但10.10.10.100是内网地址,我们仍在外网。然而,通过Swagger页面,我们还发现了一个“文件上传”接口(尽管有权限校验)。结合Redis密码,我们制定了下一步计划:
1. 获取低权限Webshell
我们注意到该开发子站存在一个用PHP编写的旧版后台(通过目录扫描发现/admin/login.php)。尝试使用泄露的Redis密码作为后台密码,竟然登录成功!这暴露了开发人员在多个环境中复用密码的习惯。
2. 利用SSRF突破边界
登录后台后,我们发现一个“网站状态检测”功能,可以输入URL进行Ping操作。经测试,该功能未过滤内网IP,存在服务端请求伪造漏洞。
利用该漏洞,我们构造请求:
text
url=http://10.10.10.100:6379/
成功探测到内网Redis服务可达。虽然无法直接执行命令(Redis需要特定条件),但我们利用SSRF漏洞和目标内网的弱隔离,将攻击流量打入了内网。
(
爆发:从Redis到核心数据库
)
进入内网后,防守方的优势大幅减弱。我们利用获得的Redis密码,通过SSRF漏洞配合Gopher协议攻击内网Redis服务器(Redis未授权访问漏洞的变种利用),成功在主从复制模式下加载了恶意模块,在Redis服务器上执行了系统命令。
经探测,这台Redis服务器同时是一台跳板机,具有访问核心生产网段的权限。
1. 横向移动:在跳板机上抓取历史命令记录和配置文件,发现了运维人员遗留的id_rsa私钥文件,以及Ansible自动化脚本中记录的MySQL和MSSQL数据库密码。
2. 拿下核心资产:利用这些凭据,我们直接登录了核心财务数据库(MSSQL),该数据库具有sysadmin权限。通过启用xp_cmdshell,我们在数据库服务器上执行了系统命令,最终获取了域控权限。
至此,演练在第二天晚上提前结束。我们从一条被遗忘的子域名出发,经过API信息泄露→密码复用→SSRF突破→Redis利用→凭据窃取→数据库提权,完成了一次典型的“曲线渗透”。
(
复盘:防线为何被突破?
)
1. 攻击面管理缺失:子公司废弃的域名、开发环境的Swagger UI、未关闭的Actuator端点,这些“影子资产”是防线的第一道裂痕。
2. 密码复用与硬编码:开发环境与生产环境密码复用,且在配置文件中明文存储密码。这是最普遍、最致命的低级错误。
3. 内网隔离不足:Web应用存在SSRF漏洞,且未对内网IP访问进行限制,导致边界被轻易穿透。
4. 权限滥用:Redis和数据库服务以高权限运行,被利用后直接导致服务器失陷。
(
启示:从实战中学习
)
1. 收敛攻击面:定期清理废弃域名、测试接口、未使用的开放端口。建立完整的资产清单,特别是对开发、测试环境进行严格的网络隔离和访问控制。
2. 强化凭据管理:杜绝密码明文存储,强制使用密码保险箱。确保不同环境、不同系统使用不同的强密码,避免密码复用。
3. 纵深防御而非单点防御:网络边界只是第一道防线。内网同样需要实施微隔离、最小权限原则和流量监控。即使边界被突破,也要让攻击者在内网举步维艰。
4. 实战化演练的价值:常规漏洞扫描无法发现对象级别授权失效、业务逻辑漏洞和复杂的供应链攻击路径。只有通过接近真实的攻防演练,才能检验防御体系的真实水位。
(
结语
)
真实的攻击往往不是教科书式的正面强攻,而是“曲线救国”。攻击者会耐心地寻找你最薄弱的环节——可能是过期的子域名、开发人员偷懒复用的密码,或者是忘记关闭的测试接口。
防守方需要的不仅是堆砌安全产品,更要建立持续的资产发现、严格的配置管理和纵深的内网防御体系。记住:安全的短板,往往不在你精心守护的主阵地,而在那些被遗忘的角落里。

