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

uploadlabs经验总结

目录

一、基础上传漏洞(太过简单目前环境不可能存在)

1、抓包然后改后缀进行绕过

2、抓包然后改上传文件类型进行绕过

3、改后缀大小写绕过,以及收尾加空格,加::$DATA,加点等等

4、黑名单不完整绕过,复习后缀绕过(通过.php5绕过等)

5、压缩包中通过将恶意文件放在子压缩包中绕过

二、中等风险(小型公司可能存在)

1、%00截断(%00只能用于php版本低于5.3的)

2.图片拼接php恶意代码

三、较高风险(现如今的环境部分存在)

1、二次渲染

2、条件竞争

4、数组绕过


一、基础上传漏洞(太过简单目前环境不可能存在)

1、抓包然后改后缀进行绕过

2、抓包然后改上传文件类型进行绕过

3、改后缀大小写绕过,以及收尾加空格,加::$DATA,加点等等

4、黑名单不完整绕过,复习后缀绕过(通过.php5绕过等)


5、压缩包中通过将恶意文件放在子压缩包中绕过

例如:

二、中等风险(小型公司可能存在)

1、%00截断(%00只能用于php版本低于5.3的)

2.图片拼接php恶意代码

可以直接用Notepad直接打开图片后面加一个php代码,但是需要16进制,要不然图片可能出错。

也可以cmd进行生成,命令语句:copy 14.jpg /b + 14.php /a webshell.jpg

三、较高风险(现如今的环境部分存在)

1、二次渲染

imagecreatefromjpeg()函数

二次渲染是由Gif文件或 URL 创建一个新图象。成功则返回一图像标识符/图像资源,失败则返回false,导致图片马的数据丢失,上传图片马失败。

进行通关

按照原来的方法进行上传,我们可以发现还是可以上传的,但是配合包含漏洞却无法解析,这时我们把上传的图片复制下来用Notepad打开,发现我们原来写的php代码没有了,这就是二次渲染把我们里面的php代码删掉了。

我们把原图和他修改过的图片进行比较,看看哪个部分没有被修改。将php代码放到没有被更改的部分,配合包含漏洞,就可以了。

2、条件竞争

对条件竞争的考察,我们看代码他是先将图片上传上去,才开始进行判断后缀名、二次渲染。如果我们在上传上去的一瞬间访问这个文件,那他就不能对这个文件删除、二次渲染。这就相当于我们打开了一个文件,然后再去删除这个文件,就会提示这个文件在另一程序中打开无法删除。

操作:直接上传一个php文件,然后进行抓包,将数据包发送至intruder下

然后发包,用另一个浏览器一直访问18.php地址,只要在上传的一瞬间,他还没来的及删除、修改就可以了(一直访问)。

4、数组绕过

源代码:

php

$is_upload = false;

$msg = null;

if(!empty($_FILES['upload_file'])){

    //检查MIME

    $allow_type = array('image/jpeg','image/png','image/gif');

    if(!in_array($_FILES['upload_file']['type'],$allow_type)){

        $msg = "禁止上传该类型文件!";

    }else{

        //检查文件名

        $file = empty($_POST['save_name']) ? $_FILES['upload_file']['name'] : $_POST['save_name'];

        if (!is_array($file)) {

            $file = explode('.', strtolower($file));

        }



        $ext = end($file);   //文件后缀

        $allow_suffix = array('jpg','png','gif');

        if (!in_array($ext, $allow_suffix)) {

            $msg = "禁止上传该后缀文件!";

        }else{

            $file_name = reset($file) . '.' . $file[count($file) - 1];

            $temp_file = $_FILES['upload_file']['tmp_name'];

            $img_path = UPLOAD_PATH . '/' .$file_name;

            if (move_uploaded_file($temp_file, $img_path)) {

                $msg = "文件上传成功!";

                $is_upload = true;

            } else {

                $msg = "文件上传失败!";

            }

        }

    }

}else{

    $msg = "请选择要上传的文件!";

}

如果save_name为空,则把`$_FILES['upload_file']['name']`赋值给$file,反之`$_POST['save_name']`赋值给$file

如果$file不是数组,则将其处理为数组,通过`.`符号将其分割 [ “muma.php”,””,”jpg”]

通过`end()`函数获得$file中的最后一个元素,赋值给$ext,并进行后缀校验。感觉这里应该有名堂

后缀符合,则拼接文件名为`首元素.尾元素` `reset()`获取数组首元素

$file_name = reset($file) . '.' . $file[count($file) - 1];

count[2]-1=1,因为[1]我们没有设置就直接为空,前面为返回的file为test.php再拼接一个小数点,又因为windows会省略小数点,即可上传成功


http://www.kler.cn/a/572381.html

相关文章:

  • Java+iTextPDF,实时生成与预览PDF文件的最佳实践!
  • Python数据可视化——Matplotlib的基本概念和使用
  • SQL AnyWhere 的备份与恢复
  • 【节日——日期问题(不完全适用我自己的模板)】
  • 嵌入式开发:傅里叶变换(5):基于STM32,实现CMSIS中的DSP库
  • 动态规划之 “完全背包“ ------P8646 [蓝桥杯 2017 省 AB] 包子凑数
  • CISC架构
  • Rust 并发编程:Futures、Tasks 和 Threads 的结合使用
  • Flutter_学习记录_本地存储数据
  • 玩转大语言模型——Ubuntu系统环境下使用llama.cpp进行CPU与GPU混合推理deepseek
  • 人工智能 大模型在物联网感知层上的应用
  • Go与PHP性能对比分析
  • Linux系列:如何调试 malloc 的底层源码
  • Excel基础(详细篇):总结易忽视的知识点,有用的细节操作
  • 【JSON与JSONP】JSON与JSONP全面解析:定义、区别与核心技术对比
  • 初识uniApp
  • 计算机网络-实验四子网划分
  • 【文献阅读】The Efficiency Spectrum of Large Language Models: An Algorithmic Survey
  • 高频 SQL 50 题(基础版)_1174. 即时食物配送 II
  • 使用GitLink个人建站服务部署Allure在线测试报告