联合查询(union注入)
由于数据库中的内容会回显到页面中来,联合查询适合于有显示位的注入,即页面某个位置会根据我们输入的数据的变化而变化,所以我们可以采用联合查询进行注入。
联合查询就是SQL语法中的union select 语句。该语句会同属执行两条select语句,生成两张虚拟表,然后把查询到的结果进行拼接。
select ......union select .......
由于虚拟表是二维结构,联合查询会“纵向”拼接两张虚拟的表。
联合查询可以 实现跨库跨表查询
必要条件:
两张虚拟的表(union前后两个select的结果集)具有相同的列数
虚拟表对应的列的数据类型相同
当数据类型为字符时,可以使用编码将字符转化为数字类型
漏洞靶场实战环境:
为了更清楚的看清sql语句的执行与变化过程,我们先修改源代码,打开Less-1/index.php,在源码中添加如下语句将执行的sql语句打印出来,方便我们查看
echo '执行的sql语句为:'.$sql;
echo '<br/>';
echo '<br/>';
sqli-labs-less-1:首先,我们需要输入一个id值
?id=1
?id=2
我们观察页面会发现,当我们输入id=1和id=2时,页面中的name和password的值是不一样的,说明我们输入的数据和数据库有交互并且将数据显示到页面上了
注入点判断
首先开始判断是否存在注入,输入?id=1',页面发生报错,说明后端未对前端发送的数据没有很好的过滤,产生了sql注入漏洞
然后继续判断