SQL注入

今天遇见了一个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 --     登录成功

 

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值