简单的了解
-
联合查询注入
在做题目之前,先了解了解SQL联合查询注入,什么是联合查询注入首先联合查询注入是数据库提供联合查询,使用union使得两条SQL查询语句的结果进行连接。例如
select *form tp_user where id= 1 union select 1,2,database(),4,5;
(两者的字段数必须保持一致) -
联合查询注入的适用范围
联合查询注入只适用于页面有返回结果的SQL语句查询(就是要有回显)
联合查询注入的过程
1、判断注入点
2、判断是整型还是字符型
3、判断查询列数
4、获取数据库名
5、获取数据库中的表名
6、获取字段名
7、获取字段中的数据
-
注入点
sql联合查询的注入点都比较明显, 必须是页面上的显示位(页面中展示数据库中数据的位置),否则无法注入,如id,name等等。 -
判断整形还是字符型
(1)
尝试使用加单引号或双引号
显示数据库错误信息或者页面回显不同可以判断是整形注入和字符型注入.整型注入没有变化,而字符型注入则回显不同
(2)*输入’ and 1=1和 ’ and 1=2 *
发现页面变化,判断为字符注入 -
查询列数
使用order by函数 对MySQL中查询结果按照指定字段名进行排序,order by 1.2.3…第一个查询字段为1,第二个为2,依次类推。 -
获取数据库名
使用 group_concat()将所有的表名联系在一起
select group_concat(SCHEMA_NAME) from information_schema.SCHEMATA
例如
?id=-1' union select 1,1,(SELECT GROUP_CONCAT(schema_name) FROM information_schema.schemata)'
-
获取数据库中的表名
在这里使用group_concat()函数加一个数据表名table_name,然后指定一个来源得到库中的表名
例如
select group_concat(table_name) from information_schema.tables where table_schema = '数据库名'
-
获取字段名
知道表名,直接利用sql语句就可以得到所有的字段名
例如
select group_concat(column_name) from information_schema.columns where table_schema='test' and table_name='表名'
-
获取字段中的数据
例如
id=-1' union select 1,1,(SELECT GROUP_CONCAT(column_name) FROM information_schema.columns WHERE table_name = '字段')'