ハッカーがSQLインジェクションとDDoSを使用してWebサイトを乗っ取る方法

Sep 28, 2025
プライバシーとセキュリティ
未取得のコンテンツ

ハッカーグループのAnonymousとLulzSecのイベントを大まかに追跡しただけでも、悪名高いソニーのハッキングのように、Webサイトやサービスがハッキングされていることを聞いたことがあるでしょう。彼らがそれをどのように行うのか疑問に思ったことはありますか?

これらのグループが使用するツールやテクニックはたくさんあります。これを自分で行うためのマニュアルを提供するつもりはありませんが、何が起こっているのかを理解しておくと役に立ちます。それらについて一貫して耳にする攻撃の2つは、「(分散型)サービス拒否」(DDoS)と「SQLインジェクション」(SQLI)です。仕組みは次のとおりです。

による画像 xkcd

サービス拒否攻撃

それは何ですか?

「サービス拒否」(「分散型サービス拒否」またはDDoSと呼ばれることもあります)攻撃は、システム(この場合はWebサーバー)が一度に非常に多くの要求を受信し、サーバーリソースが過負荷になり、システムが単にロックアップするときに発生します。シャットダウンします。 DDoS攻撃を成功させる目的と結果は、ターゲットサーバー上のWebサイトが正当なトラフィック要求に利用できないことです。

それはどのように機能しますか?

DDoS攻撃のロジスティクスは、例によって最もよく説明できます。

コールセンターを停止することでX社のビジネスを妨害するという目標に100万人(攻撃者)が集まったと想像してみてください。攻撃者は、火曜日の午前9時に全員がX社の電話番号に電話をかけるように調整します。ほとんどの場合、X社の電話システムは一度に100万件の通話を処理できないため、すべての着信回線が攻撃者によって拘束されます。その結果、電話システムが攻撃者からの呼び出しの処理に拘束されているため、正当な顧客の呼び出し(つまり、攻撃者ではない呼び出し)は通過しません。したがって、本質的に、X社は、正当な要求を処理できないためにビジネスを失う可能性があります。

Webサーバーに対するDDoS攻撃は、まったく同じように機能します。 Webサーバーがリクエストを処理するまで、正当なリクエストと攻撃者からどのトラフィックが送信されているかを知る方法は事実上ないため、このタイプの攻撃は通常非常に効果的です。

攻撃の実行

DDoS攻撃の「ブルートフォース」の性質により、同時に攻撃するためにすべてのコンピューターを調整する必要があります。コールセンターの例をもう一度見てみると、これには、すべての攻撃者が午前9時に電話をかけることと、実際にその時間に電話をかけることの両方を知っている必要があります。この原則はWebサーバーの攻撃に関しては確かに機能しますが、実際の有人コンピューターの代わりにゾンビコンピューターを使用すると非常に簡単になります。

ご存知かもしれませんが、マルウェアやトロイの木馬にはさまざまな種類があり、システムに侵入すると、休止状態になり、場合によっては「電話で家に帰って」指示を受けます。これらの指示の1つは、たとえば、午前9時にX社のWebサーバーに繰り返し要求を送信することです。そのため、それぞれのマルウェアのホームロケーションを1回更新するだけで、1人の攻撃者が数十万台の侵入先のコンピューターを即座に調整して大規模なDDoS攻撃を実行できます。

ゾンビコンピュータを利用することの利点は、その有効性だけでなく、攻撃者が攻撃を実行するために実際にコンピュータを使用する必要がないため、匿名性にもあります。

SQLインジェクション攻撃

それは何ですか?

「SQLインジェクション」(SQLI)攻撃は、不十分なWeb開発手法を利用するエクスプロイトであり、通常、データベースセキュリティの欠陥と組み合わされます。攻撃が成功した結果は、ユーザーアカウントのなりすましから、それぞれのデータベースまたはサーバーの完全な侵害にまで及ぶ可能性があります。 DDoS攻撃とは異なり、Webアプリケーションが適切にプログラムされていれば、SQLI攻撃を完全かつ簡単に防ぐことができます。

攻撃の実行

Webサイトにログインしてユーザー名とパスワードを入力するたびに、資格情報をテストするために、Webアプリケーションは次のようなクエリを実行する場合があります。

SELECT UserID FROM Users WHERE UserName = 'myuser' AND Password = 'mypass';

注:SQLクエリの文字列値は一重引用符で囲む必要があるため、ユーザーが入力した値の前後に表示されます。

したがって、ユーザーIDが返されるためには、入力されたユーザー名(myuser)とパスワード(mypass)の組み合わせがUsersテーブルのエントリと一致する必要があります。一致するものがない場合、UserIDは返されないため、ログイン資格情報は無効です。特定の実装は異なる場合がありますが、メカニズムはかなり標準的です。

それでは、ユーザーがWebフォームに入力した値に置き換えることができるテンプレート認証クエリを見てみましょう。

ユーザーからユーザーIDを選択WHEREUserName = '[user]' AND Password = '[pass]'

一見、これはユーザーを簡単に検証するための簡単で論理的な手順のように見えるかもしれませんが、ユーザーが入力した値の単純な置換がこのテンプレートで実行されると、SQLI攻撃の影響を受けやすくなります。

たとえば、「myuser’–」がユーザー名フィールドに入力され、「wrongpass」がパスワードに入力されたとします。テンプレートクエリで単純な置換を使用すると、次のようになります。

SELECT UserID FROM Users WHERE UserName = 'myuser'-'AND Password =' wrongpass '

このステートメントの鍵は、2つのダッシュを含めることです (ーー) 。これはSQLステートメントの開始コメントトークンであるため、2つのダッシュ(両端を含む)の後に表示されるものはすべて無視されます。基本的に、上記のクエリはデータベースによって次のように実行されます。

SELECT UserID FROM Users WHERE UserName = 'myuser'

ここでの明白な省略は、パスワードチェックの欠如です。ユーザーフィールドの一部として2つのダッシュを含めることで、パスワードチェック条件を完全にバイパスし、それぞれのパスワードを知らなくても「myuser」としてログインできました。クエリを操作して意図しない結果を生成するこの行為は、SQLインジェクション攻撃です。

どのようなダメージを与えることができますか?

SQLインジェクション攻撃は、怠慢で無責任なアプリケーションコーディングによって引き起こされ、完全に防止できます(これについては後で説明します)が、実行できる損傷の程度はデータベースの設定によって異なります。 Webアプリケーションがバックエンドデータベースと通信するには、アプリケーションがデータベースへのログインを提供する必要があります(これは、Webサイト自体へのユーザーログインとは異なります)。 Webアプリケーションに必要なアクセス許可に応じて、このそれぞれのデータベースアカウントには、既存のテーブルでの読み取り/書き込みアクセス許可から完全なデータベースアクセスまで、あらゆるものが必要になる場合があります。これが今はっきりしていない場合は、いくつかの例がある程度明確にするのに役立つはずです。

上記の例に基づいて、たとえば、を入力すると、それを確認できます。 「youruser '-」、「admin'-」 または他のユーザー名であれば、パスワードを知らなくても、そのユーザーとしてサイトに即座にログインできます。システムに入ると、実際にはそのユーザーではないことがわからないため、それぞれのアカウントに完全にアクセスできます。通常、Webサイトには少なくともそれぞれのデータベースへの読み取り/書き込みアクセス権が必要であるため、データベースのアクセス許可はこのためのセーフティネットを提供しません。

ここで、Webサイトがそれぞれのデータベースを完全に制御し、レコードの削除、テーブルの追加/削除、新しいセキュリティアカウントの追加などを行うことができると仮定します。一部のWebアプリケーションでは、このタイプのアクセス許可が必要になる可能性があることに注意してください。フルコントロールが付与されることは自動的に悪いことではありません。

したがって、この状況で発生する可能性のある損害を説明するために、上記のコミックで提供されている例を使用して、ユーザー名フィールドに次のように入力します。 "Robert '; DROPTABLEユーザー;-"。 単純な置換の後、認証クエリは次のようになります。

SELECT UserID FROM Users WHERE UserName = 'Robert'; DROPTABLEユーザー;-'ANDPassword =' wrongpass '

注:SQLクエリ内のセミコロンは、特定のステートメントの終了と新しいステートメントの開始を示すために使用されます。

これは、データベースによって次のように実行されます。

SELECT UserID FROM Users WHERE UserName = 'Robert'

DROPTABLEユーザー

そのため、SQLI攻撃を使用して、Usersテーブル全体を削除しました。

もちろん、許可されたSQL権限に応じて、攻撃者は値を変更したり、テーブル(またはデータベース全体)をテキストファイルにダンプしたり、新しいログインアカウントを作成したり、データベースインストール全体を乗っ取ったりする可能性があるため、さらに悪いことが起こります。

SQLインジェクション攻撃の防止

前に何度か述べたように、SQLインジェクション攻撃は簡単に防ぐことができます。 Web開発の基本的なルールの1つは、上記のテンプレートクエリで単純な置換を実行したときのように、ユーザー入力を盲目的に信頼することは決してないということです。

SQLI攻撃は、入力のサニタイズ(またはエスケープ)と呼ばれるものによって簡単に阻止されます。サニタイズプロセスは、SQLステートメント内の文字列を途中で終了するために使用できないように、インラインの一重引用符( ‘)文字を適切に処理するだけなので、実際には非常に簡単です。

たとえば、データベースで「O’neil」を検索する場合、Oの後の単一引用符によって文字列が途中で終了するため、単純な置換を使用できませんでした。代わりに、それぞれのデータベースのエスケープ文字を使用してサニタイズします。インライン一重引用符のエスケープ文字が各引用符の前に\記号を付けていると仮定します。したがって、「O’neal」は「O \ ’neil」としてサニタイズされます。

この単純な衛生行為は、SQLI攻撃をほぼ防ぎます。説明のために、前の例に戻って、ユーザー入力がサニタイズされたときに結果のクエリを確認しましょう。

myuser'- 間違ったパス

SELECT UserID FROM Users WHERE UserName = 'myuser \'-'AND Password =' wrongpass '

myuserの後の一重引用符はエスケープされているため(つまり、ターゲット値の一部と見なされます)、データベースは文字通りのUserNameを検索します。 「myuser'-」。 さらに、ダッシュはSQLステートメント自体ではなく文字列値に含まれているため、SQLコメントとして解釈されるのではなく、ターゲット値の一部と見なされます。

ロバート '; DROPTABLEユーザー;- 間違ったパス

SELECT UserID FROM Users WHERE UserName = 'Robert \'; DROPTABLEユーザー;-'ANDPassword =' wrongpass '

Robertの後に一重引用符をエスケープするだけで、セミコロンとダッシュの両方がUserName検索文字列に含まれるため、データベースは文字通り検索します。 "Robert '; DROPTABLEユーザー;-" テーブル削除を実行する代わりに。

要約すれば

Web攻撃は進化し、より洗練されたり、別のエントリポイントに焦点を合わせたりしますが、それらを悪用するように設計された、無料で入手できるいくつかの「ハッカーツール」のインスピレーションとなった、試行錯誤された攻撃から保護することを忘れないでください。

DDoSなどの特定の種類の攻撃は簡単に回避できませんが、SQLIなどの他の種類の攻撃は簡単に回避できます。ただし、これらのタイプの攻撃によって発生する可能性のある損害は、講じた予防措置に応じて、不便なものから壊滅的なものまでさまざまです。

DDOS Attack On Azerbedzjan Web Sites

Tutorial SQL Injection With SQLmap

How A Hacker Could Attack Web Apps With Burp Suite & SQL Injection

Web Application SECURITY In ASP.NET Core - Part 1 - SQL Injection

Hacking Websites With SQL Injection - Computerphile

Anonymous - How To Hack A Website By DDosing And SQL Injection

Hacking With SQL Injection Attacks (and Where To Practice Them Safely)

How A Hacker Could Attack Website With SQL Injection | Hacking Tutorial


プライバシーとセキュリティ - 最も人気のある記事

あなたに関するデータをFacebookにアップロードしている会社を確認する方法

プライバシーとセキュリティ Feb 4, 2025

未取得のコンテンツ マイケル・クライダー Facebookがあなたに関する膨大な量のデータを保存しているのは当然のこ�..


Facebookはあなたの便宜のためにあなたのパスワードを偽造します

プライバシーとセキュリティ Jan 24, 2025

未取得のコンテンツ パスワードの正しいバージョンが、使用する正確な大文字と文字/記号のシーケンスだけだと思う​​場合は、シ..


気を付けろ:ブラウザクラッシュテクニカルサポートポップアップが戻ってきた

プライバシーとセキュリティ Jul 4, 2025

未取得のコンテンツ 新たに悪用されたブラウザのバグのおかげで、PCの速度が低下し、大ざっぱな1-800の番号で「Microsoft」に電話する..


macOSでrootユーザーを有効にする方法

プライバシーとセキュリティ Jan 9, 2025

Macでrootアカウントを有効にしたいですか?できますが、機能はシステム環境設定に少し埋もれています。見つける方法は次のとおりで..


Steamプロファイルをプライベートにする方法

プライバシーとセキュリティ Dec 22, 2024

未取得のコンテンツ 昨日、仲間のハウツーオタク作家 エリックレイヴンズクラフト 私たちのオフィスのチャットルーム�..


Microsoft、Windows10の自動更新でPCを壊さないでください

プライバシーとセキュリティ Jul 11, 2025

未取得のコンテンツ ねえマイクロソフト、私のPCを壊すのをやめてくれませんか。 2017年3月8日にリリースされた最新のWPDドライバー�..


プライベートブラウジングの仕組みと、完全なプライバシーを提供しない理由

プライバシーとセキュリティ Jul 5, 2025

未取得のコンテンツ プライベートブラウジング、プライベートブラウジング、シークレットモード–多くの名前がありますが、すべ�..


無料Wi-Fiのスコアリングに関するハウツーオタクガイド

プライバシーとセキュリティ Sep 18, 2025

未取得のコンテンツ すぐに利用できるインターネットアクセスは、ラップトップ、ネットブック、タブレット、およびその他のポー�..


カテゴリ