はじめに
SQLインジェクションという脆弱性は危険だとよく言われますが、具体的にどのような怖さがあるのかは具体例を見ないと実感できないと思います。
この記事では、「箱庭BadStore.net」という脆弱性が組み込まれたWebアプリケーションに対して、実際にSQLインジェクションの脆弱性を攻撃し、アカウント情報を漏洩させ管理者としてログインする例をご紹介します。
箱庭BadStore.netについては、以下の記事をを参照してください。
SQLインジェクションとは
SQLインジェクションの具体例を見る前に、SQLインジェクションとはなにか簡単におさらいをしておきましょう。
Webアプリケーションの多くは、データを保管するために、データベースというソフトウェアを利用しています。そして、データベースはSQLという言語で操作することができます。
SQLは、データベースを操作する命令を文字列としてデータベースに渡すのですが、このSQLの文字列の扱いに不備があるときに、SQLインジェクションの脆弱性が発生します。
SQLインジェクションの脆弱性がWebアプリケーションにあると、情報漏えい、データベースのデータ書き換え、認証の回避、任意のプログラムの実行という、事実上、すべての攻撃が実現してしまいます。
このため、SQLインジェクションの脆弱性は、他の脆弱性より危険視され、重大な脆弱性として扱われます。
SQLインジェクションの仕組みとその対策については、以下の記事をを参照してください。
箱庭BadStore.net
箱庭BadStore.netは、Webショッピングストアとして基本的な機能を持っています。
SQLインジェクションの具体例で見るのは、商品検索機能とログイン機能になります。
SQLインジェクションの攻撃を行う
箱庭BadStore.netの商品検索機能には、SQLインジェクションの脆弱性があります。
商品検索機能は、ここですね。
では、ここに、攻撃用文字列である「’ union select null,email,passwd,null from userdb –」を入力して検索してみましょう。
そうすると。なんということでしょう!?
検索結果画面に、Webアプリケーションのアカウント情報のユーザーIDとパスワードが一覧で表示されるじゃないですか!
パスワードはさすがに平文ではないですが、赤枠の部分に注目してください。
あからさまに、管理者のユーザーIDとパスワードが漏洩していますね。
次は、漏洩したパスワードを解読します。
パスワードの解読
「admin」ユーザーのパスワードは「5EBE2294ECD0E0F08EAB7690D2A6EE69」となっており、そのままでは読むことができません。
これは、パスワードが漏洩した時に、すぐに悪用されないよう「ハッシュ化」という処理を行っています。文字列をハッシュ化すると、元の文字列は分からないようになります。
ハッシュ化は、暗号化と似ていますが用途が異なるのでご注意ください。
通常であれば、ハッシュ化したパスワードは解読できませんが、世の中には「レインボーテーブル」というハッシュ化されたパスワードを解読する手法があります。
今回は、とあるサイトでこのパスワードを解読してみました。
すると、MD5というハッシュ形式で「secret」とパスワードが解読されました。
では、実際にログインしてみましょう。
追記:
Twitterで指摘をいただきましたが、このサイトではレインボーテーブルではなく、パスワード辞書攻撃が使用されているようです。
管理者としてログインする
ユーザーIDが「admin」、パスワードが「secret」でログインしてみます。
すると、ログインが成功して管理者としてログインできたことが分かります。
おわりに
SQLインジェクションの脆弱性を攻撃して、アカウント情報を漏えいさせ、パスワードを解読してWebアプリケーションを乗っ取ることに成功しました。
SQLインジェクションの怖さを、少しは体感できたのではないでしょうか。
実際には、情報漏えい以外の被害も多いので、SQLインジェクションは本当に危険な脆弱性と改めて認識してくだされば幸いです。
おまけ
このSQLインジェクションの攻撃例は、以下の発表の際のデモで行った内容になります。
その時の発表資料もありますので、興味がありましたら合わせてご覧ください。
コメント