gpt4 book ai didi

powershell - 在不满足密码复杂性的情况下创建了 New-LocalUser

转载 作者:行者123 更新时间:2023-12-04 14:51:42 26 4
gpt4 key购买 nike

考虑以下代码:

$params = @{
Name = 'testUser1'
Password = (ConvertTo-SecureString '3' -AsPlainText -Force)
ErrorAction = 'Stop'
}
New-LocalUser @params

当启用密码复杂性的“本地安全策略”时,上面的代码应该会失败。似乎是这种情况,但仍会创建用户帐户。这是 Windows 中的错误吗?

最佳答案

长话短说

是的,由于密码不复杂,您的用户帐户中途存在,这可能是一个错误。源代码首先创建一个用户帐户,然后设置其密码。此外,它打算删除一个中途创建的用户帐户,但它显然没有。

说明

让我们看一下源代码(相对于提交658837323599ab1c7a81fe66fcd43f7420e4402b):

  1. New-LocalUserNewLocalUserCommand.cs 中实现.在 line 262 , CreateLocalUser()来自 Sam.cs被称为:

    user = sam.CreateLocalUser(user, Password, PasswordNeverExpires.IsPresent);

    所以这里没有什么特别的。

  2. CreateLocalUser()来自 Sam.cs电话 CreateUser()line 819在同一个文件中:

    internal LocalUser CreateLocalUser(LocalUser user, System.Security.SecureString password, bool setPasswordNeverExpires)
    {
    context = new Context(ContextOperation.New, ContextObjectType.User, user.Name, user);

    return CreateUser(user, password, localDomainHandle, setPasswordNeverExpires);
    }

    这里没什么特别的。

  3. 现在 CreateUser()line 1248 中首先创建没有密码的用户然后为现有用户设置密码,并在 line 1264 中设置附加信息:

    status = SamApi.SamCreateUser2InDomain(domainHandle,
    ref str,
    (int) SamApi.USER_NORMAL_ACCOUNT,
    Win32.MAXIMUM_ALLOWED,
    out userHandle,
    out grantedAccess,
    out relativeId);
    Marshal.DestroyStructure<UNICODE_STRING>(buffer);
    Marshal.FreeHGlobal(buffer);
    buffer = IntPtr.Zero;
    ThrowOnFailure(status);

    // set the various properties of the user. A SID is required because some
    // operations depend on it.
    userInfo.SID = RidToSid(domainHandle, relativeId);

    SetUserData(userHandle, userInfo, UserProperties.AllCreateable, password, PasswordExpiredState.NotExpired, setPasswordNeverExpires);

    这解释了为什么即使不满足密码复杂性也会创建用户帐户:密码稍后设置。

如果您进一步查看源代码,您会看到一个 catch block ,它会在出现问题时删除用户。所以这确实很奇怪,您的新用户在使用不复杂的密码创建后仍然存在。 SetUserData()SetUserPassword() , 都转发异常。所以,到目前为止一切都很好。 SetUserPassword()电话 SamSetInformationUser()来自 samlib.dll。我假设将在那里检查密码复杂性。不幸的是,据我所知,samlib.dll 不是开源的,我们无法进一步调查。

是的,由于密码不复杂,您的用户帐户中途在创建失败后存在,这可能是一个错误。该代码打算删除一个中途创建的用户帐户,但它显然没有。

关于powershell - 在不满足密码复杂性的情况下创建了 New-LocalUser,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68981293/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com