当前位置: 首页 > java >正文

[特殊字符] 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 是黄金标准。

http://www.xdnf.cn/news/2462.html

相关文章:

  • Zookeeper断开连接时分布式锁释放问题的解决方案
  • 基于深度学习的智能交通流量监控与预测系统设计与实现
  • vue3 vite打包后动态修改打包后的请求路径,无需打多个包给后端
  • 从基础到实战的量化交易全流程学习:1.3 数学与统计学基础——概率与统计基础 | 数字特征
  • 常用第三方库:shared_preferences数据持久化
  • 基于大模型的急性化脓性阑尾炎全程诊疗预测与方案研究
  • 【音视频】视频解码实战
  • RAG(Retrieval-Augmented Generation,检索增强生成)
  • CSDN编辑文章时如何自动生成目录
  • 生成式人工智能认证(GAI认证)含金量怎么样?
  • 雪铁龙C5车机系统恢复
  • Java使用微信云服务HTTP API操作微信云开发数据库
  • Redis 缓存并发问题深度解析:击穿、雪崩与穿透防治指南
  • Java + Seleium4.X + TestNG自动化技术
  • 第三方软件检测报告:热门办公软件评估及功能表现如何?
  • Linux用户管理
  • 内存四区(堆)
  • Git命令(Gitee)
  • Linux—— 版本控制器Git
  • Linux 在个人家目录下添加环境变量 如FLINK_PROPERTIES=“jobmanager.rpc.address: jobmanager“
  • Android LiveData关键代码
  • Docker小游戏 | 使用Docker部署文字修仙网页小游戏
  • Xray-安全评估工具
  • 月之暗面开源-音频理解、生成和对话生成模型:Kimi-Audio-7B-Instruct
  • 【DNS】BIND9 域名解析快速入门
  • Spring框架的ObjectProvider用法
  • 【C++】类和对象【中上】
  • C++ 完全数
  • Android四大核心组件
  • Linux(Centos版本)中安装Docker