学习复盘: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 靶场练习,巩固各类注入和绕过思路
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值