• XSS.stack #1 – первый литературный журнал от юзеров форума

Статья Руководство по (CSRF) тестированию с помощью Python

tenac1ous

Shellcode
Модератор
Регистрация
22.01.2023
Сообщения
169
Реакции
224
В этой статье я расскажу вам, как эффективно бороться с уязвимостями типа CSRF (Cross-Site Request Forgery) в вашем коде и защитить ваше веб-приложение от потенциальных нарушений безопасности. Понимая CSRF и применяя необходимые меры, вы можете защитить свое приложение от потенциальных рисков, которые могут привести к несанкционированному изменению учетной записи и другим вредоносным действиям.

Что такое CSRF?​

CSRF (Cross-Site Request Forgery) - это тип атаки, при которой злоумышленник выполняет несанкционированные действия от имени авторизованного пользователя. Атака основывается на доверии между веб-приложением и пользователем, который уже прошел аутентификацию. Злоумышленник может использовать эту доверительную связь, чтобы выполнить вредоносные операции, такие как изменение данных пользователя, создание фальшивых транзакций и т. д.


csrf-cross-site-request-forgery.png


Защита от CSRF​

Перед тем как начать бороться с CSRF, важно понять, какие меры безопасности могут быть применены. Одной из самых распространенных мер является использование токенов CSRF. Токен CSRF - это случайно сгенерированное значение, которое включается в каждый запрос, отправляемый с клиента на сервер. Сервер проверяет правильность токена CSRF, чтобы удостовериться, что запрос является действительным и был инициирован доверенным источником.

Использование библиотек Requests и BeautifulSoup​

Для реализации защиты от CSRF в Python мы будем использовать две мощные библиотеки: Requests и BeautifulSoup. Библиотека Requests обеспечивает простой и удобный интерфейс для отправки HTTP-запросов и обработки ответов. BeautifulSoup, с другой стороны, предоставляет функциональность для обработки HTML и XML данных.

Получение токена CSRF​

Для начала нам нужно получить токен CSRF из целевого веб-приложения. Для этого мы используем библиотеку Requests для отправки GET-запроса на страницу с формой входа. Затем мы используем BeautifulSoup для извлечения значения токена CSRF из HTML-кода ответа. Полученный токен будет использоваться в последующих запросах.
Python:
import requests
from bs4 import BeautifulSoup

target_url = "http://xss.pro/login"  # Замените на фактический целевой URL
csrf_token_name = "csrf_token"  # Замените на фактическое имя CSRF-токена в форме HTML

session = requests.Session()

def get_csrf_token():
    response = session.get(target_url)
    soup = BeautifulSoup(response.text, "html.parser")
    csrf_token = soup.find("input", {"name": csrf_token_name})["value"]
    return csrf_token

Отправка запроса с использованием CSRF​

После получения токена CSRF мы можем отправить запрос с использованием этого токена. Мы создаем функцию 'send_csrf_request', которая выполняет POST-запрос на целевой URL с переданными данными и токеном CSRF. Затем мы обрабатываем ответ в соответствии с требованиями тестирования.
Python:
def send_csrf_request(url, payload):
    response = session.post(url, data=payload)
    print("Response:", response.status_code)
    print("Response Content:", response.text)
    # Добавьте необходимую логику обработки

Тестирование CSRF​

Для проведения тестирования CSRF мы создаем функцию 'csrf_test', которая последовательно выполняет тестовые случаи с использованием различных параметров. Каждый тестовый случай включает в себя набор данных, который будет отправлен вместе с токеном CSRF.
Python:
def csrf_test():
    csrf_token = get_csrf_token()

    for test_case in test_cases:
        test_case[csrf_token_name] = csrf_token
        send_csrf_request(target_url, test_case)

# Выполнение тестирования CSRF
csrf_test()

Полный код:
Python:
import requests
from bs4 import BeautifulSoup

