首页 > 数据库 >sql注入学习-union联合注入

sql注入学习-union联合注入

时间:2024-12-27 16:01:52浏览次数:5  
标签:语句 union 查找 sql table id 注入

  SQL 注入(SQL Injection)是一种常见的网络攻击手段,攻击者通过在 Web 应用程序的输入字段中插入恶意 SQL 代码,欺骗后台数据库执行非授权的 SQL 语句。SQL 注入可以用于获取、篡改或删除数据库中的数据,甚至可以用于执行系统命令,导致数据泄露、数据破坏或服务器被控制等严重后果。

  简单说就是通过构造一些精心设计的语句,提交到url后,它会返回后台嘛,然后这些语句会与原来的代码语句进行拼接,这样一来就可以欺骗后台数据库,让它执行我们想要执行的语句

比如这个很简单的查询语句

select *from users where username='admin' and password=123456

正常我们是输入用户名admin,但是如果我们提交 admin’ or 1=1--+,可以看看如果把这个语句放在admin的位置会怎么样,妙就妙在这个单引号,它和原先的单引号闭合了,在通过--+(这是注释符号,还有#也是注释)把后面的东西注释掉了,又因为1=1始终成立,所以就通过验证了,不需要后面的密码

目录

查找注入点

判断是字符型注入还是数字型注入

字符型判断闭合方式

判断查询的列数

union查找信息

​总结


       ok说完前面你应该知道sql注入大概是什么原理,那开始讲今天讲的union注入

首先要清楚注入的几个步骤

  1. 查找有没有注入点
  2. 判断是字符型注入还是数字型注入
  3. 如果是字符型还需要判断它的闭合方式
  4. 判断查询的列数
  5. 将回显位置改为不存在的数,以便页面显示我们要找的内容

查找注入点

查找注入点就是看看你通过get、post请求等上传参数之后页面有没有回显东西,如果页面什么都没有显示那就不存在注入点,常见存在注入点的地方:

  • 搜索框
  • url参数
  • 表单输入
  • cookies

另外一般看到?id=1这种也要去试试是不是可以注入,通过加个 ‘ 等看看页面有没有什么反应

判断是字符型注入还是数字型注入

通过提交?id=2 和?id=2-1看看页面显示的内容有没有发生变化,如果没有那就是字符型注入,因为字符型有引号围起来,数字型没有,数字型会计算2-1的值,字符型不会

这个则是字符型,如果两次结果不一样就是数字型,还有很多种方法都可以判断,只要构造好语句就行

字符型判断闭合方式

常见的闭合方式  '   ''   ')    '')    }  等等

这些做题时需要自己去测试到底是哪个

测试语句

?id=1' and '1'='1  //单引号闭合
?id=1'' and ''1''=''1  //双引号闭合
?id=1') and '1'='1    //')闭合

可以看看哪个可以正常回显,则是哪种闭合

判断查询的列数

因为union查询需要前后的列数一致才可以显示,之前的文章有说过可以用两种方式来判断,分别是

group by     order by  后面加要查询的列数,从大往小尝试,直到页面可以正常显示则是他的列数

union查找信息

首先要知道查找的顺序是什么

先找  库名-表名-列名 ,之后就可以拿到我们想要的数据了

接下来进行查找

因为页面只能显示一个信息,所以我们拿不到我们想要的信息(%27是’ ,%20是空格)

这时候将改为一个不存在的数0,-1这些即可

就拿到了数据库的名字

接下来是表名,需要知道一个数据库

  • information_schema, 它里面包含了数据库的基本信息,里面有两张数据表也需要记住
  1.  table  存放所有表名的信息
  2.  columns 存放所有列名的信息

下面就可以进行查找了,table_name是表名,table_schema是表的库名,我们在上一步已经得出是security,这里可以直接用,也可以像我一样直接用database()替代,这样子有时候不会被过滤

?id=1'union select 1,2,table_name form information_schema.table where table_schema=database()--+

这里拿到表名emails,但是可能不是我们想要的表,为了能让他显示这个数据库所有的表,需要用到之前讲过的group_concat()函数

它就会全部显示出来了,在做题时我们需要去推断我们想要的信息在哪个表里面,这里我们可以猜到应该是users这张表,之后继续去拿列名,其实就是把table改为column,之后再在where后面加上上一步得到的表名,就可以拿到列名,每一步得到的信息都是为了在后面where语句可以把范围定位的准确

?id=-1'union select 1,2,group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='users'--+ 

