文件上传漏洞(upload-labs)

目录

一、文件上传漏洞

1.什么是文件上传漏洞

常见的WebShell

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

二、文件上传绕过

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

1.前端验证

upload-labs第一关

(二)绕过黑名单验证

黑名单验证

1.特殊解析后缀

upload-labs第三关

[2. .htaccess解析](#2. .htaccess解析)

upload-labs第四关

3.大小写绕过

upload-labs第六关

4.空格绕过

upload-labs第七关

[5. .号绕过](#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. 文件头图片格式绕过](#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代码。

相关推荐
用户962377954482 天前
DVWA 靶场实验报告 (High Level)
安全
数据智能老司机2 天前
用于进攻性网络安全的智能体 AI——在 n8n 中构建你的第一个 AI 工作流
人工智能·安全·agent
数据智能老司机2 天前
用于进攻性网络安全的智能体 AI——智能体 AI 入门
人工智能·安全·agent
用户962377954482 天前
DVWA 靶场实验报告 (Medium Level)
安全
red1giant_star2 天前
S2-067 漏洞复现:Struts2 S2-067 文件上传路径穿越漏洞
安全
用户962377954482 天前
DVWA Weak Session IDs High 的 Cookie dvwaSession 为什么刷新不出来?
安全
cipher4 天前
ERC-4626 通胀攻击:DeFi 金库的"捐款陷阱"
前端·后端·安全
一次旅行7 天前
网络安全总结
安全·web安全
red1giant_star7 天前
手把手教你用Vulhub复现ecshop collection_list-sqli漏洞(附完整POC)
安全
ZeroNews内网穿透7 天前
谷歌封杀OpenClaw背后:本地部署或是出路
运维·服务器·数据库·安全