python使用requests库进行raw请求


前言

在写漏洞利用 EXP 的某些场景下,比如路径穿越,URL 中带有 ../ 或 ./ 这类特殊的 URL path, requests 库的会将 url path 解析后再请求,比如一个url如下
/path/to/../../../../../../../../../../../../etc/passwd
解析后的实际请求url会变成 /etc/passwd,导致失去原本的测试意义。

解决

那如何在requests库中使用raw请求来进行原始请求呢?
答案是使用 requests.PreparedRequest 函数来创建一个未经解析的请求,可以在发送到服务器之前进行进一步修改。

测试demo

import requests

ses = requests.Session()
url = 'http://httpbin.org/test/path/to/poc/../../../../././././../etc/passwd'

req = requests.Request('GET', url)
prepared = ses.prepare_request(req)
prepared.url = url
response = ses.send(prepared)

print(req.url,"\n",response.status_code)

这篇文章源于我在修改 Re2Pcap 项目的时候记录创作,希望可以帮到大家。

参考


手机扫码阅读

nmap 错误 Couldn't open a raw socket. Error: Permission denied (13)

使用Linux命令查找占用磁盘空间最大的20个文件

评 论