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:
`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,8 +444,12 @@ 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!

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:
`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
@@ -457,20 +460,26 @@ 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 шел в системі!