80,443 - Pentesting Web Methodology

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 Infos

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 Leitfaden

Web API Pentesting

Methodologie-Zusammenfassung

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

  • Start by identifying the technologies used by the Webserver. Look for tricks to keep in mind during the rest of the Test if you can successfully identify the tech.
  • Gibt es bekannte Schwachstellen der Version der verwendeten Technologie?
  • Setzt die Seite eine well known tech ein? Gibt es nützliche Tricks um mehr Informationen zu extrahieren?
  • Gibt es einen specialised scanner der ausgeführt werden sollte (z. B. wpscan)?
  • Führen Sie general purposes scanners aus. Man weiß nie, ob sie etwas finden oder interessante Informationen liefern.
  • Starten Sie mit den initial checks: robots, sitemap, 404 error und SSL/TLS scan (bei HTTPS).
  • Start spidering der Webseite: Es ist Zeit, alle möglichen files, folders und parameters zu finden, die verwendet werden. Prüfen Sie auch auf special findings.
  • Beachte, dass jedes Mal, wenn ein neues Verzeichnis während brute-forcing oder spidering entdeckt wird, es gespidert werden sollte.
  • Directory Brute-Forcing: Versuchen Sie, alle entdeckten Ordner zu brute-forcen, um neue files und directories zu finden.
  • Beachte, dass jedes Mal, wenn ein neues Verzeichnis während brute-forcing oder spidering entdeckt wird, es Brute-Forced werden sollte.
  • Backups checking: Prüfen Sie, ob Sie backups von entdeckten Dateien finden können, indem Sie gängige Backup-Erweiterungen anhängen.
  • Brute-Force parameters: Versuchen Sie, versteckte parameter zu finden.
  • Sobald Sie alle möglichen endpoints identifiziert haben, die user input akzeptieren, prüfen Sie diese auf alle Arten von Schwachstellen, die damit zusammenhängen.
  • Follow this checklist

Server-Version (anfällig?)

Identifizieren

Prüfen Sie, ob es bekannte Schwachstellen für die ausgeführte Server-Version gibt.
Die HTTP headers und cookies der response können sehr nützlich sein, um die verwendeten technologies und/oder version zu identifizieren. Ein Nmap scan kann die Server-Version 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 tech tricks

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

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

Quellcode-Review

Wenn der Quellcode der Anwendung auf github verfügbar ist, gibt es — zusätzlich zu einem von dir selbst durchgeführten 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 file oder irgendetwas mit version info accessible via web?
  • Wie und wo werden die credentials gespeichert? Gibt es irgendeine (zugängliche?) file mit credentials (usernames or passwords)?
  • Sind passwords im plain text, encrypted oder welcher hashing algorithm wird verwendet?
  • Wird ein master key zum Verschlüsseln verwendet? Welcher algorithm wird genutzt?
  • Kannst du durch Ausnutzung einer Schwachstelle auf any of these files zugreifen?
  • Gibt es interessante Informationen im 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, run a scanner, 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 sollten Sie bereits einige Informationen über den vom Client verwendeten Webserver haben (falls Daten vorliegen) und einige Tricks, die Sie während des Tests beachten sollten. Wenn Sie Glück haben, haben Sie sogar ein CMS gefunden und einen Scanner ausgeführt.

Schritt-für-Schritt Web Application Discovery

Ab jetzt werden wir beginnen, mit der Webanwendung zu interagieren.

Initial checks

Default pages with interesting info:

  • /robots.txt
  • /sitemap.xml
  • /crossdomain.xml
  • /clientaccesspolicy.xml
  • /.well-known/
  • Prüfen Sie auch Kommentare auf den Haupt- und Nebenseiten.

