80,443 - Pentesting Web-Methodik

Reading time: 20 minutes

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

Grundlegende Informationen

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

Standardport: 80 (HTTP), 443(HTTPS)

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

Leitfaden für Web-APIs

Web API Pentesting

Zusammenfassung der Methodik

In dieser Methodik gehen wir davon aus, dass Sie eine Domain (oder Subdomain) und nur diese angreifen werden. Wenden Sie diese Methodik auf jede entdeckte Domain, Subdomain oder IP mit unbestimmtem Webserver im Scope an.

  • Beginnen Sie damit, die vom Webserver verwendeten technologies zu identifying. Achten Sie auf tricks, die Sie während des weiteren Tests beachten sollten, wenn Sie die Tech erfolgreich identifizieren können.
  • Gibt es eine known vulnerability der Version der Technologie?
  • Wird eine well known tech verwendet? Gibt es einen useful trick, um mehr Informationen zu extrahieren?
  • Gibt es einen specialised scanner zum Ausführen (z. B. wpscan)?
  • Setzen Sie general purposes scanners ein. Man weiß nie, ob sie etwas finden oder nützliche Informationen liefern.
  • Beginnen Sie mit den initial checks: robots, sitemap, 404 error und SSL/TLS scan (if HTTPS).
  • Start spidering der Webseite: Es ist Zeit, alle möglichen files, folders und parameters being used zu finden. Prüfen Sie auch auf special findings.
  • Hinweis: Jedes Mal, wenn während des brute-forcing oder spidering ein neues Verzeichnis entdeckt wird, sollte es gespidert werden.
  • Directory Brute-Forcing: Versuchen Sie, alle entdeckten Ordner zu brute-forcen, um neue files und directories zu finden.
  • Hinweis: Jedes Mal, wenn während des brute-forcing oder spidering ein neues Verzeichnis entdeckt wird, sollte es Brute-Forced werden.
  • Backups checking: Prüfen Sie, ob Sie backups von entdeckten files finden können, indem Sie gängige Backup-Erweiterungen anhängen.
  • Brute-Force parameters: Versuchen Sie, hidden parameters zu finden.
  • Sobald Sie alle möglichen endpoints identifiziert haben, die user input akzeptieren, prüfen Sie auf alle Arten von vulnerabilities, die damit zusammenhängen.
  • Folgen Sie dieser Checkliste

Server Version (Vulnerable?)

Identify

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

bash
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üfen, ob ein WAF vorhanden ist

Web-Technik-Tricks

Einige Tricks für finding vulnerabilities in verschiedenen bekannten Technologien, die verwendet werden:

Beachte, dass die gleiche Domain in verschiedenen Ports, Ordnern und Subdomains unterschiedliche Technologien verwenden kann.
Wenn die Webanwendung eine der zuvor genannten Tech/Plattformen oder eine andere verwendet, vergiss nicht, im Internet nach neuen Tricks zu suchen (und sag mir Bescheid!).

Quellcode-Review

Wenn der source code der Anwendung in github verfügbar ist, gibt es neben der Durchführung eines White-Box-Tests 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 irgendetwas mit version info accessible über das Web?
  • Wie und wo sind die credentials gespeichert? Gibt es eine (zugängliche?) file mit credentials (usernames oder passwords)?
  • Sind passwords im plain text, encrypted, oder welcher hashing algorithm wird verwendet?
  • Verwendet die Anwendung einen master key zum Verschlüsseln? Welcher Algorithmus wird eingesetzt?
  • Kannst du durch Ausnutzung einer vulnerability auf any of these files zugreifen?
  • Gibt es interessante Informationen im github (solved and not solved) in den issues? Oder im commit history (vielleicht wurde dort ein password introduced inside an old commit)?

Source code Review / SAST Tools

Automatic scanners

General purpose automatic scanners

bash
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 wird etwas Interessantes gefunden:

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

bash
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 (sofern Daten vorliegen) 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 ausgeführt.

Schritt-für-Schritt Web Application Discovery

Ab diesem Punkt werden wir anfangen, mit der Webanwendung zu interagieren.

Erste Checks

Standardseiten mit interessanten Informationen:

  • /robots.txt
  • /sitemap.xml
  • /crossdomain.xml
  • /clientaccesspolicy.xml
  • /.well-known/
  • Überprüfe auch Kommentare auf den Haupt- und Sekundärseiten.

Fehler provozieren

Webserver können sich unerwartet verhalten, wenn ihnen ungewöhnliche Daten geschickt werden. Das kann vulnerabilities öffnen oder zur Offenlegung sensibler Informationen führen.

  • Greife auf fake pages wie /whatever_fake.php (.aspx,.html,.etc) zu
  • Add "[]", "]]", and "[[" in cookie values und parameter values, um Fehler zu erzeugen
  • Erzeuge Fehler, indem du als Eingabe /~randomthing/%s am Ende der URL verwendest
  • Probiere verschiedene HTTP Verbs 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 genügend Berechtigungen zum Hochladen von Dateien im Root-Ordner hast, versuche:

  • Brute Force Zugangsdaten
  • Upload files via WebDav in die rest der gefundenen Ordner innerhalb der Webseite. Möglicherweise hast du Berechtigungen, Dateien in anderen Ordnern hochzuladen.

SSL/TLS vulnerabilites

  • Wenn die Anwendung die Nutzung von HTTPS in keinem Bereich erzwingt, ist sie anfällig für MitM
  • Wenn die Anwendung sensible Daten (Passwörter) über HTTP sendet, dann ist das eine hohe vulnerability.

Verwende testssl.sh um auf vulnerabilities zu prüfen (In Bug Bounty programs werden diese Arten von Schwachstellen wahrscheinlich nicht akzeptiert) und verwende a2sv um die vulnerabilities nachzuprüfen:

bash
./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>

Information about SSL/TLS vulnerabilities:

Spidering

Starte irgendeine Art von spider im Web. Das Ziel des spider ist es, so viele Pfade wie möglich der getesteten Anwendung zu finden. Daher sollten Web-Crawling-Tools und externe Quellen verwendet werden, um so viele valide Pfade wie möglich zu entdecken.

  • gospider (go): HTML spider, LinkFinder in JS files und externe Quellen (Archive.org, CommonCrawl.org, VirusTotal.com, AlienVault.com).
  • hakrawler (go): HML spider, mit LinkFider für JS files 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 eine Datei mit Hosts und eine Datei mit Pfaden angeben; meg holt dann jede Kombination und speichert die Antwort.
  • urlgrab (go): HTML spider mit JS-Rendering-Fähigkeiten. Sieht aber unmaintained aus; die vorkompilierte Version ist alt und der aktuelle Code kompiliert nicht.
  • gau (go): HTML spider, der externe Provider nutzt (wayback, otx, commoncrawl).
  • ParamSpider: Dieses Script 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, der neue Pfade in JS files suchen kann. Es lohnt sich auch, einen Blick auf JSScanner zu werfen, ein Wrapper von LinkFinder.
  • goLinkFinder (go): Extrahiert Endpoints sowohl aus HTML-Quelltext als auch eingebetteten javascript files. Nützlich für bug hunter, red teamer, infosec ninjas.
  • JSParser (python2.7): Ein python 2.7 Script mit Tornado und JSBeautifier, um relative URLs aus JavaScript files zu parsen. Nützlich, um AJAX-Requests zu entdecken. Scheint unmaintained.
  • relative-url-extractor (ruby): Nimmt eine Datei (HTML) und extrahiert URLs mit cleveren RegEx, um relative URLs aus uglified/minified Dateien zu finden.
  • JSFScan (bash, mehrere Tools): Sammelt interessante Informationen aus JS files mittels verschiedener Tools.
  • subjs (go): Findet JS files.
  • page-fetch (go): Lädt eine Seite in einem headless Browser und gibt alle URLs aus, die geladen wurden.
  • Feroxbuster (rust): Content-Discovery-Tool, das mehrere Optionen der vorherigen Tools kombiniert.
  • Javascript Parsing: Eine Burp-Extension, um Pfade und Params in JS files zu finden.
  • Sourcemapper: Ein Tool, das anhand der .js.map URL den beautified JS-Code beschafft.
  • xnLinkFinder: Ein Tool zum Aufdecken von Endpoints für ein gegebenes Ziel.
  • waymore: Discover links from the wayback machine (auch Herunterladen der Antworten in der wayback und weitere Link-Suche).
  • HTTPLoot (go): Crawlt (sogar durch Ausfüllen von Formularen) und findet außerdem sensitive Info mittels spezifischer Regexes.
  • SpiderSuite: Spider Suite ist ein fortgeschrittener, multifunktionaler GUI Web Security Crawler/Spider für Cyber-Security-Professionals.
  • jsluice (go): Ein Go-Package 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 die Parameter und Endpoints aus Requests zu extrahieren und benutzerdefinierte Wortlisten für Fuzzing und Enumeration zu erstellen.
  • katana (go): Super Tool für diesen Zweck.
  • Crawley (go): Gibt jeden gefundenen Link aus.

Brute Force directories and files

Start brute-forcing from the root folder und stelle sicher, dass du alle mit dieser Methode gefundenen Directories sowie alle durch die Spidering entdeckten Verzeichnisse brute-forcest (du kannst das brute-forcing rekursiv durchführen und am Anfang der verwendeten Wortliste die Namen der gefundenen Verzeichnisse anhängen).
Tools:

  • Dirb / Dirbuster - In Kali enthalten, alt (und langsam), aber funktional. Unterstützt self-signed certificates und rekursive Suche. Im Vergleich zu den anderen Optionen zu langsam.
  • Dirsearch (python): Erlaubt keine self-signed certificates, aber rekursive Suche ist möglich.
  • Gobuster (go): Unterstützt self-signed certificates, 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 doppelte Einträge entfernt.
  • Scavenger: Burp-Extension, um eine Liste von Verzeichnissen aus dem Burp-History verschiedener Seiten zu erstellen.
  • TrashCompactor: Entfernt URLs mit doppelter Funktionalität (basierend auf js imports).
  • Chamaleon: Nutzt Wappalyzer, um eingesetzte Technologien zu erkennen und passende Wortlisten auszuwählen.

Empfohlene Wortlisten:

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

What to check on each file found

  • Broken link checker: Find broken links inside HTMLs that may be prone to takeovers
  • File Backups: Sobald du alle Dateien gefunden hast, suche nach Backups aller ausführbaren Dateien (".php", ".aspx"...). Häufige Backup-Namensvariationen 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 versteckte Parameter in jeder ausführbaren Web-Datei 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
  • Comments: Überprüfe die Comments aller Dateien — dort können credentials oder versteckte Funktionalitäten zu finden sein.
  • Wenn du CTF spielst, ist ein häufiger Trick, Informationen in Comments am rechten Rand der Seite zu verstecken (mittels hunderten von Spaces, 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: Wenn du einen API key findest, gibt es 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 nutzen, um zu prüfen, welche APIs der Key aufrufen darf.
  • S3 Buckets: Während des spidering prüfe, ob eine Subdomain oder ein Link auf einen S3 bucket verweist. In diesem Fall prüfe die Berechtigungen des Buckets.

Special findings

While performing the spidering and brute-forcing you could find interesting things that you have to notice.

Interessante Dateien

403 Forbidden/Basic Authentication/401 Unauthorized (bypass)

403 & 401 Bypasses

502 Proxy Error

Wenn eine Seite mit diesem Code antwortet, ist vermutlich ein schlecht konfigurierter proxy im Spiel. Wenn du eine HTTP-Request wie GET https://google.com HTTP/1.1 sendest (mit Host-Header und anderen üblichen Headern), wird der proxy versuchen, auf google.com zuzugreifen und du hast damit wahrscheinlich ein SSRF gefunden.

NTLM Authentication - Info disclosure

Wenn der Server, der zur Authentifizierung auffordert, Windows ist oder du ein Login siehst, das nach deinen credentials (und nach einem domain name) fragt, kannst du eine Information Disclosure provozieren.
Sende den Header: “Authorization: NTLM TlRMTVNTUAABAAAAB4IIAAAAAAAAAAAAAAAAAAAAAAA=” und aufgrund der Funktionsweise von NTLM authentication wird der Server interne Informationen (IIS-Version, Windows-Version...) im Header "WWW-Authenticate" zurückgeben.
Du kannst das mit dem nmap plugin "http-ntlm-info.nse" automatisieren.

HTTP Redirect (CTF)

Es ist möglich, Content in einer Redirection unterzubringen. Dieser Content wird dem Benutzer nicht angezeigt (da der Browser die Weiterleitung ausführt), aber dort könnten Informationen versteckt sein.

Web Vulnerabilities Checking

Now that a comprehensive enumeration of the web application has been performed it's time to check for a lot of possible vulnerabilities. You can find the checklist here:

Web Vulnerabilities Methodology

Find more info about web vulns in:

Monitor Pages for changes

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

HackTricks Automatic Commands

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}

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