Переведено для codeby. Net
Download 0.92 Mb. Pdf ko'rish
|
эксплуатация систем arm linux AFANX
- Bu sahifa navigatsiya:
- Алгоритм 4 Классический шеллкод (shell.c)
5.2 Разработка шеллкода
Разработка шеллкода может начаться с компиляции простой программы, написанной на языке C, которая выполняет нужную нам операцию. Самый классический шеллкод запускает оболочку, вызывая команду execve(): Алгоритм 4 Классический шеллкод (shell.c) #include void operation(){ execve(”/bin/sh”, NULL, NULL); } int main(int argc, char ∗∗ argv){ operation(); } Теперь мы должны получить ассемблерный код программы, убедившись, что сгенерировали позиционно-независимый код, поскольку мы не знаем, где будет размещен шеллкод в памяти. 44 root@armstation# gcc -S -static shell.c root@armstation# gcc -static shell.c -o shell root@armstation# Мы сгенерировали как машинный код, так и ассемблерный код программы. Мы включили сюда листинг shell.s (алгоритм 5), но для анализа машинного кода мы будем использовать gdb. root@armstation# gdb ./shell ... (gdb) disass operation Dump of assembler code for function operation: 0x00008238 0x0000823c 0x00008240 0x00008244 0x00008248 0x0000824c 0x00008250 0x00008254 0x00008258 0x0000825c 0x00008260 End of assembler dump. (gdb) Так происходит сборка функции. Критический момент, который нас интересует, и который мы превратим в шеллкод, это вызов execve (строки 0x00008244- 0x00008250). Первые три строки подготавливают регистры r0-r2 для размещения в них аргументы, а последняя строка выполняет вызов. Для создания шеллкода нам нужно извлечь байты машинного кода и закодировать их в строку текста. Очень полезным инструментом для этого является hexdump, который может печатать шестнадцатеричные дампы двоичных файлов, и поддерживает использование смещений, чтобы извлечения точных секций данных. Чтобы найти местоположение интересующего нас кода в файле, мы должны использовать небольшой трюк: gdb address — loading offset(0x8000) = file offset Вычитая из адреса, по которому gdb выдает нам смещение, по которому загружается код программы (0x8000), мы находим смещение, по которому код находится в файле (0x8000), мы находим смещение, по которому код находится в файле. 45 |
Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling
ma'muriyatiga murojaat qiling