質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.33%

  • HTML

    9613questions

    HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

  • SQL

    2570questions

    SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

  • サーバ

    803questions

    サーバは、 クライアントサーバモデルにおいてクライアントからの要求に対し 何らかのサービスを提供するプログラムを指す言葉です。 また、サーバーソフトウェアを稼動させているコンピュータ機器そのもののことも、 サーバーと呼ぶ場合もあります。

  • セキュリティー

    475questions

    このタグは、コンピューターシステムの安全性やデータの機密性に関連したトピックの為に使われます。

SQLインジェクションを実際に試すには?

解決済

回答 6

投稿 編集

  • 評価
  • クリップ 2
  • VIEW 987

KUSAKAGen

score 2

 質問

このような質問を見てくださりありがとうございます。
少し前からキュリティについて勉強し始めました。そんな中で、サイトへの攻撃方法にSQLインジェクションというものがあるととあるサイトで見ましたyoutubeの動画で見ました(追記。動画URL:https://www.youtube.com/watch?v=EOJQZCfFxj8)。どうやら認証画面で製作者側が意図しない入力をすることで、はては他人としてログインできてしまうとか。その入力はホームページを作るHTMLというプログラミング言語に基づいていて、うまい具合に不具合を生じさせるそうですね(ここら辺も間違っていたらご指摘ください)。

さて、本題に入ります。
私は勉強するにあたり、実際に手を動かしてみたい派の人間なので、攻撃方法があると聞けば攻撃したいのです。しかし他人のページに攻撃するのは犯罪だと思いますし、自分のページを作って攻撃しようと思いました。
早速昨日HTMLを打って簡単にですが自分のページを作りました(参考:http://www.shoshinsha.com/hp/index.html)。肝心の認証ですが、どうやらBasic認証というのがあるらしく、これが簡単そうでした(参考:https://allabout.co.jp/gm/gc/23780/)。しかしこれを試すにはホームページを公開する必要があるそうです(自分のページがWebサーバのどこにあるのかなどの情報が必要と書いてあった→サイトを公開する必要がある?)。そこでレンタルサーバを調べ、Xdomainなるところがいいという話を聞き、「よし新規申し込みだー!」となってたのですが、今になって「あれ?公開したページに攻撃したら、自作とはいえ違法じゃないの?」となりました。

質問です。
・自分で作ったサイトに攻撃するのはアリかナシか(ナシなら、ご存知の範囲で実際に試せる方法をお聞かせください)。
・そもそもお前勘違いしてるよ?という個所はないか(あったなら、お恥ずかしい姿をお見せしましたことお詫びします。ぜひお聞かせください)。
・こういったセキュリティ関係の質問はどこにすればいいのか(ここにするのは場違いでは?)

よろしくお願いします。

// 2018/6/26 14:45 追記しました。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • mts10806

    2018/06/26 14:25

    質問は編集できるので質問本文に追記してください。

    キャンセル

  • mts10806

    2018/06/26 14:25

    「信憑性が低い」かどうかはその参照先を提示していただかないと判断できないので、なるべく調べたことは提示してください。

    キャンセル

  • Orlofsky

    2018/06/26 15:21

    URLは https://teratail.com/help#about-markdown の[リンク]を使ってください。

    キャンセル

回答 6

+9

自分で作ったサイトに攻撃するのはアリかナシか(ナシなら、ご存知の範囲で実際に試せる方法をお聞かせください)。

攻撃を試したいだけなら、自分のパソコン内に直接、あるいは仮想マシンの中にローカルサーバを立てて、そこで試せば(外部に対する不正アクセスをするようなものは別として)法的にも、他人に迷惑がかかることもなく作業を行えます。

共有のレンタルサーバで攻撃実験を行った場合、やり方によっては同じサーバに同居する他のユーザーに迷惑がかかります。

そもそもお前勘違いしてるよ?という個所はないか

根本的に、データベースに何も書き込まないHTML+Basic認証だけのサイトでは、SQLにアクセスする機会もありませんので、SQLインジェクションの発生する余地はありません。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

+5

・自分で作ったサイトに攻撃するのはアリかナシか(ナシなら、ご存知の範囲で実際に試せる方法をお聞かせください)。

本番サイトに想定外のデータを渡して最終テストすることは間違いではありません。
しかしテストはあくまでテスト機で行うのが原則です。

そもそもがインジェクションは対策した状態で公開しているはずなので、
本番機でインジェクションを起こさせることは理論的にはむずかしいでしょう。
(というか、簡単に起きるような状況なら公開してはいけません)

ポイントとしてはマルチクエリーなどが実行できる環境もしくは
SQL文の末尾「;」や「\g」でプログラム的に分割するような処理を
書いているならテスト段階で相当なチェックが必要になります
シングルクエリーのみ対応で、プレースホルダーで処理しているなら
よほどのことがなければ大丈夫でしょう

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

checkベストアンサー

+4

どうやら認証画面で製作者側が意図しない入力をすることで、はては他人としてログインできてしまうとか。その入力はホームページを作るHTMLというプログラミング言語に基づいていて、うまい具合に不具合を生じさせるそうですね(ここら辺も間違っていたらご指摘ください)。

正しくは
HTMLから入力された情報をサーバーに送信して、データベースへの問い合わせなどを行っている処理があった場合に、 その処理で利用しているSQLというデータベース問い合わせの指示文に対して、その入力内容から意図的に悪さをするコードを注入することで不具合を起こさせる

のが、SQLインジェクションです。

例えば、情報を1件だけ取得することが意図されているSQL文に対して、その1件の絞込みを回避するようなコードを入れ込んで、全件取得するようなこととか、ですね。
※上記Wikipediaの実行例参照

基本的にはHTMLから送信された情報をそのままデータベースの問い合わせに利用するのは良くありません。
というのは、どこの誰がどのように使うかは作った側は基本選べないため、ユーザからの入力送信内容は一切信用しないという原則があるからです。
そのため、よくあるのが、半角英数のみと書いてあるところに日本語を打って送信しようとしたら「不正文字です」とか、10文字と書いてあるところに沢山文字を打ったら「規定文字数超過です」といった
エラーメッセージが表示されますよね?
これは「バリデーション(入力値の妥当性検証)」というものになります。
バリデーションはデータベースに情報を格納する際に、意図しない情報を取り込むのを防ぐための第1関門の役割になっています。

もちろん、取り込むだけではなく、問い合わせ(要は検索ですね)のときにも、本来、ユーザに提示することを意図しない情報を提示してしまってはいけません。
この対策についてはHTMLではなく、HTMLからの入力情報を受け取るサーバー側のプログラミング言語の役割となります。
(PHPやJavaなど、耳にされたことはあると思います)
そのサーバー側のプログラムが、対策を怠っているときに起きるのが、今回懸念されているSQLインジェクションを含めたそれぞれの脅威となります。

チェックリストも含めると、下記が参考になります。

肝心の認証ですが、どうやらBasic認証というのがあるらしく、これが簡単そうでした(参考:https://allabout.co.jp/gm/gc/23780/)。しかしこれを試すにはホームページを公開する必要があるそうです(自分のページがWebサーバのどこにあるのかなどの情報が必要と書いてあった→サイトを公開する必要がある?

既に回答に出ていますが、
Webサーバーに乗せる必要はありますが、試すだけであればわざわざレンタルする必要はありません。
あとベーシック認証ではデータベース関係ないので、SQLインジェクションの対象にはなりません。
別の脅威はあると思いますが・・。

ローカルPCにWebサーバーを立てて、外からアクセスがない状態で試すことは幾らでも可能です。
つまり、

今になって「あれ?公開したページに攻撃したら、自作とはいえ違法じゃないの?」となりました。

という懸念なしに試すことが可能です。
共有サーバとなると他の利用者に迷惑をかける可能性もありますしね。

ローカルPCにWebサーバーを立てる方法については色々ありますが、

「データベースの構築もする」
「脅威に対する対策もする」

ということで一番お手軽なのは上記の記事のXAMPPが良いと思います。
PHP+MySQLが一発でインストールできるので、すぐ試したい場合にはもってこいです。
※もちろんそれぞれある程度覚える必要はありますが

・こういったセキュリティ関係の質問はどこにすればいいのか(ここにするのは場違いでは?)

taratailでももちろん良いと思います。
そのための「セキュリティー」タグです。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/06/26 14:59 編集

    詳しい回答ありがとうございます。

    PCにローカルサーバを立てるというのはなるほどです。SQLインジェクション以外にも様々なセキュリティ関係の知識が身に付きそうですし、またやってみたいと思います。

    SQL文はデータベースへの命令文で、データベース内のデータを扱う際使用する。ログイン時などユーザーからの入力をもとにデータベース内を探索する時、その入力にSQL文に相当する入力、例えばデータの取得などがあるとデータベース内の情報を取得されてしまう、と。これがSQLインジェクション。
    Basic認証ではデータベースにアクセスしない、つまりSQL文を使用しないため、質問で述べたWebページではSQLインジェクションなんて起こらない。

    このような理解でよろしいでしょうか?

    キャンセル

  • 2018/06/26 15:08

    はい。間違いありません。
    ベーシック認証はあくまで簡易認証であり脅威0ではありません。
    SQLインジェクションが起こらないからといってそれが全てでもありません。
    ユーザの入力を受け付けることのない、単に見せるためだけのページであっても何かしら脅威はあります。

    キャンセル

+4

Javaがインストールされている環境ならeasybuggyがSQLインジェクションを試すのに最適かと。
メモリリーク、デッドロック、リダイレクトループ、JVMクラッシュ...バグだらけのWebアプリケーションを使ってバグを理解する

easybuggy.jarをダウンロードしてコマンドプロンプトよりjava -jar easybuggy.jarで起動。
その後、ブラウザより http://localhost:8080 にアクセス。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

+1

解決済みの質問ですが、「ハッキングをやってみたい」のなら、こういうのがありますよ。

8946|ハッキングチャレンジサイト

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

ここで紹介されている OWASP ZAP で、自身のサイトのチェックをしてみては如何でしょう?
(これらのツールで外部のサイトのチェックはしては駄目です。絶対に!)
SQLインジェクションがレポートされたら、その URL のパターンを手動入力などしてみるとよいかもしれません。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.33%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る

  • HTML

    9613questions

    HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

  • SQL

    2570questions

    SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

  • サーバ

    803questions

    サーバは、 クライアントサーバモデルにおいてクライアントからの要求に対し 何らかのサービスを提供するプログラムを指す言葉です。 また、サーバーソフトウェアを稼動させているコンピュータ機器そのもののことも、 サーバーと呼ぶ場合もあります。

  • セキュリティー

    475questions

    このタグは、コンピューターシステムの安全性やデータの機密性に関連したトピックの為に使われます。