ODAT
ODAT(Oracle Database Attacking Tool)は、__Oracleデータベース__のセキュリティを__リモートから__テストするオープンソースの__ペネトレーションテスト__ツールです。
ODATの使用例:
- リモートでリスニングしているOracleデータベースがあり、有効な__SID__と__資格情報__を見つけてデータベースに接続したい場合
- データベース上に有効なOracleアカウントを持っており、DBAまたはSYSDBAになるために__権限を昇格__したい場合
- Oracleアカウントを持っており、データベースをホストするオペレーティングシステム上で前進するために__システムコマンドを実行__したい場合(例:リバースシェル)
Oracle Database 10g、11g、12c、18c、__19c__でテスト済み。
__ODAT Linux スタンドアロン__版は https://github.com/quentinhardy/odat/releases/ にあります。開発版(git clone)、master-python3 ブランチ(Python 3版)を使用することを推奨します。
変更履歴
- バージョン 5.1.1 (2022/04/27):
- "ORA-12519 - TNS:no appropriate service handler found" が発生した場合に警告メッセージを表示するようになりました。このエラーは、データベースサーバー(リスナー)が多数の接続(例:資格情報のブルートフォース時)を受け付けた場合にトリガーされる可能性があります。その場合は、--sleep オプション(例:--sleep 0.2)を使用してください。
- バージョン 5.1 (2021/03/12):
- all モジュールに新しいオプションを追加: --nmap-file:nmap XML出力ファイルからすべてのOracleデータベースを読み込むため
- all モジュールに新しいオプション: -l:テキストファイルからすべてのターゲットを読み込むため(各行に ip:port または ip)
- all モジュールでは、ODATテストを開始する前に各ターゲットにTCP接続がテストされるようになりました。タイムアウト値の管理には --timeout-tcp-check が使用できます。
- all モジュールでは、TCP接続テストの後、各ターゲットでTNSリスナーが適切に設定されているかどうかをチェックするテストが行われるようになりました。
- 新しいグローバルオプション: --client-driver。データベース接続のクライアント名(V$SESSION_CONNECT_INFO の client_driver)を設定できます。エンドユーザーが cx_Oracle の使用を認識していないアプリケーションに便利です。デフォルトは 'sql*plus' になりました。
- ODAT は sqlnet.ora ファイルを受け付けるようになりました。デフォルトのファイルは conf/ にあります。TCP および OUTBOUND (TNS) 接続のタイムアウトがデフォルトで60秒に設定されました。
- バージョン 5.0 (2021/02/08):
- 重要な新しいモジュール: Service Name Guesser。有効なサービス名を検索します。専用モジュール snguesser と、all モジュールにも統合されています。デフォルトでは、all モジュールはSID検索後にすべての有効なサービス名を検索します。SIDはサービス名と同じになる場合があります。サービス名が見つかったがSIDが見つからない場合、サービス名を接続用のSIDとして使用できます。
- search モジュールに --basic-info オプションを追加。データベース/インスタンスに関する基本的な技術情報を取得します。サービス名、SID、データベース、Oracle Database Vault のステータス、Java のステータス、ホスト名、サーバーのIPアドレス、パスワードポリシー、現在のシステム権限、現在のロール、パッチ(12c以上で特権ユーザーの場合)などを取得します。非常に興味深い情報を取得するには高い権限が必要です(例:パスワードポリシーとロックステータス)。
- 対象がWindowsの場合、DbmsScheduler モジュールにリバースシェルを実装。最小限のHTTPサーバーを起動し、Oracle Database にPowerShellコードをダウンロードさせ、リモートで実行します。ユーザーは対話型のPSシェルを使用できます。ダウンロードされたファイルは自動的に削除されます。
- DbmsScheduler に --make-download オプションを実装。Windows ターゲットにスクリプト/バイナリファイルをダウンロードさせるため。
- DbmsScheduler モジュールの出力におけるバグ修正(printOSCmdOutput())。
- DbmsScheduler モジュールの説明を改善(オプション)。
- バージョン 4.3 (2020/06/28):
- 新しいオプション: --both-ul。資格情報ファイルで行われていない場合、各パスワードを小文字と大文字の両方で試行します。
- 新しいオプション: --random-order。アカウントをランダムな順序でテストします。デフォルトではテキストファイルの順序を使用します。
- デフォルトですべてのパスワードが小文字でテストされるようになりました(アカウントファイルが大文字から小文字に変更されました)。
- いくつかの新しいアカウント。
- バージョン 4.2 (2020/02/04):
- search モジュールに最小限の対話型SQLシェル。
- DbmsXslprocessor モジュールで DBMS_XSLPROCESSOR.read2clob を使用したファイルダウンロードの新機能。
- 認証後のリモートOS取得の改善。
- バグ修正(例:ターミナルサイズ)。
- バージョン 4.1 (2020/01/15):
- SIDではなくSERVICE NAMEを使用した接続オプション。
- 一部の操作(例:NVARCHAR2 と NCLOB、VARCHAR2 と CLOB)でエンコーディングをデフォルトでUTF-8に設定。
- 複数のバグ修正(エンコード問題)。
- バージョン 4.0 (2019/08/10):
- バージョン 3.0 (2019/01/09):
- Oracle Database 18c との互換性。
- Java モジュールにシェルへのパスを設定する新しいオプション(例:CentOS では /usr/bin/sh)。
- バージョン 2.3.2 (2019/07/16):
- バージョン 2.3.1 (2018/08/10):
- バージョン 2.3 (2018/03/06):
- バグ修正:
- passwordguesser モジュールで一部のデータベース資格情報が検出されない問題(SYSDBA/SYSOPER として接続を試行する前)。重要なバグ修正!
- smb モジュールの PPoutput 欠落(dirkjanm に感謝)。
- tnspoison モジュールの偽陽性。
- VSNNUM からバージョンを取得できないことがある問題。
- 改善:
- アカウントのブルートフォース時のパフォーマンス向上。
- TNS 接続文字列を使用した接続オプション。
- アカウントファイルに新しい自明な資格情報。
- dbmsLob モジュールの読み取りファイル方法を改善(omair2084 に感謝)。
- バージョン 2.2.1 (2017/04/12):
- バグ修正:
- tnscmd のバージョン(情報)。
- External モジュール(Oracle エラーのキャッチ)。
- "connection to server failed" 時のエラーキャッチ。
- Tnscmd: "The server SID must be given with the '-d SID' option
- tnspoison モジュールの TypeError バグ修正。
- ポートが1521以外の場合の TNS ポイズニングモジュール(整数バグ)。
- 改善:
- バージョン 2.2 (2016/03/25):
- TNS リスナーポイズニング攻撃(CVE-2012-1675)を悪用する新しいモジュール(tnspoison)。Joxean Koret 氏と donctl 氏に多大な感謝。
- いくつかのバグ修正。
- ヘルプメニューの改善。
- ODAT リポジトリ内の WIKI ページ。
- バージョン 2.1 (2016/03/04) :
- いくつかのCVE(Common Vulnerabilities and Exposures)を悪用する新しいモジュール(cve)。現在実装されているのは CVE-2012-3137(おそらくこの番号、確かではありません): 認証されたユーザーは、通常は変更できないテーブルでも、選択可能なすべてのテーブルを変更できます(ALTER 権限なし)。
- リモート認証攻撃用の新しいオプション(--accounts-files)。ログインリストとパスワードリストの2つの別個のファイルを使用します。
- oclHashcat 互換性のために 10g のパスワードを表示。
- バグ修正(nc でのリスニング)。
- バージョン 2.0 (2016/02/21) :
- Oracle ユーザーのシステム権限(例:CREATE ANY PROCEDURE)を利用して特権アクセス(すなわち DBA)を取得する新しいモジュール(privesc)。このバージョンで ODAT が利用できるシステム権限:
- CREATE ANY PROCEDURE: APEX_040200 の権限で任意のリクエストを実行(例:Oracle ユーザーのパスワード変更)
- CREATE PROCEDURE および EXECUTE ANY PROCEDURE: SYS として任意のリクエストを実行(例:ユーザーに DBA ロールを付与)
- CREATE ANY TRIGGER(および CREATE PROCEDURE): SYS として任意のリクエストを実行(例:ユーザーに DBA ロールを付与)
- ANALYZE ANY(および CREATE PROCEDURE): SYS として任意のリクエストを実行(例:ユーザーに DBA ロールを付与)
- CREATE ANY INDEX(および CREATE PROCEDURE): SYS として任意のリクエストを実行(例:ユーザーに DBA ロールを付与)
- privesc モジュールを使用して、付与されたすべてのシステム権限とロールを取得できます。特権アクセスを取得するために利用可能なシステム権限を表示します。
- 新しいオプション(-vvv)。デバッグ時に ODAT が送信する SQL リクエストを表示します。
- スタンドアロン版は releases に移動しました(https://github.com/quentinhardy/odat/releases/)。
- バージョン 1.6 (2015/07/14) :
- ターゲットが TNS ポイズニング(CVE-2012-1675)に対して脆弱かどうかを検出する新機能。
- unwrapper という新しいモジュール。ラップされたPL/SQLソースコードをファイルまたはリモートデータベースからアンラップします。
- いくつかの改善。
- バージョン 1.5 (2015/03/17) :
- カラム名を検索するための search という新しいモジュール。
- いくつかの改善(例:テーブルの出力)。
- 新しいオプション:出力エンコーディング。
- バージョン 1.4 (2014/12/07) :
- いくつかの偽陽性を修正。
- CVE-2012-3137 モジュールの改善:脆弱性が悪用可能かどうかをより簡単にチェック。
- バージョン 1.3 (2014/10/07) :
- all モジュールに -C オプションを追加。このモジュールは資格情報を含むファイルを使用するために使用できます(-U および -P オプションを無効化)。
- tnscmd モジュールを追加。TNS エイリアス、データベースバージョン(VSNNUM を使用)、TNS ステータスを取得します。
- バグ修正:名前サーバーを -s オプションに指定可能に。
- バージョン 1.2 (2014/08/08) :
- SMB 認証をキャプチャする SMB モジュールを追加。
- Constants.py にオプション(SHOW_SQL_REQUESTS_IN_VERBOSE_MODE)を追加。データベースサーバーに送信される SQL リクエストを表示します。
- バージョン 1.1 (2014/07/28) :
- DBMS_LOB モジュールを追加。Oracle Database を介してリモートサーバーに保存されたファイルをダウンロードするのに便利。
- バグ修正:Java ソースコード:"getenv no longer supported, use properties and -D instead"
- バージョン 1.0 (2014/06/26) :
機能
ODAT を使用すると、以下が可能です: