Добро пожаловать в репозиторий проекта active_man! Этот проект направлен на оттачивание навыков пентестинга веб-приложений. Так же он может применяться при собеседовании на позицию junior-pentester для оценки навыков.
Недавно УК City разработало приложение “Активный человек”, которое позволит властям и горожанам эффективнее контактировать друг с другом. Приложение позволяет гражданам выбирать инфраструктурные проекты для реализации в своем городе. Сегодня утром граждане увидели провокационные надписи в новом приложении, а в сети появились данные о продаже архива с данными жителей города. Глава УК City заявил прессе, что все данные были защищены с помощью шифрования, но граждане опасаются за свою конфиденциальность. Началось расследование.
В рамках нашего проекта были исследованы следующие уязвимости:
- A03:2021 – Injection (SQL injection): Это тип атаки на базы данных, при котором злоумышленник вводит вредоносный SQL-код в поля ввода, чтобы манипулировать запросами к базе данных. Это может привести к несанкционированному доступу, утечке данных, изменению или удалению информации
- A07:2021 – Identification and Authentication Failures (IDOR): Уязвимость, связанная с небезопасной ссылкой на объект
- A03:2021 – Injection (RCE via PDF creation): Уязвимость, связанная с небезопасной генерацией pdf-документов
- A02:2021 – Cryptographic Failures: Уязвимость, связанная с ненадежным шифрованием zip архива
В приложении использовались следующие технологии:
- Json Web Token для авторизации
- SQLite для хранения информации
- Flask для создания веб-приложения
- Docker для контейнеризации приложения
- LaTeX для генерации документов
Для запуска используйте docker: Скачайте проект, откройте терминал в корневой папке проекта и напишите команды "docker build -t <tag_name> . ", "docker run -d -p 5000:5000 -p 5022:22 --name <container_name> <tag_name>". Для взаимодействия с приложением перейдите по ссылке http://localhost:5000/
Нажмите, чтобы открыть меню:
- Заходим на сайт и оцениваем функциональность.
- Регистрируемся.
- Видим, что можем поставить лайк и подтвердить аккаунт. На этом этапе эксплуатируем or-based SQL injection
и
.
- После подтверждения аккаунта становится доступным вход по QR. Декодируем его и видим, что для входа используется токен и id пользователя. Меняем id на id админа.
- Оцениваем функциональность, доступную админу. Видим, что можем закрыть проект, однако не хватает голосов граждан. Проведя фаззинг, обнаруживаем, что данный эндпоинт также поддерживает метод POST. Далее подбираем параметр (helper), который нужно передать, чтобы обойти проверку на голоса (True).
- Закрываем проект и получаем сгенерированный PDF-документ. Используя
Exiftool, определяем, что при генерации использовался пакет LaTeX.
- С помощью полезных нагрузок, приведённых в ссылке выше, проводим разведку сервера. В папке
/root/.sshнаходим приватный ключid_rsa. Получаем его в PDF при помощи нагрузки:
{\scriptsize \immediate\write18{cat /home/simple-user/.ssh/id_rsa | base64 > output} \input{output} }
- Декодируем и сохраняем в файл
id_rsa(команда:cat id_in_base64 | base64 -d > id_rsa). Видим, что это зашифрованный ключ. - Используя
ssh2john, создаём хеш этого ключа:ssh2john id_rsa > hash. С помощьюJohn the Ripperподбираем пароль:john hash --wordlist=/path/to/rockyou. Получаем пароль и входим на сервер (пароль: "droopy"). - В соответствии с сюжетом необходимо получить доступ к конфиденциальным данным, поэтому проводим разведку в рабочей папке
/app/instanceи находимarchive.zip, защищённый паролем. Однако в нём используется слабое шифрованиеи
.
- Используя приведённые выше ссылки, получаем доступ к содержимому архива: создаём файл, используя команду:
bash echo -n "\x89\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52" > plain.text
Проверяем содержимое архива
Запускаем взлом
Дешифруем архив
- В базе данных находим конечный флаг:
{ThI5_IS_Your_Fl@6}
Спасибо за интерес к проекту! Буду рад предложениям по созданию уязвимых сервисов, а также советам по улучшению существующих. Приятного хакинга !


