Post

Базові техніки підвищення прав

Принцип найменших прав для користувача це наріжний камінь сучасної безпеки. Тому зазвичай на третьому етапі тестування мережі, після розвідки та первинного проникнення йде фаза закріплення та максимального підняття прав. Пройдемось по тому як це відбувається та розглянемо пару базових методів, як в Windows так і в Linux.

Уявіть що ваш скан був вдалим, і ви знайшли вразливий сервіс - через нього ви потрапляєте на машину та маєте реверс шел. Наша топ ціль це стати root або SYSTEM

  1. В першу чергу треба зрозуміти де ми і що ми. Для цього дивимось під яким ми користувачем, які права маємо, system info. В які групи входимо і взагалі яка структура користувачів на машині.
  2. Далі перевіряємо налаштування мережі - ipconfig, arp -a, route print, netstat etc. Нетстат особливо важливий, адже ви можете побачити порти які до цього не бачили ззовні, через прикриття фаерволом
  3. Базова перевірка на паролі. У автоматично розгорнутих середовищах часто можно зустріти паролі збережені після інсталу. Зазвичай їх пошук йде автоматично, про що поговоримо далі. Але ви також можете швидко зваживши інфо вишче (ОС, сервіси) пройтись по дефолтним слабким місцям. Це банальні паролі у файлах на рабочому столі, чи SAM, чи пароль від Wi-Fi. В кінці треду будуть досилання на ресурси із чітщітами
  4. Перевірка налаштувань фаерволу та можливого антивірусу – якщо не брати їх у розрахунок, можно довго битись у закриті двері Коли ми трохи освоїлись на машині то переходимо вже до ріл діл - автоматичних тулів-скриптів пошуку вразливостей. Мої улюблені тут це LinPeas та WinPeas. На скриншотах трохи більший перелік, в роботі або CTF іноді щось працює, щось ні, треба тестити все.

Після відпрацювання програм - дивимось що вони знайшли і пробуємо експлуатувати знахідки (Impersonation, Potato Attack, Kernel, WSL etc). Звісно на цьому етапі ви вже маєте знати як працює більшість вразливостей та відпрацювати їх на CTF чи лабках (HackTheBox, TryHackMe). Я не буду їх тут описувати, це тягне на два повноцінних курси, але розглянемо по одному базовому прикладу.

Windows:

Тут багато цікавинок, і підміна dll, і вразливості ядра. Візьмемо ту що для мене прикольна - місконфігурація сервіса, а сам підвид “Unquoted Service Paths”.

Частою місконфігурацією сервісу у Windows є відсутність лапок у шляху до бінарника. На скріні порівняння як це виглядає коли вони є і немає.

Windown SCM Windown SCM Windown SCM Windown SCM

Проблема починається коли 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 Windown SCM В цьому очевидна вразливість - ми можемо покласти свій файл на цьому шляху. Але і очевидна проблема - більшість програм встановлені у Program Files, де у звичайного юзера немає прав створювати файли. Втім, можно зустріти сервіс який адмін поставив не в дефолтні папки, чи в папки із розширеними правами.

Linux:

Тут цікавинок навіть більше, від Dirty Cow до SUID файлів. Зупинимось на базовому принципі - wildcard injection. В нас є кілька тек та файлів, давайте спробуємо зробити “rm *” Як ми бачимо файли видалились, але теки залишились. Linux Wildcard example Linux Wildcard example

Linux Wildcard example Linux Wildcard example

Причина зрозуміла, ми не використовували -r у команді. Тепер давайте створимо ще раз файли, та додамо файл із імʼям “-rf” Пробуємо знову “rm *”: видалились всі файли крім нашого, хоч ми цього і не передбачали основною командою. Linux Wildcard example Linux Wildcard example

Чому це відбувається? Тому що всі імена файлів передаються команді rm як аргументи, тобто наш файл також інтерпретується як аргумент -rf і впливає на виконання.

Такі інʼєкції можливі коли використовується wildcard, на щастя для нас вони доволі часто можуть бути наприклад у cron. Класичний приклад виконання rsync під рутом кожні n-хвилин для бекапу. В данному випадку нас цікавіть аргумент -e - для виконання. Імʼя файла інʼєкції може бути наприклад “-e sh /tmp/script”.

Це тільки я пошрябав трохи верхівку айсбергу доволі цікавої та широкої теми. Там ще багато цікавого, тож трошки ресурсів я залишу як зажди після треду. Кому цікаво велкам, іншим гарного дня.

Корисні посилання

База данних використання стандартних та не дуже бінарників для підвищення прав в Linux gtfobins

Те саме для Windows lolbas

Велика база із тими самими чеклістами та даними по темі PayloadAllTheThings

Автоматичні тули img-description Linux Tools

img-description Windows Tools

This post is licensed under CC BY 4.0 by the author.