之后就可以查找我们想要的数据了,比如要查询用户名和密码,这里可以在用户名和密码之间加上-等符号用来分隔,以便看的清楚

?id=-1'union select 1,2,group_concat(username,'-',password)from users

总结

以上就是做union注入时的全部步骤了,需要熟练知道步骤是什么

标签:语句,union,查找,sql,table,id,注入
From: https://blog.csdn.net/2401_88235353/article/details/144646708

相关文章

  • Python作业有效性评价系统(Pycharm Flask Django Vue mysql)
    文章目录项目介绍和开发技术介绍具体实现截图开发技术开发与测试:设计思路系统测试可行性分析核心代码部分展示文章目录/写作提纲参考源码/演示视频获取方式项目介绍和开发技术介绍通过开发人员和系统使用方的沟通,本系统的用户主要有如下几类,教师和学生。(1)教师子系......
  • MySQL 备份和恢复
    1.备份恢复概述1.1为什么要备份灾难恢复:硬件故障、软件故障、自然灾害、黑客攻击、误操作测试等数据丢失场景参考链接:https://www.toutiao.com/a6939518201961251359/1.2备份类型完全备份,部分备份完全备份:整个数据集部分备份:只备份数据子集,如部分库或表完全备份、增......
  • 欧拉OpenEuler安装MySQL8
    1.安装mysqltar-xvfmysql-8.0.21-linux-glibc2.12-x86_64.tarmvmysql-8.0.21-linux-glibc2.12-x86_64/usr/local/mysql2.配置mysqlvim/etc/my.cnf[client]default-character-set=utf8mb4[mysqld]#nd-address=0.0.0.0port=3306user=mysqlbasedir=/usr/local/m......
  • PostgreSQL 初始化配置设置
    title:PostgreSQL初始化配置设置date:2024/12/27updated:2024/12/27author:cmdragonexcerpt:PostgreSQL是一款广泛应用于企业级应用、数据仓库以及Web应用程序的强大数据库管理系统。在完成数据库的安装后,进行合理而有效的初始配置是确保数据库性能和安全性的......
  • 在不同操作系统上安装 PostgreSQL
    title:在不同操作系统上安装PostgreSQLdate:2024/12/26updated:2024/12/26author:cmdragonexcerpt:PostgreSQL是当今最受欢迎的开源关系数据库管理系统之一,由于其强大的功能和灵活性,广泛应用于不同的行业和应用场景。在开始使用PostgreSQL之前,用户需要了解......
  • 免费送源码:Java+springboot+MySQL 房屋租赁系统小程序的设计与实现 计算机毕业设计原
    目 录摘要11绪论11.1选题意义11.2开发现状11.3springboot框架介绍11.4论文结构与章节安排12 房屋租赁系统小程序系统分析32.1可行性分析32.1.1技术可行性分析32.1.2经济可行性分析32.1.3法律可行性分析32.2系统功能分析32.2.1功能性分析......
  • Sql时间格式化
    selectreplace(replace(replace(CONVERT(varchar,getdate(),120),'-',''),'',''),':','')20040912110608selectCONVERT(varchar(12),getdate(),111)2004/09/12selectCONVERT(varchar(12),get......
  • 关于PHP连接MySQL数据库连接问题
    ​一、运行环境PHP版本为7.2.34MySQL版本为8.0.26二、问题运行过程中PHPthink始终无法访问到MySQL服务,且报错500响应。PHP直接连接SQL测试:<?php$servername="127.0.0.1";//数据库地址$username="root";//用户名$password="admin";//密码$database="data";......
  • GaussDB数据库SQL系列-复合查询
    一、前言GaussDB是华为自主创新研发的分布式关系型数据库,具有高性能、高安全、高可用、高弹性、高智能特点。在这篇文章中,我们将探讨在GaussDB数据库中使用复合查询的技术。复合查询是SQL查询的一个高级特性,它允许用户通过结合多个简单查询来执行更复杂的数据检索操作。这种查询......
  • GaussDB SQL查询语句执行过程解析
    ​前沿SQL于关系型数据库而言,重要性不言而喻。就像一个乐团的指挥,指导着作品的正确演绎和节奏的和谐统一。华为云GaussDB作为新一代关系型分布式数据库,具备卓越的技术性能和行业竞争力。很多人对GaussDB的关键技术很好奇:GaussDBSQL语句到底是如何执行的?GaussDBSQL引擎原理是......