Struts2 007 漏洞复现&分析
一、漏洞背景
待补充
二、漏洞复现
poc:
'%2b(%23application)%2b'
三、漏洞分析
根据公开的漏洞信息得知,该漏洞主要存在类型转化错误的拦截器处理逻辑上。
大概过程为:
只接受int类型的参数校验检测到传入的参数为非字符型,从而数据走向ConversionErrorInterceptor,而在ConversionErrorInterceptor中,对传入的值直接进行"'" + value + "'"操作,而通过闭合前后两个单引号后将该数据传入执行表达式中从而达到恶意执行的目的。
分析过程如下:
跟进getOverrideExpr,在idea调试中,该方法指向了父类,个人感觉可能是编译器有点小bug,实际上子类已经重写了父类该方法。
所以value传进去之后,假设value是'+(#application)+',那么最终返回得到一个''+(#application)+'',既前后两个字符串和中间的#application取出来的内容进行拼接。最终执行表达式(但具体是如何进入到哪一步的表达式,网上的文章并没有详细分析,这个需要再多花点时间研究。当前项目推进时间太赶了,分析进度有点慢。