80,443 - Pentesting Web Metodologija

Tip

Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Učite i vežbajte Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Podržite HackTricks

Osnovne informacije

Web servis je najčešći i najopsežniji servis i postoji mnogo različitih tipova ranjivosti.

Podrazumevani port: 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

Smernice za Web API

Web API Pentesting

Sažetak metodologije

U ovoj metodologiji pretpostavićemo da napadate jednu domenu (ili poddomen) i samo nju. Dakle, ovu metodologiju treba primeniti na svaku otkrivenu domenu, poddomen ili IP sa neodređenim web serverom unutar opsega.

  • Počnite sa identifikovanjem tehnologija koje koristi web server. Potražite trikove koje treba imati na umu tokom ostatka testa ako uspešno identifikujete tehnologiju.
  • Postoji li neka poznata ranjivost verzije te tehnologije?
  • Koristi li se neka poznata tehnologija? Postoji li neki koristan trik da se izvuče više informacija?
  • Postoji li neki specijalizovani scanner za pokretanje (like wpscan)?
  • Pokrenite general purpose scanners. Nikad ne znate hoće li nešto naći ili pružiti neke interesantne informacije.
  • Počnite sa inicijalnim proverama: robots, sitemap, 404 error i SSL/TLS scan (ako je HTTPS).
  • Počnite sa spidering web stranice: vreme je da pronađete sve moguće fajlove, direktorijume i parametre koji se koriste. Takođe, proverite specijalna otkrića.
  • Napomena: kad god se otkrije novi direktorijum tokom brute-forcing ili spidering, treba ga spiderati.
  • Directory Brute-Forcing: Pokušajte da brute force-ujete sve otkrivene foldere tražeći nove fajlove i direktorijume.
  • Napomena: kad god se otkrije novi direktorijum tokom brute-forcing ili spidering, treba ga Brute-Forcovati.
  • Backups checking: Testirajte da li možete pronaći backups otkrivenih fajlova dodavanjem uobičajenih ekstenzija za backup.
  • Brute-Force parameters: Pokušajte da pronađete skrivene parametre.
  • Kada identifikujete sve moguće endpointe koji prihvataju user input, proverite sve vrste vulnerabilities vezanih za njih.
  • Pratite ovaj kontrolni spisak

Verzija servera (Ranjiv?)

Identifikacija

Proverite da li postoje poznate ranjivosti za verziju servera koja je u upotrebi.
HTTP headers i cookies odgovora mogu biti veoma korisni za identifikovanje korišćenih tehnologija i/ili verzije. Nmap scan može identifikovati verziju servera, ali korisni mogu biti i alati whatweb, webtech ili https://builtwith.com/:

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

Search for vulnerabilities of the web application version

Proverite da li postoji WAF

Trikovi za web tehnologije

Neki trikovi za pronalaženje ranjivosti u različitim poznatim tehnologijama koje se koriste:

Uzmite u obzir da isti domen može koristiti različite tehnologije na različitim portovima, folderima i subdomenima.
Ako web aplikacija koristi neku dobro poznatu tech/platform listed before ili neku drugu, ne zaboravite da pretražite Internet za nove trikove (i obavestite me!).

Pregled izvornog koda

Ako je source code aplikacije dostupan na github, pored izvođenja, od strane vas, White box test aplikacije, postoji neka informacija koja bi mogla biti korisna za trenutni Black-Box testing:

  • Da li postoji Change-log or Readme or Version fajl ili bilo šta sa informacijama o verziji dostupnim putem weba?
  • Kako i gde su sačuvani credentials? Postoji li neki (pristupačan?) file sa credentials (usernames or passwords)?
  • Da li su passwords u plain text, encrypted ili koji hashing algorithm se koristi?
  • Da li koristi neku master key za enkripciju nečega? Koji algorithm se koristi?
  • Možete li pristupiti nekom od ovih fajlova iskorišćavanjem neke ranjivosti?
  • Ima li neke interesantne informacije u githubu (rešene i nerešene) issues? Ili u commit history (možda je neka password introduced inside an old commit)?

Source code Review / SAST Tools

Automatski skeneri

Automatski skeneri opšte namene

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"

Skeneri za CMS

Ako se koristi CMS, ne zaboravite da pokrenete skener, možda se nađe nešto zanimljivo:

