学习复盘:SQL 注入原理、类型、手工注入及绕过防御

📅 2026/7/18 9:57:53 👁️ 阅读次数 📝 编程学习
学习复盘:SQL 注入原理、类型、手工注入及绕过防御

一、前言

  1. 今天系统继续学习了 Web 安全核心漏洞SQL 注入,主要的内容就是手动注入
  2. SQL 注入是Web 渗透最基础也最重要的漏洞,几乎所有动态网站都曾出现过,是学习网安很重要的一部分

二、理解SQL注入

1. 简单理解 SQL

SQL 是操作关系型数据库的语言,常见库:MySQL、Oracle、SQL Server、Access

关系型数据库非关系型NoSQLNoSQL虽然为非关系型但是也存在注入漏洞

2. 什么是 SQL 注入

原理:把恶意 SQL 语句插入请求参数(URL、表单、Cookie、UA、Referer)

服务端未做过滤,直接拼接 SQL 执行,导致数据库泄露

关键:闭合原有 SQL 语句,构造恶意新语句

三、SQL 注入的真实危害

  1. 泄露数据库隐私:账号、密码、手机号、用户数据
  2. 绕过登录验证:直接进后台
  3. 篡改网页、网站挂马
  4. 恶意操作数据库:删库、改管理员账号
  5. 读取服务器文件、写入木马 GetShell
  6. 远程执行系统命令、控制服务器

四、SQL 注入常见分类

1. 按数据类型分

  • 数字型:id=1无需单引号闭合
  • 字符型:username='admin'需要单引号闭合

2. 按回显方式分

  1. 联合查询注入:页面有直接回显位
  2. 报错注入:利用extractvalue报错带出数据
  3. 布尔盲注:页面分正常,报错两种状态,通过暴力破解获取数据
  4. 时间盲注:页面无变化,用sleep()睡觉判断对错

五,常见函数

报错函数:extractvalue、updatexml、exp、GTID_SUBSET()

截取函数:leftmidsubstrsubstringsubstrB)。

判断函数:ifcase when

其他函数:asciilength

数据库常见函数

六、MySQL 手工注入核心函数

  1. 截取:substr()/mid()/left()截取字符爆破数据
  2. 报错:extractvalue()、updatexml()利用错误爆数据
  3. 判断:if()、case when()用于盲注爆破数据
  4. 长度:length()判断长度
  5. 数据库信息:database()、user()、version()查库名、用户、版本
  6. 聚合函数:group_concat()一次性爆出所有查询数据

七、完整注入流程

  1. 测试是否存在注入
  2. 判断字段数
  3. 找回显示位
  4. 爆所有数据库 → 爆指定库表名 → 爆表字段 → 爆账号密码数据

八、SQLMap脚本工具使用

>python sqlmap.py

  1. 作用:自动检测、自动 SQL 注入,拿数据
  2. 常用命令:指定 URL、抓包扫描、查库-dbs、查表-D ... --tables、查字段-D ... -T ,,, -columns、导出数据-D ... -T ,,, -C ~~~ --dump
  3. 相比常规手注,使用脚本更加迅速。

九、结尾总结

  1. 今天完整过了 SQL 注入从原理→分类→手法→绕过全流程
  2. 手工注入是基础,SQLMap 是工具,先懂手工再用工具
  3. 后续多在 sqli-labs、DVWA 靶场练习,巩固各类注入和绕过思路