Forcing errors

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

  • Zugriff auf fake pages wie /whatever_fake.php (.aspx,.html,.etc)
  • Fügen Sie “[]”, “]]” und “[[” in cookie values und parameter-Werten ein, um Fehler zu erzeugen
  • Erzeugen Sie einen Fehler, indem Sie Eingabe als /~randomthing/%s am Ende der URL anfügen
  • Probieren Sie verschiedene HTTP Verbs wie PATCH, DEBUG oder ungültige wie FAKE

Prüfen Sie, ob Sie Dateien hochladen können (PUT verb, WebDav)

Wenn Sie feststellen, dass WebDav aktiviert ist, Sie aber nicht ausreichende Berechtigungen zum Hochladen von Dateien im Root-Ordner haben, versuchen Sie:

  • Brute Force credentials
  • Upload files via WebDav to the rest of found folders inside the web page. You may have permissions to upload files in other folders.

SSL/TLS Schwachstellen

  • Wenn die Anwendung die Verwendung von HTTPS nicht in allen Teilen erzwingt, ist sie anfällig für MitM
  • Wenn die Anwendung sensible Daten (Passwörter) über HTTP sendet. Dann ist das eine hohe Schwachstelle.

Use testssl.sh to checks for vulnerabilities (In Bug Bounty programs probably these kind of vulnerabilities won’t be accepted) and use a2sv to recheck the vulnerabilities:

./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 eine Art spider im Web. Das Ziel des spider ist es, so viele Pfade wie möglich zu finden innerhalb der getesteten Anwendung. Daher sollten web crawling und externe Quellen genutzt werden, um so viele gültige Pfade wie möglich zu entdecken.

  • gospider (go): HTML spider, LinkFinder in JS files und externe Quellen (Archive.org, CommonCrawl.org, VirusTotal.com).
  • hakrawler (go): HML spider, mit LinkFinder 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 einfach eine Datei mit Hosts und eine Datei mit Pfaden angeben; meg wird jeden Pfad auf jedem Host abrufen und die Antworten speichern.
  • 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 verwendet (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, fähig, neue Pfade in JS files zu suchen. Es lohnt sich auch, sich JSScanner anzusehen, das ein Wrapper für LinkFinder ist.
  • goLinkFinder (go): Extrahiert Endpunkte sowohl aus HTML-Source als auch eingebetteten javascript files. Nützlich für bug hunters, 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 leicht zu entdecken. Sieht unmaintained aus.
  • relative-url-extractor (ruby): Gibt man eine Datei (HTML) an, extrahiert es URLs daraus, verwendet nette Regexes, um relative URLs aus uglified/minified Dateien zu finden.
  • JSFScan (bash, mehrere Tools): Sammelt interessante Informationen aus JS files mithilfe mehrerer 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, um die Seite zu rendern.
  • Feroxbuster (rust): Content-discovery-Tool, das mehrere Optionen der vorherigen Tools mischt.
  • Javascript Parsing: Eine Burp-Extension, um Pfade und Parameter in JS files zu finden.
  • BurpJSLinkFinder Enhanced: Burp-Extension (Jython), die JavaScript-Antworten (nach MIME-Type und /js-Pfade) passiv analysiert, Endpunkte/Links extrahiert und optional eingebettete Secrets mit Severity markiert.
  • Sourcemapper: Ein Tool, das, gegeben die .js.map URL, dir den beautified JS-Code liefert.
  • xnLinkFinder: Tool zur Entdeckung von Endpunkten für ein gegebenes Target.
  • waymore: Discover links from the wayback machine (auch das Herunterladen der Responses in der Wayback und das Suchen nach weiteren Links).
  • HTTPLoot (go): Crawl (auch durch Ausfüllen von Formularen) und findet außerdem sensitive info mittels spezifischer Regexes.
  • SpiderSuite: Spider Suite ist ein fortgeschrittener Multi-Feature GUI Web Security Crawler/Spider für Cyber-Security-Profis.
  • jsluice (go): Ein Go-Package und command-line tool zum Extrahieren von URLs, Pfaden, Secrets und anderen interessanten Daten aus JavaScript-Sourcecode.
  • ParaForge: ParaForge ist eine einfache Burp Suite extension, um Paramter und Endpoints aus Requests zu extrahieren, um custom wordlists für Fuzzing und Enumeration zu erstellen.
  • katana (go): Großartiges Tool dafür.
  • Crawley (go): Gibt jeden Link aus, den es finden kann.

Brute Force directories and files

Start brute-forcing from the root folder and be sure to brute-force all the directories found using this method and all the directories discovered by the Spidering (you can do this brute-forcing recursively and appending at the beginning of the used wordlist the names of the found directories).
Tools:

  • Dirb / Dirbuster - Included in Kali, old (and slow) but functional. Allow auto-signed certificates and recursive search. Too slow compared with th other options.
  • Dirsearch (python): It doesn’t allow auto-signed certificates but allows recursive search.
  • Gobuster (go): It allows auto-signed certificates, it doesn’t have recursive search.
  • Feroxbuster - Fast, supports recursive search.
  • wfuzz wfuzz -w /usr/share/seclists/Discovery/Web-Content/raft-medium-directories.txt https://domain.com/api/FUZZ
  • ffuf - Fast: ffuf -c -w /usr/share/wordlists/dirb/big.txt -u http://10.10.10.10/FUZZ
  • uro (python): This isn’t a spider but a tool that given the list of found URLs will to delete “duplicated” URLs.
  • Scavenger: Burp Extension to create a list of directories from the burp history of different pages
  • TrashCompactor: Remove URLs with duplicated functionalities (based on js imports)
  • Chamaleon: It uses wapalyzer to detect used technologies and select the wordlists to use.

Recommended dictionaries:

Note that anytime a new directory is discovered during brute-forcing or spidering, it should be Brute-Forced.

What to check on each file found

Special findings

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

Interesting files

403 Forbidden/Basic Authentication/401 Unauthorized (bypass)

403 & 401 Bypasses

502 Proxy Error

If any page responds with that code, it’s probably a bad configured proxy. If you send a HTTP request like: GET https://google.com HTTP/1.1 (with the host header and other common headers), the proxy will try to access google.com and you will have found a SSRF.

NTLM Authentication - Info disclosure

If the running server asking for authentication is Windows or you find a login asking for your credentials (and asking for domain name), you can provoke an information disclosure.
Send the header: “Authorization: NTLM TlRMTVNTUAABAAAAB4IIAAAAAAAAAAAAAAAAAAAAAAA=” and due to how the NTLM authentication works, the server will respond with internal info (IIS version, Windows version…) inside the header “WWW-Authenticate”.
You can automate this using the nmap pluginhttp-ntlm-info.nse”.

HTTP Redirect (CTF)

It is possible to put content inside a Redirection. This content won’t be shown to the user (as the browser will execute the redirection) but something could be hidden in there.

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

You can use tools such as https://github.com/dgtlmoon/changedetection.io to monitor pages for modifications that might insert vulnerabilities.

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>

## Referenzen

- [https://github.com/panchocosil/burp-js-linkfinder-enhanced](https://github.com/panchocosil/burp-js-linkfinder-enhanced)

> [!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>