天道酬勤

权限维持篇-利用现有服务维权

现有服务权限维持

当攻击者拿到一台机器的shell时,可以通过修改系统上的服务,以达到持久控制。攻击者将恶意软件隐藏在服务执行的位置,修改该服务执行的用户权限,达到获取高权限shell的目的。

在实际的应用中,攻击者通常会操作三个位置来进行权限维持,分别是:

1. binPath
2. 影像路径
3. 失败命令

binPath

“binPath”是将服务指向启动服务时需要执行的二进制文件的位置。

SC

操作过程中,我们需要利用sc命令:

SC命令主要的几个功能:

  1. 更改服务的启动状态(这是比较有用的一个功能),可以设置存储在注册表中的服务属性,以控制如何在启动时启动服务应用程序,以及如何将其作为后台程序运行。即更改服务的启动状态。
  2. 删除服务(除非对自己电脑的软、硬件所需的服务比较清楚,否则不建议删除任何系统服务,特别是基础服务)。
  3. 停止或启动服务(功能上类似于net stop/start,但速度更快且能停止的服务更多)。
  4. SC可以检索和设置有关服务的控制信息,可以使用SC.exe来测试和调试服务程序。
  5. 可以创建批处理文件来调用不同的SC命令,以自动启动或关闭服务序列。

说白了: SC.exe提供的功能类似于”控制面板”中”管理工具”项中的”服务”。

之前写Cobaltstrike上线方式中,就提到了关于利用服务上线机器的一种方式。
链接:几种常见的cobaltstrike上线方式

后门创建

默认情况下,Windows不会启用传真服务。所以,传真服务是我们修改的理想服务,因为它不会中断正常用户的操作。

首先,我们将msfvenom生成的木马文件上传C:\123123.exe

其次,在cmd中输入以下命令:

sc config Fax binPath= "C:\123123.exe"
sc start Fax

当服务在系统上启动,木马文件将执行,打开一个会话。

但是,也看到了,木马文件执行上线,获得的权限是系统服务权限。一段时间之后,会显示服务没有响应,从而关闭我们的恶意进程。所以msf在监听时,要加上如下参数:

set autorunscript migrate -f

获得会话之后,直接将会话转移到一个稳定进程,保持上线。

经过测试,重启之后,传真服务不会自动启动执行,所以我们可以利用如下命令:

sc config Fax binPath= "C:\Windows\System32\123123.exe" start= "auto" obj= "LocalSystem"

Windows启动期间,传真服务自动启用,并且执行的权限为System权限。

这里有一点需要注意,在填写参数时,参数等号后面一定要加”空格”,注意这个细节!

但在我实验的过程中,实验机器Win7未能成功利用。讲一下踩坑的过程:

  1. 尽管各方面设置都已完成,服务自动启动,启动用户为Syetem,但是重启之后,并未触发后门程序。
  2. 我猜测是自带服务与后门程序不兼容的原因(因为该后门的服务启动是报错的,上面的展示过程,大家也都看到了,错误提示1053),于是我创建了一个名称为Faax的新服务,并设置上面同样的参数,很可惜,也未能利用成功,开始怀疑是我Win7机器的原因。
  3. 我将实验机器换为Server 2012,可惜Server系列好像不自带传真服务,所以,我就自己创建了一个服务,利用如下命令,最终实验成功。
sc create Fax binPath= "C:\Windows\System32\123123.exe" start= "auto" obj= "LocalSystem"

自己创建的服务,是不带描述的,没有描述就看起来不是很专业:

所以可以利用如下命令创建服务的描述:

sc descrīption Fax "利用计算机或网络上的可用传真资源发送和接收传真。"

这样不就很像那么一回事了嘛,再像一点,将木马文件改为原本Fax服务可执行文件的名字fxssvc.exe

最终,为了严谨,我又重新搭建了一个Win7的环境,进行传真服务持久化的实验,最终利用成功,看来一开始没能利用成功,就是我虚拟机的问题。实验过程中可能会出现各种各样的问题,虽然本次实验过程中的问题是机器的问题(不是我的问题),但是它让我尝试了更多了操作,去达到自己想要的目的,感觉收获颇多,记录下来,分享给大家。

关于sc命令的用法,大家可以参考:sc用法

影像路径

有关系统上每个服务的信息都存储在注册表中。”ImagePath”注册表项通常包含驱动程序映像文件的路径。结果,使用任意可执行文件劫持此密钥将使有效负载在服务启动期间运行。这种劫持就称为映像劫持

我们可以劫持W32Time服务:

reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time" /v ImagePath /t REG_SZ /d "C:\321321.exe" /f

/f参数很重要,强制执行,看下图就知道区别了。

同样,想要此服务开机自启并为高权限。我们仍需使用命令:

sc config w32time start= "auto" obj= "LocalSystem"

利用成功:

我的Win7好迷,服务就是不启动,也是换了台机器成功的。

关于映像劫持,也可以看我的文章粘滞键后门,里面也用到了映像劫持的技术。

失败命令

Windows提供了一种功能,以便在服务无法启动或其通信过程终止时执行某些操作。具体来说,当服务被终止时,可以执行命令。控制此操作的注册表项是“ FailureCommand ”,其值将定义要执行的操作。

reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time" /v FailureCommand /t REG_SZ /d "C:\123123.exe"

或者使用此命令

sc failure w32time command= "\"c:\123123.exe\""

上述命令将使用一个恶意可执行文件修改注册表项,该可执行文件将在其进程被杀死后运行。

另外,我们设置的是w32time服务,所以我们需要到w32time服务设置中进行一些修改,如下:

设置完这最后一项之后呢,我们来模拟一个环境:

假设攻击者劫持了w32time服务,并且网络管理员已经监测到该服务被劫持。接下来,网络管理员要将服务的恶意进程关掉,以避免危害扩大。

这里只是打个比方,想怎么玩的更好,就看各位大佬的骚操作了。

  1. 找到w32time服务

  1. 转到进程

  1. 上线成功

Empire

Empire中也有相应的模块

usemodule privesc/powerup/service_stager

可自行尝试

参考文章:Pentestlab

 

赞(1) 打赏
未经允许不得转载:HackerGu‘s Blog » 权限维持篇-利用现有服务维权
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

专注黑客技术的研究

联系我们联系我们

觉得文章有用就打赏一下文章作者

微信扫一扫打赏