Hi,大家好,我是编程小6,很荣幸遇见你,我把这些年在开发过程中遇到的问题或想法写出来,今天说一说python 上传文件 修改content-type,希望能够帮助你!!!。
最近,开始做一下 ctf的题目,因此记录一下
当时的需求是 上传一个文件,不过文件传过去后,在后台解析的时候 必须是文本,而文本传过去默认不可能是 文本,因此通过python记录一下.
from urllib3 import encode_multipart_formdata
print( encode_multipart_formdata({'file':('1.jpg',open('1.jpg','rb').read())} ))
输出的结果如下:
(b'--72b7573b7e63677e13d7ed7948f6b7f7\r\nContent-Disposition: form-data; name="file"; filename="1.jpg"\r\nContent-Type: image/jpeg\r\n\r\nusage:\ntouch [-A [-][[hh]mm]SS] [-acfhm] [-r file] [-t [[CC]YY]MMDDhhmm[.SS]] file ...\n\r\n--72b7573b7e63677e13d7ed7948f6b7f7--\r\n'
, 'multipart/form-data; boundary=72b7573b7e63677e13d7ed7948f6b7f7')
可以看到 Content-Type 是 Content-Type: image/jpeg,明显不是 文本,那么后台解析的时候由于后台硬编码 无法解析,
那么就无法拿到flag了。
因此这里需要修改下:
data={'file':('1.jpg',open('1.jpg','rb').read(),'text/plain')}
encode_data = encode_multipart_formdata(data)
(b'--eb5679af2df9e07abb96cc24a4a994bc\r\nContent-Disposition: form-data; name="file"; filename="1.jpg"\r\nContent-Type: text/plain\r\n\r\nusage:\ntouch [-A [-][[hh]mm]SS] [-acfhm] [-r file] [-t [[CC]YY]MMDDhhmm[.SS]] file ...\n\r\n--eb5679af2df9e07abb96cc24a4a994bc--\r\n'
, 'multipart/form-data; boundary=eb5679af2df9e07abb96cc24a4a994bc')
可以看到 Content-Type: text/plain,这样后台解析的时候就可以通过了。
import requests
import json
from urllib3 import encode_multipart_formdata
data={'file':('1.jpg',open('1.jpg','rb').read(),'text/plain')}
encode_data = encode_multipart_formdata(data)
print(encode_data)
data = encode_data[0]
t1=requests.post('http://xxxx:xxx/xxxx/stage9',
headers={
'Cookie':'xxxx',
'Content-Type':encode_data[1]
} ,data=data
)
就可以完成文件的上传,又让后台可以解析通过
今天的分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。
上一篇