Array Indexing
Last updated
Last updated
Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Ця категорія включає всі вразливості, які виникають через можливість перезапису певних даних через помилки в обробці індексів у масивах. Це дуже широка категорія без конкретної методології, оскільки механізм експлуатації повністю залежить від умов вразливості.
Однак тут ви можете знайти кілька гарних прикладів:
Є 2 колізійні масиви, один для адрес, де зберігаються дані, і один з розмірами цих даних. Можливо перезаписати один з іншого, що дозволяє записати довільну адресу, вказуючи її як розмір. Це дозволяє записати адресу функції free
в таблиці GOT, а потім перезаписати її адресою до system
і викликати free з пам'яті з /bin/sh
.
64 біти, без nx. Перезаписати розмір, щоб отримати свого роду переповнення буфера, де все буде використовуватися як подвоєне число і сортуватися від найменшого до найбільшого, тому потрібно створити shellcode, який відповідає цій вимозі, враховуючи, що канарейка не повинна бути переміщена з її позиції, і врешті-решт перезаписати RIP адресою до ret, яка відповідає попереднім вимогам, і помістити найбільшу адресу на нову адресу, що вказує на початок стеку (викрита програмою), щоб можна було використовувати ret для стрибка туди.
64 біти, без relro, канарейка, nx, без pie. Є off-by-one в масиві в стеку, що дозволяє контролювати вказівник, надаючи WWW (він записує суму всіх чисел масиву в перезаписаній адресі через off-by-one в масиві). Стек контролюється, тому адреса GOT exit
перезаписується на pop rdi; ret
, а в стеку додається адреса до main
(зациклюючись назад на main
). Використовується ланцюг ROP для викриття адреси put в GOT за допомогою puts (exit
буде викликано, тому він викликає pop rdi; ret
, отже, виконує цей ланцюг у стеку). Нарешті, використовується новий ланцюг ROP, що виконує ret2lib.
32 біти, без relro, без канарейки, nx, pie. Зловживайте поганою індексацією, щоб викрити адреси libc та heap зі стеку. Зловживайте переповненням буфера, щоб зробити ret2lib, викликавши system('/bin/sh')
(адреса heap потрібна для обходу перевірки).