首页 科技内容详情
再 zai[探{tan}MS-SAMR协议【】‘’

再 zai[探{tan}MS-SAMR协议【】‘’

分类:科技

网址:

反馈错误: 联络客服

点击直达

欧博手机版下载www.aLLbetgame.us)是欧博集团的官方网站。欧博官网开放Allbet注册、Allbe代理、Allbet电脑客户端、Allbet手机版下载等业务。

作者:Loong716@Amulab

0x00 前言

在前一篇《利用MS-SAMR协议修改用户密码》中介绍了利用MS-SAMR修改用户密码并还原的技巧。在本篇文章中,我们继续介绍MS-SAMR协议的一些其它利用。

0x01 利用

1. 添加本地用户

在渗透测试过程中,我们经常会遇到在目标机器添加账户但被杀软拦截掉的情况。现在较为通用的绕过方法是通过调用NetUserAdd()等API来添加用户


我们同样也可以利用MS-SAMR协议中的SamrCreateUser2InDomain()来添加用户(其实调用MS-SAMR是NetUserAdd()等API的底层实现)

需要注意的有两点,一点是Windows操作系统(域控除外)中的“域”分为内置域(Builtin Domain)和账户域(Account Domain)

◼内置域(Builtin Domain):包含在安装操作系统时建立的默认本地组,例如管理员组和用户组

◼账户域(Account Domain):包含用户、组和本地组帐户。管理员帐户在此域中。在工作站或成员服务器的帐户域中定义的帐户仅限于访问位于该帐户所在物理计算机上的资源

因此我们需要在账户域中添加普通用户,然后在内置域中找到Administrators组,再将该用户添加到内置域中的Administrators中

第二个需要注意的是,利用SamrCreateUser2InDomain()添加的账户默认是禁用状态,因此我们需要调用SamrSetInformationUser()在用户的userAccountControl中清除禁用标志位:

// Clear the UF_ACCOUNTDISABLE to enable account
userAllInfo.UserAccountControl &= 0xFFFFFFFE;
userAllInfo.UserAccountControl |= USER_NORMAL_ACCOUNT;
userAllInfo.WhichFields |= USER_ALL_USERACCOUNTCONTROL;
RtlInitUnicodeString(&userAllInfo.NtOwfPassword, password.Buffer);

// Set password and userAccountControl
status = SamSetInformationUser(hUserHandle, UserAllInformation, &userAllInfo);

在实现时,如果直接调用MS-SAMR的话在设置用户密码时会非常复杂,涉及到加密算法并且可能需要SMB Session Key(用impacket很好实现,但impacket不支持当前用户身份执行)

但我们可以调用samlib.dll的导出函数,在上一篇文章中提到过这些导出函数其实是封装了协议的调用,实现会更简单一些,代码Demo:https://github.com/loong716/CPPPractice/tree/master/AddUserBypass_SAMR


2. 解决密码过期限制

假设在渗透测试过程中,我们收集到一台服务器的用户账户,但当想要访问目标SMB资源时,发现该账户密码已过期。此处以psexec横向为例,目标显示STATUS_PASSWORD_MUST_CHANGE错误:


此时我们可以利用samba中的smbpasswd来修改该用户的密码


修改之后使用新密码就可以正常访问目标的SMB资源了:


实际上smbpasswd调用的是MS-SAMR的SamrUnicodeChangePasswordUser2(),该方法不需要上下文句柄,并且支持SMB空会话(Null Session)调用

https://github.com/samba-team/samba/blob/e742661bd2507d39dfa47e40531dc1dca636cbbe/source3/libsmb/passchange.c,L192


另外impacket之前也更新了该方法的example,并且该脚本支持hash传递:

https://github.com/SecureAuthCorp/impacket/blob/master/examples/smbpasswd.py

3. 信息收集/修改

,

欧博电脑版下载www.aLLbetgame.us)是欧博集团的官方网站。欧博官网开放Allbet注册、Allbe代理、Allbet电脑客户端、Allbet手机版下载等业务。

,

MS-SAMR协议在信息收集/修改方面能做的事情很多,如枚举/修改对象的ACL、用户&组信息、枚举密码策略等。此处以枚举本地管理员组账户为例

通常进行本地管理员组账户的枚举会调用NetLocalGroupGetMembers()这一API,前面提到过这类API底层也是调用MS-SAMR协议,先来看一下正常调用的过程:

1、SamrConnect:获取Server对象的句柄

2、SamrOpenDomain:打开目标内置域的句柄

3、SamrLookupNamesInDomain:在内置域中搜索Administrators的RID

4、SamrOpenAlias:根据Administrators的RID打开别名句柄

5、SamrGetMembersInAlias:枚举别名对象中的成员SID


此时我们如果想要开发自动化的信息收集工具(如SharpHound),那么我们需要考虑工具的通用性,比如在第3步调用SamrLookupNamesInDomain()时,我们需要传入"Administrators",但在某些系统中管理员组的名字可能有差异,如部分非英文操作系统中该组名为"Administradors",或者运维修改了本地管理员组名称,这样我们直接调用NetLocalGroupGetMembers()便不合适了

此时我们可以考虑优化这一操作,我们可以注意到本地管理员组在不同Windows系统上的RID始终为544


那么我们可以这样调用:

1、SamrConnect:获取Server对象的句柄

2、SamrOpenDomain:打开目标内置域的句柄

3、SamrOpenAlias:打开RID为544对象的别名句柄

4、SamrGetMembersInAlias:枚举该别名对象中的成员SID

按此思路,我们可以将MS-SAMR的API利用到我们自己工具的武器化or优化上

4. 添加域内机器账户

调用SamCreateUser2InDomain()时指定AccountType为USER_WORKSTATION_TRUST_ACCOUNT可以在域内添加机器账户

// Create computer in domain
status = SamCreateUser2InDomain(hDomainHandle, &computerName, USER_WORKSTATION_TRUST_ACCOUNT, USER_ALL_ACCESS | DELETE | WRITE_DAC, &hUserHandle, &grantAccess, &relativeId);

impacket的addcomputer.py包含了该方法,因为LDAPS需要证书的不稳定所以添加了SAMR(SAMR是Windows GUI环境添加机器使用的协议)


这个地方感觉还是有一些误区的,通过LDAP修改unicodePwd确实需要在加密的连接中操作,但LDAPS并不是必须的,像powermad.ps1在加密LDAP中添加机器账户同样可以成功,并且非常稳定


我们实战中大多数情况下添加机器账户都是在利用基于资源约束委派时,为了拿到一个有SPN的账户所以才选择添加机器账户。但我实际测试中发现该方法并不会自动为机器账户添加SPN,而通过LDAP或其他RPC为机器账户添加SPN又感觉有些画蛇添足,只能先作为一种添加机器账户的实现方法,如果其他方法不成功时可以尝试

0x02 参考

https://docs.microsoft.com/zh-cn/openspecs/windows_protocols/ms-samr/4df07fab-1bbc-452f-8e92-7853a3c7e380

https://github.com/SecureAuthCorp/impacket/

https://snovvcrash.rocks/2020/10/31/pretending-to-be-smbpasswd-with-impacket.html

https://blog.cptjesus.com/posts/sharphoundtechnical

,

皇冠平台出租rent.22223388.com)是皇冠(正网)接入菜宝钱包的TRC20-USDT支付系统,为皇冠代理提供专业的网上运营管理系统。系统实现注册、充值、提现、客服等全自动化功能。采用的USDT匿名支付、阅后即焚的IM客服系统,让皇冠代理的运营更轻松更安全。

  • usdt交易(www.usdt8.vip) @回复Ta

    2021-11-20 00:04:44 

    USDT场外交易平台www.usdt8.vip)是使用TRC-20协议的Usdt官方交易所,开放USDT帐号注册、usdt小额交易、usdt线下现金交易、usdt实名不实名交易、usdt场外担保交易的平台。免费提供场外usdt承兑、低价usdt渠道、Usdt提币免手续费、Usdt交易免手续费。U交所开放usdt otc API接口、支付回调等接口。

    看了一点,有空继续

  • 皇冠网址(www.huangguan.us) @回复Ta

    2021-11-22 00:06:14 

    他还称,现在已有部门CM12坦克完成化学封存作业,采“平封战启”方式实行封存,以节约维保人力,并维持装备妥善,仅余少部门是担任训练义务。未来随着M1A2T坦克来台,装甲军队的军力也会转移到新式M1A2T坦克单元。届时CM12坦克将全数化学封存,并分阶段举行汰除。我感觉能拿奖

  • usdt匿名交易(www.caibao.it) @回复Ta

    2021-11-24 00:06:35 

    usdt跑分平台www.caibao.it)是使用TRC-20协议的Usdt第三方支付平台,Usdt收款平台、Usdt自动充提平台、usdt跑分平台。免费提供入金通道、Usdt钱包支付接口、Usdt自动充值接口、Usdt无需实名寄售回收。菜宝Usdt钱包一键生成Usdt钱包、一键调用API接口、一键无实名出售Usdt。

    给你小心心~

发布评论