文章目录
<1>逻辑运算符与查询关键字
[1]逻辑运算符与查询关键字执行规律
1.探索的前提逻辑与思路
举个例子来说,将sql语句
select 【查询关键字】 from 【库、表名】
中的【库、表名】赋值为users。语句变成如下样子。
select 【查询关键字】 from users
查询关键字与逻辑运算符(and、or)联合使用,那么此时有以下几种情况:
- 逻辑运算符是or还是and
- 逻辑运算符左右两边的真值是什么
- 逻辑运算符左右两边的语句是字符还是数值
从以上三点可以推断出有32种情况,下面举例说明几种代表性的情况,最后总结其中的规律
值得一提的是&&、||与and、or都可以在这些情况中一样的作用,同时还要明白一点使用联合查询之后sql返回的结构要理解为一个二维数组。
2.与逻辑运算符在左右不同真值情况下的探索
- 1.左真右真
- 2.左真右假
- 3.左假右真
- 4.左假右假
由此可见与逻辑运算符左右两边都是“真”时,逻辑运算表达式可以带到sql语句中用“真”理解,否则用“否”理解。
3.或逻辑运算符在左右不同真值情况下的探索
- 1.左真右真
- 2.左真右假
- 3.左假右真
- 4.左假右假
由此可见或逻辑运算左右两边只要一方为真时,逻辑运算表达式可以被理解为“真”带入到sql语句中理解,否则按照“否”带入sql语句理解。
4.运算符判断语句是字符时字符不同的情况下真值理解
- 1.当字符是语句后面表或库中的关键字时
- 2.当字符不是语句后面表或库的关键字时
!!!!同样是字符串,为什么不是后面库表中的关键字时,语句直接报错,而有的关键字的作用和非零数字相同,而有些则和数字零的作用相同?!!!!带着问题往下看吧。。。
5.逻辑运算符与查询关键字规律总结
【1】.由上面对与运算符和或运算符的探索可以总结出的是,在查询关键字处用逻辑运算符的理解可以根据逻辑运算符的一般规律理解。
example:“假”or“假”返回对应行数个“0”,“真”or“假”返回对应行数个“1”。
【2】上面对(运算符左右两边是字符)的探索可以总结出
1.字符如果是后面表或库中的关键字,且搜索关键字在库或表中对应的值是数字则可以被当作真带入到逻辑语句的理解之中。
2.如果字符是表或库中的关键字,但对应的值是字符,则可以被当作假带入执行
3.如果搜索关键字不是表或库中的关键字的,则不能被当作假,应当作错误,执行之后会直接报错。
example:举例说明什么是对应的值,如下图字符id是users里的关键字,且对应的值是数字,而username和password也是users里的关键字但是对应的值是字符。
[2]在ctf中举例应用(逻辑运算符与查询关键字)
队逻辑运算符在结合查询关键字执行规律的应用可以看我另一篇博客,看easysql那道题(逻辑运算符与查询关键字组合规律的应用)
<2>逻辑运算符与order by
在这种情况下逻辑运算符的理解就不像之前的那么麻烦,始终记住的一点时当语句的形式如以下形式时
select * from users order by 2 and (or) 1=1;
order by都会被忽略不执行
example: