ORM-БИБЛИОТЕКАХ · 2019-12-12 · ORM-БИБЛИОТЕКАХ. Ramazan. ......

Preview:

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