Exploiting Tools
Metasploit
Шеллкоди
GDB
Встановлення
Параметри
Інструкції
Ви можете за бажанням скористатися цим форком GEF, який містить більше цікавих інструкцій.
Підступи
Ті самі адреси в GDB
Під час налагодження GDB матиме трохи відмінні адреси від тих, які використовує бінарний файл при виконанні. Ви можете зробити так, щоб у GDB були ті самі адреси, виконавши наступне:
unset env LINES
unset env COLUMNS
set env _=<шлях>
Вкажіть абсолютний шлях до бінарного файлуВикористовуйте експлойт бінарного файлу, використовуючи той самий абсолютний шлях
PWD
таOLDPWD
повинні бути однаковими під час використання GDB та під час експлуатації бінарного файлу
Відстеження викликаних функцій
Коли у вас є статично зв'язаний бінарний файл, всі функції будуть належати бінарному файлу (і не зовнішнім бібліотекам). У цьому випадку буде складно визначити послідовність, яку слідує бінарний файл, наприклад, для запиту введення користувача.
Ви можете легко визначити цю послідовність, запустивши бінарний файл з gdb до тих пір, поки вас не попросять ввести дані. Потім зупиніть його за допомогою CTRL+C та використайте команду bt
(backtrace) для перегляду викликаних функцій:
GDB сервер
gdbserver --multi 0.0.0.0:23947
(в IDA вам потрібно вказати абсолютний шлях до виконуваного файлу на машині з Linux та на машині з Windows)
Ghidra
Знайдіть зсув стеку
Ghidra дуже корисний для знаходження зсуву для переповнення буфера завдяки інформації про позицію локальних змінних.
Наприклад, у наведеному нижче прикладі переповнення буфера в local_bc
вказує на те, що вам потрібен зсув 0xbc
. Більше того, якщо local_10
є куки-запобіжником, це вказує на те, що для перезапису його з local_bc
є зсув 0xac
.
Пам'ятайте, що перші 0x08, звідки зберігається RIP, належать RBP.
qtool
Отримайте кожен опкод, що виконується в програмі.
GCC
gcc -fno-stack-protector -D_FORTIFY_SOURCE=0 -z norelro -z execstack 1.2.c -o 1.2 --> Компіляція без захисту -o --> Вивід -g --> Зберегти код (GDB зможе його побачити) echo 0 > /proc/sys/kernel/randomize_va_space --> Вимкнути ASLR в Linux
Для компіляції shellcode: nasm -f elf assembly.asm --> повертає ".o" ld assembly.o -o shellcodeout --> Виконуваний файл
Objdump
-d --> Розібрати виконуваний файл -Mintel --> Синтаксис Intel -t --> Таблиця символів -D --> Розібрати все -s -j .dtors --> секція dtors -s -j .got --> секція got -D -s -j .plt --> секція plt -TR --> Релокації ojdump -t --dynamic-relo ./exec | grep puts --> Адреса "puts" для зміни в GOT objdump -D ./exec | grep "VAR_NAME" --> Адреса статичної змінної.
Core dumps
Виконайте
ulimit -c unlimited
перед запуском моєї програмиВиконайте
sudo sysctl -w kernel.core_pattern=/tmp/core-%e.%p.%h.%t
sudo gdb --core=<path/core> --quiet
More
ldd executable | grep libc.so.6 --> Адреса (якщо ASLR, то вона змінюється кожен раз) for i in `seq 0 20`; do ldd <Ejecutable> | grep libc; done --> Цикл для перевірки, чи часто змінюється адреса readelf -s /lib/i386-linux-gnu/libc.so.6 | grep system --> Зсув "system" strings -a -t x /lib/i386-linux-gnu/libc.so.6 | grep /bin/sh --> Зсув "/bin/sh"
strace executable --> Функції, які викликаються виконуваним файлом rabin2 -i ejecutable --> Адреса всіх функцій
Inmunity debugger
IDA
Відлагодження віддаленого Linux
У папці IDA ви знайдете виконувані файли, які можна використовувати для відлагодження бінарного файлу в середовищі Linux. Для цього перемістіть виконуваний файл linux_server
або linux_server64
на віддалений сервер Linux та запустіть його всередині папки, що містить бінарний файл:
Потім налаштуйте відлагоджувач: Відлагоджувач (віддалений linux) --> Опції процесу...:
Last updated