# Указываем целевой URL и данные для CSRF-токена
target_url = "http://xss.pro/login"  # Замените на фактический целевой URL
csrf_token_name = "csrf_token"  # Замените на фактическое имя CSRF-токена в форме HTML
test_cases = [
    {"param1": "value1", "param2": "value2"},
    # Добавьте другие тестовые случаи при необходимости
]

# Глобальный объект сеанса для поддержки сеанса и CSRF-токена
session = requests.Session()

# Получаем CSRF-токен из целевого приложения
def get_csrf_token():
    response = session.get(target_url)
    soup = BeautifulSoup(response.text, "html.parser")
    csrf_token = soup.find("input", {"name": csrf_token_name})["value"]
    return csrf_token

# Отправляем запрос CSRF
def send_csrf_request(url, payload):
    response = session.post(url, data=payload)
    # Обрабатываем ответ в соответствии с требованиями тестирования
    print("Response:", response.status_code)
    print("Response Content:", response.text)
    # Добавьте необходимую логику обработки

# Выполняем тест CSRF
def csrf_test():
    # Получаем CSRF-токен
    csrf_token = get_csrf_token()

    for test_case in test_cases:
        # Добавляем CSRF-токен в данные запроса
        test_case[csrf_token_name] = csrf_token

        # Отправляем запрос CSRF
        send_csrf_request(target_url, test_case)

# Выполняем тест CSRF
csrf_test()

Заключение​

Борьба с уязвимостями CSRF - это важный аспект обеспечения безопасности веб-приложений. Использование библиотек Requests и BeautifulSoup в сочетании с правильными методами защиты поможет вам эффективно обнаруживать и устранять уязвимости CSRF в вашем коде.

Однако помимо использования токенов CSRF, также важно рассмотреть другие меры безопасности, такие как проверка HTTP-заголовков Referer и Origin, а также добавление дополнительной проверки на серверной стороне. Я показал практический пример осуществления подобных задач, однако существует несколько готовых инструментов, которые помогают проводить операции по обнаружению и защите от уязвимостей CSRF. Некоторые из них включают:

1. OWASP ZAP (Zed Attack Proxy): Это популярный инструмент с открытым исходным кодом, который предоставляет возможности по обнаружению и эксплуатации уязвимостей веб-приложений, включая CSRF. ZAP предоставляет функциональность сканирования и перехвата запросов, а также инструменты для внедрения атак и проверки безопасности.

2. Burp Suite: Это коммерческий инструмент для тестирования безопасности веб-приложений, который также включает функциональность по обнаружению и защите от CSRF. Burp Suite предоставляет средства для перехвата, изменения и повторного выполнения HTTP-запросов, а также автоматизированное сканирование уязвимостей.

3. Netsparker: Это коммерческий инструмент для автоматического обнаружения уязвимостей веб-приложений. Он включает в себя возможности по обнаружению CSRF и предоставляет отчеты о найденных уязвимостях, а также рекомендации по их исправлению.

4. Acunetix: Это еще один коммерческий инструмент для обнаружения уязвимостей веб-приложений, включая CSRF. Acunetix предлагает сканирование веб-приложений на предмет различных уязвимостей, а также предоставляет детализированные отчеты и советы по устранению обнаруженных проблем.

Это лишь некоторые примеры инструментов, доступных для обнаружения и защиты от уязвимостей CSRF. Выбор конкретного инструмента зависит от ваших потребностей, бюджета и предпочтений в использовании коммерческих или бесплатных решений. Важно также помнить, что инструменты являются лишь частью процесса обеспечения безопасности, и ручное тестирование и аудит безопасности также играют важную роль в обнаружении и устранении уязвимостей.

Помните, что безопасность - это непрерывный процесс, и регулярные аудиты безопасности, обновление библиотек и фреймворков, а также следование передовым практикам безопасности помогут вам поддерживать ваше приложение защищенным.​

 
Poleznaya stat`ya, spasibo
На форуме существует способ выразить свою благодарность в виде реакций, комментарии были созданы для обсуждений и возможно каких то корректировок в дальнейших статьях
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх