文件上传-绕过文件类型

这篇具有很好参考价值的文章主要介绍了文件上传-绕过文件类型。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

        小伙伴们大家好!本期为大家带来的文件上传漏洞之绕过文件类型。

目录

原理

Content-Type

PHP代码如何获取上传文件的类型

实战演示

1、测试网站的功能是否正常

2、尝试上传webshell

3、使用连接工具连接webshell 

总结


原理

        当我们上传文件的时候,不仅前端要检验我们文件的后缀名,后端也会检测我们的文件类型。通常后端会获取到我们上传文件的type属性即我们用burpsuite抓包时经常看到的content-type,它的值与后端获取到的文件type属性是一样的。既然我们可以抓到包,我们就可以修改包,我们通过抓包将数据包中的content-type改成后端代码可以接受的即可,这样就顺利绕过了后端文件类型的检验。

Content-Type

一般是指网页中存在的 Content-Type,用于定义网络文件的类型和网页的编码,决定浏览器将以什么形式、什么编码读取这个文件。

例如我们上传php文件抓取数据包Content-Type的值为application/octet-stream,而上传png图片抓取数据包Content-Type的值为image/png。

PHP代码如何获取上传文件的类型

前端form表单提交文件数据的时候,后端PHP代码使用$_FILES['file']['type'](这里的中括号里的“file”是form表单提交文件的name值)来获取上传文件的类型。

例如有以下php代码:

<?php
header('Content-type:text/html;charset=utf-8');
echo "<form action='test.php' method='post' enctype=\"multipart/form-data\">";
echo "<label>请上传文件:</label>";
echo "<input type='file' name='file'/><br/>";
echo "<input type='submit' value='上传'>";
echo "</form>";

if (isset($_FILES['file'])) {
    echo $_FILES['file']['type'];
}

文件上传-绕过文件类型

文件上传-绕过文件类型

可以看出来显示了文件的类型。如果上传的是png图片的话则是image/png。

文件上传-绕过文件类型

文件上传-绕过文件类型

实战演示

我这里呢是自己写的php+html代码,使用phpstudy集成环境搭建的站点,如果小伙伴们也想搭建的话可以看我之前的一篇讲解MySQL基础+PHP操作MySQL的文章——这里有讲解搭建phpstudy的详细内容。

源码:

2.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>文件后缀绕过</title>
</head>
<body>
<script type="text/javascript">
    function selectFile(file) {
        var filename = file.value;
        var mime = filename.toLowerCase().substr(filename.lastIndexOf("."));
        if (mime != ".png") {
            alert("请选择png格式的照片上传");
            file.outerHTML = file.outerHTML
        }
    }
</script>
<center>
    <form action="file02.php" method="post" enctype="multipart/form-data">
        <label for="file">请上传png格式图片:</label>
        <input type="file" name="file" id="file" onchange="selectFile(this)"/><br/>
        <input type="submit" name="submit" value="上传" />
    </form>
</center>
</body>
</html>

file02.php

<?php
header('Content-type:text/html;charset=utf-8');
if ($_FILES["file"]["error"] > 0) {
    echo "Return Code:".$_FILES["file"]["error"]."<br/>";
} else {
    if ($_FILES['file']['type'] != "image/png"){
        echo "<center><br/>";
        exit("请上传png格式的文件");
        echo "</center>";
    }
    echo "<center><br/>";
    echo "upload: ".$_FILES["file"]["name"]."<br/>";
    echo "type: ".$_FILES["file"]["type"]."<br/>";
    echo "size: ".($_FILES["file"]["size"] / 1024)."KB<br/>";
    echo "Temp file: ".$_FILES["file"]["tmp_name"]."<br/>";
    if (file_exists("upload/".$_FILES["file"]["name"])) {
        echo $_FILES["file"]["name"]." already exists. ";
    } else {
        move_uploaded_file($_FILES["file"]["tmp_name"],"upload/".$_FILES["file"]["name"]);
        echo "Stored in: "."upload/".$_FILES["file"]["name"];
    }
    echo "</center>";
}

1、测试网站的功能是否正常

首先我们还是测试站点是否真正的能够实现文件上传功能,我们先来上传一个png图片试一下。

文件上传-绕过文件类型

文件上传-绕过文件类型

文件上传成功,我们访问以下看是否能够显示出图片。

文件上传-绕过文件类型

文件上传成功并被存储,站点功能正常。

2、尝试上传webshell

这里我们尝试上传一个名为2.php的一句话木马webshell。

文件上传-绕过文件类型

文件上传-绕过文件类型

文件上传-绕过文件类型

点击确定之后发现有前端验证,我们直接鼠标右键点击检查,找到前端验证的代码,并将其删除掉。

文件上传-绕过文件类型

接下来再尝试上传2.php

文件上传-绕过文件类型

开始上传。

文件上传-绕过文件类型

上传之后发现返回了一句请上传png格式的文件。

代表后端可能验证了文件的类型。

我们抓包修改一下content-type再试一下。

文件上传-绕过文件类型

文件上传-绕过文件类型

 修改完Content-Type之后点击forward。返回浏览器看页面的响应情况。

文件上传-绕过文件类型

这样我们就成功的将我们的webshell成功的上传到了站点。

3、使用连接工具连接webshell 

成功上传webshell之后,接下来我们就要使用webshell连接工具来连接我们的webshell后门。我这里使用的是中国蚁剑,大家使用其他的连接工具菜刀哥斯拉都一样的。

文件上传-绕过文件类型

连接成功直接添加数据即可。

文件上传-绕过文件类型

这样我们就成功的拿下了这个站点。 

总结

后端文件类型的检验主要就是后端代码获取文件的type属性,而数据包中的Content-Type值又是与之对应,所以我们只需抓取数据包,将数据包中的Content-Type值修改为后端可接收的类型接口绕过。文章来源地址https://www.toymoban.com/news/detail-512304.html

到了这里,关于文件上传-绕过文件类型的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 文件上传常用绕过方式

    JavaScript 验证就是所谓的客户端验证,也是最脆弱的一种验证。直接修改数据包或禁用 JavaScript.enable 即可绕过。 例如upload的第一题,在我们点击发送时,还没经过代理就直接弹窗报错,就考虑存在前端验证 我们只需要将前端验证的布尔值改为false,重新加载后就能绕过前端验

    2024年02月13日
    浏览(28)
  • 【文件上传漏洞绕过方式】

    目录 前言 正文 总结   目前,文件上传往往在业务中不可避免,也是极其容易出现上传漏洞。根据owasptop10中的排名,文件上传漏洞(属于攻击检测和防范不足)高居其中。今天和大家分享常见的文件上传的绕过方式。  绕过方式一:前端绕过  首先,根据前端页面队上传文

    2023年04月08日
    浏览(50)
  • 【网络安全】文件上传绕过思路

    分享一些文件上传绕过的思路,下文内容多包含实战图片,所以打码会非常严重,可多看文字表达;本文仅用于交流学习, 由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,文章作者不为此承担任何责任。 一次项目渗透时,

    2023年04月21日
    浏览(37)
  • 文件上传验证常见的绕过方式!

    目前,文件上传在公司项目中是非常常见的一项业务,但极其容易出现上传漏洞。根据owasptop10中的排名,文件上传漏洞(属于攻击检测和防范不足)高居其中。今天给大家总结一下文件上传验证的绕过方式,以下是详细的内容: 1、JavaScript验证绕过 JavaScript验证就是所谓的客户

    2024年02月14日
    浏览(34)
  • 文件上传漏洞基础/content-type绕过/黑名单绕过/

    目录 一、content-type绕过 contenent-type 源代码分析 绕过方式 尝试绕过 二、黑名单绕过 黑名单 代码分析 绕过方法 尝试绕过 contenent-type 有些上传模块,会对http的类型头进行检测,如果是图片类型,允许上传文件到服务器,否则返回上传失败。因为服务器是通过ent-type判断类型,

    2024年02月07日
    浏览(47)
  • 网安入门13-文件上传(htaccess,其他绕过)

    Pass-07 直接上传肯定是失败的 把文件名1.php改成1.php.或1.php_(下划线为空格),这种命名方式在windows系统里是不被允许的,所以需要在burp之类里进行修改,然后绕过验证后,会被windows系统自动去掉后面的点和空格,但要注意Unix/Linux系统没有这个特性。 在php后加一个空格 Pass-

    2024年01月22日
    浏览(39)
  • 【文件上传漏洞-02】前端限制与绕过靶场实战

    有些web应用文件上传功能,仅在前端用JS脚本做了检测,如检测文件后缀名等。 JS 检测绕过上传漏洞常见于用户选择文件上传的场景,如果上传文件的后缀不被允许,则会弹框告知,此时上传文件的数据包并没有发送到服务端,只是在客户端浏览器使用JavaScript对数据包进行检

    2024年02月15日
    浏览(45)
  • 文件上传进阶绕过(二)4个技巧和靶场实战

    ★★ 免责声明★★ 文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与学习之用,读者将信息做其他用途,由Ta承担全部法律及连带责任,文章作者不承担任何法律及连带责任。 0、环境准备 请移步《文件上传靶场实战:upload-labs第1-3关》 1、.号绕过原理 Windows系统下,

    2024年01月16日
    浏览(43)
  • 24 WEB漏洞-文件上传之WAF绕过及安全修复

    safedog BT(宝塔) XXX云盾 宝塔过滤的比安全狗厉害一些,在真实情况下现在很多网站都是用宝塔 Content-Disposition: 表单数据,一般可更改 name:表单参数值,不能更改,改完之后,数据包是有问题的,跟前端的表单值会对不上,这样后端会无法判断你上传的地方,如果要更改,那

    2024年02月10日
    浏览(49)
  • web安全第六天:绕过白名单监测实现文件上传

    3.1黑名单概念(随机构造一个后缀名,能上传即为黑名单) 一般情况下,代码文件里会有一个数组或者列表,该数组或者列表里会包含一些非法的字符或者字符串,当数据包中含有符合该列表的字符串时,即认定该数据包是非法的。 3.2如何确认黑白名单 因为黑名单是不允许

    2024年02月11日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包