Comment les pentesters sont-ils cuits? Test d'entrée pour les stagiaires en sécurité numérique

Summer of Hack 2019 en sécurité numérique bat déjà son plein, ce qui signifie qu'il est temps de dire comment nous avons recruté des personnes.



Sous la coupe, du matériel volumineux et intéressant sur la façon dont nous sélectionnons les jeunes spécialistes pour notre stage «Summer of Hack 2019», et plus particuliÚrement pour le département d'audit de sécurité.

Considérez ce que, à notre avis, un pentester devrait savoir pour réussir son travail.

Analysons un certain nombre de tùches difficiles que nous avons torturées les gars, y compris au nom de l'un d'eux.

Peut-ĂȘtre la partie la plus intĂ©ressante de la sĂ©lection pour un stage dans le dĂ©partement d'audit de sĂ©curitĂ© Ă©tait notre profil. Chaque annĂ©e, nous nous rĂ©unissons dans tout le dĂ©partement et discutons des compĂ©tences qui, Ă  notre avis, sont recherchĂ©es pour un spĂ©cialiste moderne dans le domaine de la sĂ©curitĂ© pratique, rappelons les tĂąches les plus intĂ©ressantes qui ont dĂ» ĂȘtre rĂ©solues cette annĂ©e et rĂ©digeons des domaines de connaissances sans lesquels il est difficile d'imaginer un auditeur rĂ©ussi. Lorsque toutes les blagues sont plaisantĂ©es et que les histoires sont racontĂ©es, le rĂ©sultat final reste un ensemble d'idĂ©es.

Cette année, nous avons été guidés par les exigences suivantes:

  • Connaissance de base des applications Web de l'appareil et des attaques contre celles-ci;
  • Connaissance de base des mĂ©canismes de protection et de contrĂŽle d'accĂšs basĂ©s sur un navigateur (oui, les mĂȘmes SOP et CORS, sans eux);
  • CompĂ©tences de base en lecture de code et capacitĂ© de voir la logique derriĂšre;
  • Comprendre le fonctionnement des rĂ©seaux informatiques et leur routage;
  • ExpĂ©rience avec des systĂšmes de type Linux;
  • La capacitĂ© de ne pas avoir peur d'une technologie inconnue. La capacitĂ© de google et de systĂ©matiser les informations reçues;
  • Et une pincĂ©e d'Android (mais pas nĂ©cessaire, mais c'est notre petit caprice).

AprĂšs l'Ă©laboration des questions. En partie, nous les avons empruntĂ©es aux questions que nous avons posĂ©es lors des entretiens, mais plus de la moitiĂ© ont Ă©tĂ© spĂ©cialement prĂ©parĂ©es pour ce questionnaire. Nos experts ont passĂ© leur temps personnel Ă  prĂ©parer des dĂ©charges de trafic, Ă  discuter de la maniĂšre de mieux formuler la question et des vulnĂ©rabilitĂ©s «trop spĂ©cifiques, pourquoi tourmenter les stagiaires». Pour un tel zĂšle, on ne peut s'empĂȘcher d'enlever notre chapeau (blanc, bien sĂ»r).

