SSTI
漏洞案例
漏洞描述
安全编码
SSTI(Server Side Template Injection) 服务器模板注入, 服务端接收了用户的输入,将其作为 Web 应用模板内容的一部分,在进行目标编译渲染的过程中,执行了用户插入的恶意内容。
null
运行
漏洞代码
/** * 将请求的url作为视图名称,调用模板引擎去解析 * 在这种情况下,我们只要可以控制请求的controller的参数,一样可以造成RCE漏洞 * payload: __${T(java.lang.Runtime).getRuntime().exec("open -a Calculator")}__::.x */ @GetMapping("/doc/{document}") public void getDocument(@PathVariable String document) { System.out.println(document); }
运行
安全代码
// 由于controller的参数被设置为HttpServletResponse,Spring认为它已经处理了HTTP Response,因此不会发生视图名称解析 @GetMapping("/doc/safe/{document}") public void getDocument(@PathVariable String document, HttpServletResponse response) { System.out.println("Retrieving " + document); }