
DLL sideloading/proxying with Nim!
Este repositorio te permite generar fácilmente DLLs de Nim que puedes usar para sideloading/proxy loading. Si no estás familiarizado con lo que es el sideloading de DLL, échale un vistazo a esta entrada de blog.
Pon la DLL legítima (o varias DLLs) a las que quieras hacer proxy en el directorio build de este repositorio y luego ejecuta make.
Esto generará dos .dlls en el directorio out:
Si el sideloading tiene éxito, deberías ver aparecer un cuadro de mensaje y/o un archivo escrito en el escritorio.
Para "armar" el payload de verdad, puedes echar un vistazo al repositorio OffensiveNim para encontrar ideas y fragmentos de código listos para usar :).
dllproxy.nim es la DLL proxy que ejecutará tu payload y hará proxy de las llamadas legítimas a las DLL(s) originales.gen_def.py analiza la tabla de exportaciones de la DLL original y genera un archivo de definición de módulo (.def).El archivo .def se pasa luego al enlazador en tiempo de compilación para hacer proxy de las llamadas legítimas a funciones.
NimMain de la tabla de exportaciones de una DLL de NimConsulta este artículo de Microsoft
Observa la última línea de este archivo .def:
EXPORTS
GetFileVersionInfoA=ZCnerzNI.GetFileVersionInfoA @1
GetFileVersionInfoByHandle=ZCnerzNI.GetFileVersionInfoByHandle @2
GetFileVersionInfoExA=ZCnerzNI.GetFileVersionInfoExA @3
GetFileVersionInfoExW=ZCnerzNI.GetFileVersionInfoExW @4
GetFileVersionInfoSizeA=ZCnerzNI.GetFileVersionInfoSizeA @5
GetFileVersionInfoSizeExA=ZCnerzNI.GetFileVersionInfoSizeExA @6
GetFileVersionInfoSizeExW=ZCnerzNI.GetFileVersionInfoSizeExW @7
GetFileVersionInfoSizeW=ZCnerzNI.GetFileVersionInfoSizeW @8
GetFileVersionInfoW=ZCnerzNI.GetFileVersionInfoW @9
VerFindFileA=ZCnerzNI.VerFindFileA @10
VerFindFileW=ZCnerzNI.VerFindFileW @11
VerInstallFileA=ZCnerzNI.VerInstallFileA @12
VerInstallFileW=ZCnerzNI.VerInstallFileW @13
VerLanguageNameA=ZCnerzNI.VerLanguageNameA @14
VerLanguageNameW=ZCnerzNI.VerLanguageNameW @15
VerQueryValueA=ZCnerzNI.VerQueryValueA @16
VerQueryValueW=ZCnerzNI.VerQueryValueW @17
NimMain @19 NONAME PRIVATE
Esta última línea básicamente le indica al enlazador que elimine el nombre de la función NimMain. Compilar la DLL y pasar el archivo .def anterior al enlazador da como resultado la siguiente entrada si observamos la tabla de exportaciones de la .dll:
