SQL注入

一、SQL注入攻击类型

1. 基于错误的注入(Error-Based)

原理:通过故意触发数据库错误,获取数据库类型/结构信息

攻击示例:

复制代码
AND 1=CONVERT(int, (SELECT @@version)) --

2. 联合查询注入(Union-Based)

利用UNION操作符合并恶意查询结果

步骤:

  1. 确定字段数:ORDER BY 4--

  2. 探测回显位置:UNION SELECT 'A','B','C'--

3. 布尔盲注(Boolean Blind)

通过页面返回真假状态推测数据

复制代码
AND (SELECT SUBSTRING(password,1,1) FROM users WHERE id=1)='a' -- 

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

利用延时函数判断条件真假

MySQL示例:

复制代码
AND IF(ASCII(SUBSTRING(database(),1,1))>100, SLEEP(5), 0) -- 

二,挖掘SQL注入漏洞

步骤1:寻找注入点

目标:URL参数、表单字段、Cookie、HTTP头部

探测方法:提交单引号 触发数据库错误

步骤2:判断数据库类型

MySQL:SELECT @@version

MSSQL:SELECT @@version

Oracle: SELECT banner FROM v$version

步骤3:自动化工具辅助

复制代码
sqlmap -u "http://example.com?id=1" --risk=3 --level=5 --dbs

三、防御方案

  1. 参数化查询(预编译语句)
python 复制代码
cursor.execute("SELECT * FROM users WHERE name = %s", (username,))
  1. 输入验证与过滤

白名单校验:如数字类型强制转换intval($input)

敏感字符黑名单:'",;()/*等

  1. 最小权限原则

数据库账户禁止使用root/sa等高权限账号

按需分配SELECT/UPDATE权限

  1. 其他加固措施

启用WAF(Web应用防火墙)

错误信息模糊处理,避免泄露数据库结构

定期扫描:使用Acunetix、AppScan等工具

四、高级攻击与防御演进

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

特征:恶意数据先存储再触发,防御难度高

防御:所有外部输入均视为不可信,包括数据库读取的数据

  1. NoSQL注入

新兴威胁:MongoDB、Redis等非关系型数据库同样存在注入风险

防御示例(MongoDB):

使用ORM框架自带过滤

javascript 复制代码
UserModel.findOne({ username: userInput });
相关推荐
hbwhmama9 分钟前
python高级变量XIII
python
Winwin39 分钟前
js基础-数据类型
javascript
费弗里40 分钟前
Python全栈应用开发利器Dash 3.x新版本介绍(3)
python·dash
Winwin40 分钟前
哈?Boolean能作为回调函数?
javascript
Shartin44 分钟前
CPT208-Human-Centric Computing: Prototype Design Optimization原型设计优化
开发语言·javascript·原型模式
独立开阀者_FwtCoder1 小时前
你用 Cursor 写公司的代码安全吗?
前端·javascript·github
dme.1 小时前
Javascript之DOM操作
开发语言·javascript·爬虫·python·ecmascript
摸鱼仙人~1 小时前
React Ref 指南:原理、实现与实践
前端·javascript·react.js
teeeeeeemo1 小时前
回调函数 vs Promise vs async/await区别
开发语言·前端·javascript·笔记
加油吧zkf1 小时前
AI大模型如何重塑软件开发流程?——结合目标检测的深度实践与代码示例
开发语言·图像处理·人工智能·python·yolo