Решения
http://blog.squareroots.de/en/2013/03/forbiddenbits-2013-write-up-naziwar/ (squareroots) http://wiki.zenk-security.com/doku.php?id=forbiddenbits_2013_naziwar (Zenk-security) |
Назад к списку заданий |
Задание (web)
Подробное описание
В этом задании вы должны были подключиться к web-сервису, используя Netcat. Установив соединение, сервис просит вас указать свое имя. > > Hello, comrade. I can't remember you. Define yourself to get a pass. Получив его, сервис дает вам пароль (прокрутите вверх, чтобы увидеть его). Набираем имя и пароль и входим в систему. Теперь вы можете запустить инструкцию "help", которая выведет список доступных команд в системе. Так "list" показывает список файлов, а "read" выводит содержимое файла на экран. Однако вы не сможете прочитать файл "flag", система ругается на то, что только "мой фюрер имеет к нему доступ". > read flag Ага, значит, мы должны войти в систему как "hitler". Но получить пароль, как в случае с новым пользователем система не разрешает. > > Hello, comrade. I can't remember you. Define yourself to get a pass. Итак, надо найти другой способ, чтобы стать hitler’ом. И вот тут важный момент. Такое поведение напоминает результат работы функции crypt в Unix.
Теперь алгоритм шифрования мы знаем. Обратите внимание, что мы обрабатываем через crypt выбранное нами имя. Проверяем (делаем так, запускаем у себя crypt – например, здесь http://www.functions-online.com/crypt.html - и сравниваем результат с тем, что возвращает нам сервис): Запрос Результат Результат Наш crypt сервиса crypt('xartrick', 'fb') fbSSJ/i65tQvI fbSSJ/i65tQvI crypt('xartrickaaaa', 'fb') fbSSJ/i65tQvI fbSSJ/i65tQvI А теперь попробуем на имени, длина которого меньше 8 символов: 7 символов имени crypt('xartric', 'fb') fbINLoSgsl/Cc fb2u7t8VibXlI Ага, получили различные результаты. Вывод напрашивается такой: если имя меньше 8 символов, то сервис дополняет его до 8 символов (возможно, с помощью какой-нибудь константы). Здесь нам потребуется небольшой брутфорс (достаточно перебрать 128 символов), чтобы найти дополненный символ. Псевдокод брутфорса: need = 'fb2u7t8VibXlI' name = 'xartric' for i in range(128): $crypt = crypt($name . chr($i), 'fb'); if (crypt(name+chr(i), 'fb') == need) : print ("Padded char: "+chr(i)) Один символ дополнения нашли. Это "h". Т.е. crypt("xartrich") = "fb2u7t8VibXlI". Но мы хотим найти пароль для "hitler", а в имени 6 символов. Значит, надо найти еще один символ дополнения. "xartrich" -> уменьшаем до 6 символов, убираем "c" -> "xartrih" -> сервис для имени "xartrih" возвращает "fbP8tYJcLAClg" -> делаем брутфорс и находим символ "4" -> проверяем у себя crypt("xartrih4") = "fbP8tYJcLAClg" Результат: > > In order to get access to our system authentication is required! |