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

5-1〔OSCP ◈ 研记〕❘ SQL注入攻击▸SQL注入理论基础

    郑重声明: 本文所有安全知识与技术,仅用于探讨、研究及学习,严禁用于违反国家法律法规的非法活动。对于因不当使用相关内容造成的任何损失或法律责任,本人不承担任何责任。 如需转载,请注明出处且不得用于商业盈利。 

    💥👉点赞❤️ 关注🔔 收藏⭐️ 评论💬💥 
    更多文章戳👉
Whoami!-CSDN博客🚀

​​​​​​


𖤐 让我们开启SQL注入的新世界吧,走起 ! 

𖤐 𝓛𝓮𝓽'𝓼 𝓸𝓹𝓮𝓷 𝓾𝓹 𝓪 𝓷𝓮𝔀 𝔀𝓸𝓻𝓵𝓭 𝓸𝓯 𝓢𝓠𝓛 𝓲𝓷𝓳𝓮𝓬𝓽𝓲𝓸𝓷,𝓱𝓮𝓻𝓮 𝔀𝓮 𝓰𝓸 ! 


→ 信息收集

→ 漏洞检测

→ 初始立足点

→ 权限提升 ▸SQL注入攻击▸SQL注入理论基础-----我们在这儿~ 🔥🔥🔥

→ 横向移动

→ 报告/分析

→ 教训/修复  


目录

1.SQL注入攻击

1.1SQL理论与数据库基础

1.1.1 SQL理论基础

1.1.1.1 SQL语言分类

1. 数据查询语言(DQL)

2. 数据操作语言(DML)

3. 数据定义语言(DDL)

4. 数据控制语言(DCL)

5. 事务控制语言(TCL)

1.1.1.2 高级SQL特性

1.事务处理与ACID属性

2.索引优化

3.视图与安全

4.数据库对象关系

1.1.2 Web应用架构组件

1.1.3 主流数据库类型

1.1.3.1 SQL查询示例

1.1.3.2 在Web应用程序嵌入SQL查询

1.1.4 SQL注入攻击

1.1.4.1 SQL注入攻击原理

1.1.4.2 攻击流程解析

1.1.4.3 漏洞根本原因分析

1.1.5 常见SQL分类

1.1.5.1 主要分类概览

1.1.5.2 按技术原理分类

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

2. 布尔盲注 (Boolean-Based Blind)

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

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

5. 堆叠查询注入 (Stacked Queries)

1.1.5.3 按数据传递方式分类

1. 一阶注入 (First-Order)

2. 二阶注入 (Second-Order)

1.1.5.4 按参数类型分类

1. 数字型注入 (Numeric)

2. 字符型注入 (String)

3. 搜索型注入 (Like)

💥创作不易💥求一波暴击👉点赞❤️ 关注🔔 收藏⭐️ 评论💬


1.SQL注入攻击

        SQL注入(SQLi) 是当前最严重的Web应用安全威胁之一,在OWASP Top 10应用安全风险中排名第三。这种漏洞允许攻击者干预应用程序与数据库之间的SQL查询,访问未授权的敏感数据

⚡SQL注入(SQLi) 核心风险

  • 干预SQL查询执行

  • 访问受限数据库表

  • 潜在的系统命令执行

  • 数据泄露和篡改

1.1SQL理论

1.1.1 SQL理论基础

结构化查询语言(SQL) 是专门用于管理和交互关系数据库中数据的标准语言。

SQL主要功能:

  • ✅ 查询数据

  • ✅ 插入新数据

  • ✅ 修改现有数据

  • ✅ 删除数据

  • ⚠️ 在某些情况下执行操作系统命令

1.1.1.1 SQL语言分类

五大子语言体系:

1. 数据查询语言(DQL)

核心命令SELECT

-- 基础查询结构
SELECT 列名1, 列名2 
FROM 表名 
WHERE 条件 
GROUP BY 分组列 
HAVING 分组条件 
ORDER BY 排序列;

