28 KiB

80,443 - Pentesting Web metodologija

{{#include ../../banners/hacktricks-training.md}}

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

Vodič za Web API

{{#ref}} web-api-pentesting.md {{#endref}}

Sažetak metodologije

U ovoj metodologiji pretpostavićemo da ćete napadati jedan domain (ili subdomain) i samo njega. Dakle, treba da primenite ovu metodologiju na svaki otkriven domain, subdomain ili IP sa nedefinisanim web serverom unutar opsega.

  • Počnite sa identifikacijom tehnologija koje koristi web server. Potražite trikove koje treba imati na umu tokom ostatka testa ako uspete da identifikujete tehnologiju.
  • Postoji li neka poznata ranjivost za verziju te tehnologije?
  • Koristi li se neka well known tech? Postoji li neki useful trick za dobijanje više informacija?
  • Postoji li neki specialised scanner za pokretanje (npr. wpscan)?
  • Pokrenite general purposes scanners. Nikad ne znate hoće li pronaći nešto ili neke interesantne informacije.
  • Počnite sa initial checks: robots, sitemap, 404 error i SSL/TLS scan (ako 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 kad se otkrije novi directory tokom brute-forcing ili spidering, treba ga spiderovati.
  • Directory Brute-Forcing: Pokušajte da brute force-ujete sve otkrivene folders tražeći nove files i directories.
  • Napomena: svaki put kad se otkrije novi directory tokom brute-forcing ili spidering, treba da bude Brute-Forced.
  • Backups checking: Testirajte da li možete pronaći backups od discovered files dodavanjem uobičajenih backup ekstenzija.
  • Brute-Force parameters: Pokušajte da find hidden parameters.
  • Kada ste identifikovali sve moguće endpoints koji prihvataju user input, proverite sve vrste vulnerabilities vezanih za njih.
  • Sledite ovu kontrolnu listu

Verzija servera (Ranjiv?)

Identifikacija

Proverite da li postoje poznate ranjivosti za verziju servera koja se pokreće.
HTTP headers and cookies of the response mogu biti veoma korisni za identifikaciju tehnologija i/ili verzije koja se koristi. 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

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 od prethodno navedenih dobro poznatih tehnologija/platformi ili neku drugu, ne zaboravite da pretražite Internet za nove trikove (i javite mi!).

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:

  • Postoji li Change-log, Readme ili Version fajl ili nešto sa informacijama o verziji dostupnim preko weba?
  • Kako i gde su sačuvane credentials? Postoji li neki (pristupačni?) file sa credentials (korisnička imena ili passwords)?
  • Da li su passwords u plain text, encrypted ili koji hashing algorithm se koristi?
  • Da li koristi neki master key za enkripciju nečega? Koji algorithm se koristi?
  • Možete li pristupiti bilo kojem od ovih fajlova iskorišćavanjem neke ranjivosti?
  • Ima li neke zanimljive informacije na githubu (rešene i nerešene) issues? Ili u commit history (možda je neka password ubačen u starom commitu)?

{{#ref}} code-review-tools.md {{#endref}}

Automatski skeneri

General purpose automatic scanners

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 skeneri

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

Clusterd: JBoss, ColdFusion, WebLogic, Tomcat, Railo, Axis2, Glassfish
CMSScan: WordPress, Drupal, Joomla, vBulletin web sajtove zbog sigurnosnih problema. (GUI)
VulnX: Joomla, Wordpress, Drupal, PrestaShop, Opencart
CMSMap: (W)ordpress, (J)oomla, (D)rupal ili (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 ovoj fazi trebalo bi da već imate neke informacije o web serveru koji koristi klijent (ako su dati podaci) i neke trikove koje treba imati na umu tokom testa. Ako imate sreće, čak ste pronašli CMS i pokrenuli neki scanner.

Koračno otkrivanje web aplikacije

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.

Navođenje grešaka

Web serveri se mogu ponašati neočekivano kada im se pošalju čudni podaci. To 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 vrednosti cookie-ja i parametara da izazovete greške
  • Generišite grešku unošenjem /~randomthing/%s na kraj URL-a
  • Isprobajte različite 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
  • Upload files via WebDav u ostatak pronađenih foldera unutar web stranice. Možda imate dozvole da otpremite fajlove u drugim folderima.

SSL/TLS ranjivosti

  • Ako aplikacija ne primorava korišćenje HTTPS ni u jednom delu, onda je ranjiva na MitM
  • Ako aplikacija šalje osetljive podatke (lozinke) koristeći HTTP. To predstavlja visoku ranjivost.

Koristite testssl.sh da proverite ranjivosti (u Bug Bounty programima verovatno ove 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>

Informacije o SSL/TLS ranjivostima:

Spidering

Pokrenite neku vrstu spider unutar web-a. Cilj spider-a je da pronađe što više putanja iz testirane aplikacije. Stoga, web crawling i eksterni izvori treba da se koriste da bi se pronašlo što više validnih putanja.

  • gospider (go): HTML spider, LinkFinder u JS files i eksternim izvorima (Archive.org, CommonCrawl.org, VirusTotal.com, AlienVault.com).
  • hakrawler (go): HML spider, sa LinkFider za JS files 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 samo navesti fajl sa hostovima i fajl sa putanjama i meg će fetch-ovati svaku putanju na svakom hostu i sačuvati odgovor.
  • urlgrab (go): HTML spider sa JS rendering mogućnostima. Međutim, izgleda da nije održavan, prekompajlirana verzija je stara i trenutni kod se ne kompajlira
  • gau (go): HTML spider koji koristi eksterne provajdere (wayback, otx, commoncrawl)
  • ParamSpider: Skripta koja će nać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 files. Može biti korisno takođe pogledati JSScanner, koji je wrapper LinkFinder-a.
  • goLinkFinder (go): Za ekstrakciju endpoints kako iz HTML source-a tako i iz embedded javascript fajlova. Korisno za bug hunter-e, red team-e, infosec ninje.
  • JSParser (python2.7): Python 2.7 skripta koja koristi Tornado i JSBeautifier za parsiranje relativnih URL-ova iz JavaScript fajlova. Korisno za lako otkrivanje AJAX zahteva. Izgleda neodržavano.
  • relative-url-extractor (ruby): Za dati fajl (HTML) ekstrahuje URL-ove koristeći zgodan regularni izraz da pronađe i izvuče relativne URL-ove iz "ružnih" (minify) fajlova.
  • JSFScan (bash, nekoliko alata): Prikuplja interesantne informacije iz JS files koristeći više alata.
  • subjs (go): Pronalazi JS files.
  • page-fetch (go): Učita stranicu u headless browser-u i ispiše sve URL-ove koje je učitao da bi učitao stranicu.
  • Feroxbuster (rust): Tool za otkrivanje sadržaja kombinujući nekoliko opcija prethodnih alata
  • Javascript Parsing: Burp ekstenzija za pronalaženje path i params u JS files.
  • Sourcemapper: Alat koji, dat .js.map URL, dobije beatified JS kod
  • xnLinkFinder: Alat za otkrivanje endpoints za dati target.
  • waymore: Otkrij linkove iz wayback machine-a (takođe preuzimajući odgovore u wayback i tražeći dalje linkove)
  • HTTPLoot (go): Crawl-uje (čak i popunjavanjem formi) i takođe pronalazi 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 package i command-line tool za ekstrakciju URL-ova, putanja, sekretâ i drugih interesantnih podataka iz JavaScript source koda.
  • ParaForge: ParaForge je jednostavna Burp Suite extension za ekstrakciju parametara i endpoints iz request-a da bi se kreirao custom wordlist za fuzzing i enumeraciju.
  • katana (go): Sjajan tool 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 obavezno brute-force-ujte sve direktorijume koji su pronađeni koristeći ovu metodu i sve direktorijume otkrivene tokom Spidering (možete izvršiti brute-forcing rekurzivno i dodati na početak korišćene wordlist-e imena pronađenih direktorijuma).
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.

Preporučene liste reči:

Napomena: kad god se novi direktorijum otkrije tokom brute-forcing-a ili spidering-a, treba da bude Brute-Forced.

What to check on each file found

Special findings

Tokom izvođenja spidering i brute-forcing možete naići na interesantne stvari koje treba primetiti.

Interesting files

403 Forbidden/Basic Authentication/401 Unauthorized (bypass)

{{#ref}} 403-and-401-bypasses.md {{#endref}}

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 tada ste pronašli SSRF.

NTLM Authentication - Info disclosure

Ako server koji traži autentifikaciju radi na Windows ili nađete 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 u header-u "WWW-Authenticate" odgovoriti internim informacijama (IIS version, Windows version...).
Možete ovo automatizovati koristeći nmap plugin "http-ntlm-info.nse".

HTTP Redirect (CTF)

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

Web Vulnerabilities Checking

Sad kada je izvršena sveobuhvatna enumeracija web aplikacije, vreme je da se proveri veliki broj mogućih ranjivosti. Možete pronaći checklist ovde:

{{#ref}} ../../pentesting-web/web-vulnerabilities-methodology.md {{#endref}}

Više informacija o web vuln-ovima:

Monitor Pages for changes

Možete koristiti alate kao što je https://github.com/dgtlmoon/changedetection.io za praćenje stranica radi modifikacija koje bi mogle uvesti 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}

{{#include ../../banners/hacktricks-training.md}}