Re: Help developing an exploit

Claudio Broglia <[email protected]> Mon, 30 Apr 2007 11:24:46 +0200
Newsgroups gmane.comp.security.vulnerabilities
Message-ID <[email protected]>
> Hi List,
Hi Webster,

> I discovered a buffer overflow in a networked application ...
> ... The problem I've been
> having is that my payload ends up at address 0x0012E6B4 and if I try
> to get that address into EIP, my entire message is rejected for
> containing an x00 character.  ...
> (23 bytes)(4 bytes - loaded into EAX)(32 bytes)(4 bytes - loaded into
> EDX->EIP)(up to 4500 bytes)
> ...
> Here are the last three
> lines of the program disassembly:
> mov     edx,dword ptr [eax]
> push    eax
> call    dword ptr [edx+8]
>
> That last line is where the debugger keeps stopping because since I
> haven't been able to put in the address I want (0012...), I've been
> using invalid memory addresses as space hoders (\xb4\xe6\x12\xcc).

Just a summary: you would like to call your payload which is located  
at address 0x0012e6b4, but you say you can't use a \x00 character.
But from the code snipper you've posted, the last call is a "call  
dword ptr [edx+8]" and not a "call edx+8". So from what I understand  
you have not to put in EDX 0x0012e6ac (0x0012e6b4-8), but just an  
address in the process address space which contains 0x0012e6b4 at the  
time of the call. This address obviously would not have a \x00  
character in its address. To find it just breakpoint at that call and  
search for it in memory (remember to subtract 8 from its address  
before putting it in your shellcode).

Hope I've been helpful, let me know.

bye
-xeon