MySQL =号的特殊用法
作者:互联网
今天在绕Waf的时候通过fuzz看到了一个奇怪的姿势,于是把人家的payload的拆开了去学习了一波,发现了好玩的东西,学废了学废了。
0x01 语句测试
正常语句
mysql> select * from test where id=1;
+------+-------+------+
| id | name | flag |
+------+-------+------+
| 1 | baynk | 1 |
+------+-------+------+
1 row in set (0.00 sec)
有意思的语句1
mysql> select * from test where id=1=1;
+------+-------+------+
| id | name | flag |
+------+-------+------+
| 1 | baynk | 1 |
+------+-------+------+
1 row in set (0.00 sec)
有意思的语句2
mysql> select * from test where id=1=2;
Empty set (0.00 sec)
mysql>
看到这,大多数人都会认为1=1
是真也就是true
,正常显示,而1=2
是false
所以没有数据,但并不是就这么简单,接着来看有意思的语句3
mysql> select * from test where id=1=0;
+------+--------+------+
| id | name | flag |
+------+--------+------+
| 2 | tutub | 1 |
| 3 | tusiji | 1 |
| 4 | baynk | 1 |
| 5 | tutub | 1 |
| 6 | tusiji | 1 |
+------+--------+------+
5 rows in set (0.00 sec)
有意思的语句4
mysql> select * from test where id=2=0;
+------+--------+------+
| id | name | flag |
+------+--------+------+
| 1 | baynk | 1 |
| 3 | tusiji | 1 |
| 4 | baynk | 1 |
| 5 | tutub | 1 |
| 6 | tusiji | 1 |
+------+--------+------+
5 rows in set (0.00 sec)
应该能发现不同了吧。
最终测试结果如下:
select * from test where id=1 =1;
这句应该是选择id=1的行,后面=1应该是代表true,0代表false,1代表true
select * from test where id=2 =1;
这句应该是选择id=2的行,后面=1应该是代表true,0代表false,1代表true
select * from test where id=2 =2
这句应该是选择id=2的行,后面=2没有任何含义,应该只能=0或者=1
select * from test where id=2 =0
这句应该时候选择id=2的行,但是后面=0表示false取反,也就是选择id不等于2的行。
嘿嘿,挺有意思的吧,接下来来看实战运用。
0x02 实战运用
我自己想法就是当and
不能使用时,可以直接使用=
来代替。
比如and
关键字被过滤
此时可以使用=
号来进行测试,正常显示
除了admin
以外的所有数据
当然由于DVWA环境的特殊性,这里会显示所有,如果是用正常网站会显示出另外一个页面,我已经测试过了,大家也可以自己测试下。
还可以使用=2
此时肯定就没回显了。
也可以通过类型这种方法来做布尔注入。
以上就能说明当前用户名的长度是等于14
的。
可能还有啥其它妙用,后面发现了再测试。
标签:特殊,mysql,用法,+------+--------+------+,MySQL,test,where,id,select 来源: https://blog.csdn.net/u014029795/article/details/116523098