80,443 - Pentesting Web Metodologie

Reading time: 21 minutes

tip

Leer & oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Leer & oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Ondersteun HackTricks

Basiese Inligting

Die webdiens is die mees gewone en uitgebreide diens en 'n baie verskillende tipes kwesbaarhede bestaan.

Standaard poort: 80 (HTTP), 443(HTTPS)

bash
PORT    STATE SERVICE
80/tcp  open  http
443/tcp open  ssl/https
bash
nc -v domain.com 80 # GET / HTTP/1.0
openssl s_client -connect domain.com:443 # GET / HTTP/1.0

Web API Riglyne

Web API Pentesting

Metodologie opsomming

In hierdie metodologie gaan ons veronderstel dat jy 'n domein (of subdomein) gaan aanval en net dit. So, jy moet hierdie metodologie toepas op elke ontdekte domein, subdomein of IP met 'n onbepaalde webbediener binne die omvang.

  • Begin met identifisering van die tegnologieĂ« wat deur die webbediener gebruik word. Soek na tricks om in gedagte te hou tydens die res van die toets as jy die tegnologie suksesvol kan identifiseer.
  • Enige bekende kwesbaarheid van die weergawe van die tegnologie?
  • Gebruik enige bekende tegnologie? Enige nuttige truuk om meer inligting te onttrek?
  • Enige gespesialiseerde skandeerder om te loop (soos wpscan)?
  • Begin algemene doeleindes skandeerders. Jy weet nooit of hulle iets gaan vind of as hulle interessante inligting gaan vind.
  • Begin met die aanvangs kontroles: robots, sitemap, 404 fout en SSL/TLS skandering (as HTTPS).
  • Begin met spidering van die webblad: Dit is tyd om te vind al die moontlike lĂȘers, vouers en parameters wat gebruik word. Kyk ook vir spesiale bevindings.
  • Let daarop dat enige tyd 'n nuwe gids ontdek word tydens brute-forcing of spidering, dit moet gespider word.
  • Gids Brute-Forcing: Probeer om al die ontdekte vouers te brute-force terwyl jy soek na nuwe lĂȘers en gidses.
  • Let daarop dat enige tyd 'n nuwe gids ontdek word tydens brute-forcing of spidering, dit moet Brute-Forced word.
  • Backups nagaan: Toets of jy backups van ontdekte lĂȘers kan vind deur algemene backup uitbreidings by te voeg.
  • Brute-Force parameters: Probeer om versteekte parameters te vind.
  • Sodra jy alle moontlike eindpunte wat gebruikersinvoer aanvaar, geĂŻdentifiseer het, kyk vir alle soorte kwesbaarhede wat daarmee verband hou.
  • Volg hierdie kontrolelys

Bediener Weergawe (Kwetsbaar?)

Identifiseer

Kyk of daar bekende kwesbaarhede is vir die bediener weergawe wat loop.
Die HTTP koppe en koekies van die antwoord kan baie nuttig wees om die tegnologieë en/of weergawe wat gebruik word te identifiseer. Nmap skandering kan die bediener weergawe identifiseer, maar dit kan ook nuttig wees om die gereedskap whatweb, webtech of https://builtwith.com/:

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

Search vir kwesbaarhede van die webtoepassing weergawe

Kontroleer of enige WAF

Web tegnologie truuks

Sommige truuks vir die vind van kwesbaarhede in verskillende bekende tegnologieë wat gebruik word:

Neem in ag dat die selfde domein verskillende tegnologieë in verskillende poorte, mappies en subdomeine kan gebruik.
As die webtoepassing enige bekende tegnologie/platform wat voorheen gelys is of enige ander gebruik, moenie vergeet om op die Internet na nuwe truuks te soek (en laat weet my!).

Bronkode Hersiening

As die bronkode van die toepassing beskikbaar is in github, benewens om 'n wit boks toets van die toepassing uit te voer, is daar sekere inligting wat nuttig kan wees vir die huidige swart boks toetsing:

  • Is daar 'n Veranderingslog of Readme of Weergawe lĂȘer of enigiets met weergave-inligting toeganklik via die web?
  • Hoe en waar word die akkrediteer gestoor? Is daar enige (toeganklike?) lĂȘer met akkrediteer (gebruikersname of wagwoorde)?
  • Is wagwoorde in platte teks, geĂ«nkripteer of watter hash-algoritme word gebruik?
  • Gebruik dit enige meester sleutel om iets te enkripteer? Watter algoritme word gebruik?
  • Kan jy toegang tot enige van hierdie lĂȘers verkry deur 'n kwesbaarheid te benut?
  • Is daar enige interessante inligting in die github (opgeloste en nie-opgeloste) kwessies? Of in commit geskiedenis (miskien 'n wagwoord wat in 'n ou commit ingevoer is)?

