当前位置:首页 » 《随便一记》 » 正文

sql注入,关于id=‘1 and 1=1‘_m0_55306747的博客

20 人参与  2022年04月19日 11:09  分类 : 《随便一记》  评论

点击全文阅读


在做sql-labs靶场时,学到了,这个知识点很重要,当时发现这个问题困惑了我许久

正常的注入语句:select * from users where id = 1

select * from users where id = '1'也可以查询出和语句一相同的结果

select * from users where id = '$id'

令$id=1"

语句变为select * from users where id = '1"'

此时引号正常闭合,按理说应当是查询users表中,id为1"的所有数据,然后查询不到返回空才对,我一开始是这样想的,但是结果是返回了id=1的结果,

在后面加上了and1=1和and 1=2

语句变为select * from users where id = '1 and 1=1'

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

结果上面两个语句返回相同的结果,而且都返回的是id=1的结果

经过查阅资料得知,数据库中id的数据类型设置为int(数值类型)就会出现这种情况

如果数据库检查到id的参数并不为数值的话,就会发生类型转换(很简单粗暴的类型转换)

比如字符串'1'会被转换为1

比如字符串'1"'会被转换为1

比如'1 and 1=1'会被识别为1

比如'1 and 1=2'会被识别为1

比如'1akbucbdadbaiudadbabdaud'会被识别为1

比如'23adasuasdai32ansoiha'会被识别为23

字符串中数字后面的字符可以是任意的,类型转换时都会被忽略,不会对数值有任何的影响

这个特性在mysql数据库中存在,具体其它数据库中存不存在还不知道

当然,如果数据库中id列的类型设置为varchar的话,就不会发生这种情况,输入了什么就会被原样转述。


点击全文阅读


本文链接:http://zhangshiyu.com/post/38424.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

关于我们 | 我要投稿 | 免责申明

Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1