DVWA SQL 注入:两种查表字段 Payload 结果差异详解
一、问题引入在 DVWA Medium 级别 SQL 注入实验中我们通过 Burp Suite 抓包改包对users表字段进行查询时会遇到两种看似不同的执行结果图 1逐行展示users表的每一个字段名图 2一行展示user表的所有字段名用逗号分隔很多新手会疑惑明明都是查users表字段为什么结果形式完全不同本文就来拆解背后的原理帮你彻底搞懂两种 Payload 的差异。二、两张图的 Payload 核心差异1. 图 1逐行显示字段的 Payloadid1 AND 12 UNION SELECT 1, column_name FROM information_schema.columns WHERE table_name0x7573657273 AND table_schema0x64767761 #2. 图 2一行显示所有字段的 Payloadid1 union select 1,group_concat(column_name) from information_schema.columns where table_schema0x64767761 and table_name0x7573657273SubmitSubmit核心区别是否使用GROUP_CONCAT()聚合函数三、原理拆解为什么结果形式不一样1.GROUP_CONCAT()的作用GROUP_CONCAT()是 MySQL 的聚合函数核心作用是将查询到的多行结果合并成一个单行字符串默认用逗号分隔。2. 两种 Payload 的执行逻辑1未使用GROUP_CONCAT()图 1Payload 直接查询column_name字段MySQL 会逐行返回users表的每一个字段每一行对应一个字段user_id、first_name、last_name等页面会逐行展示每一条查询结果因此出现多行显示的效果适合逐个查看字段结果清晰直观2使用GROUP_CONCAT()图 2Payload 用GROUP_CONCAT(column_name)将所有字段名聚合拼接成一个字符串MySQL 会把多行字段名合并为一行用逗号分隔页面一次性展示全量字段适合快速枚举库表结构是渗透测试中最常用的字段枚举写法效率更高3. 为什么都能成功执行两张图的 Payload 都用了16 进制编码0x64767761代表dvwa0x7573657273代表users完美绕过了 Medium 级别addslashes()的单引号转义因此都能成功执行只是数据展示形式不同。四、两种写法的优缺点对比写法优点缺点适用场景不使用GROUP_CONCAT()逐行结果清晰逐行展示适合逐个分析字段页面展示行数多不适合快速枚举实验报告、字段逐个验证使用GROUP_CONCAT()一行一次性获取全量信息效率高适合渗透测试字段过多时可能出现截断DVWA 场景无影响快速枚举库表结构、渗透测试实战五、实验结论两张图的结果都是正确的本质都是 Medium 级别 SQL 注入的成功执行差异仅源于SQL 查询逻辑不同GROUP_CONCAT()的使用与否决定了结果展示形式两种 Payload 均成功绕过 Medium 级别「前端限制 单引号转义」的防护证明 Medium 级别存在严重 SQL 注入漏洞仅靠前端限制、简单转义无法防御 SQL 注入正确防护必须使用参数化查询预编译语句
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2478806.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!