Приветствую
Занимаясь изучением дисциплины “Повышение прав" наткнулся на очень интересную технику которой хотел бы поделиться и разобрать более детально.
Допустим нам дана машина где мы находим suid файл
Видим что он действительно suid и владелец root
Для нас это означает, что программа может быть запущена нами и все что она сделает будет от супер-пользователя. Хорошо, а что собственно она делает? Давайте разбираться
1. Запустим ее и посмотрим что из этого получится
Ок, она просто запускает apache2
2. Попробуем прояснить по какой логике она это делает
Из интересного для нас:
Давайте рассуждать!
Каким образом получается так, что если вы вводите какую-то команду, например cat <file> и она работает ? Все дело в переменной окружения $PATH
Поглядим
Как видим указан путь
Получается, что если мы даем оболочке команду, она сразу обращается к переменной окружения и имея путь обращается у нужной нам утилите.
И так, вернемся к нашим баранам. Получается такая логика:
Мы запускаем /usr/local/bin/suid-env, она знает что нужно обратится к service и чтоб это сдалеть, она обратится к переменной $PATH чтобы получить полный путь.
Как же повысить права имея эти данные?
В материале к обучению нам дают исходник который требуется скомпилировать, Давайте взглянем на него.
Скомпилируем данный исходник:
Хорошо, мы создали свой service который будет возвращать оболочку, теперь нужно решить вопрос с подменой значений переменной $PATH
Этой командой мы добавляем нужную директорию с нашим файлом в переменную.
Теперь сново запустим
Мы есть Root!!!
Занимаясь изучением дисциплины “Повышение прав" наткнулся на очень интересную технику которой хотел бы поделиться и разобрать более детально.
- Дисциплина “Повышение прав”
- Уязвимость “SUID/SGID Executable”
- Реализация “Подмена переменной PATH”
/usr/local/bin/suid-env
Код:
ls -l /usr/local/bin/suid-env
-rwsr-sr-x 1 root staff 6883 May 14 2017 /usr/local/bin/suid-env
Для нас это означает, что программа может быть запущена нами и все что она сделает будет от супер-пользователя. Хорошо, а что собственно она делает? Давайте разбираться
1. Запустим ее и посмотрим что из этого получится
Код:
/usr/local/bin/suid-env
Ок, она просто запускает apache2
2. Попробуем прояснить по какой логике она это делает
Код:
strings /usr/local/bin/suid-env
Из интересного для нас:
Код:
setresuid
service apache2 start
setresuid
Функция setresuid устанавливает идентификатор реального пользователя. То есть uid=0 (он же рут)service apache2 start
Этой командой запускается веб сервер apache2. Что тут важно, так это то, что программа suid-env обращается к команде service не используя полный путь. Что это значит?Давайте рассуждать!
Каким образом получается так, что если вы вводите какую-то команду, например cat <file> и она работает ? Все дело в переменной окружения $PATH
Поглядим
echo $PATH
Как видим указан путь
/usr/bin
а в нем то и лежит наша утилита catПолучается, что если мы даем оболочке команду, она сразу обращается к переменной окружения и имея путь обращается у нужной нам утилите.
И так, вернемся к нашим баранам. Получается такая логика:
Мы запускаем /usr/local/bin/suid-env, она знает что нужно обратится к service и чтоб это сдалеть, она обратится к переменной $PATH чтобы получить полный путь.
Как же повысить права имея эти данные?
- Мы подменяем файл service так как /usr/local/bin/suid-env все равно что запускать, главне чтоб название совпало.
- Так как быдет происходит обращение к $PATH, нам нужно сделать подмену пути к service (если не сделаем обратимся к реальному файлу)
В материале к обучению нам дают исходник который требуется скомпилировать, Давайте взглянем на него.
Код:
setuid(0) - устанавливаем права root
system("/bin/bash -p") - вызываем оболочку bash
Код:
gcc -o service /home/user/tools/suid/service.c
Хорошо, мы создали свой service который будет возвращать оболочку, теперь нужно решить вопрос с подменой значений переменной $PATH
Код:
PATH=/директория нашего файла :$PATH
Теперь сново запустим
/usr/local/bin/suid-env
Мы есть Root!!!
Как и писал ранее, главное достичь понимания того, что выделаете и почему вы делаете именно так. Тогда полученные знания на вечно закрепятся у вас в голове.
Спасибо за внимание
Последнее редактирование модератором: