additional info and fixes

This commit is contained in:
2025-09-14 14:37:43 +03:00
parent af6a25c919
commit 993570a132
2 changed files with 38 additions and 19 deletions

View File

@@ -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`:
![image](imgs/hish-sudo.png) ![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 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 ![image](imgs/root.png)
Thats it!
We successfully got root shell on system! We successfully got root shell on system!

View File

@@ -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`:
![image](imgs/hish-sudo.png) ![image](imgs/hish-sudo.png)
## Ескалація привілеїв 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#
``` ```
![image](imgs/root.png)
От і все! От і все!
Ми успішно отримали root шел в системі! Ми успішно отримали root шел в системі!