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


©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 第一章 让你自己习惯JavaScript JS设计的让人感觉很熟悉。语法会让人联想起Java,而且它和许多其他脚本...
    yorickJin阅读 3,188评论 0 0
  • 关于 Swift 重要这个文档所包含的准备信息, 是关于开发的 API 和技术的。这个信息可能会改变, 根据这个文...
    无沣阅读 9,896评论 1 27
  • importUIKit classViewController:UITabBarController{ enumD...
    明哥_Young阅读 9,431评论 1 10
  • [The Swift Programming Language 中文版] Swift 是一门开发 iOS, OS ...
    风林山火阅读 2,707评论 0 0
  • 今天10点半上床睡觉。 电梯说的,在2018年设定一个大方向和小目标。然后践行。 一,多增加自己的思维模型。 二,...
    tobesaiyi阅读 2,900评论 0 0