SQL注入之如何绕过and,union,where,limit过滤绕过

本文介绍了在SQL查询中,如何在遇到and、or、union等关键字被过滤时,利用&&、||和子查询来替代这些运算符进行数据筛选。同时,展示了当where和limit被过滤时,可以使用limit和groupby函数进行替代的方法,以达到相同的效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

当and被过滤时我们可以使用&&进行替换

mysql> select * from fristtb where id= 1 and sex=0x01;
+----+------------+---------------------+
| id | sex        | birthday            |
+----+------------+---------------------+
|  1 | 0x01       | 2001-01-20 00:00:00 |
+----+------------+---------------------+
1 row in set (0.00 sec)

mysql> select * from fristtb where id= 1 && sex=0x01;
+----+------------+---------------------+
| id | sex        | birthday            |
+----+------------+---------------------+
|  1 | 0x01       | 2001-01-20 00:00:00 |
+----+------------+---------------------+
1 row in set, 1 warning (0.00 sec)

当or被过滤时可以使用||替换

mysql> select * from fristtb where id= 1 || sex=0x01;
+----+------------+---------------------+
| id | sex        | birthday            |
+----+------------+---------------------+
|  1 | 0x01       | 2001-01-20 00:00:00 |
|  2 | 0x01       | 2001-01-20 00:00:00 |
+----+------------+---------------------+
2 rows in set, 1 warning (0.00 sec)

mysql> select * from fristtb where id= 1 or sex=0x01;
+----+------------+---------------------+
| id | sex        | birthday            |
+----+------------+---------------------+
|  1 | 0x01       | 2001-01-20 00:00:00 |
|  2 | 0x01       | 2001-01-20 00:00:00 |
+----+------------+---------------------+
2 rows in set (0.00 sec)

如果union被过滤时同样可以使用  ||  进行拼接

mysql> select * from fristtb where id=1 || (select count(*) from fristtb)>0;
+----+------------+---------------------+
| id | sex        | birthday            |
+----+------------+---------------------+
|  1 | 0x01       | 2001-01-20 00:00:00 |
|  2 | 0x01       | 2001-01-20 00:00:00 |
|  3 | 0x00       | 2001-01-20 00:00:00 |
+----+------------+---------------------+
3 rows in set, 1 warning (0.00 sec)

当where被过滤时,使用 limit 来进行代替

mysql> select * from fristtb where id =1;
+----+------------+---------------------+
| id | sex        | birthday            |
+----+------------+---------------------+
|  1 | 0x01       | 2001-01-20 00:00:00 |
+----+------------+---------------------+
1 row in set (0.00 sec)

mysql> select * from  fristtb limit  1,1;
+----+------------+---------------------+
| id | sex        | birthday            |
+----+------------+---------------------+
|  2 | 0x01       | 2001-01-20 00:00:00 |
+----+------------+---------------------+
1 row in set (0.00 sec)

可以看到整个结果和where一致

limit有两参数的一个是数据序列号,第二个是你查询的数据量

当limit函数也被过滤时可以使用group by 函数代替

mysql> select id,min(sex),min(birthday) from fristtb group by id having id =1;
+----+--------------------+---------------------+
| id | min(sex)           | min(birthday)       |
+----+--------------------+---------------------+
|  1 | 0x01               | 2001-01-20 00:00:00 |
+----+--------------------+---------------------+
1 row in set (0.00 sec)

group by 是创建一个虚拟的表,虚拟的条件是重fristtb表中取一个id=1的值,min(sex)在表的内部,min是一个list,不是一个单个的值

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值