Wie werden Pentester gekocht? Eingangstests fĂŒr Praktikanten im Bereich digitale Sicherheit

Der Summer of Hack 2019 in der digitalen Sicherheit ist bereits in vollem Gange, was bedeutet, dass es Zeit ist zu erzÀhlen, wie wir Leute rekrutiert haben.



Unter dem Schnitt, umfangreiches und interessantes Material darĂŒber, wie wir junge Spezialisten fĂŒr unser Praktikum „Summer of Hack 2019“ und speziell fĂŒr das Department of Security Audit auswĂ€hlen.

Überlegen Sie, was ein Pentester unserer Meinung nach wissen sollte, um seine Arbeit erfolgreich zu erledigen.

Lassen Sie uns eine Reihe schwieriger Aufgaben analysieren, die wir den Jungs gefoltert haben, auch im Auftrag einer von ihnen.

Der vielleicht interessanteste Teil der Auswahl fĂŒr ein Praktikum in der SicherheitsĂŒberprĂŒfungsabteilung war unser Profil. Jedes Jahr versammeln wir uns als ganze Abteilung und diskutieren, welche FĂ€higkeiten unserer Meinung nach fĂŒr einen modernen Spezialisten auf dem Gebiet der praktischen Sicherheit gefragt sind, erinnern uns an die interessantesten Aufgaben, die wir in diesem Jahr lösen mussten, und schreiben Wissensbereiche auf, ohne die es schwierig ist, sich einen erfolgreichen PrĂŒfer vorzustellen. Wenn alle Witze gescherzt und die Geschichten erzĂ€hlt werden, bleibt das Endergebnis eine Reihe von Ideen.

In diesem Jahr haben wir uns an folgenden Anforderungen orientiert:

  • Grundkenntnisse der GerĂ€te-Webanwendungen und Angriffe auf diese;
  • Grundkenntnisse ĂŒber browserbasierte Schutz- und Zugriffskontrollmechanismen (ja, die gleiche SOP und CORS, wo ohne sie);
  • Grundlegende FĂ€higkeiten zum Lesen von Code und die FĂ€higkeit, Logik dahinter zu erkennen;
  • VerstĂ€ndnis der Funktionsweise von Computernetzwerken und deren Routing;
  • Erfahrung mit Linux-Ă€hnlichen Systemen;
  • Die FĂ€higkeit, keine Angst vor ungewohnter Technologie zu haben. Die FĂ€higkeit, die empfangenen Informationen zu googeln und zu systematisieren;
  • Und eine Prise Android (obwohl nicht notwendig, aber das ist unsere kleine Laune).

Nachdem Fragen entwickelt wurden. Teilweise haben wir sie aus den Fragen ausgeliehen, die wir bei den Interviews gestellt haben, aber mehr als die HĂ€lfte war speziell fĂŒr diesen Fragebogen vorbereitet. Unsere Experten verbrachten ihre persönliche Zeit damit, Verkehrsdumps vorzubereiten und zu diskutieren, wie die Frage besser formuliert werden kann und welche SicherheitslĂŒcken „zu spezifisch sind, warum Auszubildende quĂ€len“. FĂŒr diesen Eifer können wir nicht anders, als unseren Hut abzunehmen (natĂŒrlich weiß).

Die Analyse jeder Frage besteht aus zwei Teilen. Der erste Teil ist die Antwort eines unserer Auszubildenden - Danila Korgik_0 Leontyeva (er ist der Autor der Veröffentlichung), und der zweite Teil sind die Kommentare von Spezialisten, die den Fragebogen ĂŒberhĂ€uft haben .



Hallo Habr!

ZunÀchst ein kleiner lyrischer Exkurs.
Genauer gesagt: „Wie habe ich von Summ3r 0f h4ck erfahren?“.
Die AnkĂŒndigung des Praktikums hörte ich aus einer Rede von Denis Rybin und Ilya Bulatov auf der RuCTF2019-Konferenz.

BuchstĂ€blich nach 4 Tagen wurde auf habr ein Beitrag ĂŒber die Eröffnung eines Praktikums veröffentlicht.

Und am Abend desselben Tages eröffnete ich die Aufgabe in der SicherheitsĂŒberprĂŒfungsabteilung und vertiefte mich in die Arbeit. Heute werde ich dem Leser mitteilen, mit welchen Schwierigkeiten ich konfrontiert war und welche Lösungsoption ich anbieten könnte.



Nr. 1. PHP-Quellcode


Untersuche den Code. Beschreiben Sie, welche Fehler Sie sehen und wie Sie sie beheben wĂŒrden.



Jobanalyse
4. Zeile - Verwenden Sie den MD5-Hash.
Problem - md5 kann mit Hashcat in angemessener Zeit brutalisiert werden.
Wie zu beheben?

Verwendung von "ressourcenintensiveren" Hashing-Algorithmen.
In diesem Fall mĂŒssen Sie die Benutzer-Cookies vollstĂ€ndig ablehnen und die gesamte Logik an phpsession binden.

5. Zeile - PostgreSQL-Injektionen.
Wie zu beheben?
Vorbereitete Anweisung verwenden.
Implementierung einer vorbereiteten Anweisung zur ÜberprĂŒfung der Anmeldung

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

11 Zeile - eine Reihe von erfolglosen Entscheidungen.

  1. Zu lange Sitzungsdauer. Ein ganzes Jahr ist viel. Wenn das Cookie erfolgreich entfĂŒhrt wurde, kann der Angreifer lange auf das Benutzerkonto zugreifen.
  2. Fehlende httpOnly-Flagge. Bei TRUE kann auf Cookies nur ĂŒber das HTTP-Protokoll zugegriffen werden. Das heißt, Cookies sind in diesem Fall fĂŒr Skriptsprachen wie JavaScript nicht verfĂŒgbar.
  3. Kein Cookie-Hashing.
  4. Fehlende Einstellung des sicheren Flags. Das sichere Flag gibt an, dass ein Cookie vom Client ĂŒber eine sichere HTTPS-Verbindung gesendet werden soll. Bei TRUE wird das Cookie vom Client nur dann an den Server gesendet, wenn eine sichere Verbindung hergestellt wurde.

Wie zu beheben?
StandardmĂ€ĂŸig betrĂ€gt die Sitzungslebensdauer in PHP nur 24 Minuten. Lassen Sie uns dies implementieren.
Setzen Sie das sichere Flag httpOnly.

In diesem Fall sollten Sie das seltsame Benutzer-Cookie ablehnen und die gesamte Logik an phpsession binden.

18 Zeile - XSS (English Cross-Site Scripting - "Intersite Scripting").
Wie zu beheben? Konvertieren Sie alle möglichen Zeichen in die entsprechenden HTML-EntitÀten.

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

Wir werden die Codierung explizit angeben, um zu vermeiden, dass UTF-7 ersetzt wird.

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

Zeile 20 - Fehler des Authentifizierungssystems und des Sitzungsspeichers.

Problem - Wenn Sie die in base64 codierte Benutzer-ID im Cookie-Benutzer festlegen, können Sie sich bei seinem Konto anmelden!

Wie zu beheben? Bei der Autorisierung des Benutzers zeichnen wir die Sitzung in der Datenbank auf und bei der Installation der Sitzung ĂŒberprĂŒfen wir, ob sie in der Datenbank vorhanden ist.

  $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"]); } 


Expertenkommentar D:
Die erste Frage, mit der der Fragebogen zukĂŒnftige Praktikanten traf, betraf die wichtigsten und allgemein bekannten Web-Schwachstellen. Die einzige Schwierigkeit hierbei ist die Notwendigkeit, sie im Quellcode in PHP zu sehen. Niemand hat sich jedoch die Aufgabe gestellt, "Fehler zu verbergen".

Hier ist eine Liste der Schwachstellen, die in dieser Liste in der Reihenfolge ihrer ErkennungshÀufigkeit erkannt werden können:

Das Hashing von Passwörtern mit dem MD5-Algorithmus wurde sogar von Kandidaten bemerkt, die weit vom Internet entfernt waren. Es gab jedoch auch interessante Nuancen, zum Beispiel verwendeten viele Kandidaten sehr falsche Begriffe und versuchten, die Probleme in eigenen Worten zu beschreiben. "Algorithmus-Schwachstellen", "Einwegfunktionen", "das Vorhandensein von Kollisionen" und andere seltsame Wendungen gingen in den Kampf. Bei nĂ€herer Betrachtung stellen sich heraus, dass sie nichts weiter als eine Reihe großer Wörter sind, die das Wesentliche nicht offenbaren. NatĂŒrlich gingen wir hier zu einem Treffen und fanden keine Schuld an den Menschen, die sich gerade darauf vorbereiten, den Weg zum Erlernen der Weisheit der Informationssicherheit einzuschlagen. Um eine "Aufrechnung" zu erhalten, hĂ€tte die ErwĂ€hnung der Bedrohung ausgereicht, dass im Falle einer GefĂ€hrdung der Datenbank die md5-Hashes vom Angreifer in einer akzeptablen Zeit aussortiert und die Passwörter (oder gleichwertige Zeichenfolgen) in klarer Form empfangen werden können. Und natĂŒrlich erwĂ€hnten viele den Mangel an Salz und roher Gewalt aufgrund der Verwendung von Regenbogentischen. Wir haben solche Kommentare auch positiv aufgenommen, insbesondere wenn der Befragte erklĂ€rte, warum dies eine Bedrohung darstellt.

Mögliche SQL-Injection. Es ist schwer, etwas hinzuzufĂŒgen. Beim Aufruf der Datenbank werden Benutzereingaben von Login und Passwort direkt mit der Anfrage verknĂŒpft. Wenn es unwahrscheinlich ist, dass Sie den Kennwortwert zu diesem Zeitpunkt manipulieren können (ein Hash wird daraus entnommen), ist es fĂŒr einen potenziellen Angreifer nicht schwierig, eine Injektion in den Benutzernamen einzufĂŒhren.

Ausgabe unnötiger Debug-Informationen, die zu einem XSS-Angriff fĂŒhren. Durch sorgfĂ€ltiges Lesen der Liste könnte man auf den Echoaufruf achten, der die generierte Anforderung an die Datenbank in HTML-Kommentaren auf der Seite anzeigt. NatĂŒrlich ist eine solche Schlussfolgerung zusĂ€tzlicher Informationen auf der Seite völlig optional und wird vom Entwickler nach DurchfĂŒhrung der Tests höchstwahrscheinlich einfach vergessen. Solche zusĂ€tzlichen Informationen sind fĂŒr den Angreifer sehr nĂŒtzlich und ermöglichen ein viel besseres VerstĂ€ndnis der Funktionsweise der Anwendung. Dies ist jedoch leider nur die halbe Miete. Tatsache ist, dass ein Angreifer den Inhalt der Abfragevariablen manipulieren kann und sein Inhalt nicht gefiltert oder maskiert werden kann, bevor er dem Benutzer angezeigt wird - es liegt ein potenzieller XSS-Angriff vor. Es kann sich jedoch herausstellen, dass seine Ausnutzung aufgrund der schlecht lokalisierten Strtoupper-Funktion immer noch Kopfschmerzen bereitet. Der vom Angreifer injizierte Vektor wird in Großbuchstaben geschrieben. Wenn dies fĂŒr HTML-Tags kein Problem darstellt, ist Javascript durch einen solchen Aufruf sehr beleidigt. Dies kann einfach ĂŒber die Browserkonsole ĂŒberprĂŒft werden.



Zumindest muss sich der Angreifer anscheinend den sogenannten "skriptlosen Angriffen" oder ausgefeilten Techniken zuwenden, um die Filterung zu umgehen (in diesem Fall wĂŒrde JSFUCK dies tun), sodass die Tatsache eines Sicherheitsrisikos dies nicht aufhebt.

Ein Fehler in der Logik des Sitzungsverwaltungsmechanismus war der interessanteste Teil der Aufgabe. Seine Entdeckung erforderte nicht nur das zeilenweise Lesen der Quelle, sondern auch das Verstehen der Logik der gesamten Auflistung. Man konnte fĂŒhlen, dass etwas nicht stimmte, wenn man die Einstellung eines Cookies bemerkte, das die base64-codierte Benutzer-ID im Remember-Me-Block enthielt. Eine weitere Analyse der Logik dieses Mechanismus fĂŒhrt uns zu dem Gedanken: "Es stellt sich heraus, dass sich ein Angreifer, der die ID kennt oder durchlĂ€uft, bei jedem Konto anmelden kann, ohne einen Benutzernamen und ein Passwort einzugeben ?!". Ja, tatsĂ€chlich kann ein Angreifer unabhĂ€ngig einen Cookie-Benutzer auf seiner Seite generieren und ihm einen beliebigen ID-Wert zuweisen, der von base64 codiert wird. Das Senden einer Anfrage mit einem solchen Cookie ohne Benutzername und Passwort wĂŒrde die Funktion do_login auslösen und sich bei einem anderen Konto anmelden.

Die ErwÀhnung dieser 4 Schwachstellen in der Antwort der Kandidaten hatte direkten Einfluss auf ihre Punktzahl.

Viel hing jedoch von der QualitĂ€t der Antwort ab. ErwĂ€hnung von Möglichkeiten zur Behebung der Situation, Anmerkungen zu zusĂ€tzlichen Faktoren, die die DurchfĂŒhrbarkeit eines Angriffs beeinflussen, die Verwendung der richtigen Begriffe und die FĂ€higkeit, Ihre Gedanken zu strukturieren, Kommentare zu zusĂ€tzlichen SchwĂ€chen oder potenziellen Bedrohungen - all dies hat unser Herz erwĂ€rmt und zu einer Erhöhung der endgĂŒltigen Bewertung gefĂŒhrt.




Nr. 2. Jwt


Bei der Suche nach einer Webanwendung haben Sie festgestellt, dass die Anwendung ein JWT-Token als Berechtigung verwendet.

Welche Sicherheitsbedenken sehen Sie, welche Art von ÜberprĂŒfungen wĂŒrden Sie durchfĂŒhren?

JWT-Token:

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

Jobanalyse
Dan JSON Web Tokens (JWT).
Seine Struktur -> [base64url (HEADER)]. [Base64url (PAYLOAD)]. [Base64url (SIGNATURE)]
[base64url (HEADER)] = eyJhbGciOiJOb25lIiwidHlwIjoiSldUIn0
base64url decode -> {"alg": "None", "typ": "JWT"}
Man kann sofort feststellen, dass der Signaturalgorithmus ("alg": "None") der Signatur nicht verwendet wird. Einige JWT-Bibliotheken unterstĂŒtzen den "none" -Algorithmus, dh den Signaturalgorithmus, nicht. Wenn der Alg-Header "none" ist, fĂŒhrt die Serverseite keine SignaturĂŒberprĂŒfung durch.
Das heißt, Sie können beliebige Nutzdaten in base64url schreiben, und die Signatur wird nicht ĂŒberprĂŒft.
Dadurch können wir einen Benutzer mit Administratorrechten erstellen.

Die Tatsache, dass der Nutzlastteil keine Header wie aud (definiert die EmpfĂ€nger, fĂŒr die das JWT-Token bestimmt ist) und exp (die Lebensdauer des Tokens) verwendet, vereinfacht unser Leben.

GeschÀtzte Nutzlast
eyJhbGciOiJOb25lIiwidHlwIjoiSldUIn0.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6ImhhY2siLCJpYXQiOjE1MTYyMzkwMjIsInJvbGUiOiJub2JvZHkiLCJpc0FkbWluIjoiVHJ1ZSIsInBhc3N3b3JkIjoiaGFjayJ9

base64url decode payload -> {"sub": "1234567890", "name": "hack", "iat": 1516239022, "role": "Nobody", "isAdmin": "True", "password": "hack" »}

Expertenkommentar D:
In der Arbeit des Auditors muss er sich hĂ€ufig mit neuen Technologien auseinandersetzen, und die FĂ€higkeit, diese zu verstehen, ist sehr wichtig. Wir haben diese Frage in den Fragebogen aufgenommen und sind davon ausgegangen, dass die meisten Kandidaten bis auf den Namen kaum von der Technologie der JWT-Token gehört haben. Daher zielte diese Frage zunĂ€chst auf die FĂ€higkeit ab, Informationen aus öffentlichen Quellen zu suchen und zu analysieren. Infolgedessen könnte eine Person, die auf Anfrage von "JWT" ​​und "JWT-Schwachstelle" die Herausgabe von Google verpasst hat, zu folgenden Schlussfolgerungen kommen:

1. Dieses Token verfĂŒgt nicht ĂŒber einen Signaturalgorithmus, sodass ein Angreifer alle Felder innerhalb des Tokens Ă€ndern kann, was vom Konzept der JWT-Token nicht angenommen wird.

2. Felder im Token enthalten das Kennwort des Benutzers im Klartext. Das Speichern solcher Informationen im Token ist mindestens eine schlechte Praxis. In den meisten FÀllen können Sie eine solche Entscheidung ablehnen und dadurch Ihr Sicherheitsniveau erhöhen.

3. Angesichts des Fehlens einer Signatur und unserer FĂ€higkeit, die Felder im Token zu Ă€ndern, ist es logisch anzunehmen, dass das Ändern des Werts von isAdmin unsere Berechtigungen auf Administratorrechte erhöhen kann.

4. Eine weitere interessante Idee, die nur wenige in ihrer Antwort erwĂ€hnt haben, betrifft die Tatsache, dass Benutzereingaben in die Felder eines JWT-Tokens ĂŒbertragen werden können. In einer normalen Situation kann ein Angreifer die Daten im Token in keiner Weise beeinflussen, was bedeutet, dass Entwickler die EinfĂŒhrung zusĂ€tzlicher ÜberprĂŒfungen im Code der Handler hĂ€ufig vernachlĂ€ssigen können. Dies bringt die einfache Idee auf den Punkt: Versuchen wir jedoch, klassische Angriffe nicht ĂŒber GET / POST-Parameter, sondern ĂŒber Token-Felder durchzufĂŒhren. Dies kann zu einem unerwartet guten Ergebnis fĂŒhren. Ein solch kreativer Ansatz mit der richtigen BegrĂŒndung unseres Handelns wurde von uns bei der Bewertung dieses und anderer Probleme sehr geschĂ€tzt.

Viele Kandidaten haben in ihren Antworten kurz nacherzĂ€hlt, wie das JWT-Token aufgebaut ist und wo es verwendet wird. Es war fĂŒr uns interessant zu lesen, und dennoch haben wir zunĂ€chst die Aspekte der Antwort in Bezug auf die Sicherheit bewertet.




Nummer 3. CORS / CSRF / IDOR / ???



In der Webanwendung wird das Benutzerkennwort mithilfe der folgenden Anforderung geĂ€ndert (siehe Option 1). Welche potenziellen Sicherheitsbedrohungen sehen Sie? Welche Kontrollen wĂŒrden Sie durchfĂŒhren? Wird sich die Situation bei folgendem Verhalten Ă€ndern (siehe Option 2)? ErklĂ€ren Sie Ihre Antwort.

Jobanalyse
Variante 1.
"Welche potenziellen Sicherheitsbedrohungen sehen Sie?"

1) Fehlende Zugangskontrolle.
Wenn der Benutzer - eine Nummer, an die die KennwortĂ€nderungsanforderung gesendet wird - nicht ĂŒberprĂŒft wird, kann das Kennwort fĂŒr jeden registrierten Benutzer im System geĂ€ndert werden.
Wie zu beheben? - Übereinstimmende JSESSION aus der Datenbank und der angeforderten ID-Shnik.

2) Die FĂ€higkeit, CSRF-Angriffe durchzufĂŒhren
Wir locken einen autorisierten Benutzer zu einem von uns kontrollierten Host und nach einer Anfrage an example.com im Namen des Opfers, um das Passwort zu Àndern.
Wie zu beheben? - HinzufĂŒgen eines CSRF-Tokens.

Option 2
"Welche potenziellen Sicherheitsbedrohungen sehen Sie?"
Ein Fehler in der CORS-Richtlinie.
Es wird empfohlen, den Header Access-Control-Allow-Origin auf die Whitelist zu setzen.

Wie zu beheben? - -

1) Ändern der .htaccess-Datei

 <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'); ?> 

"Wird sich die Situation mit dem folgenden Verhalten Àndern?"

Ja Da im zweiten Fall eine PUT-Anforderung verwendet wird, ist dies wichtig, da die Verwendung einer PUT-Anforderung die CORS-Anforderung „schwierig“ macht, was uns wiederum die Möglichkeit eines CSRF-Angriffs und das Fehlen eines Headers wie Access-Control-Allow-Credentials: true vollstĂ€ndig entzieht die Möglichkeit, mit anderen http-Headern und Benutzer-Cookies zu senden.

Expertenkommentar I:
Betrachten wir der Reihe nach die Hauptprobleme, die bei den gegebenen Abfragen sichtbar sind:

1) Da die numerische Kennung des Benutzers "10012" in der Anforderung beobachtet wird, besteht der erste Schritt darin, zu ĂŒberprĂŒfen, ob es möglich ist, das Kennwort fĂŒr einen anderen Benutzer zu Ă€ndern. Kann es ausreichen , die ID eines anderen anzugeben ?
SicherheitslĂŒcken der IDOR-Klasse sind relativ einfach auszunutzen und weisen hĂ€ufig eine hohe KritikalitĂ€t auf.

2) Die Anforderung zum Ändern des Kennworts erfolgt ĂŒber die POST-Methode, das CSRF-Token wird nicht beachtet und der Inhaltstyp lautet "text / plain". Es besteht die Möglichkeit , eine solche Anfrage vorzutĂ€uschen.

Um das Passwort des Opfers zu Ă€ndern, reicht es daher aus, dass der Angreifer ihn davon ĂŒberzeugt, nur den "böswilligen" Link zu besuchen.

3) In den Antwortheadern zeigt der Server die Version der verwendeten Software an . Dies kann auf einmal als SicherheitslĂŒcke bezeichnet werden. Es ist jedoch besser, solche Banner auszublenden. Angreifer können leicht bekannte 1-Tages-Exploits finden, und der Wert der verwendeten Software vereinfacht die Planung weiterer Angriffe erheblich.

4) Wir wĂŒrden uns sehr ĂŒber den Satz "Was passiert, wenn wir das Datenformat von JSON auf XML Ă€ndern ?"

Tatsache ist, dass moderne Frameworks intelligent und alles fressend sind und Daten in verschiedenen Formaten verarbeiten können. Und beim Parsen von XML ist hĂ€ufig eine gefĂ€hrliche XXE-SicherheitsanfĂ€lligkeit zulĂ€ssig. Mit seiner Hilfe kann der Eindringling in das interne Netzwerk "gehen", Konfigurationsdateien vom Server lesen und gelegentlich RCE ausfĂŒhren.

5) Ich wollte auch eine Bemerkung wie "Warum wird das Wissen des Alten beim Ändern des Passworts nicht ĂŒberprĂŒft ?"

FĂŒr "Variante Nr. 2" gibt es eine "Falle" - hier werden CORS-Header verwendet, und der Inhaltstyp der Anforderung ist bereits auf "application / json" gesetzt.

Der Fehler, den die ĂŒberwiegende Mehrheit der Kandidaten gemacht hat, ist die Antwort auf das Formular "- Das ist das Sternchen in Allow-Origin, was bedeutet, dass Sie Anfragen von jeder Site aus senden können!"

Nein, geht nicht. Erstens fehlt der Header Allow-Credentials: True. Dies bedeutet, dass der Browser die Anforderung "mit Cookies" ausfĂŒhren sollte, damit die Anforderung ohne Sitzung anonym bleibt. Und zweitens wĂŒrde der Browser selbst dann, wenn ein solcher Header vorhanden wĂ€re, das Senden von Cookies verbieten - nur wegen des "Sternchens". Ihre Kombination ist verboten und der Browser wird ignoriert.



Nummer 4. Netzwerk-Dump


Stellen Sie sich vor, Sie sind in das interne Netzwerk des Unternehmens eingetreten und haben den Datenverkehr abgefangen, dessen Speicherauszug unten angehĂ€ngt ist. Beschreiben Sie, welche Angriffe Sie mit welchen Tools ausfĂŒhren möchten.

Speicherauszug : yadi.sk/d/qkLcfwSCzdxcwg

Jobanalyse
1) LLMNR-Spoofing <
Ein Angreifer im lokalen Subnetz kann Broadcast-Nachrichten abhören und darauf antworten und behaupten, der angeforderte Hostname sei seine eigene IP-Adresse.
Dies fĂŒhrt dazu, dass der anfordernde Client-Computer mit dem Computer des Angreifers verbunden ist und je nach Protokoll möglicherweise versucht, sich zu authentifizieren.

Die verwendeten Dienstprogramme sind Intercepter-NG, ein Projekt auf githab VindicateTool.

2) HSRP-Missbrauch.
Problematisch - Wenn der Parameter "preempt" auf 1 gesetzt ist, hat der Angreifer aufgrund der höheren PrioritÀt die Möglichkeit, andere Router zu "verdrÀngen". Nach dem Senden von HSRP an den Multicast wird der gesteuerte Router zum Hauptrouter (Active Router) im Netzwerk, und der gesamte Datenverkehr wird durch ihn geleitet. TatsÀchlich kamen wir zur Implementierung von Mitm-Angriffen.

FĂŒr diesen Angriffsvektor mĂŒssen wir die Gruppe und das Passwort kennen.
Aus dem uns gegebenen Verkehrsdump erkennen wir die Gruppe (es ist - 3) und das Passwort. Das Passwort in unserem Fall ist Standard - Cisco.

Verwendete Dienstprogramme sind Yersinia, Scapy.


Kommentar von Experte X:
Ziel der Frage war es, die Vertrautheit des Auszubildenden mit modernen (und nicht so) Techniken zur DurchfĂŒhrung von MitM-Angriffen zu ermitteln. Schauen wir uns mögliche Szenarien an, die auf einem vorhandenen Verkehrsdump basieren:

1) ARP-Spoofing
ARP-Spoofing ist der Àlteste und einfachste Weg, MitM-Angriffe zu implementieren. Es besteht darin, eine kostenlose ARP-Anfrage an Host A zu senden.

Die IP-Adresse von Host B ist die IP-Adresse, und unsere MAC-Adresse ist die MAC-Adresse. Mit einer solchen Anforderung können Sie die ARP-Tabelle auf Host A Àndern und sie dazu zwingen, Anforderungen an unser GerÀt zu senden, wenn Sie versuchen, Host B zu kontaktieren. Host B ist normalerweise das Standard-Gateway.

Empfohlene Tools: Bettercap, Arpspoof

2) LLMNR, NBNS-Spoofing
Link-Local Multicast Name Resolution und NetBIOS Name Service sind die Protokolle, die zum Auflösen von Hostnamen im lokalen Netzwerk verwendet werden. Im Gegensatz zum DNS-Protokoll gibt es keinen dedizierten Server, auf dem alle Informationen gespeichert sind. Stattdessen wird die Anforderung an alle Hosts im Netzwerk gesendet. Wenn der Hostname in der Anforderung mit dem Hostnamen des GerĂ€ts ĂŒbereinstimmt, wird eine Antwort gesendet.

Wie in der Antwort richtig vermerkt, kann der Angreifer auf solche Anfragen antworten, indem er seine IP-Adresse in der Antwort sendet. Dies fĂŒhrt dazu, dass das Opfer in Zukunft das GerĂ€t des Angreifers anstelle des GerĂ€ts kontaktiert, dessen Hostname in der Anfrage enthalten ist. DarĂŒber hinaus kann der Angreifer vom Opfer eine NTLM-Authentifizierung anfordern, wodurch das GerĂ€t des Opfers einen NTLM-Hash sendet, der fĂŒr Brute Force weiter verwendet werden kann.

Empfohlene Tools: Responder

3) WPAD-Spoofing
WPAD-Spoofing kann auf einen Sonderfall von LLMNR- und NBNS-Spoofing zurĂŒckgefĂŒhrt werden. Das Auto Proxy Auto Discovery-Protokoll wird verwendet, um einen HTTP-Proxyserver automatisch zu konfigurieren.

Das GerĂ€t sendet eine LLMNR / NBNS-Anforderung mit dem wpad-Hostnamen, empfĂ€ngt die entsprechende IP-Adresse und versucht, ĂŒber HTTP auf die Datei wpad.dat zuzugreifen, in der Informationen zu den Proxyeinstellungen gespeichert sind.

Infolgedessen kann der Angreifer LLMNR / NBNS-Spoofing durchfĂŒhren und dem Opfer seine Datei wpad.dat zur VerfĂŒgung stellen. Infolgedessen wird der gesamte HTTP- und HTTPS-Verkehr durch den Angreifer geleitet.

Empfohlene Tools: Responder, mitm6

4) Router-Werbung
Wie Sie dem Speicherauszug entnehmen können, gibt es im Netzwerk GerĂ€te mit aktiviertem IPv6. WĂ€hrend Sie sich im Netzwerk befinden, können Sie versuchen, Nachrichten an die IPv6-Router-AnkĂŒndigung des Opfers zu senden, um das Standard-Gateway oder den DNS-Server zu Ă€ndern.

RA-Nachrichten (Router Advertisement) sind Teil des SLAAC-Mechanismus (Stateless Address Autoconfiguration), der erforderlich ist, um IPv6-Adressen in einem Netzwerk automatisch zu erhalten, ohne einen DHCPv6-Server zu verwenden oder in Verbindung damit. Dies wird erreicht, indem regelmĂ€ĂŸig Multicast-RA-Nachrichten an den Router gesendet werden, die die Standard-Gateway-Adresse, das NetzwerkprĂ€fix, die DNS-Serveradresse und das DomĂ€nenprĂ€fix enthalten.

Empfohlene Tools: Rohpaket

5) DHCP-Spoofing
In einem Speicherauszug werden DHCP-Erkennungsanforderungen von demselben GerÀt in einigen Intervallen wiederholt. Sie können Schlussfolgerungen zum Fehlen eines DHCP-Servers in diesem Netzwerk ziehen und auf die nÀchste Erkennungsanforderung antworten, indem Sie das Opfer als Standard-Gateway zum GerÀt angeben.

Empfohlene Werkzeuge: Yersinia

6) HSRP-Spoofing
Außerdem können HSRP-Pakete im Speicherauszug angezeigt werden. Das Hot Standby Router Protocol kann die VerfĂŒgbarkeit von Routern erhöhen, die als Standardgateway fungieren. 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-. . ! 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 , ~.

:
* 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 .

Warum so

, « », :

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


, — , “” , , , :

  • , , others
  • , , others

.

POSIX Access Control Lists


— /. , ACL, , “ + ”

POSIX ACLs, — , . ACL, .

Beispiel

. 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 — , , . Aber. , 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

?

:

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.

. Vielen Dank fĂŒr Ihre Aufmerksamkeit!



Digital Security

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

. , 50 . , “ ” - )

. 29 , 43.5. 24% .

:



, , , , , . , , . .

, , , , .

, , :



( !), , , , “ ”.

- , , . , , Summer of Hack 2019.

, . .

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


All Articles