sqlmap – Тестирование параметров при чтении запроса из файла

Вопрос или проблема

После часов проб и ошибок я решил спросить здесь о совете.
Сейчас я пытаюсь выполнить sqlinj, используя sqlmap, на системе, которая была специально разработана для атак.
API гласит:

Метод: GET
/users/>user_id</payments/>payment_token<

>user_id<: [int]
>payment_token<: [string]

По сути, с помощью следующей команды я могу получить информацию о платежах пользователя:

curl -X GET 'https://123.123.123.123/users/2/payments/38d9f72f-cd26-fghf-a01f-804a9874eb0c' -H 'Authorization: Bearer abcdefghijklmop' -i -k

Токен в конце необходим для корректного запроса для выполнения любого из запросов к API. Поэтому я решил записать запрос, добавив -v в конце моей команды curl.
Это дало мне следующий заголовок запроса:

GET /users/2/payments/38d9f72f-cd26-fghf-a01f-804a9874eb0c HTTP/1.1
Host: 123.123.123.123 
User-Agent: curl/7.64.0
Accept: */*
Authorization: Bearer abcdefghijklmop

Теперь я хочу проверить все параметры на уязвимости, поэтому я попытался сохранить запрос в файл txt, а затем запустил sqlmap следующим образом:

sqlmap -r "/home/user/Documents/Pentesting/Results/header.txt" --risk=3 --level=3 --force-ssl -v 1

Однако это ничего не находит. Что еще я могу попробовать? Как явно указать, чтобы sqlmap пытался инъектировать каждый параметр?

header.txt выглядит так:

GET /users/user_id=*/payments/payment_token=* HTTP/1.1
Host: 123.123.123.123
User-Agent: curl/7.64.0
Accept: */*
Authorization: Bearer abcdefghijklmop

Какие-нибудь советы?

По умолчанию sqlmap тестирует все параметры GET и POST. 

Источник: https://github.com/sqlmapproject/sqlmap/wiki/Usage (Инъекция -> Проверяемые параметры)

Похоже, проблема не в том, что sqlmap нужно тестировать все параметры.

Я бы предложил проверить, как выглядят заголовки запроса, когда вы запускаете вашу последнюю команду.

ИЗМЕНЕНИЕ: Обычно я не вижу, чтобы переменные заменялись на звездочки в файле.

Ответ или решение

Чтобы эффективно использовать sqlmap для тестирования уязвимостей SQL-инъекций в вашем случае, нам важно удостовериться, что параметры запроса установлены правильно. Давайте разберёмся с вашими шагами и предложим рекомендации для исправления ситуации.

Основные шаги

  1. Форматирование заголовка запроса:
    Вы правильно создали файл заголовка (header.txt), однако использование символа * для обозначения параметров может не быть корректным в контексте использования sqlmap. Вместо user_id=* и payment_token=* sqlmap ожидает находить реальные значения или свойства, предназначенные для инъекций.

    Исходя из максимально возможного приближения, ваш файл должен выглядеть следующим образом:

    GET /users/<user_id>/payments/<payment_token> HTTP/1.1
    Host: 123.123.123.123
    User-Agent: curl/7.64.0
    Accept: */*
    Authorization: Bearer abcdefghijklmop
  2. Настройка параметров sqlmap:
    Если вы хотите явно указать sqlmap, что нужно тестировать параметры, используйте флаг --data для POST-запросов или --url для GET-запросов. В вашем случае, поскольку запрос является GET, просто используйте конструкцию, описанную выше, и добавьте к команде параметры для sqlmap:

    sqlmap -u "https://123.123.123.123/users/2/payments/38d9f72f-cd26-fghf-a01f-804a9874eb0c" \
    --headers="Authorization: Bearer abcdefghijklmop" \
    --risk=3 --level=3 --force-ssl -v 1 --data="user_id=2&payment_token=38d9f72f-cd26-fghf-a01f-804a9874eb0c"
  3. Определение целевых параметров:
    Чтобы sqlmap корректно обнаруживал параметры SQL-инъекций, убедитесь, что значения параметров (user_id и payment_token) заменяются на менее предсказуемые значения. Вы можете воспользоваться следующими подходами:

    • Создайте несколько вариаций user_id и payment_token с различными форматами данных.
    • Используйте специальные .. символы, чтобы sqlmap мог идентифицировать уязвимость.
  4. Включение расширенных функций sqlmap:
    Включите дополнительные флаги, которые могут помочь в тестировании. Например, добавление --randomize=1 может помочь подменить значения параметры для поиска уязвимостей.

Пример команды sqlmap

При условии, что ваш файл заголовка и параметры настроены правильно, команда должна выглядеть так:

sqlmap -r "/home/user/Documents/Pentesting/Results/header.txt" --risk=3 --level=3 --force-ssl -v 1 --dbms=mysql --threads=10 

Заключение

Ваш запрос через sqlmap должен быть настроен для корректного определения параметров SQL-инъекций. Не забывайте, что любой автоматизированный тест может быть ограничен спецификой приложения, поэтому результаты всегда необходимо анализировать в сочетании с ручными проверками. Если вам необходима дальнейшая помощь или вы столкнётесь с другими проблемами, не стесняйтесь задавать вопросы.

Оцените материал
Добавить комментарий

Капча загружается...