Re: ColdFusion Heap Overflow -continued

From: Riley Hassell (rhassellat_private)
Date: Tue Dec 03 2002 - 00:26:43 PST

  • Next message: Brett Moore: "Windows Heap Overflows In General"

    If you can move 4 bytes of choice to any location in your virtual
    environment you can overwrite any stored 32 bit address. Loaded Image data
    sections ands and loader environment data have reliable addresses due the
    support of basing by the operating system and loader. If you want immediate
    execution overwrite a hook address. Many API's suites have hooks you can
    overwrite. The hook you choose depends on the situation of the vulnerability
    you are dealing with.
    
    In this situation you may throw a fault after the following 'mov'
    instruction attempts to access a memory address of the data you supplied. If
    the 4 bytes you overwrote data with do not signify a valid address, a fault
    will be issued. So use the fault-handling system in place. On win* this is
    structured exception handling.
    
    When a fault is generated in a thread an exception list taken from the
    threads TIB. This list is cycled twice and then the default exeception
    handler is called. This default exception handler is in charge of generated
    a window so that the interface user can see the application had a fatal
    error. To allow the configurability of this default behavior developers
    introduced a hook so that another developer in the future could create his
    or her own default handler.
    
    This hook is loaded into an address that can be modified at runtime, it's
    also loaded in data with write privilege. Overwrite it with a relative
    address of a call or jmp that references a stack offset. This stack offset
    is where the address of your payload buffer will be. Keep in mind that if
    you can't find a sufficient byte sequence for your relative call, any data
    on the stack is seen as code to the processor during execution. Use any
    value you can control on the stack for your benefit. Every 32 bit function
    variable is an instruction up to 4 bytes in length if you can control it.
    Data sizes, id's ,index's, port numbers....
    
    Turn your  stack into a big buffer of your code :)
    
    
    -R
    
    
    Riley Hassell
    Security Research Associate
    eEye Digital Security
    
    
    
    
    
    ----- Original Message -----
    From: "Gary O'leary-Steele" <garyo@sec-1.com>
    To: <pen-testat_private>; <vuln-devat_private>
    Sent: Friday, November 15, 2002 9:26 AM
    Subject: ColdFusion Heap Overflow -continued
    
    
    > Hi all,
    >
    > I am attempting to write exploit code for the coldfusion heap overflow
    > (still).
    >
    > On advice from various on the secfocus list i have installed softice and
    > located the exception handler in question.
    >
    > The handler code starts at
    >
    > 0x77f82b95
    >
    > The code I am trying to manipulate is at
    >
    > 0x77f8e43b Mov ecx, [ebp+0x18]
    > 0x77f8e43e call ecx
    >
    > where ebp changes each time the exception is called
    >
    > I can control the following values within the following instruction,
    >
    > mov    [ecx] ,  eax
    >
    >
    > where ecx and eax can be any value I specify. The problem (or my lack of
    > understanding) is that the stack frame is set-up when the exception is
    > handled and i can't seem to write to [ebp+0x18] due to the fact it changes
    > etc (stop me if i'm wrong)
    >
    > attempting to overwrite the instruction (sorry if this is a basic can't
    do)
    > with mov [ecx],eax where ecx = 0x77f8e43b and eax =0x41414141 doesn't seem
    > to do anything ?
    >
    >
    > Any help or pointers are greatly appreciated.
    >
    >
    >
    >
    > Thanks in advance.
    >
    > Kind Regards
    > Gary
    > Sec-1
    >
    >
    



    This archive was generated by hypermail 2b30 : Sun Nov 17 2002 - 11:14:53 PST