Разбор заданий конкурса «Конкурентная разведка» на PHDays V
08.07.2015
В этом году в «Конкурентную разведку» играли не только традиционные любители конкурса, но и команды CTF, поэтому по уровню сложности задания были подобраны для тех и для других. Кроме того, разрешена была командная игра. (Но один человек не мог играть и в индивидуальном зачете, и за команду CTF, поэтому нам пришлось по взаимному согласию дисквалифицировать участника, занявшего по очкам 1-е место — azrael.)
Под общей легендой государства United States of Soviet Unions были объединены все конкурсы, и в рамках «Конкурентной разведки» участникам пришлось искать информацию о служащих разных компаний, «прописанных» в USSU. Параллельно можно было отвечать на пять разных вопросов о пяти разных организациях; внутри одного блока вопросы открывались друг за другом, по мере получения ответов. (Одна команда нашла ответ методом перебора, но на следующий вопрос они так и не смогли ответить — у них не было на руках необходимых ресурсов).
1. Find out dinner location of Bank of Snatch (snatch-bank.phdays.com)’s Chairman/Get any info you can on him.
В данной группе вопросов нужно было найти информацию о председателе правления Bank of Snatch.
1.1. Get his email address
Начать нужно с малого — выведать email председателя правления. Гугл давно постарался за нас — закэшировал несколько страниц snatch-bank.phdays.com, в том числе документ с отчетностью банка.
В метатегах этого документа ясно видно, что у пользователя Aldora Jacinta Artino почта a_j.artino.bank@ussu-gov.org. А это значит, что у председателя Zenon Pavlos Economides почта должна быть z_p.economides.bank@ussu-gov.org.
Правильных ответов: 47.
1.2. What is his domain account? (format: user:password)
Теперь задача усложнилась: нужно достать доменную учетку — имя и пароль. Но для тех, кто играет в конкурентную разведку регулярно, эта задача была не слишком сложной. Ведь если отправить письмо по адресу, найденному на предыдущем шаге, то придет недвусмысленный намек на то, что человек с ним ознакомился. А значит, можно попробовать подсунуть ему ссылку в письме.
Примечание: браузер председателя правления блокировал всякие нестандартные для веба порты вроде 1337, поэтому лучше было использовать традиционные 80 или 8080.
Отловив запрос, можно выяснить что почтовый ресурс отсылает в запросах заголовок Referer, а из него можно вытащить логин и пароль почтовой учетки: zenontrapeza:zenon123.
Правильных ответов: 17
1.3. Finally, find out the dinner place.
Ну и наконец-то нужно узнать, где же обедает председатель правления. Ко всему прочему теперь мы знаем псевдоним председателя – zenontrapeza. Можно снова использовать Google. За 2 клика можно выяснить аккаунт председателя в FB, а там выясняется что он любит постоянно пользоваться каким-то трекером.
Только вот трекер работает как-то неправильно. И за несколько нехитрых манипуляций с url и id можно было получить доступ к трек-файлу Pavlos: http://sport.phdays.com/account/1045/
http://sport.phdays.com/achive/1045
http://sport.phdays.com/img/1045
http://sport.phdays.com/img/1
который отдавал ошибку, по которой можно было найти финальный URL - http://sport.phdays.com/kmls/track.kml?id=1045
В итоге получаем искомый трек. Следующая проблема: в нем записаны не координаты GPS, а идентификатор базовой станции сотового оператора. Ноу проблем! Ведь есть замечательный ресурс opencellid.org, который позволяет найти координаты конкретной базовой станции по всему миру.
Выяснив координаты базовых станций и определив интервал обеда (исключив воскресенье), можно было на том же opencellid найти название ресторана: Boston Seafood&Bar
Правильных ответов: 12
2. Get intel on MiTM Mobile (mitm-mobile.phdays.com) marketing director.
В этой группе вопросов необходимо было собрать информацию о директоре по маркетингу мобильного оператора MiTM Mobile.
2.1. We have network capture from the director's laptop (https://mega.co.nz/#!34IEGYZa!Xowwo-UFTWMIfqfmiSPQXMWY0F7mySb-WtIxB3SVXWQ). Can you find out where he received medical treatment?
Где же проходил лечение директор по маркетингу? Дамп трафика позволял выяснить не только доменный логин одного из сотрудников Positive Technologies, но и запрос к поисковой машине USSU. А судя по баннеру и параметрам Cookies на http://ussu.phdays.com/search.php, поисковая система использует те же механизмы токенов utmz, как в Google. И если подставить эти значения в запрос к search.php, то высветится «контекстная реклама» об одной клинике. Что это за клиника — можно узнать, выполнив поиск по изображениям (отсеяв все лишнее, так как нужно было абсолютно идентичное изображение) или еще проще — выполнив поиск по номеру телефона с изображения. Правильный ответ: Rayville Recovery.
Правильных ответов: 13
2.2. Ok, now we know his email account. It is l_u.imbesi@ussu-gov.org - we need access (give us email password).
Теперь нам известен email директора, но недостает пароля. Файлы robots.txt иногда просто кладезь уязвимых сценариев, которые нужно держать подальше, но не от поисковиков, а от хакеров. Так и тут: есть ссылка на бажный сценарий восстановления пароля от почты restore.php. Если вызвать сброс пароля в дебажном режиме — debug=On, то мы сможем узнать, что email посылаются через обращение на сервер на 25 порт. А вот имя сервера берется прямо из заголовка Host.
Значит, если повесить на 25 порт netcat и отправить запрос с указанием в заголовке Host своего IP-адреса или доменного имени, то на 25 порт придет письмо с указанием текущего пароля (AQwr34%!9R^).
Бонус: можно было зайти в почту и в черновиках обнаружить инсайдерскую информацию. О том, что с 10:30 утра смски становятся дешевле, а это значит что в это время ожидается рост акций MiTM Mobile.
Правильных ответов: 4
2.3. We need to find something to blackmail him
К сожалению, с этим заданием никто не справился. Где же искать повод для шантажа человека, как не в его аккаунте Google? Почтовая жизнь там не очень насыщена, а вот история поисковых запросов выдает человека с головой:
Оказывается, с алкоголя директор по маркетингу пересел на кокаин... ай-ай-ай, как нехорошо! Правильный ответ: cocaine
Правильных ответов: 0
2.4. Some competitors with gov support also want him in jail. Who is it?
До этого технически сложного задания также никто не смог дойти — потому что сперва нужно было пройти предыдущее. Из прошлого задания видно, что еще директор регулярно пытается найти годовые отчеты некой компании Whoever, которая располагается на домене whoever.phdays.com. Далее все просто:
1. Находим robots.txt и по нему узнаем, что есть api.php. 2. По-разному тыкаем api.php, по ошибкам угадываем параметры. Понимаем, что есть XXE и сливаем сорцы. 3. По сорцам видим что в api.php есть unserialize, который позволит провести INSERT SQL-inj. 4. Правильно заинсертившись в таблицу, вызываем unserialize через index.php (данные из базы идут в unserialize) и получаем наконец RCE. 5. В /home можно было найти email владельца Whoever - wh0wh0wh0ever@gmail.com
Правильных ответов: 0
3. This time prepare the big guns. You are required to get info on the presidential administration (ussu.phdays.com)
В этой группе придется добывать информацию об администрации президента хорошо известными в народе способами.
3.1. Crawl all administration emails in order from a to z (format: ,,, ...)
Ну, для начала совсем несложно: всего лишь найти информацию обо всех email администрации. Заходим на ussu.phdays.com/contacts.php.
И видим, что есть алиас administration@ussu-gov.org for general requests. А еще в государственном аппарате есть дополнительный MX-сервер.
И, видимо, государство совсем не заботится о безопасности своих сотрудников, раз всего в два запроса можно было получить все email группы administration:
Правильный ответ: a_o.bozhidara@ussu-gov.org,d_b.bertil@ussu-gov.org,j_l.andrus@ussu-gov.org,j_t.zlata@ussu-gov.org
Правильных ответов: 19
3.2. Get all passwords, emails in order from a to z (format: :,:,:, ...)
Ну, теперь одними запросами в Google не обойтись. Sitemap.xml говорит нам, что есть файл http://ussu.phdays.com/_logs/access.log. Немного изучив его, можно найти следующие интересные запросы:
GET /auth.php?action=getToken&id=26080&email=%61%5f%6f%2e%62%6f%7a%68%69%
64%61%72%61%40%75%73%73%75%2d%67%6f%76%2e%6f%72%67 GET/auth.php?action=checkToken&token=EShDVGIWwZSjS5I5BQbpDyWRNoFUzBOWNygG8j%
2FYpbpZl7sGymRScloK%2Fddq9a6%2FAaSTXZedUHTkhONlvfd2kvB63E%
2B6iqSjecSaQMRyQw1vzs5otj3%2BmP%2Fp%2BS1Xil%2BVqn7GZJPLgsgcXy4cLtcCsw%3D%3D
Похоже, что сотрудник администрации президента сначала получает какой-то токен, а потом валидирует его. Если посмотреть на процесс валидации, то окажется, что он уязвим к старым добрым атакам Padding Oracle, а это значит, что токен можно расшифровать за небольшое количество запросов.
Отправив всего 256 запросов, с вероятностью 99% утверждаем, что реализацию алгоритма можно атаковать. А примерно за 10 000 запросов можно полностью расшифровать токен. Но столько запросов и не нужно, ведь пароль располагался в самом конце, а значит расшифровывался первым.
Ну хорошо, пароль одного пользователя мы расшифровали, а дальше? Подставляя email-ы из предыдущего задания и перебирая последовательно id, мы получим все 4 токена всех пользователей.
Ну, а зайдя в одну из почт через Google, можно было сразу же найти в спаме письмо с очередным инсайдом про движение акций компаний:
Ответ: a_o.bozhidara@ussu-gov.org:zhi37@1!,d_b.bertil@ussu-gov.org:bertiB3rt!,j_l.andrus@ussu-gov.org:Andrus331,j_t.zlata@ussu-gov.org:aata4444
Правильных ответов: 6
Тем, кто хочет разобраться в атаках на Oracle, предлагаем почитать статью
Слайды о том, как защищать свои приложения от этой и других атак:
3.3. Hack into Mac OSX of Administration secretary and give us # of document, printed for president 14/05/2015
Ну вот и пошел в ход анонимный интернационал. Сломать Mac OS секретаря — дело нехитрое. Особенно если секретарь в ответ на письма в подписи оставляет улики, любит в репозиториях хранить важные архивы и использует одинаковые пароли.
Берем Chainbreaker для Win32 и расшифровываем keychain из репозитория с помощью пароля от почты. Номер документа #125_42-19.501
Помимо прочего из этого архива можно узнать, что «Promising quarterly reports for Choo Choo Roads (CHOO), Hacknetcom (HCKNT) and MiTM Mobile (MITM)» будут опубликованы 27 мая в 11 утра.
Правильных ответов: 3
3.4. Now we need to get this document. Give us project name, mentioned in them.
Пришло время еще раз порыться в ресурсах администрации. Если воспользоваться подсказкой и авторизоваться за пользователя d_b.bertil@ussu-gov.org в Google Cloud Printers https://www.google.com/cloudprint будет один интересный адрес с анонимным доступом по FTP. А там и необходимый документ среди сотен других с упоминанием проекта Omnieye.
Там же можно было ознакомиться с другими неожиданными сведениями о будущем курсе акций и «Черном четверге».
Правильных ответов: 0
3.5. Finally, break into an iPhone of one of the administration employees. There was some secret meeting in April. Where?
Дойти до этого задания участники не смогли, иначе им, возможно, удалось бы восстановить доступ к icloud.com по email, паролю и токену сброса двухфакторной аутентификации, который можно было найти, порывшись в почте j_l.andrus@ussu-gov.org. Далее необходимо было найти заметку про встречу в McDonalds pushkin square.
Правильных ответов: 0
4. We need proof that Positive Times (ptimes.phdays.com) is controlled by government
Участникам необходимо было собрать доказательства того, что медиакомпания Positive Times давно находится по контролем правительства USSU.
4.1. Get journalist's (w_j.dom@ussu-gov.org) mobile number - he is rat. Tip: he always use two accounts for privacy in social networks. (format, no delimiters: +7xxxxxxxxx#xxxxxxx)
Начинаем с легкого задания — достать номер телефона журналиста, у которого наблюдается расчетверение личности: сразу по два аккаунта на VK.com и FB.com. Первую учетку можно найти по восстановлению пароля на fb.com.
Вторую — на vk.com, по одинаковому имени и фамилии в списках тех, кто лайкал ptimes.phdays.com
И тут как раз видно, что единственный, кто ставит лайки, это некто со страницы https://vk.com/id304632346. Тут уже можно разглядеть первую часть сотового телефона и email.
А если теперь по этому email снова попробовать восстановить учетную запись на FB, то парень-то окажется тем же самым.
Ну и теперь, найдя его учетку по email в FB и заглянув в Details, можно обнаружить недостающие части телефона. Правильный ответ: +79652843472#317
Примечание: «добавочный» пришлось использовать как защиту от брутфорса.
Правильных ответов: 34
4.2. Get access to the publishing engine of Positive Times. Give us user and password. (format: :)
Теперь нужно получить доступ к админке портала Positive Times. Только вот незадача: мы нашли в sitemap.xml список email, на которые отправляются пароли для сброса (это файл sentemails.log), мы можем получить письмо с токеном сброса и сбросить пароль, используя публичный ящик из этого списка ptimes-registration@mailinator.com, — но прав у этой учетной записи не хватает для доступа в админку. И правда, где это видано, чтобы какой-то малопонятный ящик использовался для админских прав!
А вот если присмотреться внимательно к процессу сброса пароля, то окажется, что на последнем этапе система снова проверяет email.
А зачем? И что, если поменять email на более привилегированный из sentemails.log, скажем на ptimes@ussu-gov.org? Вот тогда-то на Mailinator придет письмо с правильным паролем, — и можно будет ответить на вопрос, а заодно получить доступ к админке с учеткой ptimes@ussu-gov.org:Pt1M3P@ss. В админке можно было сделать две вещи — узнать, что налоги вырастут и что государство уже выделило приоритетные для себя компании.
Помимо инсайдерской информации этот интерфейс давал возможность поменять вторую новость (чтобы публикация сыграла на руку тому, кто играет против рынка). Тогда мы бы опубликовали ее в 11:30 во второй день конкурса. Однако, либо таких находчивых не нашлось, либо поддельная новость оказалась похороненной под тысячами бесполезны запросов, отправленных в попытках эксплуатировать несуществующие XSS и SQLi.
Правильных ответов: 13
4.3. Get access to email account of another corrupt journalist with email mediagov@ussu-gov.org. Give us his password.
Для решения этой задачи нужно было заметить наличие формы http://ptimes.phdays.com/feedback.php и с помощью подсказок из Google понять, что при обратной связи можно как-то грузить файлы в папку feedbackupload. А раскомментировав поле для загрузки файлов в форме и загрузив туда пустой файл .htaccess, можно было получить листинг директории feedbackupload на целых 5 минут.
Тогда можно было бы найти в директории файл uploaded-13-05-2015.docx за авторством mediagov@ussu-gov.org, обнаружить, что изображения в нем взяты по адресу https://188.166.78.21:443/. А далее, следуя подсказке про MSF, воспользоваться эксплойтом для Heartbleed из сборки Metasploit (работало еще несколько вариантов эксплойта, но не все) по этому адресу и получить в «дампе памяти» пароль пользователя:
И не забывайте: https://www.acunetix.com/websitesecurity/Why-File-Upload-Forms-are-a-Major-Security-Threat.pdf.
А пароль был: P@S$W0_PD
Правильных ответов: 1
4.4. We found PositiveLeaks - group of hackers.They may help us in our business. Find his owner's name for us.
А вот и ~~Викиликс~~ энтузиасты, которые тоже копают под PositiveLeaks. Судя по названию группировки, они должны располагаться на pleaks.phdays.com. А еще с помощью такого запроса:
POST /userPage HTTP/1.1
Host: pleaks.phdays.com Cookie: PHPSESSID=rr47fgk7e2rckklqj5kgl4f6k5 Content-Type: multipart/form-data; boundary=---------------------------214580240818081871851160929598 Content-Length: 376
-----------------------------214580240818081871851160929598
Content-Disposition: form-data; name="template"
123%' union select null,null,text as content from templates where '1%'='1 -----------------------------214580240818081871851160929598
Content-Disposition: form-data; name="action"
createTemplate -----------------------------214580240818081871851160929598--
можно было получить доступ к шаблонами новостей на сайте и узнать не только ответ на вопрос (Boris_The_Emperor), но и очередной инсайд ;)
Правильных ответов: 0
5. Stock Exchange financial director was incriminate, but there were no evidence. Help to het him jailed.
Ну и в последней группе требовалось помочь свершиться правосудию и посадить директора биржи за решетку.
5.1. His name Prabhat SAVITR. First, we need to find what gov got to him. Find us case ID.
Знакомое задание для тех, кто регулярно играет в конкурентную разведку. У нас есть зависимость между идентификаторами дел и id фотографий и есть id фотографии нужного нам парня — благодаря листингу директорий.
В этот раз к md5(id) добавилась соль: ее нетрудно выяснить по публичным базам md5 — Chipp37
Значит, у нашего финдира должен быть case-id=md5(Chipp371337)= 8bc875dbed7b0ecd966bed3c8ec750fa
Правильных ответов: 39
5.2. There was no evidence that the financial director was at the crime scene. We can blackmail him if we know deviceid and iccid of his phone and SIM. Get them for us (format deviceid;iccid)
DeviceId очень просто узнается из документов дела, его можно скачать, введя идентификатор с прошлого задания в форму http://ussu.phdays.com/getdocument.php. А вот чтобы узнать iccid, нужно было искать в Google подстроку от deviceid. Правильный ответ: a94360c365ab38810639911d355103c86367d5ba;897019903020414671
Правильных ответов: 3
5.3. Where is director hiding now? We need to know city.
К сожалению, до этого задания дошли уже в самом конце второго дня и пройти его не удалось никому, однако одна из команд нашла правильный ответ перебором. В реальности необходимо было с помощью XSS проникнуть в DOM страницы, на которой постоянно висит финдир (входные данные стали известны после предыдущего задания). Далее нужно было из логов понять, что директор пользуется интернетом через 3G-модем загадочной фирмы OiWei. И получить доступ к веб-страницам этого модема, находящегося на 192.168.44.1 благодаря отсылаемым с модема заголовкам Access-Control-Allow-Origin: *. Это позволило бы снова похитить cellid и прочие данные для определения местоположения директора: Hamilton
Правильных ответов: 1
5.4. As you know now, Stock Exchange have a backdoor for Executives. Give us private key (Private-MAC for prove would be enough)
Помимо местоположения, из модема можно было вытянуть адрес бэкэнда биржи. Мы надеялись, что этого хватит участникам для того, чтобы проэксплуатировать 0 day в PHP, для того чтобы в обход openbasedir прочитать содержимое ключа из папки /home. Но увы...
Правильных ответов: 0
Резюме
51 участник не смог ответить ни на один вопрос.
Первое место в конкурсе занял djecka — он первым ответил на 9 вопросов.
Больше всех на этом конкурсе заработала команда rdot, ответив на 12 вопросов.