additional info and fixes
This commit is contained in:
@@ -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`:
|
||||
|
||||

|
||||
|
||||
## 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
|
||||

|
||||
|
||||
Thats it!
|
||||
We successfully got root shell on system!
|
||||
|
||||
@@ -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`:
|
||||
|
||||

|
||||
|
||||
## Ескалація привілеїв 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#
|
||||
```
|
||||
|
||||

|
||||
|
||||
От і все!
|
||||
Ми успішно отримали root шел в системі!
|
||||
|
||||
Reference in New Issue
Block a user