当前位置: 首页 > news >正文

[HarekazeCTF2019]Easy Notes-代码审计

文章目录

    • [HarekazeCTF2019]Easy Notes-代码审计

[HarekazeCTF2019]Easy Notes-代码审计

登录之后有几个功能点,可以添加节点,然后使用Export导出

image-20230824205806589

我们查看源码,

我们发现想要拿到flag的条件时$_SESSION['admin']=true

image-20230824210223434

如果我们能够控制session文件,就可以拿到flag了

image-20230824210445088

我们发现session存储的文件改为了:/var/www/tmp

重点看export.php

<?php
require_once('init.php');if (!is_logged_in()) {redirect('/?page=home');
}$notes = get_notes();if (!isset($_GET['type']) || empty($_GET['type'])) {$type = 'zip';
} else {$type = $_GET['type'];
}$filename = get_user() . '-' . bin2hex(random_bytes(8)) . '.' . $type;
$filename = str_replace('..', '', $filename); // avoid path traversal
$path = TEMP_DIR . '/' . $filename;if ($type === 'tar') {$archive = new PharData($path);$archive->startBuffering();
} else {// use zip as default$archive = new ZipArchive();$archive->open($path, ZIPARCHIVE::CREATE | ZipArchive::OVERWRITE);
}for ($index = 0; $index < count($notes); $index++) {$note = $notes[$index];$title = $note['title'];$title = preg_replace('/[^!-~]/', '-', $title);$title = preg_replace('#[/\\?*.]#', '-', $title); // delete suspicious characters$archive->addFromString("{$index}_{$title}.json", json_encode($note));
}if ($type === 'tar') {$archive->stopBuffering();
} else {$archive->close();
}header('Content-Disposition: attachment; filename="' . $filename . '";');
header('Content-Length: ' . filesize($path));
header('Content-Type: application/zip');
readfile($path);

这里可以看到,导出的文件也是写到/var/www/tmp目录下面,所以我们可以尝试session伪造一下,伪造一个session文件

$filename = get_user() . '-' . bin2hex(random_bytes(8)) . '.' . $type;
$filename = str_replace('..', '', $filename); // avoid path traversal
$path = TEMP_DIR . '/' . $filename;

get_user()会获取用户名,bin2hex(random_bytes(8))会生成16进制字符串,

如果我们用户名为sess_,并且$type=.,那么两个.会被替换为空,所以最终文件名就符合session文件的格式了,session文件名可控

那么看一下session内容可控吗:

$archive->addFromString("{$index}_{$title}.json", json_encode($note));

可控的

由于默认session_serialize_handler=php,那么序列化规则为:

处理器对应的存储格式
php键名 + 竖线 + 经过 serialize() 函数反序列处理的值

所以$_SESSION['admin']=true需要满足:

admin|b:1;

但是由于我们导出的文件中有一些内容,防止被污染,我们需要这么写:

|N;admin|b:1;

image-20230824211602859

添加之后导出:

/export.php?type=.

最后替换一下PHPSESSID为文件名:

image-20230824211719493

相关文章:

[HarekazeCTF2019]Easy Notes-代码审计

文章目录 [HarekazeCTF2019]Easy Notes-代码审计 [HarekazeCTF2019]Easy Notes-代码审计 登录之后有几个功能点&#xff0c;可以添加节点&#xff0c;然后使用Export导出 我们查看源码&#xff0c; 我们发现想要拿到flag的条件时$_SESSION[admin]true 如果我们能够控制sessio…...

nginx-location正则

一 Nginx的location语法 location [||*|^~] /uri/ { … } 严格匹配。如果请求匹配这个location&#xff0c;那么将停止搜索并立即处理此请求~ 区分大小写匹配(可用正则表达式)~* 不区分大小写匹配(可用正则表达式)!~ 区分大小写不匹配!~* 不区分大小写不匹配^~ 如果把这个前缀…...

微信小程序胶囊位置计算,避开胶囊位置

由于小程序在不同的手机上顶部布局会发生变化&#xff0c;不能正确避开胶囊位置&#xff0c;所以通过官方给出的胶囊信息&#xff0c;可以计算出胶囊位置&#xff0c;并避开 图示例&#xff1a; 此处思路是&#xff0c;获取胶囊底部位置&#xff0c;并拉开10个px 计算出来的…...

快速指南:使用Termux SFTP通过远程进行文件传输——”cpolar内网穿透“

文章目录 1. 安装openSSH2. 安装cpolar3. 远程SFTP连接配置4. 远程SFTP访问4. 配置固定远程连接地址 SFTP&#xff08;SSH File Transfer Protocol&#xff09;是一种基于SSH&#xff08;Secure Shell&#xff09;安全协议的文件传输协议。与FTP协议相比&#xff0c;SFTP使用了…...

记录一个用C#实现的windows计时执行任务的服务

记录一个用C#实现的windows计时执行任务的服务 这个服务实现的功能是每天下午六点统计一次指定路径的文件夹大小 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Diagnostics; using System.IO; using Syst…...

“深入剖析JVM内部机制:了解Java虚拟机的工作原理“

标题&#xff1a;深入剖析JVM内部机制&#xff1a;了解Java虚拟机的工作原理 摘要&#xff1a;本文将深入剖析JVM内部机制&#xff0c;详细介绍Java虚拟机的工作原理。我们将探讨JVM的组成部分、类加载过程、内存管理、垃圾回收以及即时编译等关键概念。此外&#xff0c;还将提…...

golang远程开发调试设置vscode插件失败解决方法记录

golang远程开发&#xff0c;插件安装失败 Failed to find the "go" binary in either GOROOT() or PATH(/root/.vscode-server/bin/b3e4e68a0bc097f0ae7907b217c1119af9e03435/bin/remote-cli:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/g…...

数据结构:二叉树及相关操作

文章目录 前言一、树的概念及结构1.什么是树2. 树的相关概念3.树的表示 二、二叉树概念及结构1.二叉树概念2.特殊的二叉树3.二叉树的性质4.二叉树的存储结构 三、平衡二叉树实现1.创建树和树的前中后遍历1.前中后遍历2.创建树且打印前中后遍历 2.转换为平衡二叉树和相关操作1.转…...

4.物联网LWIP之C/S编程,stm32作为服务器,stm32作为客户端,代码的优化

LWIP配置 服务器端实现 客户端实现 错误分析 一。LWIP配置&#xff08;FREERTOS配置&#xff0c;ETH配置&#xff0c;LWIP配置&#xff09; 1.FREERTOS配置 为什么要修改定时源为Tim1&#xff1f;不用systick&#xff1f; 原因&#xff1a;HAL库与FREERTOS都需要使用systi…...

【C语言】扫雷游戏(可展开)——超细教学

&#x1f6a9;纸上得来终觉浅&#xff0c; 绝知此事要躬行。 &#x1f31f;主页&#xff1a;June-Frost &#x1f680;专栏&#xff1a;C语言 &#x1f525;该篇将运用数组来实现 扫雷游戏。 目录&#xff1a; &#x1f31f;思路框架测试游戏 &#x1f31f;测试部分函数实现&am…...

数据的深海潜行:数据湖、数据仓库与数据湖库之间的微妙关系

导言&#xff1a;数据的重要性与存储挑战 在这个信息爆炸的时代&#xff0c;数据已经成为企业的核心资产&#xff0c;而如何高效、安全、便捷地存储这些数据&#xff0c;更是每个组织面临的重大挑战。 数据作为组织的核心资产 数据在过去的几十年里从一个辅助工具演变成企业的…...

Docker 安装 Redis集群

1. 面试题 1.1 1~2亿条数据需要缓存&#xff0c;请问如何设计这个存储案例 单机单台不可能实现&#xff0c;肯定是用分布式存储&#xff0c;用redis如何落地&#xff1f; 1.2 上述问题工程案例场景设计类题目&#xff0c;解决方案 1.2.1 哈希取余分区 2亿条记录就是2亿个k,v&…...

数据结构入门 — 链表详解_单链表

前言 数据结构入门 — 单链表详解* 博客主页链接&#xff1a;https://blog.csdn.net/m0_74014525 关注博主&#xff0c;后期持续更新系列文章 文章末尾有源码 *****感谢观看&#xff0c;希望对你有所帮助***** 系列文章 第一篇&#xff1a;数据结构入门 — 链表详解_单链表 第…...

从零学算法151

151.给你一个字符串 s &#xff0c;请你反转字符串中 单词 的顺序。 单词 是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的 单词 分隔开。 返回 单词 顺序颠倒且 单词 之间用单个空格连接的结果字符串。 注意&#xff1a;输入字符串 s中可能会存在前导空格、尾随…...

【Vue】动态设置元素类以及样式

Vue2 动态设置元素类以及样式 1.动态设置类 class 1.1 字符串语法 通过v-bind绑定元素的class属性&#xff0c;为其指定一个字符串&#xff1a; <div v-bind:class"className">class动态绑定</div> <script> export default {data() {return {…...

node和前端项目宝塔部署

首先需要一台服务器 购买渠道&#xff1a;阿里云、腾讯云、百度云、华为云 一、以阿里云为例 购买esc 可临时购买测试服务器 二、安装宝塔 复制公网ip地址 通过Xshell 进行账号密码的连接 连接后访问宝塔官网 宝塔面板下载&#xff0c;免费全能的服务器运维软件 找到自己…...

【Python原创毕设|课设】基于Python Flask的上海美食信息与可视化宣传网站项目-文末附下载方式以及往届优秀论文,原创项目其他均为抄袭

基于Python Flask的上海美食信息与可视化宣传网站&#xff08;获取方式访问文末官网&#xff09; 一、项目简介二、开发环境三、项目技术四、功能结构五、运行截图六、功能实现七、数据库设计八、源码获取 一、项目简介 随着大数据和人工智能技术的迅速发展&#xff0c;我们设…...

【HTML】HTML面试知识梳理

目录 DOCTYPE&#xff08;文章类型&#xff09;head标签浏览器乱码的原因及解决常用的meta标签与SEOscript标签中defer和async的区别src&href区别HTML5有哪些更新语义化标签媒体标签表单进度条、度量器DOM查询Web存储Canvas和SVG拖放 &#xff08;HTML5 drag API&#xff0…...

Java进阶篇--IO流的第二篇《多样的流》

目录 Java缓冲流 BufferedReader和BufferedWriter类 Java随机流 Java数组流 字节数组流 ByteArrayInputStream流的构造方法&#xff1a; ByteArrayOutputStream流的构造方法&#xff1a; 字符数组流 Java数据流 Java对象流 Java序列化与对象克隆 扩展小知识&#x…...

iPhone 14 Pro 动态岛的功能和使用方法详解

当iPhone 14 Pro机型发布时,苹果公司将软件功能与屏幕顶部的药丸状切口创新集成,称之为“灵动岛”,这让许多人感到惊讶。这篇文章解释了它的功能、工作原理,以及你如何与它互动以执行动作。 一、什么是灵动岛?它是如何工作的 在谣言周期的早期‌iPhone 14 Pro‌ 在宣布时…...

Switch大气层系统高级配置实战:5个专业技巧打造安全高效的自定义环境

Switch大气层系统高级配置实战&#xff1a;5个专业技巧打造安全高效的自定义环境 【免费下载链接】Atmosphere-stable 大气层整合包系统稳定版 项目地址: https://gitcode.com/gh_mirrors/at/Atmosphere-stable 大气层&#xff08;Atmosphere&#xff09;作为任天堂Swit…...

GuwenBERT:古文理解的新纪元,让AI读懂千年典籍的智慧

GuwenBERT&#xff1a;古文理解的新纪元&#xff0c;让AI读懂千年典籍的智慧 【免费下载链接】guwenbert GuwenBERT: 古文预训练语言模型&#xff08;古文BERT&#xff09; A Pre-trained Language Model for Classical Chinese (Literary Chinese) 项目地址: https://gitcod…...

3步彻底解决Visual C++运行库问题:告别DLL缺失和应用崩溃

3步彻底解决Visual C运行库问题&#xff1a;告别DLL缺失和应用崩溃 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist Visual C Redistributable&#xff08;微软Vi…...

CogVideoX-2b CSDN专用版:5分钟部署你的本地AI视频导演

CogVideoX-2b CSDN专用版&#xff1a;5分钟部署你的本地AI视频导演 1. 从想法到画面&#xff0c;只差一个启动按钮 想象一下这样的场景&#xff1a;你脑子里闪过一个绝妙的视频创意——也许是“一只戴着宇航员头盔的柴犬在月球表面蹦跳”&#xff0c;也许是“赛博朋克都市的雨…...

OpenClaw性能优化:降低Qwen3-VL:30B多模态任务的Token消耗

OpenClaw性能优化&#xff1a;降低Qwen3-VL:30B多模态任务的Token消耗 1. 问题背景&#xff1a;多模态任务的高Token消耗困境 上周我在飞书群里测试OpenClaw对接Qwen3-VL:30B模型时&#xff0c;遇到了一个典型问题&#xff1a;当同事上传一张产品设计图要求分析时&#xff0c…...

生信分析效率翻倍:fastp多线程+UMI处理技巧全解析(含实战案例)

生信分析效率翻倍&#xff1a;fastp多线程UMI处理技巧全解析&#xff08;含实战案例&#xff09; 在肿瘤基因检测和ctDNA测序领域&#xff0c;数据预处理环节往往成为整个分析流程的瓶颈。传统工具在处理海量测序数据时&#xff0c;不仅耗时长达数小时&#xff0c;还经常面临内…...

Allegro PCB Design GXL (legacy) - 动态网格铜的避让技巧

1. 动态网格铜的基础概念 在PCB设计中&#xff0c;铜皮处理是影响电路性能的关键环节。Allegro PCB Design GXL (legacy)作为业界常用的EDA工具&#xff0c;提供了静态铜和动态铜两种处理方式。静态网格铜就像一块固定形状的铁板&#xff0c;不会自动适应周围环境&#xff1b;而…...

告别兼容性烦恼:在Windows 11上为特定网站配置专属IE访问环境的完整指南

告别兼容性烦恼&#xff1a;在Windows 11上为特定网站配置专属IE访问环境的完整指南 当Windows 11彻底移除了IE浏览器的桌面入口&#xff0c;许多依赖特定网站的企业用户、财务人员和政府工作人员陷入了困境。那些仅兼容IE的老旧系统——从企业内部OA到税务申报平台&#xff0c…...

本地部署音效生成器 Moodist 并实现外部访问

Moodist 是基于 MIT 许可的开源白噪音平台&#xff0c;提供了超过 75 种不同的环境声音&#xff0c;可以帮助用户集中注意力、保持冷静或进入放松状态。它还支持持久化声音选择&#xff0c;用户能够自定义声音预设&#xff0c;分享他们的音频配置给他人&#xff0c;并且集成睡眠…...

突破原厂限制:用开源相机工具解锁Sony相机7大隐藏功能

突破原厂限制&#xff1a;用开源相机工具解锁Sony相机7大隐藏功能 【免费下载链接】Sony-PMCA-RE Reverse Engineering Sony Digital Cameras 项目地址: https://gitcode.com/gh_mirrors/so/Sony-PMCA-RE 作为一名摄影爱好者&#xff0c;我一直梦想能充分掌控我的Sony相…...