Source code Review / SAST Tools

Outomatiese skandeerders

Algemene doeleindes outomatiese skandeerders

bash
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 scanners

As 'n CMS gebruik word, moenie vergeet om 'n skandeerder te loop', dalk word iets sappigs gevind:

Clusterd: JBoss, ColdFusion, WebLogic, Tomcat, Railo, Axis2, Glassfish
CMSScan: WordPress, Drupal, Joomla, vBulletin webwerwe vir Sekuriteitskwessies. (GUI)
VulnX: Joomla, Wordpress, Drupal, PrestaShop, Opencart
CMSMap: (W)ordpress, (J)oomla, (D)rupal of (M)oodle
droopscan: Drupal, Joomla, Moodle, Silverstripe, Wordpress

bash
cmsmap [-f W] -F -d <URL>
wpscan --force update -e --url <URL>
joomscan --ec -u <URL>
joomlavs.rb #https://github.com/rastating/joomlavs

Op hierdie punt behoort jy reeds 'n paar inligting te hĂȘ oor die webbediener wat deur die kliĂ«nt gebruik word (indien enige data gegee is) en 'n paar truuks om in gedagte te hou tydens die toets. As jy gelukkig is, het jy selfs 'n CMS gevind en 'n skandeerder laat loop.

Stap-vir-stap Webtoepassing Ontdekking

Vanaf hierdie punt gaan ons begin om met die webtoepassing te kommunikeer.

Begin kontrole

Standaard bladsye met interessante inligting:

  • /robots.txt
  • /sitemap.xml
  • /crossdomain.xml
  • /clientaccesspolicy.xml
  • /.well-known/
  • Kyk ook na kommentaar in die hoof- en sekondĂȘre bladsye.

Dwing foute

Webbedieners mag onverwagte gedrag vertoon wanneer vreemde data na hulle gestuur word. Dit kan kwesbaarhede of sensitiewe inligting openbaar.

  • Toegang tot valse bladsye soos /whatever_fake.php (.aspx,.html,.ens)
  • Voeg "[]", "]]", en "[[" in koekie waardes en parameter waardes by om foute te skep
  • Genereer 'n fout deur insette te gee as /~randomthing/%s aan die einde van die URL
  • Probeer verskillende HTTP Werkwoorde soos PATCH, DEBUG of verkeerd soos FAKE

Kyk of jy lĂȘers kan oplaai (PUT werkwoord, WebDav)

As jy vind dat WebDav geaktiveer is, maar jy nie genoeg regte het om lĂȘers op te laai in die wortelgids nie, probeer om:

  • Brute Force akrediteer
  • LĂȘers op te laai via WebDav na die oorblywende gevonde gidse binne die webblad. Jy mag regte hĂȘ om lĂȘers in ander gidse op te laai.

SSL/TLS kwesbaarhede

  • As die toepassing nie die gebruiker van HTTPS dwing nie, dan is dit kwesbaar vir MitM
  • As die toepassing sensitiewe data (wagwoorde) via HTTP stuur. Dan is dit 'n hoĂ« kwesbaarheid.

Gebruik testssl.sh om te kontroleer vir kwesbaarhede (In Bug Bounty programme sal hierdie soort kwesbaarhede waarskynlik nie aanvaar word nie) en gebruik a2sv om die kwesbaarhede weer te kontroleer:

bash
./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>

Inligting oor SSL/TLS kwesbaarhede:

Spidering

Begin 'n soort spider binne die web. Die doel van die spider is om soveel moontlike paaie van die getoetste toepassing te vind. Daarom moet webkruip en eksterne bronne gebruik word om soveel geldige paaie as moontlik te vind.

  • gospider (go): HTML spider, LinkFinder in JS-lĂȘers en eksterne bronne (Archive.org, CommonCrawl.org, VirusTotal.com, AlienVault.com).
  • hakrawler (go): HML spider, met LinkFider vir JS-lĂȘers en Archive.org as eksterne bron.
  • dirhunt (python): HTML spider, dui ook "juicy files" aan.
  • evine (go): Interaktiewe CLI HTML spider. Dit soek ook in Archive.org.
  • meg (go): Hierdie hulpmiddel is nie 'n spider nie, maar dit kan nuttig wees. Jy kan net 'n lĂȘer met gasheer en 'n lĂȘer met paaie aandui en meg sal elke pad op elke gasheer haal en die antwoord stoor.
  • urlgrab (go): HTML spider met JS-rendering vermoĂ«ns. Dit lyk egter of dit nie meer onderhou word nie, die vooraf saamgestelde weergawe is oud en die huidige kode compileer nie.
  • gau (go): HTML spider wat eksterne verskaffers gebruik (wayback, otx, commoncrawl).
  • ParamSpider: Hierdie skrip sal URL's met parameters vind en dit lys.
  • galer (go): HTML spider met JS-rendering vermoĂ«ns.
  • LinkFinder (python): HTML spider, met JS beautify vermoĂ«ns wat in staat is om nuwe paaie in JS-lĂȘers te soek. Dit kan ook die moeite werd wees om na JSScanner te kyk, wat 'n wrapper van LinkFinder is.
  • goLinkFinder (go): Om eindpunte in beide HTML-bron en ingebedde javascript-lĂȘers te onttrek. Nuttig vir foutjagters, rooi spanlede, infosec ninjas.
  • JSParser (python2.7): 'n Python 2.7 skrip wat Tornado en JSBeautifier gebruik om relatiewe URL's uit JavaScript-lĂȘers te parse. Nuttig om AJAX versoeke maklik te ontdek. Dit lyk of dit nie meer onderhou word nie.
  • relative-url-extractor (ruby): Gegee 'n lĂȘer (HTML) sal dit URL's daaruit onttrek met behulp van slim regulĂȘre uitdrukkings om die relatiewe URL's uit lelike (minify) lĂȘers te vind en onttrek.
  • JSFScan (bash, verskeie hulpmiddels): Verskaf interessante inligting uit JS-lĂȘers met behulp van verskeie hulpmiddels.
  • subjs (go): Vind JS-lĂȘers.
  • page-fetch (go): Laai 'n bladsy in 'n headless browser en druk al die URL's wat gelaai is om die bladsy te laai.
  • Feroxbuster (rust): Inhoud ontdekking hulpmiddel wat verskeie opsies van die vorige hulpmiddels meng.
  • Javascript Parsing: 'n Burp uitbreiding om paaie en params in JS-lĂȘers te vind.
  • Sourcemapper: 'n Hulpmiddel wat gegee die .js.map URL jou die beautified JS-kode sal gee.
  • xnLinkFinder: Dit is 'n hulpmiddel wat gebruik word om eindpunte vir 'n gegewe teiken te ontdek.
  • waymore: Ontdek skakels van die wayback masjien (ook die antwoorde in die wayback aflaai en na meer skakels soek).
  • HTTPLoot (go): Kruip (selfs deur vorms in te vul) en vind ook sensitiewe inligting met behulp van spesifieke regexes.
  • SpiderSuite: Spider Suite is 'n gevorderde multi-funksie GUI web sekuriteit Crawler/Spider ontwerp vir kuberveiligheid professionele.
  • jsluice (go): Dit is 'n Go-pakket en opdraglyn hulpmiddel om URL's, paaie, geheime en ander interessante data uit JavaScript-bronkode te onttrek.
  • ParaForge: ParaForge is 'n eenvoudige Burp Suite uitbreiding om die parameters en eindpunte uit die versoek te onttrek om 'n pasgemaakte woordlys vir fuzzing en enumerasie te skep.
  • katana (go): Wonderlike hulpmiddel hiervoor.
  • Crawley (go): Druk elke skakel wat dit kan vind.

Brute Force directories and files

Begin brute-forcing vanaf die wortelmap en wees seker om alle die directories wat gevind is te brute-force met behulp van hierdie metode en al die directories ontdek deur die Spidering (jy kan hierdie brute-forcing rekursief doen en aan die begin van die gebruikte woordlys die name van die gevonde directories byvoeg).
Hulpmiddels:

  • Dirb / Dirbuster - Ingesluit in Kali, oud (en stadig) maar funksioneel. Laat outomaties onderteken sertifikate toe en rekursiewe soektog. Te stadig in vergelyking met die ander opsies.
  • Dirsearch (python): Dit laat nie outomaties onderteken sertifikate toe nie, maar laat rekursiewe soektog toe.
  • Gobuster (go): Dit laat outomaties onderteken sertifikate toe, dit het nie rekursiewe soektog nie.
  • Feroxbuster - Vinning, ondersteun rekursiewe soektog.
  • wfuzz wfuzz -w /usr/share/seclists/Discovery/Web-Content/raft-medium-directories.txt https://domain.com/api/FUZZ
  • ffuf - Vinning: ffuf -c -w /usr/share/wordlists/dirb/big.txt -u http://10.10.10.10/FUZZ
  • uro (python): Dit is nie 'n spider nie, maar 'n hulpmiddel wat gegee die lys van gevonde URL's sal "gedupliceerde" URL's verwyder.
  • Scavenger: Burp Uitbreiding om 'n lys van directories uit die burp geskiedenis van verskillende bladsye te skep.
  • TrashCompactor: Verwyder URL's met gedupliceerde funksies (gebaseer op js imports).
  • Chamaleon: Dit gebruik wapalyzer om gebruikte tegnologieĂ« te detecteer en die woordlyste te kies.

