目录

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 });
本文是转载文章,点击查看原文
如有侵权,请联系 xyy@jishuzhan.net 删除
相关推荐
Blood_J31 分钟前
python网络爬虫
开发语言·爬虫·python
一个数据大开发32 分钟前
如何将excel数据快速导入数据库
数据库·excel
野生胡萝卜37 分钟前
处理Excel表不等长时间序列用tsfresh提取时序特征
python·excel·tsfresh
前端_yu小白2 小时前
js异步机制
前端·javascript·async·promise·await·js异步·回调地狱
Spider Cat 蜘蛛猫2 小时前
chrome extension开发框架WXT之WXT Storage api解析【补充说明一】
前端·javascript·chrome
一介草民丶3 小时前
Mysql | 主从复制的工作机制
数据库·mysql·oracle
hawk2014bj3 小时前
Ubuntu 安装 MySQL
android·mysql·ubuntu
zhanghongyi_cpp4 小时前
4. “3+3”高考选考科目问题
python
程序猿John5 小时前
ES6 新增特性 箭头函数
前端·javascript·es6
@大迁世界6 小时前
彻底改变我 React 开发方式的组件模式
前端·javascript·react.js·前端框架·ecmascript