高级查询功能

  • 🔍 子查询:嵌套查询语句

  • 🔗 连接查询:多表关联

  • 📈 聚合函数:COUNT, SUM, AVG, MAX, MIN

  • 🎯 条件表达式:CASE WHEN

2. 数据操作语言(DML)

核心功能: 操作表中的数据

操作语法示例功能描述
INSERTINSERT INTO users VALUES (1, 'John')插入新记录
UPDATEUPDATE users SET name='Mike' WHERE id=1更新现有记录
DELETEDELETE FROM users WHERE id=1删除记录
3. 数据定义语言(DDL)

核心功能: 定义和管理数据库结构

-- 创建表
CREATE TABLE users (id INT PRIMARY KEY,username VARCHAR(50) NOT NULL,email VARCHAR(100) UNIQUE,created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);-- 修改表结构
ALTER TABLE users ADD COLUMN age INT;-- 删除表
DROP TABLE users;

主要对象

  • 📋 表(Table)

  • 🎯 索引(Index)

  • 👁️ 视图(View)

  • 🗄️ 模式(Schema)

4. 数据控制语言(DCL)

核心功能: 权限管理

-- 授予权限
GRANT SELECT, INSERT ON users TO user1;-- 撤销权限
REVOKE DELETE ON users FROM user1;
5. 事务控制语言(TCL)

核心功能: 管理数据库事务

START TRANSACTION;
UPDATE accounts SET balance = balance - 100 WHERE user_id = 1;
UPDATE accounts SET balance = balance + 100 WHERE user_id = 2;
COMMIT; -- 或 ROLLBACK;

1.1.1.2 高级SQL特性
1.事务处理与ACID属性
属性描述实现机制
原子性
(Atomicity)
事务全部完成或全部回滚事务日志
一致性
(Consistency)
保持数据完整性约束约束检查
隔离性
(Isolation)
并发事务互不干扰锁机制
持久性
(Durability)
提交后数据永久保存重做日志
2.索引优化

索引类型

  • 🔑 主键索引:唯一标识记录

  • 🎯 唯一索引:确保列值唯一

  • 📊 复合索引:多列组合索引

  • 🔍 全文索引:文本内容搜索

-- 创建索引
CREATE INDEX idx_user_email ON users(email);
CREATE UNIQUE INDEX idx_product_sku ON products(sku);
3.视图与安全
-- 创建视图隐藏敏感数据
CREATE VIEW user_public_info AS
SELECT user_id, username, created_at 
FROM users 
WHERE active = true;

-- 使用视图
SELECT * FROM user_public_info;
4.数据库对象关系


1.1.2 Web应用架构组件

组件技术栈功能描述
前端HTML, CSS, JavaScript用户界面交互:使用HTML、CSS和JavaScript编写不同的代码块创建。
后端PHP, Java, Python等业务逻辑处理:在客户端与前端交互之后,它将数据发送到运行在服务器上的后端应用层。使用多种不同的框架来构建后端应用程序.
数据库MySQL, SQL Server等数据存储管理:后端代码以各种方式与数据库中的数据进行交互,例如:检索与给定用户名相关联的密码。

1.1.3 主流数据库类型

数据库特点使用场景
MySQL开源、流行Web应用
Microsoft SQL Server企业级、Windows生态企业应用
PostgreSQL高级特性、开源复杂应用
Oracle企业级、高性能大型企业
1.1.3.1 SQL查询示例
SELECT * FROM users WHERE username='leon'
部分功能说明
SELECT *选择所有字段
FROM users从users表
WHERE username='leon'条件筛选

1.1.3.2 在Web应用程序嵌入SQL查询

为了自动化功能,Web应用程序通常在其源代码中嵌入SQL查询。

通过检查以下后端PHP代码部分,该部分负责在登录期间验证用户提交的凭据:

<?php
// 数据库连接
$con = mysqli_connect("localhost", "root", "password", "database_name");// 从POST请求获取用户输入
$uname = $_POST['username'];
$passwd = $_POST['password'];// 🚨 危险:直接拼接用户输入到SQL查询!
$sql_query = "SELECT * FROM users WHERE username='" . $uname . "' AND password='" . $passwd . "'";// 执行查询
$result = mysqli_query($con, $sql_query);// 关闭连接
mysqli_close($con);
?>

🔧 数据库连接说明

  • $con变量存储数据库连接资源

  • 使用mysqli_connect()建立连接。注意:mysqli_query()PHP函数中的 代表改进,并且不应与漏洞(因为SQLi中的i代表注入)混淆。

  • 连接参数:服务器、用户名、密码、数据库名

  • 操作完成后用mysqli_close()关闭连接


1.1.4 SQL注入攻击

1.1.4.1 SQL注入攻击原理

【攻击原理】审查上述代码片段,unamepasswd变量都是从用户的POST请求中检索并直接插入到sql_query字符串中,没有进行任何先前的检查

    这意味着攻击者可以在SQL语句执行之前修改最终的SQL语句。攻击者可以在 user或password字段中插入一个SQL语句,以破坏预期的应用程序逻辑,来查询非授权的数据。

🎯 正常场景

用户输入leon
生成SQLSELECT * FROM users WHERE username='leon'

解析上面蓝色字体是输入框输入的值leon,黑色部分是网页源代码,正常输出查询结果。

⚠️ 攻击场景

恶意输入leon' +!@#$
被篡改的SQLSELECT * FROM users WHERE username='leon' +!@#$

解析原先输入的是蓝色部分leon;后来红色部分内容leon' +!@#$,leon后带一个' ,先把leon形成一个闭环,然后又拼接了特殊字符。我们的代码块中没有检查这些特殊字符,导致被执行,这就是一个SQL注入漏洞。


1.1.4.2 攻击流程解析


1.1.4.3 漏洞根本原因分析
问题环节具体问题后果
输入验证无用户输入检查任意SQL代码执行
查询构建直接字符串拼接SQL逻辑被破坏
参数处理未使用参数化查询注入漏洞产生

1.1.5 常见SQL分类

1.1.5.1 主要分类概览
分类维度主要类型特点说明
技术原理基于错误、布尔盲注、时间盲注、联合查询、堆叠查询根据利用方式和技术手段分类
数据传递一阶注入、二阶注入(下次触发)根据攻击触发时机分类
参数类型数字型、字符型、搜索型根据注入点数据类型分类

1.1.5.2 按技术原理分类
1. 基于错误的注入 (Error-Based)

说明:利用数据库错误信息直接获取数据

-- 示例:通过错误信息获取数据库名,
' AND 1=CAST((SELECT database()) AS INT) --

备注:因为数据库名通常是非数字字符串,CAST(... AS INT) 很可能失败或返回 0,从而使该比较为假,或者在某些数据库/配置下触发类型转换错误并输出错误信息。

2. 布尔盲注 (Boolean-Based Blind)

说明:通过页面响应差异判断条件真假

-- 示例:判断用户名第一个字符
' AND SUBSTRING((SELECT username FROM users LIMIT 1),1,1)='a' --

备注:LIMIT 1 表示只取查询结果中的第一条记录。

SUBSTRING(..., 1, 1):这个函数提取上面查询结果的第一个字符,即从第一个用户名中取出第一个字母。然后和a比,如果结果是ture说明是a,反之说明不是a。

这样一直猜测,从LIMIT 1 、2、3.。。。一直盲目的猜测用户名,最终得到用户名的过程。

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

说明:通过数据库延迟判断条件真假

-- 示例:MySQL时间盲注
' AND IF(1=1,SLEEP(5),0) --

备注:观察页面的反应是否是5s后才执行,来说明语句是否被执行。

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

说明:利用UNION操作符合并查询结果

