RPC(Remote Procedure Call Protocol)——远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。 从流量中也可以看出调用的是MS-SAMR协议 实现 实现主要有两种思路,一种是跟mimikatz一样直接调用samlib.dll的导出函数,第二种是直接调用SAMR协议的API 两种方法原理一样,但前者...
微软官方已经把MS-SAMR的IDL给我们了:[MS-SAMR] - Appendix A: Full IDL,直接拿下来使用midl生成.h和.c文件即可(使用时还需要稍作修改): 注意这里有一个坑点,如果对SamrChangePasswordUser只指定第5、6、7个参数的话,会产生STATUS_LM_CROSS_ENCRYPTION_REQUIRED错误: 因此必须再指定LMCross和NewLmEncryptedWith...
我们再看一下调用处的反编译代码,参数刚好可以和SamrChangePasswordUser的操作数对应 其实从流量中也可以看出调用的是MS-SAMR协议: 实现 实现主要有两种思路,一种是跟mimikatz一样直接调用samlib.dll的导出函数,第二种是直接调用SAMR协议的API 两种方法原理一样,但前者的调用要更加简单,因为samlib里的导出函数对应了SAM...
安装2021 年 7 月 13 日 Windows 更新或更高版本的 Windows 更新后,如果 SAM 服务器支持 AES 加密,则使用旧版 MS-SAMR 协议进行密码操作时,高级加密标准 (AES) 加密将是 Windows 客户端上的首选方法。 如果 SAM 服务器不支持 AES 加密,则允许回退到旧版 RC4 加密。
MS-SAMR协议在信息收集/修改方面能做的事情很多,如枚举/修改对象的ACL、用户&组信息、枚举密码策略等。此处以枚举本地管理员组账户为例 通常进行本地管理员组账户的枚举会调用NetLocalGroupGetMembers()这一API,前面提到过这类API底层也是调用MS-SAMR协议,先来看一下正常调用的过程: ...
我们同样也可以利用MS-SAMR协议中的SamrCreateUser2InDomain()来添加用户(其实调用MS-SAMR是NetUserAdd()等API的底层实现) 需要注意的有两点,一点是Windows操作系统(域控除外)中的“域”分为内置域(Builtin Domain)和账户域(Account Domain) 内置域(Builtin Domain):包含在安装操作系统时建立的默认本地组,例如管...
我们同样也可以利用MS-SAMR协议中的SamrCreateUser2InDomain()来添加用户(其实调用MS-SAMR是NetUserAdd()等API的底层实现) 需要注意的有两点,一点是Windows操作系统(域控除外)中的“域”分为内置域(Builtin Domain)和账户域(Account Domain) 内置域(Builtin Domain):包含在安装操作系统时建立的默认本地组,例如管...
ChangeNTLM和SetNTLM的原理本质都是调用MS-SAMR协议 不同的是ChangeNTLM是调用SamrChangePasswordUser这一API来修改用户密码: 而SetNTLM是通过SamrSetInformationUser来重置用户密码 大体过程是差不多的,只不过核心操作调用API不同,这也是为什么两种方法需要的参数、权限都不同,此处以分析ChangeNTLM为例 ...
ChangeNTLM和SetNTLM的原理本质都是调用MS-SAMR协议 不同的是ChangeNTLM是调用这一API来修改用户密码: 而SetNTLM是通过来重置用户密码 大体过程是差不多的,只不过核心操作调用API不同,这也是为什么两种方法需要的参数、权限都不同,此处以分析ChangeNTLM为例 ...
ChangeNTLM和SetNTLM的原理本质都是调用MS-SAMR协议 不同的是ChangeNTLM是调用SamrChangePasswordUser这一API来修改用户密码: 而SetNTLM是通过SamrSetInformationUser来重置用户密码 大体过程是差不多的,只不过核心操作调用API不同,这也是为什么两种方法需要的参数、权限都不同,此处以分析ChangeNTLM为例 ...