请勿截屏传播

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 逻辑操作符绕过

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

1.2.2 比较操作符绕过

  • 使用LIKE代替=
  • 使用REGEXP代替=
  • 使用范围操作符:BETWEEN、IN

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 大小写混淆

  • 混合使用大小写:UnIoN、SeLeCt
  • 使用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 布尔盲注

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

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'
    
文件下载
堆叠注入和二次注入

评论区

评论加载中...