Hallo allerseits!
Mein Name ist Andrew. Seit 10 Jahren suche ich nach Schwachstellen in verschiedenen Webdiensten. und bereit, mein Wissen mit Ihnen zu teilen. Letzten Mai habe ich auf der
Heisenbug- Konferenz darüber berichtet, und jetzt bin ich bereit, mein Wissen auch hier in den offenen Räumen von Habr zu teilen. Also fangen wir an.
Einmal
fand ich
eine Schwachstelle auf den Servern der berüchtigten Firma Facebook. Die Jungs haben vergessen, ImageMagick (die Bibliothek für die Bildverarbeitung) zu aktualisieren und haben dafür bezahlt :) Mit diesem Beispiel wollte ich zeigen, dass wir alle Menschen sind und Fehler machen können, egal in welchen Unternehmen und in welchen Positionen wir arbeiten. Das einzige Problem ist, dass diese Fehler zu allen möglichen Risiken führen können.
Je komplizierter Ihre Anwendung / Website / Ihr Tool ist, desto wahrscheinlicher ist es, dass etwas schief geht.
Sie müssen nach Schwachstellen suchen. Es ist dumm, das überhaupt nicht zu tun.
Die folgenden Elemente können Phasen der Überprüfung von Webanwendungen sein:
- Vorbereitung:
- Definieren Sie Einstiegspunkte - tatsächlich, woher die Daten in der Anwendung stammen können.
- Technologiebestand identifizieren;
- Bestimmen Sie, welche Schwachstellen überprüft werden müssen.
- Überprüfung Sie müssen alle Schwachstellen überprüfen, die für den technischen Bereich Ihrer Webanwendung gelten.
- Code-Analyse. Seien Sie nicht faul, überspringen Sie diesen Artikel nicht. In einigen Fällen ist es ohne Zugriff auf den Code schwierig, Schwachstellen zu finden, und Sie können auch die Filterung umgehen, die möglicherweise in Ihre Anwendung eingebettet ist.
Ich werde darüber ausführlich sprechen.
Also Vorbereitung. Ich werde mich nicht auf alle Arten von Sicherheitslücken konzentrieren, da sonst die Textmenge im Artikel alle denkbaren und unvorstellbaren Größen überschreitet. Ich empfehle Ihnen, aus der
OWASP Top Ten-Projektliste zu lernen. Alle paar Jahre erstellt
das OWASP-Konsortium eine Liste der derzeit wichtigsten Schwachstellen. Wir werden einige davon im Detail betrachten.
Xss
XSS (Cross-Site Scripting) ist ein Angriff auf einen Benutzer, bei dem ein Angreifer ein beliebiges Skript im Kontext des Browsers seines Opfers ausführen kann. Meistens impliziert dies die Implementierung von
HTML- Tags und
JS- Skripten.
Beispiel: Zu einer Zeit gab es einen solchen Dienst
Yahoo! Ad Exchange Das Formular zur Kennwortwiederherstellung hatte den Parameter "
URL zurückgeben ". Es kann angeben, zu welcher Seite nach dem Zurücksetzen des Kennworts zurückgekehrt werden soll. Wenn Sie dort den einen oder anderen Vektor einfügen, der zur Ausführung des
JS- Codes führt, können Sie alle
Cookies des Benutzers
abrufen . Wir werden analysieren, wie dies geschieht und warum.

Hier ist der Vektor selbst. Auf einmal:

Um eine Injektion durchzuführen, müssen Sie den Kontext der Variablen verlassen, in der wir uns standardmäßig befanden (standardmäßig - dies hat der Programmierer beim Schreiben des Codes angenommen).
Unten ist der ursprüngliche Wert. Dies ist ein gültiges Verhalten.

Wir sehen, dass returnURL = / login.jsp
Dies fällt in den Wert des
<input> -Tags .
Wenn wir nach
jsp ein Anführungszeichen
einfügen , sehen wir, dass die
HTML- Syntax überfüllt ist. Glücklicherweise ist die
HTML- Sprache nicht streng, der Parser überspringt und es gibt keine Probleme:

Füge ein weiteres Zeichen hinzu. Hier sind wir völlig aus dem Kontext des
<input> -Tags heraus :

Jetzt fügen wir die Öffnung des
<svg> -Tags hinzu und erhalten zwei gültige Tags in Bezug auf die Syntax:

Fügen Sie als Nächstes den gesamten Angriffsvektor hinzu:

In diesem Fall wird das
SVG- Bild gezeichnet. Mit dem
JavaScript- Handler "
onload " führen wir eine Warnung mit den
Cookies des Dokuments aus. Das ist alles! Der Angreifer hat Ihre
Cookies erhalten .
Wenn im Beweis nur die Warnung selbst angezeigt wird, ist es für einen Angreifer nicht schwierig, Cookies an einen von ihm kontrollierten Server zu senden und im schlimmsten Fall Ihr Konto zu beschlagnahmen. Mal sehen, wie es wieder aussieht:

Es gibt auch mehr Angriffsmethoden auf den Client. Ich werde einige Beispiele mit einer kurzen Beschreibung geben. Aber zuerst müssen Sie verstehen, wie Sie aus dem Kontext herauskommen:
- Aus dem Zusammenhang gerissen. Diese 6 Zeichen helfen dabei, nicht nur aus dem Kontext des HTML-Parameterwerts herauszukommen, sondern auch aus vielen anderen:
-> '">
Nun, in der Tat, die zwei einfachsten Angriffsvektoren:
- Fügen Sie insbesondere Links ein. Aber im allgemeinen Fall - Ändern des Erscheinungsbilds der Seite. Beispielsweise können sie HTML-Code in Ihre Seite einbetten und ein gefälschtes Fenster anzeigen, in dem nach Daten gefragt wird:

Die Zeichenfolge " aaaa " zeigt auf google.com . Sie können sehen, dass der Link auf der Seite gerendert wird, aber Sie sehen ihn möglicherweise nicht, aber dies hebt seine Anwesenheit im Code nicht auf. In beiden Fällen kann der Fall als abgeschlossen betrachtet werden. - Skriptausführung, zum Beispiel Abfangen von Benutzercookies:

Wo und wie nach XSS suchen?
Suchen Sie zunächst die Informations- / Datenausgabefunktionen auf der Seite. Analysieren Sie, welche Daten dort ankommen? Hier kommt das Konzept einer
nicht vertrauenswürdigen Quelle . Und so ist in erster Linie
Ihr Benutzer . Angriffsvektoren können in anderen Quellen enthalten sein: RSS-Feeds, andere externe und interne Dienste.
Hier ist ein Beispiel aus dem wirklichen Leben: Ich arbeite für SEMrush IT. Wir entwickeln eine Online-Plattform, die ein universelles Tool für Online-Vermarkter ist. Ein Dienst speicherte Daten, der andere folgerte, jedes der Teams verließ sich aufeinander. Es stellte sich heraus, dass beim zweiten Dienst
XSS aufgrund der fehlenden ordnungsgemäßen Verarbeitung der Ausgabedaten entstand und der erste Befehl es überhaupt nicht für notwendig hielt, die eingehenden Daten zu filtern in irgendeiner Weise und hielt sie "
wie es ist ". Schlussfolgerung: Wenn Sie nicht wissen, wie diese oder jene Daten gespeichert werden, sollten Sie sie als nicht vertrauenswürdig betrachten. Oder vereinbaren Sie im Voraus, wer speichert und wie Daten filtert und anzeigt.
Wenn Sie bereits Daten aus nicht vertrauenswürdigen Quellen haben, empfehle ich:
- Untersuchung der Filterung eingehender Daten;
- Untersuchen Sie den Kontext der Ausgabe. Nicht in allen Fällen kann XSS ausgeführt werden, auch ohne Filterung. Zum Beispiel, wenn der Inhaltstyp der Antwort lautet: text / plain;
- Verlassen Sie sich nicht auf das Filtern eingebetteter Sicherheitssystem-Frameworks.
SQL-Injection
Implementierung von SQL-Code (English SQL Injection) - Einführung in die Abfrage der Datenbank von Anweisungen, die dort nicht impliziert waren.
Beispiel (nicht aus dem Leben, aber auch gut):
Wir sehen ein Skript, das eine Benutzertabelle anzeigt. In diesem Fall kann er nach Benutzername suchen.
Rechts wird angezeigt, wie die Abfrage an die Datenbank aussieht, und links wird das Ergebnis des Skripts im Browser angezeigt.

Um zu testen und zumindest ein primäres Ergebnis zu erhalten, fügen wir zwei Anführungszeichen in den Wert des Namensparameters ein. Einzel und Doppel:

Wir sehen, dass aus Sicht der Ausgabe alles auseinander fiel, der Tisch komplett verschwand. Die Anfrage erhält außerdem die zusätzlichen 2 Anführungszeichen. Die gesamte Syntax der
SQL- Abfrage wird verletzt.
Wenn wir diese Konstruktion nehmen und zum Parameterwert hinzufügen (
Hrsg.: Siehe im gelben Feld ), erhalten wir eine absolut gültige Anfrage. Die Seitenausgabe ist vollständig identisch mit der ersten Anforderung, die keine Injektion enthielt:

Um zu überprüfen, ob eine Sicherheitsanfälligkeit vorliegt, fügen wir anstelle der Einheit eine Zwei hinzu:

Es stellt sich heraus, dass die Anforderung aus Sicht der Booleschen Logik falsch wird und daher keine Daten enthält. Im Gegensatz zu dem Moment, in dem wir einen Fehler hatten, haben wir jedoch die Ausgabe der Tabelle selbst.
Um nicht alles aufzulisten, was sich in verschiedenen Datenbankmodulen und Abfragen verschiedener Typen befindet, habe ich alles auf eine Zeile reduziert:

Dies ist etwas, das Sie versuchen können, in den Parameter einzugeben, und dann entsprechend den Unterschieden in den Antworten versuchen, zu verstehen, was passiert, ob es eine Sicherheitslücke gibt oder nicht. Etwa 80% der Fälle können Sie mit dieser Manipulation abdecken.
Es bleiben 20% der schwierigen Situationen, in denen Sie keine Informationen erhalten, z. B. verschachtelte Abfragen / Filterung usw. In meiner Praxis habe ich mich nur einmal mit einem ähnlichen getroffen. Dann musste ich die Filterung auf der Serviceseite umgehen.
Was ist die Gefahr in SQL?
- Aus dem Offensichtlichen - Informationsleck . Wenn ein Angreifer Abfragen an Ihre Datenbanken generieren konnte, kann er auf die eine oder andere Weise Werte abrufen, die nicht ausgegeben werden sollten (Kennwort-Hashes, Client-Adressen usw.).
- Datenänderung . Jetzt verwenden viele Entwickler Datenbanken über ORM- Systeme. Diese Systeme selbst ermöglichen es Ihnen standardmäßig, mehrere Abfragen gleichzeitig durchzuführen. Mit der SQL-Syntax können Sie dies auch tun. Wenn es eine Sicherheitsanfälligkeit gibt, kann sich alles nicht nur auf die Auswahl der Daten, sondern auch auf deren Änderung beziehen (bis zum Löschen von Tabellen, Ändern der Datenbankstruktur usw.).
In der gleichen Situation ist eine Erhöhung der Benutzerrechte möglich. Ändern Sie die Felder in bestimmten Tabellen (z. B. setzen Sie is_admins = true in die Benutzerdatenbank ) und erhöhen Sie dadurch Ihre Rechte gegenüber dem Administrator. - DoS . In einigen Fällen kann eine Injektion zu einem Denial-of-Service führen. Es werden mehrere umfangreiche Abfragen an die Datenbank generiert, die in mehreren Threads gestartet werden, und Ihr Dienst funktioniert möglicherweise für einige Zeit nicht mehr.
- Das Lesen von Systemdateien ist eine weitere Katastrophe, die SQL Injection mit sich bringen kann. Das Auftreten dieses Risikos hängt davon ab, welches Datenbanksystem Sie verwenden und welcher Benutzer damit arbeitet (privilegiert oder nicht).
- RCE (Remote Code Execution) ist die Codeausführung. Dies hängt direkt vom verwendeten Datenbanktyp ab (zuvor war dies standardmäßig mit den Standarddatenbankeinstellungen in MSSQL möglich).
Die folgende Tabelle zeigt die Sicherheitsanfälligkeiten in der
SQL- Abfrage. Natürlich müssen Sie es nicht auswendig lernen. Darüber hinaus sind dies nicht alle möglichen Optionen, sondern lediglich Beispiele. Beachten Sie nur, dass die Stellen, an denen die Injection in die
SQL- Abfrage erfolgen kann, wenn Rohdaten dort ankommen, rot hervorgehoben sind. Ein erfahrener Angreifer kann einen Weg finden, dies auszunutzen. Sei vorsichtig und aufmerksam.

SSRF (Server Side Request Forgery)
Wörtliche Übersetzung - gefälschte Anfragen auf der Serverseite. Dies ist ein Angriff, mit dem Sie die Daten, die Sie an die Anwendung senden, bearbeiten können, sodass Sie die Anforderung nicht an die Stelle stellen müssen, an der die Geschäftslogik ursprünglich geplant war.
Die Funktionsweise von
SSRF ist in der folgenden Abbildung dargestellt:

Es gibt einen Angreifer, es gibt Ihren Server, der von der
Firewall geschlossen wird, aber gleichzeitig gibt es eine Funktionalität, mit der Sie weitere Anforderungen im Namen des Servers stellen können.
Wenn diese Funktionalität nicht ordnungsgemäß geschützt und / oder falsch ist, wie es normalerweise der Fall ist :), verarbeitet eingehende Daten, kann sich der Angreifer an
Memcached ,
Redis wenden oder Zugriff auf interne Ressourcen des Opfers erhalten.
Betrachten Sie als anschaulicheres Beispiel den Stand, den SEMrush für die interne Mitarbeiterschulung verwendet.
Es ist wichtig, auf die Bedeutung der "
Avatar-URL " zu achten:

Hier achten wir auf 2 Punkte:
- Avatar-URL selbst
- und die Möglichkeit, es mithilfe einer Datei herunterzuladen.
Bitte beachten Sie, dass das Feld "
Avatar-URL " ein Textfeld für die Eingabe ist. Dies bedeutet, dass wir diesen Wert bearbeiten können. Versuchen wir, auf dem Avatar das vielleicht berühmteste Bild im Internet zu platzieren - Googlebot von der
404-Fehlerseite .
Mach es einmal:

Machen Sie zwei - klicken Sie auf "
Speichern ". Wir bekommen einen Roboter anstelle meines Fotos:

Hier ist zu beachten, dass sich der Wert der "
Avatar-URL " in einen lokalen Pfad geändert hat - anscheinend hat die Anwendung ein Bild angefordert, es auf dem Server gespeichert und einen neuen Wert ersetzt.
Wir gehen weiter.
Geben Sie im Feld "
URL-Avatar " die
Wertedatei ein: /// etc / passwd . Mit diesem Design können Sie auf die Dateistruktur zugreifen. In einigen Bibliotheken, die für die Arbeit mit
HTTP verwendet werden , ist die Arbeit mit der Dateistruktur standardmäßig aktiviert und empfängt Daten von den Servern, auf denen sie gestartet wurden:

Was passiert nach dem Klicken auf die Schaltfläche "
Speichern "?
Erstens wurde das Bild zu „
Fledermaus “, und zweitens änderte sich der Pfad zur Datei.

Wenn wir versuchen, dieses Bild im Browser anzufordern, wird uns nichts angezeigt (die Datei ist "
kaputt "). Aber wir sind nicht der erste Tag in der Informationssicherheit, wir wissen, was zu tun ist :) Durch einfache Manipulationen erhalten wir den Inhalt der Datei auf unserem Computer:

Mithilfe dieser Sicherheitsanfälligkeit kann ich als Angreifer dem Benutzer, der den Webdienst ausführt, alle Quellcodes Ihres Dienstes und andere Daten zum Lesen zur Verfügung stellen.
Schauen wir uns die Gefahren der SSRF an:
- Port-Scan. Für ein externes Netzwerk besteht Ihr Dienst aus einem Einstiegspunkt und zwei Ports (http und https). Durch das Scannen von Ports aus Ihrer Infrastruktur heraus kann ein Angreifer offene Ports erkennen.
- Hostbasierte Authentifizierung umgehen. Was ist der Punkt? Möglicherweise gibt es in Ihrer Struktur Dienste, die nur für bestimmte Ressourcen verfügbar sind (siehe: IP-Whitelist). Wenn sich Ihr anfälliger Server in der weißen Liste befindet, erhalten Sie Zugriff auf die Dienste, die ihm zur Verfügung stehen, und können sie daher manipulieren.
- Wenn Sie die Entwicklung des oben genannten Angriffs fortsetzen, können Sie weiterhin anfällige Programme ausnutzen, die im Intranet oder auf dem lokalen Server ausgeführt werden. Sehr oft gibt es Situationen, in denen die interne Infrastruktur, auf die von außen nicht zugegriffen werden kann, schlecht überwacht wird (Versionen / Sicherheitspatches usw. werden nicht immer aktualisiert). Dies kann auch zu Angriffen und Datendiebstahl führen.
- Lokale Daten lesen. Ich habe es oben mit einem Beispiel gezeigt. Ihre Konfigurationen können gelesen und abgerufen werden, Token und Passwörter.
Wo kann man nach SSRF suchen?
Dies ist keine Standardanfälligkeit. Es kann an verschiedenen, oft an den unerwartetsten Orten gefunden werden. In dieser Situation funktioniert die Technik „Schau hier, aber du siehst vielleicht nicht einmal hier“ nicht.
Anzeichen einer möglichen
SSRF :
- Webhook . Wenn sie schlecht konfiguriert sind und die Firewall auf den Servern, von denen Webhooks Anforderungen stellen, nicht ordnungsgemäß konfiguriert ist, kann eine Sicherheitsanfälligkeit festgestellt werden.
- HTML-Konvertierung . Versuchen Sie, ein <iframe> - , <img> - , <base> - , <script> - oder CSS- URL- Konstrukt einzubetten , das auf einen internen Dienst verweist.
- Gelöschte Dateien herunterladen . Erinnerst du dich an das Avatar-Beispiel? Wenn ein Benutzer die Möglichkeit hat, Daten per URL auf den Server hochzuladen, ist dies mit großen Problemen verbunden. Versuchen Sie, die URL mit dem Port zu senden, und sehen Sie, welche Inhalte hochgeladen werden.
Wie suche ich nach SSRF?
XXE (XML External Entity)
Ich werde die Geschichte wie immer mit einem Beispiel beginnen, damit es klarer wird:
Im oben genannten SEMrush-Dienst gibt es ein solches Tool, das sich mit der Inhaltsanalyse befasst. Der Benutzer gibt die URL seiner Website oder der Website eines Mitbewerbers ein, und bevor er sie analysiert, lädt der Dienst genau diesen Inhalt herunter. Sehen Sie sich das Video an:
Zum Herunterladen greift der Dienst auf die angegebene Site zu und der Crawler lädt die Datei
sitemap.xml herunter. Und genau über dieses
XML sprechen wir in diesem Block.
Im Video können wir beobachten, wie die angreifende Site
sitemap.xml eine Definition der externen Entität
XXE hinzugefügt hat , die auf "
file: /// etc / hosts " verweist. Auf Linux-Systemen ist dies eine Datei, die beschreibt, welche IP den Hosts entspricht, wenn für sie keine
DNS- Einträge vorhanden sind.
Als nächstes gibt der Angreifer im
<loc> -Tag die Erweiterung dieser Variablen an. Nach dem Parsen des
XML und nach dem Verarbeiten des gesamten
XML im Fach wird der Wert in "
file: /// etc / hosts " in die
Standortvariable eingefügt (im Video rot hervorgehoben).
Der Angreifer startet den Start unseres Parsers, geht zu den Protokollen und hier erscheint eine Linie, die im Video weiß hervorgehoben ist. Dies ist der Inhalt der Datei "
file: /// etc / hosts ", die in der
GET- Anforderung in den Protokollen eines von ihr gesteuerten Servers abgerufen wurde.
Was weiter? Der Angreifer wird überprüfen, ob er Recht hatte. Der Dateiname wird in "
file: /// etc / fstab " geändert, der Parser erneut ausgeführt und Statistiken zum Ausführen von Prozessen abgerufen.
Und schließlich: "
file: /// etc / hostname ", starten Sie den Parser, gehen Sie zu den Protokollen und rufen Sie den
Hostnamen des Computers ab, auf dem wir uns befinden.
Dies ist ein echter Fehler, der von einer echten Person entdeckt wurde, die nicht mit unserem Unternehmen verwandt ist. Ich musste Asche auf meinen Kopf streuen und Geld bezahlen :)
Ein weiteres Beispiel für
XXE :

Angenommen, wir haben einen bestimmten
Endpunkt , der als
Beispiel.com/xxe bezeichnet wird .
Wir senden die
XML- Struktur an sie → in
XML deklarieren
wir die Entität
→ die Entität
bezieht sich auf die Systemdatei
/ etc / passwd und öffnet sich weiter im Hauptteil der Antwort → wir erhalten den Inhalt dieser Datei als Antwort.
Es ist erwähnenswert, dass dies nicht so oft vorkommt, wie wir möchten.
Warum funktioniert es?
XML- Dokumente sind ein strukturiertes Datenformat, mit dem Sie unter anderem die darin enthaltenen Datentypen mithilfe eines speziellen
DOCTYPE- Tags beschreiben können.
Datentypdefinition (DTD) - Die Definition von Datentypen in diesem
XML- Dokument. Es gibt drei Möglichkeiten, wie dies getan werden kann:
- Wenn das Dokument DTD unterstützt. Das folgende Beispiel zeigt einige XML-Dateien, in denen eine Bestellstruktur, ein Produktelement und ein Zählelement vorhanden sind (vermutlich: die Bestandsnummer des Produkts und die Anzahl der Artikel in der Bestellung). Die Reihenfolge ist das übergeordnete Element für diese beiden Elemente:

- Externe DTDs auf dem lokalen Server.
Wir machen dasselbe wie in der ersten Ausführungsform, aber wir machen alle Definitionen in einer separaten Datei, die sich auf dem lokalen Server befindet:

- Externe DTDs auf einem Server eines Drittanbieters:

Wenn Sie ein aufmerksamer Leser sind, haben Sie wahrscheinlich die Tatsache korreliert, dass die Möglichkeit, solche Anforderungen an Ihren Dienst zu stellen und externe
DTD- Schemata anzufordern, eine Sicherheitsanfälligkeit an sich ist, über die wir oben gesprochen haben, nämlich die
SSRF- Sicherheitsanfälligkeit.
Ein häufiges Ereignis: Entwickler beheben die
XXE- Sicherheitsanfälligkeit, vergessen jedoch, die Verarbeitung externer
DTDs zu verbieten und
SSRF abzurufen . Daraus ergeben sich keine fatalen Folgen, die Sie jedoch nicht vergessen sollten.
Was sind Entitäten in XML?
Entitäten in
XML . Was ist das? Dies ist eine Gelegenheit, bestimmte Werte zu definieren und sie in Variablen umzuwandeln. Entitäten haben drei verschiedene Typen:
Vordefiniert - vordefiniert.
Ermöglichen Sie ähnlich wie bei
HTML- Code die Verwendung von Zeichen, die Teil der Syntax der Sprache sind, als Textstruktur. Hier werden sie als Beispiel gegeben, damit Sie verstehen, was es ist. Ja, in den meisten Angriffen werden sie nicht verwendet, können aber in einigen Ausnahmefällen erforderlich sein.
Allgemein und
Parameter . Dies ist ein und dasselbe, nur die Syntax ihrer Deklaration ändert sich und wie sie nach der Deklaration aufgerufen werden können
Wo kann man nach XXE suchen?
Mehrere Optionen:
- XML- Verarbeitung in jeder Manifestation:
- Konvertieren Sie HTML in andere Formate.
- Umgang mit docx , xlsx und ähnlichen Formaten.
Wie suche ich sie?

Das Bild zeigt nur ein Beispiel für den Start. Es ist kein universeller Schlüssel. Es muss für die Formate optimiert werden, die Sie im untersuchten Dienst verwenden.
Das erste, was wir tun: Deklarieren Sie eine bestimmte Entität
Z , die auf den vom angreifenden Host kontrollierten Host zugreift, und erweitern Sie sie im Hauptteil des
XML- Dokuments.
Hier ist die zweite Option möglich - nur die Essenz von
Parameter . Unterscheidet sich von der ersten Anzeige (
% -Zeichen). Und um sich dieser Essenz zuzuwenden, wird der Hauptteil des Dokuments nicht mehr benötigt. Wir können direkt in der
DOCTYPE- Struktur darauf
zugreifen und diese Entität
verfügbar machen :

Das dritte Szenario besteht darin,
festzustellen, ob die Möglichkeit,
DOCTYPE von externen Diensten anzufordern,
aktiviert oder
deaktiviert ist:

Als nächstes betrachten wir die Ausgabe eines von uns gesteuerten Servers. Wenn wir einen Aufruf der
URL / Überprüfung von verschiedenen
IP- Adressen sehen, bedeutet dies, dass die Sicherheitsanfälligkeit mit hoher Wahrscheinlichkeit behoben wurde, und wir müssen nur herausfinden, wie wir interessantere Daten für uns erhalten können.

Was ist die Gefahr von
XXE ? Ich werde kurz und Punkt für Punkt schreiben:
- Lokale Dateien lesen;
- Zugang zu lokalen Ressourcen;
- Port / Host-Scan
- Nur-Text-Wrapper . Dies ist eine Gelegenheit, auf Ihre Dienste zuzugreifen, die mit dem Nur-Text-Protokoll arbeiten.
- Remote Code Execution (nicht oft). Es ist standardmäßig deaktiviert.
- DoS . Aufgrund der Tatsache, dass Entitäten verkettet werden können, ist es leicht möglich, eine exponentielle Zunahme der von diesen Parametern belegten Speichermenge zu erhalten. Das Ergebnis ist ein Milliarden-Lach-Angriff . Mit anderen Worten, Sie überlasten einfach den Speicher des angegriffenen Servers.
Abschließend möchte ich sagen, dass all dies (der Artikel und alle Kenntnisse, die Sie erworben haben) ohne praktische Anwendung keinen Sinn ergibt. Daher werde ich Sie nach einer echten Kleinigkeit fragen: Denken Sie an die Anwendung, die Sie gestern geschrieben / getestet haben, und versuchen Sie, sie auf Schwachstellen zu überprüfen. Gibt es Eingabeformulare oder
XML- Verarbeitung? Ist diese Anwendung geschützt? Wird die Filterung hinzugefügt und die
DTD deaktiviert?
Öffnen Sie das
SQLmap- Handbuch und finden Sie heraus, wie Sie Ihre Anwendung damit überprüfen können. Wenn er nichts findet, nehmen Sie ein anderes Tool, untersuchen Sie es und testen Sie Ihre Anwendung auf andere Schwachstellen. Wie ich zu Beginn sagte, untersucht der Artikel nur einige Schwachstellen, aber
Tausende von ihnen .
Ich glaube nicht, dass Sie absolut sicheren Code schreiben können. Es gibt immer Schwachstellen, die Sie nur
noch nicht gefunden haben.