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

31 KiB

80,443 - Pentesting Web Metodologie

Leer AWS hakwerk vanaf nul tot held met htARTE (HackTricks AWS Red Team Expert)!

Ander maniere om HackTricks te ondersteun:

As jy belangstel in hakwerk loopbaan en die onhackbare wil hack - ons is aan die aanstel! (vloeiend Pools geskrewe en gesproke vereis).

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

Basiese Inligting

Die webdiens is die mees gewone en omvattende diens en daar bestaan baie verskillende tipes kwesbaarhede.

Verstekpoort: 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 Leiding

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

Metodologie opsomming

In hierdie metodologie gaan ons aanneem dat jy 'n domein (of subdomein) gaan aanval en net daardie een. Jy moet hierdie metodologie toepas op elke ontdekte domein, subdomein of IP met 'n onbepaalde webbediener binne die reikwydte.

  • Begin deur die tegnologieë wat deur die webbediener gebruik word, te identifiseer. Soek na truuks om in gedagte te hou gedurende 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 uit te voer (soos wpscan)?
  • Begin met die algemene doeleindes skandeerders. Jy weet nooit of hulle iets gaan vind of as hulle interessante inligting gaan vind.
  • Begin met die aanvanklike kontroles: robots, sitemap, 404 fout en SSL/TLS-skandering (indien HTTPS).
  • Begin met spinnekoppe van die webbladsy: Dit is tyd om al die moontlike lêers, vouers en parameters wat gebruik word, te vind. Kyk ook vir spesiale bevindinge.
  • Let daarop dat enige tyd 'n nuwe gids ontdek word tydens brute-forcing of spinnekoppe, dit moet gespinnekop word.
  • Gids Brute-Forcing: Probeer om al die ontdekte vouers te brute force op soek na nuwe lêers en gids.
  • Let daarop dat enige tyd 'n nuwe gids ontdek word tydens brute-forcing of spinnekoppe, dit moet Brute-Forced word.
  • Back-up kontrole: Toets of jy back-ups van ontdekte lêers kan vind deur algemene back-up-uitbreidings by te voeg.
  • Brute-Force parameters: Probeer om verskuilde parameters te vind.
  • Sodra jy al die moontlike eindpunte wat gebruikerinsette aanvaar, geïdentifiseer het, kyk vir alle soorte kwesbaarhede wat daarmee verband hou.
  • Volg hierdie kontrolelys

Bedienerweergawe (Kwesbaar?)

Identifiseer

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

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

Soek na kwesbaarhede van die webtoepassing weergawe

Kyk of daar enige WAF is

Web tegnologie truuks

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

Neem in ag dat dieselfde domein verskillende tegnologieë in verskillende poorte, vouers 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 te soek vir nuwe truuks (en laat my weet!).

Bronkode-oorsig

As die bronkode van die aansoek beskikbaar is op github, behalwe om self 'n Witboks-toets van die aansoek uit te voer, is daar inligting wat nuttig kan wees vir die huidige Swartboks-toetsing:

  • Is daar 'n Wysigingslogboek of Leesmy of Weergawe-lêer of enige iets met weergawe-inligting wat toeganklik is via die web?
  • Hoe en waar word die geloofsbriewe gestoor? Is daar enige (toeganklike?) lêer met geloofsbriewe (gebruikersname of wagwoorde)?
  • Is die wagwoorde in plat teks, geënkripteer of watter hashing-algoritme word gebruik?
  • Word enige meestersleutel gebruik vir die enkripsie van iets? Watter algoritme word gebruik?
  • Kan jy toegang kry tot enige van hierdie lêers deur van 'n kwesbaarheid gebruik te maak?
  • Is daar enige interessante inligting in die github (opgeloste en onopgeloste) kwessies? Of in die commit-geskiedenis (miskien 'n wagwoord ingevoer binne 'n ou commit)?

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

Outomatiese skandeerders

Algemene doel outomatiese skandeerders

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 skandeerders

Indien 'n CMS gebruik word, moenie vergeet om 'n skandeerder uit te voer nie, 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

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 enige inligting te hê oor die webbediener wat deur die klient 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 paar skandeerders laat loop.

Stap-vir-stap Webtoepassingsontdekking

Van hier af gaan ons begin om met die webtoepassing te interaksieer.

Aanvanklike kontroles

Verstekbladsye met interessante inligting:

  • /robots.txt
  • /sitemap.xml
  • /crossdomain.xml
  • /clientaccesspolicy.xml
  • /.well-known/
  • Kontroleer ook kommentaar in die hoof- en sekondêre bladsye.

Forsing van foute

Webbedieners kan onverwags optree wanneer vreemde data aan hulle gestuur word. Dit kan kwesbaarhede of gevoelige inligting openbaar.

  • Toegang tot vals bladsye soos /whatever_fake.php (.aspx,.html,.ens.)
  • Voeg "[]", "]]", en "[[" by in koekiewaardes en parameter waardes om foute te skep
  • Skep 'n fout deur inset 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 het nie genoeg regte vir die oplaai van lêers in die hoofmap nie, probeer dan:

  • Brute Force geloofsbriewe
  • Laai lêers op via WebDav na die res van die gevonde lêers binne die webbladsy. Jy mag regte hê om lêers in ander lêers op te laai.

SSL/TLS kwesbaarhede

  • As die aansoek nie die gebruik van HTTPS afdwing nie op enige punt, is dit kwesbaar vir MitM
  • As die aansoek gevoelige data (wagwoorde) stuur deur HTTP te gebruik. Dan is dit 'n hoë kwesbaarheid.

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

./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 spinnekop binne die web. Die doel van die spinnekop is om soveel moontlike paaie van die getoetste aansoek te vind. Daarom moet webkruip en eksterne bronne gebruik word om soveel geldige paaie as moontlik te vind.

  • gospider (go): HTML spinnekop, LinkFinder in JS lêers en eksterne bronne (Archive.org, CommonCrawl.org, VirusTotal.com, AlienVault.com).
  • hakrawler (go): HML spinnekop, met LinkFider vir JS lêers en Archive.org as eksterne bron.
  • dirhunt (python): HTML spinnekop, dui ook "sappige lêers" aan.
  • evine (go): Interaktiewe CLI HTML spinnekop. Dit soek ook in Archive.org
  • meg (go): Hierdie instrument is nie 'n spinnekop nie, maar dit kan nuttig wees. Jy kan net 'n lêer met gasheers en 'n lêer met paaie aandui en meg sal elke pad op elke gasheer haal en die respons stoor.
  • urlgrab (go): HTML spinnekop met JS-renderingsvermoëns. Dit lyk egter asof dit nie onderhou word nie, die vooraf saamgestelde weergawe is oud en die huidige kode kompileer nie
  • gau (go): HTML spinnekop wat eksterne verskaffers gebruik (wayback, otx, commoncrawl)
  • ParamSpider: Hierdie skrip sal URL's met parameters vind en lys.
  • galer (go): HTML spinnekop met JS-renderingsvermoëns.
  • LinkFinder (python): HTML spinnekop, met JS-verfraaiingsvermoëns wat nuwe paaie in JS lêers kan soek. Dit kan ook die moeite werd wees om na JSScanner te kyk, wat 'n omhulsel van LinkFinder is.
  • goLinkFinder (go): Om eindpunte in beide HTML-bron- en ingeslote javascript-lêers te onttrek. Nuttig vir foutsoekers, rooi spanne, infosec-ninjas.
  • JSParser (python2.7): 'n Python 2.7-skrip wat Tornado en JSBeautifier gebruik om relatiewe URL's uit JavaScript-lêers te ontled. Nuttig vir die maklike ontdekking van AJAX-versoeke. Dit lyk asof dit nie onderhou word nie.
  • relative-url-extractor (ruby): Gegewe 'n lêer (HTML) sal dit URL's daaruit onttrek deur handige regulêre uitdrukking te gebruik om die relatiewe URL's uit lelike (geminifiseerde) lêers te vind en te onttrek.
  • JSFScan (bash, verskeie gereedskap): Versamel interessante inligting uit JS-lêers met verskeie gereedskap.
  • subjs (go): Vind JS-lêers.
  • page-fetch (go): Laai 'n bladsy in 'n koplose blaaier en druk al die gelaai URL's om die bladsy te laai.
  • Feroxbuster (rust): Inhoudsontdekkingsinstrument wat verskeie opsies van die vorige gereedskap meng
  • Javascript Parsing: 'n Burp-uitbreiding om paaie en parameters in JS-lêers te vind.
  • Sourcemapper: 'n Instrument wat, gegewe die .js.map-URL, jou die mooi JS-kode sal gee
  • xnLinkFinder: Hierdie is 'n instrument wat gebruik word om eindpunte vir 'n gegewe teiken te ontdek.
  • waymore: Ontdek skakels van die wayback-masjien (laai ook die antwoorde in die wayback af en soek na meer skakels
  • HTTPLoot (go): Kruip (selfs deur vorms te vul) en vind ook sensitiewe inligting deur spesifieke regulêre uitdrukkings te gebruik.
  • SpiderSuite: Spider Suite is 'n gevorderde multi-funksie GUI-websekuriteitskruiper/spinnekop wat ontwerp is vir sibersekuriteitsprofessionals.
  • jsluice (go): Dit is 'n Go-pakket en kommalyn-instrument vir die onttrek van URL's, paaie, geheime en ander interessante data uit JavaScript-bronkode.
  • ParaForge: ParaForge is 'n eenvoudige Burp Suite-uitbreiding om die parameters en eindpunte uit die versoek te onttrek om 'n aangepaste woordelys vir fuzzing en enumerasie te skep.

Brute Force-dosisse en lêers

Begin brute-krag vanaf die hoofmap en verseker dat jy alle die gevonde dosisse met hierdie metode en al die dosisse ontdek deur die Spidering te brute-krag (jy kan hierdie brute-krag rekursief doen en die name van die gevonde dosisse aan die begin van die gebruikte woordelys toevoeg).
Gereedskap:

  • Dirb / Dirbuster - Ingesluit in Kali, oud (en stadig) maar funksioneel. Laat outomatiese ondertekende sertifikate en rekursiewe soektog toe. Te stadig in vergelyking met die ander opsies.
  • Dirsearch (python): Dit laat nie outomatiese ondertekende sertifikate toe nie, maar laat rekursiewe soektog toe.
  • Gobuster (go): Dit laat outomatiese ondertekende sertifikate toe, dit het nie 'n rekursiewe soektog nie.
  • Feroxbuster - Vinnig, ondersteun rekursiewe soektog.
  • wfuzz wfuzz -w /usr/share/seclists/Discovery/Web-Content/raft-medium-directories.txt https://domain.com/api/FUZZ
  • ffuf - Vinnig: ffuf -c -w /usr/share/wordlists/dirb/big.txt -u http://10.10.10.10/FUZZ
  • uro (python): Dit is nie 'n spinnekop nie, maar 'n instrument wat, gegewe die lys van gevonde URL's, "dupliseerde" URL's sal verwyder.
  • Scavenger: Burp-uitbreiding om 'n lys van dosisse van die burp-geskiedenis van verskillende bladsye te skep
  • TrashCompactor: Verwyder URL's met dupliseerde funksionaliteite (gebaseer op js invoere)
  • Chamaleon: Dit gebruik wapalyzer om gebruikte tegnologieë op te spoor en die woordlyste te kies wat gebruik moet word.

Aanbevole woordeboeke:

Merk op dat elke keer as 'n nuwe gids ontdek word tydens brute-forcing of spidering, dit Brute-Forced moet word.

Wat om op elke gevonde lêer te kontroleer

  • Gebroke skakelkontroleerder: Vind gebroke skakels binne HTMLs wat vatbaar kan wees vir oorneem
  • Lêerback-ups: Sodra jy al die lêers gevind het, soek na back-ups van al die uitvoerbare lêers (".php", ".aspx"...). Gewone variasies vir die benaming van 'n back-up is: lêer.ext~, #lêer.ext#, ~lêer.ext, lêer.ext.bak, lêer.ext.tmp, lêer.ext.old, lêer.bak, lêer.tmp en lêer.old. Jy kan ook die gereedskap bfac of backup-gen.
  • Ontdek nuwe parameters: Jy kan gereedskappe soos Arjun, parameth, x8 en Param Miner gebruik om verskuilde parameters te ontdek. As jy kan, kan jy probeer om verskuilde parameters op elke uitvoerbare web-lêer te soek.
  • Arjun alle verstekwoordlyste: 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
  • Opmerkings: Kontroleer die opmerkings van al die lêers, jy kan geloofsbriewe of verskuilde funksionaliteit vind.
  • As jy CTF speel, is 'n "gewone" truuk om inligting te verberg binne opmerkings aan die regterkant van die bladsy (deur honderde spasies te gebruik sodat jy die data nie sien as jy die bronkode met die blaaier oopmaak nie). 'n Ander moontlikheid is om verskeie nuwe lyne te gebruik en inligting in 'n opmerking aan die onderkant van die webbladsy te verberg.
  • 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 kontroleer watter API's die sleutel kan toegang verkry.
  • S3 Emmers: Terwyl jy aan die spider is, kyk of enige subdomein of enige skakel verband hou met 'n sekere S3-emmer. In daardie geval, kontroleer die toestemmings van die emmer.

Spesiale bevindinge

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

Interessante lêers

403 Verbode/Grondige Verifikasie/401 Onbevoegd (omseil)

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

502 Proksi-fout

As enige bladsy met daardie kode reageer, is dit waarskynlik 'n sleg gekonfigureerde proksi. As jy 'n HTTP-versoek stuur soos: GET https://google.com HTTP/1.1 (met die gasheerkop en ander algemene koppe), sal die proksi probeer om google.com te benader en jy sal 'n SSRF gevind het.

NTLM-verifikasie - Inligtingsoorplasing

As die bedrywende bediener wat vir verifikasie vra Windows is of jy 'n aanmelding vind wat vir jou geloofsbriewe vra (en vir 'n domeinnaam vra), kan jy 'n inligtingsoorplasing veroorsaak.
Stuur die kop: “Authorization: NTLM TlRMTVNTUAABAAAAB4IIAAAAAAAAAAAAAAAAAAAAAAA=” en as gevolg van hoe die NTLM-verifikasie werk, sal die bediener reageer met interne inligting (IIS-weergawe, Windows-weergawe...) binne die kop "WWW-Authenticate".
Jy kan dit outomatiseer deur die nmap-inprop "http-ntlm-info.nse".

HTTP Aanwysing (CTF)

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

Web Kwesbaarhede Kontroleer

Nou wat 'n omvattende opsomming van die webtoepassing uitgevoer is, is dit tyd om vir 'n hele paar moontlike kwesbaarhede te kyk. Jy kan die kontrolelys hier vind:

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

Vind meer inligting oor web kwesbaarhede in:

Monitor Bladsye vir Veranderinge

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

As jy belangstel in 'n hackingsloopbaan en die onhackbare wil hack - ons is aan die aanstel! (vloeiend in Pools geskrewe en gespreek benodig).

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

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}
Leer AWS-hacking vanaf nul tot held met htARTE (HackTricks AWS Red Team Expert)!

Ander maniere om HackTricks te ondersteun: