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

Vodič za Web API

Web API Pentesting

Sažetak metodologije

U ovoj metodologiji pretpostavljamo da ćete napadati jedan domen (ili subdomen) i samo njega. Dakle, treba da primenite ovu metodologiju na svaki otkriveni domen, subdomen ili IP sa neodređenim 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 uspešno identifikujete tehnologiju.
  • Postoji li neka poznata ranjivost verzije te tehnologije?
  • Koristi li se neka well known tech? Postoji li neki useful trick za izvlačenje više informacija?
  • Postoji li neki specialised scanner koji treba pokrenuti (like wpscan)?
  • Pokrenite general purposes scanners. Nikad ne znate da li će nešto naći ili otkriti zanimljive informacije.
  • Počnite sa initial checks: robots, sitemap, 404 error i SSL/TLS scan (if HTTPS).
  • Počnite sa spidering web stranice: vreme je da pronađete sve moguće files, folders i parameters being used. Takođe, proverite special findings.
  • Napomena: kad god se otkrije novi directory tokom brute-forcing ili spidering, treba ga spidered.
  • Directory Brute-Forcing: Pokušajte da brute force-ujete sve otkrivene foldere tražeći nove files i directories.
  • Napomena: kad god se otkrije novi directory tokom brute-forcing ili spidering, treba ga 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 identified sve moguće endpoints koji prihvataju user input, proverite sve vrste vulnerabilities vezanih za njih.
  • Follow this checklist

Verzija servera (Ranjiv?)

Identifikacija

Proverite da li postoje known vulnerabilities za serversku version koja je u radu.
The HTTP headers and cookies of the response could be very useful to identify the technologies and/or version being used. Nmap scan can identify the server version, but it could also be useful the tools whatweb, webtech or https://builtwith.com/ :

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

Pretraži za ranjivosti verzije web aplikacije

Proveri 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 poddomenima.
Ako web aplikacija koristi bilo koju dobro poznatu tehnologiju/platformu navedenu ranije ili neku drugu, ne zaboravite da pretražite Internet za nove trikove (i obavestite me!).

Revizija izvornog koda

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

  • Da li postoji Change-log ili Readme ili Version fajl ili bilo šta sa informacijama o verziji dostupno preko weba?
  • Kako i gde su sačuvani kredencijali? Da li postoji neki (dostupan?) fajl sa kredencijalima (korisnička imena ili lozinke)?
  • Da li su lozinke u plain text, šifrovane 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?
  • Postoji li neka zanimljiva informacija u github (issues rešeni i nerešeni)? Ili u istoriji commit-ova (možda je neka lozinka uvedena u starom commitu)?

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"

CMS skeneri

Ako se koristi CMS, ne zaboravi da pokreneš skener, možda se nađe nešto vredno:

Clusterd: JBoss, ColdFusion, WebLogic, Tomcat, Railo, Axis2, Glassfish
CMSScan: WordPress, Drupal, Joomla, vBulletin sajtove za bezbednosne probleme. (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 ovom trenutku bi trebalo da već imate neke informacije o web serveru koji koristi klijent (ako su podaci dostupni) i nekoliko trikova koje treba imati na umu tokom testa. Ako imate sreće, čak ste pronašli CMS i pokrenuli neki scanner.

Korak-po-korak otkrivanje web aplikacije

Od ovog trenutka počinjemo interakciju 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.

Prisiljavanje grešaka

Web serveri se mogu ponašati neočekivano kada im se pošalju neobični 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)
  • Add “[]”, “]]”, and “[[” u cookie values i parameter values da izazovete greške
  • Generišite grešku unošenjem /~randomthing/%s na kraj URL-a
  • Probajte različite HTTP metode kao PATCH, DEBUG ili pogrešne kao FAKE

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

Ako ustanovite da je WebDav omogućen, ali nemate dovoljne dozvole za uploading files u root folderu, pokušajte da:

  • Brute Force credentials
  • Upload files preko WebDav-a u preostale found folders unutar web stranice. Možda imate dozvole da upload-ujete fajlove u drugim folderima.

SSL/TLS ranjivosti

  • Ako aplikacija ne prisiljava korišćenje HTTPS-a ni u jednom delu, onda je ranjiva na MitM
  • Ako aplikacija šalje osetljive podatke (lozinke) putem HTTP-a, to je visoka 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 neku vrstu spider unutar web-a. Cilj spider-a je da pronađe što više puteva iz testirane aplikacije. Zato treba koristiti web crawling i eksterne izvore da bi se pronašlo što više validnih puteva.

  • gospider (go): HTML spider, LinkFinder u JS fajlovima i eksternim izvorima (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 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 mogućnostima renderovanja JS. Međutim, deluje kao 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 pronaći URL-ove sa parametrima i izlistati ih.
  • galer (go): HTML spider sa mogućnostima renderovanja JS.
  • LinkFinder (python): HTML spider, sa JS beautify mogućnostima sposoban da traži nove puteve u JS fajlovima. Takođe vredi pogledati JSScanner, koji je wrapper za LinkFinder.
  • goLinkFinder (go): Za ekstrakciju endpoint-a u HTML izvoru i ugrađenim javascript fajlovima. Korisno za bug hunter-e, red team-e, 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. Deluje kao da nije održavan.
  • relative-url-extractor (ruby): Dat fajl (HTML) iz njega ekstrahuje URL-ove koristeći zgodan regularni izraz da pronađe i izvuče relativne URL-ove iz “ružnih” (minified) fajlova.
  • JSFScan (bash, several tools): 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 da bi se stranica prikazala.
  • Feroxbuster (rust): Content discovery alat koji meša nekoliko opcija prethodnih alata
  • Javascript Parsing: Burp ekstenzija za pronalaženje puteva i parametara u JS fajlovima.
  • BurpJSLinkFinder Enhanced: Burp extension (Jython) koji pasivno analizira JavaScript odgovore (po MIME tipu i /js putanjama) da ekstrahuje endpoint-e/linkove i opciono označi ugradjene tajne sa severity.
  • Sourcemapper: Alat koji, dat .js.map URL, dobije beatified JS kod
  • xnLinkFinder: Alat za otkrivanje endpoint-a za dati target.
  • waymore: Otkrij 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 sensitivan info koristeći specifične regex-ove.
  • 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, tajni i drugih interesantnih podataka iz JavaScript izvornog koda.
  • ParaForge: ParaForge je jednostavan Burp Suite extension za ekstrakciju parametara i endpoint-a iz request-a da bi se napravile 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 direktorijuma i fajlova

Počnite sa brute-forcing iz root foldera i budite sigurni da brute-forcujete sve direktorijume koje nađete koristeći ovu metodu i sve direktorijume otkrivene tokom Spidering (možete raditi brute-forcing rekurzivno i dodavati na početak korišćene wordlist-e imena pronađenih direktorijuma).
Alati:

  • Dirb / Dirbuster - Uključeno u Kali, star (i spor) ali funkcionalan. Dozvoljava auto-signed sertifikate i rekurzivnu pretragu. Previše spor u odnosu na druge opcije.
  • Dirsearch (python): Ne dozvoljava auto-signed sertifikate ali dozvoljava rekurzivnu pretragu.
  • Gobuster (go): Dozvoljava auto-signed sertifikate, ne poseduje rekurzivnu pretragu.
  • Feroxbuster - Brz, podržava rekurzivnu pretragu.
  • wfuzz wfuzz -w /usr/share/seclists/Discovery/Web-Content/raft-medium-directories.txt https://domain.com/api/FUZZ
  • ffuf - Brz: ffuf -c -w /usr/share/wordlists/dirb/big.txt -u http://10.10.10.10/FUZZ
  • uro (python): Ovo nije spider već alat koji datu listu pronađenih URL-ova očišćava od “duplikata”.
  • Scavenger: Burp Extension za kreiranje liste direktorijuma iz burp history različitih stranica
  • TrashCompactor: Uklanja URL-ove sa duplim funkcionalnostima (bazirano na js import-ima)
  • Chamaleon: Koristi wapalyzer da detektuje korišćene tehnologije i izabere wordlist-e za upotrebu.

Preporučene rečnike:

Napomena: svaki put kada se otkrije novi direktorijum tokom brute-forcing-a ili spidering-a, treba ga Brute-Forcovati.

Šta proveriti za svaki pronađeni fajl

Special findings

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

Interesantni fajlovi

403 Forbidden/Basic Authentication/401 Unauthorized (bypass)

403 & 401 Bypasses

502 Proxy Error

Ako neka stranica odgovori sa 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 drugim uobičajenim header-ima), proxy će pokušati da pristupi google.com i tada ste verovatno našli SSRF.

NTLM Authentication - Info disclosure

Ako server koji traži autentifikaciju radi na Windows-u ili nađete login koji traži vaše credentials (i traž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…) unutar header-a “WWW-Authenticate”.
Možete automatizovati ovo koristeći nmap pluginhttp-ntlm-info.nse”.

HTTP Redirect (CTF)

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

Web Vulnerabilities Checking

Sada kada je obavljena sveobuhvatna enumeracija web aplikacije, vreme je da se proveri veliki broj mogućih ranjivosti. Možete pronaći checklistu ovde:

Web Vulnerabilities Methodology

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 izmena koje bi mogle ubaciti ranjivosti.

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>

## Reference

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

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