文件上传漏洞(upload-labs)

目录

一、文件上传漏洞

1.什么是文件上传漏洞

常见的WebShell

2.文件上传产生漏洞的原因

二、文件上传绕过

(一)客服端绕过-JS验证

1.前端验证

upload-labs第一关

(二)绕过黑名单验证 

黑名单验证

1.特殊解析后缀

upload-labs第三关

2.  .htaccess解析

upload-labs第四关

3.大小写绕过

upload-labs第六关

4.空格绕过

upload-labs第七关

5.  .号绕过

upload-labs第八关

6.特殊符号

upload-labs第九关

7.双写后缀绕过

upload-labs第十关

8.路径拼接绕过

upload-labs第十关

(三)绕过白名单验证  

白名单绕过

1.MIME绕过

upload-labs第二关

2.%00截断绕过

(1)GET型00截断

(2)POST型00截断

upload-labs第十二关

​编辑 (四)其他

1.图片马(图片Webshell上传)

图片Webshell制作

​编辑upload-labs第十四关

2. 文件头图片格式绕过

 3.文件头GIF89a绕过

4.二次渲染

5.条件竞争


学习参考:

文件上传漏洞详解_常见上传漏洞-CSDN博客

文件上传漏洞详解-CSDN博客

WEB入门——文件上传漏洞_htaccess文件上传漏洞-CSDN博客

工具准备:中国蚁剑、搭建upload-labs环境 

upload-labs 靶机下载地址:https://github.com/c0ny1/upload-labs 

一、文件上传漏洞

1.什么是文件上传漏洞

文件上传漏洞是web系统中常见的一种功能,通过文件上传能实现上传图片、视频,以及其他类型的文件。如果恶意用户上传了可执行的文件或者脚本,就可以利用上传的恶意文件控制整个网站,这个恶意文件被称为 WebShell ,也可称为一种网页后门

常见的WebShell

  • 拥有较完整功能的webshell,一般称为大马。
  • 功能简易的webshell称为小马。
  • 此外,一句话木马、菜刀马、脱库马等等,是对于webShell功能或者特性的简称。
<?php @eval($_POST['pass']);?>       //php的一句话木马

<%eval request ("pass")%>            //asp的一句话木马

<%@ Page Language="Jscript"%>        //aspx的一句话木马

<%eval(Request.Item["pass"],"unsafe");%>

2.文件上传产生漏洞的原因

  1. 服务器配置不当
  2. 文件上传限制被绕过
  3. 开源编辑器的上传漏洞
  4. 文件解析漏洞导致文件执行
  5. 过滤不严或被绕过

二、文件上传绕过

文件上传成功绕过后,使用蚁剑创建连接,就可以直接访问服务器。

(一)客服端绕过-JS验证

1.前端验证

JS防护:将上传的文件进行一个格式的验证。

但JS类的防护是用户可以控制的,所以前端的所有验证都是不安全的。

upload-labs第一关

上传一个php的一句话木马,弹窗 只能上传.jpg|.png|.gif类型的文件

查看源代码,发现只是在客户端用JS做了过滤限制

 上传.jpg文件,使用bp抓包,修改后缀为.php,直接绕过就能上传成功

(二)绕过黑名单验证 

黑名单验证

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

1.特殊解析后缀

特殊解析后缀绕过:

由于黑名单过滤规则不严谨,在某些特定的情况下的后缀也能够被当作php文件进行解析。

例如:PHP2、php3、php4、phtml、pht等情况。

upload-labs第三关

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


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

此处上传了一个.pht文件当作php文件进行解析。

2.  .htaccess解析

黑客可以将PHP代码保存在.inc或.txt文件中,然后使用.htaccess将这些文件的MIME类型设置为application/x-httpd-php,将它们伪装成有效的PHP文件。

htaccess文件:Apache服务器中的一个配置文件,它负责相关目录下的网页配置。

通过.htaccess文件,可以实现:网页301重定向、自定义404错误页面、改变文件扩展名、允许/阻止特定的用户或者目录的访问、禁止目录列表、配置默认文档等功能。

upload-labs第四关

.htaccess文件中的内容为:

SetHandler application/x-httpd-php .txt

//将所有的.txt文件解析为php。

//设置当前目录所有文件都使用PHP解析,那么无论上传任何文件,只要文件内容符合PHP语言代码规范,就会被当作PHP执行。不符合则报错。

 先上传.htaccess文件

再上传一个.txt一句话木马文件,即可执行

3.大小写绕过

原理:

Windows系统下,对于文件名中的大小写不敏感。      //test.php和TeSt.PHP是一样的。

Linux系统下,对于文件名中的大小写敏感。                //test.php和 TesT.php是不一样的。

upload-labs第六关

查看源代码,可以用大小写绕过

bp抓包后,修改后缀名为.PhP上传文件。

4.空格绕过

原理:

Windows系统下,对于文件名中空格会被作为空处理,程序中的检测代码却不能自动删除空格。从而绕过黑名单。

upload-labs第七关

查看源代码,可以用空格绕过。

使用bp抓包,在文件名后加空格

5.  .号绕过

原理:

Windows系统下,文件后缀名最后一个点会被自动去除。

upload-labs第八关

查看源代码,可以用.号绕过

使用bp抓包,在文件名后加.号

6.特殊符号

原理:

Windows系统下,如果上传的文件名中1.php::$DATA会在服务器上生成一个1.php的文件,其中内容和所上传文件内容相同,并被解析。

upload-labs第九关

查看源代码,可以用特殊符号绕过

 使用bp抓包,在文件名后加::$DATA

7.双写后缀绕过

原理:

服务端可能存在将后缀替换为空的情况,但是在编辑过滤的时候可能只过滤了一次,就可以通过双写后缀绕过。

upload-labs第十关

查看源代码,发现 若上传的文件后缀在禁止的列中,那么就将后缀替换为空,而这里只过滤(从左到右)一次,那么就可以通过双写进行绕过

使用bp抓包,用pphpph双写绕过

8.路径拼接绕过

原理:

在没有对上传的文件进行重命名的情况下,用户可以自定义文件名并在服务器中上传新建,就会造成对应的绕过黑名单。

upload-labs第十关

查看源代码,没有对上传的文件进行重命名。

 使用bp抓包,在文件名后面加. .(点空格点)绕过

程序先删除了一个点,再删除一个空格。经过处理后 文件名变成了.php.即可绕过

(三)绕过白名单验证  

白名单绕过

白名单:服务端明确可以上传的格式后缀,例如:jpg、png、jpeg等。

1.MIME绕过

上传对文件的MIME-Type类型做了限制,可通过 burpsuit 将其他类文件类型修改为如:Content-Type:image/gif 和 image/jpeg 等允许上传的文件类型。

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

Content-Type: image/gif(gif图像)
Content-Type: image/jpeg(jpg图像)
Content-Type: image/png(png图像)
//常用的文件上传类型的 MIME 表:

text/plain(纯文本) 
text/html(HTML 文档) 
text/javascript(js 代码)  
application/xhtml+xml(XHTML 文档) 
image/gif(GIF 图像) 
image/jpeg(JPEG 图像)  
image/png(PNG 图像) 
video/mpeg(MPEG 劢画) 
video/x-msvideo (AVI文件)
audio/basic (au声音文件)
audio/midi,audio/x-midi (midi音乐文件)
audio/x-pn-realaudio (realaudio音乐文件)
application/octet-stream(二进制数据)  
application/pdf(PDF 文档) 
application/(编程语言) 该种语言的代码  
application/msword(Microsoft Word 文件) 
message/rfc822(RFC 822 形式)  
multipart/alternative(HTML 邮件的 HTML 形式和纯文本形式,相同内容使 用不同形式表示)  
application/x-www-form-urlencoded(POST 方法提交的表单)
multipart/form-data(POST  提交时伴随文件上传的表单)
upload-labs第二关

