Переведено для codeby. Net


Алгоритм 1 Первая уязвимая программа (test.c)


Download 0.92 Mb.
Pdf ko'rish
bet15/36
Sana09.05.2023
Hajmi0.92 Mb.
#1449564
TuriРеферат
1   ...   11   12   13   14   15   16   17   18   ...   36
Bog'liq
эксплуатация систем arm linux AFANX

Алгоритм 1 Первая уязвимая программа (test.c)
#include
#include
#include
void donuts () {
puts(”Donuts . . . ”);
exit (0);
}
void vuln ( char ∗ a r g ) {
char buff[10];
strcpy(buff, arg);
}
int main(int argc, char ∗∗argv) {
vuln(argv[1]);
return 0;
}
25


В нашей системе ARM:
root@armstation# gcc -o test test.c
Программа тривиальна, и единственное, что она делает, это сохраняет в буфере
пользовательский ввод. Так как размер буфера заранее определен, то при
достаточно длинной строке символов, можно перезаписать важную
информацию на стеке.
Давайте посмотрим на это на практике:
root@armstation# ./test
Segmentation fault
root@armstation# ./test hello
root@armstation# ./test 1234567890
Segmentation fault
Первый сбой связан с отсутствием ввода, но это не то, что мы ищем...
Последующие попытки были направлены на определение нужной длины, чтобы
вызвать программу к сбою.
Как только приблизительная длина была найдена (в нашем случае около 10
символов), пришло время использовать отладчик для получения точных
данных:
root@armstation# gdb ./test
... gdb headers ...
This GDB was configured as "arm-linux-gnueabi"...
(gdb) run 1234567890
Starting program: /root/exp/test 1234567890
Program received signal SIGSEGV, Segmentation fault.
0x07ab8a78 in ?? ()
(gdb) r AAAABBBBCCCCDDDDEEEE
The program being debugged has been started already.
Start it from the beginning? (y or n) y
Starting program: /root/exp/test AAAABBBBCCCCDDDDEEEE
Program received signal SIGSEGV, Segmentation fault.
0x00004544 in ?? ()
(gdb) r AAAABBBBCCCCDDDDEEEEFF
The program being debugged has been started already.
Start it from the beginning? (y or n) y
Starting program: /root/exp/test AAAABBBBCCCCDDDDEEEEFF
Program received signal SIGSEGV, Segmentation fault.
26


0x46464544 in ?? ()
(gdb) quit
The program is running. Exit anyway? (y or n) y
root@armstation#
С помощью GDB мы обнаружили, что для полной перезаписи обратного адреса
необходимо 22 символа. Поскольку процесс перезаписи отличается от процесса
в системы x86/x64, важно понять, что происходит внутри уязвимой функции
программы.
С помощью GDB мы обнаружили, что для полной перезаписи обратного адреса
необходимо 22 символа. Поскольку процесс перезаписи отличается от процесса
в системы x86/x64, важно понять, что происходит внутри уязвимой функции
программы.
root@armstation# gdb ./test
... gdb headers ...
This GDB was configured as "arm-linux-gnueabi"...
(gdb) break vuln
Breakpoint 1 at 0x8428
(gdb) r AABBBBCCCCDDDDEEEEFFFF
Starting program: /root/exp/test AABBBBCCCCDDDDEEEEFFFF
Breakpoint 1, 0x00008428 in vuln ()
Current language: auto; currently asm
(gdb)
Выполнение остановилось в начале функции vuln(). Нам нужно разобрать ее:
(gdb) disass vuln
Dump of assembler code for function vuln:
0x00008414 : mov r12, sp
0x00008418 : push {r11, r12, lr, pc}
0x0000841c : sub r11, r12, #4 ; 0x4
0x00008420 : sub sp, sp, #24 ; 0x18
0x00008424 : str r0, [r11, #-32]
0x00008428 : sub r3, r11, #22 ; 0x16
0x0000842c : mov r0, r3
0x00008430 : ldr r1, [r11, #-32]
0x00008434 : bl 0x830c
0x00008438 : sub sp, r11, #12 ; 0xc
0x0000843c : ldm sp, {r11, sp, lr}
0x00008440 : bx lr
End of assembler dump.
(gdb)
В дальнейшем мы будем использовать эту разборку в качестве эталона.
Анализируя код, мы можем легко найти части и критические точки функции:
27



Первые 20 байт функции служат в качестве преамбулы и подготавливают
стек, используемый функцией.

По адресу 0x0000842c начинается вызов функции strcpy(), которая требует
двух параметров. Первый параметр, адрес буфера назначения (char buff[10])
помещается в r0. Второй параметр, адрес строки, которую нужно копирования
(наш вход), помещается в r1. В отличие от архитектуры x86, в ARM параметры
передаются через регистры, а не в стек. По адресу 0x00008434 вызывается
strcpy() вызывается (с инструкцией Branch with Link).

Критическая точка, которую мы подробно обсудим, находится по адресу

Download 0.92 Mb.

Do'stlaringiz bilan baham:
1   ...   11   12   13   14   15   16   17   18   ...   36




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling