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:
|
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`
|
`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).
|
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.
|
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
|
```bash
|
||||||
www-data@environment:$ cd /tmp
|
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)
|
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`:
|
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
|
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:
|
That program is actually a simple bash script:
|
||||||
@@ -442,8 +444,12 @@ Here I lost some time, thinking where or how could we hijack execution of these
|
|||||||
### BASH_ENV
|
### BASH_ENV
|
||||||
|
|
||||||
Searching web for BASH_ENV gives us this explanation:
|
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
|
### Exploit
|
||||||
@@ -468,5 +474,7 @@ root-bash-5.2# cat root.txt
|
|||||||
root-bash-5.2#
|
root-bash-5.2#
|
||||||
```
|
```
|
||||||
|
|
||||||
Thats it
|

|
||||||
|
|
||||||
|
Thats it!
|
||||||
We successfully got root shell on system!
|
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:
|
Після перегляду `/etc/passwd` (файл, що містить всіх користувачів, що існують в unix системах) ми можемо здогадатися, що нам потрібно буде отримати доступ до користувача hish, а потім експлуатувати наш шлях до root:
|
||||||
`www-data -> hish -> root`
|
`www-data -> hish -> root`
|
||||||
|
|
||||||
## Перевірка файлів під www-data користувачем
|
### Перевірка файлів під www-data користувачем
|
||||||
|
|
||||||
Для початку нам потрібно перевірити будь-які критичні файли, які можуть містити інформацію про пароль hish (такі як логи, бази даних).
|
Для початку нам потрібно перевірити будь-які критичні файли, які можуть містити інформацію про пароль hish (такі як логи, бази даних).
|
||||||
|
|
||||||
@@ -377,7 +377,9 @@ gpg: Fatal: can't create directory '/var/www/.gnupg': Permission denied
|
|||||||
|
|
||||||
тому що у нас немає дозволу створювати файли як користувач www-data в /var/www.
|
тому що у нас немає дозволу створювати файли як користувач www-data в /var/www.
|
||||||
|
|
||||||
Тому нам потрібно скопіювати `keyvault.gpg` і `.gnupg` директорію hish з їхніми приватними ключами в директорію, де у нас є права на запис. Я використаю `/tmp` для цього:
|
Тому нам потрібно скопіювати `keyvault.gpg` і `.gnupg` директорію hish з їхніми приватними ключами в директорію, де у нас є права на запис. Я використаю `/tmp` для цього
|
||||||
|
|
||||||
|
Також для того щоб gpg знав, що йому треба брати приватні ключі з нашої скопійованої директорії, треба додати параметр `--homedir /tmp/.gnupg`:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
www-data@environment:$ cd /tmp
|
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)
|
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`:
|
Ми в системі! Перше, що я перевіряю, коли заходжу як звичайний користувач, це дивлюся, які програми я можу запускати з sudo за допомогою `sudo -l`:
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
## Ескалація привілеїв root
|
|
||||||
|
|
||||||
Дивлячись на вивід команди `sudo -l`, можна побачити, що ми можемо запускати деяку програму `systeminfo` як користувач root
|
Дивлячись на вивід команди `sudo -l`, можна побачити, що ми можемо запускати деяку програму `systeminfo` як користувач root
|
||||||
|
|
||||||
@@ -457,20 +460,26 @@ df -h
|
|||||||
[Документація gnu](https://www.gnu.org/software/bash/manual/bash.html#index-BASH_005fENV) визначає BASH_ENV як:
|
[Документація 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](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
|
if [ -n «$BASH_ENV» ]; then . «$BASH_ENV»; fi
|
||||||
|
|
||||||
але значення змінної PATH не використовується для пошуку імені файлу.
|
але значення змінної PATH не використовується для пошуку імені файлу.
|
||||||
|
|
||||||
Як зазначено вище, якщо неінтерактивна оболонка викликається з опцією –login, Bash намагається прочитати та виконати команди з файлів запуску оболонки входу.
|
Як зазначено вище, якщо неінтерактивна оболонка викликається з опцією –login,
|
||||||
|
Bash намагається прочитати та виконати команди з файлів запуску оболонки входу.
|
||||||
```
|
```
|
||||||
|
|
||||||
### Експлойт
|
### Експлойт
|
||||||
@@ -495,5 +504,7 @@ root-bash-5.2# cat root.txt
|
|||||||
root-bash-5.2#
|
root-bash-5.2#
|
||||||
```
|
```
|
||||||
|
|
||||||
|

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