hacktricks/network-services-pentesting/pentesting-web/README.md

31 KiB

80,443 - Metodologija testiranja penetracije veb servisa

Naučite hakovanje AWS-a od nule do heroja sa htARTE (HackTricks AWS Red Team Expert)!

Drugi načini podrške HackTricks-u:

Ako ste zainteresovani za karijeru u hakovanju i hakovanje onoga što se ne može hakovati - zapošljavamo! (potrebno je tečno poznavanje poljskog jezika, kako pismeno tako i usmeno).

{% embed url="https://www.stmcyber.com/careers" %}

Osnovne informacije

Veb servis je najčešći i najobimniji servis i postoji mnogo različitih vrsta 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

{% content-ref url="web-api-pentesting.md" %} web-api-pentesting.md {% endcontent-ref %}

Rezime metodologije

U ovoj metodologiji pretpostavljamo da ćete napasti domen (ili poddomen) i samo to. Stoga, trebalo bi primeniti ovu metodologiju na svaki otkriveni domen, poddomen ili IP sa nepoznatim web serverom unutar opsega.

  • Počnite sa identifikacijom korišćenih tehnologija web servera. Potražite tričarije koje treba imati na umu tokom ostatka testa ako uspešno identifikujete tehnologiju.
  • Da li postoji poznata ranjivost verzije te tehnologije?
  • Korišćenje neke dobro poznate tehnologije? Bilo kakva korisna trik za izvlačenje više informacija?
  • Da li postoji specijalizovani skener za pokretanje (poput wpscan)?
  • Pokrenite skenere opšte namene. Nikad ne znate da li će pronaći nešto ili ako će pronaći neke zanimljive informacije.
  • Počnite sa početnim proverama: robots, sitemap, 404 greška i SSL/TLS sken (ako je HTTPS).
  • Počnite sa spideringom web stranice: Vreme je da pronađete sve moguće datoteke, fascikle i parametre koji se koriste. Takođe, proverite specijalna otkrića.
  • Imajte na umu da svaki put kada se otkrije nova fascikla tokom brute-forcinga ili spideringa, treba je spiderovati.
  • Brute-Force direktorijuma: Pokušajte da brute force-ujete sve otkrivene fascikle tražeći nove datoteke i direktorijume.
  • Imajte na umu da svaki put kada se otkrije nova fascikla tokom brute-forcinga ili spideringa, treba je Brute-Force-ovati.
  • Provera rezervnih kopija: Testirajte da li možete pronaći rezervne kopije otkrivenih datoteka dodavanjem uobičajenih ekstenzija za rezervne kopije.
  • Brute-Force parametara: Pokušajte da pronađete skrivene parametre.
  • Kada ste identifikovali sve moguće krajnje tačke koje prihvataju korisnički unos, proverite sve vrste ranjivosti povezane sa tim.
  • Pratite ovu listu za proveru

Verzija servera (Ranjiva?)

Identifikacija

Proverite da li postoje poznate ranjivosti za verziju servera koja se koristi.
HTTP zaglavlja i kolačići odgovora mogu biti veoma korisni za identifikaciju korišćenih tehnologija i/ili verzije. Nmap skeniranje može identifikovati verziju servera, ali mogu biti korisni 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

Pretraga za ranjivosti veb aplikacije verzije

Provera da li postoji WAF

Trikovi za veb tehnologije

Neki trikovi za pronalaženje ranjivosti u različitim dobro 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 veb aplikacija koristi neku od dobro poznatih tehnologija/platformi navedenih ranije ili bilo koju drugu, ne zaboravite da pretražite Internet za nove trikove (i obavestite me!).

Pregled izvornog koda

Ako je izvorni kod aplikacije dostupan na githubu, osim što ćete sami izvršiti White box test aplikacije, postoji neke informacije koje bi mogle biti korisne za trenutno Black-Box testiranje:

  • Da li postoji Change-log ili Readme ili fajl sa verzijom ili bilo šta sa informacijama o verziji dostupno putem veba?
  • Kako i gde su sačuvani kredencijali? Postoji li (dostupan?) fajl sa kredencijalima (korisnička imena ili lozinke)?
  • Da li su lozinke u čistom tekstu, šifrovane ili koji algoritam za heširanje se koristi?
  • Da li se koristi neki master ključ za šifrovanje nečega? Koji algoritam se koristi?
  • Možete li pristupiti nekom od ovih fajlova iskorišćavanjem neke ranjivosti?
  • Da li postoji interesantna informacija na githubu (rešeni i nerešeni) problemi? Ili u istoriji commitova (možda neka lozinka uneta u starom commitu)?

