漏洞详解--文件上传 如何花样绕过?!

news/2025/9/18 19:21:58/文章来源:https://www.cnblogs.com/L-xy/p/19099232

一、漏洞原理

1.1 核心

文件上传漏洞,顾名思义,将攻击者将恶意文件上传到服务器,服务器将恶意文件解析,攻击就达成了。

1.2 漏洞详解

文件上传漏洞非常好理解,有三个关键点,一是上传文件,二是找到文件上传的路径,三是使恶意文件得到解析。
假设一个系统没有防御(后面会讲绕过),文件上传漏洞步骤就如下:

  1. 上传恶意文件,如php一句话木马:
<?php @eval('cmd');?>
  1. 服务器返回上传到的路径:
    路径可能可以在Response中看到,也可能很简单的回显给你,比如头像,文章之类的,你就知道路径了(当然,也有可能很难找)
    例如路径为:http://xxx.com/41937489134/cmdshell.php
  2. 使恶意文件得到解析:
    有时候直接点击链接,文件就得到执行了(有时候无法执行,就需要配合文件包含漏洞等),如:
    点击http://xxx.com/41937489134/cmdshell.php ,之后用蚁剑等工具连接就getshell了。
    image

上述的情况非常理想,几乎不可能,那么如何绕过和构造利用链就是重中之重了。

二、检测与利用

检测方法很简单,找到可以上传文件的接口,尝试各种绕过技巧或构造利用链,如果可以,那就是存在。
利用也很简单,构造木马文件(一句话木马,大马,图片马等),上传解析,就可以getshell了。
主要还是绕过和构造利用链!!!

三、修复与绕过

这里将修复与绕过统一起来说,便于读者理解和选择绕过技巧。偏向于攻击者视角。

3.1 JS前端检查

JS前端检查这种防御手段形同虚设,两种绕过方式:

  1. F12开发者工具禁用JS。
  2. BurpSuite抓包,改包。例如想传muma.php,先改一下后缀名,改为muma.jpeg,然后BP抓包再改回muma.php即可。

3.2 Content-Type校验

根据请求报文Content-Type字段进行校验,绕过方式:
抓包,将Content-Type改为image/jpeg,image/png,application/pdf等服务端允许接收的即可。

3.3 文件头类型检测

文件头(有时也叫 魔数 Magic Number)指的是文件开头的几个字节(通常 2~8 字节,有的更长),这些字节是文件格式的标识,用来告诉操作系统或应用程序该文件属于什么类型。可用于识别文件类型,往往比扩展名更可靠。常见的文件头有:

文件类型 十六进制文件头 (Magic Number) 说明
JPEG (jpg) FF D8 FF E0FF D8 FF E1 数码照片最常见格式
PNG (png) 89 50 4E 47 0D 0A 1A 0A PNG 标志
GIF (gif) 47 49 46 38 39 6147 49 46 38 37 61 “GIF89a” 或 “GIF87a”
BMP (bmp) 42 4D “BM”
TIFF (tif) 49 49 2A 004D 4D 00 2A 分别对应小端/大端
PDF (pdf) 25 50 44 46 “%PDF”
ZIP (zip/docx/pptx/xlsx/jar) 50 4B 03 04 ZIP 压缩包及基于 ZIP 的 Office 文件
RAR (rar) 52 61 72 21 1A 07 0052 61 72 21 1A 07 01 00 RAR4 / RAR5
7z (7zip) 37 7A BC AF 27 1C 7-Zip
EXE (Windows) 4D 5A “MZ” 标志
ELF (Linux可执行) 7F 45 4C 46 “ELF” 标志
MP3 (音频) 49 44 33FF FB “ID3” 标签 或 MP3 帧头
MP4 (视频) 00 00 00 18 66 74 79 70 69 73 6F 6D “ftypisom”
WAV (音频) 52 49 46 46 + ... + 57 41 56 45 “RIFF....WAVE”
XML/HTML 没有固定魔数,一般开头是 <
文件头检测也不一定安全,工具者可以通过二进制编辑工具,如010Editor,在文件开头插入伪造的文件头进行绕过。

3.4 文件拓展名检测

文件拓展名检测大体可分为白名单检测和黑名单检测。白名单检测往往更加的安全。

3.4.1 黑名单检测:

如服务器端禁止"php,jsp"文件。
绕过方法大致如下:

  1. 大小写双写混淆:如PhP, jsP这类的,还有pphphp,jjspsp
  2. 00截断:php版本低于5.3.4可以尝试%00截断。如muma.php%00.jpeg。这样%00之后的字段会被截断丢弃,就相当于muma.php,从而进行绕过。
  3. Windows特性:有些绕过利用了Windows的特性,如Windows会忽略最后的'.'' ',还有Windows附加数据流。如muma.php. .,muma.php::$DATA进行绕过
  4. 同义文件拓展名:如将php换成php3,php2之类的,默认配置下可能不太好用。
  5. .htaccess绕过:.htaccess文件为Apache配置文件,仅作用于当前目录。通过在里面写"AddType application/x-httpd-php .php .txt .jpg"等将常见后缀名作为php解析,之后上传.txt等文件就可以实现注入了。但是前提是Apache允许其生效,AllowOverride All才可以,默认配置不可以。
  6. .user.ini绕过:.user.ini是用户自定义配置文件,用于覆盖或追加全局配置文件(如.php.ini)中的PHP配置选项。

3.4.2 白名单检测:

绕过方法大致如下:

  1. 00截断:php版本低于5.3.4可以尝试%00截断。如muma.php%00.jpeg。这样%00之后的字段会被截断丢弃,就相当于muma.php,从而进行绕过。
  2. 图片马:图片马的使用一般需要结合文件包含漏洞来实现(详细见下)。图片马的制作就是将一句话木马写入合法图片之中,然后上传图片,但是因为图片默认不会被执行,所以需要配合文件包含漏洞来实现。如果上传的图片会被重写,可以上传GIF图片,因为GIF图片常常会有大段内容不被重写。之后对比原GIF图片和重写后的GIF,找到没有被重写的部分,加入恶意代码。重新上传即可。

3.5 绕过链

3.5.1 与文件包含漏洞:

  1. 先正常上传一个图片马,因为是图片,所以大部分时候都可以上传成功。
  2. 得到图片上传到的地址:http://xxx.com/pics/muma.jpeg
  3. 使用文件包含漏洞(可执行)包含图片马执行:如:http://xxx.com/aaa?include=http://xxx.com/pics/muma.jpeg
  4. 使用蚁剑连接即可。
    当然,如果有文件包含漏洞,常常可以尝试日志注入,日志注入成功就用不着文件上传漏洞了。文件包含漏洞详解:https://www.cnblogs.com/L-xy/p/19093806

3.5.2 与反序列化漏洞:

  1. 先将序列化payload进行上传。
  2. 同样的,利用反序列化漏洞对上传的序列化payload进行反序列化。
  3. payload被执行,攻击成功。
    同样的,如果有反序列化漏洞,也可以考虑日志注入。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深入解析:AI Agent开发秘籍:Prompt工程与测评最佳实践(建议收藏反复研读)

深入解析:AI Agent开发秘籍:Prompt工程与测评最佳实践(建议收藏反复研读)2025-09-18 19:18 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-…

使用Windows客户端访问EDA环境的NFS共享

在IC设计环境中, 也总是会有Windows操作系统的开发服务器或者客户端需要使用IC设计平台中Linux主机使用的NFS服务器。 使用者也是IC设计团队中的一员,可能出于设计工具的原因, 他/她的部分工作必须在Windows中完成,…

Day03-1

public class HelloWorld { public static void main(String[] args) { String teacher = "David"; System.out.println("Hello World"); } //有趣的代码注释 //单行注释 //输出一个Hello,World! …

实用指南:鸿蒙智能设备自动诊断实战:从传感器采集到远程上报的完整实现

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

使用php -S 127.0.0.1:8000 新建php服务

php -S 127.0.0.1:8000 启动服务后 当前坐在目录下的所有文件都可以在浏览器上以 http://127.0.0.1/目录/文件名称 的形式访问 比如: 浏览器访问 http://127.0.0.1/upload_files.php 就会直接调用当前目录 upload_fi…

WPF ControlTemplate DI Via Microsoft.Extensions.DependencyInjection

Install-Package Microsoft.Extensions.DependencyInjection; Install-Package CommunityToolkit.mvvm; //app.xaml <Application x:Class="WpfApp21.App"xmlns="http://schemas.microsoft.com/winf…

完整教程:从“我店”模式看绿色积分电商平台的困境与破局

完整教程:从“我店”模式看绿色积分电商平台的困境与破局pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consola…

Java第三周课前思考

什么样的方法应该用static修饰?不用static修饰的方法往往具有什么特性?Student的getName应该用static修饰吗?完成独立功能或创建类的实例或对类级别的属性进行操作的方法应该用static修饰。 不用static修饰的方法往…

完整教程:光伏电站安全 “守护神”:QB800 绝缘监测平台,为清洁能源高效运行筑固防线

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

Java的安装及卸载

卸载JDK删除java的安装目录 删除JAVA_HOME(环境配置中) 删除path下关于java的目录(环境配置中) cmd中查找java -version是否仍存在安装JDK百度搜索JDK8,找到下载地址 同意协议 下载电脑对应的版本 双击安装JDK 记…

sql server 折腾时不小心去掉了 sysadmin 权限

sql server 折腾时不小心去掉了 sysadmin 权限恢复方法: net stop MSSQLSERVERsqlcmd -E -S . -Q "ALTER SERVER ROLE sysadmin ADD MEMBER [MyPC\admin]"net start MSSQLSERVER桂棹兮兰桨,击空明兮溯流光…

题解:P13882 [蓝桥杯 2023 省 Java A] 小蓝的旅行计划

挺可爱的反悔贪心,乍一看没看出和旅行家的预算的区别,甚至做完才发现不一样的说。 正文 首先我们可以将操作分为两个部分。分别是用油操作和加油操作。 用油 有一个简单的贪心策略,用油的时候首先使用最便宜的油,这…

深入解析:无人设备遥控器之帧同步技术篇

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

实用指南:订阅式红队专家服务:下一代网络安全评估新模式

实用指南:订阅式红队专家服务:下一代网络安全评估新模式pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consola…

更快的布尔矩阵乘法

这是小蝴蝶研读的第二篇论文,时间复杂度的话,原论文写的是 \(\frac{n^3}{2^{\Omega(\sqrt[7]{\log n})}}\),我感觉这个界可以精确分析出来,不过我还没看懂论文,先占个坑。

RWA技术规范解读:如何实现现实世界资产的合规代币化

RWA技术规范解读:如何实现现实世界资产的合规代币化 近日,深圳市信息服务业区块链协会发布了《RWA技术规范》(T/SZBA-2025),这是国内首个针对现实世界资产代币化的团体标准。本文将深入解读该规范的核心内容,帮助读…

实用指南:Java 集合解析

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

干货预警!Apache SeaTunnel 助力多点 DMALL 构建数据集成平台,探索AI新零售行业应用!

🎉亲爱的社区朋友们,数据集成领域的一场知识盛宴即将来袭!9 月 30 日下午 2 点,Apache SeaTunnel 社区精心策划的又一场线上 Meetup 将准时与大家云端相见!🎉亲爱的社区朋友们,数据集成领域的一场知识盛宴即将…

Apache SeaTunnel 2.3.12 发布!核心引擎升级、连接器生态再扩张

近期,Apache SeaTunnel 2.3.12 正式发版。这是继 2.3.11 之后的又一次迭代,本周期合并 82 个 PR,提供 9 项新特性、30+ 项功能增强、20+ 处文档修正,并修复 43 个 Bug。核心改进集中在 SensorsData 与 Databend 生…

详细介绍:对于牛客网—语言学习篇—C语言入门—链表的题目解析

详细介绍:对于牛客网—语言学习篇—C语言入门—链表的题目解析pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Co…