Skip to content
KitploitKITPLOIT
StrumentiBlog
Log in
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
NativeDump — Esegui il dump di lsass utilizzando solo funzioni NTAPI, creando manualmente file Minidump (senza MiniDumpWriteDump!!!) | Kitploit
Strumenti/GitHubGitHub/ricardojoserf/nativedump
Memory ForensicsPost-ExploitRed Teaming
GitHubricardojoserf/nativedump

NativeDump

Esegui il dump di lsass utilizzando solo funzioni NTAPI, creando manualmente file Minidump (senza MiniDumpWriteDump!!!)

Vedi RepositorySito web
745104231 mese 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

NativeDump

NativeDump consente di dumpare il processo lsass utilizzando solo NTAPI, generando un file Minidump con solo gli stream necessari per essere analizzati da strumenti come Mimikatz o Pypykatz (Stream SystemInfo, ModuleList e Memory64List).

esquema

  • NTOpenProcessToken e NtAdjustPrivilegeToken per ottenere il privilegio "SeDebugPrivilege"
  • RtlGetVersion per ottenere i dettagli della versione del sistema operativo (versione principale, versione secondaria e numero di build). Questo è necessario per lo stream SystemInfo
  • NtQueryInformationProcess e NtReadVirtualMemory per ottenere l'indirizzo di lsasrv.dll. Questo è l'unico modulo necessario per lo stream ModuleList
  • NtOpenProcess per ottenere un handle per il processo lsass
  • NtQueryVirtualMemory e NtReadVirtualMemory per iterare attraverso le regioni di memoria e dumpare tutte quelle possibili. Contemporaneamente popola lo stream Memory64List

Il programma ha un argomento opzionale per il file di output, il nome predefinito è "proc_<PID>.dmp":

NativeDump.exe [DUMP_FILE]

poc

Lo strumento è stato testato sulle ultime versioni di Windows con le soluzioni di sicurezza più comuni (Microsoft Defender for Endpoints, CrowdStrike...) e funziona bene, ma la furtività dipenderà dalla "versione" scelta: usa linguaggi poco comuni e personalizza i binari per ottenere i migliori risultati! Tuttavia, non funziona se PPL è abilitato o la struttura PEB non è leggibile. Aggiornamento: Ora è possibile eseguire i programmi senza leggere il PEB, controlla il branch peb-unreadable :)

Alcuni vantaggi di questa tecnica sono:

  • Non utilizza la famosa funzione dbghelp!MinidumpWriteDump
  • Utilizza solo funzioni da Ntdll.dll, quindi è possibile bypassare l'API hooking rimappando la libreria
  • Il file Minidump non deve essere scritto su disco, puoi trasferire i suoi byte (codificati o crittografati) su una macchina remota

Puoi trovare il progetto in diverse "versioni" (o linguaggi):

  • main - Implementazione base .NET (questo branch)

  • python-flavour - Implementazione Python con 3 metodi di sovrascrittura di ntdll.dll + Esfiltrazione su macchina remota

  • golang-flavour - Implementazione Golang con 3 metodi di sovrascrittura di ntdll.dll + Esfiltrazione su macchina remota

  • c-flavour - Implementazione C/C++ con 3 metodi di sovrascrittura di ntdll.dll

  • bof-flavour - File BOF con 3 metodi di sovrascrittura di ntdll.dll

  • rust-flavour - Implementazione Rust di @safedv

  • crystal-flavour - Implementazione Crystal con capacità di sovrascrittura di ntdll.dll

  • nim-flavour - Implementazione Nim con capacità di sovrascrittura di ntdll.dll

Altri branch interessanti che usano .NET:

  • remote - Esfiltrazione su macchina remota + 3 metodi di sovrascrittura di ntdll.dll + Risoluzione dinamica delle funzioni + Crittografia AES delle stringhe + Codifica XOR del contenuto del Minidump

  • all-modules - Ottiene le informazioni per tutti i moduli (non solo lsasrv.dll)

  • peb-unreadable - Implementazione senza leggere la struttura PEB di lsass + 3 metodi di sovrascrittura di ntdll.dll



Tecnica in dettaglio: Creazione di un file Minidump minimale

Dopo aver letto le strutture non documentate del Minidump, la sua struttura può essere riassunta in:

  • Intestazione: Informazioni come la Firma ("MDMP"), la posizione della Directory degli Stream e il numero di stream
  • Directory degli Stream: Un elemento per ogni stream, contenente il tipo, la dimensione totale e la posizione nel file di ciascuno
  • Stream: Ogni stream contiene diverse informazioni relative al processo e ha il proprio formato
  • Regioni: I byte effettivi del processo provenienti da ogni regione di memoria che può essere letta

estructure

Ho creato uno strumento di parsing che può essere utile: MinidumpParser. Ci concentreremo sulla creazione di un file valido con solo i valori necessari per l'intestazione, la directory degli stream e i soli 3 stream necessari affinché un file Minidump possa essere analizzato da Mimikatz/Pypykatz: Stream SystemInfo, ModuleList e Memory64List.


A. Intestazione

L'intestazione è una struttura di 32 byte che può essere definita in C# come:

public struct MinidumpHeader
{
    public uint Signature;
    public ushort Version;
    public ushort ImplementationVersion;
    public ushort NumberOfStreams;
    public uint StreamDirectoryRva;
    public uint CheckSum;
    public IntPtr TimeDateStamp;
}

I valori richiesti sono:

  • Signature: Valore fisso 0x504d44d (stringa "MDMP")
  • Version: Valore fisso 0xa793 (costante Microsoft MINIDUMP_VERSION)
  • NumberOfStreams: Valore fisso 3, i tre Stream richiesti per il file
  • StreamDirectoryRVA: Valore fisso 0x20 o 32 byte, la dimensione dell'intestazione

B. Directory degli Stream

Ogni elemento nella Directory degli Stream è una struttura di 12 byte, quindi con 3 elementi la dimensione è di 36 byte. La definizione della struct in C# per un elemento è:

public struct MinidumpStreamDirectoryEntry
{
    public uint StreamType;
    public uint Size;
    public uint Location;
}

Il campo "StreamType" rappresenta il tipo di stream come intero o ID, alcuni dei più rilevanti sono:

IDTipo di Stream
0x00UnusedStream
0x01ReservedStream0
0x02ReservedStream1
0x03ThreadListStream
0x04ModuleListStream
0x05MemoryListStream
0x06ExceptionStream
0x07SystemInfoStream
0x08ThreadExListStream
0x09Memory64ListStream
0x0ACommentStreamA
0x0BCommentStreamW
0x0CHandleDataStream
0x0DFunctionTableStream
0x0EUnloadedModuleListStream
0x0FMiscInfoStream
0x10MemoryInfoListStream
0x11ThreadInfoListStream
0x12HandleOperationListStream
0x13TokenStream
0x16HandleOperationListStream

C. Stream SystemInformation

Il primo stream è uno stream SystemInformation, con ID 7. La dimensione è di 56 byte e si trova all'offset 68 (0x44), dopo la Directory degli Stream. La sua definizione in C# è:

Scarica lo strumento