80,443 - Pentesting Web Methodology

Reading time: 20 minutes

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 portovi: 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

Web API Guidance

Web API Pentesting

Sažetak metodologije

U ovoj metodologiji pretpostavljamo da ćete napasti jedan domen (ili poddomen) i samo njega. Dakle, treba da primenite ovu metodologiju na svaki otkriveni domen, poddomen ili IP sa neodređenim web serverom koji je u opsegu.

  • Počnite sa identifikacijom 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 tehnologije?
  • Koristi li se neka well known tech? Postoji li neki koristan trik za dobijanje više informacija?
  • Ima li neki specialised scanner za pokretanje (npr. wpscan)?
  • Pokrenite general purposes scanners. Nikad ne znate da li će nešto pronaći ili otkriti zanimljive informacije.
  • Počnite sa initial checks: 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 files, folders i parameters being used. Takođe, proverite za special findings.
  • Napomena: svaki put kada se novi direktorijum otkrije tokom brute-forcing ili spidering, treba ga spider-ovati.
  • Directory Brute-Forcing: Pokušajte da brute force-ujete sve otkrivene foldere u potrazi za novim files i directories.
  • Napomena: svaki put kada se novi direktorijum otkrije tokom brute-forcing ili spidering, treba ga Brute-Forced.
  • Backups checking: Testirajte da li možete da pronađete backups od otkrivenih fajlova dodavanjem uobičajenih backup ekstenzija.
  • Brute-Force parameters: Pokušajte da pronađete skrivene parametre.
  • Kada ste identifikovali sve moguće endpoints koji prihvataju user input, proverite sve vrste vulnerabilities vezanih za njih.
  • Follow this checklist

Server Version (Vulnerable?)

Identifikacija

Proverite da li postoje poznate ranjivosti za verziju servera koja se pokreće.
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 mogu biti korisni i alati whatweb, webtech or https://builtwith.com/:

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

Potraži ranjivosti verzije web aplikacije

Proveri da li postoji WAF

Trikovi za web tehnologije

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

Imajte u vidu da isti domen može koristiti različite tehnologije na različitim portovima, folderima i poddomenima.
Ako web aplikacija koristi neku dobro poznatu tehnologiju/platformu navedenu gore ili neku drugu, ne zaboravi da pretražiš Internet za nove trikove (i obavesti me!).

Pregled izvornog koda

Ako je source code aplikacije dostupan na github-u, pored izvođenja od strane tebe samog White box testa aplikacije, postoji nekoliko informacija koje bi mogle biti korisne za trenutni Black-Box testing:

  • Postoji li Change-log ili Readme ili Version fajl ili bilo šta sa informacijama o verziji dostupno putem weba?
  • Kako i gde su sačuvani credentials? Postoji li neki (dostupan?) fajl sa credentials (usernames or passwords)?
  • Da li su passwords u plain text, encrypted ili koji hashing algorithm se koristi?
  • Da li koristi neki master key za enkriptovanje nečega? Koji algoritam se koristi?
  • Možete li pristupiti nekom od tih fajlova iskorišćavanjem neke ranjivosti?
  • Ima li neke interesantne informacije u github (solved and not solved) issues? Ili u commit history (možda je neka lozinka uvedena u starom commit-u)?

Source code Review / SAST Tools

Automatski skeneri

Skeneri opšte namene 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 scanners

Ako se koristi CMS, ne zaboravite da run a scanner, možda se pronađe nešto interesantno:

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

U ovom trenutku trebalo bi već da imate neke informacije o web serveru koji klijent koristi (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 scanner.

Otkrivanje web aplikacije korak po korak

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

Početne provere

Podrazumevane stranice sa zanimljivim informacijama:

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

Izazivanje grešaka

Web serveri se mogu ponašati neočekivano kada im se pošalju čudni podaci. Ovo može otvoriti ranjivosti 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 biste izazvali greške
  • Generišite grešku dajući ulaz kao /~randomthing/%s na kraju URL-a
  • Pokušajte 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 folder, pokušajte da:

  • Brute Force credentials
  • Otpremite fajlove putem WebDav-a u ostatak pronađenih foldera unutar web stranice. Možda imate dozvole za otpremanje fajlova u drugim folderima.

SSL/TLS ranjivosti

  • Ako aplikacija ne forsira korišćenje HTTPS-a ni u jednom delu, onda je ranjiva na MitM
  • Ako aplikacija šalje osetljive podatke (lozinke) koristeći HTTP — to je visoka ranjivost.

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

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>

Informacije o SSL/TLS ranjivostima:

Spidering

Pokrenite neku vrstu spider unutar web-a. Cilj spidera je da pronađe što više puteva iz testirane aplikacije. Zato treba koristiti web crawling i eksterne izvore kako biste pronašli što više validnih puteva.

  • gospider (go): HTML spider, LinkFinder in JS files i eksterni izvori (Archive.org, CommonCrawl.org, VirusTotal.com).
  • hakrawler (go): HML spider, sa LinkFider za JS fajlove i Archive.org kao eksterni izvor.
  • dirhunt (python): HTML spider, takođe označava "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 hosts i fajl sa putanjama i meg će dohvatiti svaku putanju na svakom hostu i sačuvati odgovor.
  • urlgrab (go): HTML spider sa mogućnostima renderovanja JS-a. Međutim, izgleda da nije održavan, predkompajlirana verzija je stara i trenutni kod se ne kompajlira
  • gau (go): HTML spider koji koristi eksterne provajdere (wayback, otx, commoncrawl)
  • ParamSpider: Ovaj skript će naći URL-ove sa parametrima i izlistati ih.
  • galer (go): HTML spider sa mogućnostima renderovanja JS-a.
  • LinkFinder (python): HTML spider, sa JS beautify mogućnostima sposoban da traži nove putanje u JS fajlovima. Vredi takođe pogledati JSScanner, koji je wrapper za LinkFinder.
  • goLinkFinder (go): Za ekstrakciju endpoint-a u HTML source-u i ugrađenim javascript fajlovima. Korisno za bug hunter-e, red team-ere, infosec ninje.
  • JSParser (python2.7): Python 2.7 skript koji koristi Tornado i JSBeautifier za parsiranje relativnih URL-ova iz JavaScript fajlova. Korisno za lakše otkrivanje AJAX zahteva. Izgleda neodržavano.
  • relative-url-extractor (ruby): Ako se preda fajl (HTML) izvući će URL-ove iz njega koristeći pametne regularne izraze da pronađe i ekstrahuje relativne URL-ove iz "ružnih" (minifikovanih) fajlova.
  • JSFScan (bash, nekoliko alata): Sakuplja interesantne 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 za tu stranicu.
  • Feroxbuster (rust): Alat za otkrivanje sadržaja koji kombinuje nekoliko opcija prethodnih alata
  • Javascript Parsing: Burp ekstenzija za pronalaženje path-ova i params u JS fajlovima.
  • Sourcemapper: Alat koji, dat .js.map URL, dobije beatified JS kod
  • xnLinkFinder: Alat za otkrivanje endpoint-a za dati target.
  • waymore: Otkriva linkove iz wayback machine (takođe preuzima odgovore iz wayback-a i traži više linkova)
  • HTTPLoot (go): Crawl-uje (čak i popunjavanjem formi) 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 cyber security profesionalce.
  • jsluice (go): Go paket i command-line tool za ekstrakciju URL-ova, path-ova, secret-a i drugih interesantnih podataka iz JavaScript izvornog koda.
  • ParaForge: ParaForge je jednostavna Burp Suite extension za ekstrakciju parametara i endpoint-a iz request-a za kreiranje custom wordlist-e za fuzzing i enumeraciju.
  • katana (go): Odličan alat za ovo.
  • Crawley (go): Ispisuje svaki link koji uspe da pronađe.

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:

Imajte na umu da kad god se novi direktorijum otkrije tokom brute-forcing-a ili spideringa, treba ga Brute-Forced.

What to check on each file found

Special findings

Tokom izvođenja spideringa i brute-forcing-a možete naći interesantne stvari na koje treba obratiti pažnju.

Interesting files

403 Forbidden/Basic Authentication/401 Unauthorized (bypass)

403 & 401 Bypasses

502 Proxy Error

Ako neka stranica odgovori tim kodom, verovatno je to pogrešno 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 tada ste pronašli SSRF.

NTLM Authentication - Info disclosure

Ako server koji zahteva autentifikaciju radi na Windows-u ili ako naiđete na login koji traži vaše credentials (i traži i domain name), možete izazvati otkrivanje informacija.
Pošaljite header: “Authorization: NTLM TlRMTVNTUAABAAAAB4IIAAAAAAAAAAAAAAAAAAAAAAA=” i zbog načina na koji NTLM authentication radi, server će odgovoriti internim informacijama (IIS verzija, Windows verzija...) u header-u "WWW-Authenticate".
Možete ovo automatizovati 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 (pošto će browser izvršiti redirekciju) ali nešto može biti sakriveno u njoj.

Web Vulnerabilities Checking

Sada kada je izvršena sveobuhvatna enumeracija web aplikacije, vreme je da se proveri veliki broj mogućih ranjivosti. Checklist možete naći ovde:

Web Vulnerabilities Methodology

Više informacija o web vulns pogledajte:

Monitor Pages for changes

Možete koristiti alate kao što je https://github.com/dgtlmoon/changedetection.io za praćenje stranica zbog izmena koje bi mogle ubaciti ranjivosti.

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

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