2024BaseCTF_week4_web上
继续!冲冲冲
目录
圣钥之战1.0
nodejs
原型
原型链
原型链污染
回到题目
flag直接读取不就行了?
圣钥之战1.0
from flask import Flask,request
import jsonapp = Flask(__name__)def merge(src, dst):for k, v in src.items():if hasattr(dst, '__getitem__'):if dst.get(k) and type(v) == dict:merge(v, dst.get(k))else:dst[k] = velif hasattr(dst, k) and type(v) == dict:merge(v, getattr(dst, k))else:setattr(dst, k, v)def is_json(data):try:json.loads(data)return Trueexcept ValueError:return Falseclass cls():def __init__(self):passinstance = cls()@app.route('/', methods=['GET', 'POST'])
def hello_world():return open('/static/index.html', encoding="utf-8").read()@app.route('/read', methods=['GET', 'POST'])
def Read():file = open(__file__, encoding="utf-8").read()return f"J1ngHong说:你想read flag吗?
那么圣钥之光必将阻止你!
但是小小的源码没事,因为你也读不到flag(乐)
{file}
"@app.route('/pollute', methods=['GET', 'POST'])
def Pollution():if request.is_json:merge(json.loads(request.data),instance)else:return "J1ngHong说:钥匙圣洁无暇,无人可以污染!"return "J1ngHong说:圣钥暗淡了一点,你居然污染成功了?"if __name__ == '__main__':app.run(host='0.0.0.0',port=80)
看不懂,不会写,官方wp讲的太简单了,上网搜了别的师傅的wp后知道了这是一道原型链污染(nodejs),接下来讲讲nodejs漏洞
参考了这两篇博客渗透攻击漏洞——原型链污染_原型污染-CSDN博客
渗透攻击漏洞之——原型链污染_原型链污染漏洞-CSDN博客
nodejs
原型链污染是nodejs的一种题型类似ssti,是通过类的继承机制实现的漏洞(语言不一样)
要了解原型链污染,就要先知道原型链是什么?原型是什么?
原型
JavaScript继承机制的思想是,把属性和方法定义在原型上,那么所有的实例对象都能共享这些属性和方法。(类似于父类子类的关系)
每个类都有一个prototype属性,指向该类的对象的原型对象(父类)
而每个对象的__proto__属性,则是指向该对象的原型对象
原型链
所有的类都可以当原型对象,且所有的对象都有原型对象。没错,原型对象也有属于它的原型对象,这就是所谓的原型链
举个例子:son.prototype = new father(),也就是说son的原型对象是father,father的原型对象是object,object的原型对象是null。
那么这条原型链就是son---->father--->object--->null
在调用对象属性时,如果该对象没有这个属性,那么JavaScript引擎会去寻找该对象的原型对象是否有这个属性,直到null
这里我们可以看到,son是没有first_name的,这里运行出来仍有
原型链污染
上面区区几段话是肯定不能完全理解的,接下来会通过这个漏洞,加深对这个概念的理解
当我们更改原型对象A的属性时,会反馈到所有以A为原型对象的对象
function Father() {this.first_name = '王'this.last_name = '爸'
}function Son() {this.last_name = '儿'
}Son.prototype = new Father()let son = new Son()
son.__proto__['add_name'] = '梓'
let son1 = new Son();
console.log(`son Name: ${son.first_name}${son.add_name}${son.last_name} `)
console.log(`son1 Name: ${son.first_name}${son.add_name}${son.last_name} `)
console.log(`father Name: ${son.__proto__.first_name}${son.__proto__.add_name}${son.__proto__.last_name} `)
我们可以看到,通过`son.__proto__`我们添加了一个新属性[add_name],这个新属性同样作用于了son1。
再来看一个例子
let a = {data: 1} #a是一个简单的对象console.log(a.data) #输出a的dataa.__proto__.data = 2 #a的原型对象未指定时,默认原型对象为同同一个object,相当于给object加了一个属性console.log(a.data) #按照原型链顺序查找data属性let b = {} #空对象bconsole.log(b.data) #顺序查到到object,输出object中的data
这就是原型链污染
回到题目
分析一下源码(看不懂就丢给ai)
-
merge
函数 :- 动态地将
src
中的键值对合并到dst
中。 - 如果
dst
是一个字典,则更新字典的键值。 - 如果
dst
是一个对象,则通过setattr
设置对象的属性。
- 动态地将
-
/pollute
路由 :- 允许用户通过 POST 请求发送 JSON 数据。
- 将用户输入的数据(JSON payload)通过
merge
函数合并到全局对象instance
中
也就是说我们 在url/pollute里通过post发送JSON数据,这个JSON数据会合并到instance对象中,这个instance是其他对象的原型对象,通过改变这个对象的数据,做到污染其他对象里的内容。
接下来就是构造JSON pyload
我们知道一旦instance.__file__
被设置为/flag
,访问/read
路由时,代码会读取/flag
文件的内容并返回给用户。
所以我们需要覆盖__file__,将它的数据改为/flag
{"__init__" : {"__globals__" : {"__file__":"/flag"}}}__init__就是类的初始化方法。__globals__是函数对象的一个属性,指向函数定义时的全局变量字典。__file__通常表示模块所在的文件路径。
我们在url/pollute中通过post传JSON数据,可以通过requests库实现
然后回过头,进入url/read
flag直接读取不就行了?
首先分析一下代码,题目中给出四个变量,J,H,K,W
K,J用于指明类,W,H则是对应类而需要传入的值
首先,我们需要用kw进行目录的遍历,在php文档中我们可以找到DirectoryIterator 类用于读取文件,构造pyload
/?k=DirectoryIterator&w=/
题目说藏在secret文件夹里
这之后还需要一个可以读取文件的类,可以查到SplFileObject类,然后再用php伪协议读取文件(这里好像只能用 php://filter 伪协议?)
构造pyload
J=SplFileObject&H=php://filter/read=convert.base64-encode/resource=/secret/f11444g.php
之后解码一下即可
相关文章:
2024BaseCTF_week4_web上
继续!冲冲冲 目录 圣钥之战1.0 nodejs 原型 原型链 原型链污染 回到题目 flag直接读取不就行了? 圣钥之战1.0 from flask import Flask,request import jsonapp Flask(__name__)def merge(src, dst):for k, v in src.items():if hasattr(dst, __geti…...
大前端之前端开发接口测试工具postman的使用方法-简单get接口请求测试的使用方法-简单教学一看就会-以实际例子来说明-优雅草卓伊凡
大前端之前端开发接口测试工具postman的使用方法-简单get接口请求测试的使用方法-简单教学一看就会-以实际例子来说明-优雅草卓伊凡 背景 前端开发接口请求,调试,联调,接入数据,前端必不可少工具,postman是一个非常好…...
内网穿透的应用-Ubuntu本地Docker搭建pichome文件管理系统打造个人云相册
文章目录 前言1.关于pichome2.本地部署pichome3.简单使用pichome4. 安装内网穿透5.配置pichome公网地址6. 配置固定公网地址 前言 你是不是也经常遇到这样的尴尬:手机、电脑里堆满了照片和视频,想找一张特定的图片时却像在大海捞针一样无从下手…...
深度学习之神经网络框架搭建及模型优化
神经网络框架搭建及模型优化 目录 神经网络框架搭建及模型优化1 数据及配置1.1 配置1.2 数据1.3 函数导入1.4 数据函数1.5 数据打包 2 神经网络框架搭建2.1 框架确认2.2 函数搭建2.3 框架上传 3 模型优化3.1 函数理解3.2 训练模型和测试模型代码 4 最终代码测试4.1 SGD优化算法…...
DeepSeek AI R1推理大模型API集成文档
DeepSeek AI R1推理大模型API集成文档 引言 随着自然语言处理技术的飞速发展,大语言模型在各行各业的应用日益广泛。DeepSeek R1作为一款高性能、开源的大语言模型,凭借其强大的文本生成能力、高效的推理性能和灵活的接口设计,吸引了大量开发…...
怎麼使用靜態住宅IP進行多社媒帳號管理
隨著社交媒體平臺的多樣化,很多人發現一個社媒帳號已經無法滿足需求。以下是幾個常見場景: 企業需求:企業可能需要在不同平臺上運營多個品牌帳號,為每個市場地區單獨設立帳號。個人需求:一些自由職業者或內容創作者可…...
【Elasticsearch】Bucket Selector Aggregation
Elasticsearch 的Bucket Selector Aggregation是一种强大的管道聚合功能,用于根据条件过滤聚合结果中的桶(buckets)。它允许用户通过编写脚本来动态决定哪些桶应该被保留,哪些应该被过滤掉。以下是对Bucket Selector Aggregation的…...
CEF132 编译指南 MacOS 篇 - 启程:认识 CEF (一)
1. 引言 在当今的软件开发领域,将 Web 技术融入桌面应用程序已成为一种趋势。开发者们寻求一种方式,既能充分利用原生应用的性能,又能享受 Web 开发带来的高效和灵活性。Chromium Embedded Framework (CEF) 应运而生,它是一个基于…...
Python 操作 MongoDB 教程
一、引言 在当今数字化时代,数据的存储和管理至关重要。传统的关系型数据库在处理一些复杂场景时可能会显得力不从心,而 NoSQL 数据库应运而生。MongoDB 作为一款开源的、面向文档的 NoSQL 数据库,凭借其高性能、高可扩展性和灵活的数据模型…...
长安汽车发布“北斗天枢2.0”计划,深蓝汽车普及全民智驾
2月9日,长安汽车智能化战略“北斗天枢2.0”计划暨深蓝汽车全场景智能驾驶解决方案发布会在重庆盛大召开。此次发布会标志着长安汽车正式迈入智能化战略的新纪元,携手众多“中国智驾合伙人”,共同开启全民智驾元年。 发布会上,长安…...
SpringBoot速成(七)注册实战P2-P4
1.创建 数据库创建 依赖引入 <!-- mybatis起步依赖--><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>3.0.3</version></dependency> <…...
大语言模型RAG,transformer
1、RAG技术流总结 第一张图是比较经典的RAG知识图谱,第二张图是更加详细扎实的介绍图。 1.1 索引 坦白来说这部分的技术并不是大模型领域的,更像是之前技术在大模型领域的应用;早在2019年我就做过faiss部分的尝试,彼时索引技术已…...
Crowdin 在线本地化平台调用硅基流动AI预翻译
平台介绍 硅基流动(AI服务平台) 官网:https://siliconflow.cn/zh-cn/ 官方介绍 我主要使用:云服务平台 SilliconCloud 此平台已经将热门的开源大语言模型部署,花钱买额度,就能使用 API 最近有上线 Deep…...
第5章 数据库系统(选择|案例|论文)(重点★★★★★)
5.1 数据库管理系统1 数据库是长期存储在计算机内的、有组织的、可共享的数据集合,数据库系统是指在计算机信息系统中引入数据库后的系统,一般由数据库、数据库管理系统 (DataBaseManagement System,DBMS)、应用系统、数据库管理员(DataBase…...
linux部署node服务
1、安装nvm管理node版本 # 下载、解压到指定目录 wget https://github.com/nvm-sh/nvm/archive/refs/tags/v0.39.1.tar.gz tar -zxvf nvm-0.39.0.tar.gz -C /opt/nvm # 配置环境 vim ~/.bashrc~:这是一个路径简写符号,代表当前用户的主目录。在大多数 …...
【AI赋能】蓝耘智算平台实战指南:3步构建企业级DeepSeek智能助手
蓝耘智算平台实战指南:3步构建企业级DeepSeek智能助手 引言:AI大模型时代的算力革命 在2025年全球AI技术峰会上,DeepSeek-R1凭借其开源架构与实时推理能力,成为首个通过图灵测试的中文大模型。该模型在语言理解、跨模态交互等维…...
hyperf知识问题汇总
1、简单说下 hyperf(什么是 hyperf) 答:hyperf 是一个依赖swoole扩展的 php 开源开发框架,它由黄朝辉团队设计创建维护,具备简洁而强大的组件和超强的并发性能,而且还支持微服务架构,例如&…...
【EXCEL】【VBA】处理GI Log获得Surf格式的CONTOUR DATA
【EXCEL】【VBA】处理GI Log获得Surf格式的CONTOUR DATA data source1: BH coordination tabledata source2:BH layer tableprocess 1:Collect BH List To Layer Tableprocess 2:match Reduced Level from "Layer"+"BH"data source1: BH coordination…...
DeepSeek-R1技术革命:用强化学习重塑大语言模型的推理能力
引言:低成本高性能的AI新范式 在2025年1月,中国AI公司DeepSeek发布了两个标志性模型——DeepSeek-R1-Zero与DeepSeek-R1,以仅600万美元的训练成本实现了与OpenAI O1系列(开发成本约5亿美元)相当的推理性能,…...
SQLite 约束
SQLite 约束 SQLite 是一种轻量级的数据库管理系统,它以其简洁的设计和高效的性能在众多数据库系统中脱颖而出。在SQLite中,约束是一种用于确保数据完整性和一致性的机制。本文将详细介绍SQLite中的各种约束,包括它们的用途、语法以及在实际应用中的注意事项。 1. 约束概述…...
Vue.js 状态管理库Pinia
Pinia Pinia :Vue.js 状态管理库Pinia持久化插件-persist Pinia :Vue.js 状态管理库 Pinia 是 Vue 的专属状态管理库,它允许你跨组件或页面共享状态。 要使用Pinia ,先要安装npm install pinia在main.js中导入Pinia 并使用 示例…...
qwen2.5-vl-7B视觉大模型 私有化部署webUI
服务器选用:算力云 部署qwen2.5-vl-7B,24g显卡跑不起图,单问问题就占20g左右。有能力可以用大点的显卡 一、下载模型 Qwen2.5-VL-7B-Instruct 有conda ,可以在conda下操作,不知道conda的同学可以参考本博主之前的文章…...
Spring Boot 线程池自定义拒绝策略:解决任务堆积与丢失问题
如何通过自定义线程池提升系统稳定性 背景 在高并发系统中,线程池管理至关重要。默认线程池可能导致: 资源浪费(创建过多线程导致 OOM)任务堆积(队列满后任务被拒绝)任务丢失(默认拒绝策略丢…...
C++17 新特性解析
C++17 是 C++ 标准的一个重要更新,它在 C++11/14 的基础上引入了许多新特性,进一步简化了代码编写、提升了性能和类型安全性。以下是 C++17 的主要特性分类介绍: 一、语言核心改进 1. 结构化绑定(Structured Bindings) 允许将元组、结构体或数组的成员直接解包到变量中。…...
支持向量机相关文献
根据最新的研究动态和文献综述,当前支持向量机(SVM)的研究方向和内容主要集中在以下几个方面: 1. 提高训练效率 并行计算与分布式计算:随着数据规模的增加,SVM的训练时间往往较长,难以满足实时…...
线上hbase rs 读写请求个数指标重置问题分析
问题描述: 客户想通过调用hbase的jmx接口获取hbase的读写请求个数,以此来分析HBase读写请求每日增量。 但是发现生产,测试多个集群,Hbase服务指标regionserver读写请求个数存在突然下降到0或者大幅度下降情况。 需要排查原因: 某个Region的读写请求数:会发现经常会重置为…...
USB子系统学习(四)用户态下使用libusb读取鼠标数据
文章目录 1、声明2、HID协议2.1、描述符2.2、鼠标数据格式 3、应用程序4、编译应用程序5、测试6、其它 1、声明 本文是在学习韦东山《驱动大全》USB子系统时,为梳理知识点和自己回看而记录,全部内容高度复制粘贴。 韦老师的《驱动大全》:商…...
WPF 设置宽度为 父容器 宽度的一半
方法1:使用 绑定和转换器 实现 创建类文件 HalfWidthConverter public class HalfWidthConverter : IValueConverter{public object Convert(object value, Type targetType, object parameter, CultureInfo culture){if (value is double width){return width / 4…...
网络工程师 (30)以太网技术
一、起源与发展 以太网技术起源于20世纪70年代,最初由Xerox公司的帕洛阿尔托研究中心(PARC)开发。最初的以太网采用同轴电缆作为传输介质,数据传输速率为2.94Mbps(后发展为10Mbps),主要用于解决…...
2025.2.11
1> 制作一个闹钟软件 .h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QLabel> #include <QLineEdit> #include <QPushButton> #include <QTime> #include <QTimer> #include <QTimeEdit> #include <QDa…...
HTML应用指南:利用POST请求获取接入比亚迪业态的充电桩位置信息
在新能源汽车快速发展的今天,充电桩的分布和可用性成为了影响用户体验的关键因素之一。比亚迪作为全球领先的新能源汽车制造商,不仅在车辆制造方面取得了卓越成就,也在充电基础设施建设上投入了大量资源。为了帮助用户更方便地找到比亚迪充电桩的位置,本篇文章,我们将探究…...
系统URL整合系列视频四(需求介绍补充)
视频 系统URL整合系列视频四(需求补充说明) 视频介绍 (全国)大型分布式系统Web资源URL整合需求(补充)讲解。当今社会各行各业对软件系统的web资源访问权限控制越来越严格,控制粒度也越来越细。…...
PRC框架-Dubbo
RPC框架 RPC(Remote Procedure Call,远程过程调用)框架是一种允许客户端通过网络调用服务器端程序的技术。以下是常见的RPC框架及其特点: 1. 基于HTTP/REST的RPC框架 特点:简单易用,与Web开发无缝集成&am…...
Win10环境借助DockerDesktop部署最新MySQL9.2
Win10环境借助DockerDesktop部署最新MySQL9.2 前言 作为一杆主要撸Java的大数据平台开发攻城狮,必不可少要折腾各种组件,环境和版本一直是很头疼的事情。虽然可以借助Anaconda来托管Python的环境,也可以使用多个虚拟机来部署不同的环境&…...
PlantUML 总结
PlantUML 总结 1. 概述 PlantUML 是一个开源工具,允许用户通过简单的文本描述来生成各种UML图表。它支持多种图表类型,包括但不限于序列图、用例图、类图、活动图等。 2. 基本概念 2.1 开始和结束标记 startuml 和 enduml:用于标记Plant…...
【Elasticsearch】监控与管理:集群监控指标
🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/?__c1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,精通Java编…...
Swift的方法派发机制
1. 静态派发(Static Dispatch) 静态派发在编译时确定方法的具体实现,调用时直接跳转到该实现。静态派发的优点是性能高,因为不需要运行时查找方法实现。 适用场景: 值类型(Struct 和 Enum)&am…...
4.python+flask+SQLAlchemy+达梦数据库
前提 1.liunx Centos7上通过docker部署了达梦数据库。从达梦官网下载的docker镜像。(可以参考前面的博文) 2.windows上通过下载x86,win64位的达梦数据库,只安装客户端,不安装服务端。从达梦官网下载达梦数据库windows版。(可以参考前面的博文) 这样就可以用windows的达…...
6.深度学习在推荐系统中的应用
接下来我们将学习深度学习在推荐系统中的应用。深度学习技术近年来在推荐系统中得到了广泛应用,能够有效提升推荐系统的性能和精度。在这一课中,我们将介绍以下内容: 深度学习在推荐系统中的优势常用的深度学习推荐模型深度学习推荐系统的实…...
Leetcode - 149双周赛
目录 一、3438. 找到字符串中合法的相邻数字二、3439. 重新安排会议得到最多空余时间 I三、3440. 重新安排会议得到最多空余时间 II四、3441. 变成好标题的最少代价 一、3438. 找到字符串中合法的相邻数字 题目链接 本题有两个条件: 相邻数字互不相同两个数字的的…...
ArrayList、LinkedList、HashMap、HashTable、HashSet、TreeSet
集合族谱 在这些集合中,仅有vector和hashtable是线程安全的,其内部方法基本都有synchronized修饰。 ArrayList 底层采用Object数组实现,实现了RandomAccess接口因此支持随机访问。插入删除操作效率慢。 ArrayList需要一份连续的内存空间。 A…...
在 Windows 系统中如何快速进入安全模式的两种方法
在使用电脑的过程中,有时我们可能会遇到一些需要进入“安全模式”来解决的问题。安全模式是一种特殊的启动选项,它以最小化配置启动操作系统,仅加载最基本的驱动程序和服务,从而帮助用户诊断和修复系统问题。本文中简鹿办公将详细…...
【CS61A 2024秋】Python入门课,全过程记录P7(Week13 Macros至完结)【完结撒花!】
文章目录 关于新的问题更好的解决方案Week13Mon Macros阅读材料Lab 11: Programs as Data, MacrosQ1: WWSD: QuasiquoteQ2: If ProgramQ3: Exponential PowersQ4: Repeat Wed SQL阅读材料Disc 11: MacrosQ1: Mystery MacroQ2: Multiple AssignmentQ3: Switch Optional Contest:…...
AspectJ 下 Advisor 的排序过程
在 AbstractAdvisorAutoProxyCreator#findEligibleAdvisors 方法中,找到 BeanFactory 中所有的 Advisor 后,针对当前 beanClass 进行过滤,筛选出符合当前 beanClass 的 Advisor,称之为 eligibleAdvisors。接着对 eligibleAdvisors…...
Unity 高度可扩展的技能与多 Buff 框架详解
一、框架设计 1.1 核心思想 组件化设计: 将技能和 Buff 抽象为可复用的组件,通过组合不同的组件实现复杂的效果。 数据驱动: 使用 ScriptableObject 或 JSON 等数据格式定义技能和 Buff 的属性,方便配置和修改。 事件驱动: 利用 Unity 的事件系统或自…...
机器学习中过拟合和欠拟合问题处理方法总结
目录 一、背景二、过拟合(Overfitting)2.1 基本概念2.2 过拟合4个最主要的特征2.3 防止过拟合的11个有效方法 三、欠拟合(Underfitting)3.1 基本概念3.2 欠拟合的4个特征3.3 防止欠拟合的11个有效方法 四、总结五、参考资料 一、背景 在机器学习模型训练…...
新一代高性能无线传输模块M-GATEWAY3
M-GATEWAY3是M3系列的通用接口模块,用于接收各种总线信号并将它们集成到一个系统中。该模块通过标准化传输协议XCPonETH进行输出,确保为各种测量应用提供无损信号。此外,M-GATEWAY3支持通过热点、ETH-PC或USB-C传输数据。借助M-GATEWAY3&…...
一、通义灵码插件保姆级教学-IDEA(安装篇)
JetBrains IDEA 中安装教学 第一步:事先准备 支持系统:Windows 7 ~ Windows 11、Linux、macOS;下载并安装兼容的 JetBrains IDEA 2020.3 及以上版本; 第二步:在 IntelliJ IDEA 中安装通义灵码 方法 1:通…...
【leetcode 32】1047. 删除字符串中的所有相邻重复项
Java中的queue、deque、ArrayDeque的区别 使用 Deque 作为堆栈(ArrayDeque是双端队列,当仅使用栈操作时push/pop,就是栈) class Solution {public String removeDuplicates(String s) {//使用 Deque 作为堆栈(ArrayDeque是双端队列,当仅使用栈…...
ubuntu 安装vnc之后,本地黑屏,vnc正常
ubuntu 安装vnc之后,本地黑屏,vnc正常 在Ubuntu系统中安装VNC服务器(如TightVNC或RealVNC)后,如果遇到连接时本地屏幕变黑的情况,可能是由于几种不同的配置或兼容性问题。以下是一些解决步骤,可以帮助你解决这个问题&…...