MySQL 运算符绕过

在PHP中:

对于select pass from user where username = {$username}的查询语句

当$username=7<0x1时,这一个比较的运算,运算结果为true\

接下来是在MySQL中:

这里先拼接一下SQL语句

select pass from user where username = 7<1

在这个语句中,SQL会先进行语法检测,检测表中是否有字段username再进行查询,由于这里有一个比较运算符,所以查询语句再执行从查询前会先进行比较运算错误就出现在比较运算中,这里比较运算错误的将username=7看做了一个字符串,1看作了另一个字符串,而在SQL中,比较运算符为弱比较,相当于PHP中的==运算符,他会先将两个字符串进行同类型转换,结果这里就将username = 7转换为了数字,但是由于第一个字符不是数字而是字符u,因此这里就将username=7转换为0而0是小于1的,所以运算顺序何以理解为:

username = 7<1

转换username=7这个字符串:

0<1

比较运算符运算:

true

最终的查询语句变为:

select pass from user where true

综上所述,我们就可以将这个查询语句理解为:

select pass from user where true

同时我们可以认为:

select pass from user where username = 7<1

select pass from user where 'username = 7'<1

是等价的

select pass from user where 'username = 7'>'1'

也是等价的

以下时MySQL的测试语句

select username=7<1;#1即为true
select 'username=7'<1;#1即为true
select 'username=7'>'1';#1即为true
select '2a'<'1';#0即为false,两字符串的比较逻辑是该字符的ASCII码乘
#上该字符所在位置的下标,比方说2a的字符串'大小'是char(2)*1+char(a)*2
#'1'则是同理char(1)*1

以上仅为个人见解,如有错误还请指出更正 

相关推荐

  1. MySQL 运算符

    2024-06-12 20:04:02       26 阅读
  2. CDN

    2024-06-12 20:04:02       20 阅读
  3. 大小写与双写

    2024-06-12 20:04:02       29 阅读
  4. 二、sql过滤

    2024-06-12 20:04:02       61 阅读
  5. SQL注入技术

    2024-06-12 20:04:02       56 阅读
  6. XSS方法总结

    2024-06-12 20:04:02       58 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-12 20:04:02       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-12 20:04:02       106 阅读
  3. 在Django里面运行非项目文件

    2024-06-12 20:04:02       87 阅读
  4. Python语言-面向对象

    2024-06-12 20:04:02       96 阅读

热门阅读

  1. 【react】useState 使用指南

    2024-06-12 20:04:02       32 阅读
  2. linux常用的基础命令

    2024-06-12 20:04:02       24 阅读
  3. CountDownLatch闭锁

    2024-06-12 20:04:02       33 阅读
  4. uniapp怎么实现条形码

    2024-06-12 20:04:02       34 阅读
  5. 7. 通配符和正则表达式

    2024-06-12 20:04:02       21 阅读
  6. Kotlin可空类型与非空类型以及`lateinit` 的作用

    2024-06-12 20:04:02       36 阅读
  7. Python 实现简单的超图

    2024-06-12 20:04:02       31 阅读
  8. MySQL练习题

    2024-06-12 20:04:02       30 阅读
  9. spring 常用注解

    2024-06-12 20:04:02       30 阅读
  10. torchvision笔记 torchvision.ops.sigmoid_focal_loss

    2024-06-12 20:04:02       31 阅读