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