Тропический анлим

В последние годы среди наших соотечественников стали крайне популярны путешествия в разные далекие страны. Вот и я не стал исключением, отправившись в конце прошлого года в Таиланд. Сам отдых, конечно же, проходил легко и беззаботно… Однако все омрачало одно большое «но» — интернет в отеле был крайне дорогой и отнюдь не безлимитный.

Тропический анлим

 

Завязка

Итак, оказавшись в одной из прекраснейших локаций Таиланда, я крайне удивился, когда на ресепшене отеля мне сказали, что коннект к их Wi-Fi-сетке стоит 900 бат (один бат примерно равен одному рублю) за шесть часов! Но так как я приехал не ругаться, а просто отдыхать от суеты повседневной жизни, то с миной сожаления на лице все-таки купил логин и пароль для доступа к интернету на эти пресловутые шесть часов. Инструкция по коннекту выглядела примерно так:

  1. Подключите ваш ноутбук или любое другое устройство к сети, доступной в вашем номере.
  2. Откройте ваш браузер и перейдите по адресу http://1.1.1.1.
  3. Введите ваши имя пользователя и пароль, откроется попап-окошко с вашим IP и обратным отсчетом оставшегося времени.
  4. После завершения работы в интернете выйдите из системы с помощью ссылки http://1.1.1.1/logout.php.

Как видишь, все банально и просто. Однако через два дня активного отдыха все время для честно приобретенных аутентификационных данных вышло. Дальше я решил купить еще одни логин и пароль, которые также очень быстро закончились. Тут меня одолела обида и злость на столь жадный отель, и я решил во что бы то ни стало выбить себе нормальный доступ в интернет :).

 

Что в сетке?

 

WARNING!

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

Первым делом я обратил внимание на приведенную выше инструкцию. Из нее были ясны по крайней мере две простые вещи: вся их система крутилась на php, а 1.1.1.1 — это основной сервер сетки отеля для аутентификации. Сначала стоило потестить форму авторизации на банальные SQL-инъекции вроде «1′ or 1=1 –», но, конечно же, сразу ничего не вышло. Дальше я решил оставить в покое эту самую форму и посканить аутентификационный сервер с помощью всем известного DirBuster’а. Каково же было мое удивление, когда спустя всего минуту после начала скана была найдена директория со скромным названием ./phpmyadmin! Быстренько перейдя с помощью браузера в эту директорию, я удивился еще больше, ведь версия phpMyAdmin за номером 3.3.2 была вполне хакабельной! Оставалось только найти нужный сплоит. Таковым оказался «phpMyAdmin < 3.3.10.2 & < 3.4.3.1 Session Serializer arbitrary PHP code execution exploit» от M4g’а. Для начала я просто проверил, действительно ли данная версия скрипта уязвима, настроив эксплойт следующим образом:

/*Settings*/
$pmaurl = 'http://1.1.1.1/phpmyadmin/'; //full PMA url
$payload = '<?php phpinfo(); ?>'; //PHP code to execute

После запуска всего этого непотребства на экран моего ноутбука вылез вполне корректный вывод информационной функции phpinfo(). Таким образом, все мои догадки подтвердились, и можно было действовать дальше!

 

Действуем

После небольшого вояжа по серверу я понял, что мне необходимы доступы к админкам и доступы к БД. Для нахождения оных я разведал, где на сервере находятся все файлы с префиксом config, и вывел их содержимое на экран вот так (сразу оговорюсь, доступных на запись директорий на тот момент я не нашел):

print htmlspecialchars(exec("cat ./3rd/phpsysinfo/config.php ./php/include/config.php ./php/lib/class/class.config.php ./php/templates/tpl.dev/admin/aaa/* ./php/wwwadmin/aaa/*"));

В одном из таких конфигов лежали данные для подключения к БД:

driver = mysql
host = localhost
port = 3306
name = authgw6
user = authgw6
pass = 3e930d569a

А также где-то тут находился и URL некой админки (http://1.1.1.1:8080).

 

Админка номер раз

Пошерстив немного по найденной базе с помощью все того же phpMyAdmin, я нашел табличку под названием admins c паролями в открытом виде :).

Таблица с администраторами

Взяв для примера самый очевидный логин admin с паролем P@ssword, я авторизовался в той самой админке. В ней были следующие секции:

  • Home;
  • Status;
  • Online session;
  • Network;
  • Firewall;
  • Radius config;
  • License;
  • Services;
  • Local account;
  • System.

Побродив немного по обнаруженной административной части, я понял, что ничего интересного она из себя не представляет. Единственным более или менее забавным разделом админки был «Online session» — здесь было видно всех авторизованных пользователей, причем любого из них можно было кикнуть из сети в любой момент с помощью соответствующей кнопки «Kick» :). Но я этого делать не стал и задумался над дальнейшими действиями.

Первая админка

Итак, найденная админка представляла собой всего лишь что-то типа настроек самого сервера или роутера. Однако я узнал, что вся сетевая инфраструктура отеля крутится на протоколе RADIUS (Remote Authentication in Dial-In User Service). Дальше я вспомнил о вышеупомянутых конфигах и о таких вот строчках в них:

88 system radiusqueuewait 1
89 system radiusqueuefailwait 1
90 system afterlogin_static_arp 1
91 gateway myip_url http://kkthai.com/myip.json.php
92 gateway myip_enable
93 license url  http://licensekey.kkthai.com/license.php
94 license customer_serial тут_номер
95 license customer_password тут_пассворд

Зайдя на сайт kkthai.com, я увидел, что эта тайская фирма является поставщиком различных RADIUS-решений для отелей, в частности «KKkthai LISG Hotspot Software». Здесь, конечно, было бы логичным зайти под известными мне логином и паролем в аккаунт моего отеля на их сайте, поискать исходники установленных программ, но я оставил этот вариант на потом. Из описаний на сайте KKthai я узнал самое главное — их продукт поставлялся в виде двух модулей: того, что я нашел (Core Gateway), и собственно биллинга. Он-то мне и был нужен!

 

Админка номер два

Теперь необходимо было найти биллинг. Для этого я сделал две вещи: зарядил DirBuster на произвольный брут по символам 0-9a-z_ и принялся с помощью сплоита для phpMyAdmin шерстить подконтрольный сервер (напоминаю, залиться мне так и не удалось, так что это выглядело не совсем тривиальной задачей). Вскоре работу DirBuster’а мне пришлось прервать, так как я встретил очень знакомое название в имени директории — lisg_v2. Там же находился и еще один конфиг БД:

<?php
$dbhost="localhost";
$dbusername="lisg";
$dbpassword="e4526a0f6e";
$dbname="lisg";

$logfile = '/var/log/lisg/lisg_v2.log'
?>

Дальше, натравив свой браузер на http://1.1.1.1/lisg_v2/, я увидел авторизационное окошко (кстати, посмотреть на демку биллинга ты сможешь по адресу www.kkthai.com/demo/). Введя в это окошко уже знакомые тебе данные admin; P@ssword, я очутился в администраторском аккаунте биллинга своего отеля :).

Вторая админка

Здесь разделы уже выглядели повеселее:

  • Admin User;
  • Generate Account;
  • User Manager;
  • Group Manager;
  • Database Misc.;
  • Refill Day;
  • MRTG Monitor;
  • Billing Report;
  • LAW Report;
  • On line User;
  • Log Out.

Побродив по биллингу и осознав свою всесильность (легко можно было создавать/удалять/редактировать юзеров, просматривать финансовые отчеты, редактировать «крутость» групп пользователей и так далее), я нашел ссылку на MySQL Squid Access Report 2.1.4 (http://1.1.1.1:8080/mysar/). Эта веселая софтина позволяла легко и просто искать по IP или MAC-адресу логи пользования интернетом постояльцев отеля. Причем эти логи представляли собой полный (!) подробный (!) отчет о том, на какую ссылку, когда и на какое время заходил юзер! И кто тут говорит о конфиденциальности пользовательской информации?!

Логи пользователей

 

Самое главное

Ладно, оставим логи и вспомним о моей основной цели — бесплатном интернете в отеле. Сначала я, естественно, попробовал добавить безлимитного пользователя через сам биллинг. Однако этот пользователь при просмотре списка юзеров (и в некоторых других списках тоже) находился на самом верху, так что администраторы системы вполне могли спалить непонятного анлимщика :). Удалив тестовый аккаунт, я отправился в phpMyAdmin с данными для аутентификации в БД биллинга. Успешно авторизовавшись и немного побродив по базе данных, я обратил внимание на табличку radcheck:

INSERT INTO 'radcheck' ('id', 'UserName', 'Attribute', 'op', 'Value', 'check_time') VALUES
(1, 'XXX', 'Password', '==', 'p@ssw0rd', 0),
(5, 'XXX', 'Password', '==', 'DgaXnu', 0),
(4, 'test1', 'Password', '==', '1234', 0),
(6, 'XXX', 'Password', '==', 'WqHaCA', 0),
(7, 'XXX', 'Password', '==', 'yAnjMW', 0),
...

Эта абракадабра до боли напоминала выданные мне ранее на ресепшене логин и пароль. Бинго!

Дальше я немного глубже поизучал эту табличку и понял, что безлимитные аккаунты в ней создаются путем замены значения «Password» в поле «Attribute» на значение «Expire-Disabled», а также путем подстановки какой-нибудь прошедшей даты в поле «check_time». Для незаметности я нашел где-то посередине (это важно, мой аккаунт тогда не был бы виден сразу ни в каких списках биллинга) таблицы старый просроченный аккаунт с «Password», изменил его имя, пароль и другие поля, описанные выше, и сохранил новый, проапгрейженный вариант пользователей в базу. 🙂

Бесплатный безлимитный интернет

 

Напутствие

Ну вот и все. Я достиг своей цели, получил бесплатный безлимитный интернет (который и так по дефолту должен быть во всех отелях) и тайно наказал за жадность админов моего резорта. Все оставшиеся дни отдыха я спокойно мог выходить в Сеть, не боясь, что часы на моем аккаунте внезапно закончатся. Надеюсь, что тебе понравилась эта история и ты вынесешь из нее какую-нибудь пользу. На этом разреши откланяться.

 

WWWW

DirBuster: bit.ly/oG5JW2;
phpMyAdmin < 3.3.10.2 & < 3.4.3.1 Session Serializer arbitrary PHP code execution exploit: bit.ly/Jiel2k;
немного про RADIUS: ru.wikipedia.org/wiki/RADIUS.

1 комментарий

  1. 12.01.2015 at 13:01

    Вопрос: Как вы запускали данный сплойт?
    Я никак разобраться с ним не могу

Оставить мнение

Check Also

Windows 10 против шифровальщиков. Как устроена защита в обновленной Windows 10

Этой осенью Windows 10 обновилась до версии 1709 с кодовым названием Fall Creators Update …