Возможно ли это? В С++ шарю не очень, хотя команды похожие. Подскажите, пожалуйста как сделать аналог на 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);
Хм. Ну что ж... Неплохое и многообещающие начало! Самым лучшим вариантом было бы перевести код самого эксплоита на язык Delphi (на хабре выкладывали на C++). Но EXE уже антивирем палится.
По идее там можно сделать так чтобы ничем не палилось и без лишней DLL ) И даже не юзая debug.exe. Посмотри исходники и там быстро можно понять что и как. Но на делфи переделывать не советую. Будут баги конкретные, в особенности в плане кода исполняемого в ring0 (если чуть не так напишеш)
на си тока и я под вынь7 сделал. у меня тока тоталресеты, что говорит что работает но криво) разбираться уже сил нет) короче я пытался тока р0 исполнение запустить без копирования маркера с привелегиями но видимо не туда улетаю( а вмвару надо еще скачать мля
Вообще сплоит чуть мутноват. т.е. периодически систему в бсод кидает. Я его чуть усовершенствовал. Теперь он не создает cmd с правами system. Теперь он дает права system для той проги которая запускает его. т.е. запускаем сплоит и та кто прога которая запустила его, сразу становится с правами system. Т.е. налог пингвиних рутовых сплоитов. Чуть позже мож выложу мой апдейт
Ну вот моя дороботка. В файле 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) т.е. в данном случае мы не будем зависеть от диска на котором находится винда.
Ну так возьми сишный код самой проги, убери логирование и форми в виде DLL и функцию main назови по другому и сделай экспортируемой
2 cheater_man ты чем думаешь? Каким образом ты собрался выполнить удаленное досовское приложения? ты хоть сам понимаешь о чем говоришь?
Нет ты меня не понял Тоесть например чтобы shell получал сразу права SYSTEM, а не те под которыми сидит юзер Бывает же такое иногда когда при получении cmd права бывают не SYSTEM.
2 cheater_man Это всё равно не remote а local потому что запуск происходит уже локально. Кстити я тут так подумал и понял что врядли это получится. Дело вот в чем: 1) если шел на Apache+Win то 99% что apache запущен из под SYSTEM так что тут не нужен експлоит 2) Если это IIS+PHP то тут другая вешь. А именно - IIS почти всегда запущен от спец пользователя и практически всегда эту пользователю запрещен запуск прог. То как никрути ты эксплоит не сможеш запустить там.
А без dll его возможно сделать? Чтобы только ExE-шник был, а то я в системном программировании профан совсем(