24:WEB漏洞-文件上传之WAF绕过及安全修复
本课重点
- 案例1:上传数据包参数对应修改测试
 - 案例2:safedog+云服务器+uploadlabs测试
 - 案例3:safedog+云服务器+uploadlabs_fuzz测试
 - 案例4:文件上传安全修复方案-函数自定义及WAF
 
案例1:上传数据包参数对应修改测试
上传参数名解析:明确哪些东西能修改?
- Content-Dispostion:一般可更改
 - name:表单参数值,不能更改
 - filename:文件名,可以更改
 - Content-Type:文件MIME,视情况而定
 

案例2:safedog+云服务器+uploadlabs测试
常见绕过方法:
- 数据溢出-防匹配(xxx...)
 - 符号变异-防匹配(' " ;)
 - 数据截断-防匹配(%00 ; 换行)
 - 重复数据-防匹配(参数多次)
 
过safedog之Payload: 大量垃圾数据缓冲溢出(Content-Disposition,filename等)
filename=xx.php
filename="xx.php
filename='xx.php
filename="x".php
filename="x"x.php
filename="a.jpg;.php"
filename="Content-Disposition:form-data;name="upload_file";x.php"
filename="x.jpg";filename="x.jpg";....filename="x.php";
filename="/xxx/x.php"
filename=
"
x
.
p
h
p
"
主要是学习思路,其他waf绕过可参考思路进行尝试
案例演示
<1>上传一个PHP文件,被safedog拦截,原因是安全狗中配置了相关防护,该防护是通过检测关键字实现的,


<2>方法1:在数据包filename之前,手动加入大量垃圾数据(以分号结尾),造成数据溢出,防止waf匹配关键字,从而绕过waf防护。

<3>方法2:使用符号变异的方法,防止waf匹配关键字,从而绕过waf防护。比如原来是filename="xx.php",我们可以手动改为filename='xx.php'、filename="xx.php、filename='xx.php、filename=xx.php"、filename=xx.php'、filename=xx.php等形式,尝试上传。经过测试,以下三种方式可以绕过safedog文件防护。
- filename="xx.php
 - filename='xx.php
 - filename=xx.php
 

通过以上测试,猜测安全狗防护机制是取filename后面最后一个引号之前的数据与黑名单匹配。此时我们就有了更多思路,比如改为filename="x".php,安全狗会取引号中的x与后缀黑名单进行匹配,成功绕过,上传到服务器上的文件名为.php。或者改为filename="x"x.php,此时上传到服务器上的文件名为x.php。

<4>方法3:数据截断-防匹配(%00 ; 换行)
改为filename="x.jpg;.php",成功绕过,此时上传到服务器上的文件名为x.jpg;.php。

改为filename="x.php%00.jpg",成功绕过,此时上传到服务器上的文件名为x.php%00.jpg,图片格式,没啥用。
改为换行绕过,此时上传到服务器上的文件名为x.php。

<5>方法4:重复数据-防匹配(参数多次)
改为filename="x.jpg";filename="x.jpg";....filename="x.php";,成功绕过,此时上传到服务器上的文件名为x.php。

改为filename="Content-Disposition:form-data;name="upload_file";x.php",成功绕过,此时上传到服务器上的文件名为;x.php。

改为filename="Content-Disposition:form-data;name="upload_file"x.php"(去掉了分号),成功绕过,此时上传到服务器上的文件名为x.php。

改为filename="Content-Type: image/jpeg;x.php"(去掉了分号),成功绕过,此时上传到服务器上的文件名为jpeg;x.php。此处发现/之后的内容可以绕过安全狗检测。

改为filename="/jpeg;/x.php",成功绕过,此时上传到服务器上的文件名为x.php。

案例3:safedog+云服务器+uploadlabs_fuzz测试
可以使用模糊字典+Intruder模块,批量测试。

fuzz字典:
- https://github.com/fuzzdb-project/fuzzdb
 - https://github.com/TheKingOfDuck/fuzzDicts
 - https://github.com/jas502n/fuzz-wooyun-org
 - https://github.com/TuuuNya/fuzz_dict
 
案例4:文件上传安全修复方案-函数自定义及WAF
文件上传安全修复方案:
- 后端验证:采用服务端验证模式
 - 后缀检测:基于黑名单、白名单过滤
 - MIME检测:基于上传自带类型检测
 - 内容检测:文件头,完整性校验
 
文件上传安全修改工具:
- 自带函数过滤:参考uploadlabs函数
 - 自定义函数过滤:function check_file(){}
 - WAF防护产品:宝塔、云盾、安全公司产品等
 
24:WEB漏洞-文件上传之WAF绕过及安全修复的更多相关文章
- WEB漏洞——文件上传
		
有关文件上传的知识 为什么文件上传存在漏洞 上传文件时,如果服务端代码未对客户端上传的文件进行严格的验证和过滤就容易造成可以上传任意文件的情況,包括上传脚本文件(asp.aspx.php.jsp等格式 ...
 - 文件上传之WAF绕过及相安全防护
		
文件上传在数据包中可修改的地方 Content-Disposition:一般可更改 name:表单参数值,不能更改 filename:文件名,可以更改 Content-Type:文件 MIME,视情况 ...
 - Web Uploader文件上传插件
		
http://www.jq22.com/jquery-info2665 插件描述:WebUploader是由Baidu WebFE(FEX)团队开发的一个简单的以HTML5为主,FLASH为辅的现 ...
 - Web Uploader文件上传&&使用webupload有感(黄色部分)
		
引入资源 使用Web Uploader文件上传需要引入三种资源:JS, CSS, SWF. <!--引入CSS--> <link rel="stylesheet" ...
 - 七牛云存储的 Javascript Web 前端文件上传
		
因为我的个人网站 restran.net 已经启用,博客园的内容已经不再更新.请访问我的个人网站获取这篇文章的最新内容,七牛云存储的 Web 前端文件上传 七牛是不错的云存储产品,特别是有免费的配额可 ...
 - web安全——文件上传
		
文件上传本身不是漏洞,但如果文件上传功能的限制出现纰漏,允许了不合法且影响网站安全的文件的上传 可以将不合法且影响网站安全稳定性的文件等内容上传的均为“文件上传漏洞” 黑方将文件上 ...
 - java web(四)文件上传与下载
		
一.文件上传原理 1.在TCP/IP中,最早出现的文件上传机制是FTP ,它是将文件由客户端发送到服务器的标准机制:但是在jsp使用过程中不能使用FTP方法上传文件,这是由jsp运行机制所决定. 通 ...
 - 用VSCode开发一个asp.net core2.0+angular5项目(5): Angular5+asp.net core 2.0 web api文件上传
		
第一部分: http://www.cnblogs.com/cgzl/p/8478993.html 第二部分: http://www.cnblogs.com/cgzl/p/8481825.html 第三 ...
 - 文件上传和WAF的攻与防
		
Author:JoyChouDate:20180613 1. 前言 本文的测试环境均为 nginx/1.10.3 PHP 5.5.34 有些特性和 语言及webserver有关,有问题的地方,欢迎大家 ...
 
随机推荐
- Windows使用Git的vim编辑器编译运行程序
			
Windows配置gcc 新建一个main.c $ touch main.c #在当前目录下创建main.c $ mkdir folder #在当前目录下创建folder文件夹 $ rm main.c ...
 - Java:包装类小记
			
Java:包装类 对 Java 中的 包装类 这个概念,做一个微不足道的小小小小记 基本数据&包装类 四类八种基本数据类型: 数据类型 关键字 内存占用 取值范围 字节型 byte 1个字节 ...
 - 混合开发框架Flutter
			
Flutter开发简介与其他的混合开发的对比 为什么要使用Flutter? 跨平台技术简介 Hybrid技术简介 QT简介 Flutter简介 为什么要使用Flutter? Flutter有什么优势? ...
 - spring cloud hystrix的隔离策略和dashboard
			
随着服务的拆分,各个服务有着明确的职责,服务之间通过轻量级的协议进行通讯.但有时候我们完成一个功能需要同时调用多个微服务,比如完成订单的创建,那么获取用户信息需要调用用户微服务,获取商品信息需要调用商 ...
 - Xpath语法学习记录
			
高级参考:https://blog.csdn.net/wudaoshihun/article/details/82226122 举例: 1 <!DOCTYPE html> 2 <ht ...
 - 转:Vivado IP报[Opt 31-67] 错误问题解决方法
			
使用VIVADO编译代码时,其中一个IP报错,错误类似为 ImplementationOpt Design[Opt 31-67] Problem: A LUT2 cell in the design ...
 - linux 内核源代码情景分析——越界访问
			
页式存储管理机制通过页面目录和页面表将每个线性地址转换成物理地址,当遇到下面几种情况就会使CPU产生一次缺页中断,从而执行预定的页面异常处理程序: ① 相应的页面目录或页表项为空,也就是该线性地址与物 ...
 - Android Studio 查看SQLite数据库存储位置及文件
			
前言: 之前开发的一个记账本APP,用的是SQLite数据库,会有一些网友问如何查看数据库,这篇博文对此进行一个说明. 操作: 1.通过DDMS(Dalvik Debug Monitor Servic ...
 - iscsi基本命令
			
磁阵操作命令 根据磁阵端配置的业务地址(targetIP)和端口(3260),命令iscsiadm -m discovery -t sendtargets -p targetIP:port(3260) ...
 - Iceberg概述
			
背景 随着大数据领域的不断发展, 越来越多的概念被提出并应用到生产中而数据湖概念就是其中之一, 其概念参照阿里云的简介: 数据湖是一个集中式存储库, 可存储任意规模结构化和非结构化数据, 支持大数据和 ...