• Добро пожаловать на сайт - Forumteam.bet !

    Что бы просматривать темы форума необходимо зарегестрироваться или войти в свой аккаунт.

    Группа в телеграме (подпишитесь, что бы не потерять нас) - ForumTeam Chat [Подписатся]
    Связь с администратором - @ftmadmin

Эксплуатация SQL-инъекции в токене авторизации

  • Автор темы Benzema
  • Дата начала
  • Ответы 0
  • Просмотры 2K

Benzema

Публикатор
Команда форума
Регистрация
27.01.18
Веб-сайт
netysaita.com
TG
@@qq
Данная статья является переводом и ведётся со слов автора, оригинал тут.

Небольшое введение в токены авторизации​

  • Токен авторизации генерируется и подписывается серверами и используется для верификации пользователей по уникальным токенам.
  • После успешного входа сервер отправляет токен авторизации и веб-разработчики часто хранят его в локальном хранилище браузера или сессии.
  • Современные веб-сайты используют JWT (веб-токены JSON) для авторизации пользователей. Это не означает, что каждый токен авторизации является JWT. Это зависит от бэкенда и фреймворка, который использует веб-сайт.

Не теряя времени, давайте перейдем к истории​

Я не регулярно занимаюсь багхантингом. Можно сказать, что я сезонный багхантер. Мне было скучно, и я попытался найти какие-нибудь частные программы по поиску ошибок через google dorks, и выбрал случайную программу для охоты. Я не проводил базовую разведку, такую как перечисление поддоменов или какой-либо доркинг, поскольку начал с основной цели.

Для меня это был обычный день. Я просто запустил Burp и открыл главный сайт компании. Cогласно их политике, я не буду раскрывать наименование организации.

С помощью плагина Wappalyzer я заметил, что цель работает на PHP. Для меня, PHP уязвим по своей природе. Как у веб-разработчика, у меня много опыта создания сайтов на PHP и устранения уязвимостей.

У меня есть практика перебора каталогов и проверка файла robots.txt на начальном этапе моего процесса разведки.

Я использовал Dirsearch для поиска скрытых каталогов, но безуспешно. Ничего подозрительного, кроме страницы администратора.

Я попытался открыть страницу администратора, посетив target/admin/

Но не повезло, сервер выдает ошибку 403 Forbidden

admin-page-forbidden-poc.png

Cтраница администратора

Я не сдался слишком быстро и попытался провести фаззинг внутри страницы администратора, используя Dirsearch. На этот раз страница /events вернула ответ 200.

Без промедления я открыл страницу target/admin/events/

Я заметил, что она представляет собой обычную страницу входа в систему, на которой есть два способа входа: один - для автора, другой - для супер админа.

Эксплуатация начинается здесь​

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

Код:
target/admin/events/?classic_login=true

login-page-poc.png

Страница авторизации

и показала всплывающее окно для ввода логина и пароля. Я начал вводить неправильный учетные данные и наблюдать за ответом сервера. Попробовав несколько вариантов, я решил ввести в поле имени и пароля значение 1'.

На это сервер выдал ошибку SQL.

error-poc-0.png

Ошибка SQL

Я попытался воспроизвести это снова, но это не работало, и всплывающее окно входа перестало отображаться. Даже после обновления страницы там отображается сообщение об ошибке. Я решил, что это может быть какая-то ошибка на бэкэнде.

Я зашел в историю burp и не заметил отправленных POST или JSON данных.

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

Позже я заметил заголовок авторизации с токеном.

error-poc.png

Токен авторизации
Как веб-разработчик, я знаю, как работают токены авторизации, и у меня есть хорошие знание PHP, стека MERN и немного по фреймворку Django. Я легко понимаю как разработчики используют токенизацию.

Заголовок выглядит следующим образом.

Код:
Authorization: Basic Base64Values

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

Код:
Authorization: Bearer <TOKEN>
Профессиональный совет: на стороне сервера в большинстве случаев Bearer игнорируется, и разработчики сопоставляют токен с выданым токеном. Если это JWT, то разработчики часто декодируют его вместо того, чтобы проверять там неправильный контроль доступа или захват учетной записи.
Продолжим рассказ. Я отправил запрос на Repeater, выбрал токен и расшифровал его используя декодер Burp. Так как я угадал тип шифрования по его длине и характеру. Это был не JWT, а значение в base64 1':1'.

Я быстро вспомнил об инструменте Sqlmap, перехватил весь запрос и сохранил его в текстовый файл.

Я попытался запустить sqlmap, но проблема возникает при кодировке в base64. Хотя sqlmap и поддерживает кодировку base64, проблема была в двоеточии : между значениями.

Приложение принимает имя пользователя и пароль, а затем кодирует эти значения с помощью base64 с разделением через двоеточие:

Например: username:password

Код:
base64 <username>:<password>

Я решил провести ручную эксплуатацию SQL-инъекции с кодировкой полезной нагрузки в Repeater. Для этого я попытался определить количество столбцов и вставил полезную нагрузку для имени пользователя и пароля:

Код:
1' Order By 1-- -:1' Order By 1-- -

Полезная нагрузка авторизации выглядит следующим образом.

Код:
Authorization: Basic MScgT3JkZXIgQnkgMS0tIC06MScgT3JkZXIgQnkgMS0tIC0=

Ошибки SQL не было, и отобразилась обычная страница несанкционированного доступа.

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

При введении полезной нагрузки:

Код:
1' Union Select 1-- -:1' Union Select 1-- -

Значение токена авторизации было:

Код:
Authorization: Basic MScgVW5pb24gU2VsZWN0IDEtLSAtOjEnIFVuaW9uIFNlbGVjdCAxLS0gLQ==

И я успешно вошел в панель администратора:

poc00.png

Доступ к панели администратора

Извините, я скрыл некоторую информацию здесь, вот POC без размытия:

poc001.png

PoC
 
Telegram
@qq
Сверху Снизу