当前位置: 首页 > news >正文

19、SQL注入之SQLMAP绕过WAF

目录

    • 逻辑层
      • 1、逻辑问题
      • 2、性能问题
    • 白名单
      • 方式一:IP白名单
      • 方式二:静态资源
      • 方式三:url白名单
      • 方式四: 爬虫白名单

sqlmap在测试漏洞的时候,选择了no,它就不会去测试其它的了,我们一般选择yes,为了保证正确性。因为我们也不知道它是否就真的就是那个注入点、数据库类型,或者就是那个注入类型

在攻防实战中,往往需要掌握一些特性,比如服务器、数据库、应用层、WAF层等,以便我们更灵活地去构造Payload,从而可以和各种WAF进行对抗,甚至绕过安全防御措施进行漏洞利用

逻辑层

1、逻辑问题

(1)云waf防护,一般我们会尝试通过查找站点的真实IP,从而绕过CDN防护
(2)当提交GET、POST同时请求时,进入POST逻辑,而忽略了GET请求的有害参数输入,可尝试Bypass
(3)HTTP和HTTPS同时开放服务,没有做HTTP到HTTPS的强制跳转,导致HTTPs有WAF防护,HTTP没有防护,直接访问HTTP站点绕过防护
(4)特殊符号%00,部分waf遇到%00截断,只能获取到前面的参数,无法获取到后面的有害参数输入,从而导致Bypass。比如: id=1%00and 1=2 union select1,2,column_name from information_schema.columns

2、性能问题

猜想1:在设计WAF系统时,考虑自身性能问题,当数据量达到一定层级,不检测这部分数据。只要不断的填充数据,当数据达到一定数目之后,恶意代码就不会被检测了。

猜想2:不少WAF是C语言写的,而c语言自身没有缓冲区保护机制,因此如果WAF在处理测试向量时超出了其缓冲区长度就会引发bug,从而实现统过。

例子1:
?id=1 and (select 1)=(Select0xA1000)+UnIoN+SeLeCT+1,2,version(),4,5,database(),user(),
8,9
ps:0xA
1000指0xA后面"A"重复1000次,一般来说对应用软件构成缓冲区溢出都需要较大的测试长度,这里1000只做参考也许在有些情况下可能不需要这么长也能溢出。

例子2:
?a0=0&a1=1&…&a100=100&id=1 union select 1,schema_name,3 from INFORMATTON_SCHEMA.schemata
备注:获取请求参数,只获取前100个参数,第101个参数并没有获取到,导致SQL注入绕过。

白名单

方式一:IP白名单

从网络层获取的ip,这种一般伪造不来,如果是获取客户端的IP,这样就可能存在伪造IP绕过的情况。
测试方法:修改http的header来bypass waf
x-forwarded-for
x-remote-IP
x-orginating-IP
x-remote-addr
X-Real-ip

IP白名单在实战中意义不是很大,因为它的条件实在是很多,很难去满足;一个是获取IP是不是通过脚本去获取,如果是的话,可以去伪造IP,通过tcp/udp网络层方式获取的,那是没有办法伪造的

方式二:静态资源

特定的静态资源后缀请求,常见的静态文件(.js .jpg .swf .css等等),类似白名单机制,waf为了检测效率,不去检测这样一些静态文件名后缀的请求
http://10.9.9.201/sql.php?id=1
http://10.9.9.201/sql.php/1.js?id=1
备注:Aspx/php只识别到前面的.aspx/.php 后面基本不识别

有些WAF过滤是基于脚本过滤的参数,是针对脚本去过滤,针对某些其它格式就不会去过滤,比如图片格式、文本格式,因为图片格式、文本格式一般不会带参数,或者说图片格式、文本格式造成不了危害,只有脚本里面有代码,文本和图片的代码是没有什么作用的

http://10.9.9.201/sql.php/x.txt?id=1

我们这样去访问之后,网站并不会受到结果上的影响,数据还能够正常接收;waf认为注入的参数是建立在x.txt文件上面的,所以waf有可能放心这个注入,x.txt是一个很正常的文本文件,即使传参数,也不会造成很大的影响。但是网站这样子访问,参数并不是给了x.txt,而是给了.php
以前老版本的WAF可以通过这个方式直接绕过,但是现在不行了,但是我们还是要对这个东西进行了解

方式三:url白名单

正常文件涉及到敏感的操作,那我们在访问正常文件的时候,就会被拦截了,这个时候为了让正常的拦截去访问的话,它会对这个文件进行白名单设置

为了防止误拦,部分waf内置默认的白名单列表,如admin/manager/system等管理后台。只要url中存在白名单的字符串,就作为白名单不进行检测。常见的url构造姿势:
http://10.9.9.201/sql.php/admin.php?id=1
http://10.9.9.201/sgl.php?a=/manager/&b=…/etc/passwd
http://10.9.9.201/…/…/…/manager/…/sql.asp?id=2
waf通过/manage/进行比较,只要uri中存在/manage/就作为白名单不进行检测,这样我们可以通过/sql.php?a=/manage/&b=…/etc/passwd 绕过防御规则。

可以结合静态资源展开攻击,有的waf是不行的,但是我们还是要去学一下

方式四: 爬虫白名单

部分waf有提供爬虫白名单的功能,识别爬虫的技术一般有两种:
1、根据UserAgent 2、通过行为来判断
UserAgent可以很容易欺骗,我们可以伪装成爬虫尝试绕过。
User Agent Switcher (Firefox 附加组件),下载地址:https://addons.mozilla.org/en-US/firefox/addon/user-agent-switcher/
这个方式不是讲注入绕过,他是讲扫描绕过,这个方式我们经常用到

我们在服务器上创建自己网站之后,那么百度、google、搜狗等搜索引擎会对我们的网站页面进行收录,在搜索相关资料的时候会请求到我们的网站上来。
爬虫白名单就是伪造搜索引擎,当我们对网站部署waf之后,我们会发现我们对网站访问速度过快、请求过多的话,会拦截

搜索引擎会对我们的网站进行爬取,因为它的收录就是对我们的网站采取爬虫技术,而且速度很快,也是符合拦截规则的,但是WAF却不会去拦截,因为WAF会去识别你这个是用户访问,还是搜索引擎爬取,所以我们可以通过数据包的伪造,伪造成搜索引擎,对目标的网站进行访问,这个时候waf肯定会放行,因为它觉得这个是搜索引擎的访问,是正常的、官方的一种收录行为,不会是用户的攻击行为

我们对网站的后台进行目录爆破,我们发现爆出了很多结果,但是我们去验证的时候,发现这些东西压根都不存在,全部是误报
这里有两类问题,一个是请求速度过快,触发了规则;一个是扫描结果是个错误
伪造成官方搜索引擎的爬虫,去对网站进行扫描,就不会触发它的规则,因为它是白名单
dirsearch 爆破后台目录的数据包的UA可以使用搜索引擎爬虫的UA

我们学习的是绕过WAF的方法,不是学习某个工具,方法最重要

/*!50001 select * from test */

这里的50001表示,假如数据库是5.00.01以上版本,该语句才会被推行,反之就不行

50001会干扰WAF的识别,但是在数据库当中会被正常执行,这种绕过方式只针对mysql

%20union%20a11%23%0a%20select%201,2,3%23

写与不写all都会执行,不会影响任何结果,但是all能够绕过匹配规则里面的union select的一个结合, 因为中间有个all
总之来说,绕过WAF的匹配就是防止他们匹配到,我们要学FUZZ的话,就需要去学写脚本

我们在实际的工作当中,不可能全部用到手工注入,肯定是要借助检测工具

sqlmap自带绕过WAF的脚本,但是这些脚本肯定是不能够绕过常见WAF的,是用来绕过CTF比赛的,因为是比赛,所以WAF不会写的很死,肯定是存在问题的,就可以用这些脚本来绕过。

因为用自带的脚本绕不了,我们只能自己去编写,可以在sqlmap脚本的基础上去改,把注释删掉便于查看。
只要在if payload这个地方换就可以了,把符合WAF匹配规则的给替换掉,例如

if payload:payload = payload.replace("union","%23a%oaunion")payload = payload.replace("select","/*!44575select*/")payload = payload.replace("%20","%23a%0a")payload = payload.replace(" ",%23a%0a")payload = payload.replace( "database()","database%23a%0a()")
return payload

我们所有的步骤都做对了,但是我们就是被拦截了,这个时候我们可以通过代理,把完整的数据包抓到BP上面去看一下,看一下数据包里面是不是有问题

WAF可以通过数据包的指纹,发现我们使用了sqlmap这个工具在搞事情,所以被拦截了,不是因为我们的绕过脚本没搞好,才被拦截的

当我们在使用工具进行检测的时候,我们首先要解决一个问题,那就是工具会不会被拦截的问题。因为每个作者在写工具的时候,都有一个初衷,他在对网站进行扫描,会有一个数据包体系,这个数据包肯定会有他的特征,比如特定的指纹头,其实就是我们常说的指纹库,通过这个指纹库,我们可以识别出他使用的工具,不同的浏览器对网站进行访问是不一样的,因为他们的内核不同,所以他可以通过这些判断出你是人为的,还是工具扫描的,从而进行拦截

sqlmap的访问量会触发WAF的CC流量拦截,这个时候,就跟我们的注入没有关系了,我们可以采取延迟、代理池,爬虫白名单三种方式绕过

搜索引擎爬虫 http 指纹头——》获取搜索引擎爬虫 http 指纹头——》sqlmap user-agent注入——》更改sqlmap的请求头,用来绕过WAF或者使用–user-agent=""来自定义
随机是模拟用户的访问,我们可以通过–user-agent来模拟搜索引擎的访问
sqlmap只要是一直在跑,那他就是正常的,只要一旦停下来,那就遇到问题了
我们可以通过刷新网站来判断我们是否被封堵

delay延迟,按照我们延迟的时间,隔一段时间,发送一个数据包。正常访问网站的时候,就会速度过快,导致被封堵,隔一秒发一个。

代理池涉及到的东西比较复杂,我们现在也讲不到,代理池就是随机刷IP,我们需要学完python的安全开发,然后再去写一个;或者我们用网上现成的工具和脚本改一下,结合sqlmap去跑一下。

只要涉及到流量检测,基本上就会用到代理池。

我们要去学开发,我们要去学Python,因为python简单容易上手,工具大都是python开发的,我们可以直接拿别人的工具二次开发,也可以直接用Python写二次开发,现在的安全形式,如果你不懂代码那是不行的

中转脚本,本地写个脚本(请求远程地址数据包可以自定义编写),这个脚本去请求远程注入地址,sqlmap去注入本地的脚本地址

<?php
$url='http://xxxx/job_bystjb/yjs_byszjs.asp?id=';
$payload=base64_encode($_GET['x']);
echo $payload;
$urs=$ur1.$payload;
file_get _contents($urls);
echo $urls;
?>

php发送http请求的几种方法

https://blog.csdn.net/qq_34827048/article/details/78892700

绕过waf不是单纯的,除了技术上的,还可能是因为检测工具的原因;出了问题要去抓包看看,不要一直在代码上面找问题;分析是很重要的,那些绕过的方法,网上去找资料,多试几遍,用fuzz就完了。

相关文章:

19、SQL注入之SQLMAP绕过WAF

目录 逻辑层1、逻辑问题2、性能问题 白名单方式一&#xff1a;IP白名单方式二&#xff1a;静态资源方式三&#xff1a;url白名单方式四: 爬虫白名单 sqlmap在测试漏洞的时候&#xff0c;选择了no&#xff0c;它就不会去测试其它的了&#xff0c;我们一般选择yes&#xff0c;为了…...

Redis对象类型和结构、内存回收、对象共享

对象类型和结构 在Redis中&#xff0c;无论是键key还是值value都是一个对象&#xff0c;每次对Redis数据库创建一个新的键值对时&#xff0c;就至少会创建两个对象。 常见的对象类型有&#xff1a; 字符串列表哈希集合有序集合 这些对象在Redis中统一用一个结构体redisObjec…...

标准模板库STL——容器适配器-stack/queue/priority_queue

目录 容器适配器的理解 容器适配器的实现与使用 三类容器适配器 基本概述 示例代码 容器适配器的理解 容器适配器对底层容器进行封装&#xff0c;不具备自己的数据结构 容器适配器的方法全都由底层容器实现&#xff0c;不支持迭代器 容器适配器的实现与使用 // 容器适配器…...

Golang实现完整聊天室(内附源码)

项目github地址&#xff1a; 由于我们项目的需要&#xff0c;我就研究了一下关于websocket的相关内容&#xff0c;去实现一个聊天室的功能。 经过几天的探索&#xff0c;现在使用Gin框架实现了一个完整的聊天室消息实时通知系统。有什么不完善的地方还请大佬指正。 用到的技术…...

WSL2 ubuntu子系统OpenCV调用本机摄像头的RTSP视频流做开发测试

文章目录 前言一、Ubuntu安装opencv库二、启动 Windows 本机的 RTSP 视频流下载解压 EasyDarwin查看本机摄像头设备开始推流 三、在ubuntu 终端编写代码创建目录及文件创建CMakeLists.txt文件启动 cmake 配置并构建 四、结果展示启动图形界面在图形界面打开终端找到 rtsp_demo运…...

20230814让惠普(HP)锐14 新AMD锐龙电脑不联网进WIN11进系统

20230814让惠普(HP)锐14 新AMD锐龙电脑不联网进WIN11进系统 2023/8/14 17:19 win11系统无法跳过联网 https://www.xpwin7.com/jiaocheng/28499.html Win11开机联网跳过不了怎么办&#xff1f;Win11开机联网跳过不了解决方法 Win11开机联网跳过不了怎么办&#xff1f;Win11开机…...

基于ScrollView的下拉刷新

基于ScrollView的下拉刷新 组件使用 组件 import React, {useState} from react; import {ScrollView, RefreshControl, Platform} from react-native;const RefreshComponent ({children, onRefresh, onScroll}) > {const [refreshing, setRefreshing] useState(false);…...

强训第31天

选择 传输层叫段 网络层叫包 链路层叫帧 A 2^16-2 C D C 70都没收到&#xff0c;确认号代表你该从这个号开始发给我了&#xff0c;所以发70而不是71 B D C 248&123120 OSI 物理层 数据链路层 网络层 传输层 会话层 表示层 应用层 C 记一下304读取浏览器缓存 502错误网关 编…...

什么是Java中的策略模式?

Java中的策略模式是一种行为设计模式&#xff0c;它允许您在不改变客户端代码的情况下&#xff0c;在运行时动态地切换行为。这是一种非常有用的模式&#xff0c;因为它允许您在运行时根据需要更改算法或行为。 策略模式通常涉及到一个或多个策略类&#xff0c;每个策略类都实…...

【Visual Studio Code】--- Win11 安装 VS Code 超详细

Win11 安装 VS Code 超详细 概述一、下载 Vscode二、安装 Vscode 概述 一个好的文章能够帮助开发者完成更便捷、更快速的开发。书山有路勤为径&#xff0c;学海无涯苦作舟。我是秋知叶i、期望每一个阅读了我的文章的开发者都能够有所成长。 一、下载 Vscode Vscode官网 二、…...

每天一道leetcode:797. 所有可能的路径(图论中等深度优先遍历)

今日份题目&#xff1a; 给你一个有 n 个节点的 有向无环图&#xff08;DAG&#xff09;&#xff0c;请你找出所有从节点 0 到节点 n-1 的路径并输出&#xff08;不要求按特定顺序&#xff09; graph[i] 是一个从节点 i 可以访问的所有节点的列表&#xff08;即从节点 i 到节…...

创建预留成本中心与指定工厂不一致

创建预留成本中心与指定工厂不一致 这种情况SAP会警告提示&#xff0c;可以强制通过。 如果公司不允许跨公司领料&#xff0c;可以将消息号 M7517的类型从W改为为E tcode&#xff1a;OMCQ SPRO->物料管理->库存管理和实际库存->定义系统消息的属性->系统信息设置...

SCF金融公链新加坡启动会 创新驱动未来

新加坡迎来一场引人瞩目的金融科技盛会&#xff0c;SCF金融公链启动会于2023年8月13日盛大举行。这一受瞩目的活动将为金融科技领域注入新的活力&#xff0c;并为广大投资者、合作伙伴以及关注区块链发展的人士提供一个难得的交流平台。 在SCF金融公链启动会上&#xff0c; Wil…...

希尔排序【Java算法】

文章目录 1. 概念2. 思路3. 代码实现 1. 概念 希尔排序也是一种插入排序&#xff0c;它是简单插入排序经过改进之后的一个更高效的版本&#xff0c;也称为缩小增量排序。希尔排序在数组中采用跳跃式分组的策略&#xff0c;通过某个增量将数组元素划分为若干组&#xff0c;然后分…...

互联网发展历程:从布线到无线,AC/AP的崭新时代

互联网的发展&#xff0c;一直在追求更便捷、更灵活的连接方式。在网络的早期&#xff0c;布线问题常常让人头疼。一项革命性的技术应运而生&#xff0c;那就是“无线AC/AP”。 布线问题的烦恼&#xff1a;繁琐的布线 早期网络的布线工作常常耗费时间和精力&#xff0c;尤其在大…...

Vue3 Axios网络请求简单应用

cd 到项目 安装Axios&#xff1a;cnpm install --save axios post传递参数 需要安装querystring 用于转换参数格式&#xff1a;cnpm install --save querystring 运行示例&#xff1a; 后台接口&#xff1a; GetTestData.java package com.csdnts.api;import java.io.IOExce…...

day-18 代码随想录算法训练营(19)二叉树 part05

513.找树左下角的值 思路一&#xff1a;层序遍历&#xff0c;每一层判断是不是最后一层&#xff0c;是的话直接返回第一个; 如何判断是不是最后一层呢&#xff0c;首先队列头部&#xff0c;其次记录左右子节点都没有的节点数是不是等于que.size()&#xff1b;或…...

【数据结构OJ题】移除链表元素

原题链接&#xff1a;https://leetcode.cn/problems/remove-linked-list-elements/description/ 1. 题目描述 2. 思路分析 我们可以定义一个结构体指针变量cur&#xff0c;让cur一开始指向头结点&#xff0c;同时定义一个结构体指针prev&#xff0c;令prev初始化为空指针NULL…...

centos 安装 virtualbox

参考 https://phoenixnap.com/kb/how-to-install-virtualbox-centos-7 遇到 Gpg Keys Failue 这样解决 将 rpm 包下载到本地 –disablerepovirtualbox sudo yum --disablerepovirtualbox localinstall VirtualBox-7.0-7.0.10_158379_el7-1.x86_64 failure: repodata/repomd…...

Java8之Optional类的基本使用

文章目录 一、简介二、常见的Optional用法&#xff1a;1、创建Optional对象&#xff1a;1.1 使用of()方法&#xff1a;1.2 使用ofNullable()方法&#xff1a;1.3 使用empty()方法&#xff1a; 2、判断Optional是否包含值&#xff1a;2.1 使用isPresent()方法&#xff1a; 3、获…...

C++:多态机制详解

目录 一. 多态的概念 1.静态多态&#xff08;编译时多态&#xff09; 二.动态多态的定义及实现 1.多态的构成条件 2.虚函数 3.虚函数的重写/覆盖 4.虚函数重写的一些其他问题 1&#xff09;.协变 2&#xff09;.析构函数的重写 5.override 和 final关键字 1&#…...

深入浅出Diffusion模型:从原理到实践的全方位教程

I. 引言&#xff1a;生成式AI的黎明 – Diffusion模型是什么&#xff1f; 近年来&#xff0c;生成式人工智能&#xff08;Generative AI&#xff09;领域取得了爆炸性的进展&#xff0c;模型能够根据简单的文本提示创作出逼真的图像、连贯的文本&#xff0c;乃至更多令人惊叹的…...

Java求职者面试指南:Spring、Spring Boot、Spring MVC与MyBatis技术解析

Java求职者面试指南&#xff1a;Spring、Spring Boot、Spring MVC与MyBatis技术解析 一、第一轮基础概念问题 1. Spring框架的核心容器是什么&#xff1f;它的作用是什么&#xff1f; Spring框架的核心容器是IoC&#xff08;控制反转&#xff09;容器。它的主要作用是管理对…...

第一篇:Liunx环境下搭建PaddlePaddle 3.0基础环境(Liunx Centos8.5安装Python3.10+pip3.10)

第一篇&#xff1a;Liunx环境下搭建PaddlePaddle 3.0基础环境&#xff08;Liunx Centos8.5安装Python3.10pip3.10&#xff09; 一&#xff1a;前言二&#xff1a;安装编译依赖二&#xff1a;安装Python3.10三&#xff1a;安装PIP3.10四&#xff1a;安装Paddlepaddle基础框架4.1…...

使用SSE解决获取状态不一致问题

使用SSE解决获取状态不一致问题 1. 问题描述2. SSE介绍2.1 SSE 的工作原理2.2 SSE 的事件格式规范2.3 SSE与其他技术对比2.4 SSE 的优缺点 3. 实战代码 1. 问题描述 目前做的一个功能是上传多个文件&#xff0c;这个上传文件是整体功能的一部分&#xff0c;文件在上传的过程中…...

结构化文件管理实战:实现目录自动创建与归类

手动操作容易因疲劳或疏忽导致命名错误、路径混乱等问题&#xff0c;进而引发后续程序异常。使用工具进行标准化操作&#xff0c;能有效降低出错概率。 需要快速整理大量文件的技术用户而言&#xff0c;这款工具提供了一种轻便高效的解决方案。程序体积仅有 156KB&#xff0c;…...

CVE-2023-25194源码分析与漏洞复现(Kafka JNDI注入)

漏洞概述 漏洞名称&#xff1a;Apache Kafka Connect JNDI注入导致的远程代码执行漏洞 CVE编号&#xff1a;CVE-2023-25194 CVSS评分&#xff1a;8.8 影响版本&#xff1a;Apache Kafka 2.3.0 - 3.3.2 修复版本&#xff1a;≥ 3.4.0 漏洞类型&#xff1a;反序列化导致的远程代…...

大模型真的像人一样“思考”和“理解”吗?​

Yann LeCun 新研究的核心探讨&#xff1a;大语言模型&#xff08;LLM&#xff09;的“理解”和“思考”方式与人类认知的根本差异。 核心问题&#xff1a;大模型真的像人一样“思考”和“理解”吗&#xff1f; 人类的思考方式&#xff1a; 你的大脑是个超级整理师。面对海量信…...

Linux入门课的思维导图

耗时两周&#xff0c;终于把慕课网上的Linux的基础入门课实操、总结完了&#xff01; 第一次以Blog的形式做学习记录&#xff0c;过程很有意思&#xff0c;但也很耗时。 课程时长5h&#xff0c;涉及到很多专有名词&#xff0c;要去逐个查找&#xff0c;以前接触过的概念因为时…...

生成对抗网络(GAN)损失函数解读

GAN损失函数的形式&#xff1a; 以下是对每个部分的解读&#xff1a; 1. ⁡, ​ &#xff1a;这个部分表示生成器&#xff08;Generator&#xff09;G的目标是最小化损失函数。 &#xff1a;判别器&#xff08;Discriminator&#xff09;D的目标是最大化损失函数。 GAN的训…...