DLL Hijacking
Hoy voy a explicar esta técnica a grandes rasgos:
En primer lugar el termino Hijacking es utilizado en el ámbito informático para referirse al secuestro de algo como web browser hijacking que es cuando se cambia de alguna forma la página de inicio con algún fin malicioso.
Dll es el acrónimo de “dynamic-link library” y son archivos con código ejecutable que se carga bajo la demanda de algún programa, como por ejemp wsock32.dll que proporciona una interfaz para las API de los sockets de windows.
Cuando se programa existen 3 formas de invocar direcciones, utilizando una ruta absoluta que sería algo como “c:/archivos de programa/hola mundo folder/hola mundo.dll”, utilizando rutas relativas como “../../hola mundo folder/hola mundo.dll”, y llamando al archivo directamente, es decir, “hola mundo.dll”.
Esta última es la más interesante, ya que llama al archivo a la carpeta actual desde donde se invoca por ejemplo un archivo asociado. Supongamos que existe un archivo llamado “web.html” en el escritorio y que esta predeterminado que los archivos .html se abrán con un programa que se llamara “navegador.exe”, y que este programa intenta llamar a “hola mundo.dll” sin rutas absolutas ni relativas. Veamos como sería al intentar cargar un dll, desde aquí deberíamos tener alguna idea de programación:
Cuando SeachPath, CreateProcess*, y LoadModule son evocadas, las siguientes ubicaciones son buscadas por el archivo que realiza la petición.
1. El directorio desde donde la aplicación se carga
2. El directorio de trabajo actual (CWD)
3. (Windows\System)
4. El directorio de Windows (Windows)
5. Los directorios en las variables de entorno.
Falta información sobre algunas funciones como WinExec, LoadLibrary pero es información que esta en la red.
Ahora como saber en que orden se cargan las dll y si tienen rutas absolutas, relativas etc., debemos monitorear los procesos, para eso debemos descargar algún monitor:
La recomendación es agregar filtros, algo como esto (result is name not found, path ends with.dll):
Y una vez hecho esto deberían ver algo como esto:
Encontrando una aplicación vulnerable bastaría con reemplazar la dll por una a gusto y correr el programa vulnerable (si es que busca en una carpeta la dll y podemos ponerla ahí antes de que la encuentre en otra por eso es importante el orden de la búsqueda):
#include <windows.h>
int POC()
{
WinExec("calc", 0);
exit(0);
return 0;
}
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
{
POC();
return 0;
}
Espero que se haya entendido un poco esta técnica.



Author: aKcro (56 Articulos)
Deja tu comentario!
Debes estar Logeado para dejar un comentario.