upload-labs·文件上传(靶场攻略)

本文围绕文件上传漏洞展开,介绍了其概念、危害、满足条件、检测流程等。通过搭建upload-labs靶场进行实战,详细阐述了多种绕过文件上传检测的方法,如禁用JS、修改Content-Type、利用黑名单和白名单规则等,最后还给出了文件上传漏洞的防御手段。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

1.文件上传漏洞

1.1.文件上传漏洞介绍

1.2.文件上传漏洞危害

1.3.文件上传漏洞满足条件

1.4.文件检测流程

1.5.文件上传思路

1.6.web界面存在的风险点

1.7.文件上传实战思路

2.靶场搭建

3.文件上传

3.1.upload-labs第一关

3.2.检测文件类型

3.2.1.基本概念

3.2.2.upload-labs第二关 

3.3.黑名单

3.3.1.特殊解析后缀

3.3.2.基本概念

3.3.3.upload-labs第三关

3.4..htaccess解析

3.4.1.基本概念

3.4.2.upload-labs第四关

3.5.大小写绕过

3.5.1.基本概念

3.5.2.upload-labs第五关

3.6.空格绕过

3.6.1.基本概念

3.6.2.upload-labs第六关

3.7.点绕过

3.7.1.基本概念

3.7.2.upload-labs第七关

3.8.::$$DATA绕过

3.8.1.基本概念

3.8.2.upload-labs第八关

3.9.upload-labs第九关

3.10.配合解析漏洞

3.10.1.基本概念

3.10.2.双后缀名绕过

3.10.3.基本概念

3.10.4.upload-labs第十关

3.11.白名单

3.11.1.%00截断

3.11.2.基本概念

3.11.3.upload-labs第十一关

3.12.upload-labs第十二关

3.13.二次渲染及文件头检测

3.13.1.基本概念

3.13.2.基本概念

3.13.3.upload-labs第十三关

3.14.突破gatimagesize

3.14.1.基本概念

3.14.2.upload-labs第十四关

3.15.upload-labs第十五关

3.15.1.突破exif_imagetype

3.15.2.基本概念

3.16.upload-labs第十六关

3.16.1.gif格式

3.16.2.png格式

3.16.3.jpg格式

3.17.条件竞争

3.17.1.基本概念

3.17.2.upload-labs第十七关

3.18.upload-labs第十八关

总结


1.文件上传漏洞

1.1.文件上传漏洞介绍

文件上传漏洞是指用户上传了一个可执行的脚本文件,并通过此脚本文件获得了执行服务器端命令的能力。“文件上传” 本身没有问题,有问题的是文件上传后,服务器怎么处理、解释文件。如果服务器的处理逻辑做的不够安全,则会导致严重的后果。这种攻击方式是最为直接和有效的,所以我们需要思考的是如何绕过检测和过滤。

1.2.文件上传漏洞危害

  1. 上传文件web脚本语言,服务器的web容器解释并执行了用户上传的脚本,导致代码执行。
  2. 上传文件病毒或者木马时,主要用于诱骗用户或者管理员下载执行或者直接 自劢运行;
  3. 上传文件是Flash的策略文件 crossdomain.xml,黑客用以控制Flash在该域 下的行为(其他通过类似方式控制策略文件的情况类似);
  4. 上传文件是病毒、木马文件,黑客用以诱骗用户或者管理员下载执行;
  5. 上传文件是钓鱼图片或为包含了脚本的图片,在某些版本的浏览器中会被作为脚本执行,被用于钓鱼和欺诈。 除此之外,还有一些不常见的利用方法,比如将上传文件作为一个入口,溢 出服务器的后台处理程序,如图片解析模块;或者上传一个合法的文本文件,其内容包含了PHP脚本,再通过"本地文件包含漏洞(Local File Include)"执行此脚本。

1.3.文件上传漏洞满足条件

上传的后门文件,需要能被脚本语言解析执行。

说明一:对方服务器运行的PHP环境,你不能上传一个JAVA的后门代码。
说明二:你上传文件的目录可以被脚本语言解析执行,如果你上传的目录没有执行权限也不行
说明三:一般文件上传后会返回你一个地址,如果无妨链接到也不能构成文件上传漏洞。
还有例外情况,非脚本文件也能被成功解析。比如:上传了一个图片🐎,如果对方中间件上存在一些漏洞的话,配合这些漏洞可以实现图片文件按照脚本文件解析。

1.4.文件检测流程

通常一个文件以HTTP协议进行上传时,将以POST请求发送至web服务器,web服务器接收到请求后并同意后,用户与web 服务器将建立连接,并传输data:

 而一般一个文件上传过程中的检测内容如下部分:

客户端 javascript 检测 (通常为检测文件扩展名)
服务端 MIME 类型检测 (检测 Content-Type 内容)
服务端目录路径检测 (检测跟 path 参数相关的内容)
服务端文件扩展名检测 (检测跟文件 extension 相关的内容)
服务端文件内容检测 (检测内容是否合法或含有恶意代码)

1.5.文件上传思路

扫描获取上传,会员中心头像上传,后台系统上传,其他途径上传。

1.6.web界面存在的风险点

上传头像、上传身份认证、上传文件以及有存在文件上传的地方就可能存在相关的漏洞,但不是有文件上传就一定有漏洞,但有文件上传就能进行测试。

1.7.文件上传实战思路

上传文件和文件执行是两个东西

漏洞分类:解析漏洞、cms漏洞、其他漏洞(编辑器漏洞、cve漏洞、安全修复)

思路:

如果有一个网站,要从文件上传的方向开始

第一步:先看中间件,看是否存在解析漏洞/CMS/编辑器漏洞/CVE/

如果有,如何找:

字典扫描:扫描会员中心,文件上传的位置

找到后,如何利用:

验证/绕过

2.靶场搭建

https://pan.baidu.com/s/1NeZ-kcZEix3UNpTHRJdczA?pwd=doba 

下载之后解压到小皮下www目录,之后开始

3.文件上传

3.1.upload-labs第一关

通过禁用界面JS处理,然后上传web.php文件,可绕过前端检测。关于如何禁用界面JS,

母马

禁用之后母马直接上传成功,这里显示为一张图片,复制图片地址,然后在蚁剑上进行连接,

 http://172.16.80.29/upload-labs/upload/web.php?0=assert&1=eval($_POST['123'])

3.2.检测文件类型

3.2.1.基本概念

服务端通过检查http中包含的Content-Type字段中的值来判断上传文件是否合法的。

利用Burp抓包,将报文中的Content-Type改成允许的类型

Content-Type: image/gif(gif图像)

Content-Type: image/jpg(jpg图像)

Content-Type: image/png(png图像)

3.2.2.upload-labs第二关 

当上传文件web.php,提示文件类型不正确,通过查看源码并没有找到限制文件的上传,由此可以猜测肯定是在后端做的限制,我们抓包一探究竟

通过抓包可以发现这里的文件类型为默认参数,而我们这种情况上传文件肯定是上传不上去的,

通过源码中第五段分析得出本关采用了content-type进行后端验证,那么通过使用BS抓包对其进行修改content-type,然后再进行上传。欧克​​​​​​

3.3.黑名单

黑名单就是服务端明确不让上传的格式后缀,例如:rar、php、zip等。

3.3.1.特殊解析后缀

3.3.2.基本概念

特殊解析后缀绕过是由于黑名单过滤规则不严谨,在某些特定的情况下的后缀也能够被当作php文件进行解析,例如PHP2、php3、php4、phtml、pht等情况。

可以使用phtml、php3、php4、php5,当然前提是apache服务器,同时在配置文件夹中需要有将AddType application/x-httpd-php .php .phtml .phps .php1 .php4 .pht 这样的一段话前面的注释删除,重启phpstudy让其生效。

3.3.3.upload-labs第三关

通过源码得知,禁止.asp、.aspx、.php、.jsp类型进行上传。

本关可以通过上传其他文件扩展名进行绕过,实现文件上传。

这里提示上传一张图片

那就上传一张"图",他说不能上传这几个类型,那我改个名不就好了,

很明显上传成功了,之后访问web.php5就欧克

3.4..htaccess解析

3.4.1.基本概念

.htaccess文件是Apache服务器中的一个配置文件,它负责相关目录下的网页配置.通过htaccess文件,可以实现:网页301重定向、自定义404页面、改变文件扩展名、允许/阻止特定的用户或者目录的访问、禁止目录列表、配置默认文档等功能。

这时候补充一个知识点:
.htaccess文件解析漏洞
.htaccess参数

常见配法有以下几种:

1.AddHandler php5-script .jpg
 
2.AddType application/x-httpd-php .jpg
 
3.Sethandler application/x-httpd-php

Sethandler 将该目录及子目录的所有文件均映射为php文件类型。
Addhandler 使用 php5-script 处理器来解析所匹配到的文件。
AddType 将特定扩展名文件映射为php文件类型。

简单来说就是,可以将我们所的文件都解析成php或者是特定的文件解析为php

3.4.2.upload-labs第四关

通过源码得知第三关使用的都被限制了,并且设定了更多的特殊解析后缀,所以使用特殊解析后缀已经无法绕过了,这里就可以使用到 .htaccess进行绕过测试。

前提条件:

Apache开启rewrite模块

.apache配置文件为AllowOverride All(默认为None)

.htaccess需要使用notepad++创建,不然创建不了,创建 .htaccess代码:


SetHandler application/x-httpd-php
​

这是将本目录及所有子目录的所有文件都解析为php文件