Clusterd: JBoss, ColdFusion, WebLogic, Tomcat, Railo, Axis2, Glassfish
CMSScan: WordPress, Drupal, Joomla, vBulletin za otkrivanje bezbednosnih problema na web sajtovima. (GUI)
VulnX: Joomla, Wordpress, Drupal, PrestaShop, Opencart
CMSMap: (W)ordpress, (J)oomla, (D)rupal or (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

U ovom trenutku trebalo bi da već imate neke informacije o web serveru koji koristi klijent (ako su podaci dati) i neke trikove koje treba imati na umu tokom testa. Ako imate sreće, čak ste pronašli CMS i pokrenuli neki skener.

Korak po korak otkrivanje web aplikacije

Od ovog trenutka počinjemo da komuniciramo sa web aplikacijom.

Početne provere

Podrazumevane stranice sa interesantnim informacijama:

  • /robots.txt
  • /sitemap.xml
  • /crossdomain.xml
  • /clientaccesspolicy.xml
  • /.well-known/
  • Proverite i komentare na glavnim i sekundarnim stranicama.

Forsiranje grešaka

Web serveri se mogu ponašati neočekivano kada im se pošalju neobični podaci. To može otvoriti vulnerabilities ili dovesti do otkrivanja osetljivih informacija.

  • Pristupite lažnim stranicama kao što su /whatever_fake.php (.aspx,.html,.etc)
  • Dodajte “[]”, “]]”, i “[[” u cookie values i parameter values da izazovete greške
  • Generišite grešku dajući unos kao /~randomthing/%s na kraju URL-a
  • Probajte different HTTP Verbs kao PATCH, DEBUG ili pogrešne kao FAKE

Proverite da li možete da otpremite fajlove (PUT verb, WebDav)

Ako otkrijete da je WebDav omogućen ali nemate dovoljno dozvola za otpremanje fajlova u root folderu, pokušajte da:

  • Brute Force credentials
  • Upload files putem WebDav-a u ostatak pronađenih foldera unutar web stranice. Možda imate dozvole da upload files u drugim folderima.

SSL/TLS ranjivosti

  • Ako aplikacija ne primorava korišćenje HTTPS-a ni u jednom delu, onda je ranjiva na MitM
  • Ako aplikacija šalje osetljive podatke (passwords) preko HTTP-a, onda je to ozbiljna ranjivost.

Koristite testssl.sh da proverite ranjivosti (U Bug Bounty programima verovatno ovakve vrste ranjivosti neće biti prihvaćene) i koristite a2sv da ponovo proverite ranjivosti:

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

Pokrenite neki vid spider unutar web-a. Cilj spidera je da pronađe što više putanja iz testirane aplikacije. Stoga treba koristiti web crawling i eksterne izvore da se pronađe što više validnih putanja.

  • gospider (go): HTML spider, LinkFinder u JS fajlovima i eksternim izvorima (Archive.org, CommonCrawl.org, VirusTotal.com).
  • hakrawler (go): HTML spider, sa LinkFinder za JS fajlove i Archive.org kao eksterni izvor.
  • dirhunt (python): HTML spider, takođe ukazuje na “juicy files”.
  • evine (go): Interaktivni CLI HTML spider. Takođe pretražuje Archive.org
  • meg (go): Ovaj alat nije spider ali može biti koristan. Možete navesti fajl sa hostovima i fajl sa putanjama i meg će fetch-ovati svaku putanju na svakom hostu i sačuvati response.
  • urlgrab (go): HTML spider sa JS rendering mogućnostima. Međutim, izgleda da je unmaintained, prekompajlirana verzija je stara i trenutni kod se ne kompajlira.
  • gau (go): HTML spider koji koristi eksterne provajdere (wayback, otx, commoncrawl)
  • ParamSpider: Skripta će pronaći URL-ove sa parametrima i izlistati ih.
  • galer (go): HTML spider sa JS rendering mogućnostima.
  • LinkFinder (python): HTML spider, sa JS beautify mogućnostima sposoban da traži nove putanje u JS fajlovima. Vredi pogledati i JSScanner, koji je wrapper za LinkFinder.
  • goLinkFinder (go): Za ekstrakciju endpoints kako iz HTML source-a tako i iz embedded javascript fajlova. Korisno za bug hunter-e, red team-ere, infosec ninje.
  • JSParser (python2.7): Python 2.7 skripta koja koristi Tornado i JSBeautifier da parsira relativne URL-ove iz JavaScript fajlova. Korisno za lako otkrivanje AJAX zahteva. Izgleda neodržavano.
  • relative-url-extractor (ruby): Dajući fajl (HTML) ekstrahuje URL-ove koristeći zgodne regex-e da nađe i izvadi relativne URL-ove iz minifikovanih fajlova.
  • JSFScan (bash, several tools): Prikuplja zanimljive informacije iz JS fajlova koristeći više alata.
  • subjs (go): Pronalazi JS fajlove.
  • page-fetch (go): Učita stranicu u headless browser-u i ispiše sve URL-ove koji su učitani da bi se stranica prikazala.
  • Feroxbuster (rust): Content discovery alat koji kombinuje više opcija iz prethodnih alata
  • Javascript Parsing: Burp extension da nađe path i params u JS fajlovima.
  • Sourcemapper: Alat koji dat .js.map URL preuzme i da vam beatified JS kod
  • xnLinkFinder: Alat koji se koristi za otkrivanje endpoints za dati target.
  • waymore: Otkrij linkove iz wayback machine (takođe download-uje response u wayback-u i traži dodatne linkove)
  • HTTPLoot (go): Crawl-uje (čak i popunjava forme) i takođe nalazi osetljive informacije koristeći specifične regex-e.
  • SpiderSuite: Spider Suite je napredni multi-feature GUI web security Crawler/Spider dizajniran za sajber bezbednosne profesionalce.
  • jsluice (go): Go package i command-line tool za ekstrakciju URL-ova, putanja, secrets i drugih zanimljivih podataka iz JavaScript source koda.
  • ParaForge: ParaForge je jednostavan Burp Suite extension da ekstrahuje parametre i endpoints iz request-a kako bi kreirao custom wordlist za fuzzing i enumeration.
  • katana (go): Sjajan alat za ovo.
  • Crawley (go): Ispisuje svaki link koji uspe da pronađe.

Brute Force directories and files

Počnite sa brute-forcing iz root folder-a i uverite se da brute-force-ujete sve direktorijume koji su pronađeni korišćenjem ovog metoda i sve direktorijume otkrivene tokom Spidering (možete ovo raditi rekurzivno i dodavati na početak korišćene wordlist-e nazive pronađenih direktorijuma).
Alati:

  • Dirb / Dirbuster - Uključeni u Kali, stari (i spori) ali funkcionalni. Dozvoljavaju auto-signed sertifikate i rekurzivno pretraživanje. Previše spori u poređenju sa ostalim opcijama.
  • Dirsearch (python): Ne dozvoljava auto-signed sertifikate ali dozvoljava rekurzivno pretraživanje.
  • Gobuster (go): Dozvoljava auto-signed sertifikate, nema rekurzivno pretraživanje.
  • 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): Ovo nije spider već alat koji, dajući listu pronađenih URL-ova, uklanja “duplicirane” URL-ove.
  • Scavenger: Burp Extension za kreiranje liste direktorijuma iz burp history različitih stranica
  • TrashCompactor: Uklanja URL-ove sa dupliranim funkcionalnostima (bazirano na js import-ima)
  • Chamaleon: Koristi wapalyzer da detektuje korišćene tehnologije i izabere wordlist-e koje treba koristiti.

Preporučene wordlist-e:

Napomena: kad god se novi direktorijum otkrije tokom brute-forcing-a ili spidering-a, treba ga brute-forc-ovati.

What to check on each file found

Special findings

Tokom obavljanja spidering i brute-forcing možete naći interesantne stvari na koje treba obratiti pažnju.

Interesantni fajlovi

403 Forbidden/Basic Authentication/401 Unauthorized (bypass)

403 & 401 Bypasses

502 Proxy Error

Ako neka stranica odgovori tim kodom, verovatno je loše konfigurisan proxy. Ako pošaljete HTTP zahtev kao: GET https://google.com HTTP/1.1 (sa host header-om i ostalim uobičajenim header-ima), proxy će pokušati da pristupi google.com i otkrićete SSRF.

NTLM Authentication - Info disclosure

Ako server koji traži autentikaciju radi na Windows ili nađete login koji traži vaše credentials (i traži domain name), možete izazvati info disclosure.
Pošaljite header: “Authorization: NTLM TlRMTVNTUAABAAAAB4IIAAAAAAAAAAAAAAAAAAAAAAA=” i zbog načina na koji NTLM authentication funkcioniše, server će odgovoriti internim informacijama (IIS verzija, Windows verzija…) unutar header-a “WWW-Authenticate”.
Možete automatizovati ovo koristeći nmap plugin “http-ntlm-info.nse”.

HTTP Redirect (CTF)

Moguće je staviti sadržaj unutar Redirection. Taj sadržaj neće biti prikazan korisniku (jer će browser izvršiti redirection) ali nešto može biti sakriveno u njemu.

Web Vulnerabilities Checking

Sada kada je urađena sveobuhvatna enumeracija web aplikacije, vreme je da se proveri veliki broj mogućih ranjivosti. Check-listu možete naći ovde:

Web Vulnerabilities Methodology

Više informacija o web ranjivostima:

Monitor Pages for changes

Možete koristiti alate kao što je https://github.com/dgtlmoon/changedetection.io da monitorišete stranice za modifikacije koje mogu uvesti ranjivosti.

HackTricks Automatic Commands

HackTricks Automatske komande ```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]
> Učite i vežbajte 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;">\
> Učite i vežbajte 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;">
> Učite i vežbajte 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>Podržite HackTricks</summary>
>
> - Proverite [**planove pretplate**](https://github.com/sponsors/carlospolop)!
> - **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili **pratite** nas na **Twitteru** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
> - **Podelite hakerske trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
>
> </details>