Если пароль администратора пустой..

Тема в разделе "WASM.ASSEMBLER", создана пользователем asmasm, 23 янв 2006.

  1. asmasm

    asmasm New Member

    Публикаций:
    0
    Регистрация:
    16 янв 2006
    Сообщения:
    69
    Адрес:
    Uzbekistan
    Здравствуйте!

    Есть проблемка такая:

    Админский пароль пустой.

    invoke LogonUser,SADD("Администратор"),0,0,0,addr hToken

    Возвращает ошибку типа: "Не разрешены пустые пароли" и т.д..

    Если кто-нибудь знает, как их разрешить, пожалуйста пишите?
     
  2. zag2art

    zag2art New Member

    Публикаций:
    0
    Регистрация:
    4 ноя 2005
    Сообщения:
    40
    Вообщето все дело в локальной политике безопасности. В XP, по моему, по умолчанию невозможно програмно логиниться с пустым паролем (да и по сети тоже).



    Естественно эту политику можно изменить, но с другой стороны для ее изменения тебе нужны права админа :dntknw:



    Первый способ - ручками:



    В настройках локальных политиках безопасности меняешь соответствующий параметр...



    Второй через реестр: (соответственно можно и програмно)



    [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa]

    "limitblankpassworduse"==dword:00000000



    Вроде бы так... (знания чисто теоретические, вполне возможно ошибаюсь)
     
  3. Avoidik

    Avoidik New Member

    Публикаций:
    0
    Регистрация:
    29 дек 2004
    Сообщения:
    288
    Адрес:
    Russia
    может стоит попробовать заюзать не 0, а addr db 0?
     
  4. NullSessi0n

    NullSessi0n New Member

    Публикаций:
    0
    Регистрация:
    20 янв 2006
    Сообщения:
    322
    Невозможно программно залогиниться - навряд ли, winlogon логинит юзера именно программно. Но там вроде msgina.dll замешана, она ещё Ctrl-Alt-Del обработчик содержит. Её наверное стоит посмотреть. НО через LogonUser с пустым паролем не получается.

    2 Avoidik

    Да вроде бы NULL и указатель на пустую строку эта функция воспринимает одинаков, разве нет?
     
  5. asmasm

    asmasm New Member

    Публикаций:
    0
    Регистрация:
    16 янв 2006
    Сообщения:
    69
    Адрес:
    Uzbekistan
    addr db 0 не помогает.

    Но winlogon логиниться же с пустым паролем, может напрямую надо Lsa функции вызывать, ведь должна же быть функция, типа LsaLogonUser или что-то подобное.
     
  6. z0mailbox

    z0mailbox z0

    Публикаций:
    0
    Регистрация:
    3 фев 2005
    Сообщения:
    635
    Адрес:
    Russia СПБ
    есть такая LsaLogonUser

    см. http://pluralsight.com/blogs/keith/archive/2005/01/27/5486.aspx

    опытные люди говорят - одна из самых сложных для программера функций в винде

    но функциональность у LsaLogonUser и просто LogonUser принципиально разная и применяются они в разных ситуациях
     
  7. Foamplast

    Foamplast New Member

    Публикаций:
    0
    Регистрация:
    6 ноя 2003
    Сообщения:
    80
    Адрес:
    Russia
    А может быть "пустой" пароль на самом деле не пустой, а какое-нибудь значение по умолчанию?
     
  8. asmasm

    asmasm New Member

    Публикаций:
    0
    Регистрация:
    16 янв 2006
    Сообщения:
    69
    Адрес:
    Uzbekistan
    Определена в secur32.inc

    LsaLogonUser PROTO :lol: WORD,:lol: WORD,:lol: WORD,:lol: WORD,:lol: WORD,:lol: WORD,:lol: WORD,:lol: WORD,:lol: WORD

    Вот такой у нее прототипчик, а что все это значит только?



    А еще есть, определенная в ntoskrnl.inc:

    LsaLogonUser proto stdcall :lol: WORD, :lol: WORD, :lol: WORD, :lol: WORD, :lol: WORD, :lol: WORD, :lol: WORD, :lol: WORD, :lol: WORD, :lol: WORD, :lol: WORD, :lol: WORD, :lol: WORD, :lol: WORD
     
  9. asmasm

    asmasm New Member

    Публикаций:
    0
    Регистрация:
    16 янв 2006
    Сообщения:
    69
    Адрес:
    Uzbekistan
    В импорте msgina.dll есть только функция LsaLogonUser.
     
  10. z0mailbox

    z0mailbox z0

    Публикаций:
    0
    Регистрация:
    3 фев 2005
    Сообщения:
    635
    Адрес:
    Russia СПБ




    для начала смотри в мсдн
     
  11. asmasm

    asmasm New Member

    Публикаций:
    0
    Регистрация:
    16 янв 2006
    Сообщения:
    69
    Адрес:
    Uzbekistan
    z0mailbox: Без тебя бы не догадался!!!

    Ты бы лучше привел пример её вызова.
     
  12. sergh

    sergh New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2005
    Сообщения:
    128
    Адрес:
    rsdn
    NullSessi0n

    >> Невозможно программно залогиниться - навряд ли, winlogon логинит юзера именно программно.

    Неужели аппаратно??



    >> Но там вроде msgina.dll замешана, она ещё Ctrl-Alt-Del обработчик содержит. Её наверное стоит посмотреть

    Для текущей задачи - не стоит. Она использует в своей реализации LogonUser или LsaLogonUser



    asmasm

    >> Ты бы лучше привел пример её вызова.

    В MSDN есть. Например, в статье Keith Brown "Security Briefs: Exploring S4U Kerberos Extensions in Windows Server 2003"

    http://msdn.microsoft.com/msdnmag/issues/03/04/SecurityBriefs/

    Правда, тут довольно специфичный пример, но всё-таки.
     
  13. asmasm

    asmasm New Member

    Публикаций:
    0
    Регистрация:
    16 янв 2006
    Сообщения:
    69
    Адрес:
    Uzbekistan
    Я раскопал в отладчике, что функция LogonUser только подготавливает

    аргументы для функции LsaLogonUser и именно последняя принимает

    решение дать токен или не дать, но с пустым паролем она не его дает,

    но все же как тогда winlogon делает это?
     
  14. halyavin

    halyavin New Member

    Публикаций:
    0
    Регистрация:
    13 май 2005
    Сообщения:
    252
    Адрес:
    Russia
    Может через CreateProcessWithLogonW?
     
  15. asmasm

    asmasm New Member

    Публикаций:
    0
    Регистрация:
    16 янв 2006
    Сообщения:
    69
    Адрес:
    Uzbekistan
    Winlogon регистрирует от имени system, но пробовал запускать процесс с помощью at, но результаты те же самые.
     
  16. z0mailbox

    z0mailbox z0

    Публикаций:
    0
    Регистрация:
    3 фев 2005
    Сообщения:
    635
    Адрес:
    Russia СПБ




    именно LsaLogonUser







    сказали же тебе по-русски - мсдн



    http://msdn.microsoft.com/msdnmag/issues/03/04/SecurityBriefs/default. aspx?fig=true#fig1



    #define UNICODE

    #define _UNICODE

    #include <windows.h>

    #include <ntsecapi.h>

    #include <stdio.h>



    #pragma comment(lib, "secur32.lib")



    // some simple error handling functions

    void _err(const wchar_t* fcn, DWORD err = GetLastError()) {

    wchar_t msg[256];

    if (!FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, 0, err,

    0, msg, sizeof msg / sizeof *msg, 0)) {

    wsprintf(msg, L"hr = 0x%08X", err);

    }

    wprintf(L"%s failed: %s\n", fcn, msg);

    exit(1);

    }



    void _nterr(const wchar_t* fcn, NTSTATUS s) {

    _err(fcn, LsaNtStatusToWinError(s));

    }



    void _checknterr(const wchar_t* fcn, NTSTATUS s) {

    if (s) {

    _nterr(fcn, s);

    }

    else {

    wprintf(L"%s succeeded.\n", fcn);

    }

    }



    // helper for initializing Kernel type ANSI strings

    // from string literals

    void _si(LSA_STRING* a, const char* b) {

    a->Length = (USHORT)(strlen(b) * sizeof(*b));

    a->MaximumLength = (USHORT)(a->Length + sizeof(*b));

    a->Buffer = const_cast<char*>(b);

    }



    HANDLE _s4uLogon(const wchar_t* pszUserPrincipalName) {

    // connect to the Local Security Authority

    // this will allow us to get a token via S4U2Self

    // (note we aren't in the TCB so we won't be able

    // to use the resulting token to open Kernel objects)

    HANDLE hlsa;

    _checknterr(L"LsaConnectUntrusted",

    LsaConnectUntrusted(&hlsa));



    // look up the Kerb authentication provider's index

    LSA_STRING pkgName;

    _si(&pkgName, MICROSOFT_KERBEROS_NAME_A);

    ULONG authnPkg;

    _checknterr(L"LsaLookupAuthenticationPackage",

    LsaLookupAuthenticationPackage(hlsa,

    &pkgName, &authnPkg));



    const DWORD cchUPN = lstrlen(pszUserPrincipalName);

    const DWORD cbUPN = cchUPN * sizeof(wchar_t);



    // KERB_S4U_LOGON must be passed as a single

    // contiguous buffer that includes all strings,

    // otherwise LsaLogonUser will complain

    const DWORD cbLogon = sizeof(KERB_S4U_LOGON) + cbUPN;

    KERB_S4U_LOGON* s4uLogon =

    (KERB_S4U_LOGON*)calloc(cbLogon, 1);

    s4uLogon->MessageType = KerbS4ULogon;

    s4uLogon->ClientUpn.Buffer =

    (wchar_t*)((char*)s4uLogon + sizeof *s4uLogon);

    CopyMemory(s4uLogon->ClientUpn.Buffer,

    pszUserPrincipalName, cbUPN);

    s4uLogon->ClientUpn.Length = (USHORT)cbUPN;

    s4uLogon->ClientUpn.MaximumLength = (USHORT)cbUPN;



    // this information is copied into the resulting token

    // note that SourceName is an 8 character ASCII buffer

    TOKEN_SOURCE tokenSource;

    AllocateLocallyUniqueId(&tokenSource.SourceIdentifier);

    strcpy(tokenSource.SourceName, "test");

    LSA_STRING originName;

    _si(&originName, "MSDN S4U Logon Sample");



    // finally, the call to LsaLogonUser,

    // asking for a Network style logon

    // using the S4U2Self Kerb extension

    void* profile = 0;

    DWORD cbProfile = 0;

    LUID logonId;

    HANDLE htok;

    QUOTA_LIMITS quotaLimits;

    NTSTATUS subStatus;

    _checknterr(L"LsaLogonUser",

    LsaLogonUser(hlsa,

    &originName,

    Network,

    authnPkg,

    s4uLogon, cbLogon,

    0,

    &tokenSource,

    &profile, &cbProfile,

    &logonId,

    &htok,

    &quotaLimits,

    &subStatus));



    // clean up

    free(s4uLogon);

    LsaFreeReturnBuffer(profile);

    LsaClose(hlsa);



    return htok;

    }



    void main() {

    HANDLE htok = _s4uLogon(L"alice@esec.com");

    }



    ты не с той проблемой воюешь

    забей на LsaLogonUser

    у тебя не идет LogonUserA/W потому что полиси рестрикшн!

    разбирайся с ней



    ЗЫ: а winlogon действительно использует именно LsaLogonUser потому что логонится на самом деле такой зомби по имени INTERACTIVE_LOGON а потом он уже переимперсонируется в настоящего юзера

    нахрена так - спроси у билли
     
  17. asmasm

    asmasm New Member

    Публикаций:
    0
    Регистрация:
    16 янв 2006
    Сообщения:
    69
    Адрес:
    Uzbekistan
    Спасибо за внимание, я всё понял!