文件传输部分是最难的,但是我看到t00ls上的flystart师傅,改了我的脚本,地址:文章链接,但是用的方法依旧是通过注册表传文件,这种方法有个坏处,就是写的文件不能大于512KB,因为注册表的限制,我估计这个师傅是看到奇安信的SharpWMI和香山师傅的WMIHACKER项目来的灵感\奇安信的SharpWMI\可以看到,该项目的Todo,依旧想的是围绕注册表去进行修改,为此我们先把注册表传输文件放一边\WMIHACKER的文件传输部分
令人意外的是,我们域渗透的龙头老大哥HarmJ0y,于早些年前写了一个SharpWMI项目,并且里面用到的文件上传方法是把数据写到一个自己创建的WMI Class里面的properties\这个工具很不错,基本上该有的功能都有了,但是缺了PTH,来,是时候拥抱impacket了,我们也确立好了明确的目标,首先是创建wmi类<br>
CreationClassName
iWbemServices.GetObject
iWbemServices.GetObject("win32_process")
iWbemServices.GetObject('win32_process.Handle="0"')
iWbemServices.DeleteClass
有了前面的思路,大致的上传和下载思路就出来了
上传文件:我们可以不用创建类,直接把文件base64编码后,放入到vbs脚本里面,然后事件订阅执行解码和释放文件,但是注意,impacket在创建wmi实例,如果string类型的属性内容过大,传输会变得很慢很慢,同理,针对上传大文件,真的没什么好方法去解决速度\演示截图,上传了2兆的文件
下载文件:下载文件的话,就用回VBS远程创建类,然后VBS把目标文件base64编码,接着VBS在新建的类里面创建一个实例,把内容写进入(注意不能写到key属性里面)\然后用个函数封装起来,漂漂亮亮\演示截图,下载了2兆的文件
MSFT_NetProtocolPortFilter
MSFT_NetFirewallRule
MSFT_NetFirewallProfile
InstanceID
演示如下,查找445端口的规则,rule id如下 {D13E226E-A4C0-4CD3-A4E1-17B5948121DE}
{D13E226E-A4C0-4CD3-A4E1-17B5948121DE}
445此时是联不通的
然后,直接禁用规则,445联通了
你还可以删除它,之后就找不到了
还可以禁用全部防火墙的profile
聪明的你来到这里,一定发现了,怎么没有添加规则?这里就是就涉及到了impacket的问题了,impacket目前还不能发送string 类型的array,如果你愿意研究一下,可以看看我提的issues:How to submit "String Array" type value when doing SpawnInstance() · Issue #1514 · fortra/impacket (github.com)
但是你可以更加恶意点,直接设置个空格,管理员怎么点都会报错
创建一个中文名字的防火墙规则,禁用端口445
获取规则ID
RPC_C_AUTHN_LEVEL_PKT_PRIVACY
StdRegProv
win32_service
AmsiEnable
项目链接:https://github.com/XiaoliChan/wmiexec-Pro 希望有看完的大哥觉得还不错的话可以给小弟我点个star
程序中还有很多不足的地方,例如命令执行这里,看GhostPack的SharpWMI的历史commit中,Ridter师傅用的回显方法是把命令执行结果写到已存在的类且无关重要的属性中,后续也可以根据这个思路继续修改
Impacket 调用PutClass实在是不懂怎么用
本人只测试了有Defender / 火绒 / 360的情况下横向,结果都没触发告警
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!