Вопрос или проблема
После часов проб и ошибок я решил спросить здесь о совете.
Сейчас я пытаюсь выполнить 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-инъекций в вашем случае, нам важно удостовериться, что параметры запроса установлены правильно. Давайте разберёмся с вашими шагами и предложим рекомендации для исправления ситуации.
Основные шаги
-
Форматирование заголовка запроса:
Вы правильно создали файл заголовка (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
-
Настройка параметров 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"
-
Определение целевых параметров:
Чтобы sqlmap корректно обнаруживал параметры SQL-инъекций, убедитесь, что значения параметров (user_id
иpayment_token
) заменяются на менее предсказуемые значения. Вы можете воспользоваться следующими подходами:- Создайте несколько вариаций
user_id
иpayment_token
с различными форматами данных. - Используйте специальные .. символы, чтобы sqlmap мог идентифицировать уязвимость.
- Создайте несколько вариаций
-
Включение расширенных функций 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-инъекций. Не забывайте, что любой автоматизированный тест может быть ограничен спецификой приложения, поэтому результаты всегда необходимо анализировать в сочетании с ручными проверками. Если вам необходима дальнейшая помощь или вы столкнётесь с другими проблемами, не стесняйтесь задавать вопросы.