Order Of Six Angles

Main Logo

Х.Р.А.М Сатаны

Home | RU | Translations | Art | Feed.xml

5 April 2024

tags: cracking

Решение тасков рутми

PE x86 - AutoPE (medium)

Ссылка на таск

Файл представляет собой x86 exe, с полем ввода пароля и кнопкой, которая запускает его проверку:

Из описания следует, что:

  1. используется AutoIt
  2. конец файла (скорей всего имеется в виду autoit скрипт) - это только начало
  3. надо обратить внимание на “WTF”

нам надо извлечь autoit скрипт из бинарника. Скачиваем exe2aut. Закидываем наш бинарник и в итоге получаем исходный скрипт:

Чтобы удобно просматривать, редактировать и запускать скрипт, нам надо установить SciTE4AutoIt3. Открываем скрипт, и идем в самый конец (как было сказано в подсказке). Внизу мы видим небольшое количество функций, с “wtf” в именах, то что нужно:

Только в одной из них есть проверка чего-то на равенство:

Сравниваются переменные $wtf8 и $wtf9. Давайте выведем их значение:

Очевидно, что условие никогда не будет истинным, так как эти строки не равны. Давайте изменим это условие, чтобы оно стало истиным. Меняем $wtf8 = $wtf9 на $wtf8 <> wtf9:

Теперь, запустив скрипт, мы увидим InputBox!

И внутри наш флаг!

HTB easy

Этот таск не из рутми, а из HTB ctf. Меня попросили помочь решить. У нас в руках 64 битный ELF бинарник:

casino: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=ac3d9d8a2c65ca7a0cb88af07efaec8c991c315d, for GNU/Linux 3.2.0, not stripped

Суть программы - считывание инпута длиной 0x1d, использование его в качестве seed для функции srand() и сравнение результата функции rand() с захардкоженым массивом:

массив:

Другими словами, нам надо подать на вход такие символы (%c), на основе которых будут сгенерированы определенные “псведослучайные” значения. Интуиция подсказала, что в начале надо проверить специальные символы. Был написан следующий код:

#include "stdio.h"

int main() {


        int i;
        const char* a = "-*_+=-[]{}&^%$#@!()";
        for(i = 0;i<19;i++) {
        srand(a[i]);
        printf("%x\n", rand());
};
        return 0;
}

В итоге удалось глазами сопоставить вывод с массивом и найти одно значение (подчеркивание) - “43383720 _”

Уже лучше. Следующее предположение было о том, что используются ASCII символы. Для этого был написан простой брутер, который сравнивал поочередно значение из массива с каждым аски символом (от 0 до 127):

#include "stdio.h"

int main() {
	int res[0x1d] = {0x244B28BE, 0x0AF77805, 0x110DFC17, 0x7AFC3A1, 0x6AFEC533,
	0x4ED659A2, 0x33C5D4B0, 0x286582B8, 0x43383720, 0x55A14FC5,
	0x19195F9F, 0x43383720, 0x63149380, 0x615AB299, 0x6AFEC533, 0x6C6FCFB8,
	0x43383720, 0x0F3DA237, 0x6AFEC533, 0x615AB299, 0x286582B8, 0x55A14FC, 0x3AE44994, 0x6D7DFE9, 0x4ED659A2, 0x0CCD4ACD, 0x57D8ED64, 0x615AB299, 0x22E9BC2A};

	int i,j, check;
	
	for(j = 0;j <= 0x1c; j++) {
		for(i = 0;i<127;i++) { 
                srand(i);
                check = rand();
		
        		if (res[j] == check)
                    printf("%c", i);
        }
	}
	return 0;
}

В итоге получим флаг.

Command & Control - level 2 (Easy)

Нам надо найти hostname в дампе. Для начала выполняем команду и смотрим общую информацию о дампе:

Из этой информации берем имя профайла. Хостнейм хранится в реестре (можно загуглить где конкретно), будем искать его там:

Находим!

Command & Control - level 3 (Medium)

В этот раз нас просят найти некую малварь в дампе. Больше ничкаких деталей дано не было. Ответом будет являться путь к этой малвари. Этот таск я решил очень тупым способом и по сути неправильно. Я залез в реестр посмотреть на ключ RUN

Увидев два бинарника я подумал, ну раз они в атозагрузке, то значит могут быть малварью. Засабмитил оба пути и один из них сработал (ieexplorer), лол! Прочитав решения других людей после сабмита я увидел как надо было правильно решать таск. А надо было вывести список процессов (pstree) и затем увидеть, что от ieexplorer.exe был вызван процесс cmd.exe, что уже очень подозрительно!

Вверх