更多全球网络安全资讯尽在邑安全
前段时间参加了WCTF2020比赛,当时主要是通过盲测的方式找到了正确的payload,但是对于网上出现的多种payload形式并不了解其原因,因此有了这篇文章。根据网上出现的payload以及比赛中用到的payload,主要有以下3种。
__${
xxx}__::.x__${
xxx}__::__${
xxx}__::x.
Thymeleaf这道题采用的环境是Spring+Thymeleaf,当web应用基于spring,Thymeleaf使用SpEL,否则使用OGNL。
Thymeleaf 预处理
Thymeleaf模版引擎有一个特性叫做表达式预处理(Expression PreProcessing),置于__...__
之中会被预处理,预处理的结果再作为表达式的一部分继续处理。举例如下:
#{
selection.__${
sel.code}__}#{
selection.value}
解析过程分析
01. 获取view
当访问一个api时,spring与Thymeleaf是如何配合的呢?首先定位到org.springframework.web.servlet.DispatcherServlet#doDispatch()
,这是都会经过的一个点。
ha.handle()
applyDefaultViewName()
首先来看第一个过程,跟进handle()方法,直接跟进到org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter#handleInternal()