查看源代码,使用$_FILE[‘upload_file’][‘type’]获取上传文件的MIME-Type类型——为jpg、png、gif图像。

使用bp抓包,改上传文件的MIME-Type类型为其中之一即可绕过

2.%00截断绕过

%00只能用于php版本低于5.3的,在PHP5.3之后的版本中完全修复了00截断。

原理:

0x00是十六进制表示方法,是ascii码为0的字符,在有些函数处理时,会把这个字符当做结束符

系统在对文件名的读取时,如果遇到0x00,就会认为读取已结束。

(1)GET型00截断

GET型提交的内容会被自动进行URL解码。

上传jpg文件,用bp抓包,在抓包头加1.php%00

save_path.../upload/1.php%00
(2)POST型00截断

在POST请求中,%00不会被自动解码,需要在16进制中进行修改00.

upload-labs第十二关

//只允许上传.jpg|.png|.gif类型文件

在抓包头加1.php%00

在Hex中 将3030改为0000(此处传不上去,应该是PHP版本高于5.3

 (四)其他

1.图片马(图片Webshell上传)

服务器在后台使用函数来判断上传的文件内容是否为图片。

如果是WebShell文件仅仅是修改了后缀,可能会被pass掉。故上传的内容必须得有真实的图片内容。

图片Webshell制作

最直接方法:图片用notepad++打开,在尾行添加一句话木马

upload-labs第十四关

查看源代码,定义了一个函数getReailFileType用来检测文件类型。只能上传jpg\png\gif类型文件

 此时 上传只修改后缀的木马文件就不行

 上传真正的图片马即可

2. 文件头图片格式绕过

也可以说是一种图片马

图片的格式在防护中通常不使用后缀为判断依据,有时后缀为图片格式 但文件头是不对的。

//文件头是文件开头的一段二进制码(所有的文件都是以二进制的形式进行存储的)
JPEG (jpg)  文件头:FF D8 FF E1
PNG (png)   文件头:89 50 4E 47
GIF (gif)   文件头:47 49 46 38

一句话木马文件用WinHex十六进制编辑器打开,修改需要的文件头

此处改为jpg格式

 upload-labs第十四关

此时该木马文件可上传成功

 3.文件头GIF89a绕过

“GIF89a”经常作为“Graphics Interchange Format number 89A”的缩写来使用,中文表示:“图形交换格式编号89A”

原理:

在文件内容的起始位置加上一个GIF89a,文件就会被认为是一个图片。

php的getimagesize()函数、getReailFileType()函数也检测不出来这个“虚假”的图片是无效的。

 upload-labs第十四关

上传只修改后缀的木马文件,bp抓包后在木马开头添加GIF89a,即可上传成功

4.二次渲染

二次渲染就是原来上传的图片马,再上传到本地时候,中间会对图片进行渲染。

即原来插入的一句话木马会被改变,但是二次渲染对图片的内容有一部分是不改变的,所以只需要找到没有改变的那部分,然后插一入句话木马,即可。

5.条件竞争

网站逻辑:
1、网站允许上传任意文件,然后检查上传文件是否包含Webshell,如果包含删除该文件。
2、网站允许上传任意文件,但如果不是指定类型,那么使用unlink删除文件。
      在删除之前访问上传的php文件,从而执行上传文件中的php代码。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/576312.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Pandas 2.2 中文官方教程和指南(十一·一)

原文&#xff1a;pandas.pydata.org/docs/ PyArrow 功能 原文&#xff1a;pandas.pydata.org/docs/user_guide/pyarrow.html pandas 可以利用PyArrow来扩展功能并改善各种 API 的性能。这包括&#xff1a; 与 NumPy 相比&#xff0c;拥有更广泛的数据类型 对所有数据类型支持缺…

C# 结合JavaScript实现手写板签名并上传到服务器

应用场景 我们最近开发了一款笔迹测试功能的程序&#xff08;测试版&#xff09;&#xff0c;用户在手写板上手写签名&#xff0c;提交后即可测试出被测试者的心理素质评价分析。类似功能的场景还比如&#xff0c;在银行柜台办理业务&#xff0c;期间可能需要您使用手写设备进…

linux 编译binutil 遇到问题

在centos6.10上编译binutil2.27时遇到问题&#xff1a; as.c&#x1f4af;31: error: ‘DEFAULT_GENERATE_ELF_STT_COMMON’ undeclared here (not in a function) 搜到解决方法是这个&#xff1a; 1、https://github.com/riscv-software-src/riscv-tools/issues/66 &#xf…

十七、Java网络编程(一)

1、Java网络编程的基本概念 1)网络编程的概念 Java作为一种与平台无关的语言,从一出现就与网络有关及其密切的关系,因为Java写的程序可以在网络上直接运行,使用Java,只需编写简单的代码就能实现强大的网络功能。下面将介绍几个与Java网络编程有关的概念。 2)TCP/IP协议概…

内置对象部分

一&#xff0c;内置对象 二&#xff0c;math对象 不是构造函数&#xff0c;不需要new来调用&#xff0c;而是直接使用里面的属性和方法即可 1.随机方法random 返回一个随机的小数 [0,1&#xff09; 2.日起格式化 返回的月份会小一&#xff0c;记得加一 周一返回1&#xff…

iObit Uninstaller 安装、激活、使用教程

「软件简介」 IObit Uninstaller 一款专业的卸载工具&#xff0c;旨在彻底移除不需要的软件、插件以及 Windows 应用&#xff0c;同时提供安全、快速和轻量化的 PC 使用体验。 〖下载安装软件〗 版本&#xff1a;V 13.4.0 | 26.9 MB 支持系统&#xff1a;Windows 11/10/8.1/8/…

传媒论坛编辑部传媒论坛杂志社传媒论坛杂志2024年第7期目录

专题│场景传播研究 场景传播&#xff1a;一场遮盖自我与寻找自我的博弈 胡沈明; 3 基于CiteSpace的中国场景传播研究热点分析 管倩;粟银慧; 4-610《传媒论坛》投稿&#xff1a;cnqikantg126.com 数字世界的美与危&#xff1a;场景传播的失范与应对之举 王依晗;章洁…

Centos/linux根目录扩容、分区、挂载。LVM、物理卷、逻辑卷

前言    &#xff08;空格&#xff09; &#xff1a;分区挂载和扩容是两码事 每个Linux使用者在安装Linux时都会遇到这样的困境&#xff1a;在为系统分区时&#xff0c;如何精确评估和分配各个硬盘分区的容量&#xff0c;因为系统管理员不但要考虑到当前某个分区需要的容量&a…

在Linux系统内搭建DNS本地服务器

文章目录 Linux的本地DNS服务一、什么是DNS1.1、域名1.2、DNS服务器、DNS客户端和DNS中继1.3、DNS域名解析 二、搭建DNS服务2.1、正反向解析2.1.1.安装bind软件包2.1.2.修改主配置文件2.1.3.修改区域配置文件2.1.4.配置区域数据文件2.1.5.启动服务、关闭防火墙2.1.6.本地解析测…

网络安全实训Day24(End)

写在前面 并没有完整上完四个星期&#xff0c;老师已经趁着清明节假期的东风跑掉了。可以很明显地看出这次持续了“四个星期”实训的知识体系并不完整&#xff0c;内容也只能算是一次基础的“复习”。更多的内容还是靠自己继续自学吧。 网络空间安全实训-渗透测试 文件包含攻击…

美国FBA头程物流降本增效策略解析

随着跨境电商的迅速发展&#xff0c;美国FBA头程物流作为连接卖家与消费者的重要环节&#xff0c;其成本控制对于提高卖家盈利能力具有重要意义。本文将从多个方面探讨如何降低美国FBA头程物流成本&#xff0c;帮助卖家在激烈的市场竞争中取得优势。 1.合理安排发货计划是降低成…

【产品经理修炼之道】- 消金支付体系

我们常听说“互联网的尽头是放贷”&#xff0c;而当支付与金融结合会衍生出各种场景。本文将给大家拆解下不同消费金融场景下的支付案例&#xff0c;一起来看看吧。 各位小伙伴&#xff0c;大家好&#xff01; 我们常听说“互联网的尽头是放贷”&#xff0c;确实这说其实话糙…

Docker基础+虚拟化概念

目录 一、虚拟化简介 1、虚拟化概述 2、cpu的时间分片&#xff08;cpu虚拟化&#xff09; 3、cpu虚拟化性性能瓶颈 4、虚拟化工作 4.1虚拟机工作原理 4.2两大核心组件:QEMU、KVM 4.2.1QEMU&#xff1a; 4.2.2KVM&#xff1a; 5、虚拟化类型 ①全虚拟化&#xff1a; …

string的OJ题

1.字符串相加 给定两个字符串形式的非负整数 num1 和num2 &#xff0c;计算它们的和并同样以字符串形式返回。 你不能使用任何內建的用于处理大整数的库&#xff08;比如 BigInteger&#xff09;&#xff0c; 也不能直接将输入的字符串转换为整数形式。 思路&#xff1a;从字…

【Linux】git和gdb

下面还有两个Linux中会用到的工具&#xff0c;一个是给git&#xff0c;可以叫版本控制器&#xff0c;就是对我们写的代码进行版本控制 一个是gdb&#xff0c;就是我们C语言/C的代码调试工具 下面我们分别来介绍一下 git git和Linux一样&#xff0c;也是一个开源项目&#xff0c…

高频 LC、压控及晶体振荡器

实验名称 高频 LC、压控及晶体振荡器 一、实验目的 1. 正确地使用数字频率计测试频率。 2. 了解电源电压,负载及温度等对振荡须率的影响,从而加深理解为提高频率稳定度应采取的措施。 二、实验原理- 组成一个振荡器能否…

深度学习知识点:循环神经网络(RNN)、长短期记忆网络(LSTM)、门控循环单元(GRU)

深度学习知识点&#xff1a;循环神经网络&#xff08;RNN&#xff09;、长短期记忆网络&#xff08;LSTM&#xff09;、门控循环单元&#xff08;GRU&#xff09; 前言循环神经网络&#xff08;RNN&#xff09;RNNs&#xff08;循环神经网络&#xff09;训练和传统ANN&#xff…

Golang操作Redis

一. Redis介绍 1.1 简介 Redis是完全开源免费的&#xff0c;遵循BSD协议&#xff0c;是一个高性能的key-value数据库。 Redis与其它的key-value缓存产品有以下三个特点&#xff1a; Redis支持数据持久化&#xff0c;可以见内存中的数据报错在磁盘中&#xff0c;重启的时候可以…

从Kafka的可靠性设计体验软件设计之美

目录 1. Kafka可靠性概述 2. 副本剖析 2.1 什么是副本 2.2 副本失效场景 2.3 数据丢失场景 2.4 解决数据丢失方案 3. 日志同步机制 4. 可靠性分析 1. Kafka可靠性概述 Kafka 中采用了多副本的机制&#xff0c;这是大多数分布式系统中惯用的手法&#xff0c;以此来实现水平扩…

webpack热更新原理详解

文章目录 前言基础配置创建项目HMR配置 HMR交互概览HMR流程概述HMR实现细节初始化注册监听编译完成事件启动服务监听文件代码变化服务端发送消息客户端收到消息热更新文件请求热更新代码替换 问题思考 前言 刷新分为两种&#xff1a;一种是页面刷新&#xff0c;不保留页面状态…
最新文章