忍者ブログ

プログラミングの練習

プログラミングの問題やプログラミング関連知識、ソフトウェアのテストについてのブログです

【PicoCTF】複数の命令で扉を開け!「ping-cmd」のコマンドインジェクションアプローチ

前回に続き、愛用のM3 MacBook Airのターミナルを相棒に、CyLab Security Academy(旧PicoCTF)の「Web Exploitation」または「General Skills」カテゴリにある問題「ping-cmd」に挑戦しました!


今回の問題は、入力値の検証の隙を突く**「OSコマンドインジェクション」**がテーマ。どのようなヒントから脆弱性を見抜き、複数の命令を組み立てていったのか、そのアプローチをまとめておきます。




1. 「ping-cmd」とはどんな問題?

問題文とヒントを見ると、次のように書かれています。


  • ・カテゴリ: Web Exploitation / General Skills(難易度:Easy)

    ・問題文: 「Can you make the server reveal its secrets? It seems to be able to ping Google DNS, but what happens if you get a little creative with your input?(サーバーに秘密を明かさせることができますか?Google DNSにpingを飛ばせるようですが、入力をちょっと工夫するとどうなるでしょうか?)」

    ・ヒント: 「OSのコマンドとして実行します」「一度に複数の命令出してみて」

Netcat(nc)で接続する対話型インターフェースになっており、IPアドレスの入力を求められますが、制限として「8.8.8.8しか許可していない」と表示されます。しかし、ヒントにある「OSコマンドとしての実行」や「一度に複数の命令を出す」というキーワードが、今回の最大の攻略の糸口になります。




2. 2つのステップでコマンドインジェクションを仕掛ける

M3 MacBook AirのターミナルからNetcatでサーバーに接続し、シェル文字を用いた入力の工夫を試みます。


  • 1. 区切り文字を用いたファイル構造の偵察

    8.8.8.8; ls

    許可されているIPアドレスの後にセミコロン(;)を挟んで別のコマンドを連結し、サーバー内部のファイル一覧(flag.txt など)を確認します。

  • 2. ターゲットファイルの読み込み

    8.8.8.8; cat flag.txt

    同様にコマンドセパレータを活用して、見つけたフラグファイルの中身を標準出力へ強制的に吐き出させます。

【ポイント】
「複数の命令を一度に出す」というヒント通りにコマンドの区切り文字を利用することで、制限された入力をすり抜けて任意のシステムコマンドを実行できるのが、OSコマンドインジェクションの恐ろしさであり、パズルとしての醍醐味ですね!


3. まとめ


  • ・「ping-cmd」は、入力値がそのままOSのシェルへ渡される脆弱性を突き、コマンドの連続実行によって目的を果たす問題

    ・「一度に複数の命令を出す」というヒントから、セミコロン等の区切り文字を活用する発想が重要

    ・問題文やヒントの行間を読み解き、想定された脆弱性アプローチを綺麗にハマらせたときの快感は格別!

入力値のバリデーションの裏側にある仕組みを想像しながら、ターミナルから一撃で攻略できると本当に気持ちが良いですね。次回のチャレンジもコマンドラインを武器に華麗に攻略していきたいと思います!

PR