今回は前回に続き、初の「ハッキング」に挑戦です!
ですが、分からないこともあり大苦戦の回になりました...
主が分からなかった専門用語や意味も深掘りして簡潔にまとめていきたいと思います!
それではやっていきます...!
ハッキングの準備
URLから「Potatoマシン(仮想マシン)」のOVAファイルをダウンロードし、VirtualBoxでインポートします。
1. netdiscoverを使用してネットワーク内のIPアドレスを確認する
netdiscoverコマンドを使用すると、同一ネットワーク内に接続されている機器のIPアドレスやホスト名を確認できます。
実行コマンド
sudo netdiscover -i enp0s3 -r 192.168.56.0/24
コマンドの説明
| オプション | 説明 |
|---|---|
sudo |
管理者権限でコマンドを実行します。 |
netdiscover |
ネットワーク内の端末を検出するコマンドです。 |
-i enp0s3 |
使用するネットワークインターフェースを指定します。 |
-r 192.168.56.0/24 |
スキャンするIPアドレスの範囲を指定します。 |
実行結果
192.168.56.100 DHCPサーバー
192.168.56.112 Potato
結果を表にまとめると以下のようになります。
| IPアドレス | ホスト名 | 説明 |
|---|---|---|
192.168.56.100 |
DHCPサーバー | DHCPサーバーとして動作している端末 |
192.168.56.112 |
Potato | 今回対象となるサーバー |
2. 環境変数にIPアドレスを設定する
次に、exportコマンドを使用して環境変数を設定します。
PotatoマシンのIPアドレスは今後何度も使用するため、環境変数IPに設定しておきます。
(主の場合はアダプター変更の影響でIPアドレスが192.168.178.3になっています。)
実行コマンド
export IP=192.168.56.112
設定した環境変数の内容は、echoコマンドで確認できます。
echo $IP
実行結果
192.168.56.112
コマンドの説明
| コマンド | 説明 |
|---|---|
export IP=192.168.56.112 |
IPという名前の環境変数に、PotatoマシンのIPアドレスを設定します。 |
echo $IP |
環境変数IPに設定されている値を表示します。 |
3. 実験用ディレクトリの作成とPotatoマシンのポートスキャン
次に、実験用のディレクトリを作成し、その中でPotatoマシンのポートスキャンを実行します。
まず、mkdirコマンドで作業用ディレクトリvulnhubと、その配下にpotatoディレクトリを作成します。
その後、cdコマンドでpotatoディレクトリへ移動し、nmapを使用してPotatoマシンのポートスキャンを実行します。
スキャン結果はportscan_result.txtというファイルに保存されます。
実行コマンド
mkdir vulnhub
mkdir vulnhub/potato
cd vulnhub/potato/
sudo nmap -sC -sV -Pn -p- $IP -oN portscan_result.txt
コマンドの説明
| コマンド | 説明 |
|---|---|
mkdir vulnhub |
vulnhubという作業用ディレクトリを作成します。 |
mkdir vulnhub/potato |
vulnhubディレクトリ内にpotatoディレクトリを作成します。 |
cd vulnhub/potato/ |
作成したpotatoディレクトリへ移動します。 |
sudo nmap -sC -sV -Pn -p- $IP -oN portscan_result.txt |
Potatoマシンに対して全ポートのスキャンを実行し、サービスやバージョン情報を取得します。結果はportscan_result.txtに保存されます。 |
nmapオプションの説明
| オプション | 説明 |
|---|---|
-sC |
Nmapのデフォルトスクリプトを実行し、追加情報を収集します。 |
-sV |
稼働しているサービスのバージョン情報を取得します。 |
-Pn |
Pingによるホスト確認を行わず、対象ホストが起動しているものとしてスキャンします。 |
-p- |
1~65535までのすべてのTCPポートをスキャンします。 |
$IP |
あらかじめ環境変数に設定したPotatoマシンのIPアドレスを指定します。 |
-oN portscan_result.txt |
スキャン結果を通常形式でportscan_result.txtに保存します。 |
4. FTPクライアントをインストールしてPotatoマシンへ接続する
次に、FTPサービスへ接続するためにFTPクライアントをインストールします。
まず、パッケージ一覧を更新した後、ftpコマンドをインストールします。
インストール後は、ftp -hコマンドを実行して、FTPコマンドが正常に利用できることを確認します。
その後、PotatoマシンのFTPサービス(ポート2112)へ接続します。
(主はユーザー名をanonymous、パスワードをhogehogeにしました。)
実行コマンド
sudo apt update
sudo apt install ftp
ftp -h
インストールが完了したら、以下のコマンドを実行してPotatoマシンへ接続します。
ftp $IP 2112
コマンドの説明
| コマンド | 説明 |
|---|---|
sudo apt update |
パッケージ一覧を最新の状態に更新します。 |
sudo apt install ftp |
FTPクライアントをインストールします。 |
ftp -h |
FTPコマンドのヘルプを表示し、正常にインストールされていることを確認します。 |
ftp $IP 2112 |
PotatoマシンのFTPサービス(ポート2112)へ接続します。 |
コマンドの補足
| 項目 | 説明 |
|---|---|
ftp |
FTP(File Transfer Protocol)を利用してサーバーへ接続するコマンドです。 |
$IP |
あらかじめ環境変数に設定したPotatoマシンのIPアドレスを指定します。 |
2112 |
PotatoマシンでFTPサービスが待ち受けているポート番号を指定します。 |
5. FTPサーバー内のファイルを確認してダウンロードする
FTPサーバーへ接続したら、lsコマンドでサーバー内に保存されているファイルを確認します。
今回の環境では、welcome.msgとindex.php.bakの2つのファイルが存在していました。
これらのファイルは、getコマンドを使用することでローカル環境へダウンロードできます。
作業が終了したら、exitコマンドでFTP接続を終了します。
FTPとは
FTP(File Transfer Protocol)とは、ネットワーク上でファイルを送受信するための通信プロトコルです。
FTPを利用することで、サーバー内のファイルを一覧表示したり、ファイルのダウンロードやアップロードを行うことができます。
ただし、通常のFTPは通信内容(ユーザー名・パスワード・ファイル内容)が暗号化されないため、本番環境では暗号化されたSFTPやFTPSが利用されることが一般的です。
実行コマンド
ls
get welcome.msg
get index.php.bak
exit
実行結果
welcome.msg
index.php.bak
コマンドの説明
| コマンド | 説明 |
|---|---|
ls |
FTPサーバー内に保存されているファイルやディレクトリを一覧表示します。 |
get welcome.msg |
welcome.msgをローカル環境へダウンロードします。 |
get index.php.bak |
index.php.bakをローカル環境へダウンロードします。 |
exit |
FTPサーバーとの接続を終了します。 |
ダウンロードしたファイル
| ファイル名 | 説明 |
|---|---|
welcome.msg |
FTPサーバーに保存されていたメッセージファイルです。 |
index.php.bak |
Webサーバーで使用されていたPHPファイルのバックアップです。脆弱性診断やCTFでは、バックアップファイルから重要な情報が見つかることがあります。 |
6. HTTPサービスへアクセスしてWebサイトを調査する
次に、Potatoマシンで公開されているHTTPサービスへアクセスし、Webサイトに脆弱性がないか調査します。
WebブラウザでPotatoマシンのIPアドレスへアクセスすると、HTTPサービスが提供されていることを確認できます。
今回は、トップページを確認しただけでは脆弱性につながる情報は見つからなかったため、FTPサーバーから取得したindex.php.bakを参考に、別のページについても調査を進めます。
その準備として、WebサイトのURLを環境変数URLへ設定します。
実行コマンド
export URL="http://$IP:80/"
echo $URL
実行結果
http://192.168.56.112:80/
コマンドの説明
| コマンド | 説明 |
|---|---|
export URL="http://$IP:80/" |
WebサーバーのURLを環境変数URLに設定します。 |
echo $URL |
環境変数URLに設定されている内容を表示します。 |
HTTPとは
HTTP(HyperText Transfer Protocol)とは、WebブラウザとWebサーバーが通信を行うためのプロトコルです。
HTTPを利用することで、Webページや画像などのデータを取得できます。一般的なWebサイトでは80番ポートでHTTPサービスが提供されており、通信内容は暗号化されません。そのため、現在では暗号化されたHTTPS(443番ポート)が広く利用されています。
補足
今回のトップページを確認した限りでは、目立った脆弱性や公開情報は見つかりませんでした。
そのため、FTPサーバーから取得したindex.php.bakを調査し、Webアプリケーションに隠された機能やアクセス可能なページがないかを確認していきます。
7. Gobusterでディレクトリを探索する
次に、Webサーバー上に公開されているディレクトリを調査するため、Gobusterを使用してディレクトリスキャンを実行します。
トップページからは管理画面などへのリンクが表示されていない場合でも、推測可能なディレクトリ名を総当たりで調査することで、隠されたページを発見できることがあります。
Gobusterとは
Gobusterとは、WebサーバーやDNSなどに対してブルートフォース(総当たり)で探索を行うツールです。
Webアプリケーションの診断では、公開されていないディレクトリやファイルを発見するために使用されることが多く、ペネトレーションテストやCTFでもよく利用されています。
実行コマンド
gobuster dir -u $URL -w /usr/share/wordlists/dirb/common.txt
実行結果(一部)
/admin (Status: 301)
コマンドの説明
| コマンド | 説明 |
|---|---|
gobuster |
ディレクトリやファイルを探索するツールです。 |
dir |
ディレクトリ探索モードを指定します。 |
-u $URL |
スキャン対象となるWebサイトのURLを指定します。 |
-w /usr/share/wordlists/dirb/common.txt |
ディレクトリ名の候補が記載されたワードリストを指定します。 |
Gobusterオプションの説明
| オプション | 説明 |
|---|---|
dir |
Webサーバーのディレクトリやファイルを探索します。 |
-u |
スキャン対象のURLを指定します。 |
-w |
使用するワードリストを指定します。 |
発見したディレクトリの確認
Gobusterの実行結果から、/adminディレクトリが存在することを確認できました。
そこで、Webブラウザから以下のURLへアクセスします。
http://192.168.56.112/admin
アクセスすると、管理者向けのログイン画面が表示されました。
このことから、/adminは管理画面であり、ここから管理者認証を行えるページであると推測できます。
補足
Webサイトには、通常の画面からはリンクされていない「隠しディレクトリ」や「管理画面」が存在することがあります。
Gobusterを利用することで、このような公開されていないディレクトリを効率的に発見できるため、ペネトレーションテストでは非常に有効な情報収集手法の一つです。
8. Burp SuiteでHTTPリクエストを確認する
次に、Burp Suiteを使用して、ブラウザとWebサーバー間で送受信されるHTTPリクエストを確認します。
Burp Suiteは、Webアプリケーションの動作を解析したり、HTTP通信を確認したりするための代表的なWebセキュリティ診断ツールです。
Burp Suiteとは
Burp Suiteは、PortSwigger社が提供するWebアプリケーション診断ツールです。
ブラウザとWebサーバーの間で通信を仲介する「プロキシ」として動作し、HTTPリクエストやHTTPレスポンスの内容を確認できます。
ペネトレーションテストやWebアプリケーションの開発・デバッグなど、さまざまな用途で利用されています。
操作手順
- Burp Suiteを起動します。
- Proxyタブを開きます。
- Open browserをクリックし、Burp Suite専用ブラウザを起動します。
- ブラウザから管理画面へアクセスし、ログインフォームへ任意の認証情報を入力します。
- Interceptが有効になっている場合、送信されるHTTPリクエストがBurp Suiteに表示されます。
- Rawタブでは、HTTPリクエストの内容をテキスト形式で確認できます。
- Forwardをクリックすると、リクエストがWebサーバーへ送信されます。
Interceptとは
Intercept機能は、ブラウザから送信されるHTTPリクエストを一時停止し、その内容を確認できる機能です。
この機能を利用することで、リクエストヘッダーやCookie、フォームデータなどを確認し、Webアプリケーションの通信内容を理解できます。
補足
Burp Suiteは、Webアプリケーションの動作確認やセキュリティ診断を行う際に広く利用されています。
利用する際は、必ず自分が管理している環境や、明示的な許可を得た検証環境でのみ使用してください。
9. ディレクトリトラバーサル脆弱性を確認する
次に、Webアプリケーションにディレクトリトラバーサルの脆弱性が存在するかを調査します。
ディレクトリトラバーサルとは、ユーザーから渡されたファイル名やパスの入力値を適切に検証していない場合に、本来アクセスできないディレクトリやファイルへアクセスできてしまう脆弱性です。
ディレクトリトラバーサルとは
ディレクトリトラバーサル(Directory Traversal)は、Webアプリケーションの入力値を悪用し、本来参照できないファイルへアクセスできてしまう脆弱性です。
この脆弱性が存在すると、サーバー内の設定ファイルやログファイルなどの重要な情報が漏えいする可能性があります。
「../」とは
../は、LinuxやUnix系OSにおいて「1つ上のディレクトリへ移動する」ことを表します。
例えば、現在のディレクトリが
/var/www/html/
である場合、../を指定すると
/var/www/
へ移動します。
脆弱性が存在した場合の影響
| 項目 | 説明 |
|---|---|
| 情報漏えい | 本来閲覧できないファイルが公開される可能性があります。 |
| 設定情報の漏えい | アプリケーションの設定情報や認証情報が取得される危険性があります。 |
| システム情報の漏えい | サーバー構成やOSに関する情報が取得される可能性があります。 |
対策
| 対策 | 説明 |
|---|---|
| 入力値の検証 | ユーザー入力を適切に検証し、不正なパスを受け付けないようにします。 |
| ホワイトリスト方式 | アクセス可能なファイルのみを許可します。 |
| パスの正規化 | パスを正規化し、想定外のディレクトリへアクセスできないようにします。 |
| 最小権限の原則 | Webサーバーがアクセスできるファイルを必要最小限に制限します。 |
10. John the Ripperでパスワードハッシュを解析する
次に、取得したパスワードハッシュを解析するため、John the Ripperを使用します。
John the Ripperは、オフライン環境でパスワードの強度を検証するために利用される代表的なパスワード監査ツールです。
セキュリティ診断やペネトレーションテストでは、許可された環境において、パスワードの安全性を評価する目的で利用されます。
John the Ripperとは
John the Ripperは、オープンソースのパスワード監査ツールです。
主に、パスワードハッシュを解析し、設定されているパスワードが十分に強固であるかを確認するために使用されます。
辞書攻撃や総当たり攻撃などの手法に対応しており、多くのOSやハッシュ形式をサポートしています。
パスワードハッシュとは
パスワードハッシュとは、パスワードをハッシュ関数によって一定の文字列へ変換したものです。
通常、システムではパスワードそのものではなく、ハッシュ値を保存することで、万が一データベースが漏えいした場合でもパスワードが直接知られないようにしています。
コマンドの説明
| 項目 | 説明 |
|---|---|
| John the Ripper | パスワードハッシュを解析し、パスワードの強度を検証するためのオープンソースツールです。 |
| オフライン解析 | ネットワーク経由ではなく、取得済みのハッシュデータをローカル環境で解析する手法です。 |
| 辞書攻撃 | あらかじめ用意された単語リストを利用してパスワードを検証する方法です。 |
| ブルートフォース攻撃 | あらゆる文字の組み合わせを試行してパスワードを検証する方法です。 |
補足
John the Ripperは、システム管理者やセキュリティ診断担当者が、パスワードの安全性を確認する目的で利用するツールです。
実際の運用環境で使用する場合は、必ず対象システムの管理者から明示的な許可を得たうえで実施する必要があります。
11. SSHでリモートサーバーへ接続する
次に、SSHを利用してリモートサーバーへ接続します。
SSHは、ネットワーク経由でサーバーへ安全にログインし、コマンド操作を行うためのプロトコルです。
接続後は、現在のユーザーが利用可能なsudo権限を確認します。

ssh webadmin@$IP のコマンドを実行するとwebadminユーザーでのログインに成功できる。

次にsudo -l コマンドでwebadminユーザーがsudoを実行できるか確認する。
確認すると、/bin/niceプログラムの実行と、/notesディレクトリー配下のファイルを指定することをできることが分かる。
SSHとは
SSH(Secure Shell)は、ネットワーク越しにサーバーを安全に操作するための通信プロトコルです。
通信内容は暗号化されるため、ユーザー名やパスワードなどの認証情報を安全に送受信できます。Linuxサーバーのリモート管理で広く利用されています。
実行コマンド
ssh webadmin@$IP
sudo -l
コマンドの説明
| コマンド | 説明 |
|---|---|
ssh webadmin@$IP |
webadminユーザーとして指定したサーバーへSSH接続します。 |
sudo -l |
現在ログインしているユーザーが実行可能なsudoコマンドや権限を一覧表示します。 |
sudoとは
sudo(Super User DO)は、一般ユーザーが管理者権限を必要とするコマンドを実行するための仕組みです。
管理者はsudoersファイルを利用して、ユーザーごとに実行できるコマンドを細かく制御できます。
sudo -lとは
sudo -lは、現在のユーザーに許可されているsudo権限を一覧表示するコマンドです。
システム管理者はこのコマンドを利用して、ユーザーに付与されている権限を確認できます。また、セキュリティ監査においても、権限設定が適切かを確認する目的で利用されます。
12. niceコマンドでルートシェルを剥奪する
niceコマンドでシェルをroot権限で実行してroot.txtファイルを読み込みます。

licorne unijambiste qui fuit au bout d'un double arc-en-ciel. フランス語でこのような結果が出ました。
日本語に翻訳すると、「二重の虹の先へ逃げていく片足のユニコーン。」です。
niceコマンドとは
niceコマンドは、Linuxでプログラムを実行する際のCPU使用優先度(Nice値)を設定するためのコマンドです。
Nice値を変更することで、実行するプログラムの優先度を調整でき、システム全体の負荷を管理しやすくなります。
一般ユーザーは優先度を下げる(Nice値を大きくする)ことはできますが、優先度を上げる(Nice値を小さくする)には管理者権限が必要です。
基本的な使い方
nice コマンド
または、Nice値を指定して実行する場合は次のように記述します。
nice -n 10 コマンド
利用例
niceコマンドは、バックアップ処理や大容量ファイルの圧縮など、CPU負荷の高い処理を他の作業へ影響を与えにくく実行したい場合によく利用されます。
終わり
これでPotatoマシンの攻略は終了です!
正直、最初は分からないことだらけで苦戦しました。
少しづつでも理解してこれからの攻略に繋げていきたいです!
次回も引き続きがんばって行きます!
長々とご覧いただきありがとうございました!!












