Путешествие в Onionland: взлом скрытого сервиса из даркнета в задании NeoQUEST-2016
Пока продолжается регистрация на питерскую «очную ставку» NeoQUEST-2016, посетить которую может любой желающий, мы продолжаем разбирать задания online-этапа.
И на очереди задание «Эти горькие луковые слёзы», в котором участникам предстояло взломать скрытый сервис, расположенный в даркнете Onionland. Доступ к таким сервисам возможен только через сеть Tor и только по имени, но в остальном они ничем не отличаются от обычных сайтов. Было два принципиально разных способа решения задания:
- поиск уязвимости «вручную»;
- настройка сканера веб-уязвимостей для работы с .onion-сайтами.
Разбор обоих способов — под катом!
Исходные данные
Участникам был дан адрес сайта cx7b2vy6foxjlzsh.onion и имя пользователя randomradon, чей пароль необходимо было достать.
Псевдо-домен верхнего уровня .onion указывает на то, что сайт находится в сети Tor. Для входа на такой сайт нужно использовать либо Tor Browser, либо сервисы вроде tor2web или onion.city. Так или иначе, попав на сайт, можно увидеть вот такую картину:
Тут мнения участников о том, что делать дальше, расходились. Кто-то искал уязвимость «вручную», кто-то использовал сканер веб-уязвимостей для работы с .onion-сайтами. Рассмотрим оба пути.
Способ 1 — ищем уязвимость «вручную»
Просмотр сайта не дает ничего интересного, кроме многочисленных указаний на то, что сайт находится в разработке. Это намекает на возможное наличие отладочных страниц. И действительно, попробовав различные стандартные названия, можно найти страницу test.html с какими-то формами.
Последняя форма отправляет запрос на сервер и содержит SQL-инъекцию (это можно обнаружить, например, оставив пустым поле ввода при отправке формы).
Дальше нужно понять, что же возвращает сервер. Простейший запрос показывает, что возвращается md5-хэш от единственного результата запроса:
0 AND 1=0 UNION SELECT 1; --
Следующим шагом является извлечение имеющихся баз данных. Очевидно, запрос вроде такого:
0 AND 1=0 UNION SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA LIMIT 1 OFFSET 0; --
не может извлечь названия, так как он возвращает хэш названия БД, а не само название. Это можно обойти, доставая названия по буквам с помощью функции SUBSTR () и определяя извлеченную букву по хэшу:
0 AND 1=0 UNION SELECT SUBSTR(SCHEMA_NAME, 1, 1) FROM INFORMATION_SCHEMA.SCHEMATA LIMIT 1 OFFSET 0; --
В базе данных находится три схемы:
- information_schema
- test
- torsite
Далее с помощью запросов вида
0 AND 1=0 UNION SELECT SUBSTR(TABLE_NAME, 1, 1) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA="TORSITE" LIMIT 1 OFFSET 0; --
можно получить таблицы в torsite (test была пустой):
- key
- message
- user
Затем аналогичным образом можно получить поля таблиц, увидеть, что пароли хранятся в таблице user, достать оттуда пароль пользователя randomradon (хранящийся в виде хэша) и обратить хэш (например, с помощью онлайн-сервисов или радужных таблиц).
Способ 2 — используем сканеры
Простейший способ найти уязвимость в сайте — воспользоваться сканером уязвимостей! А вот настроить сканер для работы со скрытыми сервисами Tor — не такая простая задача. Основная проблема состоит в том, что многие сканеры опираются на IP-адрес сайта. В сети Tor IP-адреса не используются, и сканеры работают некорректно.
Популярный сканер Nmap может быть настроен для работы в даркнете Tor. Для этого нужно сделать следующее:
- Скачать и установить специальную версию nmap-nseportscan-socks4a
- Добавить в файл hosts запись »127.0.0.1 cx7b2vy6foxjlzsh.onion», это позволяет избежать ошибки разрешения имени cx7b2vy6foxjlzsh.onion
- Скачать и запустить Tor
- Запустить nmap с правами root, используя следующие параметры:
sudo ./nmap -sK --script connectscan, --proxy socks4a://127.0.0.1:9050 cx7b2vy6foxjlzsh.onion –F
Nmap не находит уязвимостей, зато обнаруживает потенциально интересную тестовую страницу:
Изучив код страницы, в одном из скриптов можно найти запрос, который «упускает» Nmap:
Для исследования отдельного запроса удобнее использовать Sqlmap. Этот инструмент поддерживает работу с .onion-сайтами, никакая специальная настройка не нужна, запуск осуществляется командой:
python sqlmap.py -u «cx7b2vy6foxjlzsh.onion/qwertyqwerty.php» --data=«id=1» --tor --tor-port=9050 --tor-type=SOCKS5
Sqlmap обнаруживает SQLi уязвимость:
Далее при помощи Sqlmap можно вытащить всю необходимую информацию о базе данных:
Sqlmap получает данные несмотря на то, что они возвращаются в виде хэша. Невозможность прямого получения данных обходится с помощью техник Time-based blind SQLi и Boolean-based blind SQLi. Обе техники извлекают информацию посимвольно, значение символа находится бинарным поиском: каждым запросом очередной символ сравнивается с некоторым числом.
При использовании первой техники в запрос вставляется SLEEP () в случае выполнения условия; по времени, за которое приходит ответ на запрос, Sqlmap понимает, выполнилось условие или нет. При использовании второй техники Sqlmap сравнивает результат выполнения запроса с некоторым заранее полученным шаблоном и на основе этого определяет, было ли выполнено условие.
Time-based blind SQLi не подходит для использования в сети Tor из-за больших (и зачастую случайных) задержек; зато Boolean-based blind SQLi вполне работает. Символ за символом, Sqlmap «высасывает» базу данных.
To be continued
Обычно даркнет ассоциируется с таинственными, секретными сетями, темные углы которых кишат незаконной деятельностью: управлением ботнетами, продажей наркотиков и т. п. Такое представление не совсем верно, ведь нелегальный контент — вовсе не основное предназначение даркнета. Впрочем, нельзя отрицать наличие там действительно опасных скрытых сайтов и сервисов.
Все меньше заданий online-этапа остается разобрать, и все меньше остается времени до «очной ставки», в программе которой — множество докладов на самые разнообразные темы! Мы поговорим о безопасности Intel ME, о том, как найти ботов в социальных сетях, расскажем о незащищенности публичных беспроводных сетей, «залезем» в процессор, обсуждая Intel SGX и Intel MPX, расскажем, какие опасности поджидают «модников» — пользователей всевозможных «умных» гаджетов, и многое многое другое!