文章详情

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

请输入下面的图形验证码

提交验证

短信预约提醒成功

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

2023-08-31 14:04

关注

目录

一、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

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