sql语句中关于1 and 1=2详解

2023-11-18

在通关sqli-labs的时候 我经常会遇到这么一个问题 那就是

id=1

id='1 and 1=2'

的查询结果是一致的

我一直以来都很疑惑!!

然后寻求了很多文章 终于解决了我的问题

我们将其放在sqlyog里面去讲解

我先给你们展示一下我users表格下id字段的内容吧

首先我们查询一下id为1时候的结果

输入如下

select id from users id=1;

回显如下

然后查询一下id值为1 and 1=2的结果

输入如下

select id from users where id=1 and 1=2;

 回显如下

 再查询一下id值为'1 and 1=2'的结果

输入如下

select id from users where id='1 and 1=2';

回显如下

三种结果有两种一样 一种不一样的 我们分别来解析一下子

对于第一种 很简单的 不用详细说了吧 

然后第二种的话 id=1 and 1=2

这个优先级的话是 and > = 所以说先进行逻辑与的运算 1 and 1结果为1 然后再进行算术运算1不等于2 所以说结果为0 因此查询不到东西

然后第三种的话 id='1 and 1=2'这就涉及到一个类型转换问题了

由于id本身属于数字类型的 而我们注入的属于字符类型的 所以当然要进行一下类型转换啦

而且这边的类型转换比较奇葩 他是将'1 and 1=2'直接转换成了'1' 然后'1'的查询结果和1的查询结果自然也可以通过类型转换从而等价啦

类似的你还可以试试看'2 and 1=2'、'3 and 1=2'、'2 and 1=1'、2 and 1=1、('2 and 1=1')……

接着我们再去解析一下如何区分数字型和数字型又带了括号的情况:

首先对于数字型的情况

输入如下

select id from users where id=2 and 1=1;

回显如下

 然后对于即使数字型又带了括号的情况

输入如下

select id from users where id=(2 and 1=1);

由于数字中除了0表示假 其他数字都表示为真

所以2 and 1=1等价于说1=1 那么1=1的结果自然就是1了 所以说查询的自然也就是id值为1的结果了

不信看看sqlyog查询出来的结果

回显如下

所以通过这样子的讲解应该对数字型下如何判断是否带括号有一定的认识了吧

那这篇文章就先讲到这里!!嗨嗨

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

sql语句中关于1 and 1=2详解 的相关文章

  • hive sql查找最新记录

    该表是 create table test id string name string age string modified string 像这样的数据 id name age modifed 1 a 10 2011 11 11 11 1
  • 分组和切换列和行

    我不知道这是否会被正式称为枢轴 但我想要的结果是这样的 Alex Charley Liza 213 345 1 23 111 5 42 52 2 323 5 23 1 324 5 我的输入数据采用这种形式 Apt Name
  • 根据由另一列分组的不同列的最大值获取值[重复]

    这个问题在这里已经有答案了 我想根据由另一列分组的不同列的最大值来获取列的值 我有这张表 KEY NUM VAL A 1 AB B 1 CD B 2 EF C 2 GH C 3 HI D 1 JK D 3 LM 并想要这样的结果 KEY V
  • 需要 SQL 查询澄清[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我有一个由以下列组成的表 billid patientid doctorid fees 如何显示治疗多名患者的医生 尝试了以下代码并得到了
  • 何时在 mysql 中使用 Union [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 对于 Union 您会在什么现实情况下使用它 因为对我来说 对具有不同列用途 含义的两个表中的两个选择查询使用联合是没有意义的 例如
  • 使用联接更新表?

    我正在尝试使用表 B 中的数据更新表 A 我以为我可以做这样的事情 update A set A DISCOUNT 3 from INVOICE ITEMS A join ITEM PRICE QUNTITY B on A ITEM PRI
  • 在上下文中提取搜索字符串

    我正在尝试执行 MySQL 查询 在上下文中提取搜索字符串 因此 如果搜索是 mysql 我想从 body 列返回类似的内容 下载后只需几分钟MySQL安装程序即可使用 这就是我现在得到的 但它不起作用 因为它只是从正文字段中获取前 20
  • Laravel 5.4 升级 - 违反完整性约束 - 列不能为空

    奇怪的是 所有这些都在 5 2 中工作 但我不知道可以改变什么来实现这一点 下面是错误和正在插入的数组 SQLSTATE 23000 Integrity constraint violation 1048 Column gender can
  • NVARCHAR 变量在Where 子句中不起作用

    在 SQL Server 我想是 2018 我不知道如何判断 中 我的变量不起作用WHERE的条款NVARCHAR 比较应该返回值 但它什么也没返回 如果我只是手动输入声明的文本 它会突然起作用并返回值 没有任何逻辑原因应该有任何不同 类型
  • MySQL Python 关于重复键更新值

    我正在研究使用 python 将 JSON 数据上传到 MySQL 我需要在插入语句中包含 ON DUPLICATE KEY UPDATE VALUES 但在 Python 中遇到了问题 如果我运行以下代码 一切正常 import json
  • 3 个表的 SQL 查询(或联接)

    第一次在 Stack Overflow 上问问题 很棒的资源 但是只有一件事真正让我作为 SQL 新手感到困惑 我有三个表 我想获取与鲍勃的学生相关的所有导师的姓名 表 1 教师 ID Name 1 Bob 表 2 学生 STUDENT I
  • Java、Oracle 中索引处缺少 IN 或 OUT 参数:: 1 错误

    您好 我使用 Netbeans 8 0 2 和 Oracle 11g Express Edition 在 JSF 2 2 中编写了一个图书馆管理系统 我有几个名为 书籍 借阅者 等的页面 以及数据库中一些名为相同名称的表 我的问题是这样的
  • MySQL 数据库无法在 XAMPP for Mac 上启动

    突然我在 mac 上遇到了这个问题 我无法启动我的 MySQL 数据库 我只能启动 ProFTPD 和 Apache Web Server 这是应用程序日志 Starting all servers Starting MySQL Datab
  • 加载数据infile,Windows和Linux的区别

    我有一个需要导入到 MySQL 表的文件 这是我的命令 LOAD DATA LOCAL INFILE C test csv INTO TABLE logs fields terminated by LINES terminated BY n
  • AWS RDS MySql - 如何在设置“公开可用”后允许访问

    刚刚使用默认设置和用户 密码创建了新的 AWS RDS MySql 实例 我也将其设置为publicly available并在此过程中创建新的 VPC 目前无法从我的笔记本电脑连接到此 RDS mysql h endpoint u myu
  • 使用连接池后如何处理过多的并发连接?

    Scenario 假设您有一个拥有大量流量的网站或应用程序 即使使用数据库连接池 性能也会受到真正的打击 站点 应用程序甚至可能崩溃 因为并发连接太多 Question 人们有什么选择来处理这个问题 我的想法 我在想有这个问题的人可以创建多
  • 使用来自另一个数据库的选择查询更新 mysql 表

    我有两个数据库 我想用另一个数据库表中的值更新一个表 我正在使用以下查询 但它不起作用 UPDATE database1 table1 SET field2 database2 table1 field2 WHERE database1 t
  • MySQL 可选的带有 MATCH 的 LEFT JOIN

    我有以下查询 它对 MySQL Innodb 数据库中同一搜索词的两个不同表中的两列执行全文搜索 SELECT Id MATCH tb1 comment tb2 comment AGAINST search term IN BOOLEAN
  • Oracle:按月分区表

    我的解决方案 德语几个月 PARTITION BY LIST to char GEBURTSDATUM Month PARTITION p1 VALUES JANUAR PARTITION p2 VALUES Februar PARTITI
  • mysql-connector-c++ - “get_driver_instance”不是“sql::mysql”的成员

    我是 C 的初学者 我认为学习的唯一方法就是接触一些代码 我正在尝试构建一个连接到 mysql 数据库的程序 我在 Linux 上使用 g 没有想法 我运行 make 这是我的错误 hello cpp 38 error get driver

随机推荐