1. Java代码审计实战:从SpEL注入到文件上传漏洞全解析
作为一名长期从事Java安全审计的工程师,我经常需要对企业级应用进行全面的安全检测。今天我将分享一套完整的Java代码审计案例集,涵盖从表达式注入到文件上传等12类常见漏洞。这些案例均来自真实项目,每个漏洞点都配有详细的技术分析和修复方案。
1.1 SpEL表达式注入漏洞剖析
Spring Expression Language(SpEL)是Spring框架中的表达式语言,它允许在运行时查询和操作对象图。虽然功能强大,但不当使用会导致严重的安全问题。
1.1.1 漏洞代码示例
java复制@GetMapping("/spel")
public String vul1(String exec) {
ExpressionParser parser = new SpelExpressionParser();
EvaluationContext evaluationContext = new StandardEvaluationContext();
String result = "";
try {
result = parser.parseExpression(exec).getValue(evaluationContext).toString();
return result;
} catch (SpelParseException e) {
return "error";
}
}
这段代码直接使用用户输入的exec参数作为SpEL表达式进行解析,攻击者可以构造恶意表达式执行任意命令:
code复制T(java.lang.Runtime).getRuntime().exec('calc')
1.1.2 漏洞原理分析
StandardEvaluationContext提供了完整的SpEL功能,包括类型构造器、变量引用等- 攻击者可以通过
T()操作符访问任意Java类 - 结合Runtime.exec()方法可执行系统命令
1.1.3 修复方案
使用SimpleEvaluationContext替代StandardEvaluationContext:
java复制EvaluationContext evaluationContext = SimpleEvaluationContext.forReadOnlyDataBinding().build();
注意:SimpleEvaluationContext限制了表达式功能,禁止了类引用等危险操作
1.2 SQL注入漏洞深度解析
S
