Format Strings - Arbitrary Read Example
Вивчайте та практикуйте взлом AWS: Навчання HackTricks AWS Red Team Expert (ARTE) Вивчайте та практикуйте взлом GCP: Навчання HackTricks GCP Red Team Expert (GRTE)
Читання початку бінарного файлу
Код
Скомпілюйте його за допомогою:
Використання
Зміщення становить 11, оскільки встановлення декількох символів A та перебір з використанням циклу від 0 до 50 показав, що при зміщенні 11 та додаванні 5 додаткових символів (трубок
|
у нашому випадку) можна контролювати повну адресу.Я використовував
%11$p
з додаванням пробілів до того, поки адреса не стала 0x4141414141414141.Пакет даних у форматі рядка знаходиться ПЕРЕД адресою, оскільки функція printf зупиняється на нульовому байті, тому якщо ми надішлемо адресу, а потім рядок формату, функція printf ніколи не дійде до рядка формату, оскільки буде знайдено нульовий байт.
Вибрана адреса - 0x00400000, оскільки це місце початку бінарного файлу (без PIE)
Скомпілюйте його за допомогою:
Читання зі стеку
Змінна stack_password
буде збережена у стеці, оскільки це локальна змінна, тому достатньо просто зловживати printf, щоб показати вміст стеку. Це експлойт для BF перших 100 позицій для витоку паролів зі стеку:
У зображенні можна побачити, що ми можемо витікати пароль зі стеку на 10-й
позиції:
Читання даних
Запускаючи той самий експлойт, але з %p
замість %s
, можна витікати адресу купи зі стеку на %25$p
. Більше того, порівнюючи витікнуту адресу (0xaaaab7030894
) з позицією пароля в пам'яті в цьому процесі, ми можемо отримати різницю адрес:
Тепер час знайти, як керувати однією адресою в стеці, щоб мати до неї доступ з другої вразливості у форматі рядка:
І це можливо побачити в спробі 14 з використанням передачі, ми можемо контролювати адресу:
Зловживання
Вивчайте та практикуйте хакінг AWS: Навчання HackTricks AWS Red Team Expert (ARTE) Вивчайте та практикуйте хакінг GCP: Навчання HackTricks GCP Red Team Expert (GRTE)
Last updated