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