80,443 - Pentesting Web Methodology

Podržite HackTricks

Ako ste zainteresovani za karijeru u hakovanju i da hakujete nehakovano - zapošljavamo! (potrebno je tečno pisanje i govorenje poljskog).

Osnovne Informacije

Web servis je najviše uobičajen i opsežan 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

Web API Guidance

Web API Pentesting

Methodology summary

U ovoj metodologiji pretpostavljamo da ćete napasti domen (ili poddomen) i samo to. Dakle, trebali biste primeniti ovu metodologiju na svaki otkriveni domen, poddomen ili IP sa neodređenim web serverom unutar opsega.

Server Version (Vulnerable?)

Identify

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 tehnologija i/ili verzije koja se koristi. Nmap sken može identifikovati verziju servera, ali takođe mogu biti korisni 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

Search for ranjivosti web aplikacije verzije

Proverite da li postoji neki WAF

Web tehnološke trikove

Neki trikovi za pronalazak 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 poddomenama. Ako web aplikacija koristi neku poznatu tehnologiju/platformu navedenu ranije ili bilo koju drugu, ne zaboravite da pretražujete Internet za nove trikove (i javite mi!).

Pregled izvornog koda

Ako je izvorni kod aplikacije dostupan na github, pored izvođenja sopstvenog White box testa aplikacije, postoji neka informacija koja bi mogla biti korisna za trenutni Black-Box testiranje:

  • Da li postoji Change-log ili Readme ili Verzija fajl ili bilo šta sa informacijama o verziji dostupnim putem web-a?

  • Kako i gde su sačuvane akreditivi? Da li postoji neka (dostupna?) datoteka sa akreditivima (korisnička imena ili lozinke)?

  • Da li su lozinke u običnom tekstu, kriptovane ili koji hash algoritam se koristi?

  • Da li se koristi neki glavni ključ za kriptovanje nečega? Koji algoritam se koristi?

  • Možete li pristupiti bilo kojoj od ovih datoteka iskorišćavajući neku ranjivost?

  • Da li postoji neka zanimljiva informacija na github-u (rešeni i nerešeni) problemi? Ili u istoriji commit-a (možda neka lozinka unesena unutar starog commita)?

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 zaboravite da pokrenete skener, možda će se pronaći nešto sočno:

Clusterd: JBoss, ColdFusion, WebLogic, Tomcat, Railo, Axis2, Glassfish CMSScan: WordPress, Drupal, Joomla, vBulletin vebsajtovi 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 već biste trebali imati neke informacije o web serveru koji koristi klijent (ako su dostupni podaci) i neke trikove koje treba imati na umu tokom testa. Ako imate sreće, možda ste čak pronašli CMS i pokrenuli neki skener.

Korak-po-korak otkrivanje web aplikacija

Od ovog trenutka počinjemo da komuniciramo 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

Web serveri mogu nepredvidivo reagovati kada im se šalju čudni podaci. Ovo može otvoriti ranjivosti ili otkriti osetljive informacije.

  • Pristupite lažnim stranicama kao što su /whatever_fake.php (.aspx,.html,.etc)

  • Dodajte "[]", "]]", i "[[" u vrednosti kolačića i vrednosti parametara da biste izazvali greške

  • Generišite grešku tako što ćete dati unos kao /~randomthing/%s na kraj URL-a

  • Pokušajte sa različitim HTTP metodama kao što su PATCH, DEBUG ili pogrešnim kao FAKE

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

Ako otkrijete da je WebDav omogućen ali nemate dovoljno dozvola za otpremanje fajlova u root folder, pokušajte da:

  • Brute Force kredencijale

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

SSL/TLS ranjivosti

  • Ako aplikacija ne prisiljava korisnika na HTTPS u bilo kojem delu, onda je ranjiva na MitM

  • Ako aplikacija šalje osetljive podatke (lozinke) koristeći HTTP. Tada je to visoka ranjivost.

Koristite testssl.sh za proveru ranjivosti (U Bug Bounty programima 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>

Information about SSL/TLS vulnerabilities:

Spidering

Pokrenite neku vrstu spider unutar veba. Cilj spider-a je da pronađe što više puteva iz testirane aplikacije. Stoga, web crawling i spoljašnji izvori treba da se koriste za pronalaženje što više validnih puteva.

  • gospider (go): HTML spider, LinkFinder u JS datotekama i spoljašnji izvori (Archive.org, CommonCrawl.org, VirusTotal.com, AlienVault.com).

  • hakrawler (go): HML spider, sa LinkFinder-om za JS datoteke i Archive.org kao spoljašnjim izvorom.

  • dirhunt (python): HTML spider, takođe označava "sočne datoteke".

  • 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 jednostavno naznačiti datoteku sa hostovima i datoteku sa putevima, a meg će preuzeti svaki put na svakom hostu i sačuvati odgovor.

  • urlgrab (go): HTML spider sa mogućnostima renderovanja JS-a. 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 navesti ih.

  • galer (go): HTML spider sa mogućnostima renderovanja JS-a.

  • LinkFinder (python): HTML spider, sa JS beautify mogućnostima sposobnim za pretragu novih puteva u JS datotekama. Takođe bi bilo korisno pogledati JSScanner, koji je omotač LinkFinder-a.

  • goLinkFinder (go): Za ekstrakciju krajnjih tačaka u HTML izvoru i ugrađenim javascript datotekama. Korisno za lovce na greške, red timere, infosec nindže.

  • JSParser (python2.7): Python 2.7 skript koji koristi Tornado i JSBeautifier za parsiranje relativnih URL-ova iz JavaScript datoteka. Korisno za lako otkrivanje AJAX zahteva. Izgleda da nije održavan.

  • relative-url-extractor (ruby): Dajući datoteku (HTML) iz nje će izvući URL-ove koristeći pametnu regularnu ekspresiju za pronalaženje i ekstrakciju relativnih URL-ova iz ružnih (minify) datoteka.

  • JSFScan (bash, nekoliko alata): Prikupi zanimljive informacije iz JS datoteka koristeći nekoliko alata.

  • subjs (go): Pronađi JS datoteke.

  • page-fetch (go): Učitaj stranicu u headless pretraživaču i ispiši sve URL-ove učitane za učitavanje stranice.

  • Feroxbuster (rust): Alat za otkrivanje sadržaja koji kombinuje nekoliko opcija prethodnih alata.

  • Javascript Parsing: Burp ekstenzija za pronalaženje puteva i parametara u JS datotekama.

  • Sourcemapper: Alat koji, dajući .js.map URL, dobijate beautified JS kod.

  • xnLinkFinder: Ovaj alat se koristi za otkrivanje krajnjih tačaka za dati cilj.

  • waymore: Otkrijte linkove iz wayback mašine (takođe preuzimajući odgovore u wayback i tražeći više linkova).

  • HTTPLoot (go): Crawlujte (čak i popunjavanjem obrazaca) i takođe pronađite osetljive informacije koristeći specifične regex-e.

  • SpiderSuite: Spider Suite je napredni GUI web sigurnosni crawler/spider dizajniran za profesionalce u sajber bezbednosti.

  • jsluice (go): To je Go paket i alat komandne linije za ekstrakciju URL-ova, puteva, tajni i drugih zanimljivih podataka iz JavaScript izvornog koda.

  • ParaForge: ParaForge je jednostavna Burp Suite ekstenzija za ekstrakciju parametara i krajnjih tačaka iz zahteva za kreiranje prilagođene rečnika za fuzzing i enumeraciju.

  • katana (go): Sjajan alat za ovo.

  • Crawley (go): Ispiši svaki link koji može pronaći.

Brute Force directories and files

Započnite brute-forcing iz root foldera i budite sigurni da brute-forcujete sve direktorijume pronađene koristeći ovu metodu i sve direktorijume otkrivene putem Spidering-a (možete ovo brute-forcing rekurzivno i dodati na početak korišćenog rečnika imena pronađenih direktorijuma). Alati:

  • Dirb / Dirbuster - Uključeno u Kali, staro (i sporo) ali funkcionalno. Dozvoljava automatski potpisane sertifikate i rekurzivnu pretragu. Previše sporo 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 spider, već alat koji, dajući listu pronađenih URL-ova, briše "duplikate" URL-ova.

  • Scavenger: Burp ekstenzija za kreiranje liste direktorijuma iz burp istorije različitih stranica.

  • TrashCompactor: Uklanja URL-ove sa duplim funkcionalnostima (na osnovu js uvoza).

  • 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 novi direktorijum tokom brute-forcinga ili spideringa, treba ga Brute-Forcovati.

What to check on each file found

  • Broken link checker: Pronađite pokvarene linkove unutar HTML-a koji mogu biti podložni preuzimanju.

  • Backup datoteke: Kada pronađete sve datoteke, potražite backup svih izvršnih datoteka (".php", ".aspx"...). Uobičajene varijacije za imenovanje backup-a su: file.ext~, #file.ext#, ~file.ext, file.ext.bak, file.ext.tmp, file.ext.old, file.bak, file.tmp i file.old. Takođe možete koristiti alat bfac ili backup-gen.

  • Otkrivanje novih parametara: Možete koristiti alate kao što su Arjun, parameth, x8 i Param Miner za otkrivanje skrivenih parametara. Ako možete, mogli biste pokušati da pretražujete skrivene parametre u svakoj izvršnoj web datoteci.

  • Assetnote “parameters_top_1m”: https://wordlists.assetnote.io/

  • Komentari: Proverite komentare svih datoteka, možete pronaći akreditive ili skrivenu funkcionalnost.

  • Ako se igrate CTF, "uobičajen" trik je da sakrijete informacije unutar komentara na desnoj strani stranice (koristeći stotine razmaka tako da ne vidite podatke ako otvorite izvorni kod u pretraživaču). Druga mogućnost je da koristite nekoliko novih redova i sakrijete informacije u komentaru na dnu web stranice.

  • API ključevi: Ako pronađete bilo koji API ključ postoji vodič koji ukazuje 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-jeve ključ može pristupiti.

  • S3 Buckets: Tokom spideringa proverite da li je neki subdomen ili neki link povezan sa nekim S3 bucket-om. U tom slučaju, proverite dozvole bucket-a.

Special findings

Dok obavljate spidering i brute-forcing mogli biste pronaći zanimljive stvari koje treba da primetite.

Zanimljive datoteke

403 Forbidden/Basic Authentication/401 Unauthorized (bypass)

403 & 401 Bypasses

502 Proxy Error

Ako neka stranica odgovori sa tim kodom, verovatno je u pitanju loše konfigurisani 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 pronašli ste SSRF.

NTLM Authentication - Info disclosure

Ako server koji radi traži autentifikaciju je Windows ili pronađete prijavu koja traži vaše akreditive (i traži ime domena), možete izazvati otkrivanje informacija. Pošaljite header: “Authorization: NTLM TlRMTVNTUAABAAAAB4IIAAAAAAAAAAAAAAAAAAAAAAA=” i zbog načina na koji NTLM autentifikacija funkcioniše, server će odgovoriti sa internim informacijama (verzija IIS-a, verzija Windows-a...) unutar header-a "WWW-Authenticate". Možete automatizovati ovo koristeći nmap plugin "http-ntlm-info.nse".

HTTP Redirect (CTF)

Moguće je staviti sadržaj unutar Redirekcije. Ovaj sadržaj neće biti prikazan korisniku (jer će pretraživač izvršiti redirekciju), ali nešto bi moglo biti sakriveno unutra.

Web Vulnerabilities Checking

Sada kada je izvršena sveobuhvatna enumeracija web aplikacije, vreme je da proverite mnogo mogućih ranjivosti. Možete pronaći kontrolnu listu ovde:

Web Vulnerabilities Methodology

Pronađite više informacija o web ranjivostima na:

Monitor Pages for changes

Možete koristiti alate kao što su https://github.com/dgtlmoon/changedetection.io za praćenje stranica za izmene koje bi mogle umetnuti ranjivosti.

Ako ste zainteresovani za hacking karijeru i hakovanje nehakovanog - zapošljavamo! (tečno poljski pisano i govorno potrebno).

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.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}
Podržite HackTricks

Last updated