一,Struts2是什么
Struts2是一個(gè)基于MVC設(shè)計(jì)模式的Web應(yīng)用框架,它本質(zhì)上相當(dāng)于一個(gè)servlet,在MVC設(shè)計(jì)模式中,Struts2作為控制器(Controller)來(lái)建立模型與視圖的數(shù)據(jù)交互。Struts 2是Struts的下一代產(chǎn)品,是在 struts 1和WebWork的技術(shù)基礎(chǔ)上進(jìn)行了合并的全新的Struts 2框架。其全新的Struts 2的體系結(jié)構(gòu)與Struts 1的體系結(jié)構(gòu)差別巨大。Struts 2以WebWork為核心,采用攔截器的機(jī)制來(lái)處理用戶的請(qǐng)求,這樣的設(shè)計(jì)也使得業(yè)務(wù)邏輯控制器能夠與ServletAPI完全脫離開,所以Struts 2可以理解為WebWork的更新產(chǎn)品。雖然從Struts 1到Struts 2有著非常大的變化,但是相對(duì)于WebWork,Struts 2的變化很小。
二,s2-045漏洞形成分析
CVE編號(hào):CVE- 2017- 5638
POST請(qǐng)求發(fā)送數(shù)據(jù)功能:獲取WEB路徑,任意命令執(zhí)行,反彈shell和文件上傳
?首先,我們先對(duì)比一下修復(fù)前與修復(fù)后的版本,來(lái)找到補(bǔ)丁的代碼
?先解壓這兩個(gè)文件beyond Compare 4 這個(gè)工具來(lái)對(duì)所有文件進(jìn)行比對(duì),來(lái)找出修改的文件,中文版如有需要注冊(cè)碼可以私聊領(lǐng)取。
鏈接:https://pan.baidu.com/s/14Hx9lVfZ2RHa9RQl_f3TSQ?
提取碼:ifso?
?然后來(lái)到struts-STRUTS_2_3_32目錄,右擊struts-STRUTS_2_3_32目錄,選擇Compareto”struts-STRUTS_2_3_31”來(lái)與之前的文件夾里所有文件進(jìn)行對(duì)比
打開頁(yè)面如下是兩個(gè)新舊文件夾的對(duì)比?
?選擇edit再點(diǎn)擊Select All(其實(shí)就是全選)
然后點(diǎn)擊菜單欄的Actions,然后選擇Compare Contents
?在彈出的彈窗中選擇Binary comparison? ? ?,并勾選Show results dialog ,點(diǎn)擊start等待比較完成
?
?比較完發(fā)現(xiàn)共有57處不同,點(diǎn)擊.xml發(fā)現(xiàn)只是修改了版本號(hào),發(fā)現(xiàn)又三個(gè)比較長(zhǎng)的.java文件
?
?隨機(jī)點(diǎn)擊一個(gè)發(fā)現(xiàn)已經(jīng)標(biāo)記好不同的位置
?尋找新版本這個(gè)文件的路徑,然后打開
?看findtxet函數(shù),在376行和424行
?
?查看調(diào)用的getDefaultMessage函數(shù),在這個(gè)函數(shù)里面調(diào)用了TextParseUtil.translateVariables在TextParseUtil.translateVariables方法中存在安全漏洞,可使遠(yuǎn)程攻擊者通過(guò)構(gòu)造的OGNL表達(dá)式,執(zhí)行任意代碼
在TextParseUtil.java中找到return parser?發(fā)現(xiàn)在這調(diào)用了ognl的方法,這就是漏洞形成的原因
?三,s2-045漏洞復(fù)現(xiàn)
Struts2漏洞利用掃描工具及其環(huán)境
Structs2高危漏洞exp的掃描利用工具(2018)
鏈接:https://pan.baidu.com/s/1rOMjz-7xOYGyJdh4pdddCQ?
提取碼:aero?
漏洞環(huán)境
鏈接:https://pan.baidu.com/s/1w7yAmprETRfPNiF5mJ8Rdg?
提取碼:5b1r??
部署s2-045漏洞環(huán)境
cd vulhub-master?
?cd struts2
?
?cd s2-045
?
docker-compose up -d
?訪問(wèn)靶場(chǎng)s2-045
http://your:ip/doUpload.action
?使用bp隨意上傳一個(gè)文件包進(jìn)行抓取,
?
?根據(jù)上面的分析我們是發(fā)現(xiàn)了漏洞存在需要利用Content-Type進(jìn)行修改并且進(jìn)行傳參,將參數(shù)修改為如下內(nèi)容
%{#context['com.opensymphony.xwork2.dispatcher.HttpServletResponse'].addHeader('vulhub',120*120)}.multipart/form-data??
?
再運(yùn)用漏洞檢查工具檢測(cè)出了? ? ? ? S2-045漏洞?
文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-807597.html
?文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-807597.html
到了這里,關(guān)于漏洞復(fù)現(xiàn) - - -Struts2(s2-045)遠(yuǎn)程命令執(zhí)行漏洞的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!