在SQL语句中 UNION 操作符用于合并两个或多个 SELECT 语句的结果集,比如 table1表中有a,b两列里面存放着1,2|3,4,table2表中存放着2,3|4,5这些数据,我们可以通过以下语句来进行联合查询
1 | SELECT a,b FROM table1 UNION SELECT b,c FROM table2 |
但是 UNION 内部的 SELECT 语句必须拥有相同数量的列,列也必须拥有相似的数据类型,同时每条 SELECT 语句中的列的顺序必须相同。我们可以利用这个特性来试出表中有多少列
1 | SELECT ? FROM table1 UNION SELECT NULL |
知道了实现原理,那么就开干。
1、查看网站,并测试是否容易收到SQL注入攻击
返回了一个内部服务器错误,说明我的测试起作用了
2、使用联合查询来确定此表的列数
说明这个表中不止一列,我们继续填NULL
添加到第三个空时得到了返回值,我们用BurpSuite来试一下是不是返回了200响应码
HTTP/1.1 200 OK表明是正确的列数
3、使用ORDER BY排序来测试表中的列数
使用第一列进行排序,我们发现页面和之前没有变化,那么第一列应该是唯一标识符id,根据这个我们就可以猜得到第二列就是商品名字,第三列就是商品价格,来验证一下
根据首字母排序
根据价格来进行排序,那我们试试4会出现什么
返回了一个内部服务器错误,那么我就知道了这个表中共有三列,分别是 id,商品名称,价格。