今天突然发现,我使用的java sercurity code是老版本的,github上有全新的版本。
https://github.com/JoyChou93/java-sec-code
重新下载了一下,导入之后没问题,相关的漏洞确实多了一些。
继续学习一下远程代码执行漏洞。
spel表达式导致Rce
@RestController
public class SpEL {
@GetMapping("/spel/vuln")
public String rce(String expression) {
ExpressionParser parser = new SpelExpressionParser();
// fix method: SimpleEvaluationContext
return parser.parseExpression(expression).getValue().toString();
}
public static void main(String[] args) {
ExpressionParser parser = new SpelExpressionParser();
String expression = "T(java.lang.Runtime).getRuntime().exec(\"open -a Calculator\")";
String result = parser.parseExpression(expression).getValue().toString();
System.out.println(result);
}
}
上面的rce函数完成了三个工作
创建解析器: SpEL使用ExpressionParser接口表示解析器,提供SpelExpressionParser默认实现;
解析表达式: 使用ExpressionParser的parseExpression来解析相应的表达式
求值:通过getValue方法根据上下文获得表达式值。
最后得到的这个值会返回到页面。
@RestController