Получение указанных c данных из Active Directory через LDAP в C ++ (получение порога блокировки) - PullRequest
0 голосов
/ 23 января 2020

Я улучшаю некоторый код, который помогает проверить, правильно ли отслеживаются пароли. Вот исходный код внедренной DLL: https://github.com/outflanknl/Spray-AD/blob/master/Src/Spray-AD/Spray-AD/ReflectiveDll.cpp

В настоящее время проблема в этой DLL заключается в том, что она может блокировать пользователей (поскольку некоторые пользователи уже могут иметь некоторый badPwdCount к своему имени пользователя ), поэтому мне нужно правильно проверить, какой текущий badPwdCount пользователя и какое значение thresholdLockout для каждого пользователя, прежде чем пытаться аутентифицироваться как этот указанный c пользователь (поскольку разные пользователи могут иметь разные политики паролей).

К счастью, badPwdCount было несложно реализовать, и я правильно изменил фильтр LDAP:

WCHAR* pszPropertyList[3] = { L"sAMAccountName" , L"badPwdCount" , L"lockoutThreshold"};

и правильно настроил функцию ExecuteSearch:

else
{
    // Return specified properties
    hr = pContainerToSearch->ExecuteSearch(pszSearchFilter,
        pszPropertyList,
        3,
        &hSearch);
}

И случай переключения поэтому он правильно перехватит badPwdCount:

case ADSTYPE_INTEGER:
for (x = 0; x < col.dwNumValues; x++) {
    if (_wcsicmp(col.pszAttrName, L"badPwdCount") == 0) {
        if (col.pADsValues->Integer >= 4 || col.pADsValues->Integer == 0) {  
            /*some code*/
            break;
        }
    }
}

Но так как я хочу сравнить badPwdCount с заданным порогом блокировки пользователя c (а не 4, как в примере выше), я попытался извлечь Атрибут lockoutThreshold можно посмотреть здесь: https://docs.microsoft.com/en-us/windows/win32/adschema/a-lockoutthreshold

Хотя я не могу получить у меня результат для блокировки порога ... код даже не возвращает мне ошибку неизвестного типа:

default:
     wprintf(L"[!] Unknown type %d.\n", col.dwADsType);

, что очень странно для меня, так как я могу получить другие атрибуты (такие как badPasswordTime) без проблем .

Как правильно получить порог блокировки? примеры кода будут потрясающими.

1 Ответ

1 голос
/ 23 января 2020

В документации для lockoutThreshold, на которую вы ссылались, посмотрите «Используемые классы», в которой перечислены:

  • Domain-Policy
  • Sam-Domain
  • Sam-Domain-Base

Обратите внимание, что в него не входит «Пользователь».

Вы не найдете этот атрибут в учетной записи пользователя , Вы найдете его в узле root домена.

Но да, как вы обнаружили, lockoutThreshold может быть переопределен с помощью детальной политики паролей.

...