SQL Server从0到1——基本语法

信息收集

用户:

当前用户名:

select user

用户权限:

服务器级别:

select IS_SRVROLEMEMBER('sysadmin')

 SQL Server从0到1——基本语法_第1张图片

数据库级别:

select IS_MEMBER('db_owner')

 SQL Server从0到1——基本语法_第2张图片

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

 SQL Server从0到1——基本语法_第3张图片

返回1就代表存在xp_cmdshell

2.获取数据:获取库名:

select db_name()

SQL Server从0到1——基本语法_第4张图片

 

获取所有数据库名:

select name from master.dbo.sysdatabases;

SQL Server从0到1——基本语法_第5张图片

 

获取表名:

select name from test.dbo.sysobjects

 SQL Server从0到1——基本语法_第6张图片

sysobjects表是SQL Server的系统表,记录了数据库内创建的每一个对象 sysobjects表结构:

SQL Server从0到1——基本语法_第7张图片

 

如果直接使用select name from test.dbo.sysobjects,就会造成将一些无用的数据也回显出来,因此我们需要使用xtype来筛选满足条件的对象 以下是未筛选的回显内容

SQL Server从0到1——基本语法_第8张图片

select name from test.dbo.sysobjects where xtype = 'u'

以下是我们使用where筛选后的内容

SQL Server从0到1——基本语法_第9张图片

当然在实际利用中一般回显一回显一行数据,因此需要使用top来限定只反显1行内容

select top 1 name from test.dbo.sysobjects where xtype = 'u'

 SQL Server从0到1——基本语法_第10张图片

那该如何获取下一个表名呢?

SQL Server从0到1——基本语法_第11张图片

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','

 SQL Server从0到1——基本语法_第12张图片

获取字段名:数据库表syscolumns 各个字段含义:每个数据库创建后都会有一些系统表用来存储该数据库的一些基本信息 每个表和视图中的每列在表中占一行,存储过程中的每个参数在表中也占一行。该表位于每个数据库中。

SQL Server从0到1——基本语法_第13张图片

select * from test.dbo.syscolumns

如果不进行筛选的话,会有许多有关数据库配置等无关的字段出现

SQL Server从0到1——基本语法_第14张图片

在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.

SQL Server从0到1——基本语法_第15张图片

SQL Server从0到1——基本语法_第16张图片

当然如果只能回显一行的话依然需要使用top 爆数据:

select top 1 username+':'+ password from test.dbo.users

SQL Server从0到1——基本语法_第17张图片

 

爆数据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

你可能感兴趣的:(数据库,sql,web安全,网络,安全,学习)