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

基于内存 Webshell 的无文件攻击技术研究

来源:本站整理 作者:LandGrey@观星实验室 时间:2020-02-16 TAG: 我要投稿

一. 情况介绍
红队人员在面对蓝队的严防死守与”盯梢”式的防御策略时,传统需要文件落地的攻击技术往往会受到掣肘,基于 Web 的无文件攻击技术逐渐成为 Web 安全的一种新的研究趋势。
所以我们重点研究了基于 Java 的常用 Web 框架 —  `SpringMvc`,并实现了利用多种不同的技术手段,往内存中注入恶意 Webshell 代码的无文件攻击技术。
 
二. 必要知识
在切入正题前,首先需要了解下 `Spring` 框架中的几个必要的名词术语。
 Bean
`bean` 是 Spring 框架的一个**核心概念**,它是构成应用程序的主干,并且是由 `Spring IoC` 容器负责实例化、配置、组装和管理的对象。
通俗来讲:
– bean 是对象– bean 被 IoC 容器管理– Spring 应用主要是由一个个的 bean 构成的
ApplicationContext
Spring 框架中,`BeanFactory` 接口是 `Spring`  **IoC容器** 的实际代表者。
从下面的`接口继承关系图`中可以看出,`ApplicationContext` 接口继承了 `BeanFactory` 接口,并通过继承其他接口进一步扩展了基本容器的功能。

因此,`org.springframework.context.ApplicationContext  `接口也代表了 ` IoC容器` ,它负责实例化、定位、配置应用程序中的对象(`bean`)及建立这些对象间(`beans`)的依赖。
`IoC容器`通过读取配置元数据来获取对象的实例化、配置和组装的描述信息。配置的零元数据可以用`xml`、`Java注解`或`Java代码`来表示。
另外,如下图,还有一堆各式各样的 context 继承了 `ApplicationContext` 接口,太繁杂不展开描述,仅供参考。

 
ContextLoaderListener 与 DispatcherServlet
下面是一个典型 Spring 应用的 `web.xml` 配置示例:
xml
web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xmlns="http://java.sun.com/xml/ns/javaee"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
         version="2.5">
    display-name>HelloSpringMVCdisplay-name>
    context-param>
        param-name>contextConfigLocationparam-name>
        param-value>/WEB-INF/applicationContext.xmlparam-value>
    context-param>
    listener>
        listener-class>org.springframework.web.context.ContextLoaderListenerlistener-class>
    listener>
    servlet>
        servlet-name>dispatcherServletservlet-name>
        servlet-class>org.springframework.web.servlet.DispatcherServletservlet-class>
        init-param>
            param-name>contextConfigLocationparam-name>
            param-value>/WEB-INF/dispatcherServlet-servlet.xmlparam-value>
        init-param>
        load-on-startup>1load-on-startup>
    servlet>
    servlet-mapping>
        servlet-name>dispatcherServletservlet-name>
        url-pattern>/url-pattern>
    servlet-mapping>
web-app>
 
在正式了解上面的配置前,先介绍下关于 `Root Context` 和 `Child Context` 的**重要**概念:
– Spring 应用中可以同时有多个 `Context`,其中只有一个 `Root Context`,剩下的全是 `Child Context`– 所有`Child Context`都可以访问在 `Root Context`中定义的 `bean`,但是`Root Context`无法访问`Child Context`中定义的 `bean`– 所有的`Context`在创建后,都会被作为一个属性添加到了 `ServletContext`中
 
ContextLoaderListener
`ContextLoaderListener` 主要被用来初始化全局唯一的`Root Context`,即 `Root WebApplicationContext`。这个 `Root WebApplicationContext` 会和其他  `Child Context`  实例共享它的 `IoC 容器`,供其他 `Child Context` 获取并使用容器中的 `bean`。
回到 `web.xml` 中,其相关配置如下:
context-param>
 param-name>contextConfigLocationparam-name>
 param-value>/WEB-INF/applicationContext.xmlparam-value>
context-param>
listener>
 listener-class>org.springframework.web.context.ContextLoaderListenerlistener-class>
listener>
依照规范,当没有显式配置 `ContextLoaderListener` 的  `contextConfigLocation` 时,程序会自动寻找 `/WEB-INF/applicationContext.xml`,作为配置文件,所以其实上面的 `` 标签对其实完全可以去掉。

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

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