Java架构网站在企业级应用中占据很大比例,其基于Spring、Struts、MyBatis等框架构建的系统逻辑复杂,部署方式多样。对这类网站做渗透测试,不能套用通用Web扫描的思路,必须结合Java生态特有的组件、配置和运行机制来设计检测路径,才能发现真正有危害的漏洞。

一、前期信息收集与资产梳理
开始渗透测试前,首先要搞清楚目标Java网站用了哪些技术组件。可以通过响应头中的Server字段、Cookie中的JSESSIONID特征、报错页面抛出的Java异常堆栈来识别中间件类型和框架版本。比如看到org.springframework开头的异常,基本能确定是Spring体系;如果返回包里带有Struts2的标签错误,就要重点关注OGNL表达式注入。
资产梳理还包括梳理站点的功能模块和接口。Java网站常采用前后端分离或传统MVC,后台管理、文件上传、API接口是最容易出问题的地方。建议用目录扫描配合人工翻包,把web.xml中配置的Servlet映射、Spring Controller的RequestMapping路径都整理出来,形成一张完整的接口清单,后面检测才有方向。
二、常见Java架构漏洞类型与检测重点
Java网站有几类高频漏洞需要重点关照。第一是反序列化漏洞,像Fastjson、Jackson、CommonsCollections组件在历史版本中都有远程代码执行风险,检测时可以发送特制的JSON或序列化数据,看服务器是否触发DNSLOG请求或返回异常。第二是权限绕过,Spring Security或Shiro配置不当会导致未登录访问后台,可尝试修改URL大小写、添加;字符、绕过拦截器链。
第三是SQL注入和MyBatis拼接缺陷。很多开发者用${}代替#{}导致语句拼接,渗透时可用报错注入或布尔盲注验证。第四是文件上传与解析,Java网站若用第三方编辑器或自研上传,常因后缀校验不全被传Webshell。检测要覆盖content-type绕过、00截断、.jspx解析等手法。
| 漏洞类型 | 常见组件或位置 | 基础检测方法 |
|---|---|---|
| 反序列化 | Fastjson、Jackson、Redis序列化 | 发送恶意payload观察DNSLOG或异常 |
| 权限绕过 | Shiro、Spring Security | 改路径大小写、加;绕过过滤 |
| SQL注入 | MyBatis ${}拼接 | 报错注入、布尔盲注 |
| 文件上传 | 自研上传、富文本编辑器 | 绕后缀、测解析漏洞 |
三、手工渗透与工具配合的检测流程
纯自动化扫描器对Java逻辑漏洞覆盖率很低,必须手工走流程。先用Burp Suite拦截正常请求,修改参数测试越权;再对登录点做暴力破解和验证码绕过试验。对接口传参,尝试把普通字段改成表达式,如SpEL或OGNL,看是否被执行。手工能发现很多扫描器忽略的 business logic 问题。
工具方面,可用AWVS、Xray做基础爬取和PoC验证,但结果要人工复核。对于内网Java应用,还可搭本地测试环境复现组件版本,确认漏洞可利用性。整个流程应记录请求响应,方便写报告时证明危害,也帮开发定位修复点。
四、报告与修复建议闭环
检测完要把问题按风险等级排序,写清触发步骤和证明截图。对Java架构,修复不能只打补丁,要建议升级框架、关闭多余端点、统一权限注解。比如Shiro升级到安全版本并改AES密钥,Fastjson直接换Jackson并开SafeMode。
一次完整的渗透测试,价值不在于找出多少条告警,而是让开发理解Java网站的风险来自配置和组件链。测试结束应与开发复盘,把检测方法沉淀成安全规范,下次上线前自查,这样才能真正降低被攻破的概率。