本文通过 Google 翻译 MSSQL – Windows Privilege Escalation 这篇文章所产生,本人仅是对呆板翻译中部分表达别扭的字词进行了校正及个别注释补充。导航
Microsoft SQL Server (MSSQL) 是由 Microsoft 开发的关系数据库管理系统。作为数据库服务器,它是一个软件产品,其重要功能是根据其他软件应用步伐的请求存储和检索数据。基本上,有两种方法可用于查找目标上正在运行的 MSSQL 服务。第一种是远程查找,仅当该服务允许远程连接时这种方法才可行。第二种是本地查找,当防火墙阻止外部连接 SQL 服务器或该服务在本地(127.0.0.1)运行时才会采用这种方式。
假如发现 MSSQL 正在运行,那我们需要测试找到的全部凭证,以尝试登录服务器。(2)假如在 nmap 扫描期间没有看到 MSSQL 在外部运行,但是当我们在目标呆板上站稳了脚跟,使用以下命令枚举时,发现 MSSQL 正在运行:
关于端口转发的详情,可在此处查看相关文章。现在,已经确认 MSSQL 服务正在目标机上运行着(无论内/外部运行),接下来我们就需要查找访问服务器的凭据。
权限提拔并不总是 从用户直接提拔到管理员 那么简朴。有时我们会发现,在找到攻击向量以获得管理员或 SYSTEM 权限(纵向)之前,我们需要先从一个用户提拔到另一个用户(横向)。在此示例中,假设我们在端口 445 上的 SMB 共享中发现了一个有趣的文件,其中包含用户 bob 的凭据。
注:通过 crackmapexec 工具测试的凭证标识 假如是 [-] 提示,则表示该凭证是无效的; 假如是 [+] 提示,则表示该凭证是有效的,但没有访问权限;假如是 [+] 和 (Pwn3d!) 提示,则表示该凭证有效且拥有访问权限。
用法注意:crackmapexec 资助中的标准用法似乎是 crackmapexec smb [option] target 但是我发现这种用法是错误的,应该以crackmapexec smb target [option] 的方式使用才对,比方 crackmapexec smb 192.168.56.50 -u user.txt -p pass.txt --continue-on-success。最终,通过在 MSSQL 服务上进行测试,发现该凭据有效且可以访问数据库!
注:使用 mssqlclient.py 时大概会出现无法连接的情况,仅提示“Encryption required, switching to TLS”信息,此时可以参考这个帖子 中修改 tds.py 文件的办法解决问题。要使用 sqsh 登录,我们可以使用以下命令:
在 MSSQL 中执行的每条命令,后面都要跟 go 。
sa 帐户是 MSSQL 内置的超级用户帐户,具有完全管理权限。接着,查看 MSSQL 数据库中存在的库名称。
通常,当我们想转储数据库的表时,最希望看到的就是表名字里有“user”或“password”的字样。当然,它的表现情势大概有多种,比如“usr”和“pwd”。由于 user 表是最令人感兴趣的表,因此我们先从那里开始。
Crackstation 拥有一个包含 15 亿条记载的庞大查找表,可用于快速破解使用常见哈希算法的哈希值,比方:LM、NTLM、md2、md4、md5、md5(md5_hex)、md5-half、sha1、sha224、sha256、sha384、sha512、ripeMD160、whirlpool、MySQL 4.1+ (sha1(sha1_bin))、QubesV3.1BackupDefaults。我们可以一次将全部要破解的哈希值全部输入到 crackstation 中,然后看它是否可以或许破解其中任何一个。
暗码重用是个大问题啊!现在,我们需要在全部大概的地方(RDP、WinRM、SMB 等)去尝试这个凭证,以查看此账户具有哪些 服务的访问权限。
只有当服务运行的账户是普通用户账户或服务账户时,这种技术才有效。假如服务以 SYSTEM 身份运行,那么即便能捕获到哈希值也无法破解。起首,我们需要启动 Responder。但在此之前,需要使用 ip a 命令检查网卡的名称。
SMB 服务器的状态必须是 ON,我们才能继续下面的工作。现在,我们已经将 Responder 运行了起来,然后就可以在数据库中使用以下命令尝试访问不存在的共享,以让 Responder 可以或许拦截请求并转储 MSSQL 服务账户的 NetNTLMv2 哈希值。
注:这种服务账户通常不会像在本示例中展示的那样很容易就被破解掉,但它提供了一个思绪:假如服务的登录身份(服务-属性-登录-登录身份)是用户账户,那么这时间,这种方法就显得很有效了。【这种方法很有必要一试】别的,由于这是一个服务帐户,因此可以使用 whoami /priv 命令来检查它是否启用了 SeImpersonate 权限。
要了解怎样滥用 SeImpersonate 权限来获取 SYSTEM shell,可以查看这篇文章。4、场景三:在 MSSQL 中执行 CMD 命令
任何 MSSQL 帐户都可以具有特权,但 sa 账户是 MSSQL 的内置超级用户帐户。同样地,假设我们仍以用户 bob 的身份在目标系统上站稳了脚跟。
当通过枚举本地服务发现 SQL Server 正在目标上运行时,我们将需要查找大概包含凭证的文件。而这些文件很大概就位于 Web 服务器目次 C:\inetpub\www 中。但是,它们也大概在别的任何地方出现(假如确实存在的话)。假设在枚举过程中,我们在 C 盘中发现了一个名为 customapp 的文件夹。
注:以 SYSTEM 账户运行 MSSQL 服务也算是比较常见的情况吧。默认情况下,xp_cmdshell 功能是被禁用的,于是当我们尝试运行以下命令时将不起作用。
注:此时使用 mssqlclient 工具会更方便一些,只需要一条 enable_xp_cmdshell 命令便可开启 xp_cmdshell 功能。现在,当我们再次尝试 whoami 命令时,可以看到命令的执行效果。
无论何时进入 MSSQL 服务器,起首要检查的就是是否可以执行命令或打开 xp_cmdshell,即便你的账户不是 sa。在确认当前身份是 SYSTEM 之后,我们隔断完整 shell 也就几步之遥了。
欢迎光临 IT评测·应用市场-qidao123.com (https://dis.qidao123.com/) | Powered by Discuz! X3.4 |