mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-26 14:40:37 +00:00
5.4 KiB
5.4 KiB
Індексація масиву
{% hint style="success" %}
Вивчайте та практикуйте хакінг AWS: Навчання AWS Red Team Expert (ARTE) від HackTricks
Вивчайте та практикуйте хакінг GCP: Навчання GCP Red Team Expert (GRTE) від HackTricks
Підтримайте HackTricks
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи Telegram або слідкуйте за нами на Twitter 🐦 @hacktricks_live.
- Поширюйте хакерські трюки, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на GitHub.
Основна інформація
Ця категорія включає всі вразливості, які виникають через можливість перезапису певних даних через помилки в обробці індексів у масивах. Це дуже широка категорія без конкретної методології, оскільки механізм експлуатації повністю залежить від умов вразливості.
Однак тут ви можете знайти деякі цікаві приклади:
- https://guyinatuxedo.github.io/11-index/swampctf19_dreamheaps/index.html
- Є 2 зіткнення масивів, один для адрес, де зберігаються дані, і один з розмірами цих даних. Можливо перезаписати одне з іншого, дозволяючи записати довільну адресу, вказавши її як розмір. Це дозволяє записати адресу функції
free
в таблиці GOT, а потім перезаписати її адресоюsystem
, і викликати free з пам'яті з/bin/sh
. - https://guyinatuxedo.github.io/11-index/csaw18_doubletrouble/index.html
- 64 біти, без nx. Перезаписати розмір, щоб отримати вид буферного переповнення, де кожна річ буде використана як подвійне число і впорядкована від найменшого до найбільшого, тому потрібно створити шеллкод, який відповідає цим вимогам, з урахуванням того, що канарейка не повинна бути переміщена зі свого місця, і, нарешті, перезаписати RIP адресою до ret, яка відповідає попереднім вимогам, і вказати найбільшу адресу новою адресою, що вказує на початок стеку (витікла програмою), тому можливо використовувати ret для переходу туди.
- https://faraz.faith/2019-10-20-secconctf-2019-sum/
- 64 біти, без relro, канарейка, nx, без pie. Є відхилення на один елемент в масиві на стеці, що дозволяє контролювати вказівник, надаючи WWW (він записує суму всіх чисел масиву в перезаписану адресу відхиленням на одиницю в масиві). Стек контролюється, тому адреса
exit
GOT перезаписується наpop rdi; ret
, і в стек додається адреса доmain
(повернення доmain
). Використовується ланцюжок ROP для витоку адреси put в GOT за допомогою puts (exit
буде викликано, тому він викличеpop rdi; ret
, виконуючи цей ланцюжок в стеці). Нарешті використовується новий ланцюжок ROP для виконання ret2lib. - https://guyinatuxedo.github.io/14-ret_2_system/tu_guestbook/index.html
- 32 біти, без relro, без канарейки, nx, pie. Зловживання поганим індексуванням для витоку адрес бібліотеки libc та купи зі стеку. Зловживання переповненням буфера для виклику ret2lib, який викликає
system('/bin/sh')
(адреса купи потрібна для обходу перевірки).