红队视角下的Weblogic文件上传漏洞攻防全纪实
那是一个闷热的周五下午,我们红队正在为某金融机构的年度攻防演练做最后准备。连续三天的外网渗透毫无进展——WAF规则更新得滴水不漏,员工钓鱼邮件打开率不到2%,就连往常最容易得手的VPN漏洞也被修补得干干净净。就在团队几乎要放弃时,资产测绘系统突然发出"叮"的一声提示...
1. 突破口的诞生:从资产测绘到漏洞定位
现代企业网络就像一座戒备森严的城堡,而红队的工作就是找到那块松动的砖。我们使用自主开发的资产指纹识别系统,通过以下特征在客户上千台服务器中锁定了关键目标:
- HTTP头部特征:
Server: Oracle-WebLogic-Server - URL路径特征:
/console/login/LoginForm.jsp - 端口组合:7001/7002端口伴随8009(AJP)开放
# 资产识别命令示例(实际工具已封装为GUI) nmap -sV -p 7001,7002,8009 10.10.0.0/16 --script=http-weblogic-version当看到10.10.34.56:7001返回的版本信息显示为WebLogic 12.2.1.3时,整个作战室突然安静了——这个版本号恰好落在CVE-2018-2894的影响范围内。
实战经验:大型企业往往存在"孤儿服务器"现象,即业务下线后未及时清理的中间件实例。这些被遗忘的系统最容易成为攻击跳板。
2. 漏洞利用的艺术:绕过限制上传Webshell
与公开的漏洞复现教程不同,真实环境往往存在各种限制。目标服务器的Web Service Test Page处于禁用状态,但通过以下技巧我们成功绕过了限制:
后台权限获取:
- 爆破弱口令未果后,通过
/console/login/LoginForm.jsp的报错信息确认启用的是LDAP认证 - 利用客户提供的测试账号
pentest01(权限为只读用户)成功登录控制台
- 爆破弱口令未果后,通过
功能激活路径:
- 导航至
域结构 > base_domain > 高级 - 勾选"启用Web服务测试页"后无需重启立即生效
- 导航至
POST /ws_utc/config.do HTTP/1.1 Host: 10.10.34.56:7001 [...] Content-Type: application/x-www-form-urlencoded setting=workDir&value=/u01/oracle/user_projects/domains/base_domain/servers/AdminServer/tmp/_WL_internal/com.oracle.webservices.wls.ws-testclient-app-wls/4mcj4y/war/css- 文件上传技巧:
- 使用经过混淆的JSP脚本绕过基础防护
- 通过多阶段上传(先传图片马再覆盖)规避内容检查
表:常见Webshell检测规避方案对比
| 技术手段 | 检测绕过率 | 所需权限 | 日志痕迹 |
|---|---|---|---|
| 纯JSP文件上传 | 30% | 文件写入 | 明显 |
| 配置文件注入 | 65% | 配置修改 | 中等 |
| 日志文件写入 | 85% | 日志目录写入 | 隐蔽 |
| 内存马注入 | 95% | 代码执行 | 极隐蔽 |
3. 内网横向移动:从边缘服务器到核心区
获得立足点后,我们立即展开内网渗透。通过Webshell执行whoami发现当前权限为oracle用户,这为后续操作提供了便利:
信息收集阶段:
netstat -antp发现到192.168.100.0/24网段的连接env获取到数据库连接字符串信息ps -ef发现正在运行的Tuxedo服务进程
权限提升技巧:
- 利用WebLogic的
wlst.sh脚本执行系统命令 - 通过
crontab -l发现备份脚本的弱权限配置
- 利用WebLogic的
# 通过WLST执行系统命令的示例 connect('weblogic','password','t3://localhost:7001') exec('java.lang.Runtime.getRuntime().exec("id")')- 隐蔽通信方案:
- 使用DNS-over-HTTPS进行C2通信
- 流量伪装成正常的API请求格式
- 设置每天固定时段激活的定时任务
4. 蓝队反击:从异常日志到完整溯源
演练进行到第36小时,防守方开始有所反应。通过复盘蓝队分享的日志,我们了解到他们的检测逻辑:
初始检测点:
- WebLogic access.log中出现大量
/ws_utc/config.do的POST请求 - 中间件日志中检测到异常的
ClassLoader调用链
- WebLogic access.log中出现大量
行为分析线索:
- HIDS捕获到
oracle用户突然执行whoami /all - 网络流量分析发现异常的DNS隧道特征
- HIDS捕获到
溯源技术栈:
- 通过ELK聚合各节点日志时间线
- 使用Apache Kafka实现实时事件流分析
- 最终定位到初始攻击入口点
防御方checklist:
- [ ] 定期扫描未授权开启的Web服务测试页
- [ ] 监控
ws_utc目录下的文件变更 - [ ] 对中间件的ClassLoader行为建立基线
- [ ] 限制服务器出站DNS查询权限
5. 漏洞防御的立体化方案
真正的安全防护需要层层设防。针对此类漏洞,我们建议企业实施以下防御矩阵:
网络层控制:
- 使用微隔离技术限制中间件服务器的网络连接
- 对管理接口实施IP白名单访问控制
主机层加固:
- 按照CIS基准进行安全配置
- 部署EDR解决方案监控敏感操作
# 示例:Kubernetes网络策略片段 kind: NetworkPolicy apiVersion: networking.k8s.io/v1 metadata: name: weblogic-isolation spec: podSelector: matchLabels: app: weblogic policyTypes: - Egress egress: - to: - podSelector: matchLabels: app: oracle-db- 应用层防护:
- 部署RASP解决方案拦截异常类加载
- 对上传文件实施内容签名校验
- 定期进行红蓝对抗演练验证防护效果
在最近一次复测中,客户按照我们建议的方案改造后,同类攻击的平均检测时间从原来的48小时缩短到了19分钟。