diff --git a/HTB/environment/en.md b/HTB/environment/en.md index 33d67c6..a69d874 100644 --- a/HTB/environment/en.md +++ b/HTB/environment/en.md @@ -283,7 +283,7 @@ hish:x:1000:1000:hish,,,:/home/hish:/bin/bash After looking at `/etc/passwd` (file that contains all users existing on unix systems) we can guess that we'll need to get access to hish user and then exploit our way to root: `www-data -> hish -> root` -## Recon as www-data +### Recon as www-data To get started we would need to check for any critical files that can contain information about hish password (like logs, databases). @@ -364,7 +364,9 @@ gpg: Fatal: can't create directory '/var/www/.gnupg': Permission denied because we don't have permission to create files as www-data user in /var/www. -So we'll need to copy `keyvault.gpg` and hish's `.gnupg` directory with their private keys to directory we have write permissions to. I'll use `/tmp` for this: +So we'll need to copy `keyvault.gpg` and hish's `.gnupg` directory with their private keys to directory we have write permissions to. I'll use `/tmp` for this + +Also, for gpg to know that it needs to use private keys from our copied directory we need to pass `--homedir /tmp/.gnupg` parameter: ```bash www-data@environment:$ cd /tmp @@ -405,12 +407,12 @@ id uid=1000(hish) gid=1000(hish) groups=1000(hish),24(cdrom),25(floppy),29(audio),30(dip),44(video),46(plugdev),100(users),106(netdev),110(bluetooth) ``` +## Root Privilege Escalation + We're in! First thing I check when I get a user on a system is to see what programs I can run with sudo using `sudo -l`: ![image](imgs/hish-sudo.png) -## Root Privilege Escalation - Looing at `sudo -l` output we can see, that there's some `systeminfo` program that we can execute with root priviliges That program is actually a simple bash script: @@ -442,9 +444,13 @@ Here I lost some time, thinking where or how could we hijack execution of these ### BASH_ENV Searching web for BASH_ENV gives us this explanation: -``` -BASH_ENV is an environment variable in Unix-like systems that specifies the file to be executed when a non-interactive shell is started. It allows users to set up a specific environment for scripts or commands run in that shell. -``` + + ``` + BASH_ENV is an environment variable in Unix-like systems that + specifies the file to be executed when a non-interactive shell is started. + It allows users to set up a specific environment for scripts + or commands run in that shell. + ``` ### Exploit @@ -468,5 +474,7 @@ root-bash-5.2# cat root.txt root-bash-5.2# ``` -Thats it +![image](imgs/root.png) + +Thats it! We successfully got root shell on system! diff --git a/HTB/environment/ua.md b/HTB/environment/ua.md index 8e99e3d..cf788f5 100644 --- a/HTB/environment/ua.md +++ b/HTB/environment/ua.md @@ -283,7 +283,7 @@ GIF87a ## Ескалація привілеїв користувача -Коли ми отримуємо віддалений доступ до сервера, ми входимо в систему як користувач **www-data** в системі, який використовується в Linux системах веб-серверами типу Apache/Nginx для хостингу веб-додатків. +Коли ми отримуємо віддалений доступ до сервера, ми входимо в систему як користувач **www-data**, який використовується в Linux веб-серверами типу Apache/Nginx для хостингу веб-додатків. Щоб окреслити наші наступні кроки, ми подивимося на доступних користувачів на сервері: @@ -296,7 +296,7 @@ hish:x:1000:1000:hish,,,:/home/hish:/bin/bash Після перегляду `/etc/passwd` (файл, що містить всіх користувачів, що існують в unix системах) ми можемо здогадатися, що нам потрібно буде отримати доступ до користувача hish, а потім експлуатувати наш шлях до root: `www-data -> hish -> root` -## Перевірка файлів під www-data користувачем +### Перевірка файлів під www-data користувачем Для початку нам потрібно перевірити будь-які критичні файли, які можуть містити інформацію про пароль hish (такі як логи, бази даних). @@ -377,7 +377,9 @@ gpg: Fatal: can't create directory '/var/www/.gnupg': Permission denied тому що у нас немає дозволу створювати файли як користувач www-data в /var/www. -Тому нам потрібно скопіювати `keyvault.gpg` і `.gnupg` директорію hish з їхніми приватними ключами в директорію, де у нас є права на запис. Я використаю `/tmp` для цього: +Тому нам потрібно скопіювати `keyvault.gpg` і `.gnupg` директорію hish з їхніми приватними ключами в директорію, де у нас є права на запис. Я використаю `/tmp` для цього + +Також для того щоб gpg знав, що йому треба брати приватні ключі з нашої скопійованої директорії, треба додати параметр `--homedir /tmp/.gnupg`: ```bash www-data@environment:$ cd /tmp @@ -418,11 +420,12 @@ id uid=1000(hish) gid=1000(hish) groups=1000(hish),24(cdrom),25(floppy),29(audio),30(dip),44(video),46(plugdev),100(users),106(netdev),110(bluetooth) ``` +## Ескалація привілеїв root + Ми в системі! Перше, що я перевіряю, коли заходжу як звичайний користувач, це дивлюся, які програми я можу запускати з sudo за допомогою `sudo -l`: ![image](imgs/hish-sudo.png) -## Ескалація привілеїв root Дивлячись на вивід команди `sudo -l`, можна побачити, що ми можемо запускати деяку програму `systeminfo` як користувач root @@ -456,22 +459,28 @@ df -h [Документація gnu](https://www.gnu.org/software/bash/manual/bash.html#index-BASH_005fENV) визначає BASH_ENV як: -``` - Якщо ця змінна встановлена під час виклику Bash для виконання скрипта оболонки, її значення розширюється і використовується як ім'я файлу запуску, який слід прочитати перед виконанням скрипта. Див. Файли запуску Bash. -``` + ``` + Якщо ця змінна встановлена під час виклику Bash для виконання скрипта оболонки, + її значення розширюється і використовується як ім'я файлу запуску, + який слід прочитати перед виконанням скрипта. Див. Файли запуску Bash. + ``` У розділі [Файли запуску Bash](https://www.gnu.org/software/bash/manual/bash.html#Bash-Startup-Files) сказано: -``` + ``` Викликано в неінтерактивному режимі - Коли Bash запускається в неінтерактивному режимі, наприклад, для виконання скрипта оболонки, він шукає змінну BASH_ENV в середовищі, розширює її значення, якщо воно там є, і використовує розширене значення як ім'я файлу для читання та виконання. Bash поводиться так, ніби було виконано наступну команду: + Коли Bash запускається в неінтерактивному режимі, + наприклад, для виконання скрипта оболонки, він шукає змінну BASH_ENV в середовищі, + розширює її значення, якщо воно там є, і використовує розширене значення як ім'я файлу + для читання та виконання. Bash поводиться так, ніби було виконано наступну команду: if [ -n «$BASH_ENV» ]; then . «$BASH_ENV»; fi але значення змінної PATH не використовується для пошуку імені файлу. - Як зазначено вище, якщо неінтерактивна оболонка викликається з опцією –login, Bash намагається прочитати та виконати команди з файлів запуску оболонки входу. -``` + Як зазначено вище, якщо неінтерактивна оболонка викликається з опцією –login, + Bash намагається прочитати та виконати команди з файлів запуску оболонки входу. + ``` ### Експлойт @@ -495,5 +504,7 @@ root-bash-5.2# cat root.txt root-bash-5.2# ``` +![image](imgs/root.png) + От і все! Ми успішно отримали root шел в системі!