uploads_labs前9题

news2024/12/24 3:22:38

upload-labs详解

  • 1.代码使用的函数详解
  • 2.uploads_labs
      • 1.Pass-01
      • 2.Pass-02
      • 3.Pass-03
      • 4.Pass-04
      • 5.Pass-05
      • 6.Pass-06
      • 7.Pass-07
      • 8.Pass-08
      • 9.Pass-09


1.代码使用的函数详解

2.uploads_labs

1.Pass-01

function checkFile() {
    var file = document.getElementsByName('upload_file')[0].value;
    if (file == null || file == "") {
        alert("请选择要上传的文件!");
        return false;
    }
    //定义允许上传的文件类型
    var allow_ext = ".jpg|.png|.gif";
    //提取上传文件的类型
    var ext_name = file.substring(file.lastIndexOf("."));//截取文件后缀
    //判断上传文件类型是否允许上传
    if (allow_ext.indexOf(ext_name + "|") == -1) {
        var errMsg = "该文件不允许上传,请上传" + allow_ext + "类型的文件,当前文件类型为:" + ext_name;
        alert(errMsg);
        return false;
    }
}

如上为Pass-01核心代码,代码解释如上所示,前端只允许我们上传".jpg|.png|.gif"为后缀的文件,我们可以把一句话木马文件先改成".jpg|.png|.gif"为后缀的文件,抓包后再改回来

2.Pass-02

$is_upload = false;
$msg = null;
if (isset($_POST['submit'])) { //判断是否提交了
    if (file_exists($UPLOAD_ADDR)) { //判断文件路径是否存在
        if (($_FILES['upload_file']['type'] == 'image/jpeg') || ($_FILES['upload_file']['type'] == 'image/png') || ($_FILES['upload_file']['type'] == 'image/gif')) { //设置了白名单,只有 'image/jpeg'等文件后缀才可以上传,其他文件类型不可以上传
            if (move_uploaded_file($_FILES['upload_file']['tmp_name'], $UPLOAD_ADDR . '/' . $_FILES['upload_file']['name'])) {
                $img_path = $UPLOAD_ADDR . $_FILES['upload_file']['name'];
                $is_upload = true;

            }
        } else {
            $msg = '文件类型不正确,请重新上传!';
        }
    } else {
        $msg = $UPLOAD_ADDR.'文件夹不存在,请手工创建!';
    }
}

如上为Pass-02核心代码,代码解释如上所示,后端只允许我们上传"image/jpeg "等类型的文件,我们可以上传一句话木马文件,并且抓包后把文件类型改成image/jpeg

  • 上传1.php:
    在这里插入图片描述
  • 更改类型:
    在这里插入图片描述

3.Pass-03

$is_upload = false;
$msg = null;
if (isset($_POST['submit'])) {
    if (file_exists($UPLOAD_ADDR)) {
        $deny_ext = array('.asp','.aspx','.php','.jsp');  //黑名单,就是不允许上传的文件的后缀
        $file_name = trim($_FILES['upload_file']['name']); //去除$_FILES['upload_file']['name']左右的空格
        $file_name = deldot($file_name);//删除文件名末尾的点
        $file_ext = strrchr($file_name, '.');  //如果$file_name是1.php,取php
        $file_ext = strtolower($file_ext); //转换为小写
        $file_ext = str_ireplace('::$DATA', '', $file_ext);//去除字符串::$DATA
        $file_ext = trim($file_ext); //收尾去空

        if(!in_array($file_ext, $deny_ext)) {
            if (move_uploaded_file($_FILES['upload_file']['tmp_name'], $UPLOAD_ADDR. '/' . $_FILES['upload_file']['name'])) {
                 $img_path = $UPLOAD_ADDR .'/'. $_FILES['upload_file']['name'];
                 $is_upload = true;
            }
        } else {
            $msg = '不允许上传.asp,.aspx,.php,.jsp后缀文件!';
        }
    } else {
        $msg = $UPLOAD_ADDR . '文件夹不存在,请手工创建!';
    }
}

如上为Pass-03核心代码,代码解释如上所示,没有过滤php5,phtml等后缀,如果平台又可以解析php5,phtml(apacher 开启了AddType application/x-httpd-php .php .phtml),就可以上传后缀为php5,phtml的文件,和php一模一样的(解析的前提是修改httpd.conf,) 现在我的是php的环境,那我们能够用php4、php5,或者说是phtml的方式进行绕过,那当然,如果说我们是asp的环境,那我们可以用asa、cer、cdx,这样的后缀名,进行绕过,那如果说是我们aspx的,这种网站,我们能够用ashx、asmx、ascx、esms,那当我们遇到jsp的时候,我们可以用jspx、jspf,这种后缀名进行绕过

  • 上传phtml文件后缀的文件:
    在这里插入图片描述

4.Pass-04

$is_upload = false;
$msg = null;
if (isset($_POST['submit'])) {
    if (file_exists($UPLOAD_ADDR)) {
        $deny_ext = array(".php",".php5",".php4",".php3",".php2","php1",".html",".htm",".phtml",".pHp",".pHp5",".pHp4",".pHp3",".pHp2","pHp1",".Html",".Htm",".pHtml",".jsp",".jspa",".jspx",".jsw",".jsv",".jspf",".jtml",".jSp",".jSpx",".jSpa",".jSw",".jSv",".jSpf",".jHtml",".asp",".aspx",".asa",".asax",".ascx",".ashx",".asmx",".cer",".aSp",".aSpx",".aSa",".aSax",".aScx",".aShx",".aSmx",".cEr",".sWf",".swf");  //几乎限制了所有脚本文件的上传,没有绕过.htaccess文件,可以先上传.htaccess构造.htaccess解析漏洞
        $file_name = trim($_FILES['upload_file']['name']);
        $file_name = deldot($file_name);//删除文件名末尾的点
        $file_ext = strrchr($file_name, '.');
        $file_ext = strtolower($file_ext); //转换为小写
        $file_ext = str_ireplace('::$DATA', '', $file_ext);//去除字符串::$DATA
        $file_ext = trim($file_ext); //收尾去空

        if (!in_array($file_ext, $deny_ext)) {
            if (move_uploaded_file($_FILES['upload_file']['tmp_name'], $UPLOAD_ADDR . '/' . $_FILES['upload_file']['name'])) {
                $img_path = $UPLOAD_ADDR . $_FILES['upload_file']['name'];
                $is_upload = true;
            }
        } else {
            $msg = '此文件不允许上传!';
        }
    } else {
        $msg = $UPLOAD_ADDR . '文件夹不存在,请手工创建!';
    }
}

如上操作请查看.htaccess漏洞和图片马的使用

5.Pass-05

$is_upload = false;
$msg = null;
if (isset($_POST['submit'])) {
    if (file_exists($UPLOAD_ADDR)) {
        $deny_ext = array(".php",".php5",".php4",".php3",".php2",".html",".htm",".phtml",".pHp",".pHp5",".pHp4",".pHp3",".pHp2",".Html",".Htm",".pHtml",".jsp",".jspa",".jspx",".jsw",".jsv",".jspf",".jtml",".jSp",".jSpx",".jSpa",".jSw",".jSv",".jSpf",".jHtml",".asp",".aspx",".asa",".asax",".ascx",".ashx",".asmx",".cer",".aSp",".aSpx",".aSa",".aSax",".aScx",".aShx",".aSmx",".cEr",".sWf",".swf",".htaccess"); //绕过了部分脚本文件,并且下面在进行比对的时候没有进行全部大写,全部小写的代码,及缺少strtolower()
        $file_name = trim($_FILES['upload_file']['name']);
        $file_name = deldot($file_name);//删除文件名末尾的点
        $file_ext = strrchr($file_name, '.');
        $file_ext = str_ireplace('::$DATA', '', $file_ext);//去除字符串::$DATA
        $file_ext = trim($file_ext); //首尾去空

        if (!in_array($file_ext, $deny_ext)) {
            if (move_uploaded_file($_FILES['upload_file']['tmp_name'], $UPLOAD_ADDR . '/' . $_FILES['upload_file']['name'])) {
                $img_path = $UPLOAD_ADDR . '/' . $file_name;
                $is_upload = true;
            }
        } else {
            $msg = '此文件不允许上传';
        }
    } else {
        $msg = $UPLOAD_ADDR . '文件夹不存在,请手工创建!';
    }
}

所以如上代码,我们可以上传木马文件,文件后缀为Php就可以绕过,由于windows和LInux一样,你大小写后都会自动变成小写,所以我们要在抓包的时候更改文件后缀
在这里插入图片描述

6.Pass-06

$is_upload = false;
$msg = null;
if (isset($_POST['submit'])) {
    if (file_exists($UPLOAD_ADDR)) {
        $deny_ext = array(".php",".php5",".php4",".php3",".php2",".html",".htm",".phtml",".pHp",".pHp5",".pHp4",".pHp3",".pHp2",".Html",".Htm",".pHtml",".jsp",".jspa",".jspx",".jsw",".jsv",".jspf",".jtml",".jSp",".jSpx",".jSpa",".jSw",".jSv",".jSpf",".jHtml",".asp",".aspx",".asa",".asax",".ascx",".ashx",".asmx",".cer",".aSp",".aSpx",".aSa",".aSax",".aScx",".aShx",".aSmx",".cEr",".sWf",".swf",".htaccess");
        $file_name = $_FILES['upload_file']['name'];
        $file_name = deldot($file_name);//删除文件名末尾的点
        $file_ext = strrchr($file_name, '.');
        $file_ext = strtolower($file_ext); //转换为小写
        $file_ext = str_ireplace('::$DATA', '', $file_ext);//去除字符串::$DATA
        
        if (!in_array($file_ext, $deny_ext)) {
            if (move_uploaded_file($_FILES['upload_file']['tmp_name'], $UPLOAD_ADDR . '/' . $_FILES['upload_file']['name'])) {
                $img_path = $UPLOAD_ADDR . '/' . $file_name;
                $is_upload = true;
            }
        } else {
            $msg = '此文件不允许上传';
        }
    } else {
        $msg = $UPLOAD_ADDR . '文件夹不存在,请手工创建!';
    }
}

前两个也没什么不同,但是将所有的后缀都给过滤了,仔细看了看,发现这个题目没有对后缀名末尾做去空处理。也就是说这道题目的考点是空格绕过,所以文件抓包后在php后缀下加上空格再发送就可以了(注意目标服务器需要是apache服务器,nginx服务器则不能够这样)

7.Pass-07

$is_upload = false;
$msg = null;
if (isset($_POST['submit'])) {
    if (file_exists($UPLOAD_ADDR)) {
        $deny_ext = array(".php",".php5",".php4",".php3",".php2",".html",".htm",".phtml",".pHp",".pHp5",".pHp4",".pHp3",".pHp2",".Html",".Htm",".pHtml",".jsp",".jspa",".jspx",".jsw",".jsv",".jspf",".jtml",".jSp",".jSpx",".jSpa",".jSw",".jSv",".jSpf",".jHtml",".asp",".aspx",".asa",".asax",".ascx",".ashx",".asmx",".cer",".aSp",".aSpx",".aSa",".aSax",".aScx",".aShx",".aSmx",".cEr",".sWf",".swf",".htaccess");
        $file_name = $_FILES['upload_file']['name'];
        $file_name = deldot($file_name);//删除文件名末尾的点
        $file_ext = strrchr($file_name, '.');
        $file_ext = strtolower($file_ext); //转换为小写
        $file_ext = str_ireplace('::$DATA', '', $file_ext);//去除字符串::$DATA
        
        if (!in_array($file_ext, $deny_ext)) {
            if (move_uploaded_file($_FILES['upload_file']['tmp_name'], $UPLOAD_ADDR . '/' . $_FILES['upload_file']['name'])) {
                $img_path = $UPLOAD_ADDR . '/' . $file_name;
                $is_upload = true;
            }
        } else {
            $msg = '此文件不允许上传';
        }
    } else {
        $msg = $UPLOAD_ADDR . '文件夹不存在,请手工创建!';
    }
}

