Влезаем в компьютер, не используя средства ввода, ищем Джокера и коннектимся к серверу на Android — в заданиях NeoQUEST-2014!

в 9:01, , рубрики: android, hackquest, neoquest, Блог компании НеоБИТ, Занимательные задачки, информационная безопасность, неоквест
Влезаем в компьютер, не используя средства ввода, ищем Джокера и коннектимся к серверу на Android — в заданиях NeoQUEST-2014! - 1

Совсем скоро стартует отборочный тур NeoQUEST-2015, и в качестве подготовки к нему предлагаем вместе с нами разобрать задания очного тура NeoQUEST-2014! Мы уже рассказали, как прошел NeoQUEST-2014, поделились материалами докладов и фотографиями (возможно, на них кто-то даже нашел себя!). Теперь расскажем о той таинственной и скрытой от глаз зрителей, но важнейшей части NeoQUEST — соревновании специалистов по кибербезопасности, оказавшихся лучшими по итогам февральского онлайн-тура.

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

  • «Am I Joker?» — занимаемся конкурентной разведкой, применяя всю информацию о пользователе, которую удалось достать из соцсетей, выходим на сторонний сайт и эксплуатируем его уязвимость;
  • «Неожиданная находка» — есть компьютер и флешка, но нет ни мышки, ни клавиатуры? Не беда, ведь флешка не простая, а с SecureDrive, и один из ее разделов компьютер может определить как компакт-диск;
  • «Глазам своим не верь ты» — как найти на компьютере вредоносную программу, скрывающую свою сетевую активность, а заодно и файлы на диске?
  • «Кадры решают все» — коннектимся к веб-серверу, который неожиданно оказывается поднят на телефоне с ОС Android, и формируем специальный jar, чтобы получить ключ.


Прежде чем приступить к разбору заданий, скажем о самом важном — кто же все-таки стал победителем NeoQUEST-2014:
I место — AV1ct0r
II место — Dor1s
III место — Abr1k0s

AV1ct0r получил главный приз — поездку на международную конференцию по информационной безопасности, а ребята поделили между собой LEGO-робота и 3D-ручку с набором цветного пластика.
Кстати, многие гости мероприятия также ушли с небольшими, но приятными подарками, выигранными в конкурсах (об этом — в статье о том, как прошел очный тур NeoQUEST-2014).

Am I Joker? — задание №1

Точка входа в выполнение задания была скрыта в самом названии. Дальнейшее прохождение задания подразделялось на следующие этапы:

  1. Поиск фразы amijoker в поисковике google.com давало интересную для участников информацию:
    • одноименный аккаунт на сайте туристического сообщества «Турбина»
    • ссылка на профиль пользователя в социальной сети Facebook
  2. Получение полезной информации из аккаунта на сайте «Турбина» не требовало от участников регистрации. Вот что могли заметить участники при внимательном просмотре профиля пользователя AmIJoker:
    • ссылку на блог пользователя John Smith в Twitter
    • призыв подписаться на блог в Twitter
    • информацию о том, что пользователь работает программистом
  3. Если перейти в Twitter-блог пользователя и подписаться на него, сразу после этого John Smith подписывался на аккаунт участника и отправлял ему личное сообщение со следующим текстом: «your twitter name in png to my wall». В этой части задания участникам нужно было догадаться, что имя в png должно быть спрятано с помощью стеганографии. Но не любой алгоритм подойдет. Из идей, где поискать нужный алгоритм, наиболее логичной была идея поиска в аккаунте на Facebook.
  4. И действительно, на стене аккаунта опубликована ссылка на проект, размещенный на сайте github.com, а в личной информации — еще одна ссылка на github.com
  5. Переходим на github.com по первой ссылке и смотрим проект. Программа написана на PHP и работает с API твиттера. С помощью нее можно было бы загрузить фото, но не хватает ключей для API и OAuth. Тут нам и пригодится вторая ссылка на github.com, переходим по ней.
  6. В этом репозитории сохранен проект, написанный на языке С. Он реализует один из простейших алгоритмов стеганографии. Но как добыть ключи для работы с API твиттера?
  7. Тут и проверялась внимательность участников! В легенде не зря была упомянута песня группы Aerosmith – «Girls Of Summer». После непродолжительных поисков многие нашли сайт летних девушек. Также адрес этого сайта можно было найти в общих сведениях аккаунта на Facebook. Сайт выглядит по-летнему свежо и радует глаз!
  8. Особого функционала сайт не несет, однако опытный глаз может заметить, что переключение между фотографиями происходит с помощью передачи GET-параметров. Один из двух параметров уязвим по отношению к sql-инъекциям. С помощью этой нехитрой инъекции участники могли добыть ключи, необходимые для работы с api твиттера:
    • id 1
    • apiKey 603445921-b8c9k8OMhalLS8FakTpDHoUuXIzKuHLabOPWspsR
    • apiSecret O0DWIqmlNT02RKUZcXHIvkyMWG7Hwd9vKzAjd7JJ89Kbg
    • consumerKey vlC5S1NCMHHg8mD1ghPRkA
    • consumerSecret 3w4cIrHyI3IYUZW5O2ppcFXmsACDaENzFdLIKmEU84

Получив весь необходимый инструментарий, нужно было просто подставить ключи в готовую программу и залить картинку в твиттер.
Если имя участника было правильно записано внутрь png файла, то в ответ на картинку он получал личное сообщение с ключом задания.

В целом, схема задания выглядела примерно так:

Влезаем в компьютер, не используя средства ввода, ищем Джокера и коннектимся к серверу на Android — в заданиях NeoQUEST-2014! - 2

Неожиданная находка — задание №2

Всё, что было дано участникам — это компьютер без каких-либо средств ввода и флешка Transcend с функцией SecureDrive… В компьютере рабочими были только монитор и usb-порт, а клавиатура с мышью не функционировали. BIOS, кстати, был запаролен, так что участникам пришлось обходиться тем, что есть. По заданию, участникам требовалось скопировать резервные копии отправленной почты с данного компьютера и найти письмо с секретным ключом.

В данной ситуации очевидно, что взаимодействие с компьютером возможно только с помощью автозапуска программ с флешки. Простейшая проверка показывает, что автозапуск со съёмных носителей отключен. Здесь нужно вспомнить, что автозапуск возможен не только с них, но и с компакт-дисков, а также обратить внимание на выданную флешку, а именно на SecureDrive. На флешке есть раздел, который определяется компьютером как компакт-диск, а на другом ее разделе как раз находилась специальная программа, с помощью которой и происходила работа с защищённым разделом флешки! Это и должно было натолкнуть на идею использования раздела в своих целях!

Подобные флешки достаточно широко распространены, и зачастую используются в качестве загрузочных, поэтому достаточно просто найти информацию о том, каким образом можно заменить содержимое виртуального CD-ROM на своё. Для этого применяется утилита от производителя – JetFlash Online Recovery, предназначенная для восстановления раздела с SecureDrive в случае проблем с устройством. Исследование утилиты показывает, что раздел создаётся на основе ISO-образа, хранящегося отдельно от исполняемого файла. При этом не происходит никаких проверок, вследствие чего требуемая модификация флешки достигается заменой этого образа на специально подготовленный.

После получения возможности выполнять произвольные команды на целевом компьютере, можно приступать к поиску резервных копий. Наличие ярлыка IIS на рабочем столе подталкивает к проверке корня диска C: на наличие в нём соответствующей папки:

dir C:

Там же обнаруживается папка backup. Поскольку поиск требуемого письма без возможности использования клавиатуры может растянуться надолго, следующим шагом становится копирование этой папки на второй раздел флешки. Перед этим нужно определить букву диска, присвоенного ему, чтобы подготовить команду копирования:

xcopy C:backup F:backup /I /Q /Y

Копирование занимает продолжительное время из-за количества файлов с письмами. По этой же причине требуемое письмо не получится найти вручную. Однако легенда задания дает подсказку: секретный ключ был отправлен по почте 12 июня! Остается только автоматизировать процесс поиска с параметром, что достаточно просто:

grep -l "12 Jun" * | sort -u | xargs grep -E "<[a-f0-9]{32}>"

Среди найденных строк уже вручную можно найти искомый ключ.

Глазам своим не верь ты — задание №3

Для того, чтобы найти ключ, участникам были выданы листы с логотипом «NeoQUEST», содержащие в себе слово RDP, IP-адрес и логин-пароль. Первая логичная мысль — попробовать зайти по RDP на указанный компьютер… и это получается!

Влезаем в компьютер, не используя средства ввода, ищем Джокера и коннектимся к серверу на Android — в заданиях NeoQUEST-2014! - 3

В задании ничего не говорится о том, как искать ключ, а значит, приходится действовать по наитию. На рабочем столе компьютера было пусто, за исключением трех ярлыков с браузерами, которые явно были расположены там не просто так. При попытке запустить Google Chrome… ничего не происходит. Открывается обычное окно браузера, можно зайти на любой сайт, почитать новости, например. При запуске Mozilla Firefox – ситуация аналогична. Internet Explorer – всё без изменений. Логично попробовать посмотреть на специфичные для браузеров данные: историю посещения веб-страниц, сохраненные пароли, cookies и т.п… Но все оказывается безрезультатным – история очищена, пароли отсутствуют.

Влезаем в компьютер, не используя средства ввода, ищем Джокера и коннектимся к серверу на Android — в заданиях NeoQUEST-2014! - 4
Влезаем в компьютер, не используя средства ввода, ищем Джокера и коннектимся к серверу на Android — в заданиях NeoQUEST-2014! - 5
Влезаем в компьютер, не используя средства ввода, ищем Джокера и коннектимся к серверу на Android — в заданиях NeoQUEST-2014! - 6

Окей, если браузер «внешне» функционирует как обычно и не имеет зацепок, то, возможно, «внутреннее» функционирование, незаметное для обычного пользователя, имеет свои особенности. И первая обнаруживаемая особенность – это периодические обращения браузера к удаленному серверу, несмотря на то, что открытые вкладки пусты. Такие действия легко детектируются стандартным приложением операционной системы – Resource Monitor.

Влезаем в компьютер, не используя средства ввода, ищем Джокера и коннектимся к серверу на Android — в заданиях NeoQUEST-2014! - 7

Установив сниффер Wireshark и проанализировав исходящий трафик, участники смогли обнаружить поток данных к WEB-серверу 10.0.25.120 к файлу stub.php. Это может быть интересно! Но нет, сколько ни сканируй этот IP-адрес, сколько ни ломись на этот сервер – результата никакого. И, забегая вперед, действительно: сервер абсолютно пуст, на нем нет никакой ценной информации и используется он только для указания того, что участники двигаются в верном направлении.

Следующая особенность находится после более глубокого анализа функционирования процессов браузеров, а именно, используемых ими ресурсов. Для этого можно использовать как стандартные средства (Resource Monitor), так и сторонние (хотя это еще вопрос, насколько «сторонними» можно называть средства от господина Руссиновича) Process Explorer и Process Monitor.

Process Explorer позволяет увидеть иерархическое отображение процессов, их свойства, настройки безопасности, ресурсы, которыми они располагают, и так далее. Но при беглом просмотре интересующие процессы не показывают ничего интересного.

Влезаем в компьютер, не используя средства ввода, ищем Джокера и коннектимся к серверу на Android — в заданиях NeoQUEST-2014! - 8

А вот после использования Process Monitor ответ на задание практически лежит в руках.

Влезаем в компьютер, не используя средства ввода, ищем Джокера и коннектимся к серверу на Android — в заданиях NeoQUEST-2014! - 9

Process Monitor показывает, что периодически происходит запрос к файлу key.txt, который лежит на рабочем столе. Странно, но ведь такого файла там нет. Как быть? А вот тут стоит вспомнить старый трюк – файл может быть и скрыт, но, зная местоположение, его можно открыть. А выполнить это позволяет гениальная программа (выдохните!): notepad.exe

Влезаем в компьютер, не используя средства ввода, ищем Джокера и коннектимся к серверу на Android — в заданиях NeoQUEST-2014! - 10

Вот и все. В открывшемся окне Блокнота находится необходимый участнику ключ. Победа!

Влезаем в компьютер, не используя средства ввода, ищем Джокера и коннектимся к серверу на Android — в заданиях NeoQUEST-2014! - 11

Теперь стало все ясно. На компьютере стоит вредоносное программное обеспечение, которое каким-то образом внедряет свой код во все браузеры, с помощью чего скрывает свое сетевое общение с веб-сайтом. Кроме того, оно еще и скрывает свои файлы на диске, в частности, файл с ключом к заданию.

Кадры решают все — задание №4

В легенде участникам было сказано, что необходимо отследить деловые контакты одного человека: «Наверняка в телефонной книге хранится немало полезных номеров» (выдержка из легенды) и был дан IP-адрес, по которому можно получить доступ к этой книге.

При переходе на данный IP через браузер пользователю предлагалось загрузить картинку. Если пользователь загрузил jpg-файл, то ему выдавалась ссылка на отредактированное изображение.

С первого взгляда это задание на безопасность Web, однако это совсем не так. Если начать «ковырять» сайтик, то можно увидеть несколько интересных вещей!

Во-первых, при помощи уязвимости Source Code Disclosure можно скачать файл upload.php, всего лишь написав в адресной строке браузера что-то типа 192.168.0.222:8080/upload.php или как-то иначе, изменив регистр в расширении файла. Исходный код upload.php такой:

<html>
<head>
    <title>Make your retro pattern</title>
</head>
<body>
<?php
$my_name = htmlspecialchars(trim($_POST["action"]));
echo $my_name;
$date = date_create();
if($_FILES["filename"]["size"] > 1024*1024)
{
    echo ("Sorry bro ... your file is more then 1Mb...");
    exit();
}

$valid_types = array("jpg", "jar");

$ext = substr($_FILES['filename']['name'], 1 + strrpos($_FILES['filename']['name'], "."));
if (!in_array($ext, $valid_types))
{
    echo 'invalid file type';
    exit();
}

if(copy($_FILES["filename"]["tmp_name"],
    "/sdcard/pws/www/".$my_name."_".md5($_FILES["filename"]["name"].date_timestamp_get($date)).$_FILES["filename"]["name"]))
{
    echo("success");
}
else
{
    echo("error");
}

sleep(5);
echo("<br>Your file is here");
$url="/res/".$my_name."_".md5($_FILES["filename"]["name"].date_timestamp_get($date)).$_FILES["filename"]["name"];
echo("<p><a href=".$url.">Your new file</p>");

?>
</body>
</html>

Что же здесь интересного? Для начала, мы видим, что загружать можно не только неинтересный для нас jpg, но и весьма интересный jar, видимо, данный сервер умеет работать с Java. Далее видим путь «/sdcard/pws/www/», слово sdcard уж очень похоже на то, что сервер находится на телефоне (хотя поверить в это пока еще трудно!). А если просто взять и поискать в Google данную строку, то становится весьма похоже на то, что это Palapa Web Server, поднятый на Android.
Кроме того участники могли обнаружить очень интересный файл information, просто просканировав сайт сканером, например, ArxScanSite, определяющим файловую структуру сайта. Данный файл представляет собой картинку, приведенную ниже.

Влезаем в компьютер, не используя средства ввода, ищем Джокера и коннектимся к серверу на Android — в заданиях NeoQUEST-2014! - 12

И вот после этого сомнений в том, что это телефон, уже остаться не должно. Остается соединить Java + телефон = Android и получается, что перед нами web-сервер, поднятый на телефоне с Android, хотя можно лишний раз этом убедится, просканив его с помощью Nmap.
Итак, что имеем: перед нами web-сервер на Android, мы знаем путь к корню сервера «/sdcard/pws/www/», нам можно загружать jar-файлы. И тут самое главное вспомнить о том, что в задании нам сказано «Наверняка в телефонной книге хранится немало полезных номеров», а значит согласно скачанной картинке нам нужно создать jar, который запишет все телефонные номера, хранящиеся телефоне на Android в файл на карту памяти по следующему пути: «/sdcard/pws/www/». Взглянув на картинку становится понятно, что нужно создать пакет com.example.QUEST2014.contactBackup в котором создать метод start, который принимает на вход Context и ContentResolver и осуществляет запись телефонных номеров в файл.

Далее необходимо сделать этот jar применимым для Android, тут есть несколько путей. Первый путь выполняется в 4 этапа:

  1. Осуществление экспорта только нашего класса в jar-файл, после чего будет получен обычный jar-файл в виде zip-архива с class-файлом внутри.
  2. Создание dex-файла из нашего jar-файла с помощью утилиты jar2dex, получится файл classes.dex.
  3. Осуществление архивации файла classes.dex в zip-архив.
  4. Переименовывание полученного zip-архива в jar-файл.

Другой способ включает в себя 5 этапов.

  1. Компиляция нашего приложения.
  2. Поиск в директории, где находится Android SDK, директории, содержащей утилиту dx.bat (например, «android-sdkplatformsandroid-3tools»).
  3. Создание в данной директории директории с произвольным именем, например, «1». Внутри директории «1» создать файловую структуру, аналогично структуре нашего приложения, т.е. «1comexampleQUEST2014contactBackup».
  4. Копирование в эту директорию содержимого директории «outproductionИМЯ_ПРИЛОЖЕНИЯcomexampleQUEST2014contactBackup».
  5. Вызов dx.bat со следующими параметрами – «dx --dex --no-strict --output=ctf.jar 1/». В итоге получили нужный файл – ctf.jar.

Казалось бы, все, победа, но не тут-то было! При попытке загрузить данный jar, сайт выдает ошибку о том, что convert.jar такого файла не знает. Все оказывается очень просто, если посмотреть index.html (исходный код приведен ниже). Можно заметить, что в upload.php передается hidden-тег под названием action и имеющий значение «convert.jar»

<html>
	<head>
	  <title>Make your retro pattern</title>
	</head>
	<body>
	      <h2><p><b>Upload your image</b></p></h2>
	      <form action="upload.php" method="post" enctype="multipart/form-data">
	      <input type="file" name="filename">
	      <input type="hidden" name="action" value="convert.jar">
	      <input type="submit" value="Upload">
	      </form>
	</body>
	</html>

Теперь необходимо изменить значение на имя загружаемого jar-файла и все, вуаля! Мы получаем список контактов.

ID 190 NAME Max Smith PHONE +44234234234
ID 134 NAME Max Smith PHONE +4467652341
ID 137 NAME Alex Smith PHONE +4487653827
ID 193 NAME NeoQuestKey PHONE +78123123481
ID 4 NAME Andrey Petrov PHONE +79219325680
ID 11 NAME Макс Сушинский PHONE +79843214982
ID 13 NAME Аркадий Мамонтов PHONE 000001
ID 1 NAME Test Test PHONE 1234567
ID 7 NAME Petr Ivanov PHONE 2359631
ID 119 NAME Иван Жуков PHONE 89215897894

Понятно, что нужно взять телефон NeoQuestKey и посчитать от него hash. Ну вот и все, флаг добыт, задание пройдено!

Продолжение следует...

Пока зрители слушали доклады по кибербезопасности и получали подарки, участвуя в веселых конкурсах, наши героические участники соревнования очень динамично справлялись с заданиями. Еще раз поздравляем победителей и напоминаем, что уже близится онлайн-этап NeoQUEST-2015 — с еще более интересными заданиями, связанными между собой таинственной (как, впрочем, и всегда) легендой! Следите за обновлениями на нашем сайте и в блоге Хабрахабр.

Влезаем в компьютер, не используя средства ввода, ищем Джокера и коннектимся к серверу на Android — в заданиях NeoQUEST-2014! - 13

Автор: NWOcs

Источник


* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js