- Python3 + Flask (uwsgi-nginx-flask-docker)
- Docker
- Git
- Firefox
- Burp Suite
- некоторые зависимости для python
Шаги:
- Регистрируемся на github.com, если нет аккаунта
- Капитан команды делает fork репозитория к себе (кнопка
fork
вверху проекта) - Капитан команды добавляет в collaborators проекта остальных участников (
страница проекта
-Settings
-Collaborators
-Search by username
) - Теперь репозиторий команды может редактировать любой учатник команды со своего аккаунта
- Переходим (создаем) в директорию с названием уязвимости (если создаем, то используем lowercase и
_
вместо пробелов, напримерjwt_insecure
) - Копируем шаблон
../example/README.md
в свою рабочую директорию - Используем директорию, редактируем
README.md
- Ресерчим!
- Изменения заливаем через коммиты
Запрещается:
- изменять файлы в чужой рабочей директории (чужая уязвимость)
- сохранять нетекстовые файлы (исключение - картинки)
- лучше не переводить на русский специфичные определения
Что хочется увидеть в итоге:
- Полный ресерч по пунктам в файле
README.md
в директории с атакой/уязвимостью - Улучшение уязвимого приложения: расширить векторы возможной атаки; показать другие возможности эксплуатации; улучшить внешний вид уязвимого приложения
- Добавить к уязвимому приложению безопасный вариант функционала. Т.е. новый метод, где атака/уязвимость не будет проявляться
- Текстовый редактор, где удобно работать с Markdown (в принципе, можно редактировать средствами Github)
- Firefox (можно и другой, но его удобнее настраивать)
- Burp Suite (ссылка)
- Python3 + IDE (советую Pycharm)
- Git
- Docker
Если возникли проблемы с установкой желательного ПО - можно попробовать использовать VirtualBox (для виртуальной машины лучше ставить Ubuntu)
Если возникли проблемы только с Docker - подходите, разберемся как быть:)
Ссылки:
- Интерактивный урок: https://www.hacksplaining.com/exercises/open-redirects
- Описание, детектирование, пейлоады: https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Open%20redirect
- Open Redirect от OWASP: https://www.owasp.org/index.php/Unvalidated_Redirects_and_Forwards_Cheat_Sheet
- Пример репорта баги: https://hackerone.com/reports/387007 и Google Dork
site:hackerone.com open redirect
- Пейлоады для баг-баунти: https://github.com/EdOverflow/bugbounty-cheatsheet/blob/master/cheatsheets/open-redirect.md
- Статья с дополнительными фишками (обходы фильтров): https://medium.com/bugbountywriteup/cvv-2-open-redirect-213555765607
- Дополнительная информация: https://2017.zeronights.org/wp-content/uploads/materials/ZN17_Karbutov_CRLF_PDF.pdf
Ссылки:
- Расширенное описание: https://prakharprasad.com/crlf-injection-http-response-splitting-explained/
- Описание, основная инфа, пейлоады: https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/CRLF%20injection
- XSS через CRLF на hackerone: https://vulners.com/hackerone/H1:192749
- Пример репорта баги: Google Dork
site:hackerone.com crlf
- Шпаргалка от EdOverflow: https://github.com/EdOverflow/bugbounty-cheatsheet/blob/master/cheatsheets/crlf.md
- CRLF to XSS: https://habr.com/ru/company/pt/blog/247709/
- Дополнительная информация: https://2017.zeronights.org/wp-content/uploads/materials/ZN17_Karbutov_CRLF_PDF.pdf
Ссылки:
- Описание от DSec: https://dsec.ru/wp-content/uploads/2018/09/techtrain_ssrf.pdf
- Описание, пейлоады, техники: https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/SSRF%20injection/README.md
- Очень дорогой SSRF-баг на hackerone: https://hackerone.com/reports/341876
- A new Era of SSRF by Orange Tsai: https://www.blackhat.com/docs/asia-18/asia-18-Tsai-A-New-Era-Of-SSRF-Exploiting-URL-Parser-In-Trending-Programming-Languages.pdf
- Статья с описанием от albinowax: https://portswigger.net/blog/server-side-template-injection
- Ресерч, пэйлоады и др: https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20injections
- Статья с описанием от defcon.ru: https://defcon.ru/web-security/3840/
- Статьи с описанием SSTI во Flask: https://nvisium.com/blog/2015/12/07/injecting-flask.html https://nvisium.com/blog/2016/03/11/exploring-ssti-in-flask-jinja2-part-ii.html
- Инструмент для автоматической эксплуатации: https://github.com/epinna/tplmap
- Интерактивный урок: https://www.hacksplaining.com/exercises/csrf
- Варианты защиты: https://habr.com/ru/post/318748/
- Описание и защита: https://learn.javascript.ru/csrf
- Обход при эксплуатации при типе данных JSON: https://www.geekboy.ninja/blog/exploiting-json-cross-site-request-forgery-csrf-using-flash/ и https://blog.appsecco.com/exploiting-csrf-on-json-endpoints-with-flash-and-redirects-681d4ad6b31b
- Описание, обход, эксплуатация: https://2017.zeronights.org/wp-content/uploads/materials/ZN17_MikhailEgorov%20_Neat_tricks_to_bypass_CSRF_protection.pdf
- Описание, защита - https://2017.zeronights.org/wp-content/uploads/materials/csrf_cors_etc.pdf
- Описание проблем технологии: https://www.slideshare.net/snyff/jwt-insecurity
- Потестировать токены: https://jwt.io/
- Шпаргалка с чек-листом для тестирования: https://assets.pentesterlab.com/jwt_security_cheatsheet/jwt_security_cheatsheet.pdf
- Описание, информация: https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/JSON%20Web%20Token
- Описание, таблицы, примеры багов: https://www.owasp.org/images/6/6b/PHPMagicTricks-TypeJuggling.pdf
- Информация об эксплуатации: https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/PHP%20juggling%20type
- Ресерч десериализация в Java: https://github.com/mbechler/marshalsec/blob/master/marshalsec.pdf
- Шпаргалка от OWASP: https://www.owasp.org/index.php/Deserialization_Cheat_Sheet#Guidance_on_Deserializing_Objects_Safely
- Шпаргалка от GrrrDog: https://github.com/GrrrDog/Java-Deserialization-Cheat-Sheet
- Уязвимые приложения (Python, nodejs, Java (native binary and jackson)): https://github.com/GrrrDog/ZeroNights-WebVillage-2017
- Ресерч по десериализации в Ruby: https://lab.wallarm.com/exploring-de-serialization-issues-in-ruby-projects-801e0a3e5a0a
Для написания информации по ресерчу используем Markdown-разметку. Что понадобится:
- шпаргалка по синтаксису есть тут
- лучше использовать удобный текстовый редактор (я использую Sublime Text)
- лучше в текстовом редакторе поставить плагин для предпроссмотра Markdown-файлов (я использую этот)
Будем использовать Python + Flask.
Установка окружения:
- Windows http://timmyreilly.azurewebsites.net/python-pip-virtualenv-installation-on-windows/
- Linux https://itsfoss.com/python-setup-linux/
Создать виртуальное окружение (можно без него, тогда надо использовать pip3
):
cd <directory>
virualenv
Появится директория venv
со структурой:
├── bin
│ ├── activate
│ ├── activate.csh
│ ├── activate.fish
│ ├── easy_install
│ ├── easy_install-3.6
│ ├── flask
│ ├── pip
│ ├── pip3
│ ├── pip3.6
│ ├── python
│ ├── python3
│ └── python3.6
├── include
├── lib
│ └── python3.6
├── lib64 -> lib
├── pip-selfcheck.json
└── pyvenv.cfg
Используем бинарники отсюда: venv/bin/
Установить Flask:
venv/bin/pip3 install flask
Указание авторства:
git config --global user.name "<your_nickname>"
git config --global user.email "<your_email>"
Клонирование репозитория:
git clone https://github.com/act1on3/shift2019.git
Перейти на новую ветку:
git checkout -b <branch_name>
git push --set-upstream origin <branch_name>
Обновить локальный репозиторий из удаленного:
git pull
Добавление измененных файлов и коммит своих изменений:
git status
git add <filename>
git commit
- пишете описание коммита
Отправка локальных изменений в репозиторий:
git push
Установка:
- Windows https://docs.docker.com/docker-for-windows/install/
- Ubuntu https://docs.docker.com/install/linux/docker-ce/ubuntu/
- Debian https://docs.docker.com/install/linux/docker-ce/debian/
- MacOS https://docs.docker.com/docker-for-mac/install/
Создать образ:
cd open_redirect
docker build -t open_redirect .
docker run -p 8080:80 open_redirect
или добавить ключ-d
для отправки в daemon-режим
Закрыть все контейнеры:
docker rm -f `docker ps -a -q`
Удалить образы:
docker images
docker image rm <image_name>
Удалить все промежуточные образы (создаются во время билда):
docker rmi `docker images -f "dangling=true" -q`