|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Апр 25, 2004 23:51:42 Когда-то задавал вопрос о том, как можно запустить драйвер без прав админа. (service manager не в админе со мной говорить не хочет) Получил совет use-ать ZwLoadDriver@4. Нашел, что в параметрах к нему передать Unicode-строку надо. Ну хорошо, но при попытке импортировать её (ф-ю) из ntoskrnl, получаем STATUS_ACCESS_VIOLATION. Хорошо, смотрим, что есть еще и Nt-вариант этой ф-йй. Опять передаем Unicode-строку. Все бы хорошо, но получаем: STATUS_DATATYPE_MISALIGNMENT. Вопрос 1. Чё делать??? :) Вопрос 2. И вообще действительно ли получится запуск драйвера в режиме обычного пользователя??? Заранее благодарен. --==ППС==-- |
|
|
Дата: Апр 26, 2004 09:22:07 Ну так это значит, что выравнивания нет. Выравняй в памяти скажем на 16 байт свою строку и передай, посмотри, что получиться. |
|
|
Дата: Апр 26, 2004 10:54:21 · Поправил: PavPS Да, действительно нет, не спорю (там код типа:mov edx,offset stroka; test dl,01;jnz fuck_you), но уже пробовал. Пишет типа с000003b - адрес не тот (но с этом я еще разберусь... пока не всё перепробовал). И как на счет вопоса №2. Может кто устранит сию недокументированость??? |
|
|
Дата: Апр 26, 2004 12:11:41 [ PavPS: Ну хорошо, но при попытке импортировать её (ф-ю) из ntoskrnl, получаем STATUS_ACCESS_VIOLATION. ] Зачем из ntoskrnl то? Ты же из режима пользователя хочешь дровину запускать. Т.е. надо тянуть из ntdll. [ PavPS: Хорошо, смотрим, что есть еще и Nt-вариант этой ф-йй. ] Для ntdll Nt и Zw - синонимы. Для ntoskrnl нет. [ PavPS: Получил совет use-ать ZwLoadDriver@4. ] Не, не получится. Ей нужно передавать не адрес файла драйвера на диске, а адрес сервиса в реестре. Например если beeper.sys зарегистрировать, то запустить его можно так: ;@echo off
;goto make
.386
.model flat, stdcall
option casemap:none
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::
include \masm32\include\kernel32.inc
include \masm32\include\w2k\ntdll.inc
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\w2k\ntdll.lib
include \masm32\Macros\Strings.mac
.const
CTW "\\Registry\\Machine\\System\\", g_wszName, 4
CTW0 "CurrentControlSet\\Services\\beeper"
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::
.code
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::
start proc uses esi edi ebx
local us:UNICODE_STRING
invoke RtlInitUnicodeString, addr us, addr g_wszName
invoke ZwLoadDriver, addr us
invoke ExitProcess, 0
ret
start endp
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::
end start
:make
set exe=ZwLoadDriver
\masm32\bin\ml /nologo /c /coff %exe%.bat
\masm32\bin\link /nologo /subsystem:windows %exe%.obj
del %exe%.obj
echo.
pause
Но сервис уже должен быть зарегистрирован, а это ограниченные пользователи делать не могут. Даже если он уже будет зарегистрирован админом, то всё равно ZwLoadDriver обломится. |
|
|
Дата: Апр 26, 2004 16:33:39 Спасибо! 2 Four-F Zw - вариант я смотрел, т.к. у меня именно к нему было описание, а т.к. у Nt варианта тоже 1 параметр, то по логике... А зачем из User-a вызавал - а черт его знает... А вот как же бальIf из user-а хоче DRV запустить... Для регистрации в реестре и ServiceManager пойдет да вот фига... Надеюсь на вопрос есть ответ. Если нет, конечно, хуже, но у нас есть NTCALL и шлюз 2Eh, так вот хотелось бы узнать по-полной о работе, которая производиться при загрузке драйвера Wind-ой. Может ручками получится?!?!?!. И коль уж разговороились про регистрацию дров в реестре, то позволю себе продолжить в этой теме, т.к. "Автозапуск драйвера" у меня зашелл за экран :) - призадании воппроса про SafeBoot был получен следующий ответ: HKLM\SYSTEM\CurrentControlSet\Control\SafeBoot Ну и чё? Там куча "папочек" (например внутри "minimal") с ,может, именами дров, но как мне то себя внести??? и где перед этим зарегиться??? |
|
|
Дата: Апр 26, 2004 20:12:36 Я пользую программу Kernel-mode Driver Manager by Four-F. и регистрирую и выгружаю и запускаю под 2000 и XP (не админом не пробовал звиняй) но пользоваться очень удобно... |
|
|
Дата: Апр 26, 2004 21:21:34 · Поправил: PavPS 2 S_W_A_N Ну!!! Куда же без нее!!! Уже давно use-аю её и очень благодарен автору! АФигенная вешь.... но вопрос не в обычной регисрации :) про SafeBoot! и про регисрацию (запуск) из User-а. [S_W_A_N: не админом не пробовал звиняй] Правильно, не пробуй. Уверяю, что пошлет. И далеко... Прямо за SACL админа. |
|
|
Дата: Апр 26, 2004 22:59:21 [ PavPS: про SafeBoot! ] Берешь у меня из KmdKit драйвер beeper.sys, пихаешь его в %SystemRoot%\drivers\ Регистрируешь (например KmdManager'ом). Заходишь в реестр в \CurrentControlSet\Services\beeper Меняешь Start на 1, а ImagePath на System32\drivers\beeper.sys Идешь в Minimal или Network (по вкусу) Создаешь там раздел beeper.sys В параметр (По умолчанию) пишешь Driver Ребутишься в сейфмоде и слышишь как драйвер пиликает. Всё, с деталями сам, надеюсь, разберешься. ЗЫ: KmdManager, кстати, уже давно вторая версия у мя пылиться. Там значительно больше функционала. Надо только чуть закончить, да времени нет :( |
|
|
Дата: Апр 26, 2004 23:12:13 Спасибо попробую. А на счет KmdManager V2.0 - это с удовольствием. Кстати, может надоел уже с вопросом, но о загрузке DRV без прав админа Все намерено молчат, аль не знают ??? :)) Хотя буду рыть... можа и откопаю чё. |
|
|
Дата: Апр 27, 2004 00:07:53 Да что тут рыть-то... Как-то давным-давно прочитал я одну книжонку. Ничего такого особенного, но одна строчка мне в память крепко зашла. Мол, только защита, подкрепленная аппаратными средствами чего-то стоит, остальное - фигня. Вот к примеру, кольца защищенного режима подкреплены процом - их не пробить. А вот админские привилегии - это софтная защита, ее, вероятно, обойти можно. Но только это сработает раз и не больше. Смотри:
NTSTATUS
NtLoadDriver(
IN PUNICODE_STRING DriverServiceName
)
...
requestorMode = KeGetPreviousMode();
if (requestorMode != KernelMode) {
//все что тут, это к нам
if (!SeSinglePrivilegeCheck( SeLoadDriverPrivilege, requestorMode )) {
return STATUS_PRIVILEGE_NOT_HELD;
}
//ага, вот и проверочка - любишь винду хакать?
//далее еще хренова туча проверок на DriverServiceName
...
}
//а теперь и есть самое любопытное - загрузка драйвера:
KeInitializeEvent( &loadPacket.Event, NotificationEvent, FALSE );
loadPacket.DriverObject = (PDRIVER_OBJECT) NULL;
loadPacket.DriverServiceName = &driverServiceName;
if (PsGetCurrentProcess() == PsInitialSystemProcess) {
IopLoadUnloadDriver(&loadPacket);
} else {
ExInitializeWorkItem( &loadPacket.WorkQueueItem,
IopLoadUnloadDriver,
&loadPacket );
ExQueueWorkItem( &loadPacket.WorkQueueItem, DelayedWorkQueue );
KeWaitForSingleObject( &loadPacket.Event,
UserRequest,
KernelMode,
FALSE,
(PLARGE_INTEGER) NULL );
}
...
Вывод: вероятно, обратившись к функциям после проверок напрямую, ты сможешь обойти защиту. Может быть. Но даже если у тебя это и получится, то дыру залатают через сервис-пак. Максимум. |
|
|
Дата: Апр 27, 2004 00:29:57 · Поправил: PavPS Мерси! Как всё просто :))), и всего то делов :))))). Наверное да, читать исходники надо :) |
|
|
Дата: Май 20, 2004 01:26:32 Да нет, не все так просто :( NtLoadDriver - это ж ведь шлюз, т.е. код, что я привел, в ядре-то. А к ядру и надо доступ получить. Т.е., получается замкнутый круг. Низзя :( |
|
|
Дата: Май 20, 2004 02:35:05 · Поправил: PavPS 4)Путь к сердцу wind-ы - через кольцо 0 3)В кольцо ноль - через драйвер 2)В драйвер - через права админа 1)В права админа - через огран.пользователя Чтобы пройти снизу вверх - хотелось бы запуститься в процессе System. Так вот последние 2 дня, как в инкубаторе, выращиваю и лилею хрен-знает какой вирус, но эта дрянь из любой учетной записи запускается System. Правда он ищо в инет лезет - но с SiftIce это отрубить не проблема. Так вот в ближайшие дни, надеюсь на первую ступень поднимусь. ЗюЫю А прога, представленная в новом посте про ring-0 , которая типа делает вышеописанное, не пашет. |
|
|
Дата: Май 20, 2004 03:24:08 volodya вероятно, обратившись к функциям после проверок напрямую Да, но в некоторых из них происходит проверка SeSinglePrivilegeCheck :), и потому это не реально. А NtLoadDriver работает в режиме админа без вопросов, даже SC (service manager) не нужен. |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.134 |