文件上传之WAF绕过及相安全防护
文件上传在数据包中可修改的地方
Content-Disposition:一般可更改
name:表单参数值,不能更改
filename:文件名,可以更改
Content-Type:文件 MIME,视情况更改
常见绕过WAF的方法
- 数据溢出-防止WAF匹配(xxx...)'
- 符号变异-防止WAF匹配(' " ;)
- 数据截断-防止WAF匹配(%00 ; 换行)
- 重复数据-防止WAF匹配(参数多次)
WAF绕过简单演示
我以靶场upload-labs第二关进行演示。
我们开启安全狗的上传防护:
第2关上传一个php文件,被安全狗检测到且被拦截:
php加上空格"ph p",可上传,但无法解析。
1. 垃圾数据溢出法
- filename的内容进行溢出。
filename的内容进行溢出虽然可以绕过WAF但是我无法将php文件上传至服务器。
- name与filename之间进行溢出
也可绕过WAF但是无法上传php文件。
- 大量垃圾数据后加“;”
Content-Disposition与name之间的垃圾数据加上分号可绕过安全狗。
可成功上传php文件
经测试,name与filename之间的垃圾数据也可绕过。
2. 符号变异绕过
可用payload:
filename=" xx.php
filename="x x.php
filename=' xx.php
filename='x x.php
- filename的内容用单引号括起来(被拦截)
显然被拦截 - filename去掉最后一个双引号(被拦截)
被拦截 - filename去掉最后一个双引号,再加上分号(后缀不能被解析)
可绕过,可上传,但是无法被解析 - filename去掉最后一个双引号,在文件名后缀前任意位置加空格(可行)
可绕过WAF,可上传。 - 单引号与双引号一致。
- 只在末尾加双引号(被拦截)
- 文件名前加双引号或单引号(无法解析)
文件名前加双引号或单引号可绕过waf,也可上传,但是无法解析。
- 文件名中加入图片后缀提前用分号截断
3. 数据截断绕过
可用payload:
filename="x.jpg;shell.php"
filename="x.jpg;shell.php
filename='x.jpg;shell.php
filename="shell.php%00xx.jpg" 注意%00要编码
- 文件名中加入图片后缀提前用分号截断(可行)
原因是防护软件只检测前面的部分,一旦正确就放行,不再检测后面的
同理结合符号变形可有:
filename="x.jpg;shell.php
filename='x.jpg;shell.php
·····
- 文件名中用%00url编码截断(可行)
4. 数据换行截断
可用payload:
x.ph
p
x.p
h
p
x.
p
h
p
x
.
p
h
p
- 直接在数据包中进行换行操作(可行)
5. 重复数据绕狗(参数多次)
- 重复filename
前面的filename为可接受的文件格式,最后一个为php文件格式,前面的重复多次,可绕过。
- filename中配合其他参数
配合Content-Type: image/jpeg:
6. "/"与";"配合绕过
payload:
filename="/jpeg;x.php"
filename="/jpeg;/x.php"
7. FUZZ字典配合
字典地址:
https://github.com/TheKingOfDuck/fuzzDicts
https://github.com/fuzzdb-project/fuzzdb
手工测试的话有点麻烦,我们可以借助写好的字典配合BP进行批量测试,先在本地测试好了,再在真实环境进行测试,以防会封IP。
我借助fuzzDicts的php字典进行测试。
首先将拦截的数据包发送至Intruder
清除所有变量
将filename的值设置为变量
payload加载字典:
开始攻击:
能否成功取决于字典的好坏。
安全及修复建议
- 后端验证:采用服务端验证模式
- 后缀检测:基于黑名单,白名单过滤
- MIME 检测:基于上传自带类型检测
- 内容检测:文件头,完整性检测
- 自带函数过滤:参考 uploadlabs关卡的函数
- 自定义函数过滤:function check_file(){}等
- WAF 防护产品:宝塔,云盾,安全公司产品等
文件上传之WAF绕过及相安全防护的更多相关文章
- 24:WEB漏洞-文件上传之WAF绕过及安全修复
本课重点 案例1:上传数据包参数对应修改测试 案例2:safedog+云服务器+uploadlabs测试 案例3:safedog+云服务器+uploadlabs_fuzz测试 案例4:文件上传安全修复 ...
- 文件上传和WAF的攻与防
Author:JoyChouDate:20180613 1. 前言 本文的测试环境均为 nginx/1.10.3 PHP 5.5.34 有些特性和 语言及webserver有关,有问题的地方,欢迎大家 ...
- 文件上传——客户端检测绕过(JavaScript检测)(一)
前言 通常再一个web程序中,一般会存在登陆注册功能,登陆后一般会有上传头像等功能,如果上传验证不严格就可能造成攻击者直接上传木马,进而控制整个web业务控制权.下面通过实例,如果程序只进行了客户端J ...
- 文件上传过waf的方法
原文链接: https://www.cesafe.com/8411.html 原始请求包: ——WebKitFormBoundary2smpsxFB3D0KbA7D Content-Dispositi ...
- 文件上传绕过WAF
文件上传 文件上传实质上还是客户端的POST请求,消息主体是一些上传信息.前端上传页面需要指定 enctype为multipart/from-data才能正常上传文件. 此处不讲各种中间件解析漏洞只列 ...
- Web攻防系列教程之文件上传攻防解析(转载)
Web攻防系列教程之文件上传攻防解析: 文件上传是WEB应用很常见的一种功能,本身是一项正常的业务需求,不存在什么问题.但如果在上传时没有对文件进行正确处理,则很可能会发生安全问题.本文将对文件上传的 ...
- web漏洞-命令执行、文件上传、XSS
一.命令执行 1:什么是命令执行? 命令执行漏洞是指攻击者可以随意执行系统命令.属于高危漏洞之一任何脚本语言都可以调用操作系统命令. 应用有时需要调用一些执行系统命令的函数,举个例子如:PHP中的 ...
- 过waf实战之文件上传bypass总结
这里总结下关于waf中那些绕过文件上传的姿势和尝试思路 环境 apache + mysql +php waf:某狗waf 这里写了一个上传页面 <html> <body> &l ...
- 漏洞利用:验证绕过,XSS利用,Cookic盗用,文件上传
1. 文件上传 低级别 写好上传的内容 选择好上传的文件 上传成功. 测试:访问文件,执行代码 中级别 修改文件后缀为png 上传该文件 抓包修改文件后缀为php,然后允许数据包通过. 上传 ...
随机推荐
- 28、python3.7(windows)将ORACLE11gR2中的数据取出写入excel表
28.1.下载python的离线扩展模块: 1.windows下python的离线扩展模块下载地址为: https://www.lfd.uci.edu/~gohlke/pythonlibs/ 提示: ...
- 39、升级linux的内核
39.1.什么是linux系统内核: 操作系统是一个用来和硬件打交道并为用户程序提供一个有限服务集的低级支撑软件.一个计算机 系统是一个硬件和软件的共生体,它们互相依赖,不可分割.计算机的硬件,含有外 ...
- 1、Centos7下安装Oracle11gR2及多实例
实验环境: 系统:2核8G内存60G硬盘,centos7.4: 优化操作:已经关闭了防火墙.selinux,/etc/hosts文件中以添加"172.16.1.92 slave-node2& ...
- To_Heart—题解——AT2165
这是一篇解题报告 首先,看到标签,考虑二分答案. 我们二分答案(即塔顶的值),把大于或等于这个值的变为1,否则变为0. 很容易发现,如果塔顶的答案是1,那么就说明值可以更大,否则相反. 复制一波样例 ...
- CentOS7 安装搭建docker环境
一.Docker简介 Docker 版本 :版本分为:社区版CE 企业版EE 社区版分为stable和edge俩种发行方式: stable版本:是季度版发行(三月一更新) edge版本:是月度版发行 ...
- JPA事务中的异常最后不也抛出了,为什么没被catch到而导致回滚?
上周,我们通过这篇文章<为什么catch了异常,但事务还是回滚了?>来解释了,之前test4为什么会回滚的原因. 但还是收到了很多没有理解的反馈,主要是根据前文给出的线索去跟踪,是获得到了 ...
- 重新整理 .net core 实践篇————跨域问题四十一]
前言 简单整理一下.net core 的跨域问题,这个以前也整理过比较详细的,故而在此简单整理一下. 正文 对跨域相对的就是同源,什么是同源呢? 协议相同(http/https) 主机(域名)相同 端 ...
- 重新整理 .net core 实践篇————缓存相关[四十二]
前言 简单整理一下缓存. 正文 缓存是什么? 缓存是计算结果的"临时"存储和重复使用 缓存本质是用空间换取时间 缓存的场景: 计算结果,如:反射对象缓存 请求结果,如:DNS 缓存 ...
- SpringBoot集成Quartz实现定时器
SpringBoot+Quartz实现定时器,由于本人也是刚学习,不足之处请各位大神指正 .. 1.pom配置 <dependency> <groupId>org.sp ...
- PHP实现的解汉诺塔问题算法示例
问题描述: 相传在古印度圣庙中,有一种被称为汉诺塔(Hanoi)的游戏.该游戏是在一块铜板装置上,有三根杆(编号A.B.C),在A杆自下而上.由大到小按顺序放置64个金盘(如下图).游戏的目标:把A杆 ...