![](https://habrastorage.org/getpro/habr/upload_files/ca5/1d5/b7b/ca51d5b7b0ee02d1d8b88a7434777380.gif)
Форум Positive Hack Days 11, проходивший 18–19 мая 2022 года, был по-настоящему грандиозным. В конкурсе по взлому банкоматов борьба развернулась не на шутку — 49 участников, это очень круто! Призовой фонд в этом году составлял 50 000 рублей, его забрал человек с ником Igor, сломавший виртуальные машины первым. Кстати, его даже не было на мероприятии! :)
Помимо победителя, в этом году было награждено восемь человек, показавших хорошие результаты во время взлома виртуальных машин, а именно: drd0c, vient, vrazov, durcm, zxcvcxzas7, asg_krd, hundred303, drink_more_water_dude. Хотим поблагодарить всех участников, а для тех, кто не был на PHDays, приводим ссылки на виртуальные машины:
![Рисунок 1. Интерфейс банкомата Рисунок 1. Интерфейс банкомата](https://habrastorage.org/getpro/habr/upload_files/af1/1ad/325/af11ad32500bdbe8bfacbedea7dd936e.png)
Что касается задач, они были одинаковыми для двух разных виртуальных машин:
1) обход киоска (была решена 34 раза);
2) обход AppLocker (была решена 21 раз);
3) повышение привилегий до администратора (была решена 12 раз).
На диске C лежали несколько файлов: task_kiosk.exe, task_applocker.exe, task_escalation.exe, которые нужно было запустить, чтобы таск засчитался. Файл task_kiosk.exe был доступен к запуску сразу после обхода киоска, task_applocker.exe был заблокирован при помощи AppLocker, для запуска task_escalation.exe требовались права администратора.
Архитектурные решения в этом году позволяют нам отслеживать количество участников и решенные задачи через телеграм-бот, именно поэтому мы можем привести более подробную статистику (рисунок 2).
![Рисунок 2. Общее количество участников Рисунок 2. Общее количество участников](https://habrastorage.org/getpro/habr/upload_files/149/94e/271/14994e271ed1b619557c646d46ebbd55.png)
Разбор тасков
Следует отметить, что в этом году простор для действий участников был намного больше, и каждая задача на виртуальной машине имела большое количество решений. В прошлом году на обход киоска участникам потребовалось слишком много времени, и некоторые просто бросили это задание, не дойдя до конца. Изменения этого года принесли результаты, и мы получили очень интересные решения, не предусмотренные заложенным сценарием.
Ниже обзор решений представлен в общем виде, без ссылки на конкретные виртуальные машины. Участники с легкостью поймут, какое решение к какой машине подходит. Это сделано для того, чтобы у заинтересованных читателей статьи осталось пространство для решения наших задач.
Выход из режима киоска. Первый способ
Многие даже и не подозревали, насколько он был прост. Для выхода из режима киоска в одной из виртуальных машин нужно было воспользоваться правой кнопкой мыши. Удивительно, но участники не заметили, что правая кнопка мыши работает и, как в прошлом году, искали комбинации клавиш для выхода из режима киоска. Приложение киоска представляло собой веб-браузер, написанный на Delphi, поэтому полный сценарий обхода киоска выглядел так: правая кнопка мыши → Print → Find Printer (рисунок 3).
![Рисунок 3. Меню после нажатия правой кнопки мыши Рисунок 3. Меню после нажатия правой кнопки мыши](https://habrastorage.org/getpro/habr/upload_files/718/f4a/b39/718f4ab394d5d5295ff0e948b58ba01b.png)
Эти действия позволяли открыть файл explorer.exe и перейти к диску С для запуска task_kiosk.exe.
![Рисунок 4. Выполнение первого задания Рисунок 4. Выполнение первого задания](https://habrastorage.org/getpro/habr/upload_files/94b/082/93f/94b08293f488dcafcc60c103c45846be.png)
Выход из режима киоска. Второй способ
В другой виртуальной машине все было немного сложнее, так как правая кнопка мыши была запрещена вместе с основными клавишами. Для выхода из режима киоска был заложен сетевой вектор, требующий сканирования портов банкомата. После сканирования портов с помощью Nmap участники могли заметить, что на порту 80 расположен некий сервис. Самый простой способ узнать, что же там работает, — перейти по ссылке http://<atm_adress>:80. Для конкурса был специально написан веб-сервер, работающий на порту 80. На каждое подключение к нему пользователя он отдавал ошибку и открывал страницу справки в браузере на виртуальной машине.
![Рисунок 5. Демонстрация интерфейса Nmap Рисунок 5. Демонстрация интерфейса Nmap](https://habrastorage.org/getpro/habr/upload_files/8b3/336/b6f/8b3336b6fd4790315f26d3ae669583b7.png)
В моем случае IP банкомата был 192.168.56.102, и сканирование Nmap показало, что порт 80 открыт. После перехода в браузере по данному адресу появлялась такая ошибка, в которой нажатие на кнопку «OK» открывало браузер Internet Explorer.
![Рисунок 6. Заложенная ошибка Рисунок 6. Заложенная ошибка](https://habrastorage.org/getpro/habr/upload_files/ac7/eb1/7d2/ac7eb17d25b289dfefc29cb428836646.png)
![Рисунок 7. Демонстрация открытия браузера после нажатия на «ОК» Рисунок 7. Демонстрация открытия браузера после нажатия на «ОК»](https://habrastorage.org/getpro/habr/upload_files/b53/2ce/df4/b532cedf43c113617e4adfe9a1263fbb.png)
Выход из браузера во многом идентичен первому сценарию и может осуществляться через загрузки Internet Explorer.
Обход AppLocker. Первый способ
По неизвестным причинам сценарий, заложенный в одной из виртуальных машин, отказался работать в последний момент, за что мы просим прощения ????. Дело в том, что мы заметили это слишком поздно. Таким образом, участники искали несуществующий обход AppLocker и нашли много разных сценариев. Некоторые говорили, что для обхода AppLocker достаточно просто получить права администратора, а потом уже отключить его. Действительно, это один из вариантов прохождения, но изначально предусматривалось, что таски будут выполняться по порядку и запуск task_applocker.exe пройдет без привилегий администратора. Заложенный сценарий заключался в использовании LOLBin и изначально был описан здесь.
wlrmdr.exe -s 3600 -f 0 -t Click me! -m To run calculator -a 10 -u C:\task_applocker.exe
Приведенная выше команда в обход AppLocker должна была показывать уведомление, после клика на которое должен был запускаться task_applocker.exe, но почему-то этого не происходило, при этом предупреждение от AppLocker не появлялось.
![Рисунок 8. Демонстрация уведомления wlrmdr.exe (ключи в строке «Пуск») Рисунок 8. Демонстрация уведомления wlrmdr.exe (ключи в строке «Пуск»)](https://habrastorage.org/getpro/habr/upload_files/0ad/a97/344/0ada97344967001f2ee44ec198309178.png)
Обход AppLocker. Второй способ
Что касается второго обхода AppLocker, тут все работало нормально. Правилами проверялся хеш EXE-файла, поэтому обход был максимально простым (решение предложил hx0day).
Создаем пустой файл 0.txt и выполняем команду copy /b task_applocker.exe+0.txt notepad.exe, при этом мы получаем файл notepad.exe — по сути, копию task_applocker.exe c другим хешем. Запускаем его и получаем готовое решение.
![Рисунок 9. Выполнение task_applocker.exe Рисунок 9. Выполнение task_applocker.exe](https://habrastorage.org/getpro/habr/upload_files/004/9cd/7fa/0049cd7fa623c0de4ae494fcf1d1dd5f.png)
![Рисунок 10. Правила AppLocker Рисунок 10. Правила AppLocker](https://habrastorage.org/getpro/habr/upload_files/b2c/58d/274/b2c58d2740dae54da4683942bac6a616.png)
Повышение привилегий. Первый способ
Повысить привилегии в одной из виртуальных машин было достаточно просто. Сценарий заключался в поиске истории PowerShell. Часто администраторы, пользуясь данным ПО, забывают удалять историю введенных команд. История PowerShell, в свою очередь, доступна и без привилегий администратора, и оставленной там информацией могут воспользоваться хакеры. В нашем случае в одной из виртуальных машин в истории были оставлены логин и пароль администратора в открытом виде. Их можно было найти по следующему пути:
C:\Users\ATM\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadline\ConsoleHost_history.txt
![Рисунок 11. Логин и пароль администратора в открытом виде Рисунок 11. Логин и пароль администратора в открытом виде](https://habrastorage.org/getpro/habr/upload_files/f63/e47/03f/f63e4703f530ba5ceefe236ea98fcecb.png)
Повышение привилегий. Второй способ
Еще один способ повысить привилегии был максимально нестандартным и заключался в использовании команды runas и поиске ярлыка на рабочем столе администратора, открывающего интерпретатор командной строки с максимальными привилегиями. Данная команда позволяет запускать EXE-файлы с правами администратора. Дело в том, что некоторые аргументы команды, такие как /savecard, позволяют сохранить логин и пароль администратора и в дальнейшем запускать приложения уже без ввода этих данных.
runas /user:Admin /savecard cmd.exe
Однако и здесь есть нюансы: при выполнении следующей команды открывается консоль, и можно увидеть, что она запущена от имени администратора, но после более детальной проверки удается понять, что соответствующих прав все-таки нет. Тем не менее вместе с этим у нас появляется возможность перейти на рабочий стол администратора, где нужно запустить ярлык.
![Рисунок 12. Выполнение команды и запуск консоли от имени администратора Рисунок 12. Выполнение команды и запуск консоли от имени администратора](https://habrastorage.org/getpro/habr/upload_files/dc0/4ec/53e/dc04ec53ecf9d2dbf3e91742592cea49.png)
Делаем попытку запуска task_escalation.exe и видим следующую ошибку:
![Рисунок 13. Отсутствие прав администратора Рисунок 13. Отсутствие прав администратора](https://habrastorage.org/getpro/habr/upload_files/c93/adf/7da/c93adf7da62ca4ae19a0588dbe232c4f.png)
Далее запускаем ярлык aministrator_cmd.lnk, расположенный по пути C:\Users\Admin\Desktop.
![Рисунок 14. Запуск консоли Рисунок 14. Запуск консоли](https://habrastorage.org/getpro/habr/upload_files/08d/9eb/f41/08d9ebf4103418a267a2059608321ef0.png)
После этого можно уже с полными правами администратора запускать task_escalation.exe, чтобы наконец пройти этот таск.
![Рисунок 15. Запуск task_escalation.exe Рисунок 15. Запуск task_escalation.exe](https://habrastorage.org/getpro/habr/upload_files/ea4/523/3a1/ea45233a1972480926589e0e0504eecb.png)
Дополнительные задания
Теперь разберем дополнительные задания. Напомним, что интерфейс банкомата являлся веб-страницей, расположенной по адресу http://bank.paymentvillage.org. Он доступен и сейчас. Задания выделены в категорию дополнительных, потому что имеют косвенное отношение к банкомату и заключаются в поиске классических веб-уязвимостей. Для удобства и упрощения взлома в число ошибок были включены ошибки PHP.
![Рисунок 16. Ошибка PHP Рисунок 16. Ошибка PHP](https://habrastorage.org/getpro/habr/upload_files/872/bf4/5b9/872bf45b9193b641e2bc82974c0cd2b9.png)
Всего несколько человек попытались сломать кабинет банкомата, и мы получили репорты по заложенным сценариям. Первая уязвимость, которая была найдена участником vient, — Path Traversal. Мы с радостью подарили ему футболку.
![Рисунок 17. Исходный код страницы index.php Рисунок 17. Исходный код страницы index.php](https://habrastorage.org/getpro/habr/upload_files/448/f97/b29/448f97b291d54a45f00139574a5a76af.png)
curl --path-as-is http://bank.paymentvillage.org/favicon.ico/../index.php
Для просмотра исходного кода нужно было выполнить указанную выше команду.
Кстати, ошибка, показанная на рис. 16, могла натолкнуть участников на еще одну заложенную уязвимость, но, к сожалению, ее никто так и не нашел. Дело в том, что код банкомата, написанный на Delphi, постоянно считывал файл С:\Atm\atmkey.txt. В этом файле хранился atmkey — уникальный идентификатор банкомата, по которому мы могли отслеживать выполнения тасков. Далее atmkey подставлялся автоматически в каждый запрос в виде заголовка ATM, и с ним проходила авторизация в банкомате. Этот заголовок нужен в числе прочего для того, чтобы можно было выдавать деньги на конкретном банкомате (виртуальной машине). В итоге self-xss можно было эксплуатировать, передав вредоносный JS-код в заголовке ATM.
![Рисунок 18. Демонстрация отправки запроса Рисунок 18. Демонстрация отправки запроса](https://habrastorage.org/getpro/habr/upload_files/e02/25d/48e/e0225d48eb3ec2e88cd2730dcbb36390.png)
Следующую уязвимость тоже никто не обнаружил, хотя ее можно было найти очень легко, всего лишь изменив содержимое файла С:\Atm\atmkey.txt. Для этого не нужно даже было использовать средства, позволяющие проводить MITM-атаки. Вот так это выглядит:
![Рисунок 19. Эксплуатация XSS Рисунок 19. Эксплуатация XSS](https://habrastorage.org/getpro/habr/upload_files/e4f/cc1/50f/e4fcc150fef4401efe64ad3bb3ae021f.png)
В этом году в заложенных сценариях также присутствовал ARP Spoofing, в анализ которого мы не будем углубляться, поскольку пример такой атаки был описан ранее. Суть заключалась в том, что участникам необходимо было подделать ответ http://bank.paymentvillage.org/payout?atmid=<your_atm_id> для того, чтобы на второй виртуальной машине запустилось приложение C:\Atm\payout.exe, имитирующее выдачу денег. Банкомат каждые 5 секунд обращается к этому адресу и ждет ответа true для начала выдачи денег.
Помимо этого, конечно, в сценариях присутствуют уязвимости, которые хочется оставить в секрете, чтобы сохранить интригу.
Выводы
В этом году заложенные сценарии оказались очень простыми для участников. Многие успели хорошо подготовиться. Видимо, статья прошлого года сыграла свою роль :)
Мы поняли, что нужно искать баланс сложности, и сделали определенные выводы, которые реализуем в следующем году. В то же время многие участники и не осознавали настоящий масштаб конкурса и выполняли только основные таски.
Участникам были отправлены грамоты, и уже есть первые отзывы. Надеемся, что на момент публикации этой статьи все получили свои призы. C разрешения одного из участников (спасибо за отзыв, durcm!) публикуем фотографию с грамотой.
![](https://habrastorage.org/getpro/habr/upload_files/52c/4ca/718/52c4ca7183818d42c7261fc648fe7f76.png)
Еще хочется сказать огромное спасибо нашим международным участникам, в частности Boschko. Он уже несколько лет делится прохождениями наших виртуалок со своими читателями:
Больше информации о Payment Village ищите в Telegram. До скорой встречи! :)
Автор: @yurasikhacker