Aanbevole woordlyste:

Nota dat enige tyd 'n nuwe directory ontdek word tydens brute-forcing of spidering, dit moet brute-forced word.

Wat om te kontroleer op elke lĂȘer wat gevind is

  • Broken link checker: Vind gebroke skakels binne HTML's wat geneig kan wees om oorname te ondergaan.
  • LĂȘer Rugsteun: Sodra jy al die lĂȘers gevind het, soek na rugsteun van al die uitvoerbare lĂȘers (".php", ".aspx"...). Algemene variasies vir die benoeming van 'n rugsteun is: file.ext~, #file.ext#, ~file.ext, file.ext.bak, file.ext.tmp, file.ext.old, file.bak, file.tmp en file.old. Jy kan ook die hulpmiddel bfac of backup-gen.
  • Ontdek nuwe parameters: Jy kan hulpmiddels soos Arjun, parameth, x8 en Param Miner gebruik om verborge parameters te ontdek. As jy kan, kan jy probeer om verborge parameters op elke uitvoerbare web lĂȘer te soek.
  • Arjun al standaard woordlyste: 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
  • Kommentaar: Kontroleer die kommentaar van al die lĂȘers, jy kan akkrediteer of verborge funksionaliteit vind.
  • As jy CTF speel, is 'n "gewone" truuk om inligting te versteek binne kommentaar aan die regterkant van die bladsy (met behulp van honderde spasies sodat jy nie die data sien as jy die bronkode met die blaaiert oopmaak nie). 'n Ander moontlikheid is om verskeie nuwe lyne te gebruik en inligting in 'n kommentaar aan die onderkant van die webblad te versteek.
  • API sleutels: As jy enige API-sleutel vind, is daar 'n gids wat aandui hoe om API-sleutels van verskillende platforms te gebruik: keyhacks, zile, truffleHog, SecretFinder, RegHex, DumpsterDive, EarlyBird.
  • Google API sleutels: As jy enige API-sleutel vind wat lyk soos AIzaSyA-qLheq6xjDiEIRisP_ujUseYLQCHUjik kan jy die projek gmapapiscanner gebruik om te kyk watter API's die sleutel kan toegang.
  • S3 Buckets: Terwyl jy spider, kyk of enige subdomein of enige skakel verband hou met 'n S3-bucket. In daardie geval, kontroleer die toestemmings van die bucket.

Spesiale bevindings

Terwyl jy die spidering en brute-forcing uitvoer, kan jy interessante dinge vind wat jy moet oplet.

Interessante lĂȘers

403 Verbode/Basiese Verifikasie/401 Nie-toegelaat (omseiling)

403 & 401 Bypasses

502 Proxy Fout

As enige bladsy antwoord gee met daardie kode, is dit waarskynlik 'n sleg geconfigureerde proxy. As jy 'n HTTP versoek soos: GET https://google.com HTTP/1.1 (met die host header en ander algemene headers) stuur, sal die proxy probeer om toegang te verkry tot google.com en jy sal 'n SSRF gevind het.

NTLM Verifikasie - Inligtingsontsluiting

As die bediener wat verifikasie vra Windows is of jy 'n aanmeldingsvorm vind wat om jou akkrediteer (en om domeinnaam vra), kan jy 'n inligtingsontsluiting veroorsaak.
Stuur die header: “Authorization: NTLM TlRMTVNTUAABAAAAB4IIAAAAAAAAAAAAAAAAAAAAAAA=” en as gevolg van hoe die NTLM verifikasie werk, sal die bediener met interne inligting (IIS weergawe, Windows weergawe...) binne die header "WWW-Authenticate" antwoordgee.
Jy kan dit outomatiseer met behulp van die nmap plugin "http-ntlm-info.nse".

HTTP Oorplasing (CTF)

Dit is moontlik om inhoud binne 'n Oorplasing te plaas. Hierdie inhoud sal nie aan die gebruiker gewys word (aangesien die blaaiert die oorplasing sal uitvoer) nie, maar iets kan versteek wees daarin.

Web Kwesbaarhede Kontroleer

Nou dat 'n omvattende enumerasie van die webtoepassing uitgevoer is, is dit tyd om vir 'n baie moontlike kwesbaarhede te kontroleer. Jy kan die kontrolelys hier vind:

Web Vulnerabilities Methodology

Vind meer inligting oor web kwesbaarhede in:

Monitor Bladsye vir veranderinge

Jy kan hulpmiddels soos https://github.com/dgtlmoon/changedetection.io gebruik om bladsye vir wysigings te monitor wat kwesbaarhede kan invoeg.

HackTricks Outomatiese Opdragte

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}

tip

Leer & oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Leer & oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Ondersteun HackTricks