这一课程演示了更加高级的SQL注入方式:联合查询.
通过一个查询入口,我们不仅可以查询出当前表的信息,如果我们可以知道(或猜到)其他的表,我们是可以查出更多信息的。
示例中告诉了我们另一个系统用户表,因此我们在查Account Info的同时查询user_system_data表就行了。
解法一: Union查询
注意union查询:查询列数相同;查询类型要兼容。因此我们必须先找出原表的列数。
步骤1:先查询出原表的格式:’ or ‘1’ =‘1
现在我们知道了这个表格一共有7列。第二个表只有4列,后面的列我们就自己构造了
步骤2: xx' union select userid,user_name,password, 'a','b','c',7 from user_system_data --
这样,我们就得到dave的密码了。
第2步中在构造后面的四列时,要求保证查询出来的类型一致,因为第一个表格的前面列是字符,最后一列是数字,所以才有前三个是字符,最后一个是数字。
同时,由于原输入框输入的字符,因此在构造的sql语句后面必然会有一个单引号,这里使用了特殊字符:注释符 (--)将语句后面的内容注释掉,排除干扰。
解法二:多语句查询
该问题还可以使用多语句查询的解法,即使用分号,分别查询两个语句即可
答案:xx'; select * from user_system_data --
这里也仍然需要注释符。
(--完--)