mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
417 lines
29 KiB
Markdown
417 lines
29 KiB
Markdown
# 80,443 - Pentesting Web-Methodik
|
|
|
|
{{#include ../../banners/hacktricks-training.md}}
|
|
|
|
## 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
|
|
|
|
|
|
{{#ref}}
|
|
web-api-pentesting.md
|
|
{{#endref}}
|
|
|
|
## 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](../../pentesting-web/web-vulnerabilities-methodology.md)
|
|
|
|
## 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**](https://github.com/urbanadventurer/WhatWeb)**,** [**webtech**](https://github.com/ShielderSec/webtech) oder [**https://builtwith.com/**](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**](../../generic-hacking/search-exploits.md)
|
|
|
|
### **Prüfen, ob ein WAF vorhanden ist**
|
|
|
|
- [**https://github.com/EnableSecurity/wafw00f**](https://github.com/EnableSecurity/wafw00f)
|
|
- [**https://github.com/Ekultek/WhatWaf.git**](https://github.com/Ekultek/WhatWaf.git)
|
|
- [**https://nmap.org/nsedoc/scripts/http-waf-detect.html**](https://nmap.org/nsedoc/scripts/http-waf-detect.html)
|
|
|
|
### Web-Technik-Tricks
|
|
|
|
Einige **Tricks** für **finding vulnerabilities** in verschiedenen bekannten **Technologien**, die verwendet werden:
|
|
|
|
- [**AEM - Adobe Experience Cloud**](aem-adobe-experience-cloud.md)
|
|
- [**Apache**](apache.md)
|
|
- [**Artifactory**](artifactory-hacking-guide.md)
|
|
- [**Buckets**](buckets/index.html)
|
|
- [**CGI**](cgi.md)
|
|
- [**Drupal**](drupal/index.html)
|
|
- [**Flask**](flask.md)
|
|
- [**Git**](git.md)
|
|
- [**Golang**](golang.md)
|
|
- [**GraphQL**](graphql.md)
|
|
- [**H2 - Java SQL database**](h2-java-sql-database.md)
|
|
- [**ISPConfig**](ispconfig.md)
|
|
- [**IIS tricks**](iis-internet-information-services.md)
|
|
- [**Microsoft SharePoint**](microsoft-sharepoint.md)
|
|
- [**JBOSS**](jboss.md)
|
|
- [**Jenkins**](<[https:/github.com/carlospolop/hacktricks/blob/master/network-services-pentesting/pentesting-web/broken-reference/README.md](https:/github.com/HackTricks-wiki/hacktricks-cloud/tree/master/pentesting-ci-cd/jenkins-security)/>)
|
|
- [**Jira**](jira.md)
|
|
- [**Joomla**](joomla.md)
|
|
- [**JSP**](jsp.md)
|
|
- [**Laravel**](laravel.md)
|
|
- [**Moodle**](moodle.md)
|
|
- [**Nginx**](nginx.md)
|
|
- [**PHP (php has a lot of interesting tricks that could be exploited)**](php-tricks-esp/index.html)
|
|
- [**Python**](python.md)
|
|
- [**Spring Actuators**](spring-actuators.md)
|
|
- [**Symphony**](symphony.md)
|
|
- [**Tomcat**](tomcat/index.html)
|
|
- [**VMWare**](vmware-esx-vcenter....md)
|
|
- [**Web API Pentesting**](web-api-pentesting.md)
|
|
- [**WebDav**](put-method-webdav.md)
|
|
- [**Werkzeug**](werkzeug.md)
|
|
- [**Wordpress**](wordpress.md)
|
|
- [**Electron Desktop (XSS to RCE)**](electron-desktop-apps/index.html)
|
|
|
|
_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**)?
|
|
|
|
{{#ref}}
|
|
code-review-tools.md
|
|
{{#endref}}
|
|
|
|
### 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**](https://github.com/hatRiot/clusterd)**:** [**JBoss**](jboss.md)**, ColdFusion, WebLogic,** [**Tomcat**](tomcat/index.html)**, Railo, Axis2, Glassfish**\
|
|
[**CMSScan**](https://github.com/ajinabraham/CMSScan): [**WordPress**](wordpress.md), [**Drupal**](drupal/index.html), **Joomla**, **vBulletin** Websites auf Sicherheitsprobleme. (GUI)\
|
|
[**VulnX**](https://github.com/anouarbensaad/vulnx)**:** [**Joomla**](joomla.md)**,** [**Wordpress**](wordpress.md)**,** [**Drupal**](drupal/index.html)**, PrestaShop, Opencart**\
|
|
**CMSMap**: [**(W)ordpress**](wordpress.md)**,** [**(J)oomla**](joomla.md)**,** [**(D)rupal**](drupal/index.html) **oder** [**(M)oodle**](moodle.md)\
|
|
[**droopscan**](https://github.com/droope/droopescan)**:** [**Drupal**](drupal/index.html)**,** [**Joomla**](joomla.md)**,** [**Moodle**](moodle.md)**, Silverstripe,** [**Wordpress**](wordpress.md)
|
|
```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**](put-method-webdav.md)**)**
|
|
|
|
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**](https://github.com/drwetter/testssl.sh) um auf **vulnerabilities** zu prüfen (In Bug Bounty programs werden diese Arten von Schwachstellen wahrscheinlich nicht akzeptiert) und verwende [**a2sv** ](https://github.com/hahwul/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:
|
|
|
|
- [https://www.gracefulsecurity.com/tls-ssl-vulnerabilities/](https://www.gracefulsecurity.com/tls-ssl-vulnerabilities/)
|
|
- [https://www.acunetix.com/blog/articles/tls-vulnerabilities-attacks-final-part/](https://www.acunetix.com/blog/articles/tls-vulnerabilities-attacks-final-part/)
|
|
|
|
### 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**](https://github.com/jaeles-project/gospider) (go): HTML spider, LinkFinder in JS files und externe Quellen (Archive.org, CommonCrawl.org, VirusTotal.com, AlienVault.com).
|
|
- [**hakrawler**](https://github.com/hakluke/hakrawler) (go): HML spider, mit LinkFider für JS files und Archive.org als externe Quelle.
|
|
- [**dirhunt**](https://github.com/Nekmo/dirhunt) (python): HTML spider, zeigt außerdem "juicy files" an.
|
|
- [**evine** ](https://github.com/saeeddhqan/evine)(go): Interaktiver CLI HTML spider. Sucht ebenfalls in Archive.org.
|
|
- [**meg**](https://github.com/tomnomnom/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**](https://github.com/IAmStoxe/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**](https://github.com/lc/gau) (go): HTML spider, der externe Provider nutzt (wayback, otx, commoncrawl).
|
|
- [**ParamSpider**](https://github.com/devanshbatham/ParamSpider): Dieses Script findet URLs mit Parametern und listet sie auf.
|
|
- [**galer**](https://github.com/dwisiswant0/galer) (go): HTML spider mit JS-Rendering-Fähigkeiten.
|
|
- [**LinkFinder**](https://github.com/GerbenJavado/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](https://github.com/dark-warlord14/JSScanner) zu werfen, ein Wrapper von LinkFinder.
|
|
- [**goLinkFinder**](https://github.com/0xsha/GoLinkFinder) (go): Extrahiert Endpoints sowohl aus HTML-Quelltext als auch eingebetteten javascript files. Nützlich für bug hunter, red teamer, infosec ninjas.
|
|
- [**JSParser**](https://github.com/nahamsec/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**](https://github.com/jobertabma/relative-url-extractor) (ruby): Nimmt eine Datei (HTML) und extrahiert URLs mit cleveren RegEx, um relative URLs aus uglified/minified Dateien zu finden.
|
|
- [**JSFScan**](https://github.com/KathanP19/JSFScan.sh) (bash, mehrere Tools): Sammelt interessante Informationen aus JS files mittels verschiedener Tools.
|
|
- [**subjs**](https://github.com/lc/subjs) (go): Findet JS files.
|
|
- [**page-fetch**](https://github.com/detectify/page-fetch) (go): Lädt eine Seite in einem headless Browser und gibt alle URLs aus, die geladen wurden.
|
|
- [**Feroxbuster**](https://github.com/epi052/feroxbuster) (rust): Content-Discovery-Tool, das mehrere Optionen der vorherigen Tools kombiniert.
|
|
- [**Javascript Parsing**](https://github.com/xnl-h4ck3r/burp-extensions): Eine Burp-Extension, um Pfade und Params in JS files zu finden.
|
|
- [**Sourcemapper**](https://github.com/denandz/sourcemapper): Ein Tool, das anhand der .js.map URL den beautified JS-Code beschafft.
|
|
- [**xnLinkFinder**](https://github.com/xnl-h4ck3r/xnLinkFinder): Ein Tool zum Aufdecken von Endpoints für ein gegebenes Ziel.
|
|
- [**waymore**](https://github.com/xnl-h4ck3r/waymore)**:** Discover links from the wayback machine (auch Herunterladen der Antworten in der wayback und weitere Link-Suche).
|
|
- [**HTTPLoot**](https://github.com/redhuntlabs/HTTPLoot) (go): Crawlt (sogar durch Ausfüllen von Formularen) und findet außerdem sensitive Info mittels spezifischer Regexes.
|
|
- [**SpiderSuite**](https://github.com/3nock/SpiderSuite): Spider Suite ist ein fortgeschrittener, multifunktionaler GUI Web Security Crawler/Spider für Cyber-Security-Professionals.
|
|
- [**jsluice**](https://github.com/BishopFox/jsluice) (go): Ein Go-Package und [command-line tool](https://github.com/BishopFox/jsluice/blob/main/cmd/jsluice) zum Extrahieren von URLs, Pfaden, secrets und anderen interessanten Daten aus JavaScript-Quellcode.
|
|
- [**ParaForge**](https://github.com/Anof-cyber/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**](https://github.com/projectdiscovery/katana) (go): Super Tool für diesen Zweck.
|
|
- [**Crawley**](https://github.com/s0rg/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**](https://github.com/maurosoria/dirsearch) (python)**: Erlaubt keine self-signed certificates, aber** rekursive Suche ist möglich.
|
|
- [**Gobuster**](https://github.com/OJ/gobuster) (go): Unterstützt self-signed certificates, hat aber **keine** **rekursive** Suche.
|
|
- [**Feroxbuster**](https://github.com/epi052/feroxbuster) **- Schnell, unterstützt rekursive Suche.**
|
|
- [**wfuzz**](https://github.com/xmendez/wfuzz) `wfuzz -w /usr/share/seclists/Discovery/Web-Content/raft-medium-directories.txt https://domain.com/api/FUZZ`
|
|
- [**ffuf** ](https://github.com/ffuf/ffuf)- Schnell: `ffuf -c -w /usr/share/wordlists/dirb/big.txt -u http://10.10.10.10/FUZZ`
|
|
- [**uro**](https://github.com/s0md3v/uro) (python): Kein spider, aber ein Tool, das aus einer Liste gefundener URLs doppelte Einträge entfernt.
|
|
- [**Scavenger**](https://github.com/0xDexter0us/Scavenger): Burp-Extension, um eine Liste von Verzeichnissen aus dem Burp-History verschiedener Seiten zu erstellen.
|
|
- [**TrashCompactor**](https://github.com/michael1026/trashcompactor): Entfernt URLs mit doppelter Funktionalität (basierend auf js imports).
|
|
- [**Chamaleon**](https://github.com/iustin24/chameleon): Nutzt Wappalyzer, um eingesetzte Technologien zu erkennen und passende Wortlisten auszuwählen.
|
|
|
|
**Empfohlene Wortlisten:**
|
|
|
|
- [https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/bf_directories.txt](https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/bf_directories.txt)
|
|
- [**Dirsearch** included dictionary](https://github.com/maurosoria/dirsearch/blob/master/db/dicc.txt)
|
|
- [http://gist.github.com/jhaddix/b80ea67d85c13206125806f0828f4d10](http://gist.github.com/jhaddix/b80ea67d85c13206125806f0828f4d10)
|
|
- [Assetnote wordlists](https://wordlists.assetnote.io)
|
|
- [https://github.com/danielmiessler/SecLists/tree/master/Discovery/Web-Content](https://github.com/danielmiessler/SecLists/tree/master/Discovery/Web-Content)
|
|
- raft-large-directories-lowercase.txt
|
|
- directory-list-2.3-medium.txt
|
|
- RobotsDisallowed/top10000.txt
|
|
- [https://github.com/random-robbie/bruteforce-lists](https://github.com/random-robbie/bruteforce-lists)
|
|
- [https://github.com/google/fuzzing/tree/master/dictionaries](https://github.com/google/fuzzing/tree/master/dictionaries)
|
|
- [https://github.com/six2dez/OneListForAll](https://github.com/six2dez/OneListForAll)
|
|
- [https://github.com/random-robbie/bruteforce-lists](https://github.com/random-robbie/bruteforce-lists)
|
|
- [https://github.com/ayoubfathi/leaky-paths](https://github.com/ayoubfathi/leaky-paths)
|
|
- _/usr/share/wordlists/dirb/common.txt_
|
|
- _/usr/share/wordlists/dirb/big.txt_
|
|
- _/usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt_
|
|
|
|
_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**](https://github.com/stevenvachon/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**](https://github.com/mazen160/bfac) **oder** [**backup-gen**](https://github.com/Nishantbhagat57/backup-gen)** verwenden.**
|
|
- **Discover new parameters**: Du kannst Tools wie [**Arjun**](https://github.com/s0md3v/Arjun)**,** [**parameth**](https://github.com/maK-/parameth)**,** [**x8**](https://github.com/sh1yo/x8) **und** [**Param Miner**](https://github.com/PortSwigger/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](https://github.com/s0md3v/Arjun/tree/master/arjun/db)
|
|
- _Param-miner “params” :_ [https://github.com/PortSwigger/param-miner/blob/master/resources/params](https://github.com/PortSwigger/param-miner/blob/master/resources/params)
|
|
- _Assetnote “parameters_top_1m”:_ [https://wordlists.assetnote.io/](https://wordlists.assetnote.io)
|
|
- _nullenc0de “params.txt”:_ [https://gist.github.com/nullenc0de/9cb36260207924f8e1787279a05eb773](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**](https://github.com/streaak/keyhacks)**,** [**zile**](https://github.com/xyele/zile.git)**,** [**truffleHog**](https://github.com/trufflesecurity/truffleHog)**,** [**SecretFinder**](https://github.com/m4ll0k/SecretFinder)**,** [**RegHex**](<https://github.com/l4yton/RegHex)/>)**,** [**DumpsterDive**](https://github.com/securing/DumpsterDiver)**,** [**EarlyBird**](https://github.com/americanexpress/earlybird)
|
|
- Google API keys: Wenn du einen API key findest, der wie **AIza**SyA-qLheq6xjDiEIRisP_ujUseYLQCHUjik aussieht, kannst du das Projekt [**gmapapiscanner**](https://github.com/ozguralp/gmapsapiscanner) 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](buckets/index.html).
|
|
|
|
### Special findings
|
|
|
|
**While** performing the **spidering** and **brute-forcing** you could find **interesting** **things** that you have to **notice**.
|
|
|
|
**Interessante Dateien**
|
|
|
|
- Achte auf **Links** zu anderen Dateien innerhalb von **CSS** files.
|
|
- [If you find a _**.git**_ file some information can be extracted](git.md)
|
|
- Wenn du eine _**.env**_ findest, können Informationen wie api keys, DB-Passwörter und andere vertrauliche Daten darin stehen.
|
|
- Wenn du **API endpoints** findest, solltest du [diese auch testen](web-api-pentesting.md). Diese sind zwar keine Dateien, sehen aber oft so aus.
|
|
- **JS files**: In der Spidering-Sektion wurden bereits Tools erwähnt, die Pfade aus JS files extrahieren können. Es ist auch sinnvoll, jede gefundene JS-Datei zu **monitoren**, da eine Änderung anzeigen kann, dass eine potenzielle Verwundbarkeit in den Code eingeführt wurde. Du könntest z.B. [**JSMon**](https://github.com/robre/jsmon)** verwenden.**
|
|
- Prüfe gefundene JS files außerdem mit [**RetireJS**](https://github.com/retirejs/retire.js/) oder [**JSHole**](https://github.com/callforpapers-source/jshole), um bekannte Verwundbarkeiten zu finden.
|
|
- **Javascript Deobfuscator and Unpacker:** [https://lelinhtinh.github.io/de4js/](https://lelinhtinh.github.io/de4js/), [https://www.dcode.fr/javascript-unobfuscator](https://www.dcode.fr/javascript-unobfuscator)
|
|
- **Javascript Beautifier:** [http://jsbeautifier.org/](https://beautifier.io), [http://jsnice.org/](http://jsnice.org)
|
|
- **JsFuck deobfuscation** (javascript mit Zeichen:"\[]!+" [https://enkhee-osiris.github.io/Decoder-JSFuck/](https://enkhee-osiris.github.io/Decoder-JSFuck/))
|
|
- [**TrainFuck**](https://github.com/taco-c/trainfuck)**:** `+72.+29.+7..+3.-67.-12.+55.+24.+3.-6.-8.-67.-23.`
|
|
- In vielen Fällen musst du die verwendeten regulären Ausdrücke verstehen. Das ist hilfreich: [https://regex101.com/](https://regex101.com) oder [https://pythonium.net/regex](https://pythonium.net/regex)
|
|
- Du könntest auch die Dateien überwachen, in denen Formulare erkannt wurden, da eine Änderung von Parametern oder das Auftauchen eines neuen Formulars auf eine potenziell neue verwundbare Funktionalität hinweisen kann.
|
|
|
|
**403 Forbidden/Basic Authentication/401 Unauthorized (bypass)**
|
|
|
|
|
|
{{#ref}}
|
|
403-and-401-bypasses.md
|
|
{{#endref}}
|
|
|
|
**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:
|
|
|
|
|
|
{{#ref}}
|
|
../../pentesting-web/web-vulnerabilities-methodology.md
|
|
{{#endref}}
|
|
|
|
Find more info about web vulns in:
|
|
|
|
- [https://six2dez.gitbook.io/pentest-book/others/web-checklist](https://six2dez.gitbook.io/pentest-book/others/web-checklist)
|
|
- [https://kennel209.gitbooks.io/owasp-testing-guide-v4/content/en/web_application_security_testing/configuration_and_deployment_management_testing.html](https://kennel209.gitbooks.io/owasp-testing-guide-v4/content/en/web_application_security_testing/configuration_and_deployment_management_testing.html)
|
|
- [https://owasp-skf.gitbook.io/asvs-write-ups/kbid-111-client-side-template-injection](https://owasp-skf.gitbook.io/asvs-write-ups/kbid-111-client-side-template-injection)
|
|
|
|
### Monitor Pages for changes
|
|
|
|
Du kannst Tools wie [https://github.com/dgtlmoon/changedetection.io](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}
|
|
```
|
|
{{#include ../../banners/hacktricks-training.md}}
|