ODAT
ODAT (Oracle Database Attacking Tool) هي أداة اختبار اختراق مفتوحة المصدر تختبر أمان قواعد بيانات Oracle عن بُعد.
أمثلة على استخدامات ODAT:
- لديك قاعدة بيانات Oracle تستمع عن بُعد وتريد العثور على SIDs و بيانات اعتماد صالحة للاتصال بقاعدة البيانات
- لديك حساب Oracle صالح على قاعدة بيانات وتريد رفع صلاحياتك لتصبح DBA أو SYSDBA
- لديك حساب Oracle وتريد تنفيذ أوامر النظام (مثل الصدفة العكسية) للتقدم على نظام التشغيل الذي يستضيف قاعدة البيانات
تم اختباره على Oracle Database 10g، 11g، 12c، 18c و 19c.
إصدار ODAT linux standalone على https://github.com/quentinhardy/odat/releases/. يُلاحظ أنه يُوصى باستخدام نسخة التطوير ( git clone)، فرع master-python3 (إصدار بايثون 3).
سجل التغييرات
- الإصدار 5.1.1 (27/04/2022):
- طباعة رسالة تحذير عند حدوث خطأ "ORA-12519 - TNS:no appropriate service handler found". يمكن تحفيز هذا الخطأ بواسطة خادم قاعدة البيانات (المستمع) عند إنشاء عدد كبير جداً من الاتصالات (على سبيل المثال، عند تخمين بيانات الاعتماد). في هذه الحالة، يجب استخدام خيار --sleep (مثل --sleep 0.2).
- الإصدار 5.1 (12/03/2021):
- خيار جديد في وحدة all: --nmap-file لتحميل جميع قواعد بيانات Oracle من ملف إخراج nmap بصيغة XML
- خيار جديد في وحدة all: -l لتحميل جميع الأهداف من ملف نصي (ip:port أو ip في كل سطر)
- في وحدة all، يتم الآن اختبار اتصال TCP على كل هدف قبل بدء اختبارات ODAT. يمكن استخدام --timeout-tcp-check لإدارة قيمة المهلة.
- في وحدة all، يتم الآن إجراء اختبار على كل هدف للتحقق من تكوين مستمع TNS بشكل صحيح. يتم هذا الاختبار بعد اختبار اتصال TCP.
- خيار عالمي جديد: --client-driver. يسمح بتعيين اسم العميل لاتصال قاعدة البيانات (client_driver من V$SESSION_CONNECT_INFO).
مفيد للتطبيقات التي لا يعرف المستخدمون النهائيون أن cx_Oracle قيد الاستخدام. القيمة الافتراضية الآن هي 'sql*plus'.
- يقبل ODAT الآن ملف sqlnet.ora. يوجد ملف افتراضي في conf/. تم تعيين مهلة اتصال TCP & OUTBOUND (TNS) إلى 60 ثانية افتراضياً الآن.
- الإصدار 5.0 (08/02/2021):
- وحدة جديدة مهمة: خادم أسماء الخدمة، للبحث عن أسماء الخدمات الصالحة. وحدة محددة باسم snguesser ومدمجة أيضاً في وحدة all. افتراضياً، تبحث وحدة all الآن عن جميع أسماء الخدمات الصالحة بعد البحث عن SIDs. يمكن أن تكون SIDs مطابقة لاسم الخدمة. عند العثور على اسم خدمة ولكن ليس SID، يمكن استخدام اسم الخدمة كـ SID للاتصال.
- خيار --basic-info في وحدة search للحصول على بعض المعلومات التقنية الأساسية حول قاعدة البيانات/المثيل. يحصل على اسم الخدمة، SID، قواعد البيانات، حالة Oracle Database Vault، حالة Java، اسم المضيف، عنوان IP للخادم، سياسة كلمة المرور، الصلاحيات النظامية الحالية، الأدوار الحالية، التصحيحات (عندما يكون الإصدار >= 12c والمستخدم متميز). يتطلب صلاحيات عالية للحصول على معلومات مثيرة للاهتمام (مثل سياسة كلمة المرور وحالة القفل).
- تم تنفيذ الصدفة العكسية في وحدة DbmsScheduler عندما يكون الهدف هو Windows. يبدأ خادم HTTP بسيط، ويجعل قاعدة بيانات Oracle تقوم بتنزيل كود powershell وتنفيذه عن بُعد. المستخدم لديه صدفة PS تفاعلية. يتم حذف الملف الذي تم تنزيله تلقائياً.
- خيار الذي تم تنفيذه في لتنزيل ملف نصي/ثنائي من هدف Windows.
الميزات
بفضل ODAT، يمكنك:
- البحث عن SID صالح على مستمع Oracle Database عن بُعد عبر:
- هجوم قاموس
- هجوم تخمين بالقوة
- 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 TRIGER (و CREATE PROCEDURE)
- ANALYZE ANY (و CREATE PROCEDURE)
- CREATE ANY INDEX (و CREATE PROCEDURE)
- إرسال/استقبال طلبات HTTP من خادم قاعدة البيانات باستخدام:
- مسح المنافذ للخادم المحلي أو خادم عن بُعد باستخدام:
- UTL_HTTP
- HttpUriType
- UTL_TCP
- التقاط مصادقة SMB عبر:
- استغلال بعض CVE:
- CVE-2012-3137
- الحصول على مفتاح الجلسة والملح للمستخدمين العشوائيين
- هجوم بواسطة القاموس على الجلسات
- CVE-2012-????: يمكن للمستخدم المصادق تعديل جميع الجداول التي يمكنه تحديدها حتى إذا كان لا يمكنه تعديلها عادةً (بدون صلاحية ALTER).
- CVE-2012-1675 (المعروف بهجوم تسميم TNS)
هذه القائمة ليست شاملة.
خريطة ذهنية - ODAT واختبارات اختراق Oracle Database

المنصات المدعومة والتبعيات
ODAT متوافق مع Linux فقط.
يوجد إصدار مستقل لتجنب الحاجة إلى تثبيت التبعيات (انظر https://github.com/quentinhardy/odat/releases/).
تم إنشاء الإصدار المستقل من ODAT بفضل pyinstaller.
إذا كنت ترغب في الحصول على نسخة التطوير المثبتة على جهازك، فإن الأدوات والتبعيات التالية مطلوبة:
- اللغة: Python 3
- تبعيات Oracle:
- Instant Oracle basic
- Instant Oracle sdk
- مكتبات بايثون:
- cx_Oracle
- passlib
- pycrypto
- python-scapy
- python-libnmap (جديد من بايثون 5.1)
- colorlog (موصى به)
- termcolor (موصى به)
- argcomplete (موصى به)
- pyinstaller (موصى به)
التثبيت (اختياري، لنسخة التطوير)
يصف هذا الجزء كيفية تثبيت instantclient و CX_Oracle وبعض مكتبات بايثون الأخرى على Ubuntu للحصول على نسخة التطوير من 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
-
الحصول على instant client basic، sdk (تطويري) و sqlplus من موقع Oracle الإلكتروني:
-
حالياً (03/2021)، إصدار instant client 11.2 من Oracle Database هو الأفضل إذا كنت ترغب في إنشاء الإصدار المستقل من ODAT باستخدام pyinstaller.
لاستخدام نسخة التطوير من ODAT، يمكن استخدام أحدث إصدار من عميل Oracle (مثل الإصدار 19).
-
تثبيت حزم python3-dev و alien و libaio1 (لـ sqlplus):
sudo apt-get install libaio1 python3-dev alien python3-pip
- إنشاء ملفات DEB من ملفات RPM باستخدام:
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
- وضع هذه الأسطر في ملف /etc/profile الخاص بك لتعريف متغيرات بيئة Oracle:
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'
يجب أن يعيد هذا الأمر فقط بدون أخطاء.
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