четверг, 23 октября 2014 г.

Разбор задач с My little CTF

1) Stagano
Для решения этой задачи нужно было проанализировать файл с картинкой на наличие посторонних данных. После того как сама картинка в файле кончается, за ней следует текст с флагом. Этот текст не будет обрабатываться просмотрщиком изображений, т.к сама картинка уже кончилась. Обнаружить этот текст можно было открыть картинку в текстовом редакторе:


или с помощью Stegsolve, для этого воспользоваться инструментом File format, находящимся во в кладке меню Analise:


2) Crypto
Во первых приведу здесь пример программы для CrypTool 2 зашифровывающей и дешифрующий данные методом описанным в задании.
answer.cwm
В первую очередь нужно было понять, что т.к. в задании написано в каком порядке применялись алгоритмы шифрования дешифрование нужно проводить в обратном порядке.
Caesar + XOR + Base64 => Base64 + XOR + Caesar.

Рассмотрим используемые здесь элементы CrypTool
Общая схема дешифратора:

Base 64:
Для декодирования Base64 использовался элемент String Decoder. В настройках мы указали, что хотим декодировать Base64.
XOR:
Элемент XOR, на вкладке Classic Ciphers. В настройке не нуждается. Ключ был передан через отдельный Text Input. Сам ключ прилагался к заданию.
Caesar:
Элемент Caesar, на вкладке Classic Ciphers. Смещение в алфавите равно 3, подбирается имперически.

Для ввода и вывода данных в схему используются Text Input и Text Output.


3)Web
Примерный вид запроса:
"SELECT * FROM users WHERE name='jake' AND password = ' " + $pas + " ' ";
Здесь нужно было обратить внимание на наличие скобочек с двух сторон от нашего пароля.
SQL инъекция имела вид: 'OR''='
Здесь первая кавычка закрывает кавычку перед $pas, а последняя образует пустую строку с кавычкой  после $pas. Таким образом условие сравнения пустых строк будет давать равенство, а операция OR(или) сделает истинным всё выражение.


4)Joy


5) Admin
В файлах, лежащих в папках, есть цифры. Папки названы как буквы. Цифры(если они есть) указывают на каком месте в предложение должны стоять эти буквы, если файл пуст буквы в предложение нет, если несколько цифр, буква ставиться на все указанные места. Буквы в предложение нумеруются с 0.


P.S. Дорогие участники CTF, оставшиеся у вас вопросы оставляем в комментариях.

вторник, 14 октября 2014 г.

shellGL v1.0





Пример работы первой версии ShellGL:


download ShellGL v1.0 14.10.2014

Содержимое архива:
  • colorTable.script - набор defin'ов для задания цветов в консоли
  • shellGl.script - функции для работы с 3d графикой
  • pictures - папака с текстурами
  • index.script - shell скрипт демонстрирующий возможности shellGL
Подробнее рассмотрим как в index.script осуществляется вывод вращающегося куба:

#!/bin/bash




#подключение библиотеки shellGL
source shellGL.script


linesCount=72 #количество элементов в массиве координат = количество вершин * 3
#счётчик задающий угол поворота
timer=0
#главный игровой цикл
while [ true ]
do
    #координаты вершин, каждые 3 штуки задают вершину, каждая строка задаёт линию
    plain=(
     0  0  0  0  0 40
     0  0 40 40  0 40
    40  0 40 40  0  0
    40  0  0  0  0  0

     0  20  0  0  20 40
     0  20 40 40  20 40
    40  20 40 40  20  0
    40  20  0  0  20  0

     0  0  0  0  20 0
     0  0 40  0  20 40
    40  0 40 40  20 40
    40  0  0 40  20  0
    )
    #увеличиваем значение счётчика угла на pi/25 градусов
    timer=$(echo "$timer + $pi/25" | bc -l)
    if [ $(awk 'BEGIN{printf "%.0f\n","'$timer'"}') -gt 10 ]; then
        timer=0 #сбрасываем значение таймера
    fi
        #задаём значение матрицы перемещения
        #смещение будет происходить на -20 единиц по x, 0 по y и -20 по z
        #это смещение делается, чтобы центр куба совпал с началом координат
        translateMat=$(translateMatrix -20 0 -20)
        #обойти все вершины
        for ((i=0; i<linesCount; i+=3))
        do
                #записать тройку обрабатываемых вершин в вектор
                tempVec=( ${plain[$(($i+0))]} ${plain[$(($i+1))]} ${plain[$(($i+2))]} )
                #применить к вектору матрицу смещение
                resTranslate=( $(mulMatrix tempVec translateMat) )
                #записать координаты вектора назад в массив вершин
                plain[$(($i+0))]=${resTranslate[0]}
                plain[$(($i+1))]=${resTranslate[1]}
                plain[$(($i+2))]=${resTranslate[2]}
        done   
    #задаётся матрица поворота на угол лежащий в переменной timer
    rotateMatY=$(rotateMatrixY $timer)
        #обойти все вершины
        for ((i=0; i<linesCount; i+=3))
        do
                #записать тройку обрабатываемых вершин в вектор
                tempVec=( ${plain[$(($i+0))]} ${plain[$(($i+1))]} ${plain[$(($i+2))]} )
        #применить к вектору матрицу поворота
        resTranslate=( $(mulMatrix tempVec rotateMatY) )
        #записать координаты вектора назад в массив вершин
                plain[$(($i+0))]=${resTranslate[0]}
                plain[$(($i+1))]=${resTranslate[1]}
                plain[$(($i+2))]=${resTranslate[2]}
        done

    #задаём значение матрицы перемещения
    #смещение будет происходить на 40 единиц по x, 10 по y и 0 по z
    translateMat=$(translateMatrix 40 10 0)
    #обойти все вершины
    for ((i=0; i<linesCount; i+=3))
        do
        #записать тройку обрабатываемых вершин в вектор
        tempVec=( ${plain[$(($i+0))]} ${plain[$(($i+1))]} ${plain[$(($i+2))]} )
               #применить к вектору матрицу смещение
               resTranslate=( $(mulMatrix tempVec translateMat) )
        #записать координаты вектора назад в массив вершин
        plain[$(($i+0))]=${resTranslate[0]}
        plain[$(($i+1))]=${resTranslate[1]}
        plain[$(($i+2))]=${resTranslate[2]}
    done
    #очистить экран
    clearScreen
    #установить цвет рисовки зелёным
    setColor ${On_IGreen}
    #обойти массив, как массив линий
    for ((i=0; i<linesCount; i+=6))
    do
        #нарисовать линию с координатами x0 y0 z0 и x1 y1 z1
        draw3DLine ${plain[$(($i+0))]} ${plain[$(($i+1))]} ${plain[$(($i+2))]} ${plain[$(($i+3))]} ${plain[$(($i+4))]} ${plain[$(($i+5))]}
    done
done