服务粉丝

我们一直在努力
当前位置:首页 > 财经 >

Spring环境下有关内存马的回显总结

日期: 来源:信安黑客技术收集编辑:LeeH

0x01 前言

在学习各种内存马的过程中,关注到了观星实验室的一篇文章,较为全面的列举了在Spring环境下的有关内存马的实现技巧

这里我们深入进行学习学习一下

0x02 正文

前景回顾

网上常见的内存马方式是通过RequestContextHolder.currentRequestAttributes().getAttribute("org.springframework.web.servlet.DispatcherServlet.CONTEXT", 0)的方式得到的WebApplicationContext对象的

那么存在有几个问题

  1. 具体怎么得到该对象的

    我们跟进RequestContextHolder#currentRequestAttributes方法

这个方法主要是返回了当前线程中的所有存在的请求属性值动态调试一下有些什么

首先,很明显的是,我们可以通过这种方法来获取到Request / Response域,进而能够做到在构造内存马webshell的交互式回显

同样对于在前面创建一个Controller的步骤中,需要找到一个Context对象来操控bean来进行动态添加一个Controller

幸运的是在对象的request域中存在的属性中

存在有本次请求的各种信息,比如说访问路由等等属性,特别的,其中存在有一个属性值为org.springframework.web.servlet.DispatcherServlet.CONTEXT

对于DispatcherServlet这个类,是在常见的Spring项目中的web.xml配置文件中都会指定的一个用来进行路由分发的一个类

对于他的CONTEXT属性

居然还是一个Child Context对象

  1. 这个对象有着怎么样的作用

    通过这个Context对象,我们可以成功操控bean对象,即这里我们需要的RequestMappingHandlerMapping类对象

通过调用他的registerMapping方法来动态创建一个Controller

使得在访问我们定义的路由的时候执行我们自定义的恶意代码

具体的代码实现可以参见前面的Spring Controller类型的内存马实现

0x03 再谈利用

难道在Spring这个伟大的框架中,只存在这样一种方式能够找到Context对象嘛,当然还有这各种各样的sao姿势

Get Context

  1. (WebApplicationContext) RequestContextHolder.currentRequestAttributes().getAttribute("org.springframework.web.servlet.DispatcherServlet.CONTEXT", 0)

    这个方法就是前面使用的方法,不重复阐述了

  2. ContextLoader.getCurrentWebApplicationContext()

    对于ContextLoader类,我们可以看看大概的用途

实际上就是通过ContextLoaderListener调用执行Root Application Context的初始化工作

也即是在web.xml配置文件中的<context-param>标签的配置

如果没有配置这个标签,默认为XmlWebApplicationContext类对象

在该类的getCurrentWebApplicationContext方法中

从注释中,我们知道这个方法的作用主要是通过中当前线程中获取Spring的Root Application Context对象

同样可以进行前面类似的操作,操控bean对象来动态创建一个Controller

  1. ......

Add Controller

对于所有的映射都实现了HandlerMapping这个接口

  1. RequestMappingHandlerMapping#registerMapping

    对于这种方法添加Controller,前面也已经提到了,也不重复说了

    但是这种方式存在有一定的版本限制,即是在spring 4.0之后才能够调用进行路由的注册

  2. AbstractUrlHandlerMapping#registerHandler

    对于这个类名就是极其的可疑,果不其然

    了解一下AbstractUrlHandlerMapping的作用

是一个URL映射的HandlerMapping实现的抽象基类

看看类似于前面的registerMapping方法的实现

为提供的URL路径注册一个特定的handler对象

我们具体看看该方法中的逻辑

首先在第一个if语句中判断传入的handler值是否是String类型,如果是,将会进入if语句内部,首先通过调用obtainApplicationContext方法获取上下文环境

之后将会通过调用isSingleton方法判断传入的handlerNmame是否是一个单例,如果是将会取出对应的Bean对象

微信搜索公众号:Linux技术迷,回复:linux 领取资料 。

之后,首先会从handlerMap这个映射中取出我们传入的路由,如果存在对应的handler对象,且不为我们前面获取的Bean对象,则将会抛出一个异常,如果不存在对应路由的handler对象,将会将其添加进入handlerMap这个映射中去

  1. AbstractHandlerMethodMapping#detectHandlerMethods

    对于这种方法的利用,我觉得其灵感应该来自于第一种方式

    直接来看看这个方法实现

这里传入的参数不同于前面传入的参数,这里只有一个handler对象

同样是从获取的上下文环境中取出传入的handler这个bean,之后将会注册为了一个Controller bean对象

0x04 总结

在Get Context部分,存在着相对简单的两种分别获取了child Context和Root Context的方式,我们需要知道的是,对于一个Child Context来说是能够获取到Root Context中的Bean对象的,但是一个Root Context是不能够获取到Child Context中的bean对象的

0x05 参考

https://www.anquanke.com/post/id/198886

作者:LeeH

来源:先知社区


觉得内容不错,就点下“”和“在看
如侵权请私聊公众号删文

相关阅读

  • 投资高手们都是如何炼成的?

  • 投资进化论之一1/7钟表与眼睛成功的专业投资者素有“学院派”和“草根派”之分,前者名校毕业,从大公募基金或券商研究所入职,研而优则投,一般都是理论功底和专业知识浓厚;后者,股
  • Spring 新特性,正式“抛弃”Feign了

  • 近期,Spring 6 的第一个 GA 版本发布了,其中带来了一个新的特性——HTTP Interface。这个新特性,可以让开发者将 HTTP 服务,定义成一个包含特定注解标记的方法的 Java 接口,然后
  • 详解 Java 泛型,写得太好了!

  • -正文泛型—— 一种可以接收数据类型的数据类型,本文将通俗讲解Java泛型的优点、方法及相关细节。一、泛型的引入我们都知道,继承是面向对象的三大特性之一,比如在我们向集合中
  • 一文深入理解 Java 的四种引用类型

  • 这是 JsonChao 的第 318 期分享前言Java Reference 类型是与虚拟机垃圾回收机制密切相关的知识点,同时也是面试重要考点之一。一般认为 Java 有四种 Reference(强引用 & 软引
  • Flutter 系列(二):Dart 语法筑基

  • 这是 JsonChao 的第 318 期分享前言在本系列的上一篇文章中,我们介绍了 Flutter 开发环境搭建,以及使用 AndroidStudio 运行你的第一个 Flutter 项目,体验了热重载。还没有看过
  • 为什么 finalize() 方法只会执行一次?

  • 这是 JsonChao 的第 323 期分享前言Java Finalizer 机制提供了一个在对象被回收之前释放占用资源的时机,但是都说 Finalizer 机制是不稳定且危险的,不推荐使用,这是为什么呢?今
  • 2.25早读 | 可怕的不是长大,而是遗忘

  • 今天是Gwen陪你早读的第 2649 天哦!2.25 早读Growing up is not the problem. Forgetting is. 《小王子》宝宝们,周末没有朗读版哦~背景音乐 Conor Maynard - Heartbreak Anni

热门文章

  • “复活”半年后 京东拍拍二手杀入公益事业

  • 京东拍拍二手“复活”半年后,杀入公益事业,试图让企业捐的赠品、家庭闲置品变成实实在在的“爱心”。 把“闲置品”变爱心 6月12日,“益心一益·守护梦想每一步”2018年四

最新文章

  • Spring环境下有关内存马的回显总结

  • 0x01 前言在学习各种内存马的过程中,关注到了观星实验室的一篇文章,较为全面的列举了在Spring环境下的有关内存马的实现技巧这里我们深入进行学习学习一下0x02 正文前景回顾网
  • 初探 | 冰蝎流量免杀

  • 0x01 前言冰蝎4.0发布以后,可以自定义传输协议了,也就是我们能对流量进行改造,本文依据rebeyond大佬文章对冰蝎流量进行改造,记录一下踩过的坑。https://mp.weixin.qq.com/s/EwY
  • 干货 | 冰蝎各版本工具分析与魔改思路

  • 0x00 V2版本1. 项目github项目:https://github.com/rebeyond/Behinder/releases/V2 源码:https://github.com/hktalent/afterLoader2. 流量分析执行流程图:首次连接一句话服务
  • HW红队攻防、渗透痕迹隐藏的神器(附下载)

  • 通过在系统日志和文件系统时间戳上留下零痕迹,在 Linux 漏洞利用/渗透测试期间覆盖您的踪迹。moonwalk是一个 400 KB 的单二进制可执行文件,可以在渗透测试Unix机器时清除您的
  • 讲一讲数据安全,如何有效预防脱库

  • 今天讲一讲数据的安全问题,我们本篇不从DBA、网络架构层面来讲述数据安全,这部分有很专业的架构和云上产品来解决,本篇重点从开发人员角度讲述如何避免数据安全的漏洞。我相信