Natas Web. Passage de la plateforme CTF visant à exploiter les vulnérabilités du Web. Partie 4

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.

Parties passées: partie 1 , partie 2 et partie 3 .

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 22


Après avoir analysé le code source, il devient clair que nous verrons le mot de passe si le paramètre revelio GET n'est pas vide.

image

Mais à la première vérification, si la session d'administration n'est pas installée, nous sommes redirigés vers cette page sans paramètres.

image

Il vous suffit d'utiliser l'agent Web et non un navigateur, par exemple curl.

image

image

Nous enlevons le mot de passe.

niveau 23


Nous analysons le code source. La fonction strstr (s1, s2) renvoie une sous-chaîne de s1 qui commence par s2. Php lance également automatiquement les types. Autrement dit, lors de la comparaison, cela conduira la chaîne à un nombre et supprimera les caractères supplémentaires.

image

Le string "11iloveyou" conviendra à notre condition. Au premier contrôle, il renvoie "iloveyou", c'est-à-dire True. Au deuxième contrôle, 11> 10, c'est-à-dire vrai.

image

niveau 24


Ce niveau contient également une erreur logique. La condition est quand même vraie si strcmp retourne FALSE. Mais strcmp retournera FALSE même en cas d'erreur.

image

Bien que php convertisse automatiquement les types, il n'est pas capable de convertir un tableau en chaîne. Pour ce faire, ouvrez le code source de la page et changez le nom du champ de "passwd" en "passwd []".

image

Nous envoyons n'importe quelle ligne.

image

Nous enlevons le mot de passe.

niveau 25


Lors de l'analyse du code source, la plus intéressante est la fonction logRequest (), qui traite les champs que l'utilisateur peut contrôler. Il s'agit de l'en-tête HTTP de User_Agent et du cookie session_id.

image

image

image

Il convient de considérer que toutes les séquences «../» sont supprimées de la chaîne, mais cela peut être fait par: «... /. /» => «../».

Idée de solution: Étant donné que le chemin d'enregistrement des journaux dépend de session_id, que nous pouvons contrôler, et en choisissant la langue d'affichage, le chemin sur le serveur est sélectionné - en raison de LFI, nous pouvons lire le fichier journal.

image

image

image

image

Il reste maintenant à écrire le mot de passe de / etc / natas_webpass / natas26 dans notre fichier journal. Puisque notre Web-Agent est d'abord enregistré puis sorti du fichier, nous ajouterons le code php à ce champ.

image

image

Nous obtenons le mot de passe.

niveau 26


Dans cet exemple, il existe une vulnérabilité très grave - la désérialisation non filtrée des objets. La fonction unserialize () prend une variable sérialisée et la reconvertit en objet PHP.

image

La valeur convertie est retournée, qui peut être un entier, un flottant, une chaîne, un tableau ou un objet. C'est-à-dire Vous pouvez exécuter n'importe quel code. La classe Logger, une fois créée, écrit certaines informations dans le fichier.

image

L'idée est la suivante:

  1. Réécrivez la classe Logger, où au lieu de l'un des messages un code php sera contenu qui générera un mot de passe.
  2. Encodez-le en Base64.
  3. Coller dans le cookie.
  4. Accédez au fichier journal.
  5. Emportez le mot de passe.

<?php class Logger{ private $logFile; private $initMsg; private $exitMsg; function __construct($file){ $this->initMsg="<? passthru('cat /etc/natas_webpass/natas27'); ?>"; $this->exitMsg="<? passthru('cat /etc/natas_webpass/natas27'); ?>"; $this->logFile = "img/phpobjinj.php"; } function log($msg){ ; } function __destruct(){ ; } } $obj = new Logger("obj"); echo urlencode(base64_encode(serialize($obj))); ?> 

image

image

image

Nous obtenons le mot de passe.

niveau 27


Ce service fournit des données utilisateur. Mais si l'utilisateur n'existe pas, il le crée avec le nom d'utilisateur et le mot de passe spécifiés.

image

Le problème est qu'après avoir créé l'utilisateur, le service ne vérifie pas son mot de passe à la connexion. Dans le même temps, seuls les 64 premiers caractères du login et du mot de passe après filtrage tombent dans la base de données. Non seulement cela, nous connaissons le nom d'utilisateur: natas28.

image

Créez un utilisateur avec un mot de passe vide et un nom: "natas28_60-espaces_ n'importe quel caractère". (Ainsi, lors de la vérification, il n'y aura pas de correspondance avec l'utilisateur natas28, mais lors de la création, il sera filtré et ajouté à la base de données. Autrement dit, le mot de passe ne sera pas vérifié lors du prochain appel).

image

image

Nous allons sous le nom natas28 et un mot de passe vide. Nous obtenons les données utilisateur natas28.

À suivre. Vous pouvez nous rejoindre sur Telegram .

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


All Articles