المساعد الشخصي الرقمي

مشاهدة النسخة كاملة : [تنبيه] تحليل منتج الحماية issw وإثبات فشله عدا في شئ واحد


اشراق العالمrss
02-24-2009, 06:30 PM
السلام عليكم ورحمة الله وبركاته

كتبت موضوعي هذا بعد أن رأيت رد الاخ صاحب الهاك على هذا الرابط
http://www.swalif.net/softs/swalif-1838397-39.html

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


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

عزيزي صاحب الهاك

دعني أحلل المنتج الخاص بك لأثبت لك أن طريقتك في البرمجة فاشلة :)
وأرجوك.. رحم الله امرؤ عرف قدر نفسه فلا تجعل من نفسك أعلى العالين وتظن أنك على حق والبقية على خطأ

نبدأ باسم الله تعالى

أول أسطر المنتج:
رمز PHP:
$MonitorPages=array();
$MonitorPages[]="newthread";
$MonitorPages[]="newreply";
$MonitorPages[]="postings";
$MonitorPages[]="editpost";
$MonitorPages[]="inlinemod";
// thes con n3d
if (THIS_SCRIPT && in_array(THIS_SCRIPT, $MonitorPages)){



أول شئ .. لماذا لم تكتفي بهذا الكود التالي البسيط ؟ لماذا كل تلك الزحمة ؟
ولماذا وضعت أمرين للتحقق من الشرط مع أنه يمكنك الإكتفاء بالأمر الثاني !!

رمز PHP:
if (in_array(THIS_SCRIPT, array('newthread', 'newreply', 'postings', 'editpost', 'inlinemod'))){



أم أن زيادة الجرعة الوهمية في البرمجة تظن أنك قد قمت بزيادة نسبة الحماية ؟


المهم
ننتقل إلى عمل الكود التالي

رمز PHP:
// slo see
if (isset($_REQUEST['title'])){
$_REQUEST['title']=remove_html_tags($_REQUEST['tit le']);
}

if (isset($_GET['title'])){
$_GET['title']=remove_html_tags($_GET['title']);
}

if (isset($_POST['title'])){
$_POST['title']=remove_html_tags($_POST['title']);
}
// too 2 see sub )- :
if (isset($_REQUEST['subject'])){
$_REQUEST['subject']=remove_html_tags($_REQUEST['s ubject']);
}

if (isset($_GET['subject'])){
$_GET['subject']=remove_html_tags($_GET['subject'] );
}

if (isset($_POST['subject'])){
$_POST['subject']=remove_html_tags($_POST['subject ']);
}



حشو زايد بكثرة لا أعلم لماذا مع العلم أنه بإمكانك الإختصار إلى هذا الكود:

رمز PHP:
if (isset($_REQUEST['title'])){
$_REQUEST['title']=remove_html_tags($_REQUEST['tit le']);
}

if (isset($_REQUEST['subject'])){
$_REQUEST['subject']=remove_html_tags($_REQUEST['s ubject']);
}



أم أنك لا تعلم أن $_REQUEST يحمل قيم $_GET و $_POST كلاهما ؟

أيضاً أرى أنك قمت بعملية فلترة للـ title والـ subject .. مع العلم أن subject لاتوجد إلا في newthread تحت مسمى الـ title بهذا الشكل:
رمز PHP:
$newpost['title'] =& $vbulletin->GPC['subject'];



إذاً الفلترة فقط طبقت بكل الأحوال على title
رح شف وش فايدة دالة verify_title داخل ملف class_dm_threadpost.php وكيف يستدعى بواسطة دالة verify داخل ملف class_dm.php :)
هل تتوقع أن مبرمجين vBulletin أغبياء لهذه الدرجة لكي يتركوا الـ title تمر دون فلترة من قبلهم؟

حتى الإعلانات نفسها لايمكن استغلالها حيث قاموا بترقيع الثغرة من سنة جدي
تبي الدليل ؟ افتح ملف announcement.php وابحث عن السطر التالي:

رمز PHP:
$anncdata->set('title', $vbulletin->GPC['title']);



هكذا إذاً !
لنذهب نبحث عن دالة set حتى نرى كيف تعمل !
وجدناه ! افتح ملف class_dm.php وابحث عن:
رمز PHP:
function set($fieldname, $value, $clean = true, $doverify = true)



انظر لداخل الدالة عن :
رمز PHP:
$verify = $this->verify($fieldname, $value, $doverify);



هنا اترك الباقي لك للبحث عن عمل دالة التحقق verify وكيف تقوم بالفلترة مع اني ماراح اتوقع انك تفهم شئ بعدها إذا لم تفهم مالفرق بين دالة die و exit :D


إذاً حتى الآن توصلنا إلى أن الأكواد البرمجية أعلاه كله لافائدة نهااائياً وبتاتاً سوى أكواد وجودها كـ عدمها

ننتقل إلى المرحلة الثانية وهي أكواد أغبى من سابقتها:
رمز PHP:
$vbulletin->templatecache["spacer_open"]="";
if ($show['old_explorer']){
$vbulletin->templatecache["spacer_open"].=addslashes(' ');
}else{
$vbulletin->templatecache["spacer_open"].=addslashes('

');
}

$vbulletin->templatecache["spacer_close"]="";
if ($show['old_explorer']){
$vbulletin->templatecache["spacer_close"].=addslashes(' ');
}else{
$vbulletin->templatecache["spacer_close"].=addslashes('




');
}

</div></div>أول شئ سؤال
مافائدة دالة addslashes إذا لم يكن يوجد بداخله متغير يتم إرساله من قبل شخص ما ؟

ثاني شئ
إذا أنك تظن أنك تقوم بترقيع الثغرة بهذا الطريقة فـ عليك إذاً عمل نفس الطريقة مع جميع القوالب لأنه بما أن الهكر يمكنهم حقن قالبي spacer_open و spacer_close فبإمكانهم كذلك حقن جميع القوالب وخصوصاً قالب FORUMHOME .. مالمانع؟

هنا لايوجد مانع سوى أنك توهم عملاءك وتغريهم بالحماية التامة بأكواد لافائدة لها نهائياً

مع العلم أني حتى الآن لا أفهم مالفرق بين قالبي spacer_open و spacer_close وبين قالبي header و footer في طريقة اختراق الثغرة المزعومة !! (لا أقصد الفرق شكلياً طبعاً)

لماذا لم تقم بنفس العمل مع قالبي header و footer أم أنك تتبع المثل (مع الخيل ياشقراء) ؟


ننتقل الآن إلى المرحلة الثالثة وهي الأكواد التركية وهذا الشئ الوحيد في منتجك الذي لا أعتبره فشلاً
هذه الأكواد لا بأس بها وأنصح بها سوى أنها متكررة بشكل فظيع جداً
يعني مثلاً لديك:

رمز PHP:
'cmd=', '%20cmd', 'cmd%20'



بإمكانك استغناءهم بهذا فقط (cmd) دون إضافة بعد أو قبل

كذلك:
رمز PHP:
'union%20', '%20union', 'union(', 'union='



بإمكانك استغناءهم بهذا فقط (union) دون إضافة بعد أو قبل


وغيرها الكثير من القيم الزايدة


هذا مالدي حالياً


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


هذا وصلى الله على نبينا محمد وعلى آله وصحبه وسلم أجمعين

والسلام عليكم ورحمة الله وبركاته</div>