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

第一次看懂 SQL 注入利用流程:从判断字段数到获取数据库信息

前两天学习了 SQL 注入为什么会产生以及数字型注入和字符型注入的区别。

本来以为学会这些就差不多了,结果继续往后看发现:真正有意思的部分才刚刚开始。

因为攻击者发现注入点之后,并不是直接就能看到数据库里的内容。

他们需要一步一步摸清数据库结构,最终才能获取想要的数据。

今天就来梳理一下 SQL 注入最经典的利用流程。

一、一个完整的 SQL 注入过程

很多人以为攻击过程是这样的:

发现漏洞

直接获取数据

实际上更像这样:

每一步都有自己的作用。

二、第一步:判断是否存在注入

假设网站链接:

http://test.com/news.php?id=1

后台执行:

SELECT * FROM news WHERE id=1;

如果在参数后面添加一个单引号: ?id=1'

变成:

SELECT * FROM news WHERE id=1';

SQL 语法可能出现错误。

如果页面报错,就说明这里可能存在 SQL 注入。

很多渗透测试人员第一步都会尝试这种简单测试。

三、第二步:判断字段数量

确定存在注入之后,需要知道查询结果有多少列。

为什么要知道列数?

因为后面使用 UNION 查询时,列数必须一致!!!

例如:

SELECT id,title,time FROM news;

这里实际上有三列:

id
title
time

攻击者通常会逐步测试:

ORDER BY 1
ORDER BY 2
ORDER BY 3
ORDER BY 4

如果执行到:

ORDER BY 4

页面报错。

说明原始查询最多只有三列。

因此可以判断:

字段数 = 3

这一步非常重要。

后面的所有操作都建立在字段数正确的基础上。

四、第三步:什么是 UNION 联合查询

这一步是我今天最大的收获。

很多教程上来就写: UNION SELECT 1,2,3

但不解释为什么。

实际上 UNION 的作用非常简单:把两条查询结果拼接到一起

例如:

第一条查询:

SELECT name FROM users;

结果:

Tom
Jack
Lucy

第二条查询:

SELECT city FROM users;

结果:

Beijing
Shanghai
Guangzhou

使用 UNION:SELECT name FROM users UNION SELECT city FROM users;

结果会被合并。

所以攻击者就能借助 UNION 把自己构造的数据插入到网页返回结果中。

五、第四步:寻找回显位

知道字段数以后。

攻击者会尝试:UNION SELECT 1,2,3

如果网页显示:

2

说明第二列的数据会显示在页面上。

如果显示:

3

说明第三列可以回显。

这种能够显示到页面的位置叫:回显位

找到回显位之后。

攻击者就能把数据库信息显示出来。

六、第五步:获取数据库信息

找到回显位以后。

攻击者会把数字替换成数据库函数。

例如:database()

作用:获取当前数据库名称

例如返回:security

说明当前数据库名字叫:security

还可以获取:version() 查看数据库版本。

user() 查看数据库运行账户。

这样攻击者就逐渐掌握了目标数据库的信息。

七、为什么攻击者总能获取数据

以前我一直以为:

数据库被入侵是因为攻击者掌握了什么特殊权限。

学习之后发现并不是。

很多情况下数据库根本没有被破解。

攻击者只是利用了程序本身提供的查询功能。

程序允许执行 SQL。

攻击者控制了 SQL 的内容。

于是原本用于查询新闻、查询商品的功能,就被拿来查询数据库信息了。

八、总结

今天最大的收获就是理解了 SQL 注入利用链。

以前看到各种 Payload 总觉得特别复杂。

现在发现其实逻辑非常清晰:

先确定有没有注入。

再确定字段数。

然后寻找回显位。

最后逐步获取数据库信息。

整个过程就像摸黑找路。

攻击者并不是一下子就知道数据库结构。

而是通过一次次测试慢慢获得信息。

http://www.cnnetsun.cn/news/2701177.html

相关文章:

  • D43: 项目验收文档自动化
  • 拆解Geant4模拟内核:Run、Event、Step、Track到底怎么工作?给初学者的可视化解读
  • AI 内容泛滥时代,技术驱动型品牌如何构建可信的 “活人感“ 运营体系
  • Windows 11 LTSC系统安装微软商店的终极指南:3步告别应用荒
  • ArcGIS JS 态势标绘教程:扇形(Sector)
  • 大卷积核的‘文艺复兴’:从RepLKNet到UniRepLKNet,我们该如何设计下一个通用视觉主干网络?
  • 手把手教你用带参数的FC写一个‘万能’星三角启动程序(附TIA Portal V18程序截图)
  • SonarQube 里给 AI 代码做扫描
  • 别再问红外图像为啥时黑时彩了!一文搞懂红外成像原理与伪彩色增强(附Python代码示例)
  • PyTorch三模型面部表情识别实战包:CNN/VGG/ResNet一键运行,含人脸检测、预训练权重与演示图
  • 基于OpenCode的Harness架构实战v2.2(windows系统)
  • STS-Bcut语音转字幕终极指南:3步实现视频自动字幕生成
  • Linux tar打包压缩全参数详解——打包、压缩、解压、查看、排除文件完整实战
  • 智慧工厂里的视觉技术革命(19)
  • UE5 GAS实战:用Meta Attributes和Set by Caller,让你的RPG伤害计算告别混乱
  • Gitlab安装与配置
  • 从CT原始DICOM到4K手术教学动画:Sora 2端到端工作流仅需22分钟——华西医院介入科实测全链路拆解
  • Windows下MMDetection从安装到跑通第一个目标检测Demo(含权重文件下载与路径配置)
  • 必应推广核心逻辑拆解 杭州服务商选择指南
  • 告别Wi-Fi死角?手把手教你用LED灯泡和树莓派搭建一个简易Li-Fi热点(附Python代码)
  • 信A第十二周题解
  • RLinf系统:强化学习工作流动态调度与优化实践
  • 3.57 OFVL-MS:一次用于多个室内场景的视觉定位
  • 2. OpenClaw 架构落地指南:部署、渠道集成与安全边界全解
  • 告别闭集检测:用Grounding DINO实现‘指哪打哪’的开放世界目标检测
  • 3分钟掌握res-downloader:全网资源一键下载的终极方案
  • AI生成图能注册版权吗?(美国版权局2023-2024全部裁定原文深度拆解)
  • 从Arduino到KSP实体控制台:硬件架构、通信协议与工程实践全解析
  • 机器学习三大范式解析:从监督学习到强化学习的实战指南
  • 别再到处找安装包了!2024年JDK 8/17/21最新版(含401补丁)一键下载与环境变量配置保姆级教程