Upload
others
View
35
Download
0
Embed Size (px)
Citation preview
ЭКСПЛУАТАЦИЯ ИНЪЕКЦИЙ В ORM-БИБЛИОТЕКАХRamazan
КТО
• Рамазан r0hack
• Пентестер в
• Участник команды
2
Что за ORM?
3
Для чего нужен ORM?
• Работа с объектами, а не с таблицами БД
• Реализация БД прямо из кода
• Безопасен, при правильном использовании
• Упрощает процесс разработки
4
ORM - библиотеки
• Doctrine (PHP)
• Phalcon (PHP)
• Hibernate (Java)
5
Какие они?
• Yii
• Laravel
• Ruby on Rails
• Symfony
• Hibernate
• Zend
6
Примеры инъекций в Yii
7
Небезопасно -
Безопасно -
Примеры инъекций в Yii
8
FALSE TRUE
Примеры инъекций в Ruby on Rails
9
Примеры инъекций в Ruby on Rails
10
Уникальные языки запросов
• Doctrine Query Language (Doctrine ORM)
• Hibernate Query Language (Hibernate ORM)
• Phalcon Query Language (Phalcon ORM)
11
Немного о Doctrine ORM
• Объектно-реляционный проектор (ORM) для PHP
• Изолирует объекты от БД
• Сильно упрощает работу с БД в крупных проектах
12
Разрешенные функции
13
Инъекции в Doctrine ORM• aka DQL Injection• Принцип тот же, что и с SQL Injection
14
Пример в Doctrine ORMЗначение $query попадает в DQL-выражение
15
Генерация запросов в Doctrine
16
Doctrine генерирует SQL-запрос для СУБД из DQL-запроса
Какие техники инъекций работают?
• Boolean-Based Injection
• Error-Based Injection
• Оператора UNION в DQL нет (только JOIN)
17
Boolean-Based Injection
18
TRUE
Boolean-Based Injection
19
FALSE
Error-Based Injection (SQLite)
20
1. UDF-функция SQRT падает при некорректных значениях, чтопозволяет отличать результат
2. Если включён Debug-режим в Symfony, можно сразу увидеть и результат SQL-запроса
Error-Based Injection (MySQL)
• Для MySQL error-based так хорошо не работает
• В strict mode возможно при определённых условиях
• В с SQLite исключение возникло из-за PHP-функции (в самом SQLiteнет SQRT)
21
Инъекция в операторе LIMIT?
• Данный оператор нельзя напрямую написать в DQL запрос.
• Задается с помощью параметризованной функции setMaxResults()
• Разрешены только числа
22
Инъекции в операторе ORDER BY
• Данный оператор в DQL ограничен
• Ограничивает типы параметров на уровне грамматики
• Разрешены только литералы
• Аналогично с GROUP BY
23
Что с безопасностью Phalcon?
• PHQL запрещает подзапросы
• PHQL игнорирует все SQL комментарии
• PHQL создает абстракцию, которая позволяет обрабатывать таблицы, как модели
• Подготовленные запросы, часть языка PHQL, для безопасного кода
24
Hibernate Query Language
25
https://www.synacktiv.com/ressources/hql2sql_sstic_2015_en.pdf
Зачем все это?
• ORM - библиотека или фреймворк не панацея!
• Знать, как правильно построить запрос для безопасности
• Есть ещё много библиотек и уязвимостей
• Вот целый сайт, посвящённый инъекциям в Ruby on Rails ORM:https://rails-sqli.org/
26
THANKS FOR ATTENTION@r0hack