mssql介绍
Microsoft SQL Server是一个关系型数据库,微软开发的管理系统。作为数据库服务器,它是一种软件产品,其主要功能是存储和检索其他软件应用程序所请求的数据,这些应用程序可以运行在同一台计算机上,也可以运行在网络(包括Internet)上的另一台计算机上。默认运行在1433端口
默认MS-SQL系统表
master Database:记录SQL Server实例的所有系统级信息。
msdb Database:由SQL Server代理用于安排警报和作业。
model Database:用作在SQL Server实例上创建的所有数据库的模板。对模型数据库所做的修改(如数据库大小、排序规则、恢复模型和其他数据库选项)将应用于以后创建的任何数据库。
Resource Databas:是一个只读数据库,其中包含SQL Server附带的系统对象。系统对象在物理上持久化在资源数据库中,但它们在逻辑上出现在每个数据库的sys模式中。
tempdb Database:是用于保存临时对象或中间结果集的工作空间。
通用枚举
# 获取版本
select @@version;
# 获取用户名
select user_name();
# 获取数据库
SELECT name FROM master.dbo.sysdatabases;
# 使用数据库
USE master
#获取表名
SELECT * FROM <databaseName>.INFORMATION_SCHEMA.TABLES;
#列出链接的服务器
EXEC sp_linkedservers
SELECT * FROM sys.servers;
#列出用户
select sp.name as login, sp.type_desc as login_type, sl.password_hash, sp.create_date, sp.modify_date, case when sp.is_disabled = 1 then 'Disabled' else 'Enabled' end as status from sys.server_principals sp left join sys.sql_logins sl on sp.principal_id = sl.principal_id where sp.type not in ('G', 'R') order by sp.name;
#使用sysadmin特权创建用户
CREATE LOGIN hacker WITH PASSWORD = 'P@ssword123!'
sp_addsrvrolemember 'hacker', 'sysadmin'
获取用户
mssql用户类型
# 获取所有用户和角色
select * from sys.database_principals;
## 这个查询会过滤一点结果
select name,
create_date,
modify_date,
type_desc astype,
authentication_type_desc as authentication_type,
sid
from sys.database_principals
wheretype notin('A','R')
orderby name;
## 这两个选项都选择当前数据库(而不是服务器)的所有用户。
## 当我们无法访问sys.database_principals表时很有趣
exec sp_helpuser
SELECT * FROM sysusers
获取权限
一些关于MSSQL术语的介绍:
- one .
**安全性:**SQL Server数据库引擎授权系统控制对这些资源的访问。有三个更广泛的类别可以区分为:
服务器–例如数据库、登录名、终结点、可用性组和服务器角色
数据库–例如数据库角色、应用程序角色、架构、证书、全文目录、用户
模式–例如表、视图、过程、函数、同义词
- two .
**许可:**每个SQLServer安全文件都有相关联的权限,如ALTER、CONTROL、CREATE,这些权限可以授予主体。权限在服务器级别使用登录进行管理,在数据库级别使用用户进行管理。
-
three
**负责人:**接收对安全对象的权限的实体称为主体。最常见的主体是登录名和数据库用户。通过授予或拒绝权限或将登录名和用户添加到具有访问权限的角色来控制对安全对象的访问。
# 显示所有不同的安全名称
SELECT distinct class_desc FROM sys.fn_builtin_permissions(DEFAULT);
# 在MSSQL中显示所有可能的权限
SELECT * FROM sys.fn_builtin_permissions(DEFAULT);
# 在安全类型服务器上获取我的所有权限
SELECT * FROM fn_my_permissions(NULL, 'SERVER');
# 获取我对数据库的所有权限
USE <database>
SELECT * FROM fn_my_permissions(NULL, 'DATABASE');
# 获取角色"sysadmin"的成员
Use master
EXEC sp_helpsrvrolemember 'sysadmin';
# 如果当前用户是sysadmin,则获取
SELECT IS_SRVROLEMEMBER('sysadmin');
# 获取可以运行xp_cmdshell的用户
Use master
EXEC sp_helprotect 'xp_cmdshell'
诡计
执行操作系统命令
请注意,为了能够执行命令,不仅需要**xp_cmdshell
**启用,但也有对的执行权限xp_cmdshell
存储过程。您可以获取可以使用的用户(系统管理员除外)xp_cmdshell
有:
Use master
EXEC sp_helprotect 'xp_cmdshell'
目前没有用户在运行xp_cmdshell