In einer Welt, in der Datenschutzverletzungen und Cyberangriffe immer häufiger und raffinierter werden, ist der Bedarf an qualifizierten Fachleuten auf dem Gebiet der offensiven Sicherheit höher denn je. Web-Penetrationstests, eine Untergruppe offensiver Sicherheitsvorkehrungen, beinhalten die Identifizierung und Ausnutzung von Sicherheitslücken in Webanwendungen, um deren Sicherheitslage zu bewerten.
Ich schreibe diesen Artikel, um meine Erfahrungen mit der Durchführung meines ersten Web-Penetrationstestprojekts zu teilen. Ich hoffe, es wird den Fachleuten in diesem Bereich helfen zu verstehen, was sie erwartet, wie sie sich vorbereiten und wie sie ihre Fähigkeiten in den Bereichen Web Application Security (AppSec) und Penetrationstests verbessern können.
Hintergrund
Als ich anfing, als Application Security Engineer zu arbeiten und mehr Erfahrung mit Web-Schwachstellen wie XSS, NoSQLi, Prototype Pollution, SSRF, CSRF, RCE usw. sammelte und ein Scan-Tool entwickelte, haben meine beiden Security- und AppSec-Leiter Rune und Harrison bat um ein Treffen mit mir, um über ein internes Web-Pentesting-Projekt zu sprechen, das sie mir zuweisen mussten und das sie auch unserem präsentieren mussten Technischer Leiter Cullen.
Ich wurde gebeten, einen internen Web-Pentest durchzuführen und einen Bericht zu verfassen, der die
- Einführung
- Ziele
- Geltungsbereich
- Prüfungszeitraum/Dauer
- Methodologie
- Sicherheitslücken, einschließlich der Behebung jedes Befundes.
Ich habe am 4. April 2022 angefangen, den Web-Pentest durchzuführen.
Erfahrung
Während des Assessments gaben meine Führungskräfte wertvolles Feedback und ermutigten mich, meine Fähigkeiten im Bereich Präsentation, Englisch (da meine Hauptsprache Spanisch ist) und das Verfassen von Berichten zu verbessern. Das Verfassen von Berichten ist zwar mühsam, aber ein entscheidender Teil eines Penetrationstestprojekts, und man sollte sich damit vertraut machen.
Es ist üblich, dass Sie sich nicht in der Lage fühlen, auf einem Niveau zu arbeiten, von dem Sie glauben, dass Sie es in diesem Bereich nicht können. Dieses Gefühl ist oft das Ergebnis von ängstlichem Überdenken. Es ist wichtig, solchen sinnlosen Emotionen nicht viel Aufmerksamkeit zu schenken.
Ziele
Ziel dieses Web-Assessments ist es, die folgenden Punkte identifizieren zu können:
- Identifizieren Sie, ob eine Datenexfiltration möglich ist
- Helfen Sie uns festzustellen, ob die interne Webanwendung Sicherheitslücken aufweist
- Um sicherzustellen, dass keine vertraulichen Informationen durchgesickert sind
- Refactor-Code basierend auf dem Bericht
- Stellen Sie sicher, dass Kunden nicht über unser internes Webtool angesprochen werden können

Web-Penetrationstests
Für dieses Projekt hatte ich zwei Wochen Zeit für die Fertigstellung, eine Woche für die Bewertung und eine Woche für die Berichterstattung. Später im Abschnitt Ressourcen werden Sie die Tools und Artikel sehen, die mir bei diesem Projekt geholfen haben.
Aufzählung
Das erste, was ich beim Starten des Prozesses getan habe, war, die Anwendung aufzuzählen. Ich habe so viele Informationen wie möglich erhalten, die mir helfen könnten, die Angriffsfläche zu verstehen. Diese Informationen können Details über verfügbare Dienste, Benutzernamen, Dateien, Subdomänen, Endpunkte oder andere Informationen oder Muster enthalten, die für einen Angreifer nützlich sein könnten.
Bewertung
Ich habe zwei Ansätze für die Bewertung verwendet: eine Quellcode-Überprüfung (Whitebox) und eine externe Bewertung (Blackbox). Diese beiden, kombiniert mit dem Debugging, halfen mir, den Datenfluss der Anwendung besser zu verstehen, sodass ich Senken oder gefährlichen Code identifizieren konnte, der ausgenutzt werden könnte. Desinfizieren und Filtern waren auch Dinge, auf die ich während der Bewertung überprüft habe.
Definitionen
Sinken
Eine „Senke“ ist eine Funktion oder Methode, die potenziell ein Sicherheitsrisiko darstellen kann, wenn ein Angreifer ihre Eingabe kontrollieren kann. Diese sollten besonders in Sprachen und Umgebungen wie NodeJS beachtet werden, das für serverseitiges Scripting verwendet wird und besonders anfällig für Angriffe wie Remote Code Execution (RCE), SQL Injection oder Cross-Site Scripting (XSS) ist
Whitebox-Sicherheitstests
Whitebox-Tests, auch Clear Box, Glass Box oder Structural Testing genannt, beinhalten eine detaillierte Untersuchung der internen Logik und Struktur des Codes. Whitebox-Tests können versteckte Fehler identifizieren, die auf der Benutzeroberfläche der Anwendung möglicherweise nicht sichtbar sind.
Blackbox-Sicherheitstests
Blackbox-Tests, auch dynamische Tests oder Verhaltenstests genannt, beinhalten das Testen der Funktionalität der Anwendung, ohne die interne Funktionsweise oder den Quellcode zu kennen. Blackbox-Tests können durchgeführt werden, ohne den Code oder die Architektur der Anwendung zu kennen, und sie können Sicherheitslücken identifizieren, die aus einer statischen Analyse des Codes möglicherweise nicht ersichtlich sind.
Desinfizierung
Bei der Desinfektion werden Benutzereingaben bereinigt und validiert, um sicherzustellen, dass sie keinen bösartigen Code oder Daten enthalten. Dies kann das Entfernen oder Entfernen von Sonderzeichen, das Entfernen von HTML-Tags oder das Konvertieren der Eingabe in ein sicheres Format beinhalten.
Filterung
Beim Filtern wird die Benutzereingabe auf einen bestimmten Satz zulässiger Werte oder Zeichen beschränkt. Dies kann beinhalten, die Eingabe anhand einer Whitelist zulässiger Werte zu überprüfen oder einen regulären Ausdruck zu verwenden, um sicherzustellen, dass die Eingabe einem bestimmten Format entspricht.
Da es sich bei unserer Anwendung hauptsächlich um eine NodeJS/JavaScript-Anwendung handelt, finden Sie hier eine Liste einiger gängiger Node.js Senken, die Sie bei Sicherheitstests beachten sollten:
- Remotecodeausführung (RCE)
- eval (): Wertet JavaScript-Code aus, der als String dargestellt wird.
- Function (): Der Konstruktor erstellt eine neue Funktionsinstanz.
- setTimeout (): Führt eine Funktion oder einen ausgewerteten Ausdruck nach einer bestimmten Anzahl von Millisekunden aus.
- setInterval (): Führt eine Funktion oder einen ausgewerteten Ausdruck wiederholt aus, mit einer bestimmten Verzögerung zwischen jedem Aufruf.
- exec (): Eine Methode aus dem Modul child_process, die eine Shell erzeugt und einen Befehl ausführt.
- Befehlsinjektion
- exec (): Eine Methode aus dem Modul child_process.
- execFile (): Eine Methode aus dem Modul child_process.
- spawn (): Eine Methode aus dem Modul child_process.
- SQL-Injektion
- Jede Methode, die mit einer Datenbank interagiert (z. B. mithilfe von Bibliotheken wie mysql, mongoose, sequelize usw.), insbesondere wenn Benutzereingaben involviert sind.
- Pfaddurchquerung
- fs.readFile (): Eine Methode aus dem fs-Modul, die den Inhalt einer Datei liest.
- fs.readdir (): Eine Methode aus dem fs-Modul, die den Inhalt eines Verzeichnisses liest.
- fs.writeFile (): Eine Methode aus dem fs-Modul, die Daten in eine Datei schreibt.
- Site-übergreifendes Scripting (XSS)
- res.send (): Eine Methode aus dem Express-Modul, die eine HTTP-Antwort sendet.
- res.json (): Eine Methode aus dem Express-Modul, die eine JSON-Antwort sendet.
- Diensteverweigerung (DoS)
- Buffer (): Der Konstruktor erstellt eine neue Pufferinstanz.
- Jede Methode, die aus dem Dateisystem oder dem Netzwerk liest.
- Serverseitige Anforderungsfälschung (SSRF)
- Jede Methode, die HTTP-Anfragen an andere Server stellt (z. B. mithilfe von Bibliotheken wie Axios, Request, Fetch usw.), insbesondere wenn Benutzereingaben beteiligt sind.
Berichterstattung
Während ich den Web-Penetrationstest durchführte, dokumentierte ich gleichzeitig, was getestet wurde: die gefundenen Sicherheitslücken, deren Schweregrad und mögliche Auswirkungen. Ein guter Bericht listet nicht nur die Sicherheitslücken auf, sondern gibt auch Empfehlungen, wie sie behoben werden können. Dies hilft beim Verständnis der aktuellen Sicherheitslage der Anwendung. Eine detaillierte Berichterstattung kann aus rechtlichen oder Compliance-Gründen erforderlich sein. Verschiedene Interessengruppen (z. B. Management, Entwickler, Sicherheitsteam, Auditoren und Kunden) müssen möglicherweise über die Ergebnisse der Penetrationstests informiert werden. Als AppSec-Ingenieur bin ich dafür verantwortlich, so viele Informationen wie möglich bereitzustellen, damit Entwickler die Sicherheitslücken leichter beheben können.
In dieser Phase der Bewertung ist dies die Reihenfolge der Struktur, die ich für die Berichterstattung verwendet habe:
# Inhaltsverzeichnis
1. [Einführung] (#introduction)
2. [Ziele] (#objectives)
3. [Bereiche] (#scopes)
4. [Testzeitraum und Dauer] (#test -period-and-duration)
5. [Methoden für Penetrationstests] (#penetration -test-methodologies)
6. [Bewertung] (#assessment)
## Einführung
(Inhalt des Einführungsabschnitts)
## Ziele
(Inhalt des Abschnitts „Ziele“)
## Bereiche
(Inhalt des Abschnitts Geltungsbereiche)
## Testzeitraum und Dauer
(Inhalt des Abschnitts Testzeitraum und Dauer)
## Methoden für Penetrationstests
(Inhalt des Abschnitts Methoden für Penetrationstests)
## Bewertung
(Inhalt des Abschnitts „Bewertung“, einschließlich Behebung nach der Beschreibung und Erläuterung der Sicherheitslücke)
Fazit
Zusammenfassend lässt sich sagen, dass mein erstes Web-Penetrationstestprojekt eine aufschlussreiche Erfahrung war. Es hat nicht nur meine technischen Fähigkeiten verbessert, sondern auch meine Fähigkeiten zum Verfassen von Berichten und zur Kommunikation verbessert. Denken Sie daran, dass gründliche und detaillierte Tests und Berichte für die Sicherheit der Anwendung und des Unternehmens von entscheidender Bedeutung sind. Sei auch nicht zu hart zu dir selbst; es ist normal, dass du dich überfordert fühlst, aber mit Übung und Entschlossenheit wirst du besser werden.
Empfehlungen
Für diejenigen, die mit Web-Penetrationstests beginnen, würde ich Folgendes empfehlen:
- Erlernen Sie die Grundlagen: Das Verständnis der Grundlagen von Webtechnologien, Programmiersprachen und Sicherheitskonzepten ist von entscheidender Bedeutung.
- Üben: Nutze Plattformen wie Hack The Box, CTF Challenges, Portswigger Academy, Pentesterlabs und andere Online-Ressourcen, um deine Fähigkeiten zu üben.
- Feedback einholen: Scheuen Sie sich nicht, Ihre Kollegen oder die Online-Community um Feedback zu bitten.
- Bleiben Sie auf dem Laufenden: Die Welt der Cybersicherheit entwickelt sich ständig weiter. Daher ist es wichtig, über die neuesten Trends, Tools und Sicherheitslücken auf dem Laufenden zu bleiben.
- Verfassen von Berichten: Unterschätzen Sie nicht, wie wichtig das Verfassen von Berichten ist. Dies ist nicht nur für die Kommunikation Ihrer Ergebnisse unerlässlich, sondern auch aus rechtlichen und Compliance-Gründen.
Ressourcen
Im Folgenden finden Sie einige nützliche Ressourcen:
- Spucksuite
- Hacktricks
- Nutzlast all die Dinge
- SEC Listen
- OWASP-Spickzettel
- Einführung in die Schwachstellenforschung
- Portswigger Academy
- Pentesterlabs
- ffuf
- Bug Bounty Framework von Harrison
- Effektive Pentest-Berichte schreiben
- JavaScript für Hacker
Danksagungen
Ich möchte meinen Führern danken, Rune und Harrison, für ihre Beratung und ihr Feedback während des gesamten Projekts. Denken Sie daran, dass der Weg zur offensiven Sicherheit eine Herausforderung sein kann, aber er ist unglaublich lohnend und für die Sicherheit der digitalen Welt unerlässlich. Viel Glück auf deiner Reise!