首先上传.htaccess,其次上传一张名叫x.png的文件,即可执行。

3.5.大小写绕过

3.5.1.基本概念

后缀大小写是通过服务端未将后缀进行统一的格式转换,导致可以上传PHP的文件,同时由于Windows系统对后缀大小写并不敏感,所以当在写PHP的改成Php就会被当作PHP进行解析。

3.5.2.upload-labs第五关

通过源码得知,并未对其大小进行限制,且是由于是黑名单,只限制了不可以上传的,那么的我们可以对php后缀进行大小写变形,例如:PHP、Php、pHp等。

3.6.空格绕过

3.6.1.基本概念

空格绕过其实就是利用了Windows对文件和文件名的限制,当将空格放在结尾的时候,就会触发操作系统的命名规范问题,所以在生成文件的时候,添加在结尾的空格就会被去除。

3.6.2.upload-labs第六关

通过源码发现并未对空格进行限制,那么我们可以在后缀添加一个空格进行绕过,但是在Windows系统中我们无法创建后缀带空格的文件,但是在数据包中不会对后缀的空格进行清楚啊,那么我们这里就需要使用到BS进行抓包,对其进行修改,然后再进行上传。

通过修改后上传到对方服务器的时候,服务器会自动对后面的空格清除,就实现了绕过。

 后边就是上传的文件,这里他将我们的文件进行了重命名。

3.7.点绕过

3.7.1.基本概念

其实点绕过和空格绕过是一样的,都是利用操作系统的特性来进行解析绕过。具体可以看空格绕过的解释。

3.7.2.upload-labs第七关

通过源码发现,本关并未对结尾点进行检测。那么这里就可以通过在后缀加上点进行绕过,这里我使用的是之前大小写的文件,并未修改名称,所以不要太在意,并不是说使用大小写可以绕过。

3.8.::$$DATA绕过

3.8.1.基本概念

在window的时候如果文件名+"::$DATA"会把::$DATA之后的数据当成文件流处理,不会检测后缀名,且保持::$DATA之前的文件名,他的目的就是不检查后缀名

3.8.2.upload-labs第八关

通过源码发现并未对::$DATA进行检测。可以在后面添加::$DATA进行绕过。

 

3.9.upload-labs第九关

通过源码发现本关之前所有的绕过思路都被过滤了,但是通过源码发现,所有的过滤都是一次的,并未对其进行循环过滤。也就是说源码中提到的删除空格,删除点都是只删除一次,那么可以在数据包中将php后缀添加. .,形成.php.  .,由于只验证一次,所以删除一个点和一个空格后就不在删除了。

        $deny_ext = array(".php",".php5",".php4",".php3",".php2",".html",".htm",".phtml",".pht",".pHp",".pHp5",".pHp4",".pHp3",".pHp2",".Html",".Htm",".pHtml",".jsp",".jspa",".jspx"
部署 Spring Boot 应用 1. 在服务器上安装 Java 运行环境 ``` sudo apt update sudo apt install default-jdk ``` 2. 将 Spring Boot 应用打包成 jar 包 使用 Maven 或 Gradle 将 Spring Boot 应用打包成 jar 包,可以在项目根目录执行以下命令: ``` mvn clean package ``` 或 ``` gradle clean build ``` 3. 将 jar 包上传到服务器 将打包好的 jar 包上传到服务器上,可以使用 scp 命令: ``` scp target/your-app.jar user@server:/path/to/your/app/ ``` 4. 启动应用 在服务器上执行以下命令启动应用: ``` java -jar /path/to/your/app/your-app.jar ``` 部署 Vue 应用 1. 在服务器上安装 Node.js 和 npm ``` sudo apt update sudo apt install nodejs npm ``` 2. 将 Vue 应用打包成静态文件 在 Vue 项目根目录下执行以下命令: ``` npm install npm run build ``` 3. 将打包好的静态文件上传到服务器 将打包好的静态文件上传到服务器上,可以使用 scp 命令: ``` scp -r dist/* user@server:/path/to/your/app/ ``` 4. 配置 Nginx 在服务器上安装 Nginx: ``` sudo apt install nginx ``` 在 `/etc/nginx/sites-available/` 目录下创建一个新的配置文件,例如 `your-app.conf`,并添加以下内容: ``` server { listen 80; server_name your-domain.com; root /path/to/your/app; index index.html; location / { try_files $uri $uri/ /index.html; } } ``` 将 `your-domain.com` 替换成你的域名,将 `/path/to/your/app` 替换成上传的静态文件所在的目录。 5. 启动 Nginx 在服务器上执行以下命令启动 Nginx: ``` sudo service nginx start ``` 现在你的 Spring Boot 和 Vue 应用都已经部署到了服务器上。你可以通过访问服务器的 IP 地址或域名来访问应用。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

duoba_an

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值