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-й
позиції:
![](https://book.hacktricks.xyz/~gitbook/image?url=https%3A%2F%2F2585115637-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FhAv2kYoPrT3n8552GaQU%252Fuploads%252Fgit-blob-545fcdfaf85cd96714bae462c037fc088c6f8bb4%252Fimage%2520%281234%29.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=c4649781&sv=1)
![](https://book.hacktricks.xyz/~gitbook/image?url=https%3A%2F%2F2585115637-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FhAv2kYoPrT3n8552GaQU%252Fuploads%252Fgit-blob-49c6c459edceb803ac56d89f84335da98d3f277f%252Fimage%2520%281233%29.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=89ee61c7&sv=1)
Читання даних
Запускаючи той самий експлойт, але з %p
замість %s
, можна витікати адресу купи зі стеку на %25$p
. Більше того, порівнюючи витікнуту адресу (0xaaaab7030894
) з позицією пароля в пам'яті в цьому процесі, ми можемо отримати різницю адрес:
Тепер час знайти, як керувати однією адресою в стеці, щоб мати до неї доступ з другої вразливості у форматі рядка:
І це можливо побачити в спробі 14 з використанням передачі, ми можемо контролювати адресу:
Зловживання
Вивчайте та практикуйте хакінг AWS: Навчання HackTricks AWS Red Team Expert (ARTE)
Вивчайте та практикуйте хакінг GCP:
Навчання HackTricks GCP Red Team Expert (GRTE)
Last updated