LinuxПривилегии в стиле Root!

root-привилегииБуквально пару часов назад участвовал в совершенно случайно инициированном соревновании по повышению локальных привилегий до уровня Root на сервере с локальным доступом. Я подумал, и решил вынести некоторую информацию в блог под неявным заголовком «для новичков». Надеюсь, эти знания помогут расширить Вам свой кругозор.

Итак, представим, что у Вас есть локальный доступ к Linux-системе. Не столь важно как Вы его получили: с помощью SQL Инъекций, PHP Инъекций, File Inclusion, Directory traversal или просто подсмотрели пароль, внимательно держа в руках профессиональный бинокль.

Допустим, что гипотетически у Вас есть желание получить привилегии пользователя Root на этом сервере. Этого можно добиваться совершенно различными способами, и я опишу наиболее стандартный ход действий — через эксплойты. Естественно, если у Вас на руках нет 0-day уязвимости, то шансы взломать систему с последними обновлениями и заплатками — очень низки.

Шаг первый. Узнаем параметры системы.

Прежде чем приступить к дальнейшим действиям, мы должны точно знать с какой системой имеем дело. Для этого обычно хватает стандартной команды uname. В моем случае вывод команды был следующим:

[v673@localhost ~]$ uname --all
Linux localhost 2.6.29.1-desktop586-4mnb #1 SMP Mon Apr 20 17:37:07 EDT 2009 i686 Intel(R) Core(TM)2 Quad CPU    Q6600  @ 2.40GHz GNU/Linux

Если Вы забыли параметры — легко можно обратиться к помощи, благодаря параметру --help:

[v673@localhost ~]$ uname --help
Использование: uname [КЛЮЧ]...
Печатает определенные сведения о системе.  Если КЛЮЧ не задан,
подразумевается -s.
 
  -a, --all          напечатать всю информацию, в следующем порядке,
                       кроме -p и -i, если они неизвестны:
  -s, --kernel-name  напечатать имя ядра
  -n, --nodename     напечатать имя машины в сети
  -r, --release      напечатать номер выпуска операционной системы
  -v, --kernel-version     напечатать версию ядра
  -m, --machine            напечатать тип оборудования машины
  -p, --processor          напечатать тип процессора или "неизвестно"
  -i, --hardware-platform  напечатать тип аппаратной платформы или "неизвестно"
  -o, --operating-system   напечатать имя операционной системы
      --help     показать эту справку и выйти
      --version  показать информацию о версии и выйти
 
 
Report uname bugs to bug-coreutils@gnu.org
GNU coreutils home page: <http://www.gnu.org/software/coreutils/>
General help using GNU software: <http://www.gnu.org/gethelp/>
Report uname translation bugs to <http://translationproject.org/team/>

Именно по этим параметрам мы и будем искать подходящий эксплойт. Эксплойты могут использовать уязвимости как в ядре, так и в каком-нибудь установленном приложении, обычно запущенном от имени root`а.

Шаг второй. Находим эксплойт.

Наша задача: работать как можно меньше и получить результат как можно быстрее. Эксплойты — это уже готовые, любезно написанные программы, скомпилировав и выполнив которые, можно успешно, и что самое главное быстро, скомпрометировать систему.

Сейчас я не собираюсь учить Вас поиску эксплойтов. Скажу лишь, что для этого никаких выдающихся навыков не требуется. В нашем случае подойдет поисковый запрос вроде «Local Root Exploit 2.6.29.1». Помните, что большинство публичных эксплойтов можно найти на milw0rm.com.

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

[v673@localhost ~]$ touch exploit.c

Шаг третий. Убираем защиту от скрипт-киддисов.

Ради защиты от детей(ну и взрослых), которые ничего не понимают в программировании, и слепо используют готовые эксплойты лишь ради наживы, пороча добрые имена компьютерных специалистов, некоторые разработчики начали вставлять в код явные ошибки. Ошибки, которые обычный программист распознает без проблем.

Поэтому если первая компиляция свалилась в ошибку — не переживайте, просто где-то в коде она допущена специально. Например, добавили лишние символы в объявлении функции:

...
unsigned int uid, gid;
 
void Cr0sSv673
kernel_code()
{
     ...
}

Теперь давайте откроем файл через редактор vi, нажмем кнопку Insert на клавиатуре, для начала редактирования, и скопируем код эксплойта:

[v673@localhost ~]$ vi exploit.c
...

После завершения процесса копирования и редактирования нажимаем Esc и вводим «:qw!» в vi-консоле. Чтобы vi-консоль появилась, нажмите двоеточие. Вот и все — данные успешно сохранились в файле.

Шаг четвертый. Компилируем!

Процесс компилирования можно осуществлять с различными параметрами. Если отдельно в комментариях к эксплойту не указаны другие рекомендации, используйте следующий способ по умолчанию:

[v673@localhost ~]$ gcc exploit.c -o exploit

Шаг пятый. Запускаем!

Если автор эксплойта отдельным образом не описал дополнительные параметры для запуска, то используйте способ по умолчанию:

[v673@localhost ~]$ ./exploit

Хочу также заметить, что некоторые создатели эксплойтов предусматривают получение Root-привилегий во время компилирования.

К черту шаги! Наслаждаемся результатом!

Футболка I am root - email Футболка про linux и root

Если все прошло успешно, то в результате при вводе команды id. Вы должны увидить что-то вроде этого:

[root@localhost ~]# id
uid=0(root) gid=0(root) группы=0(root)

Или, если процесс повышения привилегий не сработал, Вы должны увидеть себя:

[v673@localhost ~]$ id
uid=500(v673) gid=500(v673) группы=75(apache),500(v673)

Если эксплойт не сработал — не расстраивайтесь, а смело переходите к другому, пока не исчерпаете все возможные варианты. Но, конечно же, лучше пишите сами(или покупайте?) эксплойты, никому не показывайте их(кроме меня, конечно) и легко поднимайте свои привилегии даже на полностью обновленной и актуальной системе.


Есть мысли на этот счет:
mr.The 09.09.2009 13:08 пишет:

Ничего нового, но написано хорошо. Футболки понравились)

    v673 10.09.2009 14:34 пишет:

    Спасибо за отзыв, mr.The! Все так и планировалось — руководство для новичков. Футболки случайно в Интернете нашел, тоже понравились, и захотел поделиться.

Прохожий 10.09.2009 20:30 пишет:

Переносы строк в объявлении функций не влияют на компиляцию :)

Вы же знаете Си?

    v673 10.09.2009 21:13 пишет:

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

Алексей 27.09.2009 21:26 пишет:

Это полный рут, чувак!

    v673 27.09.2009 21:30 пишет:

    Тестирование email-доставки объявляю открытым!

Есть что сказать?
Ваше имя:
Ваш e-mail:
Ваш сайт:
Ваше мнение:




земляные работы в Донецке