Array Indexing

Підтримайте HackTricks

Основна інформація

Ця категорія включає всі вразливості, які виникають через можливість перезапису певних даних через помилки в обробці індексів у масивах. Це дуже широка категорія без конкретної методології, оскільки механізм експлуатації повністю залежить від умов вразливості.

Однак тут ви можете знайти деякі цікаві приклади:

  • Є 2 зіткнення масивів, один для адрес, де зберігаються дані, і один з розмірами цих даних. Можливо перезаписати одне з іншого, дозволяючи записати довільну адресу, вказавши її як розмір. Це дозволяє записати адресу функції free в таблиці GOT, а потім перезаписати її адресою system, і викликати free з пам'яті з /bin/sh.

  • 64 біти, без nx. Перезаписати розмір, щоб отримати вид буферного переповнення, де кожна річ буде використана як подвійне число і впорядкована від найменшого до найбільшого, тому потрібно створити шеллкод, який відповідає цим вимогам, з урахуванням того, що канарейка не повинна бути переміщена зі свого місця, і, нарешті, перезаписати RIP адресою до ret, яка відповідає попереднім вимогам, і вказати найбільшу адресу новою адресою, що вказує на початок стеку (витікла програмою), тому можливо використовувати ret для переходу туди.

  • 64 біти, без relro, канарейка, nx, без pie. Є відхилення на один елемент в масиві на стеці, що дозволяє контролювати вказівник, надаючи WWW (він записує суму всіх чисел масиву в перезаписану адресу відхиленням на одиницю в масиві). Стек контролюється, тому адреса exit GOT перезаписується на pop rdi; ret, і в стек додається адреса до main (повернення до main). Використовується ланцюжок ROP для витоку адреси put в GOT за допомогою puts (exit буде викликано, тому він викличе pop rdi; ret, виконуючи цей ланцюжок в стеці). Нарешті використовується новий ланцюжок ROP для виконання ret2lib.

  • 32 біти, без relro, без канарейки, nx, pie. Зловживання поганим індексуванням для витоку адрес бібліотеки libc та купи зі стеку. Зловживання переповненням буфера для виклику ret2lib, який викликає system('/bin/sh') (адреса купи потрібна для обходу перевірки).

Last updated