靶场练习
靶场练习
sql-labs
一、联合注入
1、基本信息:联合注入是sql注入的一个重要分类,在sql-labs靶场中是从Less-1到Less-4
2、具体步骤
(1)Less-1
首先打开界面

提示我们要输入ID
http://127.0.0.1/sql/Less-1/?id=1
这里要解释一下为什么是
?id=1:在本题当中HTTP传参方式是GET,基于这种方式是直接在url后面加?然后再加id=1作用是以GET的方式传递id这个参数给服务端

回车换行后发现页面正常回显,尝试使用单引号'闭合

我们可以看到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' --+

此时我们可以进行联合注入,先判断它有几列
http://127.0.0.1/sql/Less-1/?id=1' order by 3 --+

正常回显,继续尝试有无第四列

没有第四列,说明只有三列,然后继续判断回显位置
这里需要介绍一下
union,它是SQL中的操作符,其作用是将两个或多个 SELECT 语句的结果集合并成一个结果集,我们需要注意的是:如果在合并的过程中前一个SELECT语句出现错误,不会影响后一个SELECT语句的执行。之前查询出来有三列,我们可以利用union判断回显位置。
http://127.0.0.1/sql/Less-1/?id=1' union select 1,2,3 --+

为什么查询不到呢?不是因为union没有执行,而是Web应用通常只显示查询结果的第一行,所以浏览器直接返回了id=1的页面,如果要达到判断回显的目的,需要让第一个SELECT为假,也就是无法返回数据。更新后的payload如下:
http://127.0.0.1/sql/Less-1/?id=-1' union select 1,2,3 --+

由此可见,回显位置是union select 1,2,3的数字2和3的位置,接下来就可以爆库名了。
http://127.0.0.1/sql/Less-1/?id=-1' union select 1,database(),3 --+

当前数据库为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' --+

这里需要解释一下为什么要使用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' --+

其中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 --+

(2)Less-2

浙公网安备 33010602011771号