80,443 - Pentesting Web Methodology

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 u pisanju i govoru).

Osnovne Informacije

Web servis je najčešći i najopsežniji 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

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.

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 izvršiti White box testiranje 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 heširanja 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 zanimljiva informacija na githubu (rešeni i nerešeni) problemi? Ili u istoriji commitova (možda neka lozinka uneta u starom commitu)?

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 CMS-a

Ako se koristi CMS, ne zaboravite pokrenuti skener, možda pronađete 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 aplikacija 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/

  • 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 dajući unos kao /~slučajnost/%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 otpremiti fajlove (PUT glagol, WebDav)

Ako otkrijete da je WebDav omogućen ali nemate dovoljno dozvola za otpisivanje 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 forsira korišćenje HTTPS u bilo kom delu, onda je ranjiva na MitM napade

  • Ako aplikacija šalje osetljive podatke (šifre) putem HTTP. Tada je to visoka ranjivost.

Koristite testssl.sh za provere ranjivosti (U programima za nalaženje grešaka 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 spajdera unutar veba. Cilj spajdera je pronaći što više putanja kao moguće iz testirane aplikacije. Stoga, veb pretraživanje i spoljni izvori treba da se koriste kako bi se pronašlo što više validnih putanja.

  • gospider (go): HTML spajder, LinkFinder u JS fajlovima i spoljni izvori (Archive.org, CommonCrawl.org, VirusTotal.com, AlienVault.com).

  • hakrawler (go): HTML spajder, sa LinkFinder-om za JS fajlove i Archive.org kao spoljni izvor.

  • dirhunt (python): HTML spajder, takođe pokazuje "sočne fajlove".

  • evine (go): Interaktivni CLI HTML spajder. Takođe pretražuje u Archive.org

  • meg (go): Ovaj alat nije spajder 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 spajder 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 spajder koji koristi spoljne provajdere (wayback, otx, commoncrawl)

  • ParamSpider: Ovaj skript će pronaći URL-ove sa parametrima i izlistati ih.

  • galer (go): HTML spajder sa mogućnostima JS renderovanja.

  • LinkFinder (python): HTML spajder, sa mogućnostima JS lepote sposoban da traži nove putanje u JS fajlovima. Takođe bi bilo vredno pogledati 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 greške, crvene timove, 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 dati cilj.

  • 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 regularne izraze.

  • 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 JavaScript-a.

  • ParaForge: ParaForge je jednostavna Burp Suite ekstenzija za izdvajanje parametara i krajnjih tačaka iz zahteva kako bi se kreirala prilagođena lista reči za fuzzing i enumeraciju.

  • katana (go): Odličan alat za ovo.

Brute Force direktorijuma i fajlova

Započ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 automatski potpisane sertifikate i rekurzivnu pretragu. Previše spor u poređenju sa drugim opcijama.

  • Dirsearch (python): Ne dozvoljava automatski potpisane sertifikate ali dozvoljava rekurzivnu pretragu.

  • Gobuster (go): Dozvoljava automatski 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 spajder 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-ova 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 alat bfac ili backup-gen.

  • Otkrijte nove parametre: Možete koristiti alate 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

  • Assetnote "parameters_top_1m": https://wordlists.assetnote.io/

  • 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 spideringa, 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

Dok vršite spidering i brute-forcing, možete pronaći interesantne stvari koje treba primetiti.

Interesantni fajlovi

403 Forbidden/Basic Authentication/401 Unauthorized (bypass)

502 Proxy Error

Ako bilo koja 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 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 sa 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:

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

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 podrške HackTricks-u:

Last updated