欢迎来到一周Powershell脚本的第四天。今天我所将讨论的脚本跟前几天的大不相同,我们将讨论利用WMI的脚本(更多关于WMI请查看 这里 )
利用Invoke-WmiMethod命令行我们可以执行PowerShell命令和使用WMI执行脚本。但是命令行并没有任何的回显,它只返回值0或者是进程ID告诉我们可能命令执行成功了。
注意上图中的实验需要获取到目标机器上的有效凭证。
我不喜欢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和本地命令的输出。
另外在执行Powershell脚本时我们也可以加上-EncodedCommand参数:
很好!我们使用WMI执行了经过编码的Invoke-PowerShellTcpOneLine 。
脚本默认是PowerShell执行的,但同样可以使用cmd来执行,只需换成-ShellType参数即可。
下面我们来看看WireShark,很明显全是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)