SQLインジェクションの例を動画で解説!【デモ動画シリーズ第2回】
デモ動画作ってみたよ、2回目の今回のテーマは「SQLインジェクション」です。
この動画シリーズの記事はこちら
- 第1回「クロスサイトスクリプティング(XSS)の例を動画で解説!」
- 第2回「SQLインジェクション の例を動画で解説!」←本記事
- 第3回「権限の不備 の例を動画で解説!」
- 第4回「パストラバーサル の例を動画で解説!」
SQLインジェクションとは、「外部からSQL文を送信してWebアプリケーションのデータベースを不正に操作(攻撃)されてしまう状態のこと(脆弱性)。またはその攻撃」のことをいいます。外部からデータベースを操作されてしまうんですね。ああ、恐ろしい。
ところで、SQLインジェクション、イメージできました?
- SQLインジェクションの脆弱性があった時、どんな感じで攻撃されてしまうんだろう?
- 実際に攻撃されていく様子を見てみたいんだよなぁ
このように思いませんか? ワタクシのことなんですが。
そこで、前回のクロスサイトスクリプティングに続き、先輩にSQLインジェクションのデモ動画を作ってもらいました。
SQLインジェクションについては、先に以下の記事をお読みいただくと、さらに理解しやすいかと思います。
動画と文章の両方を同じ内容でご用意しましたので、動画派の方、テキスト派の方、それぞれお好みの方をご覧ください。もちゃじは動画でイメージして、テキストで復習が分かりやすかったです。
注意事項
この記事では、脆弱性への理解を深めていただくことを目的にSQLインジェクションの具体的な手順や内容を紹介しています。ここで紹介していることを実際にお試しになる場合は、一般公開されていないご自身で開発したWebサイトでお試しください。一般公開されている、もしくは他者のWebサイトに対して、行うことのないようにお願いいたします。
動画で見る「SQLインジェクション」のデモ
文章で読む「SQLインジェクション」のデモ
※以下、動画と同じ内容です。
「SQLインジェクション」は、非常に危険な脆弱性の一つです。情報漏えいの他、データの改ざんや破壊を招く恐れがあり、広範囲にわたって被害が及ぶ危険性があります。
このデモでは「通信を横取りして改ざんし、Webサイトに登録されているクレジットカード情報を抜き取る」ことを行います。
では、実際に見てみましょう。
1. ターゲット:フルーツショップの通販サイトに登録しているユーザーのクレジットカード情報
このWebサイトは、デモ用に開発したものです。フルーツを購入できる「架空のフルーツショップ」の通販サイトです。このサイトを利用するユーザーは、フルーツを購入した代金の支払いのため、クレジットカード情報を登録しています。
自分の登録情報を確認するために、マイページに行ってみましょう。
ログインしているユーザーはデモ太郎さん。マイページでは、このように、デモ太郎さんが登録したクレジットカード情報を確認することができます。
2. 攻撃を仕掛ける
実は、このマイページには、SQLインジェクションの脆弱性が存在しています。実際に、マイページからのリクエスト情報の一部を改ざんして、攻撃を仕掛けてみましょう。
リクエスト情報の改ざんには、ローカルプロキシツールの一つ「Burp Suite」と呼ばれるソフトウェアを利用します。これは無料でも使用することができるツールです。
このBurp Suiteの「インターセプト」と呼ばれる機能をオンにします。この機能により、ブラウザとサーバー間でやりとりしている通信を傍受して改ざんします。機能をオンにした状態で通信すると・・・
たくさんの情報が出てきましたね。これはマイページからサーバーへ送られるHTTPリクエストを傍受したものです。
このリクエスト情報の中の、リクエストの送信先や送信しているパラメータの内容から、クレジットカード情報を取得するリクエストを探します。
今回はリクエストの送信先に「get_creditcard」とあり、パラメータに「userid」という名前が利用されていました。
これらの情報から、攻撃者は「このuseridというパラメータを利用して、データベースからクレジットカード情報を取得している」と推察して攻撃を仕掛けていきます。
一番下に”userid”というパラメータがありますね。
この”userid”の”demo”と指定しているところに以下のコードを追加し、攻撃値を含むデータに改ざんします。
' or '1'='1
このコードを追加することで、クレジットカード情報を取得するユーザーの条件は「ユーザーIDが『空』と等しい、または“1”が“1”と等しい」となります。
userid='' or '1'='1'
1が1であるユーザーというのはおかしなように見えますが、SQL文としては正常に処理され、全てのユーザーが該当してしまいます。
この改ざんしたリクエストを送信します。
3. クレジットカード情報が流出
リクエストを送った結果、ログインしている「デモ太郎」のページに、デモ太郎以外のユーザーのクレジットカード情報も表示させることができました。
以上がSQLインジェクションの攻撃手法の一例です。
まとめ
今回は、SQLインジェクションの脆弱性を悪用して、クレジットカード情報が抜き取られてしまうというデモを紹介しました。
なんだか簡単に攻撃されてしまいました。しかも無料のツールを使ってできてしまうなんて、恐ろしすぎる。
今回出てきた用語
インターセプト(intercept) | 横取り(する)、妨害(する)。通信においては、傍受(する) |
ふう、書き終えた
デモ太郎のプロフィール画像の猫さん、かわいすぎてそっちにくぎ付けになり、見てほしいクレカ情報に目がいかないんじゃないかっていう懸念(実体験)。
ライター/もちゃじ
IT業界に縁なく秘書畑をさすらい、前職はインドで社長秘書。ほぼ日本語とパッションのみで乗り切ったずうずうしさはスキルの一つか。完全なインドア派ながらたまにふらりと旅に出る。行き場のない母性を持て余し、友人の犬を溺愛するもほえられる。体が硬く、インドでヨガティーチャーに笑われたことに深く傷つく一面も。
ITド素人の私がWebセキュリティについて学び、レベルアップしていく(予定です)様子をお届けします。学びを発信することで、少しでもWebセキュリティに関する「難しそう」というイメージが下がり、苦手意識のある方たちに届いたらうれしいです。