sqli-labs中遇到的一些小困惑

PROBLEM 1-隐式类型转化

在有一次尝试第一关时,输入了如下payload:

http://127.0.0.1/sqli-labs/Less-1/?id=1" and1=2--+

当时并不细心,犯了个很傻逼的错误:发现页面可以正常显示后,认为是单双引号的闭合问题。。。

后来折腾了下,发现 1“ and 1=2-- 是被单引号引起来的,由于sql中隐式转化的问题,上述字符串与'1'是等同的。
下面是对隐式转化的详细了解:

  • 两个参数至少有一个是 NULL 时,比较的结果也是 NULL,例外是使用 <=> 对两个 NULL 做比较时会返回 1,这两种情况都不需要做类型转换
  • 两个参数都是字符串,会按照字符串来比较不做类型
  • 转换两个参数都是整数,按照整数来比较
  • 不做类型转换十六进制的值和非数字做比较时,会被当做二进制串
  • 有一个参数是 TIMESTAMPDATETIME,并且另外一个参数是常量,常量会被转换为 timestamp 有一个参数是 decimal 类型,如果另外一个参数是 decimal 或者整数,会将整数转换为 decimal 后进行比较,如果另外一个参数是浮点数,则会把 decimal 转换为浮点数进行比较
  • 所有其他情况下,两个参数都会被转换为浮点数再进行比较

关于字符串转数字

'a'=0;      //true
'32a4b5'=32;        //true

也就是说,当把字符串转化为数字时,是从字符串左边开始,将第一个有效数字(连续的多位数字)作为其值,而当字符串第一位即为非数字,则其值为0


你可能感兴趣的:(sqli-labs中遇到的一些小困惑)