在我的应用程序中,我正在检查用户是否在Windows上设置/启用了密码,作为安全应用程序的一部分(漏洞扫描)。
我本人来自一个软件开发背景,因此,在系统管理方面,我对新事物相当陌生。到目前为止,im知道LogonUsers API可以工作,但是使用该API并尝试“登录”时,如果设置了帐户锁策略,则将清空凭据计数,从而使使用该API变得不可行。
我最近发现的cmd命令net use \\%COMPUTERNAME% "/user:%USERNAME%"“有时”工作,但通常它无法检查是否存在密码集,因为它会产生相同的输出。
在程序位防御网络安全中,漏洞扫描实用程序在设置组策略帐户锁定策略时,使用高精度的检查此问题,而无需触发/计数“失败登录尝试”计数器。我试着使用Sysinternals过程监视器来反向工程这个功能,但是找不到任何东西(可能我漏掉了什么)。另一个难题是找出位防御程序如何能够获得密码“长度”。
我想知道是否有人对检查用户帐户是否设置/启用了密码有任何建议?
发布于 2018-11-03 03:17:19
一旦密码更改,即使是windows也不知道密码的长度。密码以固定长度散列形式存储在SAM数据库中。有一些未文档化的API来查询SAM数据库以获取密码,但它实际上只返回固定长度的密码的散列。
您可以使用NetUserModalsGet() api检索有关密码策略的各种信息,但这将只返回最小密码长度等。还有另一个api可以获取名为NetUserGetInfo()的用户帐户的信息,它将返回密码年龄,也许您可以使用该信息来检查密码上次更改的时间,但这可能没有多大帮助。这样做的一种方法是使用空白密码调用LogonUser,如果失败,则将bad_pw_count重置为您尝试之前的状态。无论如何,我向您保证,任何声称知道windows中用户密码长度的程序都是胡扯。
https://stackoverflow.com/questions/53046746
复制相似问题