[HarekazeCTF2019]Easy Notes-代码审计

news2024/11/24 3:39:12

文章目录

    • [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

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

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

相关文章

具备这7 个功能将让你的网站聊天机器人更加出色

对于您和您的客户来说&#xff0c;客户支持体验是最重要的。这里有 7个强大的功能可以完善和增强您的网站聊天机器人。 在网站上使用聊天机器人可能是您可以为客户支持团队做出的最佳决策之一。然而&#xff0c;在2023 年互联网发达的今天&#xff0c;您的网站聊天机器人可以实…

如何为开源项目做出贡献?

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…

Pytorch学习:常见数据集torchvision.datasets及数据集的使用DataLoader

文章目录 1. Datasets常见数据集1.1 CIFAR101.2 Fashion-MNIST1.3 ImageNet 2. DataLoader2.1 shuffle2.2 drop_last 1. Datasets常见数据集 Torchvision在 torchvision.datasets 模块中提供了许多内置的数据集&#xff0c;以及用于构建自己的数据集的实用程序类。 官方文档&a…

基于象群算法优化的BP神经网络(预测应用) - 附代码

基于象群算法优化的BP神经网络&#xff08;预测应用&#xff09; - 附代码 文章目录 基于象群算法优化的BP神经网络&#xff08;预测应用&#xff09; - 附代码1.数据介绍2.象群优化BP神经网络2.1 BP神经网络参数设置2.2 象群算法应用 4.测试结果&#xff1a;5.Matlab代码 摘要…

白酒行业半年报:舍得酒业营收净利碾压水井坊

次高端川酒下半场&#xff0c;谁是A股“川酒老三”&#xff1f; “川酒六朵金花”中的次高端白酒代表&#xff1a;水井坊(600779.SH)、舍得酒业(600702.SH)于近日公布了2023年半年报&#xff0c;其业绩呈现不同趋势。 「不二研究」据其半年报发现&#xff1a;今年上半年&…

基于函数计算一键部署 Stable Diffusion

一、资源方式介绍 本实验支持开通免费试用、个人账户资源两种实验资源方式。 建议首次开通函数计算用户选择开通免费试用。 函数计算老用户选择个人账户资源。 在实验开始前&#xff0c;请您选择其中一种实验资源&#xff0c;单击确认开启实验。 二、选择开通免费试用&…

迅为RK3568开发板GPIO之外接模块

在迅为RK3568开发板上有一组GPIO&#xff0c;可以用来外接各种外设模块&#xff0c;从面实现一系列好玩的功能&#xff0c;一起来看看各个模块合集吧 RFID模块&#xff1a; 工作电流&#xff1a;13—20mA/直流3.3V 空闲电流&#xff1a;10-13mA/直流3.3V 休眠电流&#xff1a;…

badgerdb中的logfile

logfile的作用 logfile是一种日志结构&#xff0c;用来记录日志&#xff0c;lsm tree是日志追加写的模式&#xff0c;在bagerdb中&#xff0c;vlog和sst在磁盘中的存放方式都是使用的logfile结构 // memTable structure stores a skiplist and a corresponding WAL. Writes t…

【MySQL】MySQL中MyIsAM和InnoDB存储引擎的区别(面试必考!!)

目录 MyIsAM和InnoDB的区别 区别主要在于&#xff1a; 事务支持&#xff1a; 并发控制: 外键支持&#xff1a; 数据缓存和索引&#xff1a; 这么说可能不太好理解&#xff0c;让我们展开聊聊 数据一致性和恢复&#xff1a; InnoDB肯定是比myIsam的功能强大的&#xff0…

GNU make系列之介绍Makefile

一.欢迎来到我的酒馆 在本章节介绍Makefile。 目录 一.欢迎来到我的酒馆二.GNU make 预览三.一个简单的Makefile四.make程序如何处理Makefile文件 二.GNU make 预览 2.1 GNU make工具会自动决定哪些程序需要被重新编译&#xff0c;并且执行相应的命令来重新编译程序。在本系列博…

面试官:策略模式有使用过吗?我:没有......

面试官&#xff1a;策略模式有使用过吗&#xff1f;我&#xff1a;没有… 何为策略模式&#xff1f; 比如在业务逻辑或程序设计中比如要实现某个功能&#xff0c;有多种方案可供我们选择。比如要压缩一个文件&#xff0c;我们既可以选择 ZIP 算法&#xff0c;也可以选择 GZIP…

[Makefile] 预宏定义的使用

main.c 文件如下&#xff1a; #include <stdio.h> int main() {printf("soft infomation\n");//以下信息均在gcc时已预定义printf("soft_ver:\t%s\n",__VER__);printf("author:\t\t%s\n",__AUTHOR__);printf("sn_num:\t\t%d\n"…

递归算法应用(Python版)

文章目录 递归递归定义递归调用的实现递归应用数列求和任意进制转换汉诺塔探索迷宫找零兑换-递归找零兑换-动态规划 递归可视化简单螺旋图分形树&#xff1a;自相似递归图像谢尔宾斯基三角 分治策略优化问题和贪心策略 递归 递归定义 递归是一种解决问题的方法&#xff0c;其精…

Java后端开发面试题——消息中间篇

RabbitMQ-如何保证消息不丢失 交换机持久化&#xff1a; Bean public DirectExchange simpleExchange(){// 三个参数&#xff1a;交换机名称、是否持久化、当没有queue与其绑定时是否自动删除 return new DirectExchange("simple.direct", true, false); }队列持久化…

九、pikachu之敏感信息泄露

文章目录 1、敏感信息泄露概述2、实战 1、敏感信息泄露概述 由于后台人员的疏忽或者不当的设计&#xff0c;导致不应该被前端用户看到的数据被轻易的访问到。 比如&#xff1a; 通过访问url下的目录&#xff0c;可以直接列出目录下的文件列表;输入错误的url参数后报错信息里面…

基于数据湖的多流拼接方案-HUDI概念篇

目录 一、为什么需要HUDI&#xff1f; 1. 传统技术选型存在哪些问题&#xff1f; 2. Hudi有什么优点&#xff1f; 基于 Hudi Payload 机制的多流拼接方案&#xff1a; 二、HUDI的应用场景 1. 什么场景适合使用hudi&#xff1f; 2. 什么场景不适合使用hudi&#xff1f; …

双指针算法实例3(快乐数)

题目&#xff1a; 编写一个算法来判断一个数 n 是不是快乐数。 「快乐数」 定义为&#xff1a; 对于一个正整数&#xff0c;每一次将该数替换为它每个位置上的数字的平方和。然后重复这个过程直到这个数变为 1&#xff0c;也可能是 无限循环 但始终变不到 1。如果这个过程 结…

小白带你学习linux的keepalived+lvs和keepalived双机热备(三十七)

目录 一、keepalivedlvs作用 二、调度器配置 部署LVS主备调度器 调整master和backup的ARP参数&#xff08;一致&#xff09;全都安装一遍 启动master和backup的keepalived与ipvsadm 三、web节点配置 1、调整ARP参数 2、 配置虚拟IP地址 3、添加回环路由 一、keepalive…

开启元宇宙农场的绝世盛宴——Fram world

近年科技突飞猛进&#xff0c;元宇宙横扫游戏与金融领域&#xff0c;其中震惊全球的Fram world&#xff0c;不仅为玩家带来崭新娱乐&#xff0c;更在游戏与经济的融合中掀起惊人革命&#xff01;凭借Cardano基金会的强大支持&#xff0c;与英国英利区块链研究所的密切合作&…

Java多线程(十一)

目录 一、什么是CAS 二、CAS 是怎么实现的 三、CAS的应用 3.1 实现原子类 3.2 实现自旋锁 四、CAS的ABA问题 4.1 什么是ABA问题 4.2 ABA问题引发的BUG 4.3 ABA问题的解决方案 五、CAS与加锁的区别 一、什么是CAS CAS&#xff1a;全称Compare and swap&#xff0c;也就是“比较…