5-2〔OSCP ◈ 研记〕❘ SQL注入攻击▸MySQL MSSQL基础
郑重声明: 本文所有安全知识与技术,仅用于探讨、研究及学习,严禁用于违反国家法律法规的非法活动。对于因不当使用相关内容造成的任何损失或法律责任,本人不承担任何责任。 如需转载,请注明出处且不得用于商业盈利。
💥👉点赞❤️ 关注🔔 收藏⭐️ 评论💬💥
更多文章戳👉Whoami!-CSDN博客🚀
𖤐 让我们开启SQL注入的新世界吧,走起 !
𖤐 𝓛𝓮𝓽'𝓼 𝓸𝓹𝓮𝓷 𝓾𝓹 𝓪 𝓷𝓮𝔀 𝔀𝓸𝓻𝓵𝓭 𝓸𝓯 𝓢𝓠𝓛 𝓲𝓷𝓳𝓮𝓬𝓽𝓲𝓸𝓷,𝓱𝓮𝓻𝓮 𝔀𝓮 𝓰𝓸 !
→ 信息收集
→ 漏洞检测
→ 初始立足点
→ 权限提升 ▸SQL注入攻击▸MySQL & MSSQL基础-----我们在这儿~ 🔥🔥🔥
→ 横向移动
→ 报告/分析
→ 教训/修复
目录
1.SQL注入攻击
1.1 数据库理论
1.1.0 主流数据库类型
1.1.1 MySQL
1.1.1.1 远程连接MySQL
1.1.1.2 基础信息查询命令
1.版本信息查询
2.用户信息查询
1.1.1.3 数据库探索命令
1.显示数据库列表
2.查询特定用户信息
1.1.2 MSSQL
1.1.2.1 远程连接MSSQL
1.SQLCMD - 官方命令行工具(cmd内用)
2. Impacket-mssqlclient(Kali Linux 工具)
1.1.2.2 MSSQL基础信息查询
1.查询数据库版本信息
2.查询有哪些数据库
3.查询某个数据库有哪些
4.查询某个表中的数据
1.1.2.3 MSSQL 核心命令总结
💥创作不易💥求一波暴击👉点赞❤️ 关注🔔 收藏⭐️ 评论💬
1.SQL注入攻击
1.1 数据库理论
在Web应用程序测试过程中,测试人员常常需要在缺乏底层数据库系统先验知识的情况下与多种SQL数据库进行交互。不同数据库在语法、功能和特性上存在显著差异,掌握这些差异对于有效测试至关重要。接下来主要说以下两种:
特性 | MySQL | Microsoft SQL Server (MSSQL) |
---|---|---|
开发商 | Oracle | Microsoft |
许可证 | 双许可(GPL/商业) | 商业 |
默认端口 | 3306 | 1433 |
分支/变体 | MariaDB | Sybase ASE |
数据库信息收集流程:
-
建立连接 → 使用mysql客户端连接目标数据库
-
环境识别 → 查询版本信息和当前用户
-
数据库枚举 → 列出所有可用数据库
-
权限评估 → 分析当前用户权限级别
-
数据提取 → 查询特定用户和认证信息
1.1.0 主流数据库类型
本文重点描述MySQL和MSSQL。
数据库 | 特点 | 使用场景 |
---|---|---|
MySQL | 开源、流行 | Web应用 |
Microsoft SQL Server | 企业级、Windows生态 | 企业应用 |
PostgreSQL | 高级特性、开源 | 复杂应用 |
Oracle | 企业级、高性能 | 大型企业 |
1.1.1 MySQL
MySQL是最常见的数据库变体之一,MariaDB是MySQL的一个开源分支。从本地Kali机器连接到远程MySQL实例。
1.1.1.1 远程连接MySQL
使用mysql命令连接远程MySQL实例:
mysql -u [用户名] -p[密码] -P 3306 -h [主机地址]
🔑 参数说明:
-
-u
:指定用户名 -
-p
:指定密码 -
-P
:指定端口(默认3306) -
-h
:指定主机地址
1.1.1.2 基础信息查询命令
1.版本信息查询
SELECT version();
功能:检索正在运行的SQL实例版本信息
2.用户信息查询
SELECT system_user();
功能:验证当前会话的数据库用户,返回MySQL连接的当前用户名和主机名。
⚠️ 重要说明:此处的
root
是数据库root用户,而非操作系统管理员root用户,仅名称相同。
1.1.1.3 数据库探索命令
1.显示数据库列表
SHOW databases;
功能:收集当前MySQL会话中可访问的所有数据库列表
2.查询特定用户信息
SELECT user, authentication_string FROM mysql.user WHERE user = 'offsec';
命令解析:
-
MySQL [mysql]>
:表示已进入MySQL系统的mysql数据库 -
SELECT user, authentication_string
:选择用户名字段和认证字符串字段(密码哈希值) -
FROM mysql.user
:从mysql数据库的user表中查询 -
WHERE user = 'offsec'
:筛选用户名为'offsec'的记录
🔒 密码哈希存储
为了提高安全性,MySQL使用Caching-SHA-256算法将用户密码加密后存储在authentication_string
字段中。
密码哈希特性:
-
原始密码的加密表示
-
不可逆的转换过程
-
相同密码每次生成的哈希值可能不同(加盐处理)
1.1.2 MSSQL
Microsoft SQL Server :深度集成到 Windows 系统的数据库管理系统,在企业环境中广泛使用。
🎯 渗透测试应用流程
-
建立连接 → 使用 impacket-mssqlclient 连接目标
-
环境识别 → 查询版本信息和当前权限
-
数据库枚举 → 通过 information_schema 探索表结构
-
架构分析 → 识别 dbo 和其他架构
-
数据提取 → 查询敏感表获取关键信息
1.1.2.1 远程连接MSSQL
1.SQLCMD - 官方命令行工具(cmd内用)
sqlcmd -S 192.168.50.18 -U Administrator -P Lab123
特性:
-
Windows 系统内置命令行工具
-
支持从另一台机器远程运行 SQL 查询
-
需要 GO 语句 来执行批处理命令
⚡ GO 语句详解
①在本地运行sqlcmd 时:
CREATE DATABASE TestDB; GO CREATE TABLE TestDB.dbo.Users (ID INT, Name VARCHAR(50)); GO
作用:分隔 SQL 批处理,每个
GO
表示一个批处理结束②远程连接中,省略 GO:
CREATE DATABASE TestDB;CREATE TABLE TestDB.dbo.Users (ID INT, Name VARCHAR(50));
❌ 不需要 GO 语句
✅ SQL Server 自动按顺序执行语句
GO 不是 MSSQL TDS 协议 的一部分
2. Impacket-mssqlclient(Kali Linux 工具)
$ impacket-mssqlclient Administrator:Lab123@192.168.50.18 -windows-auth
参数说明:
-
-windows-auth
:强制使用 NTLM 身份验证(而非 Kerberos) -
基于 Impacket 框架,支持 TDS 协议(MSSQL 专用)
🔐知识补充:NTLM 身份验证详解
什么是 NTLM?
NTLM(NT LAN Manager)是微软开发的身份验证协议,广泛应用于 Windows 网络环境。
NTLM 工作原理(三次握手)
详细流程:
客户端请求认证 → 客户端向服务器发送认证请求
服务器返回挑战 → 服务器生成并返回随机挑战值
客户端响应挑战 → 客户端使用密码哈希加密挑战值并返回
服务器验证 → 服务器验证响应是否正确
⚠️ 安全提示:由于存在安全漏洞,现代环境建议使用更安全的 Kerberos 协议
1.1.2.2 MSSQL基础信息查询
1.查询数据库版本信息
SELECT @@version;
功能:检索 MSSQL 服务器版本及底层 Windows 系统信息
返回信息包括:
-
MSSQL 服务器版本
-
Windows Server 版本
-
系统构建号
2.查询有哪些数据库
由于master、tempdb、model、msdb是默认数据库,我们只想要探索自定义offsec数据库,因为它可能包含属于我们目标的数据。
3.查询某个数据库有哪些
可以通过查询相应的information_schema中的tables表来查看这个数据库。
SELECT * FROM offsec.information_schema.tables;
命令解析:从offsec数据库的information_schema.tables视图中选择所有列的数据,通常用来查看该数据库中所有的表。
-
offsec
:目标数据库名称 -
information_schema
:系统元数据数据库 -
tables
:包含所有表信息的系统视图
什么是视图:
information_schema 就像一个书籍馆藏目录,它是一个大的“目录系统”,包含了多个“子目录”或“类别”。
tables 视图:就像书籍馆藏目录中的一本书清单,它记录了每本书的基本信息(例如书名、作者等),但并没有储存书的实际内容。
表和视图的区别?
📋 information_schema 视图家族
视图名称 | 功能描述 | 应用场景 |
---|---|---|
tables | 所有表的基本信息 | 数据库表枚举 |
columns | 所有列的元数据 | 表结构分析 |
views | 所有视图信息 | 视图对象识别 |
schemata | 数据库架构信息 | 数据库环境了解 |
🔍 查询结果示例
TABLE_CATALOG | TABLE_SCHEMA | TABLE_NAME | TABLE_TYPE |
---|---|---|---|
offsec | dbo | users | BASE TABLE |
字段解释:
-
TABLE_CATALOG
:表所在数据库 → offsec -
TABLE_SCHEMA
:表架构 → dbo -
TABLE_NAME
:表名称 → users -
TABLE_TYPE
:表类型 → BASE TABLE(基础表)
🏗️ 数据库架构(Schema)概念
①什么是架构?
架构 就像是数据库中的分类文件夹,用于组织和权限管理。
②架构的作用
功能 说明 示例 组织管理 相关对象分组 用户相关表 → UserSchema 权限控制 精细化权限管理 Sales组只能访问Sales架构 避免命名冲突 相同表名不同架构 Sales.Orders vs HR.Orders ③dbo 架构说明
dbo = Database Owner(数据库所有者)
默认表模式,通常为数据库管理员或系统管理员所有
拥有对数据库中所有对象的完全权限
4.查询某个表中的数据
查询数据库offersec的users表中的数据。
SELECT * FROM offsec.dbo.users;
查询结果示例:
用户 | 密码 |
---|---|
admin | lab |
guest | guest |
发现:
-
表包含两列:用户 和 密码
-
两行记录:admin 和 guest 用户
-
⚠️ 明文密码存储 - 严重安全隐患
1.1.2.3 MSSQL 核心命令总结
命令类别 | 具体命令 | 功能描述 | 应用场景 |
---|---|---|---|
连接命令 | impacket-mssqlclient | 远程连接MSSQL | 渗透测试连接 |
信息查询 | SELECT @@version | 获取系统版本 | 环境识别 |
数据探索 | SELECT * FROM information_schema.tables | 枚举所有表 | 信息收集 |
架构查询 | SELECT * FROM db.schema.table | 查询特定架构表 | 目标数据访问 |
数据提取 | SELECT * FROM table | 提取表数据 | 敏感信息获取 |
💥创作不易💥求一波暴击👉点赞❤️ 关注🔔 收藏⭐️ 评论💬
您的支持是我创作最大的动力!