这一题比前面三题来说,将所有改过滤的都过滤了,这下要想想其他的绕过方法了没有对后缀名末尾的点进行处理,利用windows特性,会自动去掉后缀名中最后的”.”,可在后缀名中加”.”绕过,这题的考点是.绕过。

8.Pass-08

 $is_upload = false;
$msg = null;
if (isset($_POST['submit'])) {
    if (file_exists($UPLOAD_ADDR)) {
        $deny_ext = array(".php",".php5",".php4",".php3",".php2",".html",".htm",".phtml",".pHp",".pHp5",".pHp4",".pHp3",".pHp2",".Html",".Htm",".pHtml",".jsp",".jspa",".jspx",".jsw",".jsv",".jspf",".jtml",".jSp",".jSpx",".jSpa",".jSw",".jSv",".jSpf",".jHtml",".asp",".aspx",".asa",".asax",".ascx",".ashx",".asmx",".cer",".aSp",".aSpx",".aSa",".aSax",".aScx",".aShx",".aSmx",".cEr",".sWf",".swf",".htaccess");
        $file_name = trim($_FILES['upload_file']['name']);
        $file_name = deldot($file_name);//删除文件名末尾的点
        $file_ext = strrchr($file_name, '.');
        $file_ext = strtolower($file_ext); //转换为小写
        $file_ext = trim($file_ext); //首尾去空
        
        if (!in_array($file_ext, $deny_ext)) {
            if (move_uploaded_file($_FILES['upload_file']['tmp_name'], $UPLOAD_ADDR . '/' . $_FILES['upload_file']['name'])) {
                $img_path = $UPLOAD_ADDR . '/' . $file_name;
                $is_upload = true;
            }
        } else {
            $msg = '此文件不允许上传';
        }
    } else {
        $msg = $UPLOAD_ADDR . '文件夹不存在,请手工创建!';
    }
}

看下这个题目,又将文件名末尾的点给删除了,在看看和上一个代码的差别,但是我们可以看到这个代码没有了::$DATA$file_ext = str_ireplace('::$DATA', '', $file_ext);//去除字串::$DATA也就是没了这一句,那我们把这个加到后面不就可以过滤了吗

图片

9.Pass-09

 $is_upload = false;
$msg = null;
if (isset($_POST['submit'])) {
    if (file_exists($UPLOAD_ADDR)) {
        $deny_ext = array(".php",".php5",".php4",".php3",".php2",".html",".htm",".phtml",".pHp",".pHp5",".pHp4",".pHp3",".pHp2",".Html",".Htm",".pHtml",".jsp",".jspa",".jspx",".jsw",".jsv",".jspf",".jtml",".jSp",".jSpx",".jSpa",".jSw",".jSv",".jSpf",".jHtml",".asp",".aspx",".asa",".asax",".ascx",".ashx",".asmx",".cer",".aSp",".aSpx",".aSa",".aSax",".aScx",".aShx",".aSmx",".cEr",".sWf",".swf",".htaccess");
        $file_name = trim($_FILES['upload_file']['name']);
        $file_name = deldot($file_name);//删除文件名末尾的点
        $file_ext = strrchr($file_name, '.');
        $file_ext = strtolower($file_ext); //转换为小写
        $file_ext = trim($file_ext); //首尾去空
        
        if (!in_array($file_ext, $deny_ext)) {
            if (move_uploaded_file($_FILES['upload_file']['tmp_name'], $UPLOAD_ADDR . '/' . $_FILES['upload_file']['name'])) {
                $img_path = $UPLOAD_ADDR . '/' . $file_name;
                $is_upload = true;
            }
        } else {
            $msg = '此文件不允许上传';
        }
    } else {
        $msg = $UPLOAD_ADDR . '文件夹不存在,请手工创建!';
    }
}

这次可狠了,前面所有可以利用的都给过滤了,分析下代码,先将首尾去空,又去除了::$DATA又转换为小写,再删去末尾的点。这样一来我们构造文件名,使其经过过滤后得到的还是php的文件名不就行了,所以就1.php. . 就可以绕过,也就是点+空格+点+空格绕过
在这里插入图片描述

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

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

相关文章

一年前端面试打怪升级之路

Promise是什么? Promise 是异步编程的一种解决方案:从语法上讲,promise是一个对象,从它可以获取异步操作的消息;从本意上讲,它是承诺,承诺它过一段时间会给你一个结果。promise有三种状态: pe…

基于android平台下的猎聘校园系统的设计与实现

目 录 摘 要 I Abstract II 第1章 绪论 1 1.1选题背景及意义 1 1.2研究现状 1 1.3 研究内容 3 第2章 系统开发环境及相关技术 4 2.1开发环境 4 2.2 Java SDK 4 2.3 Eclipse 5 2.4 ADT 6 2.5 Android SDK 6 3.6 Android开发平台搭建 10 第3章 系统分析 12 3.1 研究目标 12 3.2 需…

矿井水深度除总氮有什么好工艺?硝酸根离子交换柱

煤矿矿井水是指在采煤过程中,所有渗入井下采掘空间的水,矿井水的排放是煤炭工业具有行业特点的污染源之一,量大面广,我国煤炭开发每年矿井的涌水量为20多亿立方米,其特性取决于成煤的地质环境和煤系地层的矿物化学成分…

智慧城市可视化(一)

✍️ 作者简介: 前端博主;CSDN博客专家;51CTO特邀专家博主,全网粉丝2W左右 💂 作者主页: 【主页——🚀获取更多web可视化介绍】 🥇联系作者:【私信:技术交流 | 信息分享 | 商务合作…

新Token经济模型: 解决当下GameFi困境的「新范式」

介绍: 当你每天打开 StepN,奔跑在回本的道路上,却发现,原来路可以越跑越长,回本成了可望而不可即的幻想,你是否感到些许无奈? 当你充满激情,怀揣致富的梦想,去寻找下一…

【Lua基础 第3章】变量、赋值语句、索引、lua中的循环、循环控制语句

文章目录💨更多相关知识👇一、变量二、赋值语句🌟特点2演示🌟特点3.1演示🌟特点3.2演示三、索引四、lua的循环🔸while循环🌟代码演示🔸for循环🌟代码演示🔸re…

flink1.13(一)

1. 初识Flink 1.1 Flink是什么 Apache Flink 是一个框架和分布式处理引擎, 用于对无界和有界数据流进行状态计算. Flink框架处理流程如下图所示: Flink的应用场景: 1.2 为什么选择Flink 批处理和流处理流数据更真实地反应了我们的生活方式我们的目标 低延迟高吞吐结果的准…

【第九章】vim程序编辑器

文章目录vi与vimvi的使用范例按键说明一般指令模式可用的按钮说明:光标移动、复制贴上、搜寻取代等一般指令模式切换到编辑模式的可用的按钮说明一般指令模式切换到命令行界面的可用按钮说明vim的暂存盘、救援回复与打开时的警告讯息vim的额外功能区块选择&#xff…

AOP编程

什么是面向切面编程AOP? 在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。AOP是OOP的延续,是软件开发中的一个热点&#xff…

【个人硬件开源分享】基于ESP32的能量机关主控受控模块,伏虎单手摇杆重力感应加摇杆加LCD屏幕分为左手和右手,基于PD5048A的I2C总线扩展级联器

提示:文章看完后,记得点赞! 文章目录前言基于ESP32的能量机关主控受控模块伏虎单手摇杆I2C总线级联器MPU6050陀螺仪WS2812灯珠总结前言 这些是我业余时间做的一些电子小作品,包括基于ESP32的能量机关主控受控模块,伏虎…

在这个技术浮躁的时代也要注重架构的本质,多位大佬联袂推荐小团队构建大网站,让你少走弯路,甚至实现速成,成为优秀架构师!

作为一个技术人,架构师是每个人追寻的目标,也是个人价值和成就的一个重要标志。 那架构师是怎样炼成的呢?或者说,怎样才算是一个优秀的架构师呢? 我们需要几年甚至十几年的一线技术工作经验,我们需要正好遇…

isdigit isdecimal isnumeric 区别

一、代码测试 num "1" #unicode num.isdigit() # True num.isdecimal() # True num.isnumeric() # Truenum "1" # 全角 num.isdigit() # True num.isdecimal() # True num.isnumeric() # Truenum b"1" # byte num.isdigit() # True n…

还在手动电源模块测试吗?ATECLOUD智能云测试解放双手

江苏某生产电源的企业联系到纳米软件Namisoft,了解到他们目前依然使用的是全人工模式进行电源模块参数的测试,经常会因为手动记录数据而导致的一些数据出错,测试的效率也是非常低。通过网络了解到Namisoft的ATECLOUD智能云测试平台&#xff0…

Eruke是什么?怎么搭建?

Eruke是什么?怎么搭建?认识Eureka构成单机构建项目搭建注册中心生产者服务发现自我保护什么是自我保护?为什么会有自我保护?关闭结果演示停更认识Eureka 它是一个基于REST的服务,是实现服务发现与注册的组件。 构成 Eureka采用…

【愚公系列】2022年11月 uniapp专题-运行uniapp的多种方式

文章目录前言一、运行到web平台二、运行到安卓模拟器三、运行到微信开发者工具前言 uniapp本身就是一次开发多端部署,uniapp可以发布成各种应用包括以下几种 web版本 一、运行到web平台 点击工具栏的运行 -> 运行到浏览器 -> 选择浏览器,即可体…

BIOMOD2模型、MaxEnt模型物种分布模拟,生物多样性生境模拟,论文写作

目录 ①基于R语言BIOMOD2模型的物种分布模拟实践技术应用 ②基于R语言、MaxEnt模型融合技术的物种分布模拟、参数优化方法、结果分析制图与论文写作 ③基于MAXENT模型的生物多样性生境模拟与保护优先区甄选、自然保护区布局优化评估 ①基于R语言BIOMOD2模型的物种分布模拟实…

分享Markdown编写文档的技巧

Markdown 是一种轻量级标记语言,使用易读易写的纯文本格式编写文档,然后转换成有效的 XHTML(或者HTML)文档。Markdown有许多好用简单的用法,下面分享Markdown用来编写文档的技巧。 注:下面通过添加\反斜杠来…

Get To The Point: Summarization with Pointer-Generator Networks

论文题目:《Get To The Point: Summarization with Pointer-Generator Networks》 主要内容:seq2seq,文本摘要 《切中要害:指针生成器网络概述》 摘要 神经序列到序列模型为抽象文本摘要提供了一种可行的新方法(这意…

TCP链接异常: SYN_RECV

1. 异常数据包分析: 从数据包分析来看应该是网关这边出问题了,应该是网关的服务程序在1217上出问题了, (注意左右量变的数据包的一个syn的Seq都是1358143899) 从重发2开始网关这边就一直认为它没有收到client回复给它…

Okhttp连接泄漏警告问题分析

背景 某天在查询生产日志时,发现大量的Okhttp连接泄漏警告日志,但生产上没有收到任何异常反馈。出于好奇心,本地最小化复现问题,并最终解决问题。 分析问题 okhttp官网的demo示例 OkHttpClient client new OkHttpClient();Stri…