L'analyse de chaque question se compose de deux parties. La premiÚre partie est la réponse de l'un de nos stagiaires - Danila Korgik_0 Leontyeva (il est l'auteur de la publication), et la seconde est les commentaires des spécialistes qui empilaient le questionnaire.



Bonjour, Habr!

Tout d'abord, une petite digression lyrique.
Plus précisément, «Comment ai-je découvert Summ3r 0f h4ck».
J'ai entendu parler de l'annonce du stage par un discours de Denis Rybin et Ilya Bulatov lors de la conférence RuCTF2019.

Littéralement aprÚs 4 jours, un article a été publié sur habr à propos de l'ouverture d'un stage.

Et le soir du mĂȘme jour, j'ai ouvert la tĂąche, dans le dĂ©partement d'audit de sĂ©curitĂ©, et je me suis plongĂ© dans le travail. Aujourd'hui, je partagerai avec le lecteur quelles difficultĂ©s j'ai eu Ă  affronter et quelle option de solution je pourrais proposer.



N ° 1. Code source php


Examinez le code. Décrivez les défauts que vous voyez et comment vous les corrigeriez.



Analyse du travail
4Ăšme ligne - utilisez le hachage md5.
ProblĂšme - md5 peut ĂȘtre brutalisĂ© en un temps raisonnable en utilisant hashcat.
Comment réparer?

Utilisation d'algorithmes de hachage plus "gourmands en ressources".
Dans ce cas, vous devez refuser complĂštement les cookies utilisateur et lier toute la logique Ă  phpsession.

5Ăšme ligne - PostgreSQL-injections.
Comment réparer?
Utilisation de la déclaration préparée.
Implémentation d'une instruction préparée pour vérifier la connexion

$query = "SELECT username FROM login WHERE username=?"; $stmt = $conn->prepare($query); $stmt->execute(array($username)); $username = $stmt->fetchColumn(); if($username == FALSE) { die(" !"); } 

11 ligne - un certain nombre de décisions infructueuses.

  1. Durée de vie trop longue. Une année entiÚre, c'est beaucoup. Si le cookie est piraté avec succÚs, un accÚs long au compte utilisateur par l'attaquant est possible.
  2. Drapeau httpOnly manquant. S'il est défini sur TRUE, les cookies ne seront accessibles que via le protocole HTTP. Autrement dit, les cookies dans ce cas ne seront pas disponibles pour les langages de script comme JavaScript.
  3. Aucun hachage de cookie.
  4. Absence de dĂ©finition du drapeau sĂ©curisĂ©. L'indicateur sĂ©curisĂ© indique qu'un cookie doit ĂȘtre envoyĂ© par le client via une connexion HTTPS sĂ©curisĂ©e. S'il est dĂ©fini sur TRUE, le cookie du client sera envoyĂ© au serveur uniquement si une connexion sĂ©curisĂ©e est Ă©tablie.

Comment réparer?
Par défaut, en php, la durée de vie de la session n'est que de 24 minutes, implémentons cela.
Définissez l'indicateur sécurisé, httpOnly.

Dans ce cas, vous devez refuser l'étrange cookie utilisateur et lier toute la logique à phpsession.

18 lignes - XSS (English Cross-Site Scripting - "intersite scripting").
Comment réparer? Convertissez tous les caractÚres possibles en entités HTML correspondantes.

 $query = htmlentities($query, ENT_QUOTES, "UTF-8"); 

Nous indiquerons explicitement l'encodage afin d'éviter sa substitution par UTF-7.

 header("Content-Type: text/html; charset=utf-8"); 

Ligne 20 - défauts du systÚme d'authentification et de stockage de session.

ProblÚme - si vous définissez l'ID utilisateur encodé en base64 dans l'utilisateur cookie, vous pouvez vous connecter à son compte!

Comment réparer? Lors de l'autorisation de l'utilisateur, nous enregistrons la session dans la base de données et lors de l'installation de la session, nous vérifions sa présence dans la base de données.

  $query = "SELECT sessions FROM login WHERE sessions=?"; $stmt = $conn->prepare($query); $stmt->execute(array($_COOKIE["user"])); $session = $stmt->fetchColumn(); if($session == TRUE) { do_login($_COOKIE["user"]); } 


Commentaire d'expert D:
La premiÚre question avec laquelle le questionnaire a rencontré les futurs stagiaires concerne les principales vulnérabilités du Web. La seule difficulté ici est la nécessité de les voir dans le code source en PHP. Cependant, personne n'a défini la tùche de «cacher les bogues».

Voici une liste des vulnĂ©rabilitĂ©s qui peuvent ĂȘtre dĂ©tectĂ©es dans cette liste par ordre de frĂ©quence de leur dĂ©tection:

Le hachage de mot de passe utilisant l'algorithme MD5 a Ă©tĂ© remarquĂ© mĂȘme par des candidats Ă©loignĂ©s du Web. Cependant, il y avait aussi des nuances intĂ©ressantes, par exemple, de nombreux candidats ont utilisĂ© des termes trĂšs incorrects, essayant de dĂ©crire les problĂšmes dans leurs propres mots. Les «vulnĂ©rabilitĂ©s des algorithmes», les «fonctions Ă  sens unique», «l'existence de collisions» et d'autres virages Ă©tranges sont entrĂ©s en bataille, aprĂšs un examen plus approfondi, ils s'avĂšrent n'ĂȘtre rien de plus qu'un ensemble de grands mots qui ne rĂ©vĂšlent pas l'essence. Bien sĂ»r, nous sommes allĂ©s ici Ă  une rĂ©union et nous n'avons pas trouvĂ© Ă  redire Ă  ces personnes qui se prĂ©parent Ă  se lancer sur la voie de l'apprentissage de la sagesse de la sĂ©curitĂ© de l'information. Pour obtenir une "compensation", il suffit de mentionner la menace, en cas de compromission de la base de donnĂ©es, les hachages md5 peuvent ĂȘtre triĂ©s par un attaquant dans un dĂ©lai acceptable et des mots de passe (ou des chaĂźnes Ă©quivalentes) peuvent ĂȘtre obtenus en texte clair. Et, bien sĂ»r, beaucoup ont mentionnĂ© le manque de sel et de force brute basĂ© sur l'utilisation de tables arc-en-ciel. Nous avons Ă©galement perçu ces commentaires de façon positive, surtout si le rĂ©pondant a expliquĂ© pourquoi il s'agissait d'une menace.

Injection SQL potentielle. Il est difficile d'ajouter quelque chose; lors de l'appel à la base de données, la saisie de l'identifiant et du mot de passe par l'utilisateur est directement concaténée avec la demande. S'il est peu probable que vous puissiez manipuler la valeur du mot de passe à ce stade (un hachage en est extrait), l'introduction d'une injection dans le nom d'utilisateur ne sera pas difficile pour un attaquant potentiel.

Sortie d'informations de dĂ©bogage inutiles conduisant Ă  une attaque XSS. En lisant attentivement la liste, on pourrait prĂȘter attention Ă  l'appel d'Ă©cho, qui affiche la demande gĂ©nĂ©rĂ©e Ă  la base de donnĂ©es dans les commentaires HTML sur la page. Bien entendu, une telle conclusion d'informations supplĂ©mentaires sur la page est complĂštement facultative et, trĂšs probablement, simplement oubliĂ©e par le dĂ©veloppeur aprĂšs avoir effectuĂ© les tests. Ces informations supplĂ©mentaires sont trĂšs bĂ©nĂ©fiques pour l'attaquant et permettent une bien meilleure comprĂ©hension du fonctionnement de l'application. Cependant, malheureusement, ce n'est que la moitiĂ© du problĂšme. Le fait est qu'un attaquant peut manipuler le contenu de la variable de requĂȘte, et que son contenu ne peut pas ĂȘtre filtrĂ© ou Ă©chappĂ© avant d'ĂȘtre affichĂ© Ă  l'utilisateur - il existe une attaque XSS potentielle. Cependant, son exploitation peut s'avĂ©rer ĂȘtre encore un casse-tĂȘte en raison de la fonction strtoupper mal situĂ©e. Le vecteur injectĂ© par l'attaquant sera en majuscule, et si ce n'est pas un problĂšme pour les balises HTML, Javascript est trĂšs offensĂ© par un tel appel. Cela peut ĂȘtre facilement vĂ©rifiĂ© Ă  l'aide de la console du navigateur.



Eh bien, au moins, apparemment, l'attaquant devra se tourner vers les soi-disant «attaques sans script» ou des techniques sophistiquées pour contourner le filtrage (dans ce cas, JSFUCK le ferait), donc le fait d'un risque de sécurité n'annule pas cela.

Une erreur dans la logique du mécanisme de gestion de session était la partie la plus intéressante de la tùche. Sa découverte a nécessité non seulement de lire la source ligne par ligne, mais aussi de comprendre la logique de l'ensemble du listing. On pouvait sentir que quelque chose n'allait pas en remarquant la configuration d'un cookie contenant l'ID utilisateur encodé en base64 dans le bloc Remember-me. Une analyse plus approfondie de la logique de ce mécanisme nous amÚne à la réflexion: «Il s'avÚre qu'un attaquant qui connaßt ou passe par l'identifiant peut se connecter à n'importe quel compte sans entrer de nom d'utilisateur et de mot de passe?!». Oui, en effet, un attaquant peut générer indépendamment un utilisateur de cookie de son cÎté et lui attribuer toute valeur d'ID codée par base64. L'envoi d'une demande avec un tel cookie sans nom d'utilisateur et mot de passe déclencherait la fonction do_login et se connecterait au compte de quelqu'un d'autre.

La mention de ces 4 vulnérabilités dans la réponse des candidats a directement influencé leurs scores.

Cependant, beaucoup dĂ©pendait de la qualitĂ© de la rĂ©ponse. Mentionner des moyens de rectifier la situation, des commentaires sur des facteurs supplĂ©mentaires affectant la faisabilitĂ© d'une attaque, l'utilisation des bons termes et la capacitĂ© de structurer vos pensĂ©es, des commentaires sur des faiblesses supplĂ©mentaires ou des menaces potentielles - tout cela nous a rĂ©chauffĂ© le cƓur et conduit Ă  une augmentation de la note finale.




N ° 2. Jwt


Lors de la recherche d'une application Web, vous avez constaté que l'application utilise un jeton JWT comme autorisation.

Quels problÚmes de sécurité voyez-vous, quel genre de contrÎles feriez-vous?

Jeton JWT:

 eyJhbGciOiJOb25lIiwidHlwIjoiSldUIn0.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6InNla2EiL CJpYXQiOjE1MTYyMzkwMjIsInJvbGUiOiJub2JvZHkiLCJpc0FkbWluIjoiRmFsc2UiLCJwYX Nzd29yZCI6IjFkMDBjYUgifQ.F7Y1mCAmg5-QFok-rkpLdwe8prCyiKsCyJ-3Z5f7luI 

Analyse du travail
Jetons Web Dan JSON (JWT).
Sa structure -> [base64url (HEADER)]. [Base64url (PAYLOAD)]. [Base64url (SIGNATURE)]
[base64url (HEADER)] = eyJhbGciOiJOb25lIiwidHlwIjoiSldUIn0
décodage base64url -> {"alg": "None", "typ": "JWT"}
On peut noter immĂ©diatement que l'algorithme de signature («alg»: «None») de la signature n'est pas utilisĂ©. Certaines bibliothĂšques JWT ne prennent pas en charge l'algorithme «aucun», c'est-Ă -dire l'algorithme de signature. Lorsque l'en-tĂȘte alg est «aucun», le cĂŽtĂ© serveur n'effectuera pas de vĂ©rification de signature.
Autrement dit, vous pouvez écrire n'importe quelle charge utile dans base64url, et sa signature ne sera pas vérifiée.
Ce qui nous permet de créer un utilisateur avec des droits d'administrateur.

De plus, le fait que la partie charge utile n'utilise pas des en-tĂȘtes tels qu'aud (dĂ©finit les destinataires auxquels le jeton JWT est destinĂ©) et exp (la durĂ©e de vie du jeton) simplifie nos vies.

Charge utile estimée
eyJhbGciOiJOb25lIiwidHlwIjoiSldUIn0.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6ImhhY2siLCJpYXQiOjE1MTYyMzkwMjIsInJvbGUiOiJub2JvZHkiLCJpc0FkbWluIjoiVHJ1ZSIsInBhc3N3b3JkIjoiaGFjayJ9

base64url décoder la charge utile -> {"sub": "1234567890", "name": "hack", "iat": 1516239022, "role": "nobody", "isAdmin": "True", "password": "hack »}

Commentaire d'expert D:
Dans le travail de l'auditeur doivent souvent faire face aux nouvelles technologies, et la capacité de les comprendre est trÚs importante. En incluant cette question dans le questionnaire, nous avons supposé que la plupart des candidats avaient à peine entendu parler de la technologie des jetons JWT, à l'exception du nom. Par conséquent, cette question, tout d'abord, visait la capacité de rechercher et d'analyser des informations provenant de sources publiques. En conséquence, une personne qui a raté l'émission de Google à la demande de «JWT» et «vulnérabilité jwt» pourrait tirer les conclusions suivantes:

1. Ce jeton n'a pas d'algorithme de signature, donc un attaquant est en mesure de modifier tous les champs à l'intérieur du jeton, ce qui n'est pas supposé par le concept de jetons JWT.

2. Les champs à l'intérieur du jeton contiennent le mot de passe de l'utilisateur en texte clair, le stockage de ces informations dans le jeton est, au minimum, une mauvaise pratique. Dans la plupart des cas, vous pouvez refuser une telle décision et ainsi augmenter votre niveau de sécurité.

3. En se souvenant de l'absence de signature et de notre capacité à modifier les champs à l'intérieur du jeton, il est logique de supposer que la modification de la valeur de isAdmin peut augmenter nos privilÚges en privilÚges d'administrateur.

4. Une autre idĂ©e intĂ©ressante que peu de personnes ont mentionnĂ©e dans leur rĂ©ponse concerne le fait mĂȘme de la possibilitĂ© de transfĂ©rer les entrĂ©es des utilisateurs dans les champs d'un jeton JWT. Dans une situation normale, un attaquant ne peut en aucune façon influencer les donnĂ©es du jeton, ce qui signifie que les dĂ©veloppeurs peuvent souvent nĂ©gliger l'introduction de vĂ©rifications supplĂ©mentaires dans le code des gestionnaires. Cela demande une idĂ©e simple: mais essayons de mener des attaques classiques non pas Ă  travers les paramĂštres GET / POST, mais Ă  travers les champs de jetons. Cela peut donner un bon rĂ©sultat inattendu. Une telle approche crĂ©ative avec la justification correcte de nos actions a Ă©tĂ© trĂšs apprĂ©ciĂ©e par nous dans l'Ă©valuation de cette question et d'autres.

De nombreux candidats dans leurs rĂ©ponses ont organisĂ© une brĂšve explication de la façon dont le jeton JWT est structurĂ© et oĂč il est utilisĂ©, c'Ă©tait intĂ©ressant pour nous de lire, et pourtant, tout d'abord, nous avons Ă©valuĂ© les aspects de la rĂ©ponse concernant la sĂ©curitĂ©.




Numéro 3. CORS / CSRF / IDOR / ???



Dans l'application Web, le mot de passe utilisateur est modifié à l'aide de la demande suivante (voir option 1). Quelles menaces de sécurité potentielles voyez-vous? Quels contrÎles effectueriez-vous? La situation changera-t-elle dans le cas du comportement suivant (voir Option 2)? Expliquez votre réponse.

Analyse du travail
Option 1
"Quelles menaces de sécurité potentielles voyez-vous?"

1) Absence de contrĂŽle d'accĂšs.
Si le numĂ©ro d'utilisateur-a auquel la demande de changement de mot de passe est effectuĂ©e n'est pas vĂ©rifiĂ©, le mot de passe peut ĂȘtre modifiĂ© pour tout utilisateur enregistrĂ© dans le systĂšme.
Comment réparer? - Correspondance de JSESSION à partir de la base de données et de l'id-shnik demandé.

2) La capacité de mener des attaques CSRF
Nous attirons un utilisateur autorisé vers un hÎte que nous contrÎlons et, aprÚs avoir fait une demande, vers example.com au nom de la victime, pour changer le mot de passe.
Comment réparer? - Ajout d'un jeton CSRF.

Option 2
"Quelles menaces de sécurité potentielles voyez-vous?"
Une faille dans la politique CORS.
Il est recommandĂ© de mettre en liste blanche l'en-tĂȘte Access-Control-Allow-Origin.

Comment réparer? -

1) Modification du fichier .htaccess

 <ifmodule mod_headers.c> Header always set Access-Control-Allow-Origin: "https://whitelist.domain.ru" Header always set Access-Control-Allow-Methods "PUT" </ifmodule> 

2) PHP

 <?php header('Access-Control-Allow-Origin: “https://whitelist.domain.ru”); header('Access-Control-Allow-Methods: PUT'); ?> 

"La situation changera-t-elle avec le comportement suivant?"

Oui Étant donnĂ© que dans le deuxiĂšme cas, une demande PUT est utilisĂ©e, ce qui est important, car l'utilisation d'une demande PUT rend la demande CORS «difficile», ce qui Ă  son tour nous prive complĂštement de la possibilitĂ© de mener une attaque CSRF + l'absence d'un en-tĂȘte tel que Access-Control-Allow-Credentials: true nous prive la possibilitĂ© d'envoyer en place avec d'autres en-tĂȘtes http et cookies utilisateur.

Commentaire d'expert I:
ConsidĂ©rons, dans l'ordre, quels sont les principaux problĂšmes visibles sur les requĂȘtes donnĂ©es:

1) En effet, l’identifiant numĂ©rique de l’utilisateur «10012» Ă©tant observĂ© dans la requĂȘte, la premiĂšre Ă©tape consiste Ă  vĂ©rifier s’il est possible de changer le mot de passe d’un autre utilisateur? Puis-je spĂ©cifier suffisamment l' identifiant de quelqu'un d'autre ?
Les vulnérabilités de la classe IDOR sont assez faciles à exploiter et présentent souvent une criticité élevée.

2) La demande de changement de mot de passe se produit par la méthode POST, le jeton CSRF n'est pas respecté et le type de contenu est «texte / simple». Il est possible de truquer une telle demande.

Par consĂ©quent, pour changer le mot de passe de la victime, il suffit Ă  l’attaquant de le convaincre de simplement visiter le lien «malveillant».

3) Dans les en-tĂȘtes de rĂ©ponse, le serveur rĂ©vĂšle la version du logiciel utilisĂ© . Cela peut ĂȘtre appelĂ© une vulnĂ©rabilitĂ© Ă  la longue, mais il est prĂ©fĂ©rable de masquer de telles banniĂšres - les attaquants peuvent facilement y trouver des exploits connus d'un jour, plus la valeur du logiciel utilisĂ© simplifie considĂ©rablement la planification d'autres attaques.

4) Nous serions trÚs heureux de voir la phrase "Que se passera-t-il si nous changeons le format de données de JSON en XML ?"

Le fait est que les cadres modernes sont intelligents, omnivores et peuvent traiter des données dans différents formats. Et lors de l'analyse de XML, une vulnérabilité XXE dangereuse est souvent autorisée. Avec son aide, l'intrus peut "aller" sur le réseau interne, lire les fichiers de configuration du serveur et parfois exécuter RCE.

5) Je voulais également voir une remarque comme «Pourquoi la connaissance de l'ancien n'est-elle pas vérifiée lors du changement de mot de passe?»

Quant Ă  la «variante n ° 2», elle contient un «piĂšge» - les en-tĂȘtes CORS sont utilisĂ©s ici et le type de contenu de la demande est dĂ©jĂ  dĂ©fini sur «application / json».

L'erreur que la grande majorité des candidats a faite est la réponse du formulaire "-C'est l'astérisque dans Allow-Origin, ce qui signifie que vous pouvez envoyer des demandes depuis n'importe quel site!"

Non, tu ne peux pas. Tout d'abord, l'en-tĂȘte Allow-Credentials: True est manquant, ce qui signifie que le navigateur doit exĂ©cuter la demande «avec des cookies», de sorte que la demande serait anonyme, sans session. Et deuxiĂšmement, mĂȘme si un tel en-tĂȘte Ă©tait prĂ©sent, le navigateur interdirait toujours d'envoyer des cookies - simplement Ă  cause de l'astĂ©risque. Leur combinaison est interdite et le navigateur est ignorĂ©.



Numéro 4. Vidage réseau


Imaginez que vous ĂȘtes entrĂ© dans le rĂ©seau interne de l'entreprise et avez interceptĂ© le trafic dont le vidage est joint ci-dessous. DĂ©crivez quelles attaques vous tenteriez de mener et avec quels outils?

Dump: yadi.sk/d/qkLcfwSCzdxcwg

Analyse du travail
1) Usurpation de LLMNR <
Un attaquant du sous-réseau local peut écouter et répondre aux messages diffusés, affirmant que le nom d'hÎte demandé est sa propre adresse IP.
Cela conduit au fait que l'ordinateur client demandeur est connecté à l'ordinateur de l'attaquant et, selon le protocole, peut tenter de s'authentifier.

Les utilitaires utilisés sont Intercepter-NG, un projet sur githab VindicateTool.

2) Abus HSRP.
ProblĂ©matique - lorsque le paramĂštre «preempt» est dĂ©fini sur 1, l'attaquant a la possibilitĂ© «d'Ă©vincer» les autres routeurs, en raison de la prioritĂ© plus Ă©levĂ©e. AprĂšs avoir envoyĂ© HSRP Ă  la multidiffusion, le routeur contrĂŽlĂ© devient le routeur principal (routeur actif) du rĂ©seau et tout le trafic y passera. En fait, nous sommes arrivĂ©s Ă  la mise en Ɠuvre d'attaques mitm.

Pour ce vecteur d'attaque, nous devons connaĂźtre le groupe et le mot de passe.
A partir du vidage de trafic qui nous est donné, nous reconnaissons le groupe (c'est-à-dire 3) et le mot de passe. Le mot de passe dans notre cas est par défaut - Cisco.

Les utilitaires utilisés sont yersinia, scapy.


Commentaire de l'expert X:
L'objectif de la question était de déterminer la familiarité du stagiaire avec les techniques modernes (et pas si) pour mener des attaques MitM. Examinons les scénarios potentiels basés sur un vidage de trafic existant:

1) Usurpation ARP
L'usurpation ARP est le moyen le plus ancien et le plus simple de mettre en Ɠuvre des attaques MitM. Elle consiste Ă  envoyer une requĂȘte ARP gratuite Ă  l'hĂŽte A.

L'adresse IP de l'hÎte B est l'adresse IP et notre adresse MAC est l'adresse MAC. Une telle demande vous permet de modifier la table ARP sur l'hÎte A, le forçant à envoyer des demandes à notre appareil lorsque vous essayez de contacter l'hÎte B. L'hÎte B est généralement la passerelle par défaut.

Outils recommandés: bettercap, arpspoof

2) Usurpation LLMNR, NBNS
Link-Local Multicast Name Resolution et NetBIOS Name Service sont les protocoles utilisés pour résoudre les noms d'hÎtes sur le réseau local. Contrairement au protocole DNS, il n'y a pas de serveur dédié qui stocke toutes les informations; à la place, la demande est diffusée à tous les hÎtes du réseau, si le nom d'hÎte dans la demande correspond au nom d'hÎte du périphérique, il enverra une réponse.

Comme cela a Ă©tĂ© correctement notĂ© dans la rĂ©ponse, l'attaquant peut rĂ©pondre Ă  de telles demandes en envoyant son adresse IP dans la rĂ©ponse, ce qui conduira Ă  l'avenir Ă  ce que la victime contacte l'appareil de l'attaquant, au lieu de l'appareil dont le nom d'hĂŽte est apparu dans la demande. De plus, un attaquant peut demander l'authentification NTLM Ă  la victime, ce qui oblige le pĂ©riphĂ©rique victime Ă  envoyer un hachage NTLM, qui peut ensuite ĂȘtre utilisĂ© pour la force brute.

Outils recommandés: Répondeur

3) Usurpation de WPAD
L'usurpation WPAD peut ĂȘtre attribuĂ©e Ă  un cas spĂ©cial d'usurpation LLMNR et NBNS. Le protocole Web Proxy Auto Discovery est utilisĂ© pour configurer automatiquement un serveur proxy HTTP.

Le périphérique envoie une demande LLMNR / NBNS avec le nom d'hÎte wpad, reçoit l'adresse IP correspondante et essaie d'accéder au fichier wpad.dat via HTTP, qui stocke des informations sur les paramÚtres du proxy.

En conséquence, l'attaquant peut effectuer une usurpation LLMNR / NBNS et fournir à la victime son fichier wpad.dat, par conséquent, tout le trafic HTTP et HTTPS passera par l'attaquant.

Outils recommandés: Répondeur, mitm6

4) Publicité du routeur
Comme vous pouvez le voir sur le vidage, il existe des périphériques avec IPv6 activé sur le réseau. Sur le réseau, vous pouvez essayer d'envoyer des messages à l'annonce du routeur IPv6 victime afin de changer la passerelle ou le serveur DNS par défaut.

Les messages d'annonce de routeur (RA) font partie du mécanisme SLAAC (Stateless Address Autoconfiguration), qui est nécessaire pour obtenir automatiquement des adresses IPv6 sur un réseau, sans utiliser de serveur DHCPv6 ou conjointement avec lui. Ceci est réalisé en envoyant périodiquement des messages RA de multidiffusion au routeur, qui contiennent l'adresse de passerelle par défaut, le préfixe de réseau, l'adresse du serveur DNS, le préfixe de domaine.

Outils recommandés: paquet brut

5) Usurpation DHCP
En outre, dans un vidage, les demandes de dĂ©couverte DHCP du mĂȘme pĂ©riphĂ©rique sont rĂ©pĂ©tĂ©es Ă  certains intervalles. Vous pouvez tirer des conclusions sur l'absence d'un serveur DHCP dans ce rĂ©seau et rĂ©pondre Ă  la prochaine demande Discover en spĂ©cifiant la victime comme passerelle par dĂ©faut vers le pĂ©riphĂ©rique.

Outils recommandés: Yersinia

6) Usurpation HSRP
De plus, les paquets HSRP peuvent ĂȘtre vus dans le vidage. Le protocole de redondance d'UC peut augmenter la disponibilitĂ© des routeurs qui agissent comme passerelle par dĂ©faut. IP-, -. Hello - , . HSRP, , , HSRP .

: Yersinia

7) STP-
Spanning Tree Protocol L2- . BPDU-, , . BPDU-, , , , , , , , STP, , .

: Yersinia



№5. NGINX config



- nginx. , ?

: pastebin.com/nYp7uVbB

nginx, :
1) 86 , http X-Managed secured, nginx /management/
2) API 70 105 .


J:
, . nginx , web-, nginx web- /. nginx , , , .

, , , . , . , , .

gixy .

Gixy 4 :

1) Alias travesal:

80 :

 location /static { alias /prod_static/; } 

- , . : //host/static../etc/passwd. - alias: , /static, /prod_static/, : /prod_static/../etc/passwd, /etc/passwd. alias traversal

2) Http Splitting (CRLF injection)
nginx , , . HTTP-.
: github.com/yandex/gixy/blob/master/docs/ru/plugins/httpsplitting.md

3) -
75 «rigin» . , - , , production.host.evil.com .
: github.com/yandex/gixy/blob/master/docs/ru/plugins/origins.md

4) add_header
nginx : add_header, , , , . CSP .
: github.com/yandex/gixy/blob/master/docs/ru/plugins/addheaderredefinition.md


, gixy, . :

1) 17 default_type text/html. : , , nginx Content-Type, default_type. , Content-Type: text/html. HTML- , , , XSS- .

2) POST-
29-30 , . , “” POST-. . Mais! SSRF , , , , .

3) php-fpm
48 , FastCGI- unix , 9000. , , . , PHP-.

4) “” CSP
production.host Content-Security-Policy, Javascript, .

5) “” CORS
76-77 CORS, , cookie .

6) , 86 . secured /managed.

7) , , , -. , , , /user/{userid} IDOR.

, , , .



№6. Linux Permissions


Linux ?

~ () Debian
C ( , /etc/passwd).
, ftp , ~.

Un exemple:
* root@server:~# ls ~ftp
* welcome.msg
:
* root@server:~# cat ~ftp/welcome.msg
* Welcome, archive user %U@%R!
, : :
* root@amorale:~# echo ~ftp
* /srv/ftp


K:
, :

  • ACL
  • capabilities

, , :
“ , root” .

, Linux/Unix .
, “ ” — .
, , funky_test.txt

 -rwxrw-rx 1 alice interns 12  4 13:00 funky_test.txt 

, Linux/Unix :

  • - — “rwx” alice
  • — “rw” interns
  • — “rx” others

read, write, execute .

, — , :

  • , read
  • , read
  • read

, read . , execute .

, .

, , . :

1. , ls.

2. — POSIX Access Control Lists .

c .


1

, alice interns . funny_test.txt :

 $ whoami alice $ id uid=1001(alice) gid=1001(alice) groups=1001(alice),1002(interns) $ ls -la ----rwx--- 1 alice interns 12  4 13:00 funky_test.txt $ cat funky_test.txt cat: funky_test.txt: Permission denied $ 

2

— funky_test.txt 604. bob , interns :

 $ whoami bob $ id uid=1002(bob) gid=1003(bob) groups=1003(bob),1002(interns) $ ls -la funky_test.txt -rw----r-- 1 alice interns 12  4 13:00 funky_test.txt $ cat funky_test.txt cat: funky_test.txt: Permission denied 


alice , . , permission_denied :

 $ id uid=1001(alice) gid=1001(alice) groups=1001(alice),1002(interns) $ ls -la ----rwx--- 1 alice interns 12  4 13:00 funky_test.txt $ chmod 777 funky_test.txt $ ls -la funky_test.txt -rwxrwxrwx 1 alice interns 12  4 13:00 funky_test.txt $ cat funky_test.txt secret_pass 

bob .


, « », :

  • ID effective UID —
  • GID effective GID —
  • others.


, — , “” , , , :

  • , , others
  • , , others

.

POSIX Access Control Lists


— /. , ACL, , “ + ”

POSIX ACLs, — , . ACL, .

Exemple

. alice funky_test.txt ,

 -rwxrw-rx 1 alice interns 12  4 13:00 funky_test.txt 

ACL. getfacl , , ACL, , ls .

 $ getfacl funky_test.txt # file: funky_test.txt # owner: alice # group: interns user::rwx group::rw- other::rx 

, ACL . , bob :

 setfacl -mu:bob:rwx funky_test.txt 

“ + ”

 ls -l funky_test.txt -rwxrwxr-x+ 1 alice interns 12  4 13:00 funky_test.txt 

:

 getfacl funky_test.txt # file: funky_test.txt # owner: alice # group: interns user::rwx user:bob:rwx group::rw- mask::rwx other::rx 

ACL . :

  1. . effective UID effective GID — . , ACL, . , , , , , .
  2. ACL mask , ACL owner, group, others


, , , — .

, ACL, , :

  • ACL, ;
  • , ACL, .





№7. Network Dump II


. , , , .

: yadi.sk/d/e3gNme4MBo6tFQ

— .
, .
, .



, SMB-, , , . SMB object list (File -> Export objects -> SMB
 ).

— .


( SMB object list)


(NotTruePass.jpg)

.

“” TCP-
 . . :(

, . .


( desktop.ini)

“” . , NTLM, , , NTLM “Pass-the-hash”. «-».

“” :

 1)User - 1 Account: IEUser Domain: WIN7 Host: WIN7 hex dump session key - 49 0c 38 3e f8 eb 63 88 79 0f 62 84 09 84 d2 dc 2) User - 2 Account: winwin Domain: WIN7 Host: WIN7 hex dump session key - 8d f6 1b 35 79 a3 78 d3 2e 81 09 f1 95 4f 71 0a 3) User - 3 Account: 192.192.192.29 Domain: WIN7 Host: WIN7 hex dump session key - c3 19 e0 21 1b e2 63 c6 03 9e e7 38 1b 56 f0 d1 

. MSEDGEWIN10.

— :

1) SMB Relay.
.
, MITM-
(. ).

— , , .
. , .

, , , .

2) NTLM Relay.
, NTLM-.

, NTLM-.

.
, , , .

K:
, , :

  1. ( )
  2. — /
  3. ,

, :


Wireshark, Protocol Hierarchy Statistics Conversations .

Protocol Hierarchy Statistics — .



Conversations — , .





:

  1. (60%) — TCP, , , SMB. Protocol hierarchy SMB 40%, TCP, , 20% SMB.
  2. 192.192.192.128 192.192.192.129. SMB .



.

— SMB.

, — wireshark — ExportObject .
tcp stream . , , tcp stream , . , .

, , , , . , .

.
SMB .

NTLM- “ntlmssp”. info , 3 :



, .







Net-NTLMv2-, :

  • challenge
  • response

Net-NTLMv2 hashcat .

, WIN7\winwin WIN7\192.192.192.129 — , . WIN7\IEUser — , , , , , SMB.

Net-NTLM , , Wireshark. , PCredz (https://github.com/lgandx/PCredz)



IEUser ( ) hashcat.



, .

6, , SMB/NTLM , DNS .

, , NT LM NTLMv1 (Net-NTLMv1) , NTLMv2 (Net-NTLMv2) ( ).

- NT LM NTLM , NTLM NTLMv1 NTLMv2 . , . .

, NTLMv1/NTLMv2 — challenge-response . , .

NT LM — “ ” — .

:

  • PassTheHash — , , . Mais. , NT . PassTheHash NTLMv2 — . , “” , , .
  • NTLM Relay — , , NTLM. , .
  • Spoofing, Windows: LLMNR, NetBios
  • : MS17-010, / , .



:

  • ( )
  • ,
  • eternalBlue
  • NTLM relay
  • NTLM relay — SMB
  • , (ARP-spoofing, DNS )




№8. SSH Pivoting Tricks



(10.0.10.0/24), SSH Linux- (10.0.20.5) (10.0.20.0/24). , . , , // Linux-.

, , :

nmap

?

Option:

1) ping.
-> ping -b 10.0.20.255
ping , , .
, .
.
, CentOS 7.
.


( )

, . :(



2) ARP- .
->
Debian — arp-scan --interface=/* */ 10.0.0.0/16
Linux arp, ( Debian) - , arp-scan.
arp-scan, , , .

KryaKrya:
, , , Pivoting. , , , , , .

, ping , ARP- (arp -a), (route). , netcat (nc -h), , (nc -vnz 10.0.20.3 0-1000). , , , , , , - bash, python .

— SSH-, SOCKS- SSH, .
ssh -D 1337 user@10.0.20.5 -f -N

. nmap SOCKS- proxychains .

proxychains nmap 10.0.20.0/24
nmap 10.0.20.0/24 --proxy socks4://10.0.20.5:1337

nmap - SOCKS-. SYN- ( nmap ) SOCKS-, SOCKS- TCP- , SYN- , SYN, SYN ACK. CONNECT- (-sT), nmap SOCKS-.

nmap -sT 10.0.20.0/24 --proxy socks4://10.0.20.5:1337

, - , , . , Linux-, nmap -sT , , , , , , .



№9. Android SSL pinning bypass


Android. , HTTPS.

1) , HTTP .

2) , SSL-pinning, ?

«, HTTP-.»

.
proxy host wifi.

Android , , .

— ( ) — ( , ).
, MITM, Android 6.0, , .

6.0, .

« , SSL-pinning, ?»

, SSL-pinning.

SSL-pinning — , , «» .

HTTPS-, , «». , .

, MITM-, .

, , , .

— Frida.
Frida — Dinamic Instrumentation Toolkit, , .
, Frida Javascript.
Frida , , , «True» «False», .

Frida:

1. , . -.

2. Frida. Root.

.
APK- . , , .
. apk META-INF .

“” APK-.
APK smali Java, , .
, , .


I:
, MITM HTTPS .

, Proxy WiFi. ProxyDroid, iptables .

, Root , , ?

SSL-Pinning, , , “Frida+Objection”. , :)



№10. ?


, .

“ ”. , , dns-rebinding.

. Merci de votre attention!



Digital Security

, .
3 ( - ). 0 5 2.5, 3.1337.

. , 50 . , “ ” - )

. 29 , 43.5. 24% .

:



, , , , , . , , . .

, , , , .

, , :



( !), , , , “ ”.

- , , . , , Summer of Hack 2019.

, . .

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


All Articles