27
ЭКСПЛУАТАЦИЯ ИНЪЕКЦИЙ В ORM-БИБЛИОТЕКАХ Ramazan

ORM-БИБЛИОТЕКАХ · 2019-12-12 · ORM-БИБЛИОТЕКАХ. Ramazan. ... Немного о . Doctrine ORM • Объектно-реляционный проектор

  • Upload
    others

  • View
    18

  • Download
    0

Embed Size (px)

Citation preview

Page 1: ORM-БИБЛИОТЕКАХ · 2019-12-12 · ORM-БИБЛИОТЕКАХ. Ramazan. ... Немного о . Doctrine ORM • Объектно-реляционный проектор

ЭКСПЛУАТАЦИЯ ИНЪЕКЦИЙ В ORM-БИБЛИОТЕКАХRamazan

Page 2: ORM-БИБЛИОТЕКАХ · 2019-12-12 · ORM-БИБЛИОТЕКАХ. Ramazan. ... Немного о . Doctrine ORM • Объектно-реляционный проектор

КТО

• Рамазан r0hack

• Пентестер в

• Участник команды

2

Page 3: ORM-БИБЛИОТЕКАХ · 2019-12-12 · ORM-БИБЛИОТЕКАХ. Ramazan. ... Немного о . Doctrine ORM • Объектно-реляционный проектор

Что за ORM?

3

Page 4: ORM-БИБЛИОТЕКАХ · 2019-12-12 · ORM-БИБЛИОТЕКАХ. Ramazan. ... Немного о . Doctrine ORM • Объектно-реляционный проектор

Для чего нужен ORM?

• Работа с объектами, а не с таблицами БД

• Реализация БД прямо из кода

• Безопасен, при правильном использовании

• Упрощает процесс разработки

4

Page 5: ORM-БИБЛИОТЕКАХ · 2019-12-12 · ORM-БИБЛИОТЕКАХ. Ramazan. ... Немного о . Doctrine ORM • Объектно-реляционный проектор

ORM - библиотеки

• Doctrine (PHP)

• Phalcon (PHP)

• Hibernate (Java)

5

Page 6: ORM-БИБЛИОТЕКАХ · 2019-12-12 · ORM-БИБЛИОТЕКАХ. Ramazan. ... Немного о . Doctrine ORM • Объектно-реляционный проектор

Какие они?

• Yii

• Laravel

• Ruby on Rails

• Symfony

• Hibernate

• Zend

6

Page 7: ORM-БИБЛИОТЕКАХ · 2019-12-12 · ORM-БИБЛИОТЕКАХ. Ramazan. ... Немного о . Doctrine ORM • Объектно-реляционный проектор

Примеры инъекций в Yii

7

Небезопасно -

Безопасно -

Page 8: ORM-БИБЛИОТЕКАХ · 2019-12-12 · ORM-БИБЛИОТЕКАХ. Ramazan. ... Немного о . Doctrine ORM • Объектно-реляционный проектор

Примеры инъекций в Yii

8

FALSE TRUE

Page 9: ORM-БИБЛИОТЕКАХ · 2019-12-12 · ORM-БИБЛИОТЕКАХ. Ramazan. ... Немного о . Doctrine ORM • Объектно-реляционный проектор

Примеры инъекций в Ruby on Rails

9

Page 10: ORM-БИБЛИОТЕКАХ · 2019-12-12 · ORM-БИБЛИОТЕКАХ. Ramazan. ... Немного о . Doctrine ORM • Объектно-реляционный проектор

Примеры инъекций в Ruby on Rails

10

Page 11: ORM-БИБЛИОТЕКАХ · 2019-12-12 · ORM-БИБЛИОТЕКАХ. Ramazan. ... Немного о . Doctrine ORM • Объектно-реляционный проектор

Уникальные языки запросов

• Doctrine Query Language (Doctrine ORM)

• Hibernate Query Language (Hibernate ORM)

• Phalcon Query Language (Phalcon ORM)

11

Page 12: ORM-БИБЛИОТЕКАХ · 2019-12-12 · ORM-БИБЛИОТЕКАХ. Ramazan. ... Немного о . Doctrine ORM • Объектно-реляционный проектор

Немного о Doctrine ORM

• Объектно-реляционный проектор (ORM) для PHP

• Изолирует объекты от БД

• Сильно упрощает работу с БД в крупных проектах

12

Page 13: ORM-БИБЛИОТЕКАХ · 2019-12-12 · ORM-БИБЛИОТЕКАХ. Ramazan. ... Немного о . Doctrine ORM • Объектно-реляционный проектор

Разрешенные функции

13

Page 14: ORM-БИБЛИОТЕКАХ · 2019-12-12 · ORM-БИБЛИОТЕКАХ. Ramazan. ... Немного о . Doctrine ORM • Объектно-реляционный проектор

Инъекции в Doctrine ORM• aka DQL Injection• Принцип тот же, что и с SQL Injection

14

Page 15: ORM-БИБЛИОТЕКАХ · 2019-12-12 · ORM-БИБЛИОТЕКАХ. Ramazan. ... Немного о . Doctrine ORM • Объектно-реляционный проектор

Пример в Doctrine ORMЗначение $query попадает в DQL-выражение

15

Page 16: ORM-БИБЛИОТЕКАХ · 2019-12-12 · ORM-БИБЛИОТЕКАХ. Ramazan. ... Немного о . Doctrine ORM • Объектно-реляционный проектор

Генерация запросов в Doctrine

16

Doctrine генерирует SQL-запрос для СУБД из DQL-запроса

Page 17: ORM-БИБЛИОТЕКАХ · 2019-12-12 · ORM-БИБЛИОТЕКАХ. Ramazan. ... Немного о . Doctrine ORM • Объектно-реляционный проектор

Какие техники инъекций работают?

• Boolean-Based Injection

• Error-Based Injection

• Оператора UNION в DQL нет (только JOIN)

17

Page 18: ORM-БИБЛИОТЕКАХ · 2019-12-12 · ORM-БИБЛИОТЕКАХ. Ramazan. ... Немного о . Doctrine ORM • Объектно-реляционный проектор

Boolean-Based Injection

18

TRUE

Page 19: ORM-БИБЛИОТЕКАХ · 2019-12-12 · ORM-БИБЛИОТЕКАХ. Ramazan. ... Немного о . Doctrine ORM • Объектно-реляционный проектор

Boolean-Based Injection

19

FALSE

Page 20: ORM-БИБЛИОТЕКАХ · 2019-12-12 · ORM-БИБЛИОТЕКАХ. Ramazan. ... Немного о . Doctrine ORM • Объектно-реляционный проектор

Error-Based Injection (SQLite)

20

1. UDF-функция SQRT падает при некорректных значениях, чтопозволяет отличать результат

2. Если включён Debug-режим в Symfony, можно сразу увидеть и результат SQL-запроса

Page 21: ORM-БИБЛИОТЕКАХ · 2019-12-12 · ORM-БИБЛИОТЕКАХ. Ramazan. ... Немного о . Doctrine ORM • Объектно-реляционный проектор

Error-Based Injection (MySQL)

• Для MySQL error-based так хорошо не работает

• В strict mode возможно при определённых условиях

• В с SQLite исключение возникло из-за PHP-функции (в самом SQLiteнет SQRT)

21

Page 22: ORM-БИБЛИОТЕКАХ · 2019-12-12 · ORM-БИБЛИОТЕКАХ. Ramazan. ... Немного о . Doctrine ORM • Объектно-реляционный проектор

Инъекция в операторе LIMIT?

• Данный оператор нельзя напрямую написать в DQL запрос.

• Задается с помощью параметризованной функции setMaxResults()

• Разрешены только числа

22

Page 23: ORM-БИБЛИОТЕКАХ · 2019-12-12 · ORM-БИБЛИОТЕКАХ. Ramazan. ... Немного о . Doctrine ORM • Объектно-реляционный проектор

Инъекции в операторе ORDER BY

• Данный оператор в DQL ограничен

• Ограничивает типы параметров на уровне грамматики

• Разрешены только литералы

• Аналогично с GROUP BY

23

Page 24: ORM-БИБЛИОТЕКАХ · 2019-12-12 · ORM-БИБЛИОТЕКАХ. Ramazan. ... Немного о . Doctrine ORM • Объектно-реляционный проектор

Что с безопасностью Phalcon?

• PHQL запрещает подзапросы

• PHQL игнорирует все SQL комментарии

• PHQL создает абстракцию, которая позволяет обрабатывать таблицы, как модели

• Подготовленные запросы, часть языка PHQL, для безопасного кода

24

Page 25: ORM-БИБЛИОТЕКАХ · 2019-12-12 · ORM-БИБЛИОТЕКАХ. Ramazan. ... Немного о . Doctrine ORM • Объектно-реляционный проектор

Hibernate Query Language

25

https://www.synacktiv.com/ressources/hql2sql_sstic_2015_en.pdf

Page 26: ORM-БИБЛИОТЕКАХ · 2019-12-12 · ORM-БИБЛИОТЕКАХ. Ramazan. ... Немного о . Doctrine ORM • Объектно-реляционный проектор

Зачем все это?

• ORM - библиотека или фреймворк не панацея!

• Знать, как правильно построить запрос для безопасности

• Есть ещё много библиотек и уязвимостей

• Вот целый сайт, посвящённый инъекциям в Ruby on Rails ORM:https://rails-sqli.org/

26

Page 27: ORM-БИБЛИОТЕКАХ · 2019-12-12 · ORM-БИБЛИОТЕКАХ. Ramazan. ... Немного о . Doctrine ORM • Объектно-реляционный проектор

THANKS FOR ATTENTION@r0hack