##
# $Id$
##

##
# This file is part of the Metasploit Framework and may be subject to
# redistribution and commercial restrictions. Please see the Metasploit
# web site for more information on licensing and terms of use.
#   http://metasploit.com/
##

require 'msf/core'

class Metasploit3 < Msf::Auxiliary

	def initialize
		super(
			'Name'         => 'VSploit Mariposa DNS Query Module',
			'Version'      => '$Revision$',
			'Description'  => 'This module queries known Mariposa Botnet DNS records.',
			'Author'       => 'MJC',
			'License'      => MSF_LICENSE,
			'References'   =>
				[
					[ 'URL', 'http://www.defintel.com/docs/Mariposa_Analysis.pdf']
				]
		)
		register_options(
			[
				OptString.new('DNS_SERVER',[false, "Specifies a DNS Server"]),
				OptInt.new('COUNT', [false, "Number of intervals to loop",1]),
				OptInt.new('DELAY', [false, "Delay in seconds between intervals",3])
		],self.class)
	end

	def run
		@res = Net::DNS::Resolver.new()

		domain = [
		"lalundelau.sinip.es","bf2back.sinip.es","thejacksonfive.mobi",
		"thejacksonfive.us","thejacksonfive.biz","butterfly.BigMoney.biz",
		"bfisback.sinip.es","bfisback.no-ip.org","qwertasdfg.sinip.es",
		"shv4b.getmyip.com","shv4.no-ip.biz","butterfly.sinip.es",
		"defintelsucks.sinip.es","defintelsucks.net","defintelsucks.com",
		"gusanodeseda.sinip.es","gusanodeseda.net","legion.sinip.es",
		"booster.estr.es","sexme.in","extraperlo.biz",
		"legionarios.servecounterstrike.com","thesexydude.com",
		"yougotissuez.com","gusanodeseda.mobi","tamiflux.org",
		"tamiflux.net","binaryfeed.in","youare.sexidude.com",
		"mierda.notengodominio.com",
		]

		if datastore['DNS_SERVER']
			@res.nameservers = datastore['DNS_SERVER']
		end

		count = 0

		while count < datastore['COUNT']

			domain.each do |name|
				query = @res.query(name, "A")
				time = Time.new
				time = time.strftime("%Y-%m-%d %H:%M:%S")
				print_status("#{time} - DNS Query sent for => #{name}")
				if query.answer.length == 0
					print_error("#{time} - #{name} => No Record Found")
				else
					a = query.answer[0].to_s.split(/[\s,]+/)
					print_good("#{time} - #{name} => #{a[-1]}")
				end
			end
			unless count == (datastore['COUNT'] - 1)
				time = Time.new
				time = time.strftime("%Y-%m-%d %H:%M:%S")
				print_status("#{time} - Waiting #{datastore['DELAY']} seconds to query")
				select(nil, nil, nil, datastore['DELAY'])
			end
			count += 1
		end
	end
end