{% content-ref url="code-review-tools.md" %} code-review-tools.md {% endcontent-ref %}

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 pokrenuti skener, možda se pronađe nešto zanimljivo:

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 ovom trenutku već biste trebali imati neke informacije o web serveru koji koristi klijent (ako su dostupni podaci) i neke trikove na umu tokom testa. Ako imate sreće, možda ste čak pronašli CMS i pokrenuli neki skener.

Otkrivanje web aplikacije korak po korak

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/
  • Takođe proverite komentare na glavnim i sekundarnim stranicama.

Prisiljavanje grešaka

Veb serveri se mogu neočekivano ponašati kada im se šalju čudni podaci. To može otvoriti ranjivosti ili otkriti osetljive informacije.

  • Pristupite lažnim stranicama poput /bilo_šta_lažno.php (.aspx,.html,.itd)
  • Dodajte "[]", "]]" i "[[" u vrednosti kolačića i vrednosti parametara da biste izazvali greške
  • Generišite grešku unošenjem /~nasumično/%s na kraju URL-a
  • Pokušajte sa različitim HTTP glagolima poput PATCH, DEBUG ili pogrešnim poput FAKE

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

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

  • Bruteforce pristupne podatke
  • Otpremite fajlove putem WebDav-a u ostale pronađene foldere unutar web stranice. Možda imate dozvole za otpremanje fajlova u drugim folderima.

Ranjivosti SSL/TLS

  • Ako aplikacija ne zahteva korišćenje HTTPS od korisnika ni u jednom trenutku, onda je ranjiva na MitM napade
  • Ako aplikacija šalje osetljive podatke (šifre) putem HTTP-a. Tada je to visoka ranjivost.

Koristite testssl.sh za provere ranjivosti (U programima za Bug Bounty verovatno ove vrste ranjivosti neće biti prihvaćene) i koristite a2sv za ponovnu proveru 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 ranjivostima SSL/TLS protokola:

Spidering

Pokrenite neku vrstu spidera unutar veba. Cilj spajdera je da pronađe što više putanja kao moguće iz testirane aplikacije. Stoga, pretraživanje veba i spoljni izvori treba da se koriste kako bi se pronašlo što više validnih putanja.

  • gospider (go): HTML spider, LinkFinder u JS fajlovima i spoljni izvori (Archive.org, CommonCrawl.org, VirusTotal.com, AlienVault.com).
  • hakrawler (go): HML spider, sa LinkFiderom za JS fajlove i Archive.org kao spoljni izvor.
  • dirhunt (python): HTML spider, takođe pokazuje "sočne fajlove".
  • evine (go): Interaktivni CLI HTML spider. Takođe pretražuje u Archive.org
  • meg (go): Ovaj alat nije spider ali može biti koristan. Možete samo naznačiti fajl sa hostovima i fajl sa putanjama i meg će dohvatiti svaku putanju na svakom hostu i sačuvati odgovor.
  • urlgrab (go): HTML spider sa mogućnostima JS renderovanja. Međutim, izgleda da nije održavan, prekompajlirana verzija je stara i trenutni kod se ne kompajlira
  • gau (go): HTML spider koji koristi spoljne provajdere (wayback, otx, commoncrawl)
  • ParamSpider: Ovaj skript će pronaći URL-ove sa parametrima i izlistati ih.
  • galer (go): HTML spider sa mogućnostima JS renderovanja.
  • LinkFinder (python): HTML spider, sa mogućnostima JS lepote sposoban da traži nove putanje u JS fajlovima. Takođe bi bilo vredno pogledati i JSScanner, koji je omotač za LinkFinder.
  • goLinkFinder (go): Za izdvajanje krajnjih tačaka u HTML izvornom kodu i ugrađenim JS fajlovima. Korisno za lovce na bagove, timove crvenih šešira, infosec ninje.
  • JSParser (python2.7): Python 2.7 skript koji koristi Tornado i JSBeautifier za parsiranje relativnih URL-ova iz JavaScript fajlova. Korisno za lako otkrivanje AJAX zahteva. Izgleda da nije održavan.
  • relative-url-extractor (ruby): Dajući fajl (HTML) izvući će URL-ove iz njega koristeći pametne regularne izraze za pronalaženje i izdvajanje relativnih URL-ova iz ružnih (minifikovanih) fajlova.
  • JSFScan (bash, nekoliko alata): Sakupljanje interesantnih informacija iz JS fajlova koristeći nekoliko alata.
  • subjs (go): Pronalaženje JS fajlova.
  • page-fetch (go): Učitajte stranicu u headless pretraživaču i ispišite sve učitane URL-ove za učitavanje stranice.
  • Feroxbuster (rust): Alat za otkrivanje sadržaja koji kombinuje nekoliko opcija prethodnih alata
  • Javascript Parsing: Burp ekstenzija za pronalaženje putanja i parametara u JS fajlovima.
  • Sourcemapper: Alat koji će vam dati beatificirani JS kod dajući .js.map URL
  • xnLinkFinder: Ovo je alat koji se koristi za otkrivanje krajnjih tačaka za određenu metu.
  • waymore: Otkrijte linkove sa wayback mašine (takođe preuzimajući odgovore u wayback i tražeći više linkova
  • HTTPLoot (go): Pretražujte (čak i popunjavanjem formi) i takođe pronađite osetljive informacije koristeći specifične regexe.
  • SpiderSuite: Spider Suite je napredni višefunkcionalni GUI web sigurnosni Crawler/Spider dizajniran za profesionalce u oblasti kibernetičke sigurnosti.
  • jsluice (go): To je Go paket i komandno-linijski alat za izdvajanje URL-ova, putanja, tajni i drugih interesantnih podataka iz izvornog koda JavaScripta.
  • ParaForge: ParaForge je jednostavno Burp Suite proširenje za izdvajanje parametara i krajnjih tačaka iz zahteva kako bi se kreirala prilagođena lista reči za fuzzing i enumeraciju.

Brute Force direktorijumi i fajlovi

Počnite brute-forcing od korenskog foldera i budite sigurni da brute-force-ujete sve pronađene direktorijume koristeći ovu metodu i sve direktorijume otkrivene pomoću Spidering-a (možete ovo brute-force-ovati rekurzivno i dodavati na početak korišćene liste reči imena pronađenih direktorijuma).
Alati:

  • Dirb / Dirbuster - Uključen u Kali, star (i spor) ali funkcionalan. Dozvoljava auto-potpisane sertifikate i rekurzivnu pretragu. Previše spor u poređenju sa drugim opcijama.
  • Dirsearch (python): Ne dozvoljava auto-potpisane sertifikate ali dozvoljava rekurzivnu pretragu.
  • Gobuster (go): Dozvoljava auto-potpisane sertifikate, nema 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 će, dajući listu pronađenih URL-ova, obrisati "duplirane" URL-ove.
  • Scavenger: Burp ekstenzija za kreiranje liste direktorijuma iz burp istorije različitih stranica
  • TrashCompactor: Uklonite URL-ove sa dupliciranim funkcionalnostima (bazirano na js importima)
  • Chamaleon: Koristi wapalyzer za otkrivanje korišćenih tehnologija i odabir rečnika za korišćenje.

Preporučeni rečnici:

Napomena da svaki put kada se otkrije nova direktorijum tokom brute-forcinga ili spideringa, treba ga Brute-Forcovati.

Šta proveriti na svakom pronađenom fajlu

  • Provera pokvarenih linkova: Pronađite pokvarene linkove unutar HTML-a koji mogu biti podložni preuzimanju
  • Rezervne kopije fajlova: Kada pronađete sve fajlove, potražite rezervne kopije svih izvršnih fajlova (".php", ".aspx"...). Uobičajene varijacije za nazivanje rezervne kopije su: file.ext~, #file.ext#, ~file.ext, file.ext.bak, file.ext.tmp, file.ext.old, file.bak, file.tmp i file.old. Možete takođe koristiti alatke bfac ili backup-gen.
  • Otkrijte nove parametre: Možete koristiti alatke poput Arjun, parameth, x8 i Param Miner za otkrivanje skrivenih parametara. Ako možete, možete pokušati da pronađete skrivene parametre na svakom izvršnom veb fajlu.
  • Svi podrazumevani wordlistovi Arjuna: https://github.com/s0md3v/Arjun/tree/master/arjun/db
  • Param-miner "params": https://github.com/PortSwigger/param-miner/blob/master/resources/params
  • Assetnote "parameters_top_1m": https://wordlists.assetnote.io/
  • nullenc0de "params.txt": https://gist.github.com/nullenc0de/9cb36260207924f8e1787279a05eb773
  • Komentari: Proverite komentare svih fajlova, možete pronaći kredencijale ili skrivenu funkcionalnost.
  • Ako igrate CTF, "obična" prevara je sakriti informacije unutar komentara na desnoj strani stranice (koristeći stotine razmaka kako ne biste videli podatke ako otvorite izvorni kod pretraživačem). Druga mogućnost je koristiti nekoliko novih linija i sakriti informacije u komentaru na dnu veb stranice.
  • API ključevi: Ako pronađete bilo koji API ključ postoji vodič koji pokazuje kako koristiti API ključeve različitih platformi: keyhacks, zile, truffleHog, SecretFinder, RegHex, DumpsterDive, EarlyBird
  • Google API ključevi: Ako pronađete bilo koji API ključ koji izgleda kao AIzaSyA-qLheq6xjDiEIRisP_ujUseYLQCHUjik možete koristiti projekat gmapapiscanner da proverite koje API-je ključ može pristupiti.
  • S3 Bucketi: Dok spiderujete, proverite da li je bilo koji poddomen ili bilo koji link povezan sa nekim S3 bucketom. U tom slučaju, proverite dozvole bucket-a.

Posebna otkrića

Tokom izvođenja spideringa i brute-forcinga možete pronaći interesantne stvari koje treba primetiti.

Interesantni fajlovi

403 Forbidden/Basic Authentication/401 Unauthorized (bypass)

{% content-ref url="403-and-401-bypasses.md" %} 403-and-401-bypasses.md {% endcontent-ref %}

502 Proxy Error

Ako bilo koja stranica odgovori sa tim kodom, verovatno je loše konfigurisan proxy. Ako pošaljete HTTP zahtev poput: GET https://google.com HTTP/1.1 (sa host zaglavljem i ostalim uobičajenim zaglavljima), proxy će pokušati da pristupi google.com i otkrićete SSRF.

NTLM Autentikacija - Otkrivanje informacija

Ako pokrenuti server traži autentikaciju Windows-a ili pronađete prijavu koja traži vaše kredencijale (i traži ime domena), možete izazvati otkrivanje informacija.
Pošaljite zaglavlje: “Authorization: NTLM TlRMTVNTUAABAAAAB4IIAAAAAAAAAAAAAAAAAAAAAAA=” i zbog toga kako NTLM autentikacija funkcioniše, server će odgovoriti internim informacijama (verzija IIS-a, verzija Windows-a...) unutar zaglavlja "WWW-Authenticate".
Ovo možete automatizovati koristeći nmap plugin "http-ntlm-info.nse".

HTTP Preusmerenje (CTF)

Moguće je ubaciti sadržaj unutar Preusmerenja. Taj sadržaj neće biti prikazan korisniku (jer će pretraživač izvršiti preusmerenje), ali nešto bi moglo biti sakriveno unutra.

Provera ranjivosti veb stranica

Sada kada je obavljena sveobuhvatna enumeracija veb aplikacije, vreme je da se provere mnoge moguće ranjivosti. Možete pronaći listu za proveru ovde:

{% content-ref url="../../pentesting-web/web-vulnerabilities-methodology/" %} web-vulnerabilities-methodology {% endcontent-ref %}

Pronađite više informacija o ranjivostima veb stranica na:

Pratite stranice za promene

Možete koristiti alate poput https://github.com/dgtlmoon/changedetection.io da biste pratili stranice za modifikacije koje bi mogle uneti ranjivosti.

Ako vas zanima hakerska karijera i hakovanje neuhvatljivog - zapošljavamo! (potrebno je tečno poznavanje poljskog jezika u pisanju i govoru).

{% embed url="https://www.stmcyber.com/careers" %}

Automatske komande HackTricks

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.xyz/pentesting/pentesting-web

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}
Naučite hakovanje AWS-a od nule do heroja sa htARTE (HackTricks AWS Red Team Expert)!

Drugi načini da podržite HackTricks: