[HarekazeCTF2019]Easy Notes
知识点:session 反序列化,代码审计
代码分析
flag.php 中有个 is_admin 函数的判断。

在 lib.php 中有 is_admin 函数,需要 session['admin'] 为 true,或者通过文件读取的方式。

在 index.php 中的 include 并不能使用伪协议读取 flag.php,那么要怎么使得 session['admin'] 为 true 呢?是不是可以通过 session 反序列化来绕过,我们可以全局搜一下有没有 session_start。

存在 sesson_start 那么也许真的存在 session 反序列化。

在 init.php 中我们可以看到 session 保存的目录,在 /var/www/tmp 下,那这个目录有什么特殊的呢?


session 保存的目录竟然和 node 的保存目录一样,那么怎么控制保存的文件名,怎么使得我们上传的内容 session 反序列化后能通过 is_admin 呢?

我们先看一下它的上传代码,在 add.php 中利用 add_note 函数来处理上传的信息。

而 add_note 函数功能就是把接收的 title 和 body 以及 hash 的 id,存入 $_SESSION['notes'] 列表里。

然后当我们访问 export.php 的时候,选择 tar 它就把 $_SESSION[‘notes’] 里的信息转换为 json 数据写入 TEMP_DIR / get_user() . '-' . bin2hex(random_bytes(8)) . '.' . 'tar'; 文档里最后输出出来。


我们上传个测试一下,这边用户名是 test,内容如下。

可以看到确实如讲的一样,那么我们是不是令用户名为 sess_ 也就是 session 文件保存的格式,这样就变成了 sess_-xxxxxx.tar,这个 tar 怎么处理?

我们只需要令 type 为 .,这样就会因为 str_replace 把 .. 替换为空,自然就消除了,文件名的问题解决了,那内容呢?内容就很简单了,因为 php 默认的 session 反序列化模式是 php 也就是以 | 符号为分界线,前面的是键名后面的是键值.
构造如下 title ,把前面多余的值设为空,设置 admin 为 bool(true)
|N;admin|b:1;

操作步骤
以 sess_ 为用户名登录。

写入反序列化值

把反序列化值,写入 session 格式的文件里。

获取我们伪造的 session 文件名。

修改 PHPSESSID 访问 flag,成功。


相关文章:
[HarekazeCTF2019]Easy Notes
知识点:session 反序列化,代码审计代码分析 flag.php 中有个 is_admin 函数的判断。 在 lib.php 中有 is_admin 函数,需要 session[admin] 为 true,或者通过文件读取的方式。 在 index.php 中的 include 并不能使用伪协议读取 …...
Java学习-IO流-字符流-FileReader
Java学习-IO流-字符流-FileReader 字符流 字节流 字符集 输入流:默认一次读一个字节,遇到中文时一次读多个字节 输出流:底层把数据按照指定编码方式编码,变成字节写入文件 使用场景:纯文本文件读写 // …...
python攻陷米哈游《元神》数据?详情请看文章。。
前言 嗨喽,大家好呀~这里是爱看美女的茜茜呐 《原神》是由米哈游自研的一款全新开放世界冒险RPG。 里面拥有许多丰富得角色,让玩家为之着迷~ 今天,我们就来用python探索一下原神游戏角色信息! 标题大家看看就好了哈~(…...
【unity细节】基于unity子对象(如相机)为什么无法进行z轴的拖拽移动和z轴自动归位的问题
👨💻个人主页:元宇宙-秩沅 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 本文由 秩沅 原创 收录于专栏:unity细节和bug ⭐基于unity子对象为什么无法进行z轴的拖拽移动和z轴自动归位⭐ 文章目录⭐基于u…...
如何维护固态继电器?
固态继电器是SSR的简称,是由微电子电路、分立电子器件和电力电子功率器件组成的非接触式开关。隔离装置用于实现控制端子与负载终端之间的隔离。固态继电器的输入端使用微小的控制信号直接驱动大电流负载。那么,如何保养固态继电器呢? 在为小…...
Sprng依赖注入(三):构造方法注入是如何工作的?
前言这是Spring依赖注入系列的第三篇,前两篇主要分析了Spring bean依赖属性注入的两种方式,是字段注入和setter方法注入,单独比较这两种方式,会发现其过程和工作原理非常类似,那么构造方法注入会不会也和前两种比较类似…...
「1」指针进阶——详解
🚀🚀🚀大家觉不错的话,就恳求大家点点关注,点点小爱心,指点指点🚀🚀🚀 目录 🐰指针的回顾 🐰字符指针 🐰指针数组 🌸模…...
JS语法让人困惑的点 “==与===”
在JS中有很多神奇的语法,非常让人困惑,我们就先一一道来,相信你在开发中或多或少都踩过这些坑,或者让人无法理解。 今天我们就来说下【】和【】 这题对于很多没有系统学过前端开发的技术人员来说,算个重点,…...
《狂飙》壁纸大嫂如此惊艳,做成日历壁纸天天看
兄弟们,今年的反腐大剧狂飙都有看吗 ? 话说,名字虽然叫狂飙,但是全剧只有有田一个人在狂飙! 当然,有田虽然亮眼,但是毕竟是个糟老头子,正经人谁看有田啊,当然是看大嫂了…...
手机照片删除了怎么恢复
手机照片删除了怎么恢复?喜欢拍照的小伙伴,都会不定期删除手机上的照片,因为这些爱拍照的人,手机中会存储着很多照片,删除照片是必然的,但在手机删除照片时,如果是一张一张删除太麻烦了,就直接…...
maven pom.xml 依赖的scope属性
maven pom.xml 依赖的scope属性 compile 适用范围 编译期、测试期、运行期 作用 从中央仓库拉取依赖到本地,并编译 打包到结果包中 runtime 适用范围 测试期、运行期 作用 runtime 用在 Class.forName(“com.mysql.jdbc.Driver”) 时,compile 编…...
git 的使用方法 (下 - 远程仓库和图形化)
目录前言:一、什么是协同开发二、Gitee 使用协同开发1. 首先注册一个码云账号2. 新建一个仓库3. 根据下图把新建仓库设置为开源4. 在远端合并分支的方法5. 链接 git 远程6. 提交(同步)远程7. 远程拉取至本地8. 远程分支三、git 图形化的使用1…...
Java基础:拼图小游戏
涉及到的知识: 1.图形用户接口GUI(Graphical User Interface)用图形化的方式显示操作界面 两个体系: AWT包和Swing包 2.界面会用到JFrame类 3.界面中的菜单会用到JMenuBar, JMenu, JMenuItem 4.添加图片 在设置完JLabel的location之后还需要获得展示内容的窗体, 通过setLay…...
一个跟蘑菇结缘的企业老板
记得那是一个很久以前的一家公司了董事长办公室里中的大型盆栽里面长了一个蘑菇董事长认为是祥瑞每天都会浇水后来一个新来的保洁阿姨以为杂草啥的给他掰掉扔垃圾桶了董事长第二天来浇水的时候发现没了就问谁动了他的蘑菇问道之后就跑到楼道大垃圾桶那里把蘑菇找回来种在花盆里…...
【Leetcode 剑指Offer】第 4 天 查找算法(简单)
查找剑指 Offer 03. 数组中重复的数字剑指 Offer 53 - I. 在排序数组中查找数字 I二分法题目链接剑指 Offer 03. 数组中重复的数字 题:在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数…...
Jenkins利用docker部署vue项目
Jenkins利用docker部署vue项目一、环境准备1、安装docker2、安装nodejs3、安装cnpm与配置淘宝镜像4、jenkins安装nodejs插件二、jenkins以vue项目1、全局参数配置2、源码配置3、构建环境4、构建三、构建项目四、访问一、环境准备 本次jenkins与部署vue项目在同一台机器&#x…...
【Linux】如何将ntfs硬盘挂载到home目录下并具有读写权限
步骤1. 查看当前挂载的硬盘及其挂载点2. 查看需要挂载到home下的磁盘类型信息3. 在home下新建一个空的文件夹作为该磁盘的新挂载点4. 以ntfs类型的硬盘为例,使用mount命令进行挂载5. 问题1:进程占用了磁盘6. 问题2:磁盘权限为只读的7. 永久挂…...
拖拽删除元素、拖拽排序、拖拽预览图片和拖拽移动元素
介绍 HTML5 提供了专门的拖拽与拖放的 API,目前各浏览器都已支持,包括 IE。HTML 拖放(Drag and Drop)接口使应用程序能够在浏览器中使用拖放功能。例如,用户可使用鼠标选择可拖拽(draggable)元素…...
yarn的global安装命令不生效
问题 yarn全局安装某个依赖完成之后,但依赖没有生效,一般有两种情况导致的。 解决思路 1.yarn命令问题 yarn在全局安装某个依赖时,global要紧接在yarn之后,然后才是add yarn global add xxxx如果出现global在add之后ÿ…...
如何发布自己的npm包?
1 文件组成 package.json文件components文件css样式文件index.js文件 2 package.json配置 description:描述title:题目keywords:搜索关键词typings:指定TypeScript的入口文件main:加载的入口文件module:…...
告别暴力搜索!用DiffDock的扩散模型5分钟搞定分子对接,效率提升12倍
5分钟颠覆传统:DiffDock如何用扩散模型重构分子对接效率天花板 在药物研发的漫长链条中,分子对接就像一把精准的钥匙开锁过程——需要找到小分子配体与靶标蛋白最契合的三维结合方式。传统方法如同盲人摸象,耗费数小时在亿万种可能中暴力搜索…...
IndexTTS2 V23情感控制实测:如何用滑块调节喜怒哀乐语音
IndexTTS2 V23情感控制实测:如何用滑块调节喜怒哀乐语音 1. 情感语音合成技术概述 1.1 什么是情感语音合成 情感语音合成(Emotional Text-to-Speech)是语音合成技术的重要分支,它突破了传统TTS系统"机械感"的局限&am…...
ViGEmBus游戏控制器模拟驱动技术解析与应用指南
ViGEmBus游戏控制器模拟驱动技术解析与应用指南 【免费下载链接】ViGEmBus Windows kernel-mode driver emulating well-known USB game controllers. 项目地址: https://gitcode.com/gh_mirrors/vi/ViGEmBus 游戏控制器模拟驱动是连接玩家与游戏世界的重要桥梁…...
突破QQ音乐加密限制:qmcdump全场景解密工具实战指南
突破QQ音乐加密限制:qmcdump全场景解密工具实战指南 【免费下载链接】qmcdump 一个简单的QQ音乐解码(qmcflac/qmc0/qmc3 转 flac/mp3),仅为个人学习参考用。 项目地址: https://gitcode.com/gh_mirrors/qm/qmcdump 副标题&…...
Graphormer从部署到应用:中小企业如何用低成本GPU开展分子AI研发
Graphormer从部署到应用:中小企业如何用低成本GPU开展分子AI研发 1. 为什么中小企业需要关注Graphormer 在药物发现和材料科学领域,分子属性预测一直是个耗时费力的工作。传统方法需要大量实验和计算资源,对中小企业来说成本高昂。Graphorm…...
AnythingtoRealCharacters2511快速上手指南:3分钟在本地完成动漫转真人生成
AnythingtoRealCharacters2511快速上手指南:3分钟在本地完成动漫转真人生成 你有没有想过,把喜欢的动漫角色变成真人会是什么样子?或者,想把二次元头像变成一张可以发朋友圈的真实感照片?以前这需要专业的绘画技能和复…...
BiliTools:解锁B站学习新姿势,5分钟掌握视频AI总结与智能下载
BiliTools:解锁B站学习新姿势,5分钟掌握视频AI总结与智能下载 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bili…...
企业网站关键词 SEO 优化大概需要多少费用
企业网站关键词 SEO 优化大概需要多少费用 在当今数字化经济时代,企业网站的SEO优化已经成为了提升网站流量和品牌知名度的重要手段。企业网站关键词 SEO 优化大概需要多少费用呢?这个问题的答案并不简单,因为涉及到多方面的因素。本文将详细…...
ModTheSpire终极指南:杀戮尖塔模组加载器完整使用教程
ModTheSpire终极指南:杀戮尖塔模组加载器完整使用教程 【免费下载链接】ModTheSpire External mod loader for Slay The Spire 项目地址: https://gitcode.com/gh_mirrors/mo/ModTheSpire ModTheSpire是一款专为《杀戮尖塔》设计的强大模组加载器,…...
零基础入门:REX-UniNLU中文NLP系统保姆级安装与使用指南
零基础入门:REX-UniNLU中文NLP系统保姆级安装与使用指南 1. 为什么选择REX-UniNLU系统 如果你正在寻找一个简单易用但功能强大的中文自然语言处理工具,REX-UniNLU可能是你的理想选择。这个系统最大的特点就是"开箱即用"——不需要复杂的配置…...
