Базові техніки підвищення прав
Принцип найменших прав для користувача це наріжний камінь сучасної безпеки. Тому зазвичай на третьому етапі тестування мережі, після розвідки та первинного проникнення йде фаза закріплення та максимального підняття прав. Пройдемось по тому як це відбувається та розглянемо пару базових методів, як в Windows так і в Linux.
Уявіть що ваш скан був вдалим, і ви знайшли вразливий сервіс - через нього ви потрапляєте на машину та маєте реверс шел. Наша топ ціль це стати root або SYSTEM
- В першу чергу треба зрозуміти де ми і що ми. Для цього дивимось під яким ми користувачем, які права маємо, system info. В які групи входимо і взагалі яка структура користувачів на машині.
- Далі перевіряємо налаштування мережі - ipconfig, arp -a, route print, netstat etc. Нетстат особливо важливий, адже ви можете побачити порти які до цього не бачили ззовні, через прикриття фаерволом
- Базова перевірка на паролі. У автоматично розгорнутих середовищах часто можно зустріти паролі збережені після інсталу. Зазвичай їх пошук йде автоматично, про що поговоримо далі. Але ви також можете швидко зваживши інфо вишче (ОС, сервіси) пройтись по дефолтним слабким місцям. Це банальні паролі у файлах на рабочому столі, чи SAM, чи пароль від Wi-Fi. В кінці треду будуть досилання на ресурси із чітщітами
- Перевірка налаштувань фаерволу та можливого антивірусу – якщо не брати їх у розрахунок, можно довго битись у закриті двері Коли ми трохи освоїлись на машині то переходимо вже до ріл діл - автоматичних тулів-скриптів пошуку вразливостей. Мої улюблені тут це LinPeas та WinPeas. На скриншотах трохи більший перелік, в роботі або CTF іноді щось працює, щось ні, треба тестити все.
Після відпрацювання програм - дивимось що вони знайшли і пробуємо експлуатувати знахідки (Impersonation, Potato Attack, Kernel, WSL etc). Звісно на цьому етапі ви вже маєте знати як працює більшість вразливостей та відпрацювати їх на CTF чи лабках (HackTheBox, TryHackMe). Я не буду їх тут описувати, це тягне на два повноцінних курси, але розглянемо по одному базовому прикладу.
Windows:
Тут багато цікавинок, і підміна dll, і вразливості ядра. Візьмемо ту що для мене прикольна - місконфігурація сервіса, а сам підвид “Unquoted Service Paths”.
Частою місконфігурацією сервісу у Windows є відсутність лапок у шляху до бінарника. На скріні порівняння як це виглядає коли вони є і немає.
Проблема починається коли SCM намагається стартанути такий сервіс: через те що у шляху є пробіли, SCM не знає що саме ви хочете запустити, адже зазвичай пробіл це розділення аргументів.
Тобто якщо шляхом до бінарника буде:
1
C:\\MyPrograms\Disk Sorter Enterprise\bin\disksrs.exe
Першим імовірним шляхом виконання для SCM буде:
1
C:\\MyPrograms\Disk.exe і всі інше аргументи
Далі:
1
C:\\MyPrograms\Disk Sorter.exe
І допоки він не знайде реальний файл виконання. Windown SCM В цьому очевидна вразливість - ми можемо покласти свій файл на цьому шляху. Але і очевидна проблема - більшість програм встановлені у Program Files, де у звичайного юзера немає прав створювати файли. Втім, можно зустріти сервіс який адмін поставив не в дефолтні папки, чи в папки із розширеними правами.
Linux:
Тут цікавинок навіть більше, від Dirty Cow до SUID файлів. Зупинимось на базовому принципі - wildcard injection. В нас є кілька тек та файлів, давайте спробуємо зробити “rm *” Як ми бачимо файли видалились, але теки залишились. Linux Wildcard example
Причина зрозуміла, ми не використовували -r у команді. Тепер давайте створимо ще раз файли, та додамо файл із імʼям “-rf” Пробуємо знову “rm *”: видалились всі файли крім нашого, хоч ми цього і не передбачали основною командою. Linux Wildcard example
Чому це відбувається? Тому що всі імена файлів передаються команді rm як аргументи, тобто наш файл також інтерпретується як аргумент -rf і впливає на виконання.
Такі інʼєкції можливі коли використовується wildcard, на щастя для нас вони доволі часто можуть бути наприклад у cron. Класичний приклад виконання rsync під рутом кожні n-хвилин для бекапу. В данному випадку нас цікавіть аргумент -e - для виконання. Імʼя файла інʼєкції може бути наприклад “-e sh /tmp/script”.
Це тільки я пошрябав трохи верхівку айсбергу доволі цікавої та широкої теми. Там ще багато цікавого, тож трошки ресурсів я залишу як зажди після треду. Кому цікаво велкам, іншим гарного дня.
Корисні посилання
База данних використання стандартних та не дуже бінарників для підвищення прав в Linux gtfobins
Те саме для Windows lolbas
Велика база із тими самими чеклістами та даними по темі PayloadAllTheThings