-- 示例:获取用户数据
' UNION SELECT username, password FROM users --

备注:UNION后面跟着要查询的非授权内容。

5. 堆叠查询注入 (Stacked Queries)

说明:执行多个用分号分隔的SQL语句

-- 示例:添加管理员账户
'; INSERT INTO admin_users VALUES ('hacker','pass123') --

备注:用分号来分隔并执行多个SQL语句。

1.1.5.3 按数据传递方式分类
1. 一阶注入 (First-Order)

说明:用户输入立即在SQL查询中执行

-- 示例:直接登录绕过
' OR '1'='1' --

备注:立即注入

2. 二阶注入 (Second-Order)

说明:恶意数据先存储,后续操作时触发

-- 示例:注册恶意用户名
用户名:admin' --
后续查询:UPDATE users SET password='new' WHERE username='admin' --'

备注:分阶段注入


1.1.5.4 按参数类型分类
1. 数字型注入 (Numeric)

说明:注入点为数字参数,无需引号

-- 示例:产品ID参数
?id=1 OR 1=1
2. 字符型注入 (String)

说明:注入点为字符串参数,需要引号闭合

-- 示例:用户名参数
?user=admin' OR '1'='1
3. 搜索型注入 (Like)

说明:注入点在LIKE查询中

-- 示例:搜索功能
%' AND 1=1 --

🎯 简要示例汇总

攻击类型简单示例效果
登录绕过' OR '1'='1' --绕过认证
数据提取' UNION SELECT 1,2,3 --显示额外数据
盲注探测' AND 1=1 -- / ' AND 1=2 --判断注入点
时间探测'; WAITFOR DELAY '0:0:5' --确认注入存在
系统命令'; EXEC xp_cmdshell 'dir' --执行系统命令

💥创作不易💥求一波暴击👉点赞❤️ 关注🔔 收藏⭐️ 评论💬

您的支持是我创作最大的动力!

http://www.dtcms.com/a/464737.html

相关文章:

  • 南充市企业网站建设wordpress极客主题
  • 企业做小红书关键词搜索排名推广时,怎么找到小红书上有一定搜索量但竞争度低的蓝海词?
  • 数据仓库与数据挖掘基础知识
  • 鸿蒙:使用Rating组件实现五角星打分评价
  • 外国人可以在中国做网站吗做个网站得花多少钱
  • 双均线策略
  • 【vLLM 学习】Neuron
  • 网站做行业认证好处施工企业在施工过程中发现工程设计图纸存在差错的
  • 迅为RK3576开发板挂载Windows以及虚拟机Ubuntu测试
  • 第1篇:创建基础电商AI客服
  • 【MyBatis从入门到入土】告别JDBC原始时代:零基础MyBatis极速上手指南
  • MaxScript 科研绘图教程:从数据到精确的可视化
  • org.apache.http.conn.HttpHostConnectException: Connect to localhost:8086
  • 深度学习入门(一)——从神经元到损失函数,一步步理解前向传播(上)
  • 沧州网站制作公司宁波网站的优化
  • 工程承包去哪个网站做网站的步骤 优帮云
  • 网站建设课程wordpress 去掉左上角
  • 怎么创建一个博客网站wordpress电影下载
  • 搭建网站案例精粹北京cos网站
  • 云南澄江县建设局网站做网站江门
  • 企业外贸网站建设互联网创业项目概述
  • 关于企业网站建设数据现状分析重庆百度推广关键词优化
  • 手机网站免费网站安全建设费用预算表
  • 网站seo推广计划网页制作工具可以分为
  • 北京企业建设网站制作建设网站总经理讲话范本
  • 沂南网站设计不用wordpress
  • 长春网站建设吉网传媒实力牜网页视频下载安卓
  • 用书籍上的文章做网站更新南海建设工程交易中心网站
  • 高品质网站设计制作竞价排名是按照什么来计费的
  • 上海建设房屋网站北京网页设计公司兴田德润优秀