24 WEB漏洞-文件上传之WAF绕过及安全修复

目录

    • WAF绕过
    • 上传参数名解析:明确哪些东西能修改?
    • 常见绕过方法:
    • `符号变异-防匹配(' " ;)`
    • 数据截断-防匹配(%00 ; 换行)
    • 重复数据-防匹配(参数多次)
    • 搜索引擎搜索fuzz web字典
    • 文件上传安全修复方案

WAF绕过

safedog
BT(宝塔)
XXX云盾
宝塔过滤的比安全狗厉害一些,在真实情况下现在很多网站都是用宝塔

上传参数名解析:明确哪些东西能修改?

Content-Disposition: 表单数据,一般可更改
name:表单参数值,不能更改,改完之后,数据包是有问题的,跟前端的表单值会对不上,这样后端会无法判断你上传的地方,如果要更改,那前端得跟着一起更改
Filename:文件名,可以更改,但是更改的意义不大
Content-Type:文件MIME,视情况更改,如果对方是mime判断的话,修改之后可以达到绕过,那如果对方不是的话,那更改的意义就不是很大了

防护软件通过数据包文件里面的代码(用我们记事本打开看到的文件代码)里面是否存在后门判断出我们上传的数据包有问题,从而进行拦截的
代码的变异是我们后面要学习的,我们这篇文章现在不讲它
检测有参数值的,后面有数据的,其中文件名是比较关键的,如果后缀写成.php的,那绝对会被检测到。它拦截你就是检测到你php的关键字
我们常规的绕过思路,就是让他检测不到php,要么就是换一个脚本类型,然后这个脚本类型能够执行出php,两个方法都行,因为我们最终目的是让这个文件执行出脚本的后缀。
采用ph p去绕过,是可以成功的,但是不会被后台当成一个脚本去执行,这样子也是不行的
我们可以使用php. 、php 去绕过,最后发现被安全狗给拦截了。

常见绕过方法:

数据溢出-防匹配(xxx…)
把数据搞大,数据量过多的话,程序会按照程序的写法去里面找,但是数据太多了,程序也会有崩溃,或者匹配了多少条之后,他就找不下去了
有时候文件名过长的话,会把服务器搞崩;在form-data;那里添加大量的垃圾数据,末尾结束记得加个;,进行绕过最后绕过防护,上传脚本。
在这里插入图片描述
这是垃圾数据的一个典型情况,末尾是要加;,是有差异的。因为你加了;,默认name是一个表单,注意一下;不要在filename里面插,没有任何意义

符号变异-防匹配(' " ;)

;代表的是一对一的关系,结束了。没有带双引号的是程序自带的东西,带双引号里面的就是不固定的,一般在程序里面,将单引号括起来的话,基本上在程序开发里面单引号和双引号都可以。分号代表一个语句的结束,数据包截止的后面是没有分号的,如果加一个分号,那就代表后面还有
就是很多东西,他都存在一个函数替换,这个单引号和双引号,他能够实现的效果是一样的,我们为什么不把单引号变成双引号呢,防护软件可能检测的是双引号里面的东西,单引号的东西不检测呢,测试了一下,发现还是拦截了
我们可以去掉一个单引号或者双引号,相当与没有一个闭合,他会认为这个数据就是:.php,程序开发里面大家都知道,如果你把一些东西,没有用单引号和双引号括起来,会误认为是一个函数或者程序里面一个自带的东西,但是用双引号括起来的话,会认为是一个字符串
防护软件的匹配形式只能够自己去测试,才能知道是什么形式,是"qq.php,还是qq.php,:qq.php,如果相当于是第三种情况的话,我们就实现了绕过,那就是没有匹配到,因为他匹配到的话,那他绝对会实现拦截
安全狗现在的匹配规则是匹配单引号、双引号里面的东西,因为你不写,他就能够上传成功,相当于11.php没有匹配到,因为他没有接收到,他就绕过了,他如果接收到,绝对会拦截
在前面加可以绕过,在后面加就不能绕过,说明安全狗目前的匹配规则是取最后一个双引号,然后把前面的取出来
我这个测试是没有必要的,这只是说大家以后碰到同类的防护软件,不管是安全狗还是宝塔,安全公司里面的产品,那么大家在研究的时候,也是这么个研究方法,大家不要自己绕过就绕过了,我们学的是研究的方法后期只要脑瓜子灵活一点,是没有任何问题是可以绕过的,方法学不到,那讲了也是白讲,我希望大家学的是绕过的方法,以后自己就能做这个事情
绕过思路就是尽可能让他找不到php就可以了
“x”.php,绕过成功,上传的是.php,可以当.php执行。或者"x"x.php,上传成功是x.php,当我们知道方法就非常好玩了。

数据截断-防匹配(%00 ; 换行)

x.jpg;.php,它的意义是很明显的,因为安全狗也是程序,当它碰到截断,也是会截断的,后面的.php就没有匹配到,最后上传的后缀是.php就行了

换行相当于代码中有/n在中间了,如果程序当中用/n来表示换行,数据包识别我们这种写法,其实区块传输和换行是一个原理
filename=“x.p
h
p”

重复数据-防匹配(参数多次)

代码中匹配的递归循环,对方在验证你格式后缀的时候,如果他是单次验证,就会造成pphpph绕过
在这里插入图片描述
最后一个是filename=“x.php”;就可以了。这不是垃圾数据,垃圾数据会比这个多很多
filename=“Content-Disposition: form-data;name=“upload_file"x.php”,最后上传成功了,因为安全狗认为x.php是没有给filename的,但是他实际上是给了filename。借助原有数据包自带的正常的东西,把他作为干扰条件写到filename里面,就实现把x.php给绕过了。
/也可以做为一个条件去绕过,filename=”/jpeg;/x.php",/相当于一个截断,中间被注释了
#Payload:
大量垃圾数据缓冲溢出(Content-Disposition,filename等)
filename=“x.php
filename='x.php
filename=“a.jpg;.php”;
filename=“a.php%00.jpg”
filename=“Content-Disposition: form-data;name=“upload_file”;x.php”
filename=“x.jpg”;filename=“x.jpg”;…filename=“x.php”;
filename=”/jpeg;/x.php"
filename=
"
x
.
p
h
p
"
通过这篇文章,让大家明白研究的方法,我的研究方法就是不停的去测试,但是我们去测试总有一个先后顺序,前提条件下,我们得知道什么东西能改,什么东西不能改,这个注入语句核心类是不能改的,改的话,这个语句是会出问题的,那么最终的效果也是不能达到。同样的,我们在测试上传绕过也是这么个道理,你一定要知道那些地方,你不能动他。动他这个数据包就会有问题,那些地方你就不能改,你要对能修改的地方使劲的进行修改,然后在测试的时候,把每个waf的东西给搞清楚,以后你在研究他的时候就很容易上手,安全狗是目前比较容易过的WAF,有些东西其实都是一样的道理

搜索引擎搜索fuzz web字典

在做waf绕过的时候,fuzz是通常的一种方式
在这里插入图片描述
在filename=""这个地方加载字典进行变化,数据包发包量不要过大,不然安全狗的CC开关会直接封住你的IP。
这种就是全用工具去帮你跑,你就不要去思考问题,我们称之为fuzz模糊测试,就是用大量可能性在这里不断进行测试,其中抓到一种可以成功的可能,就完事了
假如你在入侵一个网站,你用100种方法去测试,FUZZ就是这么个情况

文件上传安全修复方案

后端验证:采用服务端验证模式
因为前端可以禁用js脚本运行,就可以绕过了
后缀检测:基于黑名单,白名单过滤
MIME检测:基于上传自带类型检测
内容检测:文件头,完整性检测
三种检测都上,比别人更安全,相关代码就几个函数,每个语言不一样,有些写的高级点的,就用面向对象的写法,写的低阶写个函数也行,在低阶点的,就在上传的那个点,写一个过滤就完事了,参考如下:
自带函数过滤:参考uploadlabs函数
getimage不上传图片就不会载入函数,只有上传图片才可以,所以它从理论上,已经把文件的属性给定义了。
自定义函数过滤:function check file(){}
把黑白名单两个都加在一起,既不是php,也不是jsp,他也必须是jpg,png常见的格式,这里可以搞双重验证,黑白两个都加,自己去查一下资料,检测传过来的参数名的值,看一下里面有没有关键字,php。
WAF防护产品:宝塔,云盾,安全公司产品等
其它语言也有相关函数,都是可以举一反三的
没有上传漏洞,再做绕过,始终是个0,没有办法判定是否存在上传漏洞,只能去盲猜。你既不能保证是否有漏洞,还得去测试是否能够绕过
前期一般是先绕过WAF,再去判定是否有上传漏洞,因为你有时候去判定是否有上传漏洞的时候,WAF已经触发,也不知道能不能成功

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/110230.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode 热题 100(七):105. 从前序与中序遍历序列构造二叉树、14. 二叉树展开为链表

题目一: 105. 从前序与中序遍历序列构造二叉树https://leetcode.cn/problems/construct-binary-tree-from-preorder-and-inorder-traversal/ 思路:依据前序遍历的根左右和中序遍历的左根右, 且根左长度=左根 代码: …

【已解决】pycharm突然双击无法打开,重启电脑也不管用

1.问题: pycharm突然双击无法打开,重启电脑也不管用 2.解决 2.1 方法一(修改Roaming) 1.找到C盘对应路径下的pycharm版本 2. 用记事本打开文件类型为VMOPTIONS文件 3. 修改或删除最后一行的映射路径 4.保存退出 2.2 方法二…

二级MySQL(二)——编程语言,函数

SQL语言又称为【结构化查询语言】 请使用FLOOR(x)函数求小于或等于5.6的最大整数 请使用TRUNCATE(x,y)函数将数字1.98752895保留到小数点后4位 请使用UPPER()函数将字符串‘welcome’转化为大写…

Linux重置ROOT密码(CentOS)

解释说明 在CentOS中重置root密码通常需要进入单用户模式,这是一个没有密码限制的特殊模式,允许您以root权限登录系统并更改密码。 重启系统 如果您无法登录到系统,可以通过重启系统来开始这个过程。您可以使用虚拟机控制台、物理服务器控制台…

Leetcode 191.位1的个数

编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中数字位数为 1 的个数(也被称为汉明重量)。 提示: 请注意,在某些语言(如 Java)中…

java+springboot+mysql农业园区管理系统

项目介绍: 使用javaspringbootmysql开发的农业园区管理系统,系统包含超级管理员、管理员、用户角色,功能如下: 超级管理员:管理员管理;用户管理;土地管理(租赁)&#x…

语言模型(language model)

文章目录 引言1. 什么是语言模型2. 语言模型的主要用途2.1 言模型-语音识别2.2 语言模型-手写识别2.3 语言模型-输入法 3. 语言模型的分类4. N-gram语言模型4.1 N-gram语言模型-平滑方法4.2 ngram代码4.3 语言模型的评价指标4.4 两类语言模型的对比 5. 神经网络语言模型6. 语言…

RabbitMQ的镜像队列

镜像队列 如果 RabbitMQ 集群中只有一个 Broker 节点,那么该节点的失效将导致整体服务的临时性不可用,并且也可能会导致消息的丢失。可以将所有消息都设置为持久化,并且对应队列的durable 属性也设置为 true ,但是这样仍然无法…

基于java swing和mysql实现的汽车租赁管理系统(源码+数据库+文档+运行指导视频)

一、项目简介 本项目是一套基于java swing和mysql实现的汽车租赁管理系统,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的Java学习者。 包含:项目源码、项目文档、数据库脚本等,该项目附带全部源码可作为毕设使用。 项目都经…

计算机竞赛 基于YOLO实现的口罩佩戴检测 - python opemcv 深度学习

文章目录 0 前言1 课题介绍2 算法原理2.1 算法简介2.2 网络架构 3 关键代码4 数据集4.1 安装4.2 打开4.3 选择yolo标注格式4.4 打标签4.5 保存 5 训练6 实现效果6.1 pyqt实现简单GUI6.3 视频识别效果6.4 摄像头实时识别 7 最后 0 前言 🔥 优质竞赛项目系列&#xf…

打架斗殴监测识别算法 yolov8

打架斗殴监测识别算法采用yolov8先进的图像处理和机器学习算法框架模型,打架斗殴监测识别算法能够自动识别和分析出打架斗殴的行为特征。一旦系统检测到打架斗殴行为,将自动触发告警。YOLO的结构非常简单,就是单纯的卷积、池化最后加了两层全…

抢先体验|乐鑫推出 ESP32-S3-BOX-3 新一代开源 AIoT 开发套件

乐鑫科技 (688018.SH) 非常高兴地宣布其开发套件阵容的最新成员 ESP32-S3-BOX-3。这款完全开源的 AIoT 应用开发套件搭载乐鑫高性能 ESP32-S3 AI SoC,旨在突破传统开发板,成为新一代开发工具的引领者。 【乐鑫新品抢先体验】ESP32-S3-BOX-3 新一代开源 A…

文件上传漏洞之条件竞争

这里拿upload-labs的第18关做演示 首先先看代码 $is_upload false; $msg null;if(isset($_POST[submit])){$ext_arr array(jpg,png,gif);$file_name $_FILES[upload_file][name];$temp_file $_FILES[upload_file][tmp_name];$file_ext substr($file_name,strrpos($file_…

AES+base64+远程加载----ConsoleApplication811项目

ConsoleApplication9.cpp // ConsoleApplication9.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。 //#include <iostream> #include <Windows.h> #include <wininet.h> #include "base64.h" #include "AES.h" …

【Rust】Rust学习 第十九章高级特征

现在我们已经学习了 Rust 编程语言中最常用的部分。在第二十章开始另一个新项目之前&#xff0c;让我们聊聊一些总有一天你会遇上的部分内容。你可以将本章作为不经意间遇到未知的内容时的参考。本章将要学习的功能在一些非常特定的场景下很有用处。虽然很少会碰到它们&#xf…

Redis进阶 - Lua语法

原文首更地址&#xff0c;阅读效果更佳&#xff01; Redis进阶 - Lua语法 | CoderMast编程桅杆https://www.codermast.com/database/redis/redis-advance-lua-language.html 初识 Lua Lua 是一种轻量小巧的脚本语言&#xff0c;用标准的 C 语言编写并以源代码形式开放&#…

闲人闲谈PS之四十六——网络生产全流程

惯例闲话&#xff1a;下半年已开始块行情似乎又是一波大涨&#xff0c;很多朋友委托我介绍PS顾问&#xff0c;很多朋友已经上了能源系统项目&#xff0c;这就造成装备制造的PS又是极度紧缺&#xff0c;rate也还可以&#xff0c;搞的自己也有点心痒痒。这种逆势大涨&#xff0c;…

Django(8)-静态资源引用CSS和图片

除了服务端生成的 HTML 以外&#xff0c;网络应用通常需要一些额外的文件——比如图片&#xff0c;脚本和样式表——来帮助渲染网络页面。在 Django 中&#xff0c;我们把这些文件统称为“静态文件”。 我们使用static文件来存放静态资源&#xff0c;django会在每个 INSTALLED…

ReoGrid.NET集成到winfrom

ReoGrid一个支持excel操作的控件,支持集成到任何winfrom项目内。 先看效果图: 如何使用&#xff1a; 使用ReoGrid自带excel模版设计工具先设计一个模版,设计器如下&#xff1a; 具体例子看官方文档 代码示例如下&#xff1a; var sheet reoGridControl1.CurrentWorksheet; …

从C语言到C++_34(C++11_下)可变参数+ lambda+function+bind+笔试题

目录 1. 可变参数模板 1.1 展开参数包 1.1.1 递归函数方式展开 1.1.2 逗号表达式展开 1.2 emplace相关接口 2. lambda表达式&#xff08;匿名函数&#xff09; 2.1 C11之前函数的缺陷 2.2 lambda表达式语法 2.3 函数对象与lambda表达式 3. 包装器 3.1 function包装器…