SQL注入以及部分绕过方法详解

这篇博客详细介绍了SQL注入的各种类型和技术,包括联合注入、报错注入、布尔盲注、延迟注入等,以及如何利用information_schema数据库进行信息探测。同时,文中还探讨了如何通过函数和特殊技巧绕过常见的过滤机制,例如注释符过滤、or和and过滤、空格过滤等。

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

数据库知识补充

1.information_schema数据库

其中保存着关于MySQL服务器所维护的所有其他数据库的信息。如数据库名,数据库的表,表栏的数据类型与访问权限等。在information_schema 中,有数个只读表。它们实际上是视图,而不是基本表,因此,你将无法看到与之相关的任何文件。

2.information_schema.schemata表

提供了当前mysql实例中所有数据库的信息,其中需要用到的是 schema_name 这一列,存放的是各个数据库的名称

3.information_schema.tables表

提供了所有数据库中所有的表的信息,其中需要用到的是 table_name 这一列,存放的是各个表的名称(这里表的名称是有可能重复的,因为是不同数据库中的表,名称可以相同),以及 table_schema 这一列,存放的是各个数据库的名称(可以通过选

择条件来指定数据库)

4.information_schema.columns表

提供了所有数据库中所有表的所有字段的信息,其中需要用到的是 column_name 这一列,存放的是各个字段的名称

联合注入

Union select可以一次执行两条语句,并且将两条语句查询到的临时表结果合并成一张临时表进行显示。但是有个前提就是,两张表的字段数必须一致。(我们可以用order by来确定字段数。

union select联合查询的时候,两边都查到了数据,默认是显示左边的数据,如果左边没有查到数据,右边查到了,就显示右边的数据。所以我们在构造数据的时候,应该构造为左边为假,类似于id=9999或id=1 and 1=2。

函数介绍:

Order by        

        第一种order by id(输入字符)

        基于id这个字段排序,如果没有id这个字段,就报错

        第二种order by 1(输入数字)

        基于第一列排序,当输出的列数超过最大列数,比如有3列你输入了4,这里4就会被当做是字段的名称来查询,如果没有查到,就报错,如果查到了,就按照4这个列来排序。(可能就        会产生roder by 3和order by 4都不报错,要自己学会判断。)

        测试的时候先用order by 1测试语句有没有问题,如果order by 1有问题的话要么被过滤了,要么语句出错了。

Group_concat()函数

        作用是将一列中的所有内容合并成一个字符串并返回结果

concat_ws()函数

        能够将多个字符串连接成一个字符串返回,并且可以一次性指定分隔符

        group_concat(concat_ws(':',username,password))

Database()

        显示当前数据库

查询语句:

查看所有数据库

Id=1 and 1=2 union select 1,group_concat(scheam_name),3 from information_schema.schemata %23

查看当前数据库名

Id =1 and 1=2 union select 1,database(),3 %23

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值