こんにちは!今回は、VulnHubなどで初心者向けとして人気の高いセキュリティ学習用プラットフォームのマシン「Toppo」の攻略(Writeup)手順を解説します。
toppoのダウンロード(https://www.vulnhub.com/entry/toppo-1,245/)
「デプロイ手順が分からない」「どうやって攻撃環境を準備すればいいの?」という方に向けて、VirtualBoxを使った環境構築ステップから、Webサイトの探索、そしてLinuxの特権昇格(root権限奪取)まで一気通貫でお届けします。
🛠️ 1. 環境構築フェーズ(VirtualBoxへのセットアップ)
まずは、ターゲットマシンとなる「Toppo」をVirtualBox上に構築します。
ステップ1: 既存の仮想ハードディスクとして追加
VulnHub等の公式サイトから「Toppo」のファイルをダウンロードし、解凍します。
VirtualBoxを開き、「新規」をクリックします。
名前を「Toppo」にし、タイプを「Linux」、バージョンを「Oracle Linux (64-bit)」に設定します。
メモリを適切(512MB〜1024MB程度で十分です)に割り当てます。
「ハードディスク」の項目で 「既存の仮想ハードディスクファイルを使用する」 を選択し、解凍したフォルダ内にある Toppo.vmdk(約6.00 GB)を選択して作成します。
ステップ2: ネットワーク設定(超重要)
攻撃端末(Kali LinuxやParrot OSなど)からターゲットにアクセスできるようにするため、ネットワークを同一セグメントに配置します。
仮想マシンの「設定」>「ネットワーク」を開き、割り当てを 「ホストオンリーアダプター」(またはご自身の検証用「NatNetwork」)に変更します。
設定が完了したら、ターゲットマシン(Toppo)を起動しておきます。
🛰️ 2. 偵察フェーズ(Reconnaissance)
ここからは攻撃端末(今回はParrot OSを使用)に移動し、ハッキングを開始します。まず、同じネットワーク内にあるターゲットマシンのIPアドレスを特定します。
ホスト発見と疎通確認
Bash
sudo netdiscover -i enp0s3 -r 192.168.56.0/24
ネットワークスキャンにより、今回のターゲットIPが 192.168.56.112 であることが判明しました。
環境変数にセットして ping で疎通を確認します。
Bash
export IP=192.168.56.112
ping $IP -c 1
無事に疎通が確認できたら、ポートスキャンに進みます。
Nmapによるポートスキャン
ターゲットで稼働しているサービスとそのバージョンを特定するため、nmap を実行します。
Bash
sudo nmap -sT -sC -sV $IP
スキャン結果:
22/tcp (SSH): OpenSSH 6.7p1 Debian
80/tcp (HTTP): Apache httpd 2.4.10 (Debian)
111/tcp (rpcbind): リモート手続き呼び出し用
Webサーバー(80番ポート)が稼働しているため、まずはブラウザでアクセスして調査します。
🔍 3. Web探索フェーズ(Enumeration)
ブラウザで http://192.168.56.112/ にアクセスすると、お洒落なブログサイトが表示されます。
一見すると何の変哲もないサイトですが、隠されたディレクトリがないか、ディレクトリバスターツール Gobuster を使って一気に列挙します。
Bash
gobuster dir -u http://$IP -w /usr/share/wordlists/dirb/common.txt
重要なディレクトリの発見
スキャン結果から、ステータスコード301を返す怪しいディレクトリを発見しました。
/admin/ (Status: 301)
さっそくブラウザで http://192.168.56.112/admin/ にアクセスしてみると、なんとディレクトリ一覧(Index of /admin)がそのまま露出(情報漏洩)していました。
そこには notes.txt というテキストファイルが。中身を確認すると、開発者のメモが残されていました。

大収穫です!
「12345ted123」というパスワード文字列と、メモの内容から、ユーザー名が ted である可能性が非常に高まりました。
🔑 4. 初期潜入(Initial Foothold)
手に入れた認証情報を使って、Nmapで見つけておいた22番ポート(SSH)からログインを試みます。
Bash
ssh ted@$IP
パスワード: 12345ted123
ログイン成功!
プロンプトが ted@Toppo:~$ に変わり、一般ユーザー ted としてマシン内部に潜入することに成功しました。
🚀 5. 特権昇格(Privilege Escalation)
現在のユーザー ted は権限が制限されているため、最終目的である root(最高管理者)への昇格を狙います。
Linuxの特権昇格における定番の調査コマンドである「SUIDファイルの探索」をかけます。
Bash
find / -perm -u=s -type f 2>/dev/null
SUID(Set User ID)が設定されたファイルは、誰が実行しても「所有者(通常はroot)」の権限で動作するという特性を持っています。
出力されたファイル群の中に、通常ではあり得ないファイルを発見しました。

/usr/bin/python2.7
/usr/bin/mawk (awkの軽量版)
なんと、Python と awk(mawk)に root 権限での実行許可(SUID)が付与されています! これらは任意のシステムコマンドを実行できる機能を持っているため、特権昇格の大きな抜け穴(GTFOBinsの対象)となります。
awk(mawk)を使ったフラグの回収
awk の system() 関数を使い、root権限で最高管理者のホームディレクトリ(/root/)の中身を覗き見ます。
Bash
awk 'BEGIN {system("ls /root")}'
結果: flag.txt
awk 'BEGIN {system("cat /root/flag.txt")}'
見事に、ASCIIアートで描かれた「Toppo」の文字とともに、最終フラグが出現しました!
🏁 Flag: ownedlab{p4ssi0n_c0me_with_pract1ce}
rootシェルの完全奪取
フラグを読むだけでなく、完全にマシンのコントロールを奪う(rootシェルを取る)ため、以下のコマンドでインタラクティブな root シェルを起動します。
Bash
awk 'BEGIN{system("/bin/sh")}'
python2.7 -c "import pty;pty.spawn('/bin/sh')"
whoami を実行すると、しっかり root と表示され、プロンプトも # へ。これにて「Toppo」の完全攻略です!









