1 Oracle Oracle は、比較的大きな市場シェアを持つ比較的初期の RDBMS データベースとして導入するのが簡単で、一部の非常に大規模なデータベースでよく使用されます。さまざまな SQL 言語の優れたサポートに加えて、さまざまな豊富なパッケージ、ストアド プロシージャも提供し、Java やライブラリの作成もサポートするため、ハッキングに便利です。
Oracle 自体には、多くのデフォルト アカウントと多くのストアド プロシージャがあり、これらのストアド プロシージャはシステムによって作成されており、ここ数年で、オーバーフローや SQL を含む多くの Oracle の脆弱性が公開されています。注射も含めて。ここで、SQL インジェクションの脆弱性は特に重要です。Oracle では、他のキーワード AUTHID CURRENT_USER を追加しないと、作成されたストアド プロセスは実行時に作成者として実行され、パブリックにはこれらのストアド プロセスへの呼び出し権限がありません。組み込みストアドプロセスにインジェクションがあるため、一般ユーザーは簡単に Oracle システム権限にアップグレードできます。 Oracle 自体には多くの組み込みアカウントがあり、その一部にはデフォルトのパスワードがあり、CONNECT 権限が付与されています。このように、Oracle ポートがファイアウォールで保護されておらず、リモートで接続できる場合は、デフォルトのアカウントを使用できます。リモートからシステムにログインし、システム内のストアド プロセスの SQL を使用して脆弱性を挿入すると、システムはクラッシュします。もちろん、Oracle へのログインには SID が必要ですが、Oracle の tnslintener はパスワードを設定しません。デフォルトでは、tnscmd を使用できます。pl は、services コマンドを使用してシステムの SID を調べます (新しいバージョンでは、この欠陥は修正されています)。これは、Oracle に侵入する非常に古典的なモードでもあります。
2 Oracle Web ハッキングの技術的背景
Oracle の豊富なシステム テーブル。 Oracle のほぼすべての情報は、データベース操作の現在のステータス、現在のユーザー情報、現在のデータベース情報、ユーザーがアクセスできるデータベースとテーブルの情報など、システム テーブルに格納されます。システム テーブルは、データベース全体のほぼ中心部分です。緊急に必要なシステム テーブルにクエリを実行して、すべての情報を取得します。たとえば、sys.v_$option には、Java をサポートしているかどうかなど、現在のデータベースに関する情報が含まれています。all_tables にはすべてのテーブル情報が含まれ、all_tab_colmuns にはすべての列情報が含まれています。情報の取得の利便性については、後でシステム テーブルを使用して機密情報を取得する方法の説明に関連します。
Oracle のさまざまな脆弱性の中で、ストアド プロシージャのインジェクションについては、特に問題はありません。実際、ストアド プロシージャと関数もユーザー入力を受け取り、それを分析および実行するためにデータベース サーバーに送信します。が選択されている場合 スキーマが SQL 文字列に構築されて実装されている場合、データとコマンドが混在しやすく、結果として SQL インジェクションが発生します。ただし、注入が発生する場所に応じて、注入の脆弱性の性質も異なります。 Oracle は PL/SQL を使用しており、select などの DML 言語で脆弱性が発生します。複数言語の実装をサポートしていないため、GRANT DBA TO LOVEHSELL などの独自の言語やその他の DDL 言語を実行したい場合に発生します。独自の関数またはストアド プロシージャを作成する必要があります。関連する権限がない場合は、カーソル インジェクションを使用し、dbms_sql パッケージを使用して制限を回避することもできます。インジェクションのほとんどは、上記の限定されたインジェクションです。権限を増やす目的を達成するには、自分で作成した他のパッケージまたはカーソルに依存する必要があります。ただし、非常に一般的な脆弱性がまだいくつかありますが、インジェクション環境は非常に緩いものです。この場合、begin と end の間に配置された匿名の pl/sql ブロックのインジェクションは、ほとんど制限なく複数のワードに直接インジェクションされることがわかります。私たちのウェブの問題は、インジェクション技術によってこのような輝きを取り戻しました。
上記は Oracle の攻撃的なテクノロジーの一部ですが、現在の多くの環境では、Web サービスは外部に開かれており、バックエンドのボス データベースはファイアウォールによって保護されており、データベースの詳細な情報が失われることはあり得ません。となり、データベースは動作中であるため、Web 停止の脆弱性を利用してバッキング データベースを攻撃することを検討する必要があります。次に、Oracle Web 環境でインジェクションを開発する方法を見てみましょう。Oracle はさまざまな Web 環境で適切に動作しますが、ASP、.net、および JSP では、さまざまな Web 環境がインジェクションに与える影響は大きくありません。受信パラメータはまったくフィルタリングされませんが、.net 言語と JSP 言語は強力なカテゴリの言語であるため、SQL 言語が数値インジェクションに関してフィルタリングされていない場合でも、パラメータを受け入れるときにエラーが発生する可能性があります。文字列クラスにはさらに多くのパラメータがあります。 PHP 環境では、すべての ' は ' としてエスケープされますが、Oracle 環境では ' はエスケープされません (Oracle 環境での正しいエスケープは '' である必要があります)。ただし、独自のインジェクション ディスコースで ' を使用すると、に変換されてダメージを受けるため、射出中は使用できません。ただし、Web 環境には制限はありません。データベースに関して言えば、ディスコースがパラメータ モードで実行される場合、文字列接続モードが使用されない限り挿入できません (文字列接続モードは比較的単純であり、歴史的な理由により、多くのプログラマはこの形式を好むことが多いため、 ) 文字列接続モードも、select、update、insert などの DML ワード内にあるものと、Web プログラムがキャッチしない場合の pl/sql 匿名ブロック内にあるものに分けられます。エラーに基づいて、現在の言説のカテゴリーを簡単に判断できます。これについては後で説明します。 pl/sql の匿名ブロックでは比較的まれですが、そのようなインジェクションには制限がなく、複数の会話を実装して何でもできるということは、ローカル ログインと何ら変わりません。
Oracle Web Hackingの3つの基本的な考え方
次の部分では、ターゲットを決定する方法について説明します。主に、データベースが Oracle に属するかどうかを決定する方法です。 --category の解釈はサポートしますが、個別の実装はサポートしません。多くの場合、Oracle には all_tables などの多くのシステム テーブルがあり、これらのテーブルにアクセスすることで、Oracle に属するかどうかを判断することもできます。たとえば、 || は Oracle では結合記号ですが、他のデータベースでは結合記号ではありません。 |chr(123)=chr(123)| |chr(123) 正常に実行できる場合は、Oracle である必要があります。また、一部のスクリプトはデータベース クエリ エラーが発生したときにエラー メッセージを処理せず、リークする可能性もあります。これは実際のバッキング データベースであることがはっきりとわかります。
次に緊急に決定する必要があるのは、注入ポイントのタイプです。通常、入力するパラメータは数値または単純な文字です (他の多くの人が検索タイプの注入と呼ぶものは、実際には文字として分類されます)。数字のカテゴリの場合は、何も考えずに、発話を正確に閉じるための解釈文字を追加するのが非常に簡単です。文字のカテゴリの場合は、発話全体を正確にする方法を考える必要があります。通常、独自の注入状況を整理するには、これらの注入文字を追加します。複数の SQL ワードやロジックにパラメーターが現れるなど、一部の複雑な状況では、状況に合わせてインジェクション ワードを慎重に構築する必要があります。必要なのは、さまざまな SQL コマンドを簡単に配置できる完全な環境だけであることを覚えておいてください。