Win32- und Kernel-Missbrauchstechniken für Pentester
Techniken zum Missbrauch von Win32 und Kernel für Pentester & Red-Teamer, erstellt von @UVision und @RistBS
Dev-Modus aktiviert, offen für jede Hilfe :)
DOS_HEADER : Erster Header der PE, enthält die MS-DOS-Meldung („This programm cannot be run in DOS mode...."), MZ-Header (Magic Bytes zur Identifizierung der PE) sowie etwas Stub-Inhalt.IMAGE_NT_HEADER : Enthält die PE-Dateisignatur, den Datei-Header und den optionalen HeaderSECTION_TABLE : Enthält die AbschnittsheaderSECTIONS : Kein Header, aber nützlich zu wissen: Dies sind die Abschnitte der PEDetails : https://www.researchgate.net/figure/PE-structure-of-normal-executable_fig1_259647266
Einfaches PE-Parsing zur Ermittlung der absoluten IAT- und ILT-Adresse:
GetModuleHandleA(NULL);Basisadresse+PIMAGE_DOS_HEADER.e_lfnanew (RVA NT_HEADER)OptionnalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT] von PIMAGE_NT_HEADERIMAGE_DATA_DIRECTORY.VirtualAddress (RVA von IMAGE_IMPORT_DIRECTORY)Basisadresse + IMAGE_IMPORT_DIRECTORY.VirtualAddress (RVA von IMAGE_IMPORT_DESCRIPTOR)Die EAT löst alle Funktionen auf, die von der PE exportiert werden, und löst auch DLLs auf. Sie ist in der IMAGE_EXPORT_DIRECTORY-Struktur definiert:```c
typedef struct _IMAGE_EXPORT_DIRECTORY {
DWORD Characteristics;
DWORD TimeDateStamp;
WORD MajorVersion;
WORD MinorVersion;
DWORD Name; // name of DLL
DWORD Base; // first ordinal number
DWORD NumberOfFunctions; // number of entries in EAT
DWORD NumberOfNames; // number of entries in (1) (2)
DWORD AddressOfFunctions; // RVA EAT and contains also RVA of exported functions
DWORD AddressOfNames; // Pointer array contains address of function names
DWORD AddressOfNameOrdinals; // Pointer array contains address of ordinal number of functions (index in AddressOfFunctions)
} IMAGE_EXPORT_DIRECTORY, *PIMAGE_EXPORT_DIRECTORY;
Bitte beachten Sie, dass die EAT in einer DLL definiert ist, nicht in einer „echten“ PE (eine PE verwendet die EAT einer geladenen DLL, um Zeiger auf Funktionen aufzulösen, die sie verwenden möchte).
### Funktionsadresse auflösen