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

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

新規登録して質問してみよう
ただいま回答率
85.50%
セキュリティー

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

SQL

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

サーバ

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

HTML

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

Q&A

解決済

6回答

2185閲覧

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

KUSAKAGen

総合スコア9

セキュリティー

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

SQL

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

サーバ

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

HTML

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

0グッド

3クリップ

投稿2018/06/26 05:03

編集2018/06/26 05:49

質問

このような質問を見てくださりありがとうございます。
少し前からキュリティについて勉強し始めました。そんな中で、サイトへの攻撃方法に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 追記しました。

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2018/06/26 05:16 編集

どのようなサイトで見たのか、その記事URLもご提示ください。 >サイトへの攻撃方法にSQLインジェクションというものがあるととあるサイトで見ました なんとなくその記事の内容も正しく理解されてないようなので(もしくは記事がそこまで深く言及していない)
m.ts10806

2018/06/26 05:25

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

2018/06/26 05:25

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

回答6

0

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

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

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

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

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

投稿2018/06/26 05:12

maisumakun

総合スコア145121

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

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

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

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

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

投稿2018/06/26 05:13

yambejp

総合スコア114572

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

どうやら認証画面で製作者側が意図しない入力をすることで、はては他人としてログインできてしまうとか。その入力はホームページを作る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 05:39

編集2018/06/26 05:50
m.ts10806

総合スコア80765

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

KUSAKAGen

2018/06/26 06:05 編集

詳しい回答ありがとうございます。 PCにローカルサーバを立てるというのはなるほどです。SQLインジェクション以外にも様々なセキュリティ関係の知識が身に付きそうですし、またやってみたいと思います。 SQL文はデータベースへの命令文で、データベース内のデータを扱う際使用する。ログイン時などユーザーからの入力をもとにデータベース内を探索する時、その入力にSQL文に相当する入力、例えばデータの取得などがあるとデータベース内の情報を取得されてしまう、と。これがSQLインジェクション。 Basic認証ではデータベースにアクセスしない、つまりSQL文を使用しないため、質問で述べたWebページではSQLインジェクションなんて起こらない。 このような理解でよろしいでしょうか?
m.ts10806

2018/06/26 06:08

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

0

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

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

投稿2018/06/26 05:31

umyu

総合スコア5846

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

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

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

投稿2018/08/27 23:34

hayataka2049

総合スコア30933

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

  • 脆弱性診断・脆弱性検査ツール5選

https://webrage.jp/techblog/security_tool/

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

投稿2018/08/29 23:03

katoy

総合スコア22324

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問