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

文件上传漏洞2-常规厂商检测限制绕过原理讲解

一.厂商检验限制方式:

我们先将DVWA的级别调为中级别。

进入文件上传功能点,点击查看源代码:

<?php

if( isset( $_POST[ 'Upload' ] ) ) {
// Where are we going to be writing to?
$target_path  = DVWA_WEB_PAGE_TO_ROOT . "hackable/uploads/";
$target_path .= basename( $_FILES[ 'uploaded' ][ 'name' ] );

// File information
$uploaded_name = $_FILES[ 'uploaded' ][ 'name' ];
$uploaded_type = $_FILES[ 'uploaded' ][ 'type' ];
$uploaded_size = $_FILES[ 'uploaded' ][ 'size' ];

// Is it an image?
if( ( $uploaded_type == "image/jpeg" || $uploaded_type == "image/png" ) &&
( $uploaded_size < 100000 ) ) {

// Can we move the file to the upload folder?
if( !move_uploaded_file( $_FILES[ 'uploaded' ][ 'tmp_name' ], $target_path ) ) {
// No
echo '<pre>Your image was not uploaded.</pre>';
}
else {
// Yes!
echo "<pre>{$target_path} succesfully uploaded!</pre>";
}
}
else {
// Invalid file
echo '<pre>Your image was not uploaded. We can only accept JPEG or PNG images.</pre>';
}
}

?>

相较于低级别的文件上传它多了一下代码进行校验机制:

$uploaded_name = $_FILES[ 'uploaded' ][ 'name' ];      /*获取文件名字
$uploaded_type = $_FILES[ 'uploaded' ][ 'type' ];          /*获取文件类型
$uploaded_size = $_FILES[ 'uploaded' ][ 'size' ];           /*获取文件大小

// Is it an image?                  /*判断获取的文件类型是否属于image/jpeg文件
if( ( $uploaded_type == "image/jpeg" || $uploaded_type == "image/png" ) &&
( $uploaded_size < 100000 ) ) {

如果我们依然传上去一个php文件它就会检测到并不属于image/jpeg文件。

这就是常规所增加的校验机制。

二.绕过原理分析:

         厂商获取文件类型,并且直接对获取的文件类型进行校验,那我们需要研究他是从哪里获取

的文件类型,我们利用bp抓包进行研究。

        我们依旧上传fjw.php查看数据包。

可以看到上传失败,说明校验机制起了作用。

在数据包中我们发现是Content-Type传递的文件类型。

       那我们或许也可以通过修改数据包Content-Type为image/jpeg发送给目标服务器让其检验通过

或许可以进行绕过机制。下面进行尝试:

第一步.依旧上传文件:

第二布.抓取数据包并修改类型。

我们自主将Content-Type:改为image/jpeg进行放行。

可以看到我们上传成功,成功的绕过了检测机制。

逆向思维拓展:

       我们既然可以改变Content-Type类型,去绕过检验如果厂商直接检验文件后缀类型怎么办:

第一步:我们可以先修改fjw.php为fjw.jpg

然后我们依旧上传抓包:

我们查看数据包

可以看到他自动的将Content-Type识别为image/jpeg,那么我们的jpg文件上传上去可以用吗?

答案是当然不可以的。

第二布:我们将filename="fjw.jpg"改为:fjw.php,放包。

可以看到成功的上传文件。

以上就是中级别常规的文件上传绕过机制。

http://www.dtcms.com/a/276124.html

相关文章:

  • 强化学习、PPO和GRPO的通俗讲解
  • C语言第一章数据类型和变量(下)
  • Java 大视界:基于 Java 的大数据可视化在智慧城市能源消耗动态监测与优化决策中的应用(2025 实战全景)
  • 视频分析应用的搭建
  • 【Linux-云原生-笔记】Apache相关
  • NE综合实验2:RIP与OSPF动态路由优化配置、FTP/TELNET服务部署及精细化访问控制
  • Java反射与注解
  • 树形动态规划详解
  • 大数据时代UI前端的智能化服务升级:基于用户情境的主动服务设计
  • 【PycharmPyqt designer桌面程序设计】
  • 【学习新知识】用 Clang 提取函数体 + 构建代码知识库 + AI 问答系统
  • GD32 CAN1和TIMER0同时开启问题
  • 《通信原理》学习笔记——第一章
  • 细谈kotlin中缀表达式
  • H2在springboot的单元测试中的应用
  • skywalking镜像应用springboot的例子
  • try-catch-finally可能输出的答案?
  • Docker-镜像构建原因
  • C语言基础教程--从入门到精通
  • Spring Boot整合MyBatis+MySQL+Redis单表CRUD教程
  • STM32中的RTC(实时时钟)详解
  • R 语言绘制 10 种精美火山图:转录组差异基因可视化
  • JavaScript 常见10种设计模式
  • 码头智能哨兵:AI入侵检测系统如何终结废钢盗窃困局
  • Redis专题总结
  • MyBatis实现一对多,多对一,多对多查询
  • Golang操作MySQL json字段优雅写法
  • CPU缓存一致性协议:深入解析MESI协议与多核并发设计
  • HTML/JOSN复习总结
  • 7. JVM类加载器与双亲委派模型