OverTheWire Natas, découvrir la securité web #
Après avoir terminé le parcours Bandit, j’ai décidé de m’attaquer à Natas. La promesse de ce parcours est d’apprendre les bases de la sécurité-web, côté serveur. Cela risque d’être plus compliqué pour moi car j’ai beaucoup moins de connaissances sur ce sujet.
Pour les mêmes raisons que sur Bandit je ne divulguerais pas les mots de passe des niveaux.
C’est parti !!!
Niveau 0 #
Objectif #
Récupérer le mot de passe du niveau suivant.
Réflexion #
Une fois connecté à la page web, on nous indique que le mot de passe peut être trouvé sur cette page. Évidemment il n’est pas directement visible, il doit donc se trouver dans le code source de la page.
Solution #
Sur un navigateur, pour accéder au code source d’une page web, il suffit de faire clic droit > voir le code source. Et comme promis le mot de passe est présent sous forme de commentaire dans le code.
A retenir #
Une page web est composée de code, il est possible à toute personne d’afficher son contenu.
Niveau 0 –> 1 #
Objectif #
Récupérer le contenu d’une page grâce à la commande curl
Réflexion #
Même objectif que le niveau précédent sauf qu’il nous est impossible d’effectuer un clic droit pour inspecter la page. On va donc utiliser la commande curl, qui permet de récupérer les données d’un serveur en utilisant une URL.
Solution #
On récupère le mot de passe présent dans le code de la page web avec la commande suivante :
curl --anyauth --user natas1:password http://natas1.natas.labs.overthewire.orgA retenir #
La commande curl permet d’envoyer ou de recevoir des données via une URL.
Niveau 1 –> 2 #
Objectif #
Naviguer dans les dossiers et fichiers d’un serveur web
Réflexion #
Il est indiqué que le mot de passe ne se trouve pas sur cette page, il est donc sur une autre. Il va falloir trouver sa localisation.
Solution #
En inspectant la page on peut voir qu’elle contient l’image pixel.png. En l’ouvrant dans une autre page web, on peut en lisant son chemin qu’elle est stockée dans le dossier files En se rendant dans ce répertoire on découvre un fichier user.txt contenant le mot de passe.
A retenir #
Il est possible de se déplacer dans les dossiers d’un serveur web via un navigateur, à condition de connaître les chemins et que les politiques de sécurité nous y autorisent.
Niveau 2 –> 3 #
Objectif #
Découvrir les éléments accessibles sur le serveur, et comprendre le protocole d’exclusion de robot.
Réflexion #
Cette fois, aucun leak n’est présent dans le code HTML. J’utilise l’outil dirb, qui permet de faire un scan complet du serveur, dans le but de détecter des fichiers / dossiers sensibles non protégés.
Le scan trouve un fichier nommé robot.txt accessible. Après une petite recherche je comprends que c’est un fichier de configuration pour le protocole d’exclusion des robots. C’est une convention qui vise à empêcher les web crawlers d’accéder à tout ou une partie d’un site web.
Solution #
- Découverte des répertoires/fichiers du serveur
dirb http://natas3.natas.labs.overthewire.org/ -u natas3:password
+ http://natas3.natas.labs.overthewire.org/robots.txt (CODE:200|SIZE:33) - Un dossier secret existe
curl --anyauth --user natas3:password http://natas3.natas.labs.overthewire.org/robots.txt
User-agent: *
Disallow: /s3cr3t/- on trouve le mot de passe dans un fichier présent dans le dossier secret.
curl --anyauth --user natas3:password http://natas3.natas.labs.overthewire.org/s3cr3t/users.txt
natas4:passwordA retenir #
- Il est possible de découvrir par brute force tous les répertoires / fichiers d’un serveur web
- le fichier robot.txt permet d’empêcher les web crawlerss d’accéder à tout ou une partie d’un site web
Niveau 3 –> 4 #
Objectif #
En-tête Referer (Referer header)
Réflexion #
L’accès au mot de passe ne peut se faire qu’à partir de Natas5. Pour ce faire nous allons renvoyer la requête GET en modifiant l’en-tête Referer. l’en-tête de requête HTTP Referer contient l’adresse absolue ou partielle à partir de laquelle une ressource a été demandée.
Solution #
J’utilise ZAP pour modifier la requête GET et en y ajoutant la ligne suivante :
Referer: http://natas5.natas.labs.overthewire.org/En réponse à cette requête on obtient bien le mot de passe pour le niveau suivant
A retenir #
- l’en-tête de requête HTTP
Referercontient l’adresse absolue ou partielle à partir de laquelle une ressource a été demandée. - Comme démontré ici cet en-tête peut poser des problèmes de sécurité.
Niveau 4 –> 5 #
Objectif #
Introduction aux cookies
Réflexion #
Un message nous indique qu’il faut être connecté pour accéder au contenu de la page. En étudiant les requêtes on découvre que le cookie loggedin existe. Les cookies permettent de stocker des données et de se souvenir d’informations. Dans notre cas le cookie stocke l’état connecté ou déconnecté
Solution #
Ici il suffit de changer la valeur de loggedin sur 1 et de renvoyer la requête. Et on obtient le mot de passe suivant
A retenir #
- Les cookies permettent de stocker des données persistantes
- Si ils ne sont pas protégés ils peuvent être modifiés par l’utilisateur et poser des problèmes de sécurité
0RoJwHdSKWFTYR5WuiAewauSuNaBXned
Niveau 5 –> 6 #
Notions #
- PHP
- Fichier include
Réflexion #
En arrivant sur la pge on nous demande un mot de passe. En inspectant le code source, on observe que le code php appel le fichier “/includes/sercret.inc” via la balise include. Le secret dans ce fichier sera ensuite comparé à l’input de l’utilisateur.
Solution #
On récupère le contenu du fichiers secret.inc
curl --anyauth --user natas6:0RoJwHdSKWFTYR5WuiAewauSuNaBXned http://natas6.natas.labs.overthewire.org/includes/secret.inc
<?
$secret = "FOEIUWGHFEEUHOFUOIU";
?>On peut maintenant réuperer le mot de passe du niveau suivant
A retenir #
- Du PHP peut être integrer à une page html pour y implémenter des scripts
- La balise includes permet d’inclure et d’éxécuter un fichier spécifié en argument
bmg8SvU1LizuWjx3y7xkNERkHxGre0GS