HackQuest на Chaos Constructions 2011

HackQuest на Chaos Constructions 2011
Отгремели последние восьмибитные визги старых Спектрумов, отбухали последние организаторы, отностальгировались последние демосценеры. В общем, СС11 подошел к концу. Как обычно, в этом году в рамках фестиваля отожгла свое секция "Хакзона" с традиционным конкурсом "ХакКвест". Для тех, кто участвовал, ниже приводится подробный разбор полетов с объяснением всех заданий.

Но для начала преамбула. За последние пару лет ХакКвест разросся и распух до таких размеров в плане крутости и количества заданий, что стал чересчур сложен для наших участников в рамках хаоса патиплейс. Так, в прошлом году победители одолели меньше половины всех заголовленных этапов. В то же время было жалко терять такое количество разнообразных головоломок и как следствие, ХакКвест "перезагрузился" спустя какое-то время в урезанном виде на сторонней площадке. Это было круто, но все-таки хотелось видеть победителей, прошедших все этапы конкурса непосредственно на патиплейс. И в этом году было принято решение упростить задания, заодно уменьшив их количество. По пессимистичным прикидкам прохождение всех этапов требовало максимум полдня расслабленного пентестинга, плюс поправка на возможные глюки оборудования, сети и так далее. Что получилось -- читайте ниже.

Всего этапов конкурса было семь: три веб-этапа и четыре инфраструктурных плюс один этап-шутка. Веб-часть (обход WAF) в этом году готовили ребята из Onsec , подробности они напишут в своем блоге. А я расскажу про инфраструктурные конкурсы.

Как обычно, воткнувшись в сеть, участники получали адреса из подсети 192.168.192/24. На машине с адресом 192.168.192.1 крутился вебсервер с информацией по конкурсам, статистикой и подсказками. Первым делом следовало отыскать сервер регистрации и зарегистрироваться в системе ввода флагов. Ничего нового в этом году с регистрацией придумывать не стали и искомый сервер можно было легко обнаружить по адресу 192.168.192.20 на высоком непривилегированном порту. Так как протокол работы сервера уже был известен по прошлым годам, почти все смогли зарегистрироваться без проблем.

Далее флаги можно было собирать следующим образом:

1. На машине 192.168.192.15 находим NFS-exported каталоги. Один из них был также доступен и по протоколу SMB -- это папка /var. Копаемся, находим x509-сертификаты и ключики в папке /var/db/backup/pki. Для чего же они? UDP-скан этого же хоста дает нам ответ: на порту 1194/udp обнаруживаем OpenVPN. Не у всех сразу получилось подключиться, хотя идея состояла в том, что /var/log/messages так же, очевидно, был доступен, а в конфиге сервера был включен дебаг. У кого подключиться получилось, попадали в новую сеть 172.16.172/24 и по адресу 172.16.172.1 могли найти sshd и вебсервер. Индекс веб-сервера (php-скрипт) требовал от участников некоего действия и писал что-то про "любовь к анонимусам". Правильное действие было -- сходить на сервер через проксю или просто добавить к запросу ручками X-Forwarded-For. Тогда скрипт отдавал искомый флаг. Вуаля.

2. Обследуя сеть дальше, на машине 192.168.192.20 можно было обнаружить веб-сервер на порту 443/tcp, который требовал клиентский SSL-сертификат. Тут все примитивно: надо было сгенерировать любой самоподписанный сертификат, в CN'е которого был бы прописан определенный адрес. Логика + брутфорс могли помочь понять, что искомый адрес -- cc11@cc.org.ru. При подключении с таким сертификатом сервер отдавал флаг.

3. Следующий веб-сервер можно было найти на машине 192.168.192.10. На нем лежал уязвимый скрипт с банальным RFI. Нюанс заключался в том, что апач находился в чруте, поэтому первое желание сделать file=../../../../../etc/passwd выдавало файл с паролями, но не тот. Уж не знаю, потратил ли кто-нибудь время на бесполезный брутфорс :) Поэтому апач сперва нужно было как-то вытащить из чрута. Для этого на одной из машин лежала подсказка со "схемой сети", где была отрисована некая связь между машиной с OpenVPN и вебсервером, а также указаны пользователи cc-chroot/cc-unchroot. Очевидно, что данные учетки необходимо было попробовать на машине 172.16.172.1, однако брутфорс их паролей приводил к получасовому блокированию хоста участника. Тут случился небольшой косяк, скрипт первое время не отрабатывал, поэтому какая-то команда все-таки натравила на хост брутфорсилку ;( Чего делать не было никакого смысла, так как пароли совпадали с логинами пользователей. У этих пользователей шеллом был прописан скрипт, который по ssh-ключу дергал апач а 192.168.192.10 и апчрутил его. Так что для вытаскивания апача из чрута необходимо было просто залогиниться на машину, подключившись по VPN. После этого можно было возвращаться к скрипту, получать файл паролей, по словарю перебрать хэш пользователя сс и, залогинившись на хост, взять флаг.

4. Это задание почему-то не выполнил никто, поэтому пришлось дублировать флаг в заданиях-подсказках. На одной из машин присутствовал анонимный ftp-сервер. При заходе на него с любой из машин о выдавал абсолютно пустой листинг. Кроме машины 192.168.192.10 ;) Если залогиниться с нее, можно было найти файл README с телом некоего крон-скрипта. Суть скрипта состояла в том, что он брал залитые на ftp файлы и выкладывал их в www-каталог. Так как аплоад был разрешен, нужно было всего лишь залить файл с определенным именем и в результате через веб становился доступен файл, в котором содержался флаг.

часть скрипта:

cp $UPLOADED_FILE /home/ftp/uploaded/ ; [ -f /home/ftp/uploaded/specialname ] && cp /root/keyfile /var/www/htdoc

5. Задания-подсказки появились в последние полдня, как ответ на трудности с решением штатных задач. Одной из подсказок стал выложенный plist-файл MacOS X в бинарном формате. Даже не имея под рукой Макоси, можно было легко нагуглить:

а) информацию о том, что plist это файл с настройками для OS X, который в старых версиях операционки был XML-формата, а затем переведен в бинарный для увеличения производительности. То есть, его НЕ надо нигде запускать.
б) конвертер binary2xml для plist-файлов на питоне

Итого, надо было всего-то конвертировать файл в XML и действовать согласно полученному текстовому файлу ;) Это было совсем просто и кто-то даже с этим справился.


Это все по инфраструктурной части. Просто, быстро, аккуратно. Мои поздравления победителям -- команде RDOT.ORG, которая выполнила все задания, хоть и с подсказками ;-)

Команда Хакзоны на СС'11:

Сеть: @katyavoid
Wall of Shame: @blacksecurity
Конкурсные задания (веб): @onsec_lab
Конкурсные задания (инфраструктура): @toxo4ka
Движок ХакКвеста: @oldayn
Общая организация и координация: @siur
Alt text

Цифровые следы - ваша слабость, и хакеры это знают.

Подпишитесь и узнайте, как их замести!

Anton Karpov

high-tech in low-life