Integer Overflow
Last updated
Last updated
Вивчайте та практикуйте хакінг AWS:HackTricks Training AWS Red Team Expert (ARTE) Вивчайте та практикуйте хакінг GCP: HackTricks Training GCP Red Team Expert (GRTE)
В основі цілочисельного переповнення лежить обмеження, накладене розміром типів даних у комп'ютерному програмуванні та інтерпретацією даних.
Наприклад, 8-бітний беззнаковий ціле може представляти значення від 0 до 255. Якщо ви спробуєте зберегти значення 256 в 8-бітному беззнаковому ціле, воно обертається назад до 0 через обмеження його ємності. Аналогічно, для 16-бітного беззнакового цілого, який може містити значення від 0 до 65,535, додавання 1 до 65,535 поверне значення назад до 0.
Більше того, 8-бітне знакове ціле може представляти значення від -128 до 127. Це тому, що один біт використовується для представлення знака (позитивний або негативний), залишаючи 7 біт для представлення величини. Найбільш негативне число представлено як -128 (бінарне 10000000
), а найбільш позитивне число — 127 (бінарне 01111111
).
Для потенційних веб-уразливостей дуже цікаво знати максимальні підтримувані значення:
Надрукований результат буде 0, оскільки ми переповнили char:
Розгляньте ситуацію, коли з користувацького вводу зчитується знакове ціле число, а потім воно використовується в контексті, який трактує його як беззнакове ціле число, без належної валідації:
У цьому прикладі, якщо користувач введе від'ємне число, воно буде інтерпретовано як велике беззнакове ціле через спосіб інтерпретації двійкових значень, що потенційно призведе до несподіваної поведінки.
Використовується лише 1B для зберігання розміру пароля, тому можливо переповнити його і змусити думати, що його довжина 4, хоча насправді вона становить 260, щоб обійти захист перевірки довжини
Дано кілька чисел, знайдіть за допомогою z3 нове число, яке, помножене на перше, дасть друге:
Використовується лише 1B для зберігання розміру пароля, тому можливо переповнити його і змусити думати, що його довжина 4, хоча насправді вона становить 260, щоб обійти захист перевірки довжини та перезаписати в стеку наступну локальну змінну і обійти обидва захисти
Це не змінюється в ARM64, як ви можете побачити в цьому блозі.
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)