数据库
首页 > 数据库> > MySQL =号的特殊用法

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=2false所以没有数据,但并不是就这么简单,接着来看有意思的语句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