Array Indexing
Last updated
Last updated
Вивчайте та практикуйте хакінг AWS: Навчання AWS Red Team Expert (ARTE) від HackTricks Вивчайте та практикуйте хакінг GCP: Навчання GCP Red Team Expert (GRTE) від 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')
(адреса купи потрібна для обходу перевірки).