Содержание статьи
Теплым летним вечером мне пришло сообщение о том, что в одной радиокомпании проводиться кастинг интернет-диджеев
и приглашение принять в нем участие. Я и мой знакомый (который и прислал мне сообщение) пошли на этот кастинг ради денег, ведь 2-3 часа в эфире и общения по
icq за 400$ еще никакому студенту не повредили. Там
посмотрели наше поведение в эфире, дикцию...
В общем, мы не прошли ;). Разочарованные, мы удалились со студии восвояси. Несколько дней мы обсуждали фигов кастинг, слушали это радио и, как могли, находили минусы в работе новых диджеев. Вся фишка радиостанции, куда пробовались мы с друганом, заключалась в том, что DJ работает в режиме online, и общается (опять же
online) со слушателями через icq.
Для начала я зафлудил аську одного из диджеев (для флуда использовался небезызвестный
Imtale). В этот момент
кореш сумел заразить ПК одного из диджеев новым формграбером. Как только мы не стебались над диджеями... Даже звонили голосом Путина через
Skype в студию %). Но мне всего было мало, хотелось стать настоящим диджеем и порулить эфиром... И тут
мне пришла просто гениальная идея - захватить эфир (ведь для нас,
взломщиков, нет никаких преград, есть только препятствия)!
Действуя по довольно стандартному алгоритму, я запустил на удаленной машине nmap. Пока я варил кофе, сканер выдал свои
результаты:
(The 65432 ports scanned but not shown below are in state: closed)
Port State Service
80/tcp open http
199/tcp open SMUX
1022/tcp open ssh
8000/tcp
8001/tcp
8899/tcp
9015/tcp open http
Remote operating system guess: FreeBSD
Как видим, тачка незафаерволена, это, безусловно, плюс. Обдумав результаты сканирования, я загрузил данную радиостанцию у себя в винамп. Для того чтобы проигрывать потоковое аудио, лучшему в мире проигрывателю не требуется ничего, кроме файла listen.pls. Этот "чудо-файл" содержит в себе следующую информацию:
NumberOfEntries=1
File1=http://111.111.111.111:8000/
Теперь мне стало совершенно ясно, что под портом 8000 идет трансляция. Также в Winamp я узрел "MP3 Stream Info Box". Глянув внутрь этого файла ,
ты увидишь своеобразный отчет обо всем, что происходит на 8000 порту. Подумав, что винамп может многое
скрывать, ваш покорный слуга установил на удаленный дедик
SSS (Shadow Security Scaner) и просканил этот порт. Результат можете лицезреть сами:
ICY 200 OK
icy-notice1:
This stream requires Winamp
" target="_default">href="http://www.winamp.com/">Winamp
icy-notice2:SHOUTcast Distributed Network Audio Server/FreeBSD v1.9.7<BR>
icy-name:xxxxx.ru: DJ Z :: icq 11111111
icy-genre:Mix
icy-url:http://xxxxxx.ru
content-type:audio/mpeg
icy-pub:1
icy-br:32
Тут мы можем усмотреть ту же информацию, что и в Stream Info Box , но достаточно
расширенную. Как ты уже понял, под 8000 портом скрывается сервис под названием
SHOUTcast.
Именно на этом ПО крутилась радиостанция...
Версия SHOUTcast 1.9.7 была прочекана на
уязвимости. К сожалению, ничего существенного обнаружено не было. Дальше в окне браузера замелькала страница официального сайта
http://shoutcast.com/. Скачав себе нужные плагины и скрипты, я наскоро просмотрел их. В моей уставшей голове крутились мысли о том, как найти путь к сердцу радио-сервера. В
то время я просто-напросто хотел забить на взлом, так бы и сделал обычный скрипткидис... Но как ты понимаешь (ты ведь не танкист
;), если бы автор данного материала забил на взлом, ниже не было бы текста, да и вообще этой статьи.
На 80 порту сервера ничего не крутилось, точнее, крутился апач:
Apache/1.3.34 (Unix) mod_deflate/1.0.21 rus/PL30.22. Как ты
понимаешь, там ловить было нечего (если ты скажешь - КАК ЖЕ!!!, ведь есть сплоит, непременно стучи ко мне в icq, я приобрету этот сплоит
;). Как видно из отчетов nmap, на сервере крутился еще один http-сервис. Заменив
80 на 9015 порт, ваш покорный слуга перенесся на странную страницу. В этой html-паге был следующий текст:
HACK DETECTED, BAD REQUEST
CHAT DAEMON
EMAIL: 1@1.net
WWW: bla.bla.ru
Как видишь, я был послан на два слова : Hack
Detected. Скорее всего это был фейк, да и сердце согревало то, что в недра моего браузера был
вбит хороший анонимный прокс. Промаявшись без толку
еще полчаса, я решил,
что утро вечера мудренее ;))). Оказалось, что так оно и есть
;).
На следующий день первым делом я опять глянул отчеты SSS.
Немного пораскинув мозгами, я решил найти админку... Внутренний голос подсказывал -
админ управляет сервером через веб. И искать
надо, как мне подсказывало чутье, не на 80-м, а на 9015 порту. Поиск в гугл (site:ip_nashego_radio) ничего не дал. Ручками искать админку не хотелось. Как всегда, на помощь пришел любимый мною сканер
Nikto.
Прошло несколько минут, и я увидел то, что хотел - /adm/.
Зайдя по адресу http://111.111.111.111:9015/adm/ я и
обнаружил админку (УРА!). Как стало ясно - админка самописная. Но своими видом она мне чем-то напоминала webmin. В самом внизу красовался e-mail админа на yandex.ru.
Что делать дальше? Теперь мне было необходимо найти
брутфорс для админки. Либо брутить мыло на yandex через
Brutus и надеяться, что админ настолько туп, что юзает везде одинаковые пароли.
Да еще и http-порт был не 80, а 9015... Конечно, в такой ситуации можно использовать перенаправление и т.п. Но не лучше ли было найти хороший скрипт, в
котором можно было бы добавить свои параметры? Постукав в аське к знакомым,
я нашел скрипт следующего содержания:
#!/usr/bin/perl use MIME::Base64; use IO::Socket; use POSIX; $server="234.234.234.234"; $port="9015"; $dir="/admins"; $logfile="sucess.log"; $log="1.log" $words="passs.txt"; $user="admin"; $i=0; foreach $pass (@data) { $i++; chomp($pass); open(file, ">$log") or die print "$!\n"; $perc=($i*100)/$total; $perc=ceil($perc); print file "$perc\% Done\t$i of $total\t\tNow: $user\:$pass\n"; close file; $auth=encode_base64("$user\:$pass"); chomp($auth); $socket=IO::Socket::INET->new( PeerAddr =$server, PeerPort =$port, Photo =tcp) or die print "Unable to connect to $server:$port\n"; print $socket "GET $dir HTTP/1.1\n"; print $socket "Host: $server\n"; print $socket "Accept: */*\n"; print $socket "Referer: http://support.microsoft.com/\n"; print $socket "User-Agent: Internet Explorer 6.0\n"; print $socket "Pragma: no-cache\n"; print $socket "Cache-Control: no-cache\n"; print $socket "Authorization: Basic $auth\n"; print $socket "Connection: close\n\n"; $ans=<$socket>; if ($ans=~/200 Ok/i) { open(logf, ">>$logfile") or die print "$!\n"; print logf "$user:$pass is OK!!!\n"; close logf; exit 0; } }
Хочется сказать респект авторам данного детища. Добавив к скрипту словарь для брута, я запустил скрипт. Результат меня просто ошеломил! Пароль был подобран за 20 минут и был "мегапуперсложным" -
seksy!
Внутри сервера
В админке я получил нечто типа веб-шелла. Тут было даже выполнение команд. Проверив свои права, я понял, что мне дана группа
wheel. Действительно, зачем запускать апач и админку под www или
nobody... Однако скоро стало ясно, что просто так бастионы фряхи не рухнут.
Хотя и было видно, как админ наплевательски относится к своей работе - были замечены конфиги программ, какие-то скрипты, брошенные в корне, и т.п. Но если ОС
семейства BSD, то она даже под руководством неграмотного админа будет держаться очень долго - ведь ядро было из стабильной ветки.
Захват эфира!
Моих прав хватало на то, чтобы с лихвой перемещаться по каталогам и даже редактировать файлы. Скачав себе на машину идентичную версию SHOUTCast для FreeBSD, я стал разбираться со скриптами. Через 5 минут работы
я уже знал, что SHOUTcast все свои конфиденциальные данные хранит в файлике под названием sc_serv.ini. Открыв этот файл на сервере, я увидел следующее:
PortBase - порт, на котором будет работать сервер;
MaxUser - максимальное количество пользователей, одновременно слушающих вашу радиостанцию;
Password - пароль для удаленного администрирования (вот
это мне и было нужно).
Бережно записав пароль в блокнот, я начал
думать о замене потокового аудио. После
прочтения нескольких доков по этому вопросу через пару часов был найден оптимальный вариант.
Для удаленного администрирования и т.п. используется обычный
WinAMP, усиленный плагинами от SHOUcast. Поставить их и настроить у меня особого труда не вызвало - в конфигурации плагина
в поле Address указываем адрес компьютера, на котором установлен сервер. Если он находится на этом же ПК, то Localhost или 127.0.0.1. В моем случае туда вписал удаленный сервер. В полях Port и Password указываем то, что написано в sc_serv.ini на удаленном сервере. Вот, в принципе, и все, уже сейчас я мог без проблем подключиться в эфир и болтать всякую чухню. Но как охота, чтобы везде отражались заветные слова - Радиостанция захвачена внеземными цивилизациями...
Чтобы сотворить такое чудо, я проделал следующие действия.
В настройках плагина в закладке Input указывается то, что собираемся передавать в эфир. Если только музыку, то в выпадающем списке оставляем Winamp, в противном случае указываем Soundcard Input, при этом станут доступны следующие параметры и кнопки:
Open Mixer - открывает окно стандартного системного микшера;
Push to Talk - позволяет передавать в эфир голос с микрофона, не прерывая при этом музыку;
Lock - активирует "залипание" Push to Talk;
Music Level, BG Music Level, Mic Level, Fade Time - ползунки, задающие уровни громкости музыки, фоновой музыки при работе микрофона, громкости микрофона и скорость затухания...
В общем, все, что нужно. Коннектимся… И вот мы в эфире!
INFO
Как всегда, до особо горячих парней хочется донести ценную инфу - не шути с УК РФ,
с ним шутки плохи ;).