Ret2plt
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Метою цієї техніки є витік адреси з функції з PLT, щоб обійти ASLR. Це тому, що, наприклад, якщо ви витечете адресу функції puts
з libc, ви зможете обчислити, де знаходиться базова адреса libc
і обчислити зсуви для доступу до інших функцій, таких як system
.
Це можна зробити за допомогою корисного навантаження pwntools
, такого як (звідси):
Зверніть увагу, як puts
(використовуючи адресу з PLT) викликається з адресою puts
, розташованою в GOT (Global Offset Table). Це тому, що до моменту, коли puts
виводить запис GOT для puts
, цей запис міститиме точну адресу puts
в пам'яті.
Також зверніть увагу, як адреса main
використовується в експлойті, щоб коли puts
закінчує своє виконання, бінарник знову викликав main
, а не виходив (так що витік адреси залишиться дійсним).
Зверніть увагу, що для того, щоб це працювало, бінарник не може бути скомпільований з PIE або ви повинні знайти витік, щоб обійти PIE, щоб знати адресу PLT, GOT і main
. В іншому випадку, спочатку потрібно обійти PIE.
Ви можете знайти повний приклад цього обходу тут. Це був фінальний експлойт з того прикладу:
64 біти, ASLR увімкнено, але без PIE, перший крок - заповнити переповнення до байта 0x00 канарки, щоб потім викликати puts і витягти його. З канаркою створюється ROP гаджет для виклику puts, щоб витягти адресу puts з GOT, а потім ROP гаджет для виклику system('/bin/sh')
64 біти, ASLR увімкнено, без канарки, переповнення стеку в main з дочірньої функції. ROP гаджет для виклику puts, щоб витягти адресу puts з GOT, а потім викликати один гаджет.
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)