0x04 添加模块:防火墙模块
- • 主要是玩转
MSFT_NetProtocolPortFilter
,MSFT_NetFirewallRule
,MSFT_NetFirewallProfile
这三个类,目前实现了启用禁用删除某条规则,MSFT_NetProtocolPortFilter
和MSFT_NetFirewallRule
这个两个类属性里面的InstanceID
是关联的,然后动动手指,就可以写出一个基于端口查找防火墙规则的一个东西 - • 演示如下,查找445端口的规则,rule id如下
{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] https://github.com/fortra/impacket/issues/1514
- • 还有一个问题,如果你的防火墙名称里面有中文,windows数据包只支持latin-1,如果不好采有中文,那会报错,解决办法就是,重写防火墙规则的名称(用latin-1编码一遍结果看看有没有报错,报错代表有中文)
- • 但是你可以更加恶意点,直接设置个空格,管理员怎么点都会报错
- • 创建一个中文名字的防火墙规则,禁用端口445
- • 获取规则ID
- • 禁用
- • 可以看到变成一片空了
- • 点进去就报错
- • 可能你会说,噢,那我改回来不就ok了吗,但是遇到系统自定义的规则呢?改系统自定义的,留空,就纯恶心管理员了
- • 留空后
0x05 添加模块:RDP Wrapper
- • RDP这个就好解决了,设置个认证等级
RPC_C_AUTHN_LEVEL_PKT_PRIVACY
,然后直接改对应的值,第一个1代表开启rdp,第二个1代表同时配置防火墙 - • 开启 Restricted Admin Mode 和查找 RDP端口就好办了,直接调用
StdRegProv
类,一把梭
0x06 添加模块:WINRM Wrapper
- • WINRM也很好弄,调用
win32_service
开启winrm服务,然后同时调用上述防火墙模块配置好防火墙规则,系统内置了winrm的防火墙规则的,只需要enable它即可
0x07 添加模块:AMSI 绕过
- • 这个模块只是在注册表创建一个名为
AmsiEnable
的键值对,实际有没有用还需要自己测试,来源于blackhat asia 2018中Tal-Liberman 的分享(实际上有没有用,我还没测试过,看GhostPack的SharpWMI添加了这个,我也加上一个)
0x08 模块改进:命令执行
- • 延续上一个项目 wmiexec-RegOut中的 wmipersist-Modify.py的思路,执行WMIHACKER的VBS模板,但是不同以往的是,这次选择把命令执行结果写到自己创建的类里面
- • 注意,命令执行到这里不是程序卡住了,等一会即可,后续再去执行命令就很快了,应该是和EventFilter的WQL语句有关,需要排查一下
0x10 WMI爆破
- • 恰好之前着手给CME写了个WMI协议
- • 一次经典的实战案例,有个内网里面445/139全部关闭,管理员又恰好只开放了135,不小心你就错过了很多咯
- • 给CME官方交PR了,但是作者一直没通过 : ( [[New protocol] Add WMI support by XiaoliChan · Pull Request #657 · Porchetta-Industries/CrackMapExec (github.com)]https://github.com/Porchetta-Industries/CrackMapExec/pull/657
0x09 Outro
- • 项目链接:https://github.com/XiaoliChan/wmiexec-Pro 希望有看完的大哥觉得还不错的话可以给小弟我点个star
- • 程序中还有很多不足的地方,例如命令执行这里,看GhostPack的SharpWMI的历史commit中,Ridter师傅用的回显方法是把命令执行结果写到已存在的类且无关重要的属性中,后续也可以根据这个思路继续修改
- • Impacket 调用PutClass实在是不懂怎么用
- • 本人只测试了有Defender / 火绒 / 360的情况下横向,结果都没触发告警