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 تفاعلية. يتم حذف الملف الذي تم تنزيله تلقائياً.
- خيار --make-download الذي تم تنفيذه في DbmsScheduler لتنزيل ملف نصي/ثنائي من هدف Windows.
- إصلاح خطأ في المخرجات في وحدة DbmsScheduler (printOSCmdOutput()).
- شرح أفضل في وحدة DbmsScheduler (الخيارات).
- الإصدار 4.3 (28/06/2020):
- خيار جديد: --both-ul. يحاول كل كلمة مرور بحالة الأحرف الصغيرة والكبيرة إذا لم يتم ذلك في ملف (ملفات) بيانات الاعتماد
- خيار جديد: --random-order. اختبار الحسابات بترتيب عشوائي. افتراضياً، يستخدم ترتيب الملف النصي
- يتم الآن اختبار جميع كلمات المرور بحالة الأحرف الصغيرة افتراضياً (تم تعديل ملفات الحسابات من الأحرف الكبيرة إلى الصغيرة)
- بعض الحسابات الجديدة
- الإصدار 4.2 (04/02/2020):
- صدفة SQL تفاعلية بسيطة في وحدة search
- ميزة جديدة لتنزيل الملفات باستخدام DBMS_XSLPROCESSOR.read2clob في وحدة DbmsXslprocessor
- تحسين للحصول على نظام التشغيل عن بُعد بعد المصادقة
- إصلاح أخطاء (مثل حجم الطرفية)
- الإصدار 4.1 (01/15/2020):
- خيار للاتصال باستخدام SERVICE NAME بدلاً من SID
- تعيين الترميز إلى UTF-8 افتراضياً لبعض العمليات (مثل NVARCHAR2 و NCLOB، VARCHAR2 و CLOB)
- إصلاحات متعددة للأخطاء (مشاكل الترميز)
- الإصدار 4.0 (08/10/2019):
- Odat مع بايثون 3، إصدار مستقر
- الإصدار 3.0 (01/09/2019):
- متوافق مع Oracle Database 18c
- خيار جديد في وحدة Java لتعيين المسار إلى الصدفة (مثل /usr/bin/sh عند CentOS)
- الإصدار 2.3.2 (16/07/2019):
- إصلاحات الأخطاء:
- جدول خارجي ونتائج سلبية خاطئة
- الإصدار 2.3.1 (10/08/2018):
- الإصدار 2.3 (06/03/2018):
- إصلاحات الأخطاء:
- لم يتمكن بعض بيانات اعتماد قاعدة البيانات من الاكتشاف في وحدة passwordguesser (عند محاولة الاتصال كـ SYSDBA/SYSOPER من قبل). إصلاح خطأ مهم!
- PPoutput المفقود في وحدة smb (شكراً لـ dirkjanm)
- نتيجة إيجابية خاطئة في وحدة tnspoison
- في بعض الأحيان، يستحيل الحصول على الإصدار من VSNNUM
- التحسينات:
- تحسينات الأداء عند تخمين الحسابات.
- خيار للاتصال باستخدام سلسلة اتصال TNS
- بيانات اعتماد تافهة جديدة في ملف الحسابات
- طريقة أفضل لقراءة الملف في وحدة dbmsLob (شكراً لـ omair2084)
- الإصدار 2.2.1 (12/04/2017):
- إصلاحات الأخطاء:
- الإصدار في tnscmd (معلومة)
- وحدة خارجية (التقاط خطأ Oracle)
- التقاط خطأ عند "فشل الاتصال بالخادم"
- Tnscmd: "يجب إعطاء SID الخادم مع الخيار '-d SID'
- إصلاح خطأ TypeError في وحدة tnspoison
- وحدة تسميم TNS عندما المنفذ !=1521 (خطأ عدد صحيح)
- التحسينات:
- الإصدار 2.2 (25/03/2016):
- وحدة جديدة (tnspoison) لاستغلال هجوم تسميم مستمع TNS (CVE-2012-1675). شكر كبير لـ Joxean Koret و donctl.
- بعض إصلاحات الأخطاء
- قائمة مساعدة أفضل
- صفحات WIKI في مستودع ODAT
- الإصدار 2.1 (04/03/2016) :
- وحدة جديدة (cve) لاستغلال بعض CVE (الثغرات ونقاط الضعف الشائعة). تم تنفيذ CVE-2012-3137 (ربما هذا الرقم، لست متأكداً...) حالياً: يمكن للمستخدم المصادق تعديل جميع الجداول التي يمكنه تحديدها حتى إذا كان لا يمكنه تعديلها عادةً (بدون صلاحية ALTER).
- خيار جديد (--accounts-files) لهجوم المصادقة عن بُعد الذي يستخدم ملفين منفصلين: قائمة تسجيل الدخول وقائمة كلمات المرور.
- طباعة كلمات مرور 10g للتوافق مع oclHashcat.
- إصلاح الأخطاء (الاستماع باستخدام nc).
- الإصدار 2.0 (21/02/2016) :
- وحدة جديدة (privesc) لاستخدام صلاحيات النظام لمستخدم Oracle (مثل CREATE ANY PROCEDURE) من أجل الحصول على وصول متميز (أي DBA). صلاحيات النظام التي يمكن استخدامها بواسطة ODAT في هذا الإصدار:
- CREATE ANY PROCEDURE: تنفيذ طلبات عشوائية بصلاحيات APEX_040200 (مثل تعديل كلمات مرور مستخدمي Oracle)
- CREATE PROCEDURE و EXECUTE ANY PROCEDURE: تنفيذ طلبات عشوائية كـ SYS (مثل منح دور DBA لمستخدم)
- CREATE ANY TRIGER (و CREATE PROCEDURE): تنفيذ طلبات عشوائية كـ SYS (مثل منح دور DBA لمستخدم)
- ANALYZE ANY (و CREATE PROCEDURE): تنفيذ طلبات عشوائية كـ SYS (مثل منح دور DBA لمستخدم)
- CREATE ANY INDEX (و CREATE PROCEDURE): تنفيذ طلبات عشوائية كـ SYS (مثل منح دور DBA لمستخدم)
- يمكن استخدام وحدة privesc للحصول على جميع صلاحيات النظام والأدوار الممنوحة. يُظهر صلاحيات النظام التي يمكن استخدامها للحصول على وصول متميز.
- خيار جديد (-vvv) لعرض طلبات SQL التي يرسلها ODAT في وضع التصحيح
- تم نقل الإصدار المستقل إلى releases (https://github.com/quentinhardy/odat/releases/)