SpringBoot框架SpEL表達式注入漏洞復現與原理分析( 二 )


文章插圖
接著進行replace替換,將原來的${timestamp}處的值替換成了 Wed Oct 19 00:38:36 CST 2022,最后return result.toString();返回 , 如下圖:

SpringBoot框架SpEL表達式注入漏洞復現與原理分析

文章插圖
然后尋找template中的下一個參數位,這次的參數是error,流程與上面基本一樣,這里不再細致分析 。
SpringBoot框架SpEL表達式注入漏洞復現與原理分析

文章插圖
接著第三個參數是status,同理
SpringBoot框架SpEL表達式注入漏洞復現與原理分析

文章插圖
最后是第四個參數message , 重點來了,這個值是用戶輸入的 。接著分析,跟進parseStringValue方法
SpringBoot框架SpEL表達式注入漏洞復現與原理分析

文章插圖
拿到message對應的值,也就是用戶輸入的payload
SpringBoot框架SpEL表達式注入漏洞復現與原理分析

文章插圖
賦值給propVal,接著調用parseStringValue
SpringBoot框架SpEL表達式注入漏洞復現與原理分析

文章插圖
這次調用去除了${}
SpringBoot框架SpEL表達式注入漏洞復現與原理分析

文章插圖
最后進入resolvePlaceholder , 成功執行T(java.lang.Runtime).getRuntime().exec(new String(new byte[]{0x63,0x61,0x6c,0x63})),彈出計算器,分析結束 。
SpringBoot框架SpEL表達式注入漏洞復現與原理分析

文章插圖
參考文章https://www.cnblogs.com/litlife/p/10183137.html
https://www.cnblogs.com/zpchcbd/p/15536569.html
https://blog.csdn.net/haduwi/article/details/126326511
https://blog.csdn.net/weixin_54902210/article/details/124533353

推薦閱讀