【ITニュース解説】Irish-Name-Repo 1 - picoCTF '19 (web)

2025年09月07日に「Dev.to」が公開したITニュース「Irish-Name-Repo 1 - picoCTF '19 (web)」について初心者にもわかりやすいように丁寧に解説しています。

作成日: 更新日:

ITニュース概要

picoCTFのウェブ課題「Irish-Name-Repo」は、SQLインジェクションで管理者ログインを迂回する方法を示す。Burp Suiteで通信を傍受し、パスワード欄に「' OR 1=1 --」等の特殊な文字列(ペイロード)を入力。これによりデータベースの認証条件を常に真とし、管理者ページへ不正にアクセスできる。

出典: Irish-Name-Repo 1 - picoCTF '19 (web) | Dev.to公開日:

ITニュース解説

この記事は、Webアプリケーションのセキュリティ脆弱性をテーマにした「picoCTF '19」チャレンジのうち、「Irish-Name-Repo 1」という課題について解説する。このチャレンジの目的は、Webサイトのログイン認証を突破し、管理者ページへのアクセス権限を不正に取得することにある。システムエンジニアを目指す上で、Webアプリケーションが抱えるセキュリティリスクとその対処法を理解することは非常に重要であり、このようなチャレンジはそのための実践的な学習機会となる。

まず、チャレンジを開始するにあたり、Webサイト内を注意深く探索すると、「SQL」という言葉に関するヒントが見つかる。この「SQL」というキーワードは、SQLインジェクションという非常に一般的なWebセキュリティ脆弱性が潜んでいる可能性を示唆している。SQLインジェクションとは、Webサイトの入力フォームなどに不正なSQL(Structured Query Language)文の断片を挿入することで、データベースが意図しない処理を実行させ、情報を窃取したり、認証を迂回したり、さらにはデータベース内のデータを改ざん・削除したりする攻撃手法である。

この種の攻撃を行うためには、WebブラウザとWebサーバー間の通信を詳細に分析し、操作するための特別なツールが必要になる。今回の解説では、Burp Suiteというプロキシツールを使用する。Burp Suiteは、Webアプリケーションのセキュリティ診断において広く利用されるツールで、ブラウザからサーバーへ送信されるすべてのリクエストと、サーバーからブラウザへ返されるすべてのレスポンスを傍受し、内容を確認したり、必要に応じて改変してから先に進めたりする機能を持つ。具体的には、HTTP履歴タブで通信のログを確認し、特定のHTTPリクエストを「Repeater」という機能に送ることで、そのリクエストの内容を自由に編集し、何度でもサーバーに再送信できる。これは、様々な攻撃パターンを試す上で非常に強力な機能である。

具体的な攻撃手順は、まず管理者ログインページに戻ることから始まる。このページで、ユーザー名(USERNAME)の入力欄には「admin」と入力する。そして、パスワード(PASSWORD)の入力欄は、通常であれば正しいパスワードを入力するが、今回はここにSQLインジェクションの「ペイロード」と呼ばれる特殊な文字列を仕込むため、一旦は空のままログイン処理を進める。ログインボタンが押されると、ブラウザからWebサーバーへログイン情報を送るためのPOSTリクエストが送信される。このリクエストをBurp Suiteで傍受し、「Repeater」機能に送り、内容を編集する準備をする。

SQLインジェクションのペイロードには多種多様なものがあるが、このチャレンジで認証を突破するために使用する代表的なペイロードは、「' OR 1=1 --」という文字列である。このペイロードの各要素がどのように機能するかを詳しく見てみよう。

まず、最初の「'」(シングルクォート)は、Webアプリケーションが生成するSQLクエリの中で、パスワード文字列の入力が意図せずに閉じられるようにする役割がある。例えば、データベースがログイン情報を確認するために内部で「SELECT * FROM users WHERE username='admin' AND password='[ユーザーが入力したパスワード]'」のようなSQLクエリを生成していると仮定する。ここに、パスワード欄に「' OR 1=1 --」が入力されると、SQLクエリは「SELECT * FROM users WHERE username='admin' AND password='' OR 1=1 --'」のような形に変化すると考えられる。

次に、「OR 1=1」という部分が重要である。これは、SQLの条件式において「1と1は等しい」という、常に真(true)となる条件を追加している。SQLのOR演算子は、その両側の条件のどちらか一方でも真であれば、全体として真となる特性を持つ。したがって、たとえパスワード欄に入力された文字列がpassword=''(空のパスワード)のように偽であったとしても、「OR 1=1」の部分が常に真であるため、WHERE句全体の条件が真と評価されることになる。これにより、Webアプリケーションは正しいパスワードが入力されたものと誤認し、認証を突破してしまう。

最後に、「--」(ハイフン2つ)は、SQL文におけるコメントアウトの記号である。これ以降に続く文字列は、データベースによってSQLコマンドとしては処理されず、単なるコメントとして無視される。上記の例で言えば、本来のSQLクエリの最後に存在したはずのパスワード文字列を閉じるためのシングルクォート(')や、その後に続く別の条件などが、このコメントアウトによって無効化される。この「--」がなければ、挿入したペイロードによってSQL文の構文エラーが発生し、攻撃が失敗する可能性が高まるため、非常に重要な役割を果たす。

このチャレンジのWebアプリケーションには、debugというパラメータが設けられている点も注目に値する。このパラメータを真(例えば値が1)に設定してリクエストを送信すると、Webアプリケーションが実際にデータベースに対して発行しているSQLクエリの内容が画面に表示されることがある。これは、攻撃者が自分の挿入したペイロードがどのようにSQLクエリに組み込まれ、どのようなSQL文としてデータベースに送られているのかを正確に把握するために非常に役立つ。これにより、ペイロードの微調整や、脆弱性の本質的な理解を深めることが可能になる。

これらの手順とSQLインジェクションのペイロードを適切に利用することで、システムは不正なアクセスと判断せず、管理者としてログインを許可してしまう。結果として、このチャレンジの目標であった管理者ページへのアクセスが達成され、最終的に「picoCTF{s0m3_SQL_c218b685}」という形式のフラグ(課題クリアの証)が得られる。

この課題は、SQLインジェクションというWebアプリケーションの基本的な脆弱性とその攻撃手法を学ぶための優れた例である。システムエンジニアを目指す皆さんは、このような攻撃手法の仕組みを理解することで、将来的に安全なWebアプリケーションを設計・開発するための知識とスキルを身につけることができるだろう。また、Burp Suiteのようなセキュリティツールや、「PayloadsAllTheThings」のような共通の脆弱性ペイロード集が存在することも知っておくと、学習や実務において大いに役立つはずである。

関連コンテンツ