SlideShare une entreprise Scribd logo
1  sur  47
Удар по MongoDB



            Фирстов Михаил
Что это вообще такое?

 MongoDB — документо-ориентированная СУБД с открытым
    исходным кодом, не требующая описания схемы таблиц. (wiki)

                     Особенности:

 1. Документо-ориентированное хранилище.

 2. Достаточно гибкий язык для формирования запросов

 3. Динамические запросы

 4. Полная поддержка индексов

 5. Профилирование запросов

 6. Поддержка отказоустойчивости и масштабируемости
А на чем он?

./mongod — это серверная часть,
написанная на C++

                                                 ./mongo – офф. клиент,
                                                 написанный на C++ и JS

                            У Mongodb существуют официальные
                            драйвера для основных ЯП:
                                      C
                                      C++
                                      Java
                                      Javascript
                                      .NET (C# F#, PowerShell,
                                        etc)
                                      Node.js
                                      Perl
                                      PHP
                                      Python
                                      Ruby
                                      Scala
Где используются
     Краткий список компаний использующих MongoDB:

 1. SAP (Крупный производитель программного обеспечения)

 2. SourceForge (Хостинг открытого исходного кода)

 3. The New York Times

 4. GitHub (Проект социального хостинга)

 5. Foursquare (Достаточно крупный и известный стартап)

 6. Yandex (некоторые сервисы)
Что такое RESTful?


       Веб-службы RESTful в MongoDB используют
       интерфейс API для связи с базами данных,
       просмотра логов и исполнения других ф-ций
       администрирования.
А как я узнаю его?
Он по дефолту запускается на порту «28017».

Он может быть запущен без параметра –rest, тогда будет вот эта ошибка:
А как я узнаю его?
Какие там уязвимости?

Во время исследования были найдены следующие уязвимости:

Исполнение произвольного серверного JS кода

Хранимая XSS в логах обращения к БД

Хранимая XSS в журнале запросов

CSRF в удаленном обращении к БД



                       Our SSJS code
Проведение атаки

                1) Посылаем запрос с тегом script, и адресом
                                                                  Site with
                нашего скрипта.
                                                                  mongoDB
                                                                  driver support
 Hacker




                                                                                   Admin’s browser




     Hacker’s
     Server
                                                               MongoDB

                                                               --REST
Проведение атаки

                1) Посылаем запрос с тегом script, и адресом
                                                                              Site with
                нашего скрипта.
                                                                              mongoDB
                                                                              driver support
 Hacker




                                                                                               Admin’s browser




                                                               2) В результате
                                                               нашего запроса, в
                                                               REST интерфейсе
                                                               будет
                                                               подгружаться наш
                                                               скрипт



     Hacker’s
     Server
                                                                           MongoDB

                                                                           --REST
Проведение атаки

                1) Посылаем запрос с тегом script, и адресом
                                                                              Site with
                нашего скрипта.
                                                                              mongoDB
                                                                              driver support
 Hacker




                                                                                                 Admin’s browser




                                                               2) В результате
                                                               нашего запроса, в
                                                               REST интерфейсе
                                                               будет
                                                               подгружаться наш
                                                               скрипт



     Hacker’s
     Server                                                                                    3) Через XSS в браузере
                                                                           MongoDB             подгружается наш скрипт
                                                                           --REST
Проведение атаки

                 1) Посылаем запрос с тегом script, и адресом
                                                                               Site with
                 нашего скрипта.
                                                                               mongoDB
                                                                               driver support
  Hacker




4) Посылаем
команду,                                                                                          Admin’s browser
браузеру
жертвы


                                                                2) В результате
                                                                нашего запроса, в
                                                                REST интерфейсе
                                                                будет
                                                                подгружаться наш
                                                                скрипт



      Hacker’s
      Server                                                                                    3) Через XSS в браузере
                                                                            MongoDB             подгружается наш скрипт
                                                                            --REST
Проведение атаки

                 1) Посылаем запрос с тегом script, и адресом
                                                                               Site with
                 нашего скрипта.
                                                                               mongoDB
                                                                               driver support
  Hacker




4) Посылаем
команду,                                                                                          Admin’s browser
браузеру
жертвы


                                                                2) В результате
                                                                нашего запроса, в
                                                                REST интерфейсе
                                                                будет
                          5) Ждем, пока скрипт не запросит      подгружаться наш
                          команду (JSONP) ( скрипт              скрипт
                          запрашивает новую команду
                          каждые 30 секунд)

      Hacker’s
      Server                                                                                    3) Через XSS в браузере
                                                                            MongoDB             подгружается наш скрипт
                                                                            --REST
Проведение атаки

                 1) Посылаем запрос с тегом script, и адресом
                                                                               Site with
                 нашего скрипта.
                                                                               mongoDB
                                                                               driver support
  Hacker




4) Посылаем
команду,                                                                                                  Admin’s browser
браузеру
жертвы


                                                                2) В результате
                                                                нашего запроса, в     6) Выполняем полученную
                                                                REST интерфейсе       команду, через
                                                                будет                 недокументированное
                          5) Ждем, пока скрипт не запросит      подгружаться наш
                          команду (JSONP) ( скрипт                                    исполнение SSJS, и получаем
                                                                скрипт                ответ
                          запрашивает новую команду
                          каждые 30 секунд)

      Hacker’s
      Server                                                                                           3) Через XSS в браузере
                                                                            MongoDB                    подгружается наш скрипт
                                                                            --REST
Проведение атаки

                 1) Посылаем запрос с тегом script, и адресом
                                                                                Site with
                 нашего скрипта.
                                                                                mongoDB
                                                                                driver support
  Hacker




4) Посылаем
команду,                                                                                                   Admin’s browser
браузеру                                                        7) Отправляем результат исполнения
жертвы                                                          команды на запись в БД


                                                                 2) В результате
                                                                 нашего запроса, в     6) Выполняем полученную
                                                                 REST интерфейсе       команду, через
                                                                 будет                 недокументированное
                          5) Ждем, пока скрипт не запросит       подгружаться наш
                          команду (JSONP) ( скрипт                                     исполнение SSJS, и получаем
                                                                 скрипт                ответ
                          запрашивает новую команду
                          каждые 30 секунд)

      Hacker’s
      Server                                                                                            3) Через XSS в браузере
                                                                             MongoDB                    подгружается наш скрипт
                                                                             --REST
Проведение атаки

                 1) Посылаем запрос с тегом script, и адресом
                                                                                Site with
                 нашего скрипта.
                                                                                mongoDB
                                                                                driver support
  Hacker




4) Посылаем
команду,    8) Получаем                                                                                    Admin’s browser
браузеру    результат                                           7) Отправляем результат исполнения
жертвы      исполнения                                          команды на запись в БД
            команды

                                                                 2) В результате
                                                                 нашего запроса, в     6) Выполняем полученную
                                                                 REST интерфейсе       команду, через
                                                                 будет                 недокументированное
                          5) Ждем, пока скрипт не запросит       подгружаться наш
                          команду (JSONP) ( скрипт                                     исполнение SSJS, и получаем
                                                                 скрипт                ответ
                          запрашивает новую команду
                          каждые 30 секунд)

      Hacker’s
      Server                                                                                            3) Через XSS в браузере
                                                                             MongoDB                    подгружается наш скрипт
                                                                             --REST
Видео
Разве такое можно встретить?
Стабильный CRASH

MongoDB очень часто падает если вызвать ф-цию с
нестандартными параметрами. На скриншотах можно
увидеть результат:
Интересные фичи

   Ф-ции ls, cat, (остальные - help admin) работают только из самой консоли Mongo.

   Скорее всего существуют и другие варианты NoSQL-инъекций, с другими языками
    программирования.

   Очень интересна ф-ция nativeHelper, которая как раз и отвечает за работу с ФС из консоли
    mongo.




   Чаще всего путь к файлам бд – «/data/db» или «/var/lib/mongodb». Структура каталога
    простая: (dbname).(num). Чтобы извлечь информацию достаточно сделать
    $ strings users.*
Сетевое взаимодействие

Добавление пользователя:

                           Расшифровываем соль:




Исходный код:
Сетевое взаимодействие

Перехваченные пакеты авторизации:




Нужные нам данные передаются в открытом виде:
Сетевое взаимодействие

Логика работы скрипта, для перехвата и перебора паролей:
 Перехватываем n                 Получаем
 пакетов, связанных              следующую
                                 строку из
 с mongodb                       словаря      key2 = md5(nonce + user +
                                              md5(user + ":mongo:" + passw)),
                                              где passw это строка из словаря
                Получаем из данных
                key, nonce, login




      Проверяем                                    key == key2                   Выводим
      их на                                                                      user:passwd
      наличие
      пакетов
      авторизации                     false
                                                                          true
                         Нашли

                                                                                 Выход
Не нашли
Сетевое взаимодействие
Сетевое взаимодействие. MiTM атака


         1. Запрос
         авторизации
                                     mongoDB


 admin




                       Hacker
Сетевое взаимодействие. MiTM атака


         1. Запрос
         авторизации
                                                   mongoDB


 admin             2. Отдаем nonce, под
                   который
                   сгенерированы
                   rainbow tables




                                          Hacker
Сетевое взаимодействие. MiTM атака


         1. Запрос
         авторизации
                                                    mongoDB


 admin              2. Отдаем nonce, под
                    который
                    сгенерированы
                    rainbow tables




                                           Hacker

         3. Клиент отдает нам
         login и получившийся
         key
Сетевое взаимодействие. MiTM атака


                                                    4. Подбираем
         1. Запрос
                                                    пароль по заранее
         авторизации
                                                    сгенерированным     mongoDB
                                                    к этому nonce
                                                    радужным
 admin              2. Отдаем nonce, под            таблицам
                    который
                    сгенерированы
                    rainbow tables




                                           Hacker

         3. Клиент отдает нам
         login и получившийся
         key
Сетевое взаимодействие. MiTM атака


                                                    4. Подбираем
         1. Запрос
                                                    пароль по заранее
         авторизации
                                                    сгенерированным                  mongoDB
                                                    к этому nonce
                                                    радужным
 admin              2. Отдаем nonce, под            таблицам
                    который
                    сгенерированы
                    rainbow tables


                                                       5. Успешно авторизовываемся
                                                       с полученными данными

                                           Hacker

         3. Клиент отдает нам
         login и получившийся
         key
Что такое BSON

Что такое BSON?                  Типы данных

Это Бинарный JSON. BSON это     string – строка
расширение JSON, которое        int - целое число
позволяет хранить данные в      double - двойное число с плавающей
различных форматах: дата и      запятой
время, бинарные данные и т.п.   DateTime – дата
                                byte[] - массив байт (бинарные
                                данные)
                                bool - булевые (true/false)
                                null - ноль
  Пример?                       BsonObject - BSON объект
                                BsonObject[] - массив BSON
                                объектов
Перезапись переменных

Имеется таблица с двумя записями:



Также запрос, в который мы можем внедриться:


Вставляем BSON документ, который перезаписывает переменную isadmin:




Проверяем:
Чтение произвольных участков памяти
Exploit:
                                Length



В действии:
Чтение произвольных участков памяти

В действии:
Особенности разных ЯП




                        Ruby on Rails


                               nodejs


                                    PHP
Особенности разных ЯП




               Ruby on Rails
Особенности разных ЯП

Mass assignment в Ruby on Rails:
Особенности разных ЯП

Mass assignment в Ruby on Rails:
Особенности разных ЯП




                  NodeJS
Особенности разных ЯП

JSON injection в NodeJS + MongoDB:
                                            SEND
                                             SEND

        VULNERABLE SOURCE CODE:
         VULNERABLE SOURCE CODE:


                                     RESULT QUERY:
                                      RESULT QUERY:




                                                      Хакер 02/12 (157)
Особенности разных ЯП




                        PHP
Уязвимости

 Типы обнаруженных уязвимостей:

   Обход авторизации через подстановку массива в
 php

   Внедрение SSJS (Server Side JavaScript) кода

   Слепое внедрение SSJS, Time-based
Особенности разных ЯП

 Как известно, php обрабатывает символы “[]” из GPC как массив:


  password[$ne]=parol1




 В официальном классе mongoDB для для php есть ф-ция find()
Особенности разных ЯП


 Формируется вот такой NoSQL запрос к MongoDB, и авторизация проходит
 успешно:




 Таким образом, если в коде нет проверки, мы можем обойти авторизацию
 разными способами:
Особенности разных ЯП

 Внедрение напрямую в js запрос.

 Предположим в коде вот такие вот строки:
 $q = “function() { var loginn = ‘$login’; var passs = ‘$pass’; db.members.insert({id : 2,
 login : loginn, pass : passs}); }”;
 $db->execute($q);

 Также в ответ выводятся наш id и login.

 Теперь пробуем внедриться в запрос:




 Видно, что тут идет перезапись переменной «loginn» на
 результат команды db.version()
Особенности разных ЯП

 Иногда невозможно увидеть результат исполнения SSJS-кода.

 Для этих случаем лучше использовать технику Time-based:




 Специально для этого был написан скрипт для перебора и вывода
     нужных пользователю данных.
NoSQL-injection Cheat Sheet


   db.getName() - имя текущей БД можно просто db

   db.members.count() - количество записей в таблице members

   db.members.validate({ full : true}) - основная информация о таблице
    members

   db.members.stats() - почти то же что и предыдущее, но немного в
    укороченном варианте

   db.members.remove() - очистить таблицу members, синтаксис такой-же
    как и у ф-ции find()

   db.members.find().skip(0).limit(1) - еще один способ получения записи.
    Просто перебираем значение skip.

   db.getMongo().getDBNames().toString() – Получаем список всех
    доступных БД

   db.members.find()[0][‘pass’] – получаем значение поля pass из первой
    записи
Спасибо за внимание!




             Фирстов Михаил
              Ноябрь 2012

Contenu connexe

Tendances

Node.js введение в технологию, КПИ #ITmeetingKPI
Node.js введение в технологию, КПИ  #ITmeetingKPINode.js введение в технологию, КПИ  #ITmeetingKPI
Node.js введение в технологию, КПИ #ITmeetingKPITimur Shemsedinov
 
Метапрограммирование с примерами на JavaScript
Метапрограммирование с примерами на JavaScriptМетапрограммирование с примерами на JavaScript
Метапрограммирование с примерами на JavaScriptTimur Shemsedinov
 
Кратко о MongoDB
Кратко о MongoDBКратко о MongoDB
Кратко о MongoDBGleb Lebedev
 
MongoDB первые впечатления
MongoDB первые впечатленияMongoDB первые впечатления
MongoDB первые впечатленияfudz1k
 
Веб-разработка без наркотиков с помощью PostgreSQL, Nginx и c2h5oh / Миша Кир...
Веб-разработка без наркотиков с помощью PostgreSQL, Nginx и c2h5oh / Миша Кир...Веб-разработка без наркотиков с помощью PostgreSQL, Nginx и c2h5oh / Миша Кир...
Веб-разработка без наркотиков с помощью PostgreSQL, Nginx и c2h5oh / Миша Кир...Ontico
 
HTML 5: будущее уже сегодня, Сергей Байдачный, Microsoft Ukraine
HTML 5: будущее уже сегодня, Сергей Байдачный, Microsoft UkraineHTML 5: будущее уже сегодня, Сергей Байдачный, Microsoft Ukraine
HTML 5: будущее уже сегодня, Сергей Байдачный, Microsoft UkraineVolha Banadyseva
 
Особенности архитектуры распределённого хранилища в Dropbox / Слава Бахмутов ...
Особенности архитектуры распределённого хранилища в Dropbox / Слава Бахмутов ...Особенности архитектуры распределённого хранилища в Dropbox / Слава Бахмутов ...
Особенности архитектуры распределённого хранилища в Dropbox / Слава Бахмутов ...Ontico
 
Ускоряем и разгружаем веб-сервер, прозрачно кэшируя на SSD, Станислав Николов...
Ускоряем и разгружаем веб-сервер, прозрачно кэшируя на SSD, Станислав Николов...Ускоряем и разгружаем веб-сервер, прозрачно кэшируя на SSD, Станислав Николов...
Ускоряем и разгружаем веб-сервер, прозрачно кэшируя на SSD, Станислав Николов...Ontico
 
Windows Azure & NodeJS Microsoft SWIT 2012
Windows Azure & NodeJS Microsoft SWIT 2012 Windows Azure & NodeJS Microsoft SWIT 2012
Windows Azure & NodeJS Microsoft SWIT 2012 Dmytro Mindra
 
Нижегородский рынок хостинга. А.Чекин.
Нижегородский рынок хостинга. А.Чекин.Нижегородский рынок хостинга. А.Чекин.
Нижегородский рынок хостинга. А.Чекин.Clouds NN
 
Nginx Igor Sysoev
Nginx   Igor SysoevNginx   Igor Sysoev
Nginx Igor SysoevMedia Gorod
 
Инструменты высоконагруженных проектов - кэширование и очереди, Вячеслав Моск...
Инструменты высоконагруженных проектов - кэширование и очереди, Вячеслав Моск...Инструменты высоконагруженных проектов - кэширование и очереди, Вячеслав Моск...
Инструменты высоконагруженных проектов - кэширование и очереди, Вячеслав Моск...Ontico
 
Быстрое прототипирование бэкенда игры с геолокацией на OpenResty, Redis и Doc...
Быстрое прототипирование бэкенда игры с геолокацией на OpenResty, Redis и Doc...Быстрое прототипирование бэкенда игры с геолокацией на OpenResty, Redis и Doc...
Быстрое прототипирование бэкенда игры с геолокацией на OpenResty, Redis и Doc...Ontico
 
Rspamd — высокопроизводительная система фильтрации спама / Стахов Всеволод (U...
Rspamd — высокопроизводительная система фильтрации спама / Стахов Всеволод (U...Rspamd — высокопроизводительная система фильтрации спама / Стахов Всеволод (U...
Rspamd — высокопроизводительная система фильтрации спама / Стахов Всеволод (U...Ontico
 
Автоматизация тестирования клиентской производительности / Николай Лавлинский...
Автоматизация тестирования клиентской производительности / Николай Лавлинский...Автоматизация тестирования клиентской производительности / Николай Лавлинский...
Автоматизация тестирования клиентской производительности / Николай Лавлинский...Ontico
 
Системный администратор Vkontakte. Как? / Антон Кирюшкин (Vkontakte)
Системный администратор Vkontakte. Как? / Антон Кирюшкин (Vkontakte)Системный администратор Vkontakte. Как? / Антон Кирюшкин (Vkontakte)
Системный администратор Vkontakte. Как? / Антон Кирюшкин (Vkontakte)Ontico
 

Tendances (20)

Node.js введение в технологию, КПИ #ITmeetingKPI
Node.js введение в технологию, КПИ  #ITmeetingKPINode.js введение в технологию, КПИ  #ITmeetingKPI
Node.js введение в технологию, КПИ #ITmeetingKPI
 
Метапрограммирование с примерами на JavaScript
Метапрограммирование с примерами на JavaScriptМетапрограммирование с примерами на JavaScript
Метапрограммирование с примерами на JavaScript
 
Кратко о MongoDB
Кратко о MongoDBКратко о MongoDB
Кратко о MongoDB
 
MongoDB первые впечатления
MongoDB первые впечатленияMongoDB первые впечатления
MongoDB первые впечатления
 
Веб-разработка без наркотиков с помощью PostgreSQL, Nginx и c2h5oh / Миша Кир...
Веб-разработка без наркотиков с помощью PostgreSQL, Nginx и c2h5oh / Миша Кир...Веб-разработка без наркотиков с помощью PostgreSQL, Nginx и c2h5oh / Миша Кир...
Веб-разработка без наркотиков с помощью PostgreSQL, Nginx и c2h5oh / Миша Кир...
 
No sql.mongodb scaling
No sql.mongodb scalingNo sql.mongodb scaling
No sql.mongodb scaling
 
HTML 5: будущее уже сегодня, Сергей Байдачный, Microsoft Ukraine
HTML 5: будущее уже сегодня, Сергей Байдачный, Microsoft UkraineHTML 5: будущее уже сегодня, Сергей Байдачный, Microsoft Ukraine
HTML 5: будущее уже сегодня, Сергей Байдачный, Microsoft Ukraine
 
Особенности архитектуры распределённого хранилища в Dropbox / Слава Бахмутов ...
Особенности архитектуры распределённого хранилища в Dropbox / Слава Бахмутов ...Особенности архитектуры распределённого хранилища в Dropbox / Слава Бахмутов ...
Особенности архитектуры распределённого хранилища в Dropbox / Слава Бахмутов ...
 
1c bitrix-cluster-et
1c bitrix-cluster-et1c bitrix-cluster-et
1c bitrix-cluster-et
 
Webcluster cases
Webcluster casesWebcluster cases
Webcluster cases
 
Ускоряем и разгружаем веб-сервер, прозрачно кэшируя на SSD, Станислав Николов...
Ускоряем и разгружаем веб-сервер, прозрачно кэшируя на SSD, Станислав Николов...Ускоряем и разгружаем веб-сервер, прозрачно кэшируя на SSD, Станислав Николов...
Ускоряем и разгружаем веб-сервер, прозрачно кэшируя на SSD, Станислав Николов...
 
Windows Azure & NodeJS Microsoft SWIT 2012
Windows Azure & NodeJS Microsoft SWIT 2012 Windows Azure & NodeJS Microsoft SWIT 2012
Windows Azure & NodeJS Microsoft SWIT 2012
 
Нижегородский рынок хостинга. А.Чекин.
Нижегородский рынок хостинга. А.Чекин.Нижегородский рынок хостинга. А.Чекин.
Нижегородский рынок хостинга. А.Чекин.
 
02 1c-bitrix-cloud-storage
02 1c-bitrix-cloud-storage02 1c-bitrix-cloud-storage
02 1c-bitrix-cloud-storage
 
Nginx Igor Sysoev
Nginx   Igor SysoevNginx   Igor Sysoev
Nginx Igor Sysoev
 
Инструменты высоконагруженных проектов - кэширование и очереди, Вячеслав Моск...
Инструменты высоконагруженных проектов - кэширование и очереди, Вячеслав Моск...Инструменты высоконагруженных проектов - кэширование и очереди, Вячеслав Моск...
Инструменты высоконагруженных проектов - кэширование и очереди, Вячеслав Моск...
 
Быстрое прототипирование бэкенда игры с геолокацией на OpenResty, Redis и Doc...
Быстрое прототипирование бэкенда игры с геолокацией на OpenResty, Redis и Doc...Быстрое прототипирование бэкенда игры с геолокацией на OpenResty, Redis и Doc...
Быстрое прототипирование бэкенда игры с геолокацией на OpenResty, Redis и Doc...
 
Rspamd — высокопроизводительная система фильтрации спама / Стахов Всеволод (U...
Rspamd — высокопроизводительная система фильтрации спама / Стахов Всеволод (U...Rspamd — высокопроизводительная система фильтрации спама / Стахов Всеволод (U...
Rspamd — высокопроизводительная система фильтрации спама / Стахов Всеволод (U...
 
Автоматизация тестирования клиентской производительности / Николай Лавлинский...
Автоматизация тестирования клиентской производительности / Николай Лавлинский...Автоматизация тестирования клиентской производительности / Николай Лавлинский...
Автоматизация тестирования клиентской производительности / Николай Лавлинский...
 
Системный администратор Vkontakte. Как? / Антон Кирюшкин (Vkontakte)
Системный администратор Vkontakte. Как? / Антон Кирюшкин (Vkontakte)Системный администратор Vkontakte. Как? / Антон Кирюшкин (Vkontakte)
Системный администратор Vkontakte. Как? / Антон Кирюшкин (Vkontakte)
 

En vedette (9)

Hacking routers as Web Hacker
Hacking routers as Web HackerHacking routers as Web Hacker
Hacking routers as Web Hacker
 
Sql-Injection
Sql-InjectionSql-Injection
Sql-Injection
 
Client side
Client sideClient side
Client side
 
Mongo db eng
Mongo db engMongo db eng
Mongo db eng
 
Race condition
Race conditionRace condition
Race condition
 
LFI
LFILFI
LFI
 
MongoDB as a Data Warehouse: Time Series and Device History Data (Medtronic)
MongoDB as a Data Warehouse: Time Series and Device History Data (Medtronic)MongoDB as a Data Warehouse: Time Series and Device History Data (Medtronic)
MongoDB as a Data Warehouse: Time Series and Device History Data (Medtronic)
 
Logging Application Behavior to MongoDB
Logging Application Behavior to MongoDBLogging Application Behavior to MongoDB
Logging Application Behavior to MongoDB
 
Practice Fusion & MongoDB: Transitioning a 4 TB Audit Log from SQL Server to ...
Practice Fusion & MongoDB: Transitioning a 4 TB Audit Log from SQL Server to ...Practice Fusion & MongoDB: Transitioning a 4 TB Audit Log from SQL Server to ...
Practice Fusion & MongoDB: Transitioning a 4 TB Audit Log from SQL Server to ...
 

Similaire à Attacking MongoDB

Разработка мобильного и веб интерфейса для Caché
Разработка мобильного и веб интерфейса для CachéРазработка мобильного и веб интерфейса для Caché
Разработка мобильного и веб интерфейса для CachéInterSystems CEE
 
Positive Hack Days. Баранов. DNS Rebinding возвращается (0-day)
Positive Hack Days. Баранов. DNS Rebinding возвращается (0-day)Positive Hack Days. Баранов. DNS Rebinding возвращается (0-day)
Positive Hack Days. Баранов. DNS Rebinding возвращается (0-day)Positive Hack Days
 
Web and mobile development for intersystems caché, Eduard Lebedyuk
Web and mobile development for intersystems caché, Eduard LebedyukWeb and mobile development for intersystems caché, Eduard Lebedyuk
Web and mobile development for intersystems caché, Eduard LebedyukInterSystems
 
Middleware
MiddlewareMiddleware
Middlewaremegakott
 
03 web server_architecture_ru
03 web server_architecture_ru03 web server_architecture_ru
03 web server_architecture_rumcroitor
 
FT & HA Rails приложений приложений — это просто
FT & HA Rails приложений приложений — это простоFT & HA Rails приложений приложений — это просто
FT & HA Rails приложений приложений — это простоАлександр Ежов
 
Изоморфный JavaScript — будущее уже здесь
Изоморфный JavaScript — будущее уже здесьИзоморфный JavaScript — будущее уже здесь
Изоморфный JavaScript — будущее уже здесьCodeFest
 
Нагрузочное тестирование API. Как летать, а не ползать?
Нагрузочное тестирование API. Как летать, а не ползать?Нагрузочное тестирование API. Как летать, а не ползать?
Нагрузочное тестирование API. Как летать, а не ползать?IT61
 
Экскурс в мир WEB разработки
Экскурс в мир WEB разработкиЭкскурс в мир WEB разработки
Экскурс в мир WEB разработкиIT-Доминанта
 
Андрей Завадский "Бессерверная архитектура"
 Андрей Завадский "Бессерверная архитектура" Андрей Завадский "Бессерверная архитектура"
Андрей Завадский "Бессерверная архитектура"Fwdays
 
Cloud Foundry − облачная OpenSource-платформа на Ruby (Алексей Ключников)
Cloud Foundry − облачная OpenSource-платформа на Ruby (Алексей Ключников) Cloud Foundry − облачная OpenSource-платформа на Ruby (Алексей Ключников)
Cloud Foundry − облачная OpenSource-платформа на Ruby (Алексей Ключников) Olga Lavrentieva
 
Работаем с API по-взрослому - Максим Кислов (Badoo)
Работаем с API по-взрослому - Максим Кислов (Badoo)Работаем с API по-взрослому - Максим Кислов (Badoo)
Работаем с API по-взрослому - Максим Кислов (Badoo)AvitoTech
 
Кортунов Никита. Как ускорить разработку приложений или есть ли жизнь после P...
Кортунов Никита. Как ускорить разработку приложений или есть ли жизнь после P...Кортунов Никита. Как ускорить разработку приложений или есть ли жизнь после P...
Кортунов Никита. Как ускорить разработку приложений или есть ли жизнь после P...AvitoTech
 
Golang в avito
Golang в avitoGolang в avito
Golang в avitoAvitoTech
 
Cocaine: погружение в облака — Евгений Сафронов
Cocaine: погружение в облака — Евгений СафроновCocaine: погружение в облака — Евгений Сафронов
Cocaine: погружение в облака — Евгений СафроновYandex
 
Sphinx + MongoDB: работаем вместе.
Sphinx + MongoDB: работаем вместе.Sphinx + MongoDB: работаем вместе.
Sphinx + MongoDB: работаем вместе.MageCloud
 
QA Fest 2019. Александр Хотемской. WebdriverIO + Puppeteer. Double gun - doub...
QA Fest 2019. Александр Хотемской. WebdriverIO + Puppeteer. Double gun - doub...QA Fest 2019. Александр Хотемской. WebdriverIO + Puppeteer. Double gun - doub...
QA Fest 2019. Александр Хотемской. WebdriverIO + Puppeteer. Double gun - doub...QAFest
 
Использование встроенных или подключаемых средств браузеров для тестирования ...
Использование встроенных или подключаемых средств браузеров для тестирования ...Использование встроенных или подключаемых средств браузеров для тестирования ...
Использование встроенных или подключаемых средств браузеров для тестирования ...SQALab
 

Similaire à Attacking MongoDB (20)

HTML5 WebSockets and WebWorkers
HTML5 WebSockets and WebWorkersHTML5 WebSockets and WebWorkers
HTML5 WebSockets and WebWorkers
 
Разработка мобильного и веб интерфейса для Caché
Разработка мобильного и веб интерфейса для CachéРазработка мобильного и веб интерфейса для Caché
Разработка мобильного и веб интерфейса для Caché
 
Positive Hack Days. Баранов. DNS Rebinding возвращается (0-day)
Positive Hack Days. Баранов. DNS Rebinding возвращается (0-day)Positive Hack Days. Баранов. DNS Rebinding возвращается (0-day)
Positive Hack Days. Баранов. DNS Rebinding возвращается (0-day)
 
Web and mobile development for intersystems caché, Eduard Lebedyuk
Web and mobile development for intersystems caché, Eduard LebedyukWeb and mobile development for intersystems caché, Eduard Lebedyuk
Web and mobile development for intersystems caché, Eduard Lebedyuk
 
Middleware
MiddlewareMiddleware
Middleware
 
03 web server_architecture_ru
03 web server_architecture_ru03 web server_architecture_ru
03 web server_architecture_ru
 
FT & HA Rails приложений приложений — это просто
FT & HA Rails приложений приложений — это простоFT & HA Rails приложений приложений — это просто
FT & HA Rails приложений приложений — это просто
 
Изоморфный JavaScript — будущее уже здесь
Изоморфный JavaScript — будущее уже здесьИзоморфный JavaScript — будущее уже здесь
Изоморфный JavaScript — будущее уже здесь
 
Нагрузочное тестирование API. Как летать, а не ползать?
Нагрузочное тестирование API. Как летать, а не ползать?Нагрузочное тестирование API. Как летать, а не ползать?
Нагрузочное тестирование API. Как летать, а не ползать?
 
Экскурс в мир WEB разработки
Экскурс в мир WEB разработкиЭкскурс в мир WEB разработки
Экскурс в мир WEB разработки
 
Андрей Завадский "Бессерверная архитектура"
 Андрей Завадский "Бессерверная архитектура" Андрей Завадский "Бессерверная архитектура"
Андрей Завадский "Бессерверная архитектура"
 
Cloud Foundry − облачная OpenSource-платформа на Ruby (Алексей Ключников)
Cloud Foundry − облачная OpenSource-платформа на Ruby (Алексей Ключников) Cloud Foundry − облачная OpenSource-платформа на Ruby (Алексей Ключников)
Cloud Foundry − облачная OpenSource-платформа на Ruby (Алексей Ключников)
 
Web лекция 1
Web   лекция 1Web   лекция 1
Web лекция 1
 
Работаем с API по-взрослому - Максим Кислов (Badoo)
Работаем с API по-взрослому - Максим Кислов (Badoo)Работаем с API по-взрослому - Максим Кислов (Badoo)
Работаем с API по-взрослому - Максим Кислов (Badoo)
 
Кортунов Никита. Как ускорить разработку приложений или есть ли жизнь после P...
Кортунов Никита. Как ускорить разработку приложений или есть ли жизнь после P...Кортунов Никита. Как ускорить разработку приложений или есть ли жизнь после P...
Кортунов Никита. Как ускорить разработку приложений или есть ли жизнь после P...
 
Golang в avito
Golang в avitoGolang в avito
Golang в avito
 
Cocaine: погружение в облака — Евгений Сафронов
Cocaine: погружение в облака — Евгений СафроновCocaine: погружение в облака — Евгений Сафронов
Cocaine: погружение в облака — Евгений Сафронов
 
Sphinx + MongoDB: работаем вместе.
Sphinx + MongoDB: работаем вместе.Sphinx + MongoDB: работаем вместе.
Sphinx + MongoDB: работаем вместе.
 
QA Fest 2019. Александр Хотемской. WebdriverIO + Puppeteer. Double gun - doub...
QA Fest 2019. Александр Хотемской. WebdriverIO + Puppeteer. Double gun - doub...QA Fest 2019. Александр Хотемской. WebdriverIO + Puppeteer. Double gun - doub...
QA Fest 2019. Александр Хотемской. WebdriverIO + Puppeteer. Double gun - doub...
 
Использование встроенных или подключаемых средств браузеров для тестирования ...
Использование встроенных или подключаемых средств браузеров для тестирования ...Использование встроенных или подключаемых средств браузеров для тестирования ...
Использование встроенных или подключаемых средств браузеров для тестирования ...
 

Attacking MongoDB

  • 1. Удар по MongoDB Фирстов Михаил
  • 2. Что это вообще такое? MongoDB — документо-ориентированная СУБД с открытым исходным кодом, не требующая описания схемы таблиц. (wiki) Особенности: 1. Документо-ориентированное хранилище. 2. Достаточно гибкий язык для формирования запросов 3. Динамические запросы 4. Полная поддержка индексов 5. Профилирование запросов 6. Поддержка отказоустойчивости и масштабируемости
  • 3. А на чем он? ./mongod — это серверная часть, написанная на C++ ./mongo – офф. клиент, написанный на C++ и JS У Mongodb существуют официальные драйвера для основных ЯП: C C++ Java Javascript .NET (C# F#, PowerShell, etc) Node.js Perl PHP Python Ruby Scala
  • 4. Где используются Краткий список компаний использующих MongoDB: 1. SAP (Крупный производитель программного обеспечения) 2. SourceForge (Хостинг открытого исходного кода) 3. The New York Times 4. GitHub (Проект социального хостинга) 5. Foursquare (Достаточно крупный и известный стартап) 6. Yandex (некоторые сервисы)
  • 5. Что такое RESTful? Веб-службы RESTful в MongoDB используют интерфейс API для связи с базами данных, просмотра логов и исполнения других ф-ций администрирования.
  • 6. А как я узнаю его? Он по дефолту запускается на порту «28017». Он может быть запущен без параметра –rest, тогда будет вот эта ошибка:
  • 7. А как я узнаю его?
  • 8. Какие там уязвимости? Во время исследования были найдены следующие уязвимости: Исполнение произвольного серверного JS кода Хранимая XSS в логах обращения к БД Хранимая XSS в журнале запросов CSRF в удаленном обращении к БД Our SSJS code
  • 9. Проведение атаки 1) Посылаем запрос с тегом script, и адресом Site with нашего скрипта. mongoDB driver support Hacker Admin’s browser Hacker’s Server MongoDB --REST
  • 10. Проведение атаки 1) Посылаем запрос с тегом script, и адресом Site with нашего скрипта. mongoDB driver support Hacker Admin’s browser 2) В результате нашего запроса, в REST интерфейсе будет подгружаться наш скрипт Hacker’s Server MongoDB --REST
  • 11. Проведение атаки 1) Посылаем запрос с тегом script, и адресом Site with нашего скрипта. mongoDB driver support Hacker Admin’s browser 2) В результате нашего запроса, в REST интерфейсе будет подгружаться наш скрипт Hacker’s Server 3) Через XSS в браузере MongoDB подгружается наш скрипт --REST
  • 12. Проведение атаки 1) Посылаем запрос с тегом script, и адресом Site with нашего скрипта. mongoDB driver support Hacker 4) Посылаем команду, Admin’s browser браузеру жертвы 2) В результате нашего запроса, в REST интерфейсе будет подгружаться наш скрипт Hacker’s Server 3) Через XSS в браузере MongoDB подгружается наш скрипт --REST
  • 13. Проведение атаки 1) Посылаем запрос с тегом script, и адресом Site with нашего скрипта. mongoDB driver support Hacker 4) Посылаем команду, Admin’s browser браузеру жертвы 2) В результате нашего запроса, в REST интерфейсе будет 5) Ждем, пока скрипт не запросит подгружаться наш команду (JSONP) ( скрипт скрипт запрашивает новую команду каждые 30 секунд) Hacker’s Server 3) Через XSS в браузере MongoDB подгружается наш скрипт --REST
  • 14. Проведение атаки 1) Посылаем запрос с тегом script, и адресом Site with нашего скрипта. mongoDB driver support Hacker 4) Посылаем команду, Admin’s browser браузеру жертвы 2) В результате нашего запроса, в 6) Выполняем полученную REST интерфейсе команду, через будет недокументированное 5) Ждем, пока скрипт не запросит подгружаться наш команду (JSONP) ( скрипт исполнение SSJS, и получаем скрипт ответ запрашивает новую команду каждые 30 секунд) Hacker’s Server 3) Через XSS в браузере MongoDB подгружается наш скрипт --REST
  • 15. Проведение атаки 1) Посылаем запрос с тегом script, и адресом Site with нашего скрипта. mongoDB driver support Hacker 4) Посылаем команду, Admin’s browser браузеру 7) Отправляем результат исполнения жертвы команды на запись в БД 2) В результате нашего запроса, в 6) Выполняем полученную REST интерфейсе команду, через будет недокументированное 5) Ждем, пока скрипт не запросит подгружаться наш команду (JSONP) ( скрипт исполнение SSJS, и получаем скрипт ответ запрашивает новую команду каждые 30 секунд) Hacker’s Server 3) Через XSS в браузере MongoDB подгружается наш скрипт --REST
  • 16. Проведение атаки 1) Посылаем запрос с тегом script, и адресом Site with нашего скрипта. mongoDB driver support Hacker 4) Посылаем команду, 8) Получаем Admin’s browser браузеру результат 7) Отправляем результат исполнения жертвы исполнения команды на запись в БД команды 2) В результате нашего запроса, в 6) Выполняем полученную REST интерфейсе команду, через будет недокументированное 5) Ждем, пока скрипт не запросит подгружаться наш команду (JSONP) ( скрипт исполнение SSJS, и получаем скрипт ответ запрашивает новую команду каждые 30 секунд) Hacker’s Server 3) Через XSS в браузере MongoDB подгружается наш скрипт --REST
  • 18. Разве такое можно встретить?
  • 19. Стабильный CRASH MongoDB очень часто падает если вызвать ф-цию с нестандартными параметрами. На скриншотах можно увидеть результат:
  • 20. Интересные фичи  Ф-ции ls, cat, (остальные - help admin) работают только из самой консоли Mongo.  Скорее всего существуют и другие варианты NoSQL-инъекций, с другими языками программирования.  Очень интересна ф-ция nativeHelper, которая как раз и отвечает за работу с ФС из консоли mongo.  Чаще всего путь к файлам бд – «/data/db» или «/var/lib/mongodb». Структура каталога простая: (dbname).(num). Чтобы извлечь информацию достаточно сделать $ strings users.*
  • 21. Сетевое взаимодействие Добавление пользователя: Расшифровываем соль: Исходный код:
  • 22. Сетевое взаимодействие Перехваченные пакеты авторизации: Нужные нам данные передаются в открытом виде:
  • 23. Сетевое взаимодействие Логика работы скрипта, для перехвата и перебора паролей: Перехватываем n Получаем пакетов, связанных следующую строку из с mongodb словаря key2 = md5(nonce + user + md5(user + ":mongo:" + passw)), где passw это строка из словаря Получаем из данных key, nonce, login Проверяем key == key2 Выводим их на user:passwd наличие пакетов авторизации false true Нашли Выход Не нашли
  • 25. Сетевое взаимодействие. MiTM атака 1. Запрос авторизации mongoDB admin Hacker
  • 26. Сетевое взаимодействие. MiTM атака 1. Запрос авторизации mongoDB admin 2. Отдаем nonce, под который сгенерированы rainbow tables Hacker
  • 27. Сетевое взаимодействие. MiTM атака 1. Запрос авторизации mongoDB admin 2. Отдаем nonce, под который сгенерированы rainbow tables Hacker 3. Клиент отдает нам login и получившийся key
  • 28. Сетевое взаимодействие. MiTM атака 4. Подбираем 1. Запрос пароль по заранее авторизации сгенерированным mongoDB к этому nonce радужным admin 2. Отдаем nonce, под таблицам который сгенерированы rainbow tables Hacker 3. Клиент отдает нам login и получившийся key
  • 29. Сетевое взаимодействие. MiTM атака 4. Подбираем 1. Запрос пароль по заранее авторизации сгенерированным mongoDB к этому nonce радужным admin 2. Отдаем nonce, под таблицам который сгенерированы rainbow tables 5. Успешно авторизовываемся с полученными данными Hacker 3. Клиент отдает нам login и получившийся key
  • 30. Что такое BSON Что такое BSON? Типы данных Это Бинарный JSON. BSON это string – строка расширение JSON, которое int - целое число позволяет хранить данные в double - двойное число с плавающей различных форматах: дата и запятой время, бинарные данные и т.п. DateTime – дата byte[] - массив байт (бинарные данные) bool - булевые (true/false) null - ноль Пример? BsonObject - BSON объект BsonObject[] - массив BSON объектов
  • 31. Перезапись переменных Имеется таблица с двумя записями: Также запрос, в который мы можем внедриться: Вставляем BSON документ, который перезаписывает переменную isadmin: Проверяем:
  • 32. Чтение произвольных участков памяти Exploit: Length В действии:
  • 33. Чтение произвольных участков памяти В действии:
  • 34. Особенности разных ЯП Ruby on Rails nodejs PHP
  • 36. Особенности разных ЯП Mass assignment в Ruby on Rails:
  • 37. Особенности разных ЯП Mass assignment в Ruby on Rails:
  • 39. Особенности разных ЯП JSON injection в NodeJS + MongoDB: SEND SEND VULNERABLE SOURCE CODE: VULNERABLE SOURCE CODE: RESULT QUERY: RESULT QUERY: Хакер 02/12 (157)
  • 41. Уязвимости Типы обнаруженных уязвимостей: Обход авторизации через подстановку массива в php Внедрение SSJS (Server Side JavaScript) кода Слепое внедрение SSJS, Time-based
  • 42. Особенности разных ЯП Как известно, php обрабатывает символы “[]” из GPC как массив: password[$ne]=parol1 В официальном классе mongoDB для для php есть ф-ция find()
  • 43. Особенности разных ЯП Формируется вот такой NoSQL запрос к MongoDB, и авторизация проходит успешно: Таким образом, если в коде нет проверки, мы можем обойти авторизацию разными способами:
  • 44. Особенности разных ЯП Внедрение напрямую в js запрос. Предположим в коде вот такие вот строки: $q = “function() { var loginn = ‘$login’; var passs = ‘$pass’; db.members.insert({id : 2, login : loginn, pass : passs}); }”; $db->execute($q); Также в ответ выводятся наш id и login. Теперь пробуем внедриться в запрос: Видно, что тут идет перезапись переменной «loginn» на результат команды db.version()
  • 45. Особенности разных ЯП Иногда невозможно увидеть результат исполнения SSJS-кода. Для этих случаем лучше использовать технику Time-based: Специально для этого был написан скрипт для перебора и вывода нужных пользователю данных.
  • 46. NoSQL-injection Cheat Sheet  db.getName() - имя текущей БД можно просто db  db.members.count() - количество записей в таблице members  db.members.validate({ full : true}) - основная информация о таблице members  db.members.stats() - почти то же что и предыдущее, но немного в укороченном варианте  db.members.remove() - очистить таблицу members, синтаксис такой-же как и у ф-ции find()  db.members.find().skip(0).limit(1) - еще один способ получения записи. Просто перебираем значение skip.  db.getMongo().getDBNames().toString() – Получаем список всех доступных БД  db.members.find()[0][‘pass’] – получаем значение поля pass из первой записи
  • 47. Спасибо за внимание! Фирстов Михаил Ноябрь 2012