Skip to main content

Учим провайдера пинговать

By 25 июля 20149 марта, 2016Blog

Привет %username%.

Некоторое время назад была найдена прикольная бага на сайте Ростелекома, а именно произвольное выполнение команд операционной системы. На одном из сайтов провайдера была такая штука как ping и traceroute удаленного узла, но не фильтровались юзерские данные. Ну не сложилось у ростелекома с пингом, не на роутерах, не на сайтах.

Взлом ростелеком

Как эта хрень работает? А просто php скрипт выполняет команду ping $сайт и выводит ответ на страницу. Но дело в том, что вместо команды можно записать список команд.

Список команд — это последовательность команд, разделенных точками с запятой ; , амперсандами & , символами «и-если» && или «или-если» || .

Как раз точка с запятой вызывает последовательное выполнение предыдущей команды. Поэтому если указать в качестве сайта ya.ru;echo 123 — выполнятся две команды, пропингуется яндекс и выведется число 123.
Вот, можешь даже глянуть небольшой видос.

Таким образом пара команд, а именно ls -l, чтобы показать листинг директорий и файлов (и права на них), и echo "злой-злой-код" >> /tmp/shell.php, чтобы записать шелл в доступный для записи каталог. А каталогов там было несколько, tmp, font и i.

Знай свои права

Знай свои права

А это ещё один минус, неправильные права от пользователя daemon. Вот зачем скрипту, который делает пинг, возможность записи файлов?)
Ну поржали, а багу что-то не фиксят и не фиксят. Я писал в службу поддержки, создавал обращение, писал на support по почте, а реакции (тем более ответа) нет… В итоге я залил шелл, нашел админов в базе данных (баз было много), написал им на почту. Тишина. Ну что делать, нужно исправлять.
Теперь нужно было найти уязвимый код, почему-то я думал что там будет system() или exec(), а оказалось, что зло таилось в функции popen().

$ip = $_POST['ip'];
if (isset($_POST['tracert'])) {
$cmd = '/bin/traceroute';
}
if (!empty($cmd)) {
$f = popen("$cmd $ip", 'r');
while (!feof($f)) {
$buf .= fgets($f);
}
pclose($f);
}

Но вот незадача, редактировать-то нельзя! В руках у нас web-shell, linux с ядром 2.6.9 и уязвимый скрипт. Что будем делать?
А будем повышать привилегии. Благо версия kernel’а стара как смерть и под нее много различных эксплойтов.

searchsploit, а найди-ка мне эксплойты

searchsploit, а найди-ка мне эксплойты

В итоге я поместил сплойт, который имел расширение *.c в папку /tmp/ и скомпилировал его командой
gcc sploit.c -o exploit
где sploit.c имя входного файла, а exploit — выходного. Теперь, чтобы запустить его достаточно выполнить ./sploit, что я и сделал. И у меня нахрен всё повисло.

Эксплойт на повышение привилегий

Эксплойт на повышение привилегий

Возможно, это из-за криворукости, но сплойт повис, пришлось убить его и попробовать другой. Другой не захотел компилироваться (возможно там были намеренные ошибки, даже не смотрел), другой не захотел работать, в итоге был найден тот самый, который дал мне права root и я удалил все к херам исправил уязвимость отфильтровав эти спецсимволы. Потом я в базе нашёл чувака среди админов, чья почта была на mail.ru, узнал его имя и дату рождения, нашёл в vk.com, постучался в личку, мы чутка пообщались и шелл был удалён. А опыт остался 😉
Такой вот пятничный пост, %username%. Не болей!

Join the discussion 10 комментариев

  • закачал бы базу,А потом исправил бы 🙁 добрый хакер блин

  • lagun4ik:

    Крут, че

  • подобная бага была в прошивке асуского роутера, а так крут.
    http://savepic.net/6000945.jpg

  • njn cfvsq:

    Рисковый парень, однако. Могли ведь и статью повесить, не?

  • Valya:

    в очередной раз поражаюсь тебе.

  • Иван:

    исправил уязвимость отфильтровав эти спецсимволы. Потом я в базе нашёл чувака среди админов, чья почта была на mail.ru, узнал его имя и дату рождения, нашёл в vk.com, постучался в личку, мы чутка пообщались и шелл был удалён

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

  • Иван:

    нахуй тогда этот блог читать, расходимся.

  • Слава:

    Какой адрес использовался для связи? Когда то писал им на [email protected] (адрес со страницы http://www.rostelecom.ru/contacts/) — ни одного ответа.
    Также есть валидные адреса, которые не заявлены на странице сайта, но работают: [email protected] и [email protected].

    Сообщения об xss и SQL-инъекциях проигнорировали.

    А на сообщение о возможности получения содержимого файлов на одном из их узлов (ссылка на узел есть на главном сайте — некая государственная свалка документов) ответили сразу.
    Там была возможность получить файлы без авторизации, и для скачивания публичных и для скачивания секрутных фалов один механизм. Файлы отдаются по числовому ИД, и чтобы скачать любой файл, просто указываешь другое число. А в файлах логины и пароли для чиновников (видимо они не придумывают такое для себя, придумывают за них, и присылают им через такие порталы). Посмотрел два документа, первым была внетреняя инструкция, вторым — карточка с логином и паролем для доступа к этому же сайту. Писал на адрес [email protected]. В очень уважительной форме. И начал письмо со слов: «Знаю, что Вы проигнорируете данное сообщение. …». Ответили на следующий день.

  • Макс:

    Привет, хотел спросить, как расширить права до рута.

    Чем конкретно ты пользуешься?
    Сплойтов введь тьма тьмущая. Как узнать какая есть уязвимость?

Leave a Reply to surpriz Cancel Reply