【SQL注⼊(第2节)】union联合查询注⼊实例操作
⽬录
本博客内容仅供学习探讨,请勿滥⽤乱⽤
1 union联合查询注⼊概况
1.1 简介
union查询注⼊是最基础的注⼊。在SQL中, UNION 操作符⽤于合并两个或多个 SELECT 语句的结果。union 查询注⼊利⽤ UNION 关键字可以追加⼀条或者多条额外的 SELECT 查询,并将结果追加到原始查询中。
1.2 适⽤条件
1. ⽹页存在注⼊点,有回显。
2. 需要满⾜union语句要求,即:
1. union前后两个select的结果集应具有相同列数;
sql中union多表合并
2. union前后两个select的结果集对应列应是相同数据类型。
1.3 注⼊步骤
1. ⾸先判断是否存在注⼊点及注⼊的类型。
2. 使⽤ORDER BY 查询列数、观察回显的位置。
3. 获取数据库名。
4. 获取数据库中的所有表名。
5. 获取数据库的表中的所有字段名
6. 获取字段中的数据。
1.4 注⼊技巧
在最后⼀个select语句后可以使⽤ order by 或 limit 等SQL语句对查询进⾏限制和调整。
2 union联合查询注⼊实验
2.1 实验环境
1. 实验靶场——虚拟机:本节实验靶场是在win2008系统上基于phpstudy搭建的⼀个简单⽹站,win2008及phpstudy的安装过程可
以参考《》,⽹站的搭建过程可以参考《》
2. 注⼊⼯具——真实机:本实验利⽤⽕狐浏览器来实现union注⼊,为⽅便注⼊过程的编码,建议安装⼀个扩展插件harkbar,安装过程
参考《》由于该教程中的2.1.3harkbar我安装后⽆法正常使⽤,就安装了HackBar Quantum来代替。安装后出现下图左侧的东西。
2.2 实验步骤
2.2.1 判断是否存在注⼊点及注⼊的类型
在该阶段主要是尝试不同的输⼊参数,根据⽹页反馈信息来判断是否存在注⼊点以及注⼊类型,如是否是字符型还是数值型,是否存在延迟注⼊等。
1. ⽤浏览器访问我们的留⾔论坛,并点击第⼀条留⾔进⼊测试界⾯。
2. 将参数修改为?id=2,并点击run,看到页⾯变化如下,弹出第⼆条留⾔内容。
3. 继续修改参数?id=5,并点击send,看到response内容如下。
4. 继续修改参数id=6,并点击send,看到页⾯如下。可以看到当id>5后,response中没了“作者、标题和留⾔”的具体内容。
5. 测试后台对参数真假性的判断,修改参数id=1 and 1 =1 ,由于and 1=1 为真,所以页⾯应返回与id=1相同的结果, 修改参数 id=1
and 1=2 ,由于 and 1=2 为假 , 所以页⾯应返回与 id=1 不同的结果,如下图所⽰。也就是说是否能
正常回显内容与语句的真假性有关。
6. 为了判断注⼊是数字型或是字符型,继续修改参数?id=1',就是多了⼀个单引号,并点击run,看到页⾯如下。除了标题没有任何回
馈信息,可以判断的是该语句带⼊到SQL中执⾏时,⽆法正常执⾏回显内容,但没有提⽰错误信息不知道能不能就判断是数字型的注⼊。
7. 为判断参数是否存在延迟注⼊,按F12打开调试⾯板,在左侧继续修改参数为?id=1 and sleep(5),
并点击run。可以看到sleep语句对
⽹页的响应起到作⽤,也就是意味着存在延迟注⼊的可能。
8. 结论:
1. 因为id参数是⽤户可控的,会随请求带⼊到数据库中执⾏并回显相应内容,是⼀个注⼊点。
2. 当参数后加上单引号时,⽆法正常回显,说明参数应该是数字型。
3. 当参数后条件为假时,⽆法正常回显,说明⽹页存在布尔类型状态。
4. sleep语句对⽹页的响应起到作⽤,也就是意味着存在延迟注⼊。
5. 从联合注⼊到盲注以及延迟注⼊,其时间⼈⼒成本逐步增⼤,尽可能选择低成本⽅式进⾏注⼊。
6. 同时我们也猜测后台SQL语句为select XX from XXX where id = {$id}。
2.2.2 使⽤ORDER BY 查询回显列数、观察回显的位置。
1. order by 语句本意是按某⼀列的顺序进⾏排序,在此处我们利⽤该语句来判断select查询结果集中有多少列,但order by 参数超过
其结果集列数时,会出错。修改参数为?id=1 order by 2,结果与?id=1⼀样,可以猜测是回显数据⾄少有2列。
2. 修改参数为id=1 order by 10,没有结果,可以猜测是回显数据没有10列,所以出错了没有内容。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。