Exploiting Tools
Last updated
Last updated
Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Ви можете за бажання використовувати цей форк GEF, який містить більш цікаві інструкції.
Під час налагодження GDB буде мати трохи інші адреси, ніж ті, що використовуються бінарним файлом під час виконання. Ви можете зробити так, щоб GDB мав ті ж адреси, виконавши:
unset env LINES
unset env COLUMNS
set env _=<path>
Вкажіть абсолютний шлях до бінарного файлу
Використовуйте бінарний файл, використовуючи той же абсолютний шлях
PWD
та OLDPWD
повинні бути однаковими під час використання GDB та під час експлуатації бінарного файлу
Коли у вас є статично зв'язаний бінарний файл, всі функції будуть належати бінарному файлу (а не зовнішнім бібліотекам). У цьому випадку буде важко виявити потік, який бінарний файл слідує, щоб, наприклад, запитати введення користувача.
Ви можете легко виявити цей потік, запустивши бінарний файл з gdb до того, як вас попросять ввести дані. Потім зупиніть його за допомогою CTRL+C і використовуйте команду bt
(backtrace), щоб побачити викликані функції:
gdbserver --multi 0.0.0.0:23947
(в IDA потрібно вказати абсолютний шлях до виконуваного файлу на Linux машині та на Windows машині)
Ghidra дуже корисна для знаходження зсуву для переповнення буфера завдяки інформації про позицію локальних змінних.
Наприклад, у наведеному нижче прикладі переповнення буфера в local_bc
вказує на те, що потрібен зсув 0xbc
. Більше того, якщо local_10
є канарейковим печивом, це вказує на те, що для перезапису його з local_bc
потрібен зсув 0xac
.
&#xNAN;Remember, що перші 0x08, з яких зберігається RIP, належать до RBP.
Отримайте кожен опкод, виконаний у програмі.
gcc -fno-stack-protector -D_FORTIFY_SOURCE=0 -z norelro -z execstack 1.2.c -o 1.2 --> Компілювати без захисту &#xNAN;-o --> Вихід &#xNAN;-g --> Зберегти код (GDB зможе його бачити) echo 0 > /proc/sys/kernel/randomize_va_space --> Деактивувати ASLR у linux
Щоб скомпілювати shellcode: nasm -f elf assembly.asm --> повертає ".o" ld assembly.o -o shellcodeout --> Виконуваний
-d --> Дизасемблювати виконувані секції (дивитися опкоди скомпільованого shellcode, знаходити ROP Gadgets, знаходити адресу функції...) &#xNAN;-Mintel --> Intel синтаксис &#xNAN;-t --> Таблиця символів &#xNAN;-D --> Дизасемблювати все (адреса статичної змінної) &#xNAN;-s -j .dtors --> секція dtors &#xNAN;-s -j .got --> секція got -D -s -j .plt --> plt секція дизасембльована &#xNAN;-TR --> Релокації ojdump -t --dynamic-relo ./exec | grep puts --> Адреса "puts" для модифікації в GOT objdump -D ./exec | grep "VAR_NAME" --> Адреса або статичної змінної (вони зберігаються в секції DATA).
Запустіть ulimit -c unlimited
перед запуском моєї програми
Запустіть sudo sysctl -w kernel.core_pattern=/tmp/core-%e.%p.%h.%t
sudo gdb --core=<path/core> --quiet
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 --> Адреса всіх функцій
Всередині папки IDA ви можете знайти двійкові файли, які можна використовувати для налагодження двійкового файлу в linux. Для цього перемістіть двійковий файл linux_server
або linux_server64
на сервер linux і запустіть його в папці, що містить двійковий файл:
Тоді налаштуйте відладчик: Debugger (linux remote) --> Proccess options...:
Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)