本课重点

  • 案例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绕过及安全修复的更多相关文章

  1. WEB漏洞——文件上传

    有关文件上传的知识 为什么文件上传存在漏洞 上传文件时,如果服务端代码未对客户端上传的文件进行严格的验证和过滤就容易造成可以上传任意文件的情況,包括上传脚本文件(asp.aspx.php.jsp等格式 ...

  2. 文件上传之WAF绕过及相安全防护

    文件上传在数据包中可修改的地方 Content-Disposition:一般可更改 name:表单参数值,不能更改 filename:文件名,可以更改 Content-Type:文件 MIME,视情况 ...

  3. Web Uploader文件上传插件

    http://www.jq22.com/jquery-info2665   插件描述:WebUploader是由Baidu WebFE(FEX)团队开发的一个简单的以HTML5为主,FLASH为辅的现 ...

  4. Web Uploader文件上传&&使用webupload有感(黄色部分)

    引入资源 使用Web Uploader文件上传需要引入三种资源:JS, CSS, SWF. <!--引入CSS--> <link rel="stylesheet" ...

  5. 七牛云存储的 Javascript Web 前端文件上传

    因为我的个人网站 restran.net 已经启用,博客园的内容已经不再更新.请访问我的个人网站获取这篇文章的最新内容,七牛云存储的 Web 前端文件上传 七牛是不错的云存储产品,特别是有免费的配额可 ...

  6. web安全——文件上传

    文件上传本身不是漏洞,但如果文件上传功能的限制出现纰漏,允许了不合法且影响网站安全的文件的上传    可以将不合法且影响网站安全稳定性的文件等内容上传的均为“文件上传漏洞”        黑方将文件上 ...

  7. java web(四)文件上传与下载

     一.文件上传原理 1.在TCP/IP中,最早出现的文件上传机制是FTP ,它是将文件由客户端发送到服务器的标准机制:但是在jsp使用过程中不能使用FTP方法上传文件,这是由jsp运行机制所决定. 通 ...

  8. 用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 第三 ...

  9. 文件上传和WAF的攻与防

    Author:JoyChouDate:20180613 1. 前言 本文的测试环境均为 nginx/1.10.3 PHP 5.5.34 有些特性和 语言及webserver有关,有问题的地方,欢迎大家 ...

随机推荐

  1. Java(17)面向对象之多态

    作者:季沐测试笔记 原文地址:https://www.cnblogs.com/testero/p/15201621.html 博客主页:https://www.cnblogs.com/testero ...

  2. Golang通脉之指针

    指针的概念 指针是存储另一个变量的内存地址的变量. 变量是一种使用方便的占位符,用于引用计算机内存地址. 一个指针变量可以指向任何一个值的内存地址. 在上面的图中,变量b的值为156,存储在内存地址0 ...

  3. Win10 配置JDK1.8 (JDK 8)环境变量

    JDK的安装: 1. JDK安装过程中,一般X掉公共JRE,因为JDK包含了JRE:     环境变量的配置: 1. 打开环境变量,编辑系统变量,新建: 变量名:JAVA_HOME 变量值:D:\so ...

  4. 用例圖學習實例 / Learning Use Case Diagram by Examples

    什麼是用例圖? 用例描述了一個演員和感興趣的系統之間的一系列交互,以達到某種特定目標,並由某種觸發事件引發.用例滿足需求或為演員解決問題.用例圖包含一組用例,可以通過從每個角色的不同角度講述系統將如何 ...

  5. 【二食堂】Alpha - Scrum Meeting 10

    Scrum Meeting 10 例会时间:4.20 18:00~18:20 进度情况 组员 昨日进度 今日任务 李健 1. 与柴博合作完成登录注册页面issue 继续完成登录注册页面issue 柴博 ...

  6. 难搞的C语言指针你搞懂了多少

    C语言指针说难不难但是说容易又是最容易出错的地方,因此不管是你要做什么只要用到C指针你就跳不过,今天咱们就以 十九个例子来给大家简单的分析一下指针的应用,最后会有C语言视频资料提供给大家更加深入的参考 ...

  7. CentOS8 部署 MySQL8

    前言 有来项目的数据库在此之前使用的是 Docker 部署的,具体可见文章 Docker 安装 MySQL8 ,服务器是阿里云 2C2G 的ECS轻量服务器,可能是配置问题有时不论查什么都要等很长很长 ...

  8. Codeforces Round #747 (Div. 2)题解

    谢天谢地,还好没掉分,还加了8分,(8分再小也是加啊)前期刚开始有点卡,不过在尽力的调整状态之后,还是顺利的将前面的水题过完了,剩下的E2和F题就过不去了,估计是能力问题,自己还是得认真补题啦. E2 ...

  9. hdu 1160 FatMouse's Speed(最长不下降子序列+输出路径)

    题意: FatMouse believes that the fatter a mouse is, the faster it runs. To disprove this, you want to ...

  10. 从0到1搭建自己的组件(vue-code-view)库(上)

    0x00 前言 本文将从结构.功能等方面讲解下项目 vue-code-view 的搭建过程,您可以了解以下内容: 使用 vue cli 4从0搭建一个组件库及细致配置信息. 项目的多环境构建配置. 项 ...