DLL Hijacking – Comprobando la vulnerabilidad
En el anterior artículo de esta serie sobre DLL Hijacking, vimos cómo podríamos descubrir posibles aplicaciones vulnerables a DLL Hijacking. En esta segunda parte daremos un paso más y veremos cómo comprobar la vulnerabilidad en una aplicación que estemos auditando.
Una vez que ya tenemos DLL candidatas a ser usadas, que previamente hemos descubierto con nuestro Procmon, procederemos a crear nuestra propia DLL que suplantará a la que la aplicación está buscando, con la idea de que se ejecute el código que nosotros indiquemos.
En este caso, nuestro objetivo para esta fase de comprobación, es que al ejecutar la aplicación vulnerable nos muestre una ventana con el mensaje «DLL Hijacked!«.
Tenemos varias opciones a la hora de crear nuestra DLL pero lo haremos de la forma más práctica y sencilla. Es aprovechando un código ya creado por LiquidWorm y que está publicado en la Web de exploit-db. Se trata de una DLL muy sencilla que utiliza la función DllMain() para ejecutar código.
La URL donde podéis ver y descargar el código es la siguiente:
https://www.exploit-db.com/exploits/14789/
Como podéis observar al final del código, si se ejecuta correctamente nuestra DLL, por lo tanto la aplicación es vulnerable a DLL Hijacking, se abrirá una ventana de MessageBox:
MessageBox(0,
"DLL Hijacked!"
,
"DLL Message"
, MB_OK);
Una vez descargada el código de la DLL, yo la he descargado en mi máquina Kali Linux, procedemos a compilarla para obtener como archivo resultante una DLL que haremos llegar a la víctima junto a la aplicación vulnerable.
El fichero que he descargado desde exploit-db lo he llamado hijack.c.
Como podéis ver en la imagen anterior he utilizado el compilador i686-w64-mingw32-gcc para compilar el fichero y obtener la DLL resultante hijack.dll, que a continuación renombraremos.
i686-w64-mingw32-gcc hijack.c -o hijack.dll -shared
Ahora renombraremos el fichero hijack.dll con el nombre de una de las DLL candidatas que hemos obtenido con Procmon. Si no habéis leído el primer artículo de la serie, os lo recomiendo para entender este paso.
Usando el comando file podemos verificar que se trata de un fichero de tipo PE32 executable (DLL).
En la imagen anterior lo he renombrado a pozi32.dll (razón, H&B Madrid ;), pero nosotros vamos a utilizar otra DLL, real.
¡Toca probar nuestra DLL!
Para esta comprobación vamos a usar la aplicación uTorrent. Después de haber realizado la fase uno, de detección de DLL candidatas, obtengo como una de ellas dwmapi.dll, y es precisamente esta la que voy a utilizar. Por lo tanto renombro mi hijack.dll a dwmapi.dll.
Cómo hacer llegar esta DLL con su aplicación vulnerable, lo dejo como ejercicio para vuestra imaginación, seguro que se os ocurren muchas formas.
En mi caso, como se trata de una prueba de concepto, he levantado con Python un pequeño servidor Web, y desde la máquina Windows de la víctima me descargaré la DLL y la ubicaré en el escritorio junto a la aplicación vulnerable.
Me conecto desde la máquina Windows al puerto 8000 de mi máquina Kali Linux para descargarme la DLL maliciosa.
Guardo la DLL en el escritorio, junto al ejecutable de uTorrent.
Último paso, ejecutar aplicación:
Oops! 😉
Como siempre, espero que os haya gustado, y permaneced atentos porque en breve publicaremos la tercera parte de esta serie donde jugaremos con DLL Hijacking y Metasploit.
¡Hasta pronto!
Miguel Ángel Arroyo // @miguel_arroyo76