我的编程空间,编程开发者的网络收藏夹
学习永远不晚

文件上传漏洞基础/content-type绕过/黑名单绕过/

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

文件上传漏洞基础/content-type绕过/黑名单绕过/

目录

一、content-type绕过

contenent-type

源代码分析

绕过方式

尝试绕过

二、黑名单绕过

黑名单

代码分析

绕过方法

尝试绕过


一、content-type绕过

contenent-type

有些上传模块,会对http的类型头进行检测,如果是图片类型,允许上传文件到服务器,否则返回上传失败。因为服务器是通过ent-type判断类型,content-type在客户端可被修改,则此文件上传也有被绕过的风险!

源代码分析

upload-labs 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')) {            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.'文件夹不存在,请手工创建!';    }}

关键代码

if (($_FILES['upload_file']['type'] == 'image/jpeg') || ($_FILES['upload_file']['type'] == 'image/png') || ($_FILES['upload_file']['type'] == 'image/gif'))

在后端检测了上传文件的content-type是不是图片格式,也就是说,我们前面用的删掉前端函数,直接上传方式是用不了的,我们需要发送数据包中的content-type为image/png

绕过方式

①修改脚本后缀,上传,抓包中修改后缀(因为上传的就是图片,所以content-type就是image/png)

②直接上传脚本,抓包中直接修改conent-type

尝试绕过

还是先清空前面上传的文件

尝试上传test.php

①修改后缀上传

可以看到content-type就是image/png,这时候我们直接修改后缀即可

上传成功

②直接上传脚本修改content-type

 修改content-type 为 image/png

 上传成功

二、黑名单绕过

黑名单

上传模块,有时候会加入黑名单限制,在上传文件的时候获取后缀名,再把后缀名与程序中黑名单进行检测,如果后缀名在黑名单的列表内,将禁止文件上传

代码分析

upload-labs pass03

$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']);        $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 = '不允许上传.asp,.aspx,.php,.jsp后缀文件!';        }    } else {        $msg = $UPLOAD_ADDR . '文件夹不存在,请手工创建!';    }}

分析一下代码,其中$deny_ext是一个数组,里面存放着需要被检测的后缀名,即黑名单

$file_ext进行处理提取后缀名并转为小写

 in_array($file_ext, $deny_ext)

判断$file_ext是否在$deny_ext中,即后缀名是否在黑名单中

后缀名不在黑名单中时,才进行上传操作

绕过方法

尝试其他的后缀名,如该题屏蔽了asp、aspx、php、jsp,我们可以使用如asa、cer、ashx、phtml文件,但要确保服务器可以执行该类型文件

这里屏蔽的asp 那asa cer cdx 大概率是可以使用的,如果网站允许.net执行ashx可以代替aspx

在不同的中间件中有特殊的情况,有点apache版本会默认开启AddType application/x-httpd-php .php .php3 .phtml,将后缀名为phtml、php3的文件解析成php文件

尝试绕过

我们尝试将脚本文件改为phtml后缀上传

上传成功访问一下

 这啥都没有啊 

查看一下配置文件

 

 可以看到这里没有默认开启,而是被注释掉了,导致我们上传的文件无法被执行

我查阅了一下其他大佬的通关秘籍,发现这里都是直接把这个注释打开,那咱也打开

重启phpstudy再次访问

可以看到成功访问到了!

来源地址:https://blog.csdn.net/qq_40345591/article/details/127449928

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

文件上传漏洞基础/content-type绕过/黑名单绕过/

下载Word文档到电脑,方便收藏和打印~

下载Word文档

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录