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。アカウントをランダムな順序でテストします。デフォルトではテキストファイルの順序を使用します。
機能
ODAT を使用すると、以下が可能です:
- リモート Oracle Database リスナー上の有効な SID を検索:
- 辞書攻撃
- ブルートフォース攻撃
- リスナーの ALIAS
- Oracle アカウント を検索:
- 辞書攻撃
- 各 Oracle ユーザーをパスワードとして使用(この攻撃を使用するには事前にアカウントが必要)
- データベースサーバー上で システムコマンドを実行:
- DBMS_SCHEDULER
- JAVA
- 外部テーブル
- oradbg
- データベースサーバーに保存された ファイルをダウンロード:
- UTL_FILE
- DBMS_XSLPROCESSOR
- 外部テーブル
- CTXSYS
- DBMS_LOB
- データベースサーバーに ファイルをアップロード:
- UTL_FILE
- DBMS_XSLPROCESSOR
- DBMS_ADVISOR
- ファイルを削除:
- 以下のシステム権限の組み合わせを使用して 特権アクセスを取得(privesc モジュールコマンドのヘルプを参照):
- CREATE ANY PROCEDURE
- CREATE PROCEDURE および EXECUTE ANY PROCEDURE
- CREATE ANY TRIGGER(および CREATE PROCEDURE)
- ANALYZE ANY(および CREATE PROCEDURE)
- CREATE ANY INDEX(および CREATE PROCEDURE)
- データベースサーバーから HTTP リクエストを送信/受信:
- ローカルサーバーまたはリモートサーバーの ポートをスキャン:
- UTL_HTTP
- HttpUriType
- UTL_TCP
- SMB 認証をキャプチャ:
- いくつかの CVE を悪用:
- search モジュールを使用して カラム名を検索:
- PL/SQL ソースコードの アンラップ(10g/11g および 12c)
- システム権限 と 付与されたロール を取得。付与されたロールの権限やロールも取得可能。
このリストは網羅的ではありません。
マインドマップ - ODAT & Oracle Database ペンテスト

サポート対象プラットフォームと依存関係
ODAT は Linux のみに対応しています。
依存関係をインストールする必要がない スタンドアロン版 があります(https://github.com/quentinhardy/odat/releases/ を参照)。ODAT スタンドアロンは pyinstaller を使用して生成されました。
コンピュータに 開発版 をインストールする場合は、以下のツールと依存関係が必要です:
- 言語: Python 3
- Oracle 依存関係:
- Instant Oracle basic
- Instant Oracle sdk
- Python ライブラリ:
- cx_Oracle
- passlib
- pycrypto
- python-scapy
- python-libnmap(Python 5.1 からの新機能)
- colorlog(推奨)
- termcolor(推奨)
- argcomplete(推奨)
- pyinstaller(推奨)
インストール(オプション、開発版用)
このパートでは、Ubuntu に instantclient、CX_Oracle およびその他の Python ライブラリをインストールして、ODAT 開発版を利用する方法を説明します。ODAT スタンドアロン版が https://github.com/quentinhardy/odat/releases/ に存在することを忘れないでください: スタンドアロン版を使用するために何かをインストールする必要はありません。
- リポジトリをクローンして ODAT ソースコードを取得:
git clone https://github.com/quentinhardy/odat.git
- このリポジトリ内の wiki ページを更新して、ローカルに ODAT ドキュメントを取得:
cd odat/
git submodule init
git submodule update
-
Oracle Web サイトから instant client basic、sdk(devel)、sqlplus を取得:
-
現時点(2021年3月)では、pyinstaller で ODAT スタンドアロンを生成する場合、Oracle Database instant client バージョン 11.2 が最適です。ODAT 開発版を使用する場合は、最新の Oracle クライアントバージョン(例:バージョン 19)を使用できます。
-
python3-dev、alien、libaio1 パッケージをインストール(sqlplus 用):
sudo apt-get install libaio1 python3-dev alien python3-pip
sudo alien --to-deb oracle-instantclient19.3-basic-???.x???.rpm
sudo alien --to-deb oracle-instantclient19.3-devel-???.x???.rpm
- instant client basic、sdk、sqlplus をインストール:
sudo dpkg -i oracle-instantclient19.3-basic-???.x???.deb
sudo dpkg -i oracle-instantclient19.3-devel_???_???.deb
- Oracle env 変数を定義するために、以下の行を /etc/profile ファイルに追加:
export ORACLE_HOME=/usr/lib/oracle/19.3/client64/
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib
export PATH=${ORACLE_HOME}bin:$PATH
/usr/lib/oracle/19.3/client64/lib/
sudo -s
source /etc/profile
pip3 install cx_Oracle
python3 -c 'import cx_Oracle'
このコマンドはエラーなしで 単に戻る はずです。
- いくつかの Python ライブラリをインストール:
sudo apt-get install python3-scapy
sudo pip3 install colorlog termcolor pycrypto passlib python-libnmap
sudo pip3 install argcomplete && sudo activate-global-python-argcomplete
エラーがなければ良い仕事です:)
ドキュメントと例
ドキュメントと例は WIKI にあります。
寄付
もし私の活動を支援したいのであれば、寄付をいただけると大変感謝します:
- BTC 経由: 36FugL6SnFrFfbVXRPcJATK9GsXEY6mJbf