您的位置:首页 > 数据库

SQL注入

2020-06-24 04:26 567 查看

今天遇见了一个SQL注入未曾关注的问题,虽然年华小姐姐讲解了一番,但还是没能很透彻的明白,以此记录,再找机会弄明白。*****where user='admin'   password='123123';

 

用户名正确,密码错误,where查询的结果为“false”,so无结果

用户名正确,密码错误,结果为“false”;

1恒等于1,结果为“true”;

所以where查询的结果为“true”,but为什么会将user表中这两个字段的所有值查询出来?

where后面只有1=1,恒为“true”,but为什么能全部查出来?

关于SQL查询机制,年华小姐姐是这样解释的:

第一条语句:select user,password from users where user='admin' and password='123456md5的值';

首先,将表中第一条数据(admin)提取出,判断where后面的admin是否等于表中admin&判断123456的md5值是否等于表中admin对应的password值,如果都相等,那么where语句为true,再一次对第二条第三条对应的值进行判断。最终会将符合where条件的值显示出。

第二条语句:select user,password from users where 6=6;

首先确认,6恒等于6,所以where语句恒为true。现在进行判断,先拿出第一条数据,判断where后面的语句是否为真,为真就输出,那么第一条将被输入,第二条、第三条、第n条一次被显示出,所以1=1会显示出表中所有的内容。

好,现在来到了SQL注入的万能密码环节。

1、  ' or 1=1

SQL语句为:  select......where user='' or 1=1 and password='';

会将所有的内容查出,但是否能登陆成功就要看程序员如何写的网站验证机制了(源码),如果要求查询出的列数>=1,就可以登录;如果相反,则不能登录。

 

DVWA---Brute Force(Low)

测试语句1:  amdin' or 1=1 --           未登录成功

sql中执行结果:

 

测试语句2: admin' or '1'='1' --     登陆失败

 

测试语句3: admin' or '1'='1 --     登录成功

 

 

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: