SpEL注入
SpEL(Spring Expression Language)表达式注入, 是一种功能强大的表达式语言、用于在运行时查询和操作对象图,由于未对参数做过滤可造成任意命令执行。
运行
漏洞代码
// Payload: T(java.lang.Runtime).getRuntime().exec(%22open%20-a%20Calculator%22) @GetMapping("/spel") public String rce(String ex) { ExpressionParser parser = new SpelExpressionParser(); String result = parser.parseExpression(ex).getValue().toString(); System.out.println(result); return result; }
运行
安全代码
编码建议
web view层通常通过模板技术或者表达式引擎来实现界面与业务数据分离,比如jsp中的EL表达式。这些引擎通常可执行敏感操作,如果外部不可信数据未经过滤拼接到表达式中进行解析。则可能造成严重漏洞。 应避免外部输入的内容拼接到EL表达式或其他表达式引起、模板引擎进行解析。 白名单过滤外部输入,仅允许字符、数字、下划线等。