一周PowerShell脚本Day 4:WMI脚本

欢迎来到一周Powershell脚本的第四天。今天我所将讨论的脚本跟前几天的大不相同,我们将讨论利用WMI的脚本(更多关于WMI请查看这里)

利用Invoke-WmiMethod命令行我们可以执行PowerShell命令和使用WMI执行脚本。但是命令行并没有任何的回显,它只返回值0或者是进程ID告诉我们可能命令执行成功了。

一周PowerShell脚本Day 4:WMI脚本

注意上图中的实验需要获取到目标机器上的有效凭证。

我不喜欢WMI因为它对NAT和防火墙并不友好,但是任何可能替代的技术或方法都是一名成功的黑客所必不可少的。没有回显显然不是我们想要的,但幸运的是,在HES 2014上Andrei Dumitrescu给出了一个聪明的解决方案。解决方案就是对输出进行Base64编码然后存储到WMI命名空间,然后在攻击者的机器上面我们只需要取回并解码即可。这个解决方案具体Powershell脚本由Jesse Davis (@secabstraction)实现:https://github.com/secabstraction/WmiSploit

基于Jesse代码进行了一些修改就是我提供给你的Invoke-PowerShellWmi。一个提供使用WMI的交互式Powershell脚本会话。

下面是具体如何使用,这段脚本会提示要求输入一个密码:

PS C:/> . C:/nishang/Shells/Invoke-PowerShellWmi.ps1  PS C:/> Invoke-PowerShellWmi -ComputerName domainpc -UserName bharat/domainuser

注意这跟正常的WMI操作非常相像,使用脚本需要提供有效的管理员凭证。这种执行脚本的权限我们可以通过获取管理员密码或者令牌来得到。

下面是执行Invoke-PowerShellWmi的效果:

一周PowerShell脚本Day 4:WMI脚本

很好!我们看到了Powershell和本地命令的输出。

另外在执行Powershell脚本时我们也可以加上-EncodedCommand参数:

一周PowerShell脚本Day 4:WMI脚本

很好!我们使用WMI执行了经过编码的Invoke-PowerShellTcpOneLine 。

脚本默认是PowerShell执行的,但同样可以使用cmd来执行,只需换成-ShellType参数即可。

下面我们来看看WireShark,很明显全是WMI流量。

一周PowerShell脚本Day 4:WMI脚本

pcap包可以在我的Google drive得到:https://drive.google.com/folderview?id=0B-Hsu8q12kG3fnBMWlhFQ2VqaDFLM3BheVpyOFdrUExKcGRLbjExcURfMHBaSkNCanFiQWM&usp=sharing

(注:译者已将数据包搬运到国内云盘链接:http://pan.baidu.com/s/1o6TNrx4 密码:2b7u)

默认情况下创建命名空间为“SYSINFOS”,当然用户也可以自己定义,但是请确保使用了“exit”命令因为在关闭脚本时会自动清理目标系统上的痕迹。

下面是段使用Invoke-PowerShellWmi的演示视频:

    

*原文:labofapenetrationtester ,FB小编xiaix编译,转自须注明来自FreeBuf黑客与极客(FreeBuf.COM)