CTF--WEB--文件上传

本文详细介绍了多种文件上传漏洞的利用方法,包括扩展名篡改、MIME类型检测绕过、.htaccess文件解析漏洞、00截断以及双写绕过等。通过实例展示了如何使用蚁剑连接并获取flag。同时,分析了服务器端的验证机制,如前端验证、黑名单过滤及文件头检查,并探讨了如何通过技巧绕过这些防护措施。
摘要由CSDN通过智能技术生成

无验证

直接上传一句话木马
在这里插入图片描述
使用蚁剑连接
得到flag
在这里插入图片描述

前端验证

上传一个一句话木马,扩展名改成允许上传的扩展名。
在这里插入图片描述
在把.jpg改成.php
在这里插入图片描述
在这里插入图片描述
上传的路径在这里
在这里插入图片描述
我们可以使用蚁剑来连接
在这里插入图片描述
连接成功,得到flag。

文件头检查

上传.php
在这里插入图片描述
把.php改成.jpg
在这里插入图片描述
于是我们可以上传一张内容为图片的.png
在这里插入图片描述
我们抓包来改内容,把除了文件头其他的图片内容全删了,然后添加一句话木马,然后改.png为.php
在这里插入图片描述
然后使用蚁剑来连接
在这里插入图片描述

MIME验证

MIME即文件类型检测
上传一个.php文件
在这里插入图片描述
吧.php改成.jpg,上传成功,然后使用一句话木马来连接。
得到flag
在这里插入图片描述
也可以上传.PHP文件然后修改content-cype
在这里插入图片描述
改成image/jpeg,然后发送,在使用蚁剑连接
在这里插入图片描述

CTFHub 文件上传 - htaccess

按f12
在这里插入图片描述
方法一:
发现使用的是黑名单判断,不能使用一些.php后缀的,但是我们可以大写绕过,我们可以把上传.PHP。
在这里插入图片描述
然后使用蚁剑连接。
在这里插入图片描述
但是返回数据一直为空。
写这道题目的时候一直想不明白为什么返回空,后来想有可能蚁剑连接里面不能出现大写字母,后来经过测试,发现果然如此。

方法二:
.1.知识点

(1)先简单介绍一下.htaccess文件:

.htaccess文件 (或者"分布式配置文件"),全称是Hypertext Access(超文本入口)。

它提供了针对目录改变配置的方法, 即,在一个特定的文档目录中放置一个包含一个或多个指令的文件, 以作用于此目录及其所有子目录。
  作为用户,所能使用的命令受到限制。
  管理员可以通过Apache的AllowOverride指令来设置。
  .htaccess文件是用于apache服务器下的控制文件访问的配置文件,因此Nginx下是不会生效的
  .htaccess可以帮我们实现:网页301重定向、自定义404错误页面、改变文件扩展名、允许/阻止特定的用户或者目录的访问、禁止目录列表、配置默认文档、文件的跳转等功能。

(2).htaccess 文件上传漏洞原理:

一般.htaccess可以用来留后门和针对黑名单绕过
  创建一个txt写入
   AddType application/x-httpd-php .png
  打开另存为
  保存类型为所有文件
  让 png 解析为 php
  还可以把png改成其他图片格式~例如jpeg、gif等等…

另外,还有一个知识~(此题没用到这部分知识)
  可以在.htaccess 加入php解析规则
  类似于把文件名包含1的解析成php

<FilesMatch “1”>
  SetHandler application/x-httpd-php
  

1.png 就会以php执行

我们先上传一个.htaccess文件
在这里插入图片描述
将.png文件当成.php文件来解析。
然后我们在上传一句话木马以.png为扩展名
在这里插入图片描述
然后可以使用蚁剑来连接
得到flag
在这里插入图片描述

00截断:

选择.php上传,文件类型不匹配。
在这里插入图片描述
把.php改成.jpg
在这里插入图片描述
上传成功。
根据题目提示,我们使用%00截断,使用上传一个a.php%00.jpg的文件。
上传成功
在这里插入图片描述

使用bp抓包
在这里插入图片描述
没有出现上传文件的路径地址。
url地址栏出现了?road=/var/www/htm/ 没有返回文件的路径地址,多半是有临时文件名的存在,这就需要00截断,00截断的主要目的就是为了得到上传文件的路径地址,从而可以用蚁剑连接。

<!--
if (!empty($_POST['submit'])) {
    $name = basename($_FILES['file']['name']);
    $info = pathinfo($name);
    $ext = $info['extension'];
    $whitelist = array("jpg", "png", "gif");
    if (in_array($ext, $whitelist)) {
        $des = $_GET['road'] . "/" . rand(10, 99) . date("YmdHis") . "." . $ext;
        if (move_uploaded_file($_FILES['file']['tmp_name'], $des)) {
            echo "<script>alert('上传成功')</script>";
        } else {
            echo "<script>alert('上传失败')</script>";
        }
    } else {
        echo "文件类型不匹配";
    }
}
-->
if (!empty($_POST['submit'])) {
    $name = basename($_FILES['file']['name']);
    $info = pathinfo($name);
    $ext = $info['extension'];                //首先取到上传文件的扩展名$ext
    $whitelist = array("jpg", "png", "gif");   //将扩展名与白名单进行匹配,为jpg、png或gif才能通过第一次过滤
    if (in_array($ext, $whitelist)) {
        $des = $_GET['road'] . "/" . rand(10, 99) . date("YmdHis") . "." . $ext;   //扩展名匹配之后,为上传的文件构造了一个新的存储路径$des
        if (move_uploaded_file($_FILES['file']['tmp_name'], $des)) {
            echo "<script>alert('上传成功')</script>";
        } else {
            echo "<script>alert('上传失败')</script>";
        }
    } else {
        echo "文件类型不匹配";
    }
}

move_uploaded_file( F I L E S [ ′ f i l e ′ ] [ ′ t m p n a m e ′ ] , _FILES['file']['tmp_name'], FILES[file][tmpname],des)这个函数就是把上传文件放到 d e s 的 路 径 上 并 且 改 了 文 件 名 , 而 des的路径上并且改了文件名,而 desdes中的随机数,当前时间等无法确定,那么,在$_GET[‘road’]后面进行00截断payload:POST /?road=/var/www/html/upload/a.php%00 HTTP/1.1重新上传,这样,上传文件就被保存到了upload/a.php下。
在这里插入图片描述
然后使用蚁剑连接。
在这里插入图片描述

CTFHub 文件上传——双写绕过:

上传a.php%00.jpg
在这里插入图片描述
在上传a.php.php%00.jpg
在这里插入图片描述
可以知道是自动把php给消去了,于是可以设置a.pphphp来绕过
上传a.pphphp
在这里插入图片描述
然后使用蚁剑连接
在这里插入图片描述
连接成功
抓包看响应,发现一段代码。

<!--
$name = basename($_FILES['file']['name']);
$blacklist = array("php", "php5", "php4", "php3", "phtml", "pht", "jsp", "jspa", "jspx", "jsw", "jsv", "jspf", "jtml", "asp", "aspx", "asa", "asax", "ascx", "ashx", "asmx", "cer", "swf", "htaccess", "ini");
$name = str_ireplace($blacklist, "", $name);
-->

这段代码果然是消去。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值