欢迎来到 黑吧安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

Apache Struts OGNL注入漏洞原理与示例

来源:本站整理 作者:佚名 时间:2019-03-30 TAG: 我要投稿

通过本篇文章,我们主要了解如何在Apache Struts中实现OGNL注入。我们将举例阐述Struts中的两个关键漏洞:CVE-2017-5638(Equifax信息泄露)和CVE-2018-11776。
Apache Struts是一个免费的开源框架,用于创建现代的Java Web应用程序。Apache Struts中有许多严重的漏洞,它的一个特性是支持OGNL(对象图导航语言),这也是许多漏洞的主要原因。
其中的一个漏洞(CVE-2017-5638)直接导致了2017年的Equifax信息泄露,暴露了超过1.45亿美国公民的个人信息。尽管该公司的年收入超过30亿美元,但他们仍然没有逃过Apache Struts MVC框架的一个已知漏洞攻击。
本文主要介绍了Apache Struts,然后将指导我们如何修改一个简单的应用程序,使用OGNL并实现漏洞利用。接下来,我们将深入研究该平台上的一些公开漏洞利用方式,并尝试利用OGNL注入漏洞。
尽管Java开发人员熟悉Apache Struts,但安全社区往往并不尽然,这也就是我们撰写本文的原因。
入门
运行易受攻击的Struts应用程序需要安装Apache Tomcat Web服务器。该软件包的最新版本可以在此处下载(ZIP压缩包)。将二进制文件解压缩到您选择的位置(我们使用/var/tomcat)并继续:
cd /var/tomcat/bin # 转到解压缩的文件夹
chmod +x *.sh      # 将脚本设置为可执行文件
./startup.sh       # 运行启动脚本
我们访问http://localhost:8080/,并检查该站点是否在运行。
确认无误后,我们准备下载旧版本的Apache Struts框架,该框架容易受到我们即将演示的漏洞攻击。该页面提供符合我们需求的2.3.30版本Struts。
在提取压缩的内容后,我们应该在/apps位置下看到struts2-showcase.war文件。这是一个使用Struts编译并准备部署的演示应用程序。只需要将WAR文件复制到/var/tomcat/webapps,并访问http://localhost:8080/struts2-showcase/showcase.action确认其是否有效。
Web服务器基础知识
如果您已经很好的掌握了与Java Web应用程序相关的简单概念(例如Servlet),那么您就已经领先了。如果您对Java Servlet一无所知,可以将其简单地理解为组件,其目的是创建用于在Web服务器上托管Web应用程序的Web容器,此外它还负责处理对/struts2-showcase等Java应用程序的请求。
要处理Servlet,Web服务器(例如Apache Tomcat)需要一些组件:
1. Apache Coyote是支持HTTP/1.1协议的连接器。它允许与Servlet容器组件Apache Catalina进行通信。
2. Apache Catalina容器时确定在Tomcat接收HTTP请求时需要调用哪些Servlet的容器。它还将HTTP请求和响应从文本转换为Servlet使用的Java对象。

您可以在这里找到有关Java Servlet规范的所有详细信息(最新版本为4.0)。
Apache Struts基础知识
与Java Web应用程序一样,使用Apache Struts框架的应用程序可以具有多个Servlet。本文的主要目的不是让大家理解这个构建Web应用程序的框架,只是从表面上弄懂基本概念。我们可以通过分步教程来对该主题有所了解。
Apache Struts框架依赖于MVC(模型-视图-控制器)架构模式。它对应用程序非常有帮助,因为可以分离主要的应用程序组件:
1. 模型(Model):表示应用程序数据,例如使用“订单”等数据的类。
2. 视图(View):是应用程序的输出,可视部分。
3. 控制器(Controller):接收用户输入,使用模型生成视图。
4. 动作(Actions):Apache Struts中的模型。
5. 拦截器(Interceptors):控制器的一部分,它们是可以在处理请求之前或之后调用的钩子。
6. 值栈/OGNL:一组对象,例如模型或动作对象。
7. 结果/结果类型:用于选择业务逻辑后的视图。
8. 视图技术:处理数据的显示方式。
大家可以在下面看到Apache Struts Web应用程序的一般体系结构:

控制器接收HTTP请求,FilterDispatcher负责根据请求调用正确的操作。然后执行该操作,视图组件准备结果并将其发送给HTTP响应中的用户。
Struts应用程序示例
要从头开始编写Struts应用程序需要一些时间,所以我们将使用一个已经可用的rest-showcase演示应用程序,这是一个带有基本前端的简单REST API。要编译应用程序,我们只需要进入其目录,并使用Maven编译:
cd struts-2.3.30/src/apps/rest-showcase/
mvn package
在目标目录中,我们可以找到以下文件:struts2-rest-showcase.war。您可以通过将其复制到Tomcat服务器的webapps目录(例如:/var/tomcat/webapps)来安装。
下面是该应用的源代码:

以下是可用文件的说明:
1. Order.java是模型,它是一个存储订单信息的Java类。
public class Order {
String id;
  String clientName;
  int amount;
  …
}
2. OrdersService.java是一个Helper类,它将Orders存储在HashMap总,并对其进行管理。
public class OrdersService {

[1] [2] [3] [4] [5] [6]  下一页

【声明】:黑吧安全网(http://www.myhack58.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱admin@myhack58.com,我们会在最短的时间内进行处理。
  • 最新更新
    • 相关阅读
      • 本类热门
        • 最近下载