80,443 - Pentesting Web Metodologie

Reading time: 21 minutes

tip

Leer en oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Leer en oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Leer en oefen Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Ondersteun HackTricks

Basiese Inligting

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

Standaardpoort: 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 Guidance

Web API Pentesting

Metodologie opsomming

In hierdie metodologie gaan ons aanvaar dat jy 'n aanval op 'n domain (of subdomain) en net daardie een gaan uitvoer. Dus, jy moet hierdie metodologie toepas op elke ontdekte domain, subdomain of IP met onbepaalde web server binne die scope.

  • Begin deur die identifiseer die tegnologieĂ« wat deur die web server gebruik word. Kyk vir tricks om gedurende die res van die toets in gedagte te hou as jy die tech suksesvol kan identifiseer.
  • Enige known vulnerability van die weergawe van die tegnologie?
  • Gebruik enige well known tech? Enige useful trick om meer inligting te onttrek?
  • Enige specialised scanner om te loods (soos wpscan)?
  • Begin met general purposes scanners. Jy weet nooit of hulle iets gaan vind of interessante inligting gaan ontsluit nie.
  • Begin met die initial checks: robots, sitemap, 404 error en SSL/TLS scan (if HTTPS).
  • Begin spidering die web page: Dit is tyd om alle moontlike files, folders en parameters being used te vind. Kyk ook vir special findings.
  • Note that anytime a new directory is discovered during brute-forcing or spidering, it should be spidered.
  • Directory Brute-Forcing: Probeer om alle ontdekte folders te Brute-Force en soek na nuwe files en directories.
  • Note that anytime a new directory is discovered during brute-forcing or spidering, it should be Brute-Forced.
  • Backups checking: Toets of jy backups van ontdekte files kan vind deur algemene backup extensies by te voeg.
  • Brute-Force parameters: Probeer om hidden parameters te vind.
  • Sodra jy alle moontlike endpoints wat user input aanvaar geĂŻdentifiseer het, kyk na alle soorte vulnerabilities wat daarmee verband hou.
  • Follow this checklist

Server-weergawe (Kwetsbaar?)

Identifiseer

Kyk of daar known vulnerabilities is vir die server version wat loop.
Die HTTP headers and cookies of the response kan baie nuttig wees om die technologies en/of version wat gebruik word te identifiseer. Nmap scan kan die server version identifiseer, maar dit kan ook nuttig wees om die tools 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

Soek na vulnerabilities of the web application version

Kyk of daar enige WAF

Web tegniese truuks

Sommige tricks for finding vulnerabilities in verskillende bekende technologies wat gebruik word:

Neem in ag dat die same domain verskillende technologies in verskillende ports, folders en subdomains kan gebruik.
As die web application enige bekende tech/platform listed before of any other gebruik, moenie vergeet om op die Internet te search on the Internet na nuwe tricks (en laat weet my!).

Source Code Review

As die source code van die toepassing op github beskikbaar is, benewens om deur your own a White box test van die toepassing te gaan, is daar some information wat nuttig kan wees vir die huidige Black-Box testing:

  • Is daar 'n Change-log or Readme or Version file of enigiets met version info accessible via web?
  • Hoe en waar word die credentials gestoor? Is daar enige (accessible?) file met credentials (usernames or passwords)?
  • Is dit passwords in plain text, encrypted of watter hashing algorithm word gebruik?
  • Gebruik dit enige master key vir die enkripsie van iets? Watter algorithm word gebruik?
  • Kan jy access any of these files deur 'n vulnerability uit te buit?
  • Is daar enige interesting information in the github (solved and not solved) issues? Of in die commit history (miskien is daar 'n password introduced inside an old commit)?

Source code Review / SAST Tools

Outomatiese skanners

Algemene doel outomatiese skanners

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-skandeerders

As 'n CMS gebruik word, moenie vergeet om 'n skandeerder te laat loop nie — miskien word iets interessant gevind:

Clusterd: JBoss, ColdFusion, WebLogic, Tomcat, Railo, Axis2, Glassfish
CMSScan: WordPress, Drupal, Joomla, vBulletin webwerwe vir Security issues. (GUI)
VulnX: Joomla, Wordpress, Drupal, PrestaShop, Opencart
CMSMap: (W)ordpress, (J)oomla, (D)rupal or (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 stadium behoort jy reeds sekere inligting oor die webbediener te hĂȘ wat deur die kliĂ«nt gebruik word (indien enige data verskaf is) en 'n paar truuks om tydens die toets in gedagte te hou. As jy gelukkig is, het jy selfs 'n CMS gevind en 'n scanner laat loop.

Stap-vir-stap Webtoepassing-ontdekking

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

Aanvangskontroles

Standaard bladsye met interessante inligting:

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

Foute afdwing

Webbedieners kan onverwagse gedrag vertoon wanneer vreemde data aan hulle gestuur word. Dit kan kwesbaarhede oopmaak of sensitiewe inligting openbaar.

  • Gaan na vals bladsye soos /whatever_fake.php (.aspx,.html,.etc)
  • Voeg "[]", "]]", en "[[" in cookie values en parameter values in om foute te veroorsaak
  • Genereer 'n fout deur invoer te gee as /~randomthing/%s aan die einde van die URL
  • Probeer verskillende HTTP Verbs soos PATCH, DEBUG of verkeerde soos FAKE

Kontroleer of jy kan lĂȘers oplaai (PUT verb, WebDav)

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

  • Brute Force credentials
  • Upload files via WebDav na die oorblywende van die gevonde gidse binne die webblad. Jy mag toestemmings hĂȘ om lĂȘers in ander gidse op te laai.

SSL/TLS kwesbaarhede

  • As die toepassing nie die gebruiker in enige deel dwing om HTTPS te gebruik nie, is dit kwesbaar vir MitM
  • As die toepassing sensitiewe data (wagwoorde) via HTTP stuur, is dit 'n hoĂ« kwesbaarheid.

Gebruik testssl.sh om na kwesbaarhede te kyk (in Bug Bounty-programme sal hierdie soort kwesbaarhede waarskynlik nie aanvaar word nie) en gebruik a2sv om die kwesbaarhede te herkontroleer:

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 op die web. Die doel van die spider is om soveel paadjies as moontlik te vind vanaf die getoetste toepassing. Daarom moet web crawling en eksterne bronne gebruik word om soveel geldige paadjies as moontlik te ontdek.

  • gospider (go): HTML spider, LinkFinder in JS-lĂȘers en eksterne bronne (Archive.org, CommonCrawl.org, VirusTotal.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. Soek ook in Archive.org.
  • meg (go): Hierdie hulpmiddel is nie 'n spider nie, maar kan nuttig wees. Jy kan net 'n lĂȘer met hosts en 'n lĂȘer met paths aandui en meg sal elke path op elke host ophaal en die response stoor.
  • urlgrab (go): HTML spider met JS-rendering vermoĂ«ns. Dit lyk egter of dit ononderhou is; die vooraf-gekompileerde weergawe is oud en die huidige kode kompileer nie.
  • gau (go): HTML spider wat eksterne verskaffers gebruik (wayback, otx, commoncrawl).
  • ParamSpider: Hierdie skrip sal URLs 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 nuwe paadjies in JS-lĂȘers kan soek. Dit is ook die moeite werd om JSScanner, wat 'n wrapper van LinkFinder is, te bekyk.
  • goLinkFinder (go): Om endpoints te onttrek in beide HTML-bron en ingesluit javascript-lĂȘers. Nuttig vir bug hunters, red teamers, infosec ninjas.
  • JSParser (python2.7): 'n python 2.7 skrip wat Tornado en JSBeautifier gebruik om relatiewe URLs uit JavaScript-lĂȘers te parse. Nuttig om AJAX-aanvraag maklik te ontdek. Lyk ononderhou.
  • relative-url-extractor (ruby): Gegee 'n lĂȘer (HTML) sal dit URLs onttrek met 'n netjiese regular expression om relatiewe URLs uit verrommelde (minified) lĂȘers te kry.
  • JSFScan (bash, verskeie tools): Versamel interessante inligting uit JS-lĂȘers deur verskeie tools te gebruik.
  • subjs (go): Vind JS-lĂȘers.
  • page-fetch (go): Laai 'n bladsy in 'n headless browser en druk al die urls wat gelaai word om die bladsy te laai.
  • Feroxbuster (rust): Content discovery tool wat verskeie opsies van die vorige tools meng.
  • Javascript Parsing: 'n Burp extension om paths en params in JS-lĂȘers te vind.
  • Sourcemapper: 'n hulpmiddel wat, gegee die .js.map URL, die beautified JS-kode sal kry.
  • xnLinkFinder: Hierdie tool word gebruik om endpoints vir 'n gegewe doelwit te ontdek.
  • waymore: Ontdek links uit die wayback machine (laai ook die responses in die wayback af en soek meer links).
  • HTTPLoot (go): Crawl (selfs deur vorms in te vul) en vind ook sensitiewe inligting gebruikende spesifieke regexes.
  • SpiderSuite: Spider Suite is 'n gevorderde multi-feature GUI web security Crawler/Spider ontwerp vir cyber security professionele.
  • jsluice (go): 'n Go pakket en command-line tool om URLs, paths, secrets en ander interessante data uit JavaScript-bronkode te onttrek.
  • ParaForge: ParaForge is 'n eenvoudige Burp Suite extension om paramters en endpoints uit die requests te onttrek om 'n custom wordlist vir fuzzing en enumerasie te skep.
  • katana (go): Awesome tool hiervoor.
  • Crawley (go): Druk elke link wat dit kan vind.

Brute Force directories and files

Begin met brute-forcing vanaf die root-gids en maak seker om al die gevonde directories te brute-force met dié metode en alle directories wat deur die Spidering ontdek is (jy kan dit rekursief doen en aan die begin van die gebruikte wordlist die name van die gevonde directories toevoeg).
Tools:

  • Dirb / Dirbuster - Ingesluit in Kali, oud (en stadig) maar funksioneel. Ondersteun self-getekende sertifikate en rekursiewe soektog. Baie stadiger vergeleke met die ander opsies.
  • Dirsearch (python): Dit laat nie self-getekende sertifikate toe nie maar ondersteun rekursiewe soektog.
  • Gobuster (go): Ondersteun self-getekende sertifikate, dit het egter 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 spider nie maar 'n hulpmiddel wat, gegee die lys van gevonde URLs, "gedupliseerde" URLs sal verwyder.
  • Scavenger: Burp Extension om 'n lys van directories te skep vanaf die burp history van verskeie bladsye.
  • TrashCompactor: Verwyder URLs met gedupliseerde funksionaliteite (gebaseer op js imports).
  • Chamaleon: Gebruik wapalyzer om gebruikte tegnologieĂ« te ontdek en kies die woordlyste om te gebruik.

Aanbevole woordlyste:

Let wel dat elke keer as 'n nuwe directory tydens brute-forcing of spidering ontdek word, dit weer Brute-Forced moet word.

Wat om op elke gevonde lĂȘer te kontroleer

  • Broken link checker: Vind gebroke skakels binne HTML's wat vatbaar kan wees vir takeovers.
  • File Backups: Sodra jy al die lĂȘers gevind het, soek vir rugsteunweergawes 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 and file.old. Jy kan ook die hulpmiddel bfac of backup-gen** gebruik.**
  • Discover new parameters: Jy kan tools soos Arjun, parameth, x8 en Param Miner gebruik om versteekte parameters te ontdek. Indien moontlik, probeer om versteekte parameters op elke uitvoerbare web-lĂȘer te soek.
  • Arjun all default wordlists: 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
  • Comments: Kontroleer die comments van al die lĂȘers; jy kan credentials of versteekte funksionaliteit vind.
  • As jy 'n CTF speel, is 'n "algemene" truuk om inligting in comments regs op die bladsy te versteek (deur honderde spasies te gebruik sodat jy die data nie sien as jy die bronkode in die blaaier oopmaak nie). 'n Ander moontlikheid is om verskeie reĂ«ls op te neem en inligting in 'n comment onder aan die webblad te versteek.
  • API keys: As jy enige API key vind, is daar 'n gids wat aandui hoe om API keys van verskeie platforms te gebruik: keyhacks, zile, truffleHog, SecretFinder, RegHex, DumpsterDive, EarlyBird
  • Google API keys: As jy 'n API key vind wat soos AIzaSyA-qLheq6xjDiEIRisP_ujUseYLQCHUjik lyk, kan jy die projek gmapapiscanner gebruik om te kontroleer watter apis die sleutel kan toegang gee.
  • S3 Buckets: Terwyl jy spidering doen, kyk of enige subdomain of enige skakel met 'n S3 bucket verband hou. In daardie geval, kontroleer die toestemmings van die bucket.

Spesiale vondste

Terwyl jy die spidering en brute-forcing doen, kan jy interessante items vind wat jy moet notuleer.

Interessante lĂȘers

403 Forbidden/Basic Authentication/401 Unauthorized (bypass)

403 & 401 Bypasses

502 Proxy Error

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

NTLM Authentication - Info disclosure

As die bediener wat vir authentication vra 'n Windows bediener is of jy vind 'n login wat vir jou credentials vra (en vir 'n domain name vra), kan jy 'n inligtingslek veroorsaak.
Stuur die header: “Authorization: NTLM TlRMTVNTUAABAAAAB4IIAAAAAAAAAAAAAAAAAAAAAAA=” en weens hoe die NTLM authentication werk, sal die bediener met interne inligting (IIS version, Windows version...) binne die header "WWW-Authenticate" antwoord.
Jy kan dit outomatiseer met die nmap plugin "http-ntlm-info.nse".

HTTP Redirect (CTF)

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

Kontrole van Web-kwesbaarhede

Nou dat 'n omvattende enumerasie van die web-toepassing uitgevoer is, is dit tyd om vir 'n lang lys moontlike kwesbaarhede te toets. Jy kan die checklist hier kry:

Web Vulnerabilities Methodology

Vind meer inligting oor web vulns by:

Moniteer bladsye vir veranderinge

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

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.wiki/en/network-services-pentesting/pentesting-web/index.html

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 en oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Leer en oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Leer en oefen Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Ondersteun HackTricks