80,443 - Pentesting Web-Methodik

Tip

Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Lernen & üben Sie Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Unterstützen Sie HackTricks

Basisinformationen

Der Web-Service ist der häufigste und umfangreichste Dienst und es gibt viele verschiedene Arten von Schwachstellen.

Standardport: 80 (HTTP), 443 (HTTPS)

PORT    STATE SERVICE
80/tcp  open  http
443/tcp open  ssl/https
nc -v domain.com 80 # GET / HTTP/1.0
openssl s_client -connect domain.com:443 # GET / HTTP/1.0

Web API Anleitung

Web API Pentesting

Methodology summary

In dieser Methodik gehen wir davon aus, dass du eine Domain (oder Subdomain) und nur diese angreifst. Wende diese Methodik also auf jede entdeckte Domain, Subdomain oder IP mit unbestimmtem Webserver innerhalb des Scopes an.

  • Beginne damit, identifying die technologies zu bestimmen, die vom Webserver verwendet werden. Suche nach tricks, die du während des weiteren Tests beachten solltest, wenn du die Tech erfolgreich identifizieren kannst.
  • Gibt es bekannte known vulnerability der Version der Technologie?
  • Wird irgendeine well known tech verwendet? Irgendein useful trick, um mehr Informationen zu extrahieren?
  • Irgendein specialised scanner, den man laufen lassen sollte (z.B. wpscan)?
  • Starte general purposes scanners. Man weiß nie, ob sie etwas finden oder interessante Informationen liefern.
  • Beginne mit den initial checks: robots, sitemap, 404 error und SSL/TLS scan (wenn HTTPS).
  • Beginne mit dem spidering der Webseite: Jetzt ist es Zeit, alle möglichen files, folders und parameters being used zu finden. Prüfe auch auf special findings.
  • Note that anytime a new directory is discovered during brute-forcing or spidering, it should be spidered.
  • Directory Brute-Forcing: Versuche, alle entdeckten Ordner zu brute-forcen, um neue files und directories zu finden.
  • Note that anytime a new directory is discovered during brute-forcing or spidering, it should be Brute-Forced.
  • Backups checking: Prüfe, ob du backups von discovered files finden kannst, indem du gängige Backup-Erweiterungen anhängst.
  • Brute-Force parameters: Versuche, hidden parameters zu finden.
  • Sobald du alle möglichen endpoints identifiziert hast, die user input akzeptieren, überprüfe sie auf alle Arten von damit verbundenen vulnerabilities.
  • Follow this checklist

Server Version (Vulnerable?)

Identify

Prüfe, ob es known vulnerabilities für die Serverversion gibt, die läuft.
Die HTTP headers and cookies of the response können sehr nützlich sein, um die technologies und/oder die version zu identify. Nmap scan kann die Serverversion identifizieren, aber auch die Tools whatweb, webtech oder https://builtwith.com/:

whatweb -a 1 <URL> #Stealthy
whatweb -a 3 <URL> #Aggresive
webtech -u <URL>
webanalyze -host https://google.com -crawl 2

Suche nach vulnerabilities of the web application version

Prüfe, ob ein WAF vorhanden ist

Web-Technik-Tricks

Einige tricks für das finding vulnerabilities in verschiedenen bekannten technologies, die verwendet werden:

Berücksichtige, dass die same domain unterschiedliche technologies auf verschiedenen ports, folders und subdomains nutzen kann.
Wenn die Webanwendung eine der bekannten tech/platform listed before oder eine andere verwendet, vergiss nicht, im Internet nach neuen Tricks zu suchen (und gib mir Bescheid!).

Quellcode-Review

Wenn der source code der Anwendung in github verfügbar ist, gibt es neben dem eigenständigen Durchführen eines White box test der Anwendung einige Informationen, die für das aktuelle Black-Box testing nützlich sein könnten:

  • Gibt es eine Change-log or Readme or Version-Datei oder etwas mit version info accessible über das Web?
  • Wie und wo sind die credentials gespeichert? Gibt es irgendeine (zugängliche?) file mit credentials (Benutzernamen oder Passwörtern)?
  • Sind passwords im plain text, encrypted oder welcher hashing algorithm wird verwendet?
  • Wird ein master key zum Verschlüsseln verwendet? Welcher algorithm kommt zum Einsatz?
  • Kannst du durch Ausnutzung einer vulnerability auf any of these files zugreifen?
  • Gibt es irgendwelche interesting information in the github (solved and not solved) issues? Oder in der commit history (vielleicht wurde ein password introduced inside an old commit)?

Source code Review / SAST Tools

Automatische Scanner

Allgemeine automatische Scanner

nikto -h <URL>
whatweb -a 4 <URL>
wapiti -u <URL>
W3af
zaproxy #You can use an API
nuclei -ut && nuclei -target <URL>

# https://github.com/ignis-sec/puff (client side vulns fuzzer)
node puff.js -w ./wordlist-examples/xss.txt -u "http://www.xssgame.com/f/m4KKGHi2rVUN/?query=FUZZ"

CMS-Scanner

Wenn ein CMS verwendet wird, vergiss nicht, einen Scanner auszuführen, vielleicht findest du etwas Interessantes:

Clusterd: JBoss, ColdFusion, WebLogic, Tomcat, Railo, Axis2, Glassfish
CMSScan: WordPress, Drupal, Joomla, vBulletin-Websites auf Sicherheitsprobleme prüfen. (GUI)
VulnX: Joomla, Wordpress, Drupal, PrestaShop, Opencart
CMSMap: (W)ordpress, (J)oomla, (D)rupal oder (M)oodle
droopscan: Drupal, Joomla, Moodle, Silverstripe, Wordpress

cmsmap [-f W] -F -d <URL>
wpscan --force update -e --url <URL>
joomscan --ec -u <URL>
joomlavs.rb #https://github.com/rastating/joomlavs

An diesem Punkt solltest du bereits einige Informationen über den vom Client verwendeten Webserver haben (falls Daten bereitgestellt wurden) und einige Tricks, die du während des Tests beachten solltest. Wenn du Glück hast, hast du sogar ein CMS gefunden und einen Scanner laufen lassen.

Schritt-für-Schritt Webanwendungs-Erkennung

Ab hier beginnen wir, mit der Webanwendung zu interagieren.

Erste Prüfungen

Standardseiten mit interessanten Informationen:

  • /robots.txt
  • /sitemap.xml
  • /crossdomain.xml
  • /clientaccesspolicy.xml
  • /.well-known/
  • Prüfe auch Kommentare auf der Haupt- und sekundären Seiten.

Fehler provozieren

Webserver können sich unerwartet verhalten, wenn ihnen ungewöhnliche Daten gesendet werden. Das kann Schwachstellen öffnen oder sensible Informationen preisgeben.

  • Rufe Fake-Seiten wie /whatever_fake.php (.aspx,.html,.etc) auf
  • Füge “[]”, “]]”, und “[[” in Cookie-Werte und Parameterwerte ein, um Fehler zu erzeugen
  • Erzeuge einen Fehler, indem du als Input /~randomthing/%s am Ende der URL angibst
  • Probiere verschiedene HTTP-Verben wie PATCH, DEBUG oder falsche wie FAKE

Prüfe, ob du Dateien hochladen kannst (PUT verb, WebDav)

Wenn du feststellst, dass WebDav aktiviert ist, du aber nicht genug Berechtigungen hast, um Dateien im Root-Ordner hochzuladen, versuche:

  • Brute Force Credentials
  • Lade Dateien via WebDav in die anderen gefundenen Ordner innerhalb der Webseite hoch. Möglicherweise hast du Berechtigungen, in anderen Ordnern Dateien hochzuladen.

SSL/TLS Schwachstellen

  • Wenn die Anwendung die Verwendung von HTTPS nicht erzwingt in irgendeinem Bereich, dann ist sie vulnerable to MitM
  • Wenn die Anwendung sensible Daten (Passwörter) per HTTP sendet, dann ist das eine kritische Schwachstelle.

Verwende testssl.sh um nach Schwachstellen zu prüfen (bei Bug-Bounty-Programmen werden solche Arten von Schwachstellen wahrscheinlich nicht akzeptiert) und verwende a2sv um die Schwachstellen erneut zu überprüfen:

./testssl.sh [--htmlfile] 10.10.10.10:443
#Use the --htmlfile to save the output inside an htmlfile also

# You can also use other tools, by testssl.sh at this momment is the best one (I think)
sslscan <host:port>
sslyze --regular <ip:port>

Informationen zu SSL/TLS-Schwachstellen:

Spidering

Starte eine Art spider innerhalb der Webanwendung. Das Ziel des spider ist, so viele Pfade wie möglich von der geprüften Anwendung zu finden. Daher sollten Web-Crawling und externe Quellen verwendet werden, um so viele gültige Pfade wie möglich zu entdecken.

  • gospider (go): HTML spider, LinkFinder in JS-Dateien und externe Quellen (Archive.org, CommonCrawl.org, VirusTotal.com).
  • hakrawler (go): HML spider, mit LinkFinder für JS-Dateien und Archive.org als externe Quelle.
  • dirhunt (python): HTML spider, zeigt außerdem “juicy files” an.
  • evine (go): Interaktiver CLI HTML spider. Sucht ebenfalls in Archive.org.
  • meg (go): Dieses Tool ist kein spider, kann aber nützlich sein. Du kannst einfach eine Datei mit Hosts und eine Datei mit Pfaden angeben und meg wird jeden Pfad auf jedem Host abrufen und die Antwort speichern.
  • urlgrab (go): HTML spider mit JS-Rendering-Fähigkeiten. Sieht aber so aus, als wäre es unmaintained; die vorcompilierte Version ist alt und der aktuelle Code kompiliert nicht.
  • gau (go): HTML spider, der externe Provider nutzt (wayback, otx, commoncrawl).
  • ParamSpider: Dieses Skript findet URLs mit Parametern und listet sie auf.
  • galer (go): HTML spider mit JS-Rendering-Fähigkeiten.
  • LinkFinder (python): HTML spider mit JS-beautify-Fähigkeiten, fähig, neue Pfade in JS-Dateien zu suchen. Es kann sich lohnen, auch JSScanner anzusehen, welches ein Wrapper für LinkFinder ist.
  • goLinkFinder (go): Extrahiert Endpoints sowohl aus HTML-Quelltext als auch aus eingebetteten JavaScript-Dateien. Nützlich für bug hunters, red teamer, infosec ninjas.
  • JSParser (python2.7): Ein Python 2.7 Skript, das Tornado und JSBeautifier nutzt, um relative URLs aus JavaScript-Dateien zu parsen. Nützlich zum einfachen Entdecken von AJAX-Requests. Wirkt unmaintained.
  • relative-url-extractor (ruby): Nimmt eine Datei (HTML) und extrahiert URLs mit einem schicken Regex, um relative URLs aus hässlichen (minified) Dateien zu finden und zu extrahieren.
  • JSFScan (bash, mehrere Tools): Sammelt interessante Informationen aus JS-Dateien mithilfe verschiedener Tools.
  • subjs (go): Findet JS-Dateien.
  • page-fetch (go): Lädt eine Seite in einem headless Browser und gibt alle URLs aus, die zum Laden der Seite geladen werden.
  • Feroxbuster (rust): Content-Discovery-Tool, das mehrere Optionen der vorherigen Tools kombiniert.
  • Javascript Parsing: Eine Burp-Extension, um Pfade und Parameter in JS-Dateien zu finden.
  • Sourcemapper: Ein Tool, das gegeben die .js.map URL den beautified JS-Code liefert.
  • xnLinkFinder: Ein Tool, das zur Entdeckung von Endpoints für ein gegebenes Ziel benutzt wird.
  • waymore: Entdeckt Links aus der Wayback Machine (lädt auch die Antworten aus Wayback herunter und sucht nach weiteren Links).
  • HTTPLoot (go): Crawlt (auch durch Ausfüllen von Formularen) und findet zudem sensitive Informationen mithilfe spezifischer Regexes.
  • SpiderSuite: Spider Suite ist ein fortgeschrittener Multi-Feature GUI Web Security Crawler/Spider, entwickelt für Cyber-Security-Profis.
  • jsluice (go): Ein Go-Paket und command-line tool zum Extrahieren von URLs, Pfaden, Secrets und anderen interessanten Daten aus JavaScript-Quellcode.
  • ParaForge: ParaForge ist eine einfache Burp Suite extension, um Parameter und Endpoints zu extrahieren aus Requests und daraus benutzerdefinierte Wordlists für Fuzzing und Enumeration zu erstellen.
  • katana (go): Großartiges Tool für diesen Zweck.
  • Crawley (go): Gibt jeden Link aus, den es finden kann.

Brute Force directories and files

Starte das brute-forcing vom Root-Verzeichnis und stelle sicher, dass alle gefundenen Verzeichnisse mit dieser Methode und alle Verzeichnisse, die durch das Spidering entdeckt wurden, brute-forced werden (du kannst dies rekursiv tun und die Namen der gefundenen Verzeichnisse am Anfang der verwendeten Wordlist anhängen).
Tools:

  • Dirb / Dirbuster - In Kali enthalten, alt (und langsam), aber funktional. Unterstützt self-signed Zertifikate und rekursive Suche. Im Vergleich zu den anderen Optionen zu langsam.
  • Dirsearch (python)**: Erlaubt keine self-signed Zertifikate, bietet aber rekursive Suche.
  • Gobuster (go): Unterstützt self-signed Zertifikate, hat aber keine rekursive Suche.
  • Feroxbuster - Schnell, unterstützt rekursive Suche.
  • wfuzz wfuzz -w /usr/share/seclists/Discovery/Web-Content/raft-medium-directories.txt https://domain.com/api/FUZZ
  • ffuf - Schnell: ffuf -c -w /usr/share/wordlists/dirb/big.txt -u http://10.10.10.10/FUZZ
  • uro (python): Kein spider, aber ein Tool, das aus einer Liste gefundener URLs “duplizierte” URLs entfernt.
  • Scavenger: Burp-Extension, um aus dem Burp-History verschiedener Seiten eine Liste von Verzeichnissen zu erstellen.
  • TrashCompactor: Entfernt URLs mit doppelten Funktionalitäten (basierend auf JS-Imports).
  • Chamaleon: Nutzt Wappalyzer, um verwendete Technologien zu erkennen und passende Wordlists auszuwählen.

Empfohlene Wörterbücher:

Beachte, dass jedes Mal, wenn während des brute-forcing oder Spidering ein neues Verzeichnis entdeckt wird, dieses ebenfalls brute-forced werden sollte.

What to check on each file found

  • Broken link checker: Findet broken Links innerhalb von HTMLs, die für Takeovers anfällig sein könnten.
  • File Backups: Sobald du alle Dateien gefunden hast, suche nach Backups aller ausführbaren Dateien (“.php”, “.aspx” …). Häufige Varianten für Backup-Namen sind: file.ext~, #file.ext#, ~file.ext, file.ext.bak, file.ext.tmp, file.ext.old, file.bak, file.tmp und file.old. Du kannst auch die Tools bfac oder backup-gen** verwenden.**
  • Discover new parameters: Du kannst Tools wie Arjun, parameth, x8 und Param Miner verwenden, um versteckte Parameter zu entdecken. Wenn möglich, solltest du versuchen, versteckte Parameter in jeder ausführbaren Web-Datei zu suchen.
  • Arjun all default wordlists: https://github.com/s0md3v/Arjun/tree/master/arjun/db
  • Param-miner “params” : https://github.com/PortSwigger/param-miner/blob/master/resources/params
  • Assetnote “parameters_top_1m”: https://wordlists.assetnote.io/
  • nullenc0de “params.txt”: https://gist.github.com/nullenc0de/9cb36260207924f8e1787279a05eb773
  • Kommentare: Prüfe die Kommentare aller Dateien; dort können Credentials oder versteckte Funktionalität zu finden sein.
  • Falls du in einem CTF spielst, ist ein häufiger Trick, Informationen in Kommentaren am rechten Rand der Seite zu verstecken (mithilfe hunderten von Leerzeichen, sodass du die Daten nicht siehst, wenn du den Quellcode im Browser öffnest). Eine andere Möglichkeit ist, mehrere neue Zeilen zu verwenden und Informationen in einem Kommentar am Seitenende zu verstecken.
  • API keys: Falls du einen API key findest, gibt es mehrere Projekte, die zeigen, wie man API keys verschiedener Plattformen nutzt: keyhacks, zile, truffleHog, SecretFinder, RegHex, DumpsterDive, EarlyBird
  • Google API keys: Wenn du einen API key findest, der wie AIzaSyA-qLheq6xjDiEIRisP_ujUseYLQCHUjik aussieht, kannst du das Projekt gmapapiscanner verwenden, um zu prüfen, auf welche APIs der Key zugreifen kann.
  • S3 Buckets: Während des Spidering prüfe, ob eine Subdomain oder ein Link mit einem S3 bucket in Verbindung steht. In diesem Fall prüfe die Berechtigungen des Buckets.

Special findings

Während des Spidering und brute-forcing kannst du interessante Funde machen, auf die du achten musst.

Interessante Dateien

403 Forbidden/Basic Authentication/401 Unauthorized (bypass)

403 & 401 Bypasses

502 Proxy Error

Wenn eine Seite mit diesem Code antwortet, ist wahrscheinlich ein schlecht konfigurierter Proxy vorhanden. Wenn du eine HTTP-Anfrage wie: GET https://google.com HTTP/1.1 sendest (mit dem Host-Header und anderen üblichen Headern), wird der Proxy versuchen, auf google.com zuzugreifen und du hast möglicherweise eine SSRF gefunden.

NTLM Authentication - Info disclosure

Wenn der Server, der die Authentifizierung verlangt, Windows ist oder du ein Login findest, das nach deinen Credentials (und nach dem Domain-Namen) fragt, kannst du eine Informationsfreigabe provozieren.
Sende den Header: “Authorization: NTLM TlRMTVNTUAABAAAAB4IIAAAAAAAAAAAAAAAAAAAAAAA=” und aufgrund der Funktionsweise der NTLM authentication wird der Server interne Infos (IIS-Version, Windows-Version …) im Header “WWW-Authenticate” zurückgeben.
Du kannst dies mit dem nmap pluginhttp-ntlm-info.nse” automatisieren.

HTTP Redirect (CTF)

Es ist möglich, Inhalt in eine Redirect zu legen. Dieser Inhalt wird dem Nutzer nicht angezeigt (da der Browser die Weiterleitung ausführt), aber es könnte dort etwas versteckt sein.

Web Vulnerabilities Checking

Nachdem eine umfassende Enumeration der Webanwendung durchgeführt wurde, ist es Zeit, viele mögliche Schwachstellen zu prüfen. Die Checkliste findest du hier:

Web Vulnerabilities Methodology

Weitere Infos zu Web-Vulnerabilities:

Monitor Pages for changes

Du kannst Tools wie https://github.com/dgtlmoon/changedetection.io verwenden, um Seiten auf Änderungen zu überwachen, die möglicherweise Verwundbarkeiten einführen.

HackTricks Automatic Commands

HackTricks Automatic Commands ```yaml Protocol_Name: Web #Protocol Abbreviation if there is one. Port_Number: 80,443 #Comma separated if there is more than one. Protocol_Description: Web #Protocol Abbreviation Spelled out

Entry_1: Name: Notes Description: Notes for Web Note: | https://book.hacktricks.wiki/en/network-services-pentesting/pentesting-web/index.html

Entry_2: Name: Quick Web Scan Description: Nikto and GoBuster Command: nikto -host {Web_Proto}://{IP}:{Web_Port} &&&& gobuster dir -w {Small_Dirlist} -u {Web_Proto}://{IP}:{Web_Port} && gobuster dir -w {Big_Dirlist} -u {Web_Proto}://{IP}:{Web_Port}

Entry_3: Name: Nikto Description: Basic Site Info via Nikto Command: nikto -host {Web_Proto}://{IP}:{Web_Port}

Entry_4: Name: WhatWeb Description: General purpose auto scanner Command: whatweb -a 4 {IP}

Entry_5: Name: Directory Brute Force Non-Recursive Description: Non-Recursive Directory Brute Force Command: gobuster dir -w {Big_Dirlist} -u {Web_Proto}://{IP}:{Web_Port}

Entry_6: Name: Directory Brute Force Recursive Description: Recursive Directory Brute Force Command: python3 {Tool_Dir}dirsearch/dirsearch.py -w {Small_Dirlist} -e php,exe,sh,py,html,pl -f -t 20 -u {Web_Proto}://{IP}:{Web_Port} -r 10

Entry_7: Name: Directory Brute Force CGI Description: Common Gateway Interface Brute Force Command: gobuster dir -u {Web_Proto}://{IP}:{Web_Port}/ -w /usr/share/seclists/Discovery/Web-Content/CGIs.txt -s 200

Entry_8: Name: Nmap Web Vuln Scan Description: Tailored Nmap Scan for web Vulnerabilities Command: nmap -vv –reason -Pn -sV -p {Web_Port} –script=banner,(http* or ssl*) and not (brute or broadcast or dos or external or http-slowloris* or fuzzer) {IP}

Entry_9: Name: Drupal Description: Drupal Enumeration Notes Note: | git clone https://github.com/immunIT/drupwn.git for low hanging fruit and git clone https://github.com/droope/droopescan.git for deeper enumeration

Entry_10: Name: WordPress Description: WordPress Enumeration with WPScan Command: | ?What is the location of the wp-login.php? Example: /Yeet/cannon/wp-login.php wpscan –url {Web_Proto}://{IP}{1} –enumerate ap,at,cb,dbe && wpscan –url {Web_Proto}://{IP}{1} –enumerate u,tt,t,vp –passwords {Big_Passwordlist} -e

Entry_11: Name: WordPress Hydra Brute Force Description: Need User (admin is default) Command: hydra -l admin -P {Big_Passwordlist} {IP} -V http-form-post ‘/wp-login.php:log=^USER^&pwd=^PASS^&wp-submit=Log In&testcookie=1:S=Location’

Entry_12: Name: Ffuf Vhost Description: Simple Scan with Ffuf for discovering additional vhosts Command: ffuf -w {Subdomain_List}:FUZZ -u {Web_Proto}://{Domain_Name} -H “Host:FUZZ.{Domain_Name}” -c -mc all {Ffuf_Filters}

</details>

> [!TIP]
> Lernen & üben Sie AWS Hacking:<img src="../../../../../images/arte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../../../../images/arte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">\
> Lernen & üben Sie GCP Hacking: <img src="../../../../../images/grte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">[**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)<img src="../../../../../images/grte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">
> Lernen & üben Sie Azure Hacking: <img src="../../../../../images/azrte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">[**HackTricks Training Azure Red Team Expert (AzRTE)**](https://training.hacktricks.xyz/courses/azrte)<img src="../../../../../images/azrte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">
>
> <details>
>
> <summary>Unterstützen Sie HackTricks</summary>
>
> - Überprüfen Sie die [**Abonnementpläne**](https://github.com/sponsors/carlospolop)!
> - **Treten Sie der** 💬 [**Discord-Gruppe**](https://discord.gg/hRep4RUj7f) oder der [**Telegram-Gruppe**](https://t.me/peass) bei oder **folgen** Sie uns auf **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
> - **Teilen Sie Hacking-Tricks, indem Sie PRs an die** [**HackTricks**](https://github.com/carlospolop/hacktricks) und [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub-Repos